如何配置`eth0`以在拔出和重新插入时重试`dhclient`?

coo*_*j86 13 dhcp hotplug

我正在开发一个 linux 小工具。

如果我在启动后插入网络电缆或者拔掉并重新插入网络电缆,我希望它获得 DHCP。

一种解决方案是运行这样的脚本(它有效,顺便说一句):

#!/bin/bash

NET_STATUS='different'

while true
do
  NEW_NET_STATUS=`ifconfig | grep RUNNING | grep -v LOOPBACK`
  if [ "${NEW_NET_STATUS}" = "${NET_STATUS}" ]
  then
    echo "no change"
    sleep 1
    continue
  fi
  NET_STATUS=${NEW_NET_STATUS}
  if [ "${NET_STATUS}" ]
  then
    echo "cable plugged in"
  else
    echo "cable unplugged"
  fi
  sleep 1
done
Run Code Online (Sandbox Code Playgroud)

然而,我的小脚趾深处有一种感觉,它告诉我有一种更好的方法来处理以太网电缆的热插拔事件。

coo*_*j86 9

网络插头

netplug是我采用的解决方案。ifplugd也可以正常工作。

安装

sudo apt-get install netplug
Run Code Online (Sandbox Code Playgroud)

接口配置

cat /etc/netplug/netplugd.conf
eth*
Run Code Online (Sandbox Code Playgroud)

事件配置

cat /etc/netplug/netplug
#!/bin/sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH

dev="$1"
action="$2"

case "$action" in
in)
    echo "$dev : $action : plugged in" >> /tmp/netplug.log
    ;;
out)
    echo "$dev : $action : unplugged" >> /tmp/netplug.log
    ;;
probe)
    echo "$dev : $action : probed" >> /tmp/netplug.log
    ;;
*)
    echo "$dev : $action : I feel violated" >> /tmp/netplug.log
    exit 1
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

测试

/etc/init.d/netplug stop
/etc/init.d/netplug start

cat /tmp/netplug.log
eth0 : probe : probed
eth1 : probe : probed
...
eth15 : probe : probed
eth0 : in : plugged in
Run Code Online (Sandbox Code Playgroud)


小智 5

ifplugd很好地处理了这种情况:

ifplugd是一个 Linux 守护进程,它会在插入电缆时自动配置您的以太网设备,并在拉出电缆时自动取消配置。这在带有板载网络适配器的笔记本电脑上很有用,因为它只会在真正连接电缆时配置接口。

ifplugd 与您的发行版的本机网络配置实用程序接口。

一些特点:

  • 使用您的发行版的本机ifup/ifdown程序。
  • [...]
  • 支持 Linux SIOCETHTOOL(newer, aka ethtoolAPI), SIOCGMIIREG(older, aka mii-diag/ mii-toolAPI) 和SIOCDEVPRIVATE(oldest, aka mii-toolAPI)ioctl()来获取链接状态。0.24 版引入了对带有IFF_RUNNING接口标志的链路检测的支持。
  • [...]
  • 可以配置为忽略短的“不插电”时段(-d选项)或短的“插电”时段(-u选项)
  • [...]
  • 不支持线缆检测的网络设备兼容模式(-F选项)


NGR*_*des 5

我建议在netplugd 上使用ifplugd,因为它工作得更好并且得到积极维护。

ifplugd 是一个 Linux 守护进程,它会在插入电缆时自动配置您的以太网设备,并在拉出电缆时自动取消配置。这在带有板载网络适配器的笔记本电脑上很有用,因为它只会在真正连接电缆时配置接口。