/* Check the link-layer address field. */
if (pinfo->dl_src.type == AT_EUI64) {
memcpy(ifcid, pinfo->dl_src.data, LOWPAN_IFC_ID_LEN);
+ /* RFC2464: Invert the U/L bit when using an EUI64 address. */
+ ifcid[0] ^= 0x02;
return TRUE;
}
guint64 addr;
addr = pntoh64(&packet->src.addr64);
memcpy(ifcid, &addr, LOWPAN_IFC_ID_LEN);
+ /* RFC2464: Invert the U/L bit when using an EUI64 address. */
+ ifcid[0] ^= 0x02;
return TRUE;
}
if (packet->src_addr_mode == IEEE802154_FCF_ADDR_SHORT) {
/* Check the link-layer address field. */
if (pinfo->dl_dst.type == AT_EUI64) {
memcpy(ifcid, pinfo->dl_dst.data, LOWPAN_IFC_ID_LEN);
+ /* RFC2464: Invert the U/L bit when using an EUI64 address. */
+ ifcid[0] ^= 0x02;
return TRUE;
}
guint64 addr;
addr = pntoh64(&packet->dst.addr64);
memcpy(ifcid, &addr, LOWPAN_IFC_ID_LEN);
+ /* RFC2464: Invert the U/L bit when using an EUI64 address. */
+ ifcid[0] ^= 0x02;
return TRUE;
}
if (packet->src_addr_mode == IEEE802154_FCF_ADDR_SHORT) {