From: Felix Fietkau Date: Tue, 5 Apr 2011 01:52:39 +0000 (+0200) Subject: add code for cleaning up unused devices mentioned in the config X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=commitdiff_plain;h=d3a4844047c7b3c62511a9836a81703b5ee70fc0;hp=b18fb36bd3c7615733c351c99691e1139f386c0c add code for cleaning up unused devices mentioned in the config --- diff --git a/config.c b/config.c index 6019862..1711121 100644 --- a/config.c +++ b/config.c @@ -180,6 +180,7 @@ config_init_interfaces(const char *name) if (!strcmp(s->type, "interface")) config_parse_interface(s); } + cleanup_devices(); config_init = false; start_pending_interfaces(); diff --git a/config/network b/config/network index 00c5b51..0a02e89 100644 --- a/config/network +++ b/config/network @@ -12,6 +12,9 @@ config device option ifname "eth0.1 eth0.2" option mtu 1500 +config device + option name dummy + config interface lan option ifname 'br-lan' option proto static diff --git a/device.c b/device.c index 57b0ac9..34b49d4 100644 --- a/device.c +++ b/device.c @@ -197,3 +197,16 @@ void remove_device_user(struct device_user *dep) dep->dev = NULL; } + +void +cleanup_devices(void) +{ + struct device *dev, *tmp; + + avl_for_each_element_safe(&devices, dev, avl, tmp) { + if (!list_empty(&dev->users)) + continue; + + free_device(dev); + } +} diff --git a/device.h b/device.h index 79aec32..bbb78d8 100644 --- a/device.h +++ b/device.h @@ -100,6 +100,8 @@ int claim_device(struct device *dev); void release_device(struct device *dev); int check_device_state(struct device *dev); +void cleanup_devices(void); + struct device *get_vlan_device_chain(const char *ifname, bool create); struct device *bridge_create(const char *name, struct uci_section *s);