openwrt 一个接口多IP, 多协议配置 (alias)

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0.1'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

# 接口 lan 的别名
config alias
        option interface 'lan'
        #option proto 'dhcp'
        option proto 'static'
        option ipaddr '192.168.11.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

接口处理过程在 neifd -> config.c-> config_init_interfaces() -> __interface_add()

处理了 interface 和  alias 的section,

如果是alias 就将 setction 中的 option interface 'lan' 作为当前接口的 parent_ifname

处理alias: 

 1 static bool __interface_add(struct interface *iface, struct blob_attr *config, bool alias)
 2 {
 3     struct blob_attr *tb[IFACE_ATTR_MAX];
 4     struct blob_attr *cur;
 5 
 6     blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
 7               blob_data(config), blob_len(config));
 8 
 9     if (alias) {
10         if ((cur = tb[IFACE_ATTR_INTERFACE]))
11             iface->parent_ifname = blobmsg_data(cur);
12 
13         if (!iface->parent_ifname)
14             return false;
15     } else {
16         if ((cur = tb[IFACE_ATTR_IFNAME]))
17             iface->ifname = blobmsg_data(cur);
18     }
19 
20     iface->config = config;
21     vlist_add(&interfaces, &iface->node, iface->name);
22     return true;
23 }
原文地址:https://www.cnblogs.com/listenerln/p/11101597.html