From: Felix Fietkau Date: Tue, 12 Aug 2025 13:40:33 +0000 (+0200) Subject: config: add support for defining interfaces via procd data X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=575b04326e3294f1a9dfb1f78a8676a2ffbee7f8;p=project%2Fnetifd.git config: add support for defining interfaces via procd data Uses the data type 'network-interface' Signed-off-by: Felix Fietkau --- diff --git a/config.c b/config.c index 3acfd9b..0492bf6 100644 --- a/config.c +++ b/config.c @@ -37,6 +37,7 @@ static struct uci_package *uci_network; static struct blob_attr *board_netdevs; static struct blob_buf b; static LIST_HEAD(config_vlans); +static LIST_HEAD(config_ifaces); struct vlan_config_entry { struct list_head list; @@ -566,9 +567,30 @@ config_init_package(const char *config) return p; } +static void +config_procd_interface_cb(struct blob_attr *data) +{ + struct interface *iface; + const char *name = blobmsg_name(data); + + iface = interface_alloc(name, data, false); + if (!iface) + return; + + data = blob_memdup(data); + if (!data) { + interface_free(iface); + return; + } + + iface->config = data; + list_add(&iface->node.avl.list, &config_ifaces); +} + static void config_init_interfaces(void) { + struct interface *iface; struct uci_element *e; uci_foreach_element(&uci_network->sections, e) { @@ -584,6 +606,15 @@ config_init_interfaces(void) if (!strcmp(s->type, "alias")) config_parse_interface(s, true); } + + netifd_ubus_get_procd_data("network-interface", config_procd_interface_cb); + while (!list_empty(&config_ifaces)) { + iface = list_first_entry(&config_ifaces, struct interface, node.avl.list); + list_del(&iface->node.avl.list); + + if (!interface_add(iface, iface->config)) + interface_free(iface); + } } static void