我正在开发一个 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)
然而,我的小脚趾深处有一种感觉,它告诉我有一种更好的方法来处理以太网电缆的热插拔事件。
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, akaethtoolAPI),SIOCGMIIREG(older, akamii-diag/mii-toolAPI) 和SIOCDEVPRIVATE(oldest, akamii-toolAPI)ioctl()来获取链接状态。0.24 版引入了对带有IFF_RUNNING接口标志的链路检测的支持。- [...]
- 可以配置为忽略短的“不插电”时段(
-d选项)或短的“插电”时段(-u选项)- [...]
- 不支持线缆检测的网络设备兼容模式(
-F选项)
我建议在netplugd 上使用ifplugd,因为它工作得更好并且得到积极维护。
ifplugd 是一个 Linux 守护进程,它会在插入电缆时自动配置您的以太网设备,并在拉出电缆时自动取消配置。这在带有板载网络适配器的笔记本电脑上很有用,因为它只会在真正连接电缆时配置接口。
| 归档时间: |
|
| 查看次数: |
23645 次 |
| 最近记录: |