Re: [PATCH] hostapd: add support for unicast beacons

2023-02-26 Thread Hauke Mehrtens

On 1/9/23 14:47, Raphaël Mélotte wrote:

Also refresh patches.

Upstream status:
https://patchwork.ozlabs.org/project/hostap/patch/20230105200945.761324-1-raphael.melo...@mind.be/

Signed-off-by: Raphaël Mélotte 
---
  .../620-add-support-for-unicast-beacons.patch | 70 +++
  .../hostapd/patches/700-wifi-reload.patch |  2 +-
  .../patches/720-iface_max_num_sta.patch   |  2 +-
  ...750-qos_map_set_without_interworking.patch |  2 +-
  4 files changed, 73 insertions(+), 3 deletions(-)
  create mode 100644 
package/network/services/hostapd/patches/620-add-support-for-unicast-beacons.patch



The patch is marked as "Changes Requested" in upstream hostapd.
Please answer Joni to get this change into upstream hostapd first.

Hauke

___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


[PATCH] hostapd: add support for unicast beacons

2023-01-09 Thread Raphaël Mélotte
Also refresh patches.

Upstream status:
https://patchwork.ozlabs.org/project/hostap/patch/20230105200945.761324-1-raphael.melo...@mind.be/

Signed-off-by: Raphaël Mélotte 
---
 .../620-add-support-for-unicast-beacons.patch | 70 +++
 .../hostapd/patches/700-wifi-reload.patch |  2 +-
 .../patches/720-iface_max_num_sta.patch   |  2 +-
 ...750-qos_map_set_without_interworking.patch |  2 +-
 4 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 
package/network/services/hostapd/patches/620-add-support-for-unicast-beacons.patch

diff --git 
a/package/network/services/hostapd/patches/620-add-support-for-unicast-beacons.patch
 
b/package/network/services/hostapd/patches/620-add-support-for-unicast-beacons.patch
new file mode 100644
index 00..c465b5d577
--- /dev/null
+++ 
b/package/network/services/hostapd/patches/620-add-support-for-unicast-beacons.patch
@@ -0,0 +1,70 @@
+--- a/hostapd/config_file.c
 b/hostapd/config_file.c
+@@ -3399,6 +3399,12 @@ static int hostapd_config_fill(struct ho
+  line);
+   return 1;
+   }
++  } else if (os_strcmp(buf, "beacon_da") == 0) {
++  if (hwaddr_aton(pos, bss->beacon_da)) {
++  wpa_printf(MSG_ERROR, "Line %d: invalid beacon_da item",
++ line);
++  return 1;
++  }
+   } else if (os_strcmp(buf, "use_driver_iface_addr") == 0) {
+   conf->use_driver_iface_addr = atoi(pos);
+   } else if (os_strcmp(buf, "ieee80211w") == 0) {
+--- a/hostapd/ctrl_iface.c
 b/hostapd/ctrl_iface.c
+@@ -1040,6 +1040,14 @@ static int hostapd_ctrl_iface_get_config
+   return pos - buf;
+   pos += ret;
+ 
++  if (!is_zero_ether_addr(hapd->conf->beacon_da)) {
++  ret = os_snprintf(pos, end - pos, "beacon_da=" MACSTR "\n",
++MAC2STR(hapd->conf->beacon_da));
++  if (os_snprintf_error(end - pos, ret))
++  return pos - buf;
++  pos += ret;
++  }
++
+ #ifdef CONFIG_WPS
+   ret = os_snprintf(pos, end - pos, "wps_state=%s\n",
+ hapd->conf->wps_state == 0 ? "disabled" :
+--- a/hostapd/hostapd.conf
 b/hostapd/hostapd.conf
+@@ -94,6 +94,9 @@ ssid=test
+ # UTF-8 SSID: Whether the SSID is to be interpreted using UTF-8 encoding
+ #utf8_ssid=1
+ 
++# Destination address for beacon frames (defaults to broadcast)
++#beacon_da=ff:ff:ff:ff:ff:ff
++
+ # Country code (ISO/IEC 3166-1). Used to set regulatory domain.
+ # Set as needed to indicate country in which device is operating.
+ # This can limit available channels and transmit power.
+--- a/src/ap/ap_config.h
 b/src/ap/ap_config.h
+@@ -470,6 +470,7 @@ struct hostapd_bss_config {
+   struct hostapd_vlan *vlan;
+ 
+   macaddr bssid;
++  macaddr beacon_da;
+ 
+   /*
+* Maximum listen interval that STAs can use when associating with this
+--- a/src/ap/beacon.c
 b/src/ap/beacon.c
+@@ -1595,7 +1595,12 @@ int ieee802_11_build_ap_params(struct ho
+   head->frame_control = IEEE80211_FC(WLAN_FC_TYPE_MGMT,
+  WLAN_FC_STYPE_BEACON);
+   head->duration = host_to_le16(0);
+-  os_memset(head->da, 0xff, ETH_ALEN);
++  if (is_zero_ether_addr(hapd->conf->beacon_da) ||
++  is_broadcast_ether_addr(hapd->conf->beacon_da))
++  os_memset(head->da, 0xff, ETH_ALEN);
++  else {
++  os_memcpy(head->da, hapd->conf->beacon_da, ETH_ALEN);
++  }
+ 
+   os_memcpy(head->sa, hapd->own_addr, ETH_ALEN);
+   os_memcpy(head->bssid, hapd->own_addr, ETH_ALEN);
diff --git a/package/network/services/hostapd/patches/700-wifi-reload.patch 
b/package/network/services/hostapd/patches/700-wifi-reload.patch
index 174127df6e..da9837d137 100644
--- a/package/network/services/hostapd/patches/700-wifi-reload.patch
+++ b/package/network/services/hostapd/patches/700-wifi-reload.patch
@@ -47,7 +47,7 @@
enum hostapd_logger_level logger_syslog_level, logger_stdout_level;
  
unsigned int logger_syslog; /* module bitfield */
-@@ -969,6 +971,7 @@ struct eht_phy_capabilities_info {
+@@ -970,6 +972,7 @@ struct eht_phy_capabilities_info {
  struct hostapd_config {
struct hostapd_bss_config **bss, *last_bss;
size_t num_bss;
diff --git 
a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch 
b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
index ed76d22dd0..e50965de06 100644
--- a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
+++ b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch
@@ -71,7 +71,7 @@
   " since no room for additional STA",
 --- a/src/ap/ap_config.h
 +++ b/src/ap/ap_config.h
-@@ -1010,6 +1010,8 @@ struct hostapd_config {
+@@ -1011,6 +1011,8 @@ struct hostapd_config {