examples: sync scripts with openwrt
authorFelix Fietkau <[email protected]>
Wed, 6 Aug 2025 10:28:45 +0000 (12:28 +0200)
committerFelix Fietkau <[email protected]>
Wed, 6 Aug 2025 10:28:45 +0000 (12:28 +0200)
Signed-off-by: Felix Fietkau <[email protected]>
examples/wireless-device.uc
examples/wireless.uc

index b0faef1a0a6fd493589a7c50417b989ff65634fe..22f5ee54d97388e0278ef0a44c244e88b75356e1 100644 (file)
@@ -36,6 +36,8 @@ function handle_link(dev, data, up)
                     (data.type == "vif" && config.mode == "ap");
 
        let dev_data = {
+               external: 2,
+               check_vlan: false,
                isolate: !!config.bridge_isolate,
                wireless: true,
                wireless_ap: ap,
@@ -389,11 +391,14 @@ function update(data)
 
 function start()
 {
-       if (this.delete || this.data.config.disabled)
+       if (this.delete)
                return;
 
        this.dbg("start, state=" + this.state);
        this.autostart = true;
+       if (this.data.config.disabled)
+               return;
+
        wdev_reset(this);
 
        if (this.state != "down")
@@ -425,7 +430,10 @@ function check()
                return;
 
        wdev_config_init(this);
-       this.setup();
+       if (this.data.config.disabled)
+               this.teardown();
+       else
+               this.setup();
 }
 
 function wdev_mark_up(wdev)
@@ -530,7 +538,7 @@ function hotplug(name, add)
                    data.type != "vif" && data.type != "vlan")
                        continue;
 
-               handle_link(dev, data, up);
+               handle_link(dev, data, add);
        }
 }
 
index b63ec239c71c888ffaaa016d412fb74879700266..956ca54413e8902d1b164ab91c4865bb098843ef 100644 (file)
@@ -183,6 +183,41 @@ function config_init(uci)
        }
 
        let udata = ubus.call({
+               object: "service",
+               method: "get_data",
+               data: {
+                       type: "wifi-device"
+               },
+       });
+       for (let svcname, svc in udata) {
+               for (let typename, data in svc) {
+                       for (let radio, config in data) {
+                               if (type(config) != "object")
+                                       continue;
+
+                               let dev = devices[radio];
+                               if (dev) {
+                                       dev.config = { ...dev.config, ...config };
+                                       continue;
+                               }
+
+                               let handler = wireless.handlers[config.type];
+                               if (!handler)
+                                       continue;
+
+                               dev = devices[radio] = {
+                                       name,
+                                       config,
+
+                                       vif: [],
+                               };
+                               handlers[radio] = handler;
+                       }
+               }
+       }
+
+
+       udata = ubus.call({
                object: "service",
                method: "get_data",
                data: {
@@ -193,6 +228,9 @@ function config_init(uci)
        for (let svcname, svc in udata) {
                for (let typename, data in svc) {
                        for (let radio, vifs in data) {
+                               if (type(vifs) != "object")
+                                       continue;
+
                                for (let name, vif in vifs) {
                                        let devs = vif.device;
                                        if (type(devs) != "array")
@@ -241,11 +279,11 @@ function check_interfaces()
                        dev.check();
 }
 
-function hotplug(name, add)
+function hotplug(ifname, add)
 {
        for (let name, dev in wireless.devices)
                if (dev.autostart)
-                       dev.hotplug(name, add);
+                       dev.hotplug(ifname, add);
 }
 
 const network_config_attr = {