设置默认广播地址由什么负责?

设置默认广播地址由什么负责?

在我设置的某些(旧)Linux 嵌入式设备上(但我不再拥有该设备),广播地址显然配置错误,因为它与给定的 IP 地址和网络掩码的预期值不匹配(例如,对于 192.168.70.243/255.255.254.0,它的广播地址为 192.168.70.255,而不是 192.168.71.255)。它运行内核 2.4.31 和 busybox 0.60.5。网络配置只需使用该 shell 代码片段即可完成:

ifconfig eth0 $IPADDR netmask $NETMASK
if [ -n "$GATEWAY" ]; then
    route add default gw $GATEWAY
fi

因此,广播地址没有明确配置。问题是:这种不良行为是由什么原因造成的?是 busybox 的 ifconfig 没有正确设置广播地址,还是内核设置不当?

注意:可能它们都不负责,但由于设备运行我不知道的用户特定软件,所以在启动过程中有其他东西妨碍了启动(并对其进行了错误的重新配置)。一旦我得到更多信息,我会跟进。

答案1

开始调查该主题时,我发现strace更改广播地址会ifconfig导致补充ioctl()调用(SIOCSIFBRDADDR- Set InterFace BRoadcast ADDRess),而当您省略广播参数时,该调用不会出现在正常跟踪中。因此,看起来 ifconfig 在默认情况下不处理广播地址,而是将其留给内核。

答案2

我敢打赌,它不是内核。

如果你有机器的 shell 访问权限,请尝试在 /etc 中递归地 grep 该字符串:

  grep -R "192.168.70.255" * 

这应该告诉您需要更改的配置在哪里。

答案3

这次真正阅读了这个问题后,我的直觉是,问题可能在于 BusyBox 做出了错误的假设,或者可能存在于某个平行宇宙中,其中有类路由没有消失。您没有说内核或 busybox 有多旧,但如果您可以获得较新版本的 busybox、ip 或机器上的 strace 副本,您可能能够测试哪个有问题。ip 或较新的 busybox 允许您使用已知行为良好的工具设置 ip 和网络掩码。如果仍然错误,则可能是内核的问题。如果正确,则是 busybox 的问题。使用 strace,您可以看到 busybox 正在进行的系统调用。

如果您无法在盒子上获得任何新的二进制文件,那么除了自己将广播设置为正确的值之外,您实际上没有什么可以做的。

答案4

广播是否可能是从 IP/掩码组合动态生成的,而您实际上输入了错误的网络掩码?

相关内容