netifd,在interface up或down的时候都会通过通用的框架调用hotplug。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | #define DEFAULT_HOTPLUG_PATH    "/sbin/hotplug-call"    setenv("ACTION", eventnames[event], 1);    setenv("INTERFACE", ifname, 1);    if (device)        setenv("DEVICE", device, 1);    if (event == IFEV_UPDATE) {        if (updated & IUF_ADDRESS)            setenv("IFUPDATE_ADDRESSES", "1", 1);        if (updated & IUF_ROUTE)            setenv("IFUPDATE_ROUTES", "1", 1);        if (updated & IUF_PREFIX)            setenv("IFUPDATE_PREFIXES", "1", 1);        if (updated & IUF_DATA)            setenv("IFUPDATE_DATA", "1", 1);    }    argv[0] = hotplug_cmd_path;    argv[1] = "iface";    argv[2] = NULL;    execvp(argv[0], argv); | 
而hotplug-call是一个脚本,它会调用/etc/hotplug.d/iface下面的所有的脚本。
1 2 3 4 5  | [ \! -z "$1" -a -d /etc/hotplug.d/$1 ] && {        for script in $(ls /etc/hotplug.d/$1/* 2>&-); do (                [ -f $script ] && . $script        ); done} | 
动作相关的参数通过环境变量传递。如ACTION/INTERFACE/DEVICE。
当前/etc/hotplug.d/iface下面的脚本有:
1 2 3 4  | # ls /etc/hotplug.d/iface/00-netstate   25-dnsmasq    65-pppoe      95-ddns15-teql       30-repacd     75-rstp       99-igmpproxy20-firewall   50-miniupnpd  90-rngd |