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

100 lines
3.0 KiB
Markdown
Raw Normal View History

2016-01-09 13:44:39 +00:00
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].
* [Connecting devices to the router]: http://developer.nordicsemi.com/nRF5_IoT_SDK/doc/0.9.0/html/a00089.html
* [Distributing a global IPv6 prefix]: http://developer.nordicsemi.com/nRF5_IoT_SDK/doc/0.9.0/html/a00090.html