ILD

netifd hotplug
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2019-10-11 站点:Inside Linux Development

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-ddns
15-teql       30-repacd     75-rstp       99-igmpproxy
20-firewall   50-miniupnpd  90-rngd


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.