Bluetooth: 6LoWPAN: Fix MAC address universal/local bit handling
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Tue, 27 May 2014 08:33:22 +0000 (11:33 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 1 Jul 2014 03:11:59 +0000 (20:11 -0700)
commitab4910d04cdcce17e4d9af172ba80b2b05a0cdc2
treea9549b0f90b181c7edf18423b46f536fa7c2c2d9
parent79319c68a2b76ebe34fc69dd52c67d47c06b9413
Bluetooth: 6LoWPAN: Fix MAC address universal/local bit handling

commit 62bbd5b35994eaf30519f126765d7f6af9cd3526 upstream.

The universal/local bit handling was incorrectly done in the code.

So when setting EUI address from BD address we do this:
- If BD address type is PUBLIC, then we clear the universal bit
  in EUI address. If the address type is RANDOM, then the universal
  bit is set (BT 6lowpan draft chapter 3.2.2)
- After this we invert the universal/local bit according to RFC 2464

When figuring out BD address we do the reverse:
- Take EUI address from stateless IPv6 address, invert the
  universal/local bit according to RFC 2464
- If universal bit is 1 in this modified EUI address, then address
  type is set to RANDOM, otherwise it is PUBLIC

Note that 6lowpan_iphc.[ch] does the final toggling of U/L bit
before sending or receiving the network packet.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/bluetooth/6lowpan.c