bluez5 PAN Setup
NOTE: This information only applies to devices with Bluetooth using mLinux™ 4.x or higher which has bluez5. For devices using mLinux 3.x, refer to Bluetooth.
BlueZ includes a utility called bluetoothctl.
bluetoothctl Tips
- bluetoothctl is space sensitive. If you have two spaces between a command and its argument, it will fail as follows:
[bluetooth] trust 5C:F3:70:74:04:AF Device 5C:F3:70:74:04:AF not available
- To exit bluetoothctl, type “quit” followed by the enter key.
In this case, the hex value is is the BD_ADDR (Bluetooth Device Address, similar to an ethernet MAC address) of the remote bluetooth device. If you get the Device not available message, look closely to verify the syntax. Otherwise, try again.
Authorize service [agent] Authorize service 0000000f-0000-1000-8000-00805f9b34fb (yes/no): yes [bluetooth] default-agent
If you do not do the trust step, there is also a race condition between the client and issuing the message. The client may timeout before the Authorize service can be answered. So it is best to trust the bluetooth client device. Also, if bluetoothctl or some program to answer the authorization request is not running, the connection attempt will fail. Every time bluetoothctl is started, it is important to do the default-agent command.
Measuring bluetooth performance
You can discover the bytes sent with the /proc/net/dev kernel file.
mtcdt:~$ egrep 'pan0|Receive|fifo' /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed pan0: 336375 2905 0 0 0 0 0 0 3354937 3097 0 0 0 0 0 0
mLinux 4 with bluez5
You must configure the network settings for eth0 and pan0 by modifying the /etc/network/interfaces file. This includes setting up a NAT.
Set up eth0 (or wifi) to forward
In /etc/network/interfaces:
# Wired interface auto eth0 iface eth0 inet static address 172.16.1.135 netmask 255.255.0.0 gateway 172.16.0.1 post-up echo 1 >/proc/sys/net/ipv4/ip_forward post-up iptables -F post-up iptables -t nat -F post-up iptables -t mangle -F post-up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Set up bridge node
In /etc/network/interfaces:
auto pan0 iface pan0 inet static address 10.1.0.1 netmask 255.255.255.0 pre-up brctl addbr pan0 pre-up brctl setfd pan0 0 pre-up brctl stp pan0 off
Restart eth0 and bring up pan0
The nohup allows completion of the command if you are using eth0 to log into the device. If the eth0 address changes, and you are using eth0 to log into the device, you will lose your session.
$ sudo nohup bash -c "ifdown eth0 ; sleep 2; ifup eth0"
Set up bluetooth service
main.conf
The file /etc/bluetooth/main.conf should be set up.
The main.conf file contains these sections:
General Section
[General] Name = MTCDT-Bluez # Some identifiable name DiscoverableTimeout = 0 # Stay discoverable AutoConnectTimeout = 0 # automatic connection timeout
Policy Section
Autoenable automatically powers up the bluetooth device on boot.
[Policy] AutoEnable=true
/etc/default/bluetooth
Set the enable line:
BLUETOOTH_ENABLED=1
Start Bluetooth daemon
sudo /etc/init.d/bluetooth start
Enable and start pand
Pan should be enabled. Debug is optional.
Edit the file /etc/default/bt-pan:
ENABLED="yes" PANOPTS="--debug"
Now start it up.
sudo /etc/init.d/bt-pan start
Set up dnsmasq
Enable
You must set ENABLED=”yes” in /etc/default/dnsmasq (default is no):
ENABLED="yes"
Configure
The following configuration lines must only appear once in all the configuration files in the directory /etc/dnsmasq.d:
- dhcp-lease-max
- dhcp-leasefile
Modify the file /etc/dnsmasq.d/dhcp.conf to match the following:
interface=pan0 dhcp-range=10.1.0.100,10.1.0.250,12h dhcp-lease-max=200 dhcp-leasefile=/var/config/dnsmasq_dhcp_pan0.leases dhcp-option=option:netmask,255.255.255.0 dhcp-option=option:router,10.1.0.1 dhcp-option=option:dns-server,10.1.0.1 dhcp-authoritative
In another file called /etc/dnsmasq.d/dns.conf, include:
no-hosts addn-hosts=/var/config/hosts resolv-file=/etc/resolv.conf
If you are not using a DHCP server from the device, set up /etc/network/resolv.conf. (Do not use /etc/resolv.conf, as this file is a sym link to volatile storage and is created at boot.)
Edit the resolv.conf as required.
Example:
nameserver 172.16.0.20 search mydomain.net
If you are using DHCP with eth0, /etc/resolv.conf is created automatically. In that case you should not edit /etc/resolv.conf, and it should be used in /etc/dnsmasq.d/dns.conf.
Start dnsmasq
sudo /etc/init.d/dnsmasq restart
Pairing
Follow the steps for pairing with another bluetooth device.
Connect to pand
On the phone, select Internet access.
If you do not trust the phone (as shown previously), every time you select the PAN service, the system asks to approve the connection.
Without trust, you must have a program running on the device to do this (like bluetoothctl). For this example we are running bluetoothctl on the device. Start bluetoothctl:
$ sudo -s bluetoothctl
[bluetooth]#
On your device, you may see the following if you did not do the Trust step (type yes to authorize service and hit enter):
Authorize service
[agent] Authorize service 0000000f-0000-1000-8000-00805f9b34fb (yes/no): yes
[John Cell Phone]#
device bnep0 entered promiscuous mode
pan0: port 1(bnep0) entered forwarding state
pan0: port 1(bnep0) entered forwarding state
Windows with bluez5
To do this, you must have a bluetooth device on your PC. It could be a USB dongle. With some equipment, it is internal.
Set up pairing agent
[bluetooth] agent KeyboardOnly Agent registered [bluetooth] default-agent Default agent request successful
Make discoverable in Windows
- From the lower right tray in the Windows OS, select the bluetooth icon.
- Click to get its menu. Select Show Bluetooth Devices.
- The Bluetooth Settings window displays. Click the Options tab.
- Check Allow Bluetooth devices to find this computer. Click OK.
Make the device discoverable and pairable if not already
[bluetooth] discoverable on Changing discoverable on succeeded [bluetooth] pairable on Changing pairable on succeeded
Turn scan on and find Windows System
Device 5C:F3:70:74:04:AF CALMQUIST-L1
Scan Off and Pair
The pairing is initiated in mLinux on the device (not your PC) and time-limited. Follow these steps quickly or the pairing will fail:
- Enter the following command on mLinux to pair the device with your PC:
[bluetooth] pair 5C:F3:70:74:04:AF
- Answer yes in mLinux on the device.
- On your PC, immediately click on the Windows bubble saying that a Bluetooth device is trying to connect.
- Quickly answer the prompt by clicking Next to add the device for the pairing request. (Otherwise, the pairing will fail.)
- Windows displays a success message if successful.
The resulting output (if successful) on the device should look like:
Attempting to pair with 5C:F3:70:74:04:AF [CHG] Device 5C:F3:70:74:04:AF Connected: yes Request confirmation [agent] Confirm passkey 912097 (yes/no): yes [CHG] Device 5C:F3:70:74:04:AF UUIDs: 00001000-0000-1000-8000-00805f9b34fb [CHG] Device 5C:F3:70:74:04:AF UUIDs: 00001115-0000-1000-8000-00805f9b34fb [CHG] Device 5C:F3:70:74:04:AF ServicesResolved: yes [CHG] Device 5C:F3:70:74:04:AF Paired: yes Pairing successful [CHG] Device 5C:F3:70:74:04:AF ServicesResolved: no [CHG] Device 5C:F3:70:74:04:AF Connected: no
Trust
Trust is needed so the client may connect without a response from the device. Enter the following command:
[bluetooth] trust 5C:F3:70:74:04:AF
The system confirms your change with:
[CHG] Device 5C:F3:70:74:04:AF Trusted: yes
Connect
On your PC, connect using access point by following these steps:
- Click on Start Menu > Devices and Printers > Bluetooth Personal Area Network Devices
- Right click on your device to display its menu.
- Select Connect using > Access point.
On your device, you may see the following if you did not do the Trust step (type yes to authorize service and hit enter):
[agent] Authorize service 0000000f-0000-1000-8000-00805f9b34fb (yes/no): yes [CHG] Device 54:93:2C:37:5C:95 RSSI: -85 [CHG] Device 54:93:2C:37:5C:95 RSSI: -69