ignore mac80211 devices specified in /etc/config/network
authorFelix Fietkau <nbd@openwrt.org>
Thu, 14 Jun 2012 16:48:33 +0000 (18:48 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 14 Jun 2012 16:48:33 +0000 (18:48 +0200)
device.c
system-dummy.c
system-linux.c
system.h

index 7958fed7b4cc8df8413ff0efa9d6f68a397a4867..a2d563778e8d533c058771f6064bb3a9f324a8ae 100644 (file)
--- a/device.c
+++ b/device.c
@@ -374,6 +374,9 @@ device_create_default(const char *name, bool external)
 {
        struct device *dev;
 
+       if (!external && system_if_force_external(name))
+               return NULL;
+
        D(DEVICE, "Create simple device '%s'\n", name);
        dev = calloc(1, sizeof(*dev));
        dev->external = external;
index cae421d1c117fc0978e70604f4b0aadfc711bbd8..a2411f32998c9aae6a05ccba65897c1a1be26fd7 100644 (file)
@@ -66,6 +66,11 @@ int system_vlan_del(struct device *dev)
        return 0;
 }
 
+bool system_if_force_external(const char *ifname)
+{
+       return false;
+}
+
 int system_if_up(struct device *dev)
 {
        D(SYSTEM, "ifconfig %s up\n", dev->ifname);
index c7b8b8f66c8c45bdcdf3dbdd7f57de9376d8402b..ceb5ac55082539d6d746cb8ef6e2ac096453c2fe 100644 (file)
@@ -769,6 +769,16 @@ static void system_add_link_modes(struct blob_buf *b, __u32 mask)
        }
 }
 
+bool
+system_if_force_external(const char *ifname)
+{
+       char buf[64];
+       struct stat s;
+
+       snprintf(buf, sizeof(buf), "/sys/class/net/%s/phy80211", ifname);
+       return stat(buf, &s) == 0;
+}
+
 int
 system_if_dump_info(struct device *dev, struct blob_buf *b)
 {
index a197590eadf41ca03437405737d0e47b39c051bc..73ceb415376acd9a0164ef58e23e8e120678ad17 100644 (file)
--- a/system.h
+++ b/system.h
@@ -64,6 +64,7 @@ int system_if_check(struct device *dev);
 int system_if_dump_info(struct device *dev, struct blob_buf *b);
 int system_if_dump_stats(struct device *dev, struct blob_buf *b);
 struct device *system_if_get_parent(struct device *dev);
+bool system_if_force_external(const char *ifname);
 
 int system_add_address(struct device *dev, struct device_addr *addr);
 int system_del_address(struct device *dev, struct device_addr *addr);