luci-base: network.js: Show clients also from wifi VLANs. 4495/head
authorOldřich Jedlička <oldium.pro@gmail.com>
Mon, 5 Oct 2020 20:42:37 +0000 (22:42 +0200)
committerOldřich Jedlička <oldium.pro@gmail.com>
Tue, 6 Oct 2020 11:30:47 +0000 (13:30 +0200)
Iterate through VLANs to get the clients connected on configured wifi
VLANs (as configured by `wifi-vlan` sections in `wireless` configuration).

This is a minimum support for VLANs on wireless network. The VLAN name is
nowhere displayed, but at least clients using VLANs are visible.

Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
modules/luci-base/htdocs/luci-static/resources/network.js

index 856421cd319960fccc0b943fa81f4e011633bdb0..1f749c593cacffeddd02de6f4c2f64bc77ffa65e 100644 (file)
@@ -3570,6 +3570,24 @@ WifiNetwork = baseclass.extend(/** @lends LuCI.network.WifiNetwork.prototype */
                return ifname;
        },
 
+       /**
+        * Get the Linux VLAN network device names.
+        *
+        * @returns {string[]}
+        * Returns the current Linux VLAN network device name as resolved
+        * from `ubus` runtime information or empty array if this network
+        * has no associated VLAN network devices.
+        */
+       getVlanIfnames: function() {
+               var vlans = L.toArray(this.ubus('net', 'vlans')),
+                   ifnames = [];
+
+               for (var i = 0; i < vlans.length; i++)
+                       ifnames.push(vlans[i]['ifname']);
+
+               return ifnames;
+       },
+
        /**
         * Get the name of the corresponding wifi radio device.
         *
@@ -3880,7 +3898,15 @@ WifiNetwork = baseclass.extend(/** @lends LuCI.network.WifiNetwork.prototype */
         * with this network.
         */
        getAssocList: function() {
-               return callIwinfoAssoclist(this.getIfname());
+               var tasks = [];
+               var ifnames = [ this.getIfname() ].concat(this.getVlanIfnames());
+
+               for (var i = 0; i < ifnames.length; i++)
+                       tasks.push(callIwinfoAssoclist(ifnames[i]));
+
+               return Promise.all(tasks).then(function(values) {
+                       return Array.prototype.concat.apply([], values);
+               });
        },
 
        /**