ifplugd 实现网口检测


原文链接: ifplugd 实现网口检测

ifplugd检测eth0拔插消息

 

为了检测固定网线口的拔插消息,在busybox里配置了ifplugd
 
ptions:
        -n              Don't daemonize
        -s              Don't log to syslog
        -i IFACE        Interface
        -f/-F           Treat link detection error as link down/link up
                        (otherwise exit on error)
        -a              Don't up interface at each link probe
        -M              Monitor creation/destruction of interface
                        (otherwise it must exist)
        -r PROG         Script to run
        -x ARG          Extra argument for script
        -I              Don't exit on nonzero exit code from script
        -p              Don't run script on daemon startup
        -q              Don't run script on daemon quit
        -l              Run script on startup even if no cable is detected
        -t SECS         Poll time in seconds
        -u SECS         Delay before running script after link up
        -d SECS         Delay after link down
        -m MODE         API mode (mii, priv, ethtool, wlan, iff, auto)
        -k              Kill running daemon
 
系统起来后运行 ifplugd -nI -i eth0 -r /etc/network/if.sh会在当前shell启动ifplugd并检测网口状态
去掉 -n 以守护进程运行

ifplugd -nI -i eth0 -r /etc/network/if.sh

ifplugd(eth0): started: BusyBox v1.16.1 (2011-01-28 11:42:48 HKT)
ifplugd(eth0): using SIOCETHTOOL detection mode
ifplugd(eth0): link is up
ifplugd(eth0): executing '/etc/network/if.sh eth0 up'
ifplugd(eth0): exit code: 0
GMAC:eth0: Link is down
ifplugd(eth0): link is down
ifplugd(eth0): executing '/etc/network/if.sh eth0 down'
ifplugd(eth0): exit code: 0
GMAC:eth0 : Link is Up
ifplugd(eth0): link is up
ifplugd(eth0): executing '/etc/network/if.sh eth0 up'
ifplugd(eth0): exit code: 0
 
基于上面的资料我做了个简单的网口检测程序
从上面的红色字体可以看出当ifplugd指令执行的时候会调用后面的指定的脚本,并且向脚本中传递参数
在文件系统中装上ifplugd后,启动ifplugd作为守护进程在后台执行,同时指定网口改变时执行的脚本文件,当网口和断开分别执行不同的程序,
 
脚本:

#!/bin/sh
echo "if1.sh"
echo $#
echo $0
echo $1
echo $2
if [ $# -eq 2 ];then
   if [ $1 = "eth0" ];then
   echo -n "ech0  "
   fi
   if [ $2 = "up" ];then
   echo "up"
   exec /etc/network/net_up
   elif [ $2 = "down" ];then
   echo "down"
   exec /etc/network/net_down
   elif [ $2 = "disable" ];then
   echo "disable"
   elif [ $2 = "error" ];then
   echo "error"
   fi
fi

————————————————
版权声明:本文为CSDN博主「wangxueang224」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangxueang224/article/details/8171733

`