static inline void data_addr_to_fs_settings(struct net_if *iface, struct in6_addr *dst, struct ieee802154_fcf_seq *fs, struct ieee802154_frame_params *params) { struct net_nbr *nbr; bool broadcast; fs->fc.dst_addr_mode = get_dst_addr_mode(iface, dst, &nbr, &broadcast); if (fs->fc.dst_addr_mode != IEEE802154_ADDR_MODE_NONE) { fs->fc.pan_id_comp = 1; if (broadcast) { params->dst.short_addr = IEEE802154_BROADCAST_ADDRESS; params->dst.len = IEEE802154_SHORT_ADDR_LENGTH; } else { struct net_linkaddr_storage *addr; /* ToDo: Handle short address in nbr */ addr = net_nbr_get_lladdr(nbr->idx); params->dst.ext_addr = addr->addr; params->dst.len = IEEE802154_EXT_ADDR_LENGTH; } } if (fs->fc.dst_addr_mode == IEEE802154_ADDR_MODE_SHORT && !broadcast) { fs->fc.src_addr_mode = IEEE802154_ADDR_MODE_SHORT; } else { fs->fc.src_addr_mode = IEEE802154_ADDR_MODE_EXTENDED; } }
static inline bool data_addr_to_fs_settings(struct net_linkaddr *dst, struct ieee802154_fcf_seq *fs, struct ieee802154_frame_params *params) { bool broadcast; fs->fc.dst_addr_mode = get_dst_addr_mode(dst, &broadcast); if (fs->fc.dst_addr_mode != IEEE802154_ADDR_MODE_NONE) { fs->fc.pan_id_comp = 1; if (broadcast) { params->dst.short_addr = IEEE802154_BROADCAST_ADDRESS; params->dst.len = IEEE802154_SHORT_ADDR_LENGTH; } else { params->dst.ext_addr = dst->addr; params->dst.len = dst->len; } } if (fs->fc.dst_addr_mode == IEEE802154_ADDR_MODE_SHORT && !broadcast) { fs->fc.src_addr_mode = IEEE802154_ADDR_MODE_SHORT; } else { fs->fc.src_addr_mode = IEEE802154_ADDR_MODE_EXTENDED; } return broadcast; }