*
Hi,
I eventually succeeded merging the Raspberry Pi 3.16+ kernel on
net-next with trivial merge conflicts (resolved).
I understand that the old linux-zigbee wiki is here now:
http://linux-zigbee.sourceforge.net/cgi-bin/trac.cgi/wiki/GettingStarted-0.2
But it looks quite outdated/wrong. So I rewrote it for myself. Anyway I
still have problems which are described at the end.
Here it is:
Build an 802.15.4-enabled Linux kernel with the following options:
CONFIG_IEEE802154=y
CONFIG_IEEE802154_6LOWPAN=m
CONFIG_MAC802154=m
CONFIG_IEEE802154_DRIVERS=y
# CONFIG_IEEE802154_FAKEHARD is not set
CONFIG_IEEE802154_FAKELB=m
If you have a hardware device you may want to enable:
CONFIG_IEEE802154_AT86RF230=m
CONFIG_IEEE802154_MRF24J40=m
CONFIG_IEEE802154_CC2520=m
Update your bootloader and boot your new kernel.
In our simulated network we will have 3 fake radios. One these radio
interfaces, we will start 3 nodes which will have short addresses 0x1,
0x8001 and 0x8002. Node 0x1 will act as a coordinator and shall run
izcoordinator on it, which will handle network with PAN ID 0x777. Nodes
0x8001 and 0x8002 will associate with coordinator and will receive
addresses after association. We will start izchat tool on these nodes,
and will use Wireshark to monitor network traffic.
Before you start you should check that everything works. If you try the
following command:
Create 3 fake radio interfaces for network devices:
# modprobe fakelb numlbs=3
Check it with:
# iz listphy
You should see the following output:
wpan-phy0 IEEE 802.15.4 PHY object
page: 0 channel: n/a
channels on page 0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26
channels on page 1: 0 1 2 3 4 5 6 7 8 9 10
channels on page 2: 0 1 2 3 4 5 6 7 8 9 10
channels on page 3: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
channels on page 4: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
channels on page 5: 0 1 2 3 4 5 6 7
channels on page 6: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21
wpan-phy1 IEEE 802.15.4 PHY object
page: 0 channel: n/a
channels on page 0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26
channels on page 1: 0 1 2 3 4 5 6 7 8 9 10
channels on page 2: 0 1 2 3 4 5 6 7 8 9 10
channels on page 3: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
channels on page 4: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
channels on page 5: 0 1 2 3 4 5 6 7
channels on page 6: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21
wpan-phy2 IEEE 802.15.4 PHY object
page: 0 channel: n/a
channels on page 0: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26
channels on page 1: 0 1 2 3 4 5 6 7 8 9 10
channels on page 2: 0 1 2 3 4 5 6 7 8 9 10
channels on page 3: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
channels on page 4: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
channels on page 5: 0 1 2 3 4 5 6 7
channels on page 6: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20 21
Create 3 radio interfaces, one per each phy:
# iz add wpan-phy0
Registered new device ('wpan0') on phy wpan-phy0
# iz add wpan-phy1
Registered new device ('wpan1') on phy wpan-phy1
# iz add wpan-phy2
Registered new device ('wpan2') on phy wpan-phy2
Set distinct hw addresses:
# ip link set wpan0 address de:ad:be:af:ca:fe:ba:be
# ip link set wpan1 address ca:fe:ca:fe:ca:fe:ca:fe
# ip link set wpan2 address be:be:be:be:be:be:be:be
Bring up logical interfaces (by default, one logical interface is
associated with each radio):
# ifconfig wpan0 up
# ifconfig wpan1 up
# ifconfig wpan2 up
Start wireshark to monitor traffic on the network:
# wireshark -i wpan0 -k
Start coordinator (you need to do it as root as well):
# touch lease
# izcoordinator -d 1 -l lease -i wpan0 -p 0x777 -s 1 -c 11 &
If using the mainline kernel, assign short addresses manually using iz set:
# iz set wpan1 777 8001 11
# iz set wpan2 777 8002 11
Start simple chat program in two different consoles/terminals (0x8001
and 0x8002 are the short addresses are received during association):
# izchat 777 8001 8002
# izchat 777 8002 8001
Bring up 6LoWPAN:
# ip link add link wpan0 name lowpan0 type lowpan
# ip link set lowpan0 up
# ip link add link wpan1 name lowpan1 type lowpan
# ip link set lowpan1 up
# ip link add link wpan2 name lowpan2 type lowpan
# ip link set lowpan2 up
Check with:
# ifconfig lowpan0
# ifconfig lowpan1
# ifconfig lowpan2
You should see the following output:
lowpan0 Link encap:UNSPEC HWaddr
DE-AD-BE-AF-CA-FE-BA-BE-00-00-00-00-00-00-00-00
inet6 addr: fe80::dcad:beaf:cafe:babe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1281 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lowpan1 Link encap:UNSPEC HWaddr
CA-FE-CA-FE-CA-FE-CA-FE-00-00-00-00-00-00-00-00
inet6 addr: fe80::c8fe:cafe:cafe:cafe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1281 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lowpan2 Link encap:UNSPEC HWaddr
BE-BE-BE-BE-BE-BE-BE-BE-00-00-00-00-00-00-00-00
inet6 addr: fe80::bcbe:bebe:bebe:bebe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1281 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
We can see that Stateless Auto Configuration (SLAC) for the link local
address works.
Ping between nodes:
# ping6 fe80::c8fe:cafe:cafe:cafe%lowpan0
# ping6 fe80::bcbe:bebe:bebe:bebe%lowpan0
# ping6 fe80::bcbe:bebe:bebe:bebe%lowpan1
# ping6 fe80::dcad:beaf:cafe:babe%lowpan1
# ping6 fe80::dcad:beaf:cafe:babe%lowpan2
# ping6 fe80::c8fe:cafe:cafe:cafe%lowpan2
Anyway I have problems pinging the nodes when specifying a ping with
payload size greater than 93. For example, pinging lowpan0 from lowpan1:
# ping6 -s94 fe80::dcad:beaf:cafe:babe%lowpan1
I don't get anything back (no output at all).
Running Tshark on lowpan0 (fe80::dcad:beaf:cafe:babe) shows this:
sudo tshark -i lowpan0
tshark: Lua: Error during loading:
[string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled
Running as user "root" and group "root". This could be dangerous.
Capturing on lowpan0
0.000000 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 64 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00[Malformed Packet]
0.000363 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 48 Neighbor Advertisement fe80::dcad:beaf:cafe:babe (sol)
5.009835 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 64 Neighbor Solicitation for fe80::c8fe:cafe:cafe:cafe from
de:ad:be:af:ca:fe:ba:be
5.010874 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 48 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00[Packet size limited during capture]
47.019946 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 64 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00[Malformed Packet]
47.020289 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 48 Neighbor Advertisement fe80::dcad:beaf:cafe:babe (sol)
52.029831 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 64 Neighbor Solicitation for fe80::c8fe:cafe:cafe:cafe from
de:ad:be:af:ca:fe:ba:be
52.030435 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 48 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00[Packet size limited during capture]
Specifying a ping payload size lesser than or equal to 93 somewhat works
and Tshark output looks like this:
sudo tshark -i lowpan0
tshark: Lua: Error during loading:
[string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled
Running as user "root" and group "root". This could be dangerous.
Capturing on lowpan0
0.000000 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 125 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00
0.000417 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 125 Echo (ping) reply id=0x1147, seq=1
1.001208 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 125 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00
1.001536 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 125 Echo (ping) reply id=0x1147, seq=2
2.002675 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 125 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00
2.002997 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 125 Echo (ping) reply id=0x1147, seq=3
3.004102 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 125 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00
3.004424 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 125 Echo (ping) reply id=0x1147, seq=4
4.005586 ca:af:be:ad:dc:00:00:00 -> 00:00:00:80:fe:fe:ca:fe IEEE
802.15.4 125 Beacon, Dst: 00:00:00_80:fe:fe:ca:fe, Src:
ca:af:bead:dc:0000:00
4.006001 fe80::dcad:beaf:cafe:babe -> fe80::c8fe:cafe:cafe:cafe
ICMPv6 125 Echo (ping) reply id=0x1147, seq=5
Is this a 6lowpan fragmentation issue?
Tshark output looks weird expecially decoding IEEE 802.15.4 frames
(addresses do not look good and what are those Beacon frames that only
appear after started pinging?).
Also, ICMPv6 echo requests are not present in the Tshark output.
Can anybody try the above instructions and confirm the issue?
Ciao,
Cristiano
*
------------------------------------------------------------------------------
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel