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 }