问题陈述
systemd-networkd
我有一个用于网络管理的嵌入式Linux系统。大约一半的情况下,设备可以在 30 秒内连接到 Wifi AP 并通过 DHCP 获取 IPv4 地址。在其他情况下,系统日志显示身份验证和关联,但设备未获取 IPv4 地址。我已经等了 5 分钟或更长时间没有获得 IP。
配置
1)这是/etc/systemd/network/wlan0.network
配置文件:
[Match]
Name=wlan0
[Network]
DHCP=ipv4
IPv6AcceptRA=no
LinkLocalAddressing=no
我还进行了.network
文件设置,仅DHCP=yes
此以下内容。结果看起来是一样的。
2)这是/etc/wpa_supplicant.conf
文件:
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
country=US
network={
ssid=<my SSID>
psk=<my key>
}
3) 我没有配置自己的[email protected]
文件,因为wpa_supplicant
当需要接口时我会手动启动它。没有安装其他网络管理器(NetworkManager、connman 等)。我没有启动任何 DHCP 工具(dhclient、dhcpcd);我依靠 systemd-network 内部组件来实现这一点。
调试
1) 这是显示关联的输出dmesg | tail
,无论是否获取 IP 地址,都会发生这种情况:
[ 846.988274] ieee80211 phy1: WMM Turbo=1
[ 847.312843] wlan0: authenticate with <AP MAC addr>
[ 847.329052] wlan0: send auth to <AP MAC addr> (try 1/3)
[ 847.334566] wlan0: authenticated
[ 847.352271] wlan0: associate with <AP MAC addr> (try 1/3)
[ 847.362762] wlan0: RX AssocResp from <AP MAC addr> (capab=0x1011 status=0 aid=1)
[ 847.373968] wlan0: associated
[ 847.391864] wlan0: Limiting TX power to 24 (24 - 0) dBm as advertised by <AP MAC addr>
该输出来自驱动程序,因此除了说“它相关”之外,在一般意义上可能没有太大意义。
2) 一些博客/帖子建议使用systemctl restart systemd-networkd
和等命令ifconfig wlan0 down && ifconfig wlan0 up
来触发 DHCP 重新协商。有时后一个命令有效......尽管我无法判断仅仅等待几秒钟是否会产生一些影响。
3)当一切正常时,我看到这样的日志:
Apr 25 12:41:43 host systemd-networkd[511]: [[0;1;39m[[0;1;31m[[0;1;39mwlan0: found matching network '/etc/systemd/network/wlan0.network', based on potentially unpredictable ifname[[0m
Apr 25 12:41:43 host systemd-networkd[511]: wlan0: IPv6 successfully disabled
Apr 25 12:41:48 host systemd-networkd[511]: wlan0: Gained carrier
Apr 25 12:41:48 host systemd-networkd[511]: wlan0: DHCPv4 address 10.217.244.165/8 via 10.128.128.128
Apr 25 12:41:48 host systemd-networkd[511]: wlan0: Configured
当问题发生时,我只看到“wlan0:找到匹配的网络...”消息。
4) 与 类似dmesg
,iw wlan0 link
即使未获取 IP,也始终显示与 AP 的连接:
$ iw wlan0 link
Connected to <AP MAC addr> (on wlan0)
SSID: <AP name>
freq: 5200
RX: 87243 bytes (416 packets)
TX: 3038 bytes (11 packets)
signal: -60 dBm
tx bitrate: 6.0 MBit/s
bss flags: short-slot-time
dtim period: 1
beacon int: 100
编辑:驱动程序有一个已知错误,其中“命令 iw wlan0 link 的输出始终将比特率显示为所连接频段的最低数据速率。”所以 6.0 MBit/s 是错误的。然而,信号电平应该是正确的。
问题
有人对调试或配置有进一步的建议以使其可靠地工作吗?我不清楚这是驱动程序问题、系统问题还是网络问题。
答案1
从您的信号来看,主要是 6Mbps 的 TX 速率,第 2 层显然存在需要改进的问题。信号不够强,无法保证可靠的服务。
一旦信号强度提高,DHCP问题就会消失。
TLDR 问题本身不在于 Unix 方面。