From 3c702d064b42fdfc93bcef503fc068cd9921f53f Mon Sep 17 00:00:00 2001 From: Jaap Keuter Date: Tue, 9 Feb 2010 08:40:40 +0000 Subject: [PATCH] From Owen Kirby: This patch fixes a bug in the 6LoWPAN dissector where link-local addresses created from an EUI-64 address do not correctly invert the universal/local bit as recommended by section 4 of RFC2464. svn path=/trunk/; revision=31843 --- epan/dissectors/packet-6lowpan.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/epan/dissectors/packet-6lowpan.c b/epan/dissectors/packet-6lowpan.c index daa112e41c..06eef8349f 100644 --- a/epan/dissectors/packet-6lowpan.c +++ b/epan/dissectors/packet-6lowpan.c @@ -464,6 +464,8 @@ lowpan_dlsrc_to_ifcid(packet_info *pinfo, guint8 *ifcid) /* 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; } @@ -476,6 +478,8 @@ lowpan_dlsrc_to_ifcid(packet_info *pinfo, guint8 *ifcid) 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) { @@ -509,6 +513,8 @@ lowpan_dldst_to_ifcid(packet_info *pinfo, guint8 *ifcid) /* 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; } @@ -521,6 +527,8 @@ lowpan_dldst_to_ifcid(packet_info *pinfo, guint8 *ifcid) 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) { -- 2.34.1