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

广播地址在我设置的一些(旧)Linuxembedded式设备上明显地configuration错误(但是我不再拥有),因为它与给定IP地址和networking掩码的期望值不匹配(例如,它具有广播192.168.70.255,而不是192.168.70.255,192.168.70.243/255.255.254.0)。 它使用busybox 0.60.5运行内核2.4.31。 networkingconfiguration只需要使用该shell代码片段完成:

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

因此广播地址没有明确configuration。 问题是:这种不良行为的责任是什么? 是busybox的ifconfig没有正确设置广播地址,还是内核设置不好?

注意:有可能没有一个是负责任的,但是其他的东西却妨碍了引导过程(并重新configuration),因为设备运行了我不知道的用户专用软件。 一旦我有他们,我会跟进更多的信息。

开始调查我用strace发现的话题,发现用ifconfig改变广播地址会导致一个补充的ioctl()调用( SIOCSIFBRDADDR – Set InterFace BRoadcast ADDRess),当你省略广播参数时,不会出现在正常的跟踪中。 所以看起来ifconfig在默认情况下不处理广播地址,而是将其留给内核。

这不是内核,我敢打赌。

如果你有机器的shell访问权限,试试recursiongrep在/ etc中的string:

  grep -R "192.168.70.255" * 

这应该告诉你哪里的configuration是需要改变的。

在这次实际上读过这个问题之后,我的直觉反应是问题在于BusyBox做出了错误的假设,或者可能生活在一个平行的宇宙中,在这个平行的宇宙中有类路由并没有消失。 你没有说内核或者busybox有多大,但是如果你能得到更新版本的busybox,ip或者strace的副本,你也许能够testing哪个是错误的。 IP或较新的busybox将允许您设置具有已知良好行为的工具的IP和networking掩码。 如果还是错的话,那可能就是内核了。 如果这是正确的,这是busybox。 用strace你可以看到什么系统调用busybox正在做。

如果你不能在盒子上得到任何新的二进制文件,除了自己将广播设置为正确的值外,没有什么可以做的了。

是否有可能从IP / Mask组合中dynamic生成广播,并且您实际input的networking掩码是错误的?