[rdkb][common][bsp][Add hostapd ucode support]
[Description]
Add hostapd ucode support for wifi7
[Release-log]
Change-Id: Ic4c3cca4a36a11fc3f9f9fdc94842b66a00721bf
diff --git a/recipes-wifi/hostapd/files/003-rdkb-uc-script-support.patch b/recipes-wifi/hostapd/files/003-rdkb-uc-script-support.patch
new file mode 100644
index 0000000..a6d1aba
--- /dev/null
+++ b/recipes-wifi/hostapd/files/003-rdkb-uc-script-support.patch
@@ -0,0 +1,228 @@
+From 85f654326e723173bc1c8329624ecbf75a0f98be Mon Sep 17 00:00:00 2001
+From: mtk27745 <rex.lu@mediatek.com>
+Date: Wed, 25 Oct 2023 16:20:01 +0800
+Subject: [PATCH] rdkb uc script support
+
+---
+ common.uc | 22 ++++++++++++----------
+ hostapd.uc | 6 +++---
+ wdev.uc | 20 ++++++++++----------
+ wpa_supplicant.uc | 4 ++--
+ 4 files changed, 27 insertions(+), 25 deletions(-)
+
+diff --git a/common.uc b/common.uc
+index ccffe3e..2b48d3e 100644
+--- a/common.uc
++++ b/common.uc
+@@ -1,6 +1,6 @@
+ import * as nl80211 from "nl80211";
+ import * as rtnl from "rtnl";
+-import { readfile, glob, basename, readlink } from "fs";
++import * as fs from "fs";
+
+ const iftypes = {
+ ap: nl80211.const.NL80211_IFTYPE_AP,
+@@ -19,12 +19,14 @@ function __phy_is_fullmac(phyidx)
+ {
+ let data = nl80211.request(nl80211.const.NL80211_CMD_GET_WIPHY, 0, { wiphy: phyidx });
+
++ if (data == null)
++ return 1;
+ return !data.software_iftypes.ap_vlan;
+ }
+
+ function phy_is_fullmac(phy)
+ {
+- let phyidx = int(trim(readfile(`/sys/class/ieee80211/${phy}/index`)));
++ let phyidx = int(trim(fs.readfile(`/sys/class/ieee80211/${phy}/index`)));
+
+ return __phy_is_fullmac(phyidx);
+ }
+@@ -39,14 +41,14 @@ function find_reusable_wdev(phyidx)
+ nl80211.const.NLM_F_DUMP,
+ { wiphy: phyidx });
+ for (let res in data)
+- if (trim(readfile(`/sys/class/net/${res.ifname}/operstate`)) == "down")
++ if (trim(fs.readfile(`/sys/class/net/${res.ifname}/operstate`)) == "down")
+ return res.ifname;
+ return null;
+ }
+
+ function wdev_create(phy, name, data)
+ {
+- let phyidx = int(readfile(`/sys/class/ieee80211/${phy}/index`));
++ let phyidx = int(fs.readfile(`/sys/class/ieee80211/${phy}/index`));
+
+ wdev_remove(name);
+
+@@ -96,7 +98,7 @@ function wdev_create(phy, name, data)
+
+ function phy_sysfs_file(phy, name)
+ {
+- return trim(readfile(`/sys/class/ieee80211/${phy}/${name}`));
++ return trim(fs.readfile(`/sys/class/ieee80211/${phy}/${name}`));
+ }
+
+ function macaddr_split(str)
+@@ -111,7 +113,7 @@ function macaddr_join(addr)
+
+ function wdev_macaddr(wdev)
+ {
+- return trim(readfile(`/sys/class/net/${wdev}/address`));
++ return trim(fs.readfile(`/sys/class/net/${wdev}/address`));
+ }
+
+ const phy_proto = {
+@@ -221,10 +223,10 @@ const phy_proto = {
+ },
+
+ for_each_wdev: function(cb) {
+- let wdevs = glob(`/sys/class/ieee80211/${this.name}/device/net/*`);
+- wdevs = map(wdevs, (arg) => basename(arg));
++ let wdevs = fs.glob(`/sys/class/ieee80211/${this.name}/device/net/*`);
++ wdevs = map(wdevs, (arg) => fs.basename(arg));
+ for (let wdev in wdevs) {
+- if (basename(readlink(`/sys/class/net/${wdev}/phy80211`)) != this.name)
++ if (fs.basename(fs.readlink(`/sys/class/net/${wdev}/phy80211`)) != this.name)
+ continue;
+
+ cb(wdev);
+@@ -234,7 +236,7 @@ const phy_proto = {
+
+ function phy_open(phy)
+ {
+- let phyidx = readfile(`/sys/class/ieee80211/${phy}/index`);
++ let phyidx = fs.readfile(`/sys/class/ieee80211/${phy}/index`);
+ if (!phyidx)
+ return null;
+
+diff --git a/hostapd.uc b/hostapd.uc
+index 1bce754..5f5ca35 100644
+--- a/hostapd.uc
++++ b/hostapd.uc
+@@ -1,5 +1,5 @@
+ let libubus = require("ubus");
+-import { open, readfile } from "fs";
++import * as fs from "fs";
+ import { wdev_create, wdev_remove, is_equal, vlist_new, phy_is_fullmac, phy_open } from "common";
+
+ let ubus = libubus.connect();
+@@ -562,7 +562,7 @@ function config_add_bss(config, name)
+
+ function iface_load_config(filename)
+ {
+- let f = open(filename, "r");
++ let f = fs.open(filename, "r");
+ if (!f)
+ return null;
+
+@@ -620,7 +620,7 @@ function iface_load_config(filename)
+ }
+
+ if (hostapd.data.file_fields[val[0]])
+- bss.hash[val[0]] = hostapd.sha1(readfile(val[1]));
++ bss.hash[val[0]] = hostapd.sha1(fs.readfile(val[1]));
+
+ push(bss.data, line);
+ }
+diff --git a/wdev.uc b/wdev.uc
+index cf438f7..5eb5e3c 100644
+--- a/wdev.uc
++++ b/wdev.uc
+@@ -1,7 +1,7 @@
+ #!/usr/bin/env ucode
+ 'use strict';
+ import { vlist_new, is_equal, wdev_create, wdev_remove, phy_open } from "/usr/share/hostap/common.uc";
+-import { readfile, writefile, basename, readlink, glob } from "fs";
++import * as fs from "fs";
+ let libubus = require("ubus");
+
+ let keep_devices = {};
+@@ -32,7 +32,7 @@ function iface_start(wdev)
+ {
+ let ifname = wdev.ifname;
+
+- if (readfile(`/sys/class/net/${ifname}/ifindex`)) {
++ if (fs.readfile(`/sys/class/net/${ifname}/ifindex`)) {
+ system([ "ip", "link", "set", "dev", ifname, "down" ]);
+ wdev_remove(ifname);
+ }
+@@ -89,7 +89,7 @@ function iface_cb(new_if, old_if)
+ function drop_inactive(config)
+ {
+ for (let key in config) {
+- if (!readfile(`/sys/class/net/${key}/ifindex`))
++ if (!fs.readfile(`/sys/class/net/${key}/ifindex`))
+ delete config[key];
+ }
+ }
+@@ -108,23 +108,23 @@ function delete_ifname(config)
+
+ function add_existing(phy, config)
+ {
+- let wdevs = glob(`/sys/class/ieee80211/${phy}/device/net/*`);
+- wdevs = map(wdevs, (arg) => basename(arg));
++ let wdevs = fs.glob(`/sys/class/ieee80211/${phy}/device/net/*`);
++ wdevs = map(wdevs, (arg) => fs.basename(arg));
+ for (let wdev in wdevs) {
+ if (config[wdev])
+ continue;
+
+- if (basename(readlink(`/sys/class/net/${wdev}/phy80211`)) != phy)
++ if (fs.basename(fs.readlink(`/sys/class/net/${wdev}/phy80211`)) != phy)
+ continue;
+
+- if (trim(readfile(`/sys/class/net/${wdev}/operstate`)) == "down")
++ if (trim(fs.readfile(`/sys/class/net/${wdev}/operstate`)) == "down")
+ config[wdev] = {};
+ }
+ }
+
+ function usage()
+ {
+- warn(`Usage: ${basename(sourcepath())} <phy> <command> [<arguments>]
++ warn(`Usage: ${fs.basename(sourcepath())} <phy> <command> [<arguments>]
+
+ Commands:
+ set_config <config> [<device]...] - set phy configuration
+@@ -150,7 +150,7 @@ const commands = {
+ exit(1);
+ }
+
+- let old_config = readfile(statefile);
++ let old_config = fs.readfile(statefile);
+ if (old_config)
+ old_config = json(old_config);
+
+@@ -175,7 +175,7 @@ const commands = {
+
+ drop_inactive(config.data);
+ delete_ifname(config.data);
+- writefile(statefile, sprintf("%J", config.data));
++ fs.writefile(statefile, sprintf("%J", config.data));
+ },
+ get_macaddr: function(args) {
+ let data = {};
+diff --git a/wpa_supplicant.uc b/wpa_supplicant.uc
+index 2a9de67..cd149dc 100644
+--- a/wpa_supplicant.uc
++++ b/wpa_supplicant.uc
+@@ -1,5 +1,5 @@
+ let libubus = require("ubus");
+-import { open, readfile } from "fs";
++import * as fs from "fs";
+ import { wdev_create, wdev_remove, is_equal, vlist_new, phy_open } from "common";
+
+ let ubus = libubus.connect();
+@@ -62,7 +62,7 @@ function iface_cb(new_if, old_if)
+
+ function prepare_config(config)
+ {
+- config.config_data = readfile(config.config);
++ config.config_data = fs.readfile(config.config);
+
+ return { config: config };
+ }
+--
+2.18.0
+