]> git.baikalelectronics.ru Git - kernel.git/commit
6lowpan: Uncompression of traffic class field was incorrect
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Wed, 13 Nov 2013 09:03:39 +0000 (11:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 15 Nov 2013 08:11:06 +0000 (03:11 -0500)
commitd0c3982598c161483cab644d2f5e98af55309fbd
tree642411b179ceffd508f30e78fc94125a3d35e7cb
parentd80769264fb13d6d57e72a8347f2f5397a6b8dad
6lowpan: Uncompression of traffic class field was incorrect

If priority/traffic class field in IPv6 header is set (seen when
using ssh), the uncompression sets the TC and Flow fields incorrectly.

Example:

This is IPv6 header of a sent packet. Note the priority/TC (=1) in
the first byte.

00000000: 61 00 00 00 00 2c 06 40 fe 80 00 00 00 00 00 00
00000010: 02 02 72 ff fe c6 42 10 fe 80 00 00 00 00 00 00
00000020: 02 1e ab ff fe 4c 52 57

This gets compressed like this in the sending side

00000000: 72 31 04 06 02 1e ab ff fe 4c 52 57 ec c2 00 16
00000010: aa 2d fe 92 86 4e be c6 ....

In the receiving end, the packet gets uncompressed to this
IPv6 header

00000000: 60 06 06 02 00 2a 1e 40 fe 80 00 00 00 00 00 00
00000010: 02 02 72 ff fe c6 42 10 fe 80 00 00 00 00 00 00
00000020: ab ff fe 4c 52 57 ec c2

First four bytes are set incorrectly and we have also lost
two bytes from destination address.

The fix is to switch the case values in switch statement
when checking the TC field.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ieee802154/6lowpan.c