Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions modules/luci-base/htdocs/luci-static/resources/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -3371,6 +3371,7 @@ WifiDevice = baseclass.extend(/** @lends LuCI.network.WifiDevice.prototype */ {
* - `n` - IEEE 802.11n mode, 2.4 or 5 GHz, up to 600 Mbit/s
* - `ac` - IEEE 802.11ac mode, 5 GHz, up to 6770 Mbit/s
* - `ax` - IEEE 802.11ax mode, 2.4 or 5 GHz
* - 'be' - IEEE 802.11be mode, 2.4, 5 or 6 GHz
*/
getHWModes: function() {
var hwmodes = this.ubus('dev', 'iwinfo', 'hwmodes');
Expand All @@ -3396,6 +3397,11 @@ WifiDevice = baseclass.extend(/** @lends LuCI.network.WifiDevice.prototype */ {
* - `HE40` - applicable to IEEE 802.11ax, 40 MHz wide channels
* - `HE80` - applicable to IEEE 802.11ax, 80 MHz wide channels
* - `HE160` - applicable to IEEE 802.11ax, 160 MHz wide channels
* - `EHT20` - applicable to IEEE 802.11be, 20 MHz wide channels
* - `EHT40` - applicable to IEEE 802.11be, 40 MHz wide channels
* - `EHT80` - applicable to IEEE 802.11be, 80 MHz wide channels
* - `EHT160` - applicable to IEEE 802.11be, 160 MHz wide channels
* - `EHT320` - applicable to IEEE 802.11be, 320 MHz wide channels
*/
getHTModes: function() {
var htmodes = this.ubus('dev', 'iwinfo', 'htmodes');
Expand Down Expand Up @@ -4101,6 +4107,17 @@ WifiNetwork = baseclass.extend(/** @lends LuCI.network.WifiNetwork.prototype */
* @property {number} [he_dcm]
* Specifies whether dual concurrent modulation is used for the transmission.
* Only applicable to HE rates.
*
* @property {boolean} [eht]
* Specifies whether this rate is an EHT (IEEE 802.11be) rate.
*
* @property {number} [eht_gi]
* Specifies whether the guard interval used for the transmission.
* Only applicable to EHT rates.
*
* @property {number} [eht_dcm]
* Specifies whether dual concurrent modulation is used for the transmission.
* Only applicable to EHT rates.
*/

/**
Expand Down
2 changes: 1 addition & 1 deletion modules/luci-base/root/usr/share/rpcd/ucode/luci
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ const methods = {
relayd: access('/usr/sbin/relayd') == true,
};

const wifi_features = [ 'eap', '11ac', '11ax', '11r', 'acs', 'sae', 'owe', 'suiteb192', 'wep', 'wps', 'ocv' ];
const wifi_features = [ 'eap', '11ac', '11ax', '11be', '11r', 'acs', 'sae', 'owe', 'suiteb192', 'wep', 'wps', 'ocv' ];

if (access('/usr/sbin/hostapd')) {
result.hostapd = { cli: access('/usr/sbin/hostapd_cli') == true };
Expand Down
34 changes: 31 additions & 3 deletions modules/luci-compat/luasrc/view/cbi/wireless_modefreq.htm
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
var modes = [
'', 'Legacy', true,
'n', 'N', hwmodes.n,
'ac', 'AC', hwmodes.ac
'ac', 'AC', hwmodes.ac,
'ax', 'AX', hwmodes.ax,
'be', 'BE', hwmodes.be
];

var htmodes = {
Expand All @@ -45,6 +47,19 @@
'VHT40', '40 MHz', htmodes.VHT40,
'VHT80', '80 MHz', htmodes.VHT80,
'VHT160', '160 MHz', htmodes.VHT160
],
'ax': [
'HE20', '20 MHz', htmodes.HE20,
'HE40', '40 MHz', htmodes.HE40,
'HE80', '80 MHz', htmodes.HE80,
'HE160', '160 MHz', htmodes.HE160
],
'be': [
'EHT20', '20 MHz', htmodes.EHT20,
'EHT40', '40 MHz', htmodes.EHT40,
'EHT80', '80 MHz', htmodes.EHT80,
'EHT160', '160 MHz', htmodes.EHT160,
'EHT320', '320 MHz', htmodes.EHT320
]
};

Expand All @@ -59,7 +74,16 @@
],
'ac': [
'11a', '5 GHz', true
]
],
'ax': [
'11a', '2 GHz', true,
'11a', '5 GHz', true
],
'be': [
'11a', '2 GHz', true,
'11a', '5 GHz', true,
'11a', '6 GHz', true
]
};

function cbi_set_values(sel, vals)
Expand Down Expand Up @@ -129,7 +153,11 @@

cbi_set_values(mode, modes);

if (/VHT20|VHT40|VHT80|VHT160/.test(<%= luci.http.write_json(self.map:get(section, "htmode")) %>))
if (/EHT20|EHT40|EHT80|EHT160|EHT320/.test(<%= luci.http.write_json(self.map:get(section, "htmode")) %>))
Comment thread
systemcrash marked this conversation as resolved.
mode.value = 'be';
else if (/HE20|HE40|HE80|HE160/.test(<%= luci.http.write_json(self.map:get(section, "htmode")) %>))
mode.value = 'ax';
else if (/VHT20|VHT40|VHT80|VHT160/.test(<%= luci.http.write_json(self.map:get(section, "htmode")) %>))
mode.value = 'ac';
else if (/HT20|HT40/.test(<%= luci.http.write_json(self.map:get(section, "htmode")) %>))
mode.value = 'n';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,9 @@ function format_wifirate(rate) {
mhz = rate.mhz, nss = rate.nss,
mcs = rate.mcs, sgi = rate.short_gi,
he = rate.he, he_gi = rate.he_gi,
he_dcm = rate.he_dcm;
he_dcm = rate.he_dcm,
eht = rate?.eht ?? false, eht_gi = rate?.eht_gi ?? 0,
eht_dcm = rate?.eht_dcm ?? 0;

if (ht || vht) {
if (vht) s += ', VHT-MCS\xa0%d'.format(mcs);
Expand All @@ -217,6 +219,13 @@ function format_wifirate(rate) {
if (he_dcm) s += ', HE-DCM\xa0%d'.format(he_dcm);
}

if (eht) {
s += ', EHT-MCS\xa0%d'.format(mcs);
if (nss) s += ', EHT-NSS\xa0%d'.format(nss);
if (eht_gi) s += ', EHT-GI\xa0%d'.format(eht_gi);
if (eht_dcm) s += ', EHT-DCM\xa0%d'.format(eht_dcm);
}

return s;
}

Expand Down Expand Up @@ -298,14 +307,17 @@ function add_dependency_permutations(o, deps) {
o.depends(res[i]);
}

// Define a class CBIWifiFrequencyValue that extends form.Value
var CBIWifiFrequencyValue = form.Value.extend({
// Declare an RPC method to get the frequency list for a given device
callFrequencyList: rpc.declare({
object: 'iwinfo',
method: 'freqlist',
params: [ 'device' ],
expect: { results: [] }
}),

// Load method to fetch WiFi device details and frequency list
load: function(section_id) {
return Promise.all([
network.getWifiDevice(section_id),
Expand Down Expand Up @@ -334,13 +346,16 @@ var CBIWifiFrequencyValue = form.Value.extend({
var hwmodelist = L.toArray(data[0] ? data[0].getHWModes() : null)
.reduce(function(o, v) { o[v] = true; return o }, {});

// Define supported modes
this.modes = [
'', 'Legacy', hwmodelist.a || hwmodelist.b || hwmodelist.g,
'n', 'N', hwmodelist.n,
'ac', 'AC', L.hasSystemFeature('hostapd', '11ac') && hwmodelist.ac,
'ax', 'AX', L.hasSystemFeature('hostapd', '11ax') && hwmodelist.ax
'ax', 'AX', L.hasSystemFeature('hostapd', '11ax') && hwmodelist.ax,
'be', 'BE', L.hasSystemFeature('hostapd', '11be') && hwmodelist.be
];

// Create a list of HT modes based on device capabilities
var htmodelist = L.toArray(data[0] ? data[0].getHTModes() : null)
.reduce(function(o, v) { o[v] = true; return o }, {});

Expand All @@ -361,9 +376,18 @@ var CBIWifiFrequencyValue = form.Value.extend({
'HE40', '40 MHz', htmodelist.HE40,
'HE80', '80 MHz', htmodelist.HE80,
'HE160', '160 MHz', htmodelist.HE160
],
'be': [
'EHT20', '20 MHz', htmodelist.EHT20,
'EHT40', '40 MHz', htmodelist.EHT40,
'EHT80', '80 MHz', htmodelist.EHT80,
'EHT160', '160 MHz', htmodelist.EHT160,
'EHT320', '320 MHz', htmodelist.EHT320
]
};

// Define available bands for widget selection based on channel availability
// AX and BE are available on 2/5/6G bands
this.bands = {
'': [
'2g', '2.4 GHz', this.channels['2g'].length > 3,
Expand All @@ -381,11 +405,17 @@ var CBIWifiFrequencyValue = form.Value.extend({
'2g', '2.4 GHz', this.channels['2g'].length > 3,
'5g', '5 GHz', this.channels['5g'].length > 3,
'6g', '6 GHz', this.channels['6g'].length > 3
]
],
'be': [
'2g', '2.4 GHz', this.channels['2g'].length > 3,
'5g', '5 GHz', this.channels['5g'].length > 3,
'6g', '6 GHz', this.channels['6g'].length > 3
],
};
}, this));
},

// Set values in the select element
setValues: function(sel, vals) {
if (sel.vals)
sel.vals.selected = sel.selectedIndex;
Expand Down Expand Up @@ -445,7 +475,10 @@ var CBIWifiFrequencyValue = form.Value.extend({

this.setValues(mode, this.modes);

if (/HE20|HE40|HE80|HE160/.test(htval))
// Determine mode based on htmode value
if (/EHT20|EHT40|EHT80|EHT160|EHT320/.test(htval))
mode.value = 'be';
else if (/HE20|HE40|HE80|HE160/.test(htval))
mode.value = 'ax';
else if (/VHT20|VHT40|VHT80|VHT160/.test(htval))
mode.value = 'ac';
Expand All @@ -459,7 +492,9 @@ var CBIWifiFrequencyValue = form.Value.extend({
if (hwval != null) {
this.useBandOption = false;

if (/a/.test(hwval))
if (/be/.test(mode.value))
band.value = '6g';
else if (/ax/.test(mode.value))
Comment thread
systemcrash marked this conversation as resolved.
band.value = '5g';
else
band.value = '2g';
Expand Down