Ma configuration est un périphérique intégré auquel on accède à partir d'une tablette (peut être Android ou iOS).Connexion Bluetooth PAN - ARP ne fonctionne pas
L'appareil est accessible via Bluetooth et il implémente le profil PAN (rôle NAP), de sorte que la tablette le considère comme un périphérique à travers lequel il peut accéder à Internet. J'utilise DBus pour enregistrer un serveur NAP avec Bluez. Cela fonctionne bien, et Bluez crée une interface réseau nommée 'bnep0' lorsque la tablette se connecte. I ont configuré l'interface bnep0 dans/etc/network/interfaces:
iface bnep0 inet static
address 10.254.239.1
netmask 255.255.255.0
post-up service isc-dhcp-server start
pre-down service isc-dhcp-server stop
J'utilise udev pour faire l'interface vers le haut/vers le bas en utilisant la règle définie dans /etc/udev/rules.d/50-bnep .rules:
ACTION=="add", KERNEL=="bnep0" SUBSYSTEM=="net", RUN+="/sbin/ifup bnep0"
ACTION=="remove", KERNEL=="bnep0", SUBSYSTEM=="net", RUN+="/sbin/ifdown bnep0"
Comme vous pouvez le voir, j'utiliser l'interface haut/bas événements pour démarrer/arrêter un serveur DHCP qui fournit une adresse IP à la tablette.
Mon serveur DHCP est configuré par les lignes suivantes dans /etc/dhcp/dhcpd.conf:
subnet 10.254.239.0 netmask 255.255.255.0 {
range 10.254.239.2 10.254.239.254;
}
En remarque, je crée aussi un br0 de pont de réseau dans/etc/network/interfaces. Cela est requis par Bluez afin d'enregistrer une interface NAP:
iface br0 inet manual
bridge_ports none
bridge_fd 0
bridge_stp off
Tout cela fonctionne très bien. La tablette effectuera la liaison Bluetooth avec mon appareil et se connectera avec succès. Je peux aussi observer que la tablette interroge le serveur DHCP de mon appareil et se voit assigner l'adresse 10.254.239.2
Sur mon appareil, je reçois la sortie de la commande « ip addr show »:
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff
inet6 fe80::984d:cdff:fe4b:65be/64 scope link
valid_lft forever preferred_lft forever
9: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether 5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff
inet 10.254.239.1/24 brd 10.254.239.255 scope global bnep0
valid_lft forever preferred_lft forever
inet6 fe80::5ee0:c5ff:feaf:7bf6/64 scope link
valid_lft forever preferred_lft forever
Je puis lancement une application sur mon périphérique intégré, qui ouvre un socket serveur TCP sur l'adresse 10.254.239.1, port 15137. L'application écoute les connexions entrantes de la tablette.
Maintenant, je tente d'ouvrir un socket client TCP à partir de la tablette à l'adresse IP 10.254.239.1. Je peux observer (en utilisant wireshark) que l'interface bnep0 reçoit des requêtes ARP pour l'adresse IP 10.254.239.1. Mais mon appareil ne génère aucune réponse ARP et l'application de la tablette expirera en essayant de connecter la socket TCP :-(
De même, si j'essaie de faire un ping sur la tablette à partir de mon périphérique embarqué, j'observe que mon périphérique envoie les requêtes ARP pour 10.254.239.2 auxquelles la tablette répond normalement, mais c'est comme si la réponse ARP n'était pas reçue par le périphérique, car elle n'envoie pas de requête ping par la suite
Ainsi, le symptôme est que Les paquets ARP sur l'interface bnep0 ne sont pas traités
Je ne peux vraiment pas comprendre ce que je manque, est-ce que l'un de vous peut m'aider?