广播地址显然在我设置的某些(旧)Linux 嵌入式设备(但我不再拥有)上配置错误,因为它与给定 IP 地址和网络掩码的预期值不匹配(例如,它有一个广播 192.168.70.255 而不是 192.168.70.243/255.255.254.0 的 192.168.71.255)。它运行带有busybox 0.60.5 的内核2.4.31。网络配置只需使用该 shell 片段即可完成:
ifconfig eth0 $IPADDR netmask $NETMASK
if [ -n "$GATEWAY" ]; then
route add default gw $GATEWAY
fi
因此广播地址没有明确配置。问题是:是什么造成了这种不良行为?是busybox的ifconfig没有正确设置广播地址还是内核设置不好?
注意:可能他们都没有责任,但是由于设备运行我不知道的用户特定软件,因此在引导过程中出现了其他问题(并且重新配置得很糟糕)。一旦我有了它们,我会跟进更多信息。
开始调查我发现
strace
更改广播地址ifconfig
会导致补充ioctl()
调用(SIOCSIFBRDADDR
-Set InterFace BRoadcast ADDRess)的主题的调查,当您省略广播参数时,该调用不会出现在正常跟踪中。所以看起来 ifconfig 在默认情况下不处理广播地址并将其留给内核。我敢打赌,这不是内核。
如果您有对机器的 shell 访问权限,请尝试在 /etc 中递归地 grep 以获取该字符串:
那应该告诉您需要更改的配置在哪里。
这次实际阅读了这个问题后,我的直觉反应是,问题在于 BusyBox 做出了错误的假设,或者可能生活在某个平行宇宙中,其中有类路由没有消失。你没有说内核或busybox有多旧,但如果你能获得更新版本的busybox、ip或strace的副本,你也许可以测试哪个有问题。ip 或更新的busybox 将允许您使用具有已知良好行为的工具设置ip 和网络掩码。如果仍然错误,则可能是内核。如果是对的,那就是busybox。使用 strace 你可以看到系统调用busybox 正在做什么。
如果您无法在盒子上获得任何新的二进制文件,那么除了您自己将广播设置为正确的值之外,您实际上无能为力。
广播是否有可能是从 IP/掩码组合动态生成的,并且您实际上输入了错误的网络掩码?