6lowpan: lowpan_is_iid_16_bit_compressable() does not detect compressible address...
authorTony Cheneau <tony.cheneau@amnesiak.org>
Mon, 25 Mar 2013 17:59:21 +0000 (17:59 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Mar 2013 16:37:55 +0000 (12:37 -0400)
The current test is not RFC6282 compliant. The same issue has been found
and fixed in Contiki. This patch is basically a port of their fix.

Signed-off-by: Tony Cheneau <tony.cheneau@amnesiak.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ieee802154/6lowpan.h

index bba5f8336317a178c5c7c073acd3bbfafde0e6b9..4b8f917658b52fa028200d9ec1ab788130ecd143 100644 (file)
  */
 #define lowpan_is_iid_16_bit_compressable(a)   \
        ((((a)->s6_addr16[4]) == 0) &&          \
-        (((a)->s6_addr16[5]) == 0) &&          \
-        (((a)->s6_addr16[6]) == 0) &&          \
-        ((((a)->s6_addr[14]) & 0x80) == 0))
+        (((a)->s6_addr[10]) == 0) &&           \
+        (((a)->s6_addr[11]) == 0xff) &&        \
+        (((a)->s6_addr[12]) == 0xfe) &&        \
+        (((a)->s6_addr[13]) == 0))
 
 /* multicast address */
 #define is_addr_mcast(a) (((a)->s6_addr[0]) == 0xFF)