nes-proj/drivers/platform/nrf52dk/README-BLE-6LoWPAN.md

3.0 KiB

This README contains information how to establish an IPv6 connecton between Linux BLE router and an IPSP enabled BLE device.

Prerequisites

In general, any device capable of running Linux operating system, can be used as a BLE router provided the following conditions are met:

  • Linux Kernel >3.18 is used
  • bluez, libcap-ng0, radvd tools are present.

If a built-in Bluetooth device is not available then Bluetooth 4.0 compatible USB dongle can be used.

The following procedures have been tested on Ubuntu 15.10.

Establishing an IPv6 connection

Use the following procedure to establish a connection between an nRF52 device and Linux router:

First enable 6LoWPAN module. This is neccessary only once per session:

# Log in as a root user.
sudo su

# Mount debugfs file system.
mount -t debugfs none /sys/kernel/debug

# Load 6LoWPAN module.
modprobe bluetooth_6lowpan

# Enable the bluetooth 6lowpan module.
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

# Look for available HCI devices.
hciconfig

# Reset HCI device - for example hci0 device.
hciconfig hci0 reset

# Read 00:AA:BB:XX:YY:ZZ address of the nRF5x device.
hcitool lescan

If you see device name and address in lescan output then you can connect to the device:

echo "connect 00:AA:BB:XX:YY:ZZ 1" > /sys/kernel/debug/bluetooth/6lowpan_control

If above is successful then LED1 will stop blinking and LED2 will switch on. You can then check the connection using the following commands:

# Check if bt0 interface is present and up
ifconfig

# Try to ping the device using its link-local address, for example, on bt0 interface.
ping6 -I bt0 fe80::2aa:bbff:fexx:yyzz

If you'd like to learn more about the procedure please refer to Connecting devices to the router.

Distributing routable IPv6 prefix

In Linux, Router Advertisement Daemon (RADVD) can be used to distribute prefixes in the network, hance configure routable IPv6 address.

To configure RADVD create /etc/radvd.conf file and paste the following contents:

interface bt0
{
    AdvSendAdvert on;
    prefix 2001:db8::/64
    {
        AdvOnLink off;
        AdvAutonomous on;
        AdvRouterAddr on;
    };
};

Next, start RADVD daemon:

# Set IPv6 forwarding (must be present).
sudo echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
# Run radvd daemon.
sudo service radvd restart

If successfull then all devices connected to the host will receive a routable 2001:db8 prefix.

This can be verified by sending echo request to the full address:

ping6 -I bt0 2001:db8::2aa:bbff:fexx:yyzz

where aa:bbff:fexx:yyzz is device Bluetooth address.

If you'd like to learn more about the procedure please refer to Distributing a global IPv6 prefix.