I am working to connect 2 Linux machines, each with this USB Dongle: https://www.tp-link.com/us/home-networking/usb-adapter/archer-t2u-nano/, to an ad-hoc WiFi network managed by B.A.T.M.A.N ( batman-adv ).
When run, these scripts show that both devices are joined to the same ad-hoc/IBSS network.
I statically assigned IP addresses and routes to both ‘bat0’ devices. However, I cannot ping or otherwise use the connection between the two devices.
What am I doing wrong and how can I use the mesh network in Linux between the connected client and server?
My ‘server’ node is configured with this script:
#!/bin/bash # Cleanup /sbin/ip link set wlan0 down /sbin/ip addr flush dev wlan0 /usr/sbin/iw wlan0 set type managed /sbin/rmmod batman-adv /sbin/ip link set mtu 1500 dev wlan0 # Ensure batman present /sbin/modprobe batman-adv # Setup adhoc mode /sbin/ip link set mtu 1560 dev wlan0 /usr/sbin/iw wlan0 set type ibss /sbin/ip link set wlan0 up #/usr/sbin/iw dev wlan0 ibss join My-Mesh 5180 fixed-freq 02:12:34:56:78:9A /usr/sbin/iw dev wlan0 ibss join My-Mesh 5180 # Configure batman server batctl if add wlan0 /sbin/ip link set bat0 up batctl gw_mode server # Assign Ip Address /sbin/ip addr add 10.254.239.1/24 broadcast 10.254.239.255 dev bat0 /sbin/ip route add 10.254.239.0/24 dev bat0 # List device properties sleep 5 batctl if /usr/sbin/iw dev /usr/sbin/iw dev wlan0 link
The output of that script shows the following:
wlan0: active phy#0 Interface wlan0 ifindex 6 wdev 0x1 addr 98:48:27:e1:b4:a1 ssid My-Mesh type IBSS channel 36 (5180 MHz), width: 20 MHz, center1: 5180 MHz txpower 20.00 dBm Joined IBSS 02:11:87:f2:30:87 (on wlan0) SSID: My-Mesh freq: 5180
ifconfig and dmesg both show batman as being configured for the client:
bat0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.254.239.2 netmask 255.255.255.0 broadcast 10.254.239.255 inet6 fe80::d4b3:31ff:fea4:b056 prefixlen 64 scopeid 0x20<link> ether d6:b3:31:a4:b0:56 txqueuelen 1000 (Ethernet) RX packets 410 bytes 17220 (17.2 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 19 bytes 846 (846.0 B) TX errors 0 dropped 62 overruns 0 carrier 0 collisions 0 [ 2223.705686] batman_adv: B.A.T.M.A.N. advanced 2021.0 (compatibility version 15) loaded [ 2223.718444] batman_adv: bat0: Adding interface: wlx984827e1b29c [ 2223.718448] batman_adv: bat0: Interface activated: wlx984827e1b29c
ifconfig and dmesg both show batman as being configured for the server:
bat0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 metric 1 inet 10.254.239.1 netmask 255.255.255.0 broadcast 10.254.239.255 ether ea:ca:36:20:2f:8c txqueuelen 1000 (Ethernet) RX packets 432 bytes 18144 (17.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15 bytes 738 (738.0 B) TX errors 0 dropped 1109 overruns 0 carrier 0 collisions 0 [ 2189.342306] batman_adv: B.A.T.M.A.N. advanced 2021.4-dirty (compatibility version 15) loaded [ 2189.581796] batman_adv: bat0: Adding interface: wlan0 [ 2189.581848] batman_adv: bat0: Interface activated: wlan0
My ‘client’ node is configured with this script:
#!/bin/bash # Cleanup DEV="wlx984827e1b29c" /sbin/ip link set ${DEV} down /sbin/ip addr flush dev ${DEV} /usr/sbin/iw ${DEV} set type managed /sbin/rmmod batman-adv /sbin/ip link set mtu 1500 dev ${DEV} # Ensure batman present /sbin/modprobe batman-adv # Setup adhoc mode /sbin/ip link set mtu 1560 dev ${DEV} /usr/sbin/iw ${DEV} set type ibss /sbin/ip link set ${DEV} up #/usr/sbin/iw dev ${DEV} ibss join My-Mesh 5180 fixed-freq 02:12:34:56:78:9A /usr/sbin/iw dev ${DEV} ibss join My-Mesh 5180 # Configure batman server /usr/sbin/batctl if add ${DEV} /sbin/ip link set bat0 up /usr/sbin/batctl gw_mode client # Set the mesh-bridge IP # Assign Ip Address /sbin/ip addr add 10.254.239.2/24 broadcast 10.254.239.255 dev bat0 /sbin/ip route add 10.254.239.0/24 dev bat0 # Info sleep 5 batctl if /usr/sbin/iw dev /usr/sbin/iw dev ${DEV} link
The output of that script shows these messages:
wlx984827e1b29c: active phy#0 Interface wlx984827e1b29c ifindex 3 wdev 0x1 addr 98:48:27:e1:b2:9c ssid My-Mesh type IBSS channel 36 (5180 MHz), width: 20 MHz, center1: 5180 MHz txpower 20.00 dBm Joined IBSS 02:11:87:f2:30:87 (on wlx984827e1b29c) SSID: My-Mesh freq: 5180
The Linux batctl command shows no connected nodes from both server and client perspectives.
Server:
batctl o [B.A.T.M.A.N. adv 2021.4-dirty, MainIF/MAC: wlan0/98:48:27:e1:b4:a1 (bat0/ea:ca:36:20:2f:8c BATMAN_IV)] Originator last-seen (#/255) Nexthop [outgoingIF]
Client:
batctl o [B.A.T.M.A.N. adv 2021.0, MainIF/MAC: wlx984827e1b29c/98:48:27:e1:b2:9c (bat0/d6:b3:31:a4:b0:56 BATMAN_IV)] Originator last-seen (#/255) Nexthop [outgoingIF]
I cannot ping the client from the server:
ping 10.254.239.2 PING 10.254.239.2 (10.254.239.2) 56(84) bytes of data. From 10.254.239.1 icmp_seq=1 Destination Host Unreachable From 10.254.239.1 icmp_seq=2 Destination Host Unreachable From 10.254.239.1 icmp_seq=3 Destination Host Unreachable
I also cannot ping the server from the client:
ping 10.254.239.1 PING 10.254.239.1 (10.254.239.1) 56(84) bytes of data. From 10.254.239.2 icmp_seq=1 Destination Host Unreachable From 10.254.239.2 icmp_seq=2 Destination Host Unreachable From 10.254.239.2 icmp_seq=3 Destination Host Unreachable
Advertisement
Answer
The answer really is that you need a WiFi radio that actually correclty implements Ad-Hoc/IBSS networking in the driver stack.