我使用netplugd来监控插件并拔掉以太网的事件。在获得插入事件时,还使用udhcpc从DHCP获取IP,配置静态IP以防udhcpc在5次重试中失败。
这里的问题是,如果以太网在主板启动时没有插入,静态IP将根据实现进行配置。但是之后如果插入以太网,则配置DHCP ip并且我能够ping google.com和其他主机名,但是在我的一个代码报告中使用了getaddrinfo错误 - 无法解析主机名。
如果在启动时插入以太网并在之后将其删除并再次插入,则似乎没有问题。
编辑1 这是我使用的netplug脚本
PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH
dev="$1"
action="$2"
case "$action" in
in)
if [ -x /sbin/ifconfig ]; then
killall udhcpc
udhcpc -B -S -n -t 8 -ieth0
if [ $? -ne 0 ]
then
j=`cat /sys/class/net/eth0/operstate`
if [ "$j" == "up" ]
then
/sbin/ifconfig $dev 192.168.1.1 up
fi
fi
else
echo "Please teach me how to plug in an interface!" 1>&2
exit 1
fi
;;
out)
if [ -x /sbin/ifconfig ]; then
echo "Ethernet Disconnected"
/sbin/ifconfig $dev 0.0.0.0 down
else
echo "Please teach me how to unplug an interface!" 1>&2
exit 1
fi
;;
probe)
exec /sbin/ip link set "$dev" up >/dev/null 2>&1
;;
*)
echo "I have been called with a funny action of '%s'!" 1>&2
exit 1
;;
esac
我已经从sysfs中包含了对operstate条目的检查,以便在没有插入电缆的情况下配置静态ip,但问题仍然存在。