4

I have come across an issue with the Pi-3 internal Wi-Fi, when in ad-hoc mode.

Setup is three PI-3s in ad-hoc mode, with Babel routing protocol and shncpd, to create a mesh network.

Pi 'A' has been allocated an address. Pi 'B' has not yet been allocated an address, and still has a link local address 169.254.xxx.xxx.

Using Wireshark at both ends, have seen that if Pi 'A' sends an ARP request to Pi 'B' then Pi'B sends a reply, however Pi 'A' does not receive it.


If I fit external WiFi dongles, and use these in preference to the internal BCM43430 SDIO, then the ARP reply is received.

So it looks like the internal Pi-3 Wi-Fi does not complete an ARP response/reply. I think the ARP reply is being sent but is not received - instead it is quietly discarded.


I can force the issue (without babel or shncpd) by simply setting manual static IP addresses to mimic link local addresses in /etc/network/interfaces, i.e. Pi 'A with:-

address 169.254.10.10

netmask 255.255.0.0

and Pi'B' with:-

address 169.254.10.20

netmask 255.255.0.0

When an ARP request goes out the reply is sent but not received.

If I change the IP address to something more typical such as 192.168.10.10 and 192.168.10.20, then ARP completes successfully.


The arp table shows "incomplete" for the IP address. Clearing the arp table does not fix the issue:-

arp -n

sudo ifdown wlan0

sudo ip link set arp off dev wlan0

sudo ip link set arp on dev wlan0

sudo ifup wlan0

Does anyone know how to resolve this?


Note:-

  • have tried turning powersave off, with "sudo iw dev wlan0 set power_save off"

  • do not want to manually set the MAC addresses in the ARP table.

  • do not want to have to set static IP addresses across all Pi's in the network as that is the purpose of Babel and SHNCPD. So will be faced with link local addresses.

  • Am using 4.1.19 v7+ with February version of the bcmhmac SDIO drivers.

  • do not have the option of using external dongles, which work ok.

Any help would be appreciated.

1

The nature of the interface does not enter the picture. If it were something specific to the interface, or to the ARP code, setting static arp entries would have made no difference.

Check for spurious packet filtering that your mesh software introduces, in the form of iptables package filters, or, worse, by installing some kind of virtual interface and mucking around with the internals of existing interfaces.

In the interests of propriety, I shall refrain from stating my full opinion on the whole HNCP stuff, but remember that the s in shncpd does not stand for smart.

| improve this answer | |
1

I have seen similar behavior when using proxy arp. The arp broadcasts wasn't seen by the interface on the Raspberry Pi. If using another device instead of the RasPi, for example a laptop with debian, then it works. I couldn't find a theoretical reason why the RasPi doesn't see the arp broadcasts. But I found a workaround. When I set the interface to promiscuous mode, then it suddenly see the arp broadcasts. So in your case it is also worth a try to set the interface to promiscuous mode for example with:

rpi ~$ sudo ip link set eth0 promisc on
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.