机器正在运行SuSE 11.2。 我将其configuration为使用YaST2graphicsnetworking接口连接使用DHCP。
当我dhcpcd -k eth0 ,然后dhcpcd eth0那么我几乎立即得到租约,一切都很好。 但是,如果我ifdown eth0 ,然后ifup eth0我没有得到一个IP地址约20秒。 查看networking数据包stream,发现在ifdown / up场景中,dhcp请求已成功广播,但没有响应。
编辑:同样的事情发生在启动过程中。 广播数据包在链接变为活动状态之前发送。
/ var / log / messages显示如下:
12月6日14:21:50 olm ifup:eth0设备:Broadcom公司NetXtreme BCM5721千兆以太网PCI Express(rev 21)
12月6日14:21:51 olm内核:[3389.717366] tg3 0000:02:00.0:PME#禁用
12月6日14:21:51 olm内核:[3389.936570] ADDRCONF(NETDEV_UP):eth0:链路没有准备好
12月6日14:21:51 olm ifup-dhcp:在eth0上启动DHCP4客户端
12月6日14:21:51 olm dhcpcd [11807]:eth0:dhcpcd 3.2.3开始
12月6日14:21:51 olm dhcpcd [11807]:eth0:硬件地址= 00:10:18:30:60:3c
12月6日14:21:51 olm dhcpcd [11807]:eth0:租用广播
12月6日14:21:51 olm ifup-dhcp:。
12月6日14:21:53 olm内核:[3392.126437] tg3:eth0:链路以1000 Mbps全双工。
12月6日14:21:53 olm kernel:[3392.126441] tg3:eth0:stream量控制对TX开启,对RX开启。
12月6日14:21:53 olm内核:[3392.127000] ADDRCONF(NETDEV_CHANGE):eth0:link准备就绪
12月6日14:21:54 olm ifup-dhcp:。
12月6日14:21:55 olm avahi-daemon [3414]:在eth0。*上注册fe80 :: 210:18ff:fe30:603c的新地址logging。
12月6日14:21:57 olm ifup-dhcp:。
12月6日14:21:59 olm ifup-dhcp:
12月6 14:21:59 olm ifup-dhcp:eth0 DHCP4在后台继续
12月6 14:22:04 olm内核:[3403.004015] eth0:不存在IPv6路由器
12月6日14:22:11 olm dhcpcd [11807]:eth0:超时
12月6日14:22:11 olm dhcpcd [11807]:eth0:尝试在`/var/lib/dhcpcd/dhcpcd-eth0.info'中使用旧租约
12月6日14:22:11 olm dhcpcd [11807]:eth0:添加IP地址172.26.59.123/26
12月6日14:22:11 olm dhcpcd [11807]:eth0:通过172.26.59.65 metric 0添加默认路由
特别值得注意的是,在eth0链路准备就绪之前,dhcpcd广播出租。 它从来没有得到回应,因为广播从来没有去任何地方。
所以我的问题是,为什么ifup-dhcp在链接准备好之前启动DHCP进程? 以及如何让它等待正确?
我发现它在链接准备好之前要求租约的原因。 这是因为在调用dhcpcd之前,ifup-dhcp尝试等待接口准备就绪,但是它使用/etc/sysconfig/network/scripts/functions定义的函数is_iface_up ,并且该函数仅检查eth0是否存在然后返回一个积极的结果。
我还find了一个(略)更长远的解决scheme。 ifup-dhcp等待来自is_iface_up的正确结果,然后等待/ etc / sysconfig / network / dhcp中DHCLIENT_SLEEP所定义的额外时间。 通过设置DHCLIENT_SLEEP =“3”,尽pipeis_iface_up返回的时间太短,但在调用dhcpcd之前,现在界面已经准备就绪。 这也不太可能被更新破坏。
如果该框位于具有生成树的networking上,可能是链路变为活动的延迟。 这在重启过程中不应该是一个问题,而是一个停止/启动操作。 你总是可以在ifup脚本中睡觉,但这真的只是一个黑客。 另一个select是在ifup脚本中写入一些逻辑来在进行dhcp调用之前检查链接状态。 链接可以检查ethtool。 或者你可以增加DHCP客户端超时。 修改ifup脚本容易被更新覆盖。