6lowpan: Change byte order when storing/accessing u16 tag
authorTony Cheneau <tony.cheneau@amnesiak.org>
Wed, 11 Jul 2012 06:51:15 +0000 (06:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Jul 2012 05:51:15 +0000 (22:51 -0700)
The tag field should be stored and accessed using big endian byte order (as
intended in the specs). Or else, when displayed with a trafic analyser, such a
Wireshark, the field not properly displayed (e.g. 0x01 00 instead of 0x00 01,
and so on).

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

index 416a54d31fb2088360a713e772374fef7fbe12c8..536c6e21b20ea181248e096baa95ce989ae24098 100644 (file)
@@ -302,7 +302,7 @@ static inline int lowpan_fetch_skb_u16(struct sk_buff *skb, u16 *val)
        if (unlikely(!pskb_may_pull(skb, 2)))
                return -EINVAL;
 
-       *val = skb->data[0] | (skb->data[1] << 8);
+       *val = (skb->data[0] << 8) | skb->data[1];
        skb_pull(skb, 2);
 
        return 0;
@@ -1006,8 +1006,8 @@ lowpan_skb_fragmentation(struct sk_buff *skb)
        /* first fragment header */
        head[0] = LOWPAN_DISPATCH_FRAG1 | (payload_length & 0x7);
        head[1] = (payload_length >> 3) & 0xff;
-       head[2] = tag & 0xff;
-       head[3] = tag >> 8;
+       head[2] = tag >> 8;
+       head[3] = tag & 0xff;
 
        err = lowpan_fragment_xmit(skb, head, header_length, 0, 0);