Object.assign(protos, { none: { no_device: false } });
/* Hack: emulate relayd protocol */
- if (!protos.hasOwnProperty('relay'))
+ if (!protos.hasOwnProperty('relay') && L.hasSystemFeature('relayd'))
Object.assign(protos, { relay: { no_device: true } });
Object.assign(_protospecs, protos);
L.resolveDefault(callLuciWirelessDevices(), {}),
L.resolveDefault(callLuciHostHints(), {}),
getProtocolHandlers(),
- uci.load(['network', 'wireless', 'luci'])
+ L.resolveDefault(uci.load('network')),
+ L.resolveDefault(uci.load('wireless')),
+ L.resolveDefault(uci.load('luci'))
]).then(function(data) {
var netifd_ifaces = data[0],
board_json = data[1],
devices[netid] = this.instantiateDevice(netid);
}
+ /* find uci declared devices */
+ var uciDevices = uci.sections('network', 'device');
+
+ for (var i = 0; i < uciDevices.length; i++) {
+ var type = uciDevices[i].type,
+ name = uciDevices[i].name;
+
+ if (!type || !name || devices.hasOwnProperty(name))
+ continue;
+
+ if (type == 'bridge')
+ _state.isBridge[name] = true;
+
+ devices[name] = this.instantiateDevice(name);
+ }
+
var rv = [];
for (var netdev in devices)
}
}
+ rv.sort(function(a, b) {
+ if (a.metric != b.metric)
+ return (a.metric - b.metric);
+
+ if (a.interface < b.interface)
+ return -1;
+ else if (a.interface > b.interface)
+ return 1;
+
+ return 0;
+ });
+
return rv;
}, this));
},
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.
*
* 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);
+ });
},
/**