Bluetooth 蓝牙PAN连接-ARP不工作

Bluetooth 蓝牙PAN连接-ARP不工作,bluetooth,tcp-ip,arp,Bluetooth,Tcp Ip,Arp,我的安装程序是一个嵌入式设备,它将从平板电脑(可以是基于Android或iOS的)访问 该设备通过蓝牙进行访问,并实现PAN配置文件(NAP角色),因此平板电脑将其视为可以访问互联网的设备 我使用DBus向Bluez注册NAP服务器。这很好,当平板电脑连接时,Bluez会创建一个名为“bnep0”的网络接口。 我已在/etc/network/interfaces中配置了bnep0接口: iface bnep0 inet static address 10.254.239.1 netmas

我的安装程序是一个嵌入式设备,它将从平板电脑(可以是基于Android或iOS的)访问

该设备通过蓝牙进行访问,并实现PAN配置文件(NAP角色),因此平板电脑将其视为可以访问互联网的设备

我使用DBus向Bluez注册NAP服务器。这很好,当平板电脑连接时,Bluez会创建一个名为“bnep0”的网络接口。 我已在/etc/network/interfaces中配置了bnep0接口:

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
我使用udev,使用/etc/udev/rules.d/50-bnep.rules中定义的a规则来上下界面:

ACTION=="add", KERNEL=="bnep0" SUBSYSTEM=="net", RUN+="/sbin/ifup bnep0"
ACTION=="remove", KERNEL=="bnep0", SUBSYSTEM=="net", RUN+="/sbin/ifdown bnep0"
如您所见,我使用interface up/down事件启动/停止为平板电脑提供IP地址的DHCP服务器

我的DHCP服务器由/etc/DHCP/dhcpd.conf中的以下行配置:

subnet 10.254.239.0 netmask 255.255.255.0 {
  range 10.254.239.2 10.254.239.254;
}
作为旁注,我还在/etc/network/interfaces中创建了一个网桥br0。为了注册NAP接口,Bluez需要:

iface br0 inet manual
  bridge_ports none
  bridge_fd 0
  bridge_stp off
这一切都很好。平板电脑将与我的设备进行蓝牙配对并成功连接。我还可以观察到平板电脑查询我设备的DHCP服务器,并获得地址10.254.239.2

在我的设备上,我从命令“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
4:br0:mtu 1500 qdisc noqueue state UP组默认值
链路/以太网5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff:ff
inet6 fe80::984d:cdff:fe4b:65be/64范围链接
永远有效\u lft首选\u lft永远有效
9:bnep0:mtu 1500 qdisc pfifo_fast master br0状态未知组默认qlen 1000
链路/以太网5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff:ff
inet 10.254.239.1/24 brd 10.254.239.255范围全局bnep0
永远有效\u lft首选\u lft永远有效
inet6 fe80::5ee0:c5ff:feaf:7bf6/64范围链接
永远有效\u lft首选\u lft永远有效
然后在我的嵌入式设备上启动一个应用程序,它在地址10.254.239.1端口15137上打开一个TCP服务器套接字。应用程序侦听平板电脑的传入连接

现在,我尝试打开从平板电脑到IP地址10.254.239.1的TCP客户端套接字。我可以观察到(使用wireshark)接口bnep0接收IP地址10.254.239.1的ARP请求。但我的设备不会生成任何ARP响应,平板电脑应用程序在尝试连接TCP套接字时将超时:-(

同样,如果我尝试从嵌入式设备ping平板电脑,我会发现我的设备会发送10.254.239.2的ARP请求,平板电脑会正常响应。但这就好像设备没有收到ARP响应一样,因为之后它不会发送任何ping请求

因此,症状是接口bnep0上的传入ARP数据包未被处理


我真的不明白我遗漏了什么。你们中有谁能帮我吗?

事实证明,问题是我自己对网桥的工作原理缺乏了解

我发现了非常有用的HOWTO,它清楚地表明,一旦将网络接口添加到网桥中,它就不能用作IP流量的端点

因此,我需要做的是更改/etc/network/interfaces中网络接口的设置,以便网桥成为IP端点:

iface br0 inet static
  address 10.254.239.1
  netmask 255.255.255.0
  bridge_ports none
  bridge_fd 0
  bridge_stp off
请注意,bnep0的部分可以完全省略

也感谢你的灵感