This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Issue pinging nRF52 DK with 6loWPAN over BLE

Hi all,

I've been testing 6loWPAN over BLE with the nRF52 DK (nRF52832) using the IPSP sample code from Zephyr OS, and have managed to successfully flash the code and establish a connection over BLE.
When I attempt to ping the device using the link-local IPv6 address, however, I am met with the "Destination unreachable:address unreachable" error.

At this point, I'm only trying to ping the link-local address and am not doing any routing/global IP assignment (i.e. ignoring radvd for now).

I have tested this on a RPi 3B+ (with Raspbian Stretch lite, kernel 4.14), and my laptop (Ubuntu 18.04, kernel 4.15.0-33), both of which support BLE/Bluetooth 4.0+, and both of which get the same error.

I've been following the steps as per "Nordic Infocentre - Setting up BLE 6LoWPAN Border Router""VisualGDB - Connecting the Nordic nRF52 chip to IPv6 networks via 6LoWPAN", and Zephyr OS - IPSP Sample which all follow a similar connection strategy, namely:

  1. Load bluetooth_6lowpan module.
  2. Enable 6lowpan with echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable
  3. Scan for devices with hcitool lescan
  4. Connect to the found nRF52 board with echo "connect <bdaddr> 2" > /sys/kernel/debug/bluetooth/6lowpan_control
  5. Ping device with ping6 -I bt0 <link-local addr from MAC>

Everything is successfully run up to the final step. I verified that the module was loaded with lsmod, verified the 6lowpan control interfaces existed under the given directory, and verified that the BLE connection was established by monitoring the state of the dev board over RTT. I have also tried pinging on both possible ways of determining the link-local address from the given MAC address depending on kernel version, i.e. whether or not we "xor 2" the rightmost byte. The MAC address of the dev board is EF:C7:EF:23:DA:66, and the two addresses I have tried are fe80::efc7:efff:fe23:da66 and fe80::edc7:efff:fe23:da66.

One odd point is that when I do a multicast ping with ping6 -I bt0 ff02::1, the board responds (along with the link-local address of the interface, as expected), but remains unreachable when I attempt to directly ping the same board address that responded. This is shown in the following images.

Multicast ping on bt0 interface

Ping board address

Another point that may be worth mentioning is the difference between the expected interface configuration and my own configuration (from ifconfig bt0). The "expected" configuration from guides I've seen. The following is the "expected" config, from the visualGDB tutorial linked above:

This is my config:

ifconfig of testing system

Of note is that the expected config has the "pointtopoint" flag for the interface set, whereas mine does not. I'm not sure if this is an issue (though it may be, as I believe it should be a point-to-point connection between the host and device) however I was unable to set the flag with ifconfig (using ifconfig bt0 -pointtopoint).

It's also worth noting that the issue I'm having is very similar to the issue asked in this other devzone thread here, however the solution in that case was to use the kernel 4.12+ method of determining the IPv6 address, which I have already tried.

I believe the issue here is not with the dev board itself, or the code, but with the host systems. This work is part of an assignment for a college course, so many other students have the same board and have been successful in pinging the board using the exact same steps carried out above.

Thanks!

Related