[PATCH 3/6] common: add IEEE 802.11ah channel widths

James Ewing james at teledatics.com
Tue Sep 30 12:13:05 PDT 2025


Introduce `HOSTAPD_MODE_IEEE80211AH` and map the 1/2/4/5/8/10/16 MHz S1G
channel widths through the common helpers so hostapd and the driver
layer can describe IEEE 802.11ah chandefs using the same enums as the
rest of the tree. This keeps later nl80211 plumbing patches small and
lets ctrl_iface report "ah" hardware mode in a human readable form.

Tested: make -C hostapd hostapd
Signed-off-by: James Ewing <james at teledatics.com>
---
  src/ap/ctrl_iface_ap.c         |  2 ++
  src/ap/hw_features.c           |  2 ++
  src/common/defs.h              |  8 ++++++++
  src/common/ieee802_11_common.c |  7 +++++++
  src/drivers/driver_common.c    | 28 ++++++++++++++++++++++++++++
  5 files changed, 47 insertions(+)

diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c
index 799aff765..94593253c 100644
--- a/src/ap/ctrl_iface_ap.c
+++ b/src/ap/ctrl_iface_ap.c
@@ -223,6 +223,8 @@ static const char * hw_mode_str(enum hostapd_hw_mode 
mode)
          return "a";
      case HOSTAPD_MODE_IEEE80211AD:
          return "ad";
+    case HOSTAPD_MODE_IEEE80211AH:
+        return "ah";
      case HOSTAPD_MODE_IEEE80211ANY:
          return "any";
      case NUM_HOSTAPD_MODES:
diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c
index cef38173e..a44931dde 100644
--- a/src/ap/hw_features.c
+++ b/src/ap/hw_features.c
@@ -1346,6 +1346,8 @@ const char * hostapd_hw_mode_txt(int mode)
          return "IEEE 802.11g";
      case HOSTAPD_MODE_IEEE80211AD:
          return "IEEE 802.11ad";
+    case HOSTAPD_MODE_IEEE80211AH:
+        return "IEEE 802.11ah";
      default:
          return "UNKNOWN";
      }
diff --git a/src/common/defs.h b/src/common/defs.h
index 0a79ba2a6..b7b265cca 100644
--- a/src/common/defs.h
+++ b/src/common/defs.h
@@ -384,6 +384,7 @@ enum hostapd_hw_mode {
      HOSTAPD_MODE_IEEE80211G,
      HOSTAPD_MODE_IEEE80211A,
      HOSTAPD_MODE_IEEE80211AD,
+    HOSTAPD_MODE_IEEE80211AH,
      HOSTAPD_MODE_IEEE80211ANY,
      NUM_HOSTAPD_MODES
  };
@@ -459,6 +460,13 @@ enum chan_width {
      CHAN_WIDTH_6480,
      CHAN_WIDTH_8640,
      CHAN_WIDTH_320,
+    CHAN_WIDTH_1,
+    CHAN_WIDTH_2,
+    CHAN_WIDTH_4,
+    CHAN_WIDTH_5,
+    CHAN_WIDTH_8,
+    CHAN_WIDTH_10,
+    CHAN_WIDTH_16,
      CHAN_WIDTH_UNKNOWN
  };

diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c
index ae7a7647a..4a32ca570 100644
--- a/src/common/ieee802_11_common.c
+++ b/src/common/ieee802_11_common.c
@@ -1658,6 +1658,13 @@ int ieee80211_chaninfo_to_channel(unsigned int 
freq, enum chan_width chanwidth,
      case CHAN_WIDTH_UNKNOWN:
      case CHAN_WIDTH_20_NOHT:
      case CHAN_WIDTH_20:
+    case CHAN_WIDTH_16:
+    case CHAN_WIDTH_10:
+    case CHAN_WIDTH_8:
+    case CHAN_WIDTH_5:
+    case CHAN_WIDTH_4:
+    case CHAN_WIDTH_2:
+    case CHAN_WIDTH_1:
      case CHAN_WIDTH_40:
          cw = CONF_OPER_CHWIDTH_USE_HT;
          break;
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index 045c82967..9902d63af 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -126,6 +126,20 @@ const char * channel_width_to_string(enum 
chan_width width)
          return "160 MHz";
      case CHAN_WIDTH_320:
          return "320 MHz";
+    case CHAN_WIDTH_1:
+        return "1 MHz";
+    case CHAN_WIDTH_2:
+        return "2 MHz";
+    case CHAN_WIDTH_4:
+        return "4 MHz";
+    case CHAN_WIDTH_5:
+        return "5 MHz";
+    case CHAN_WIDTH_8:
+        return "8 MHz";
+    case CHAN_WIDTH_10:
+        return "10 MHz";
+    case CHAN_WIDTH_16:
+        return "16 MHz";
      default:
          return "unknown";
      }
@@ -147,6 +161,20 @@ int channel_width_to_int(enum chan_width width)
          return 160;
      case CHAN_WIDTH_320:
          return 320;
+    case CHAN_WIDTH_1:
+        return 1;
+    case CHAN_WIDTH_2:
+        return 2;
+    case CHAN_WIDTH_4:
+        return 4;
+    case CHAN_WIDTH_5:
+        return 5;
+    case CHAN_WIDTH_8:
+        return 8;
+    case CHAN_WIDTH_10:
+        return 10;
+    case CHAN_WIDTH_16:
+        return 16;
      default:
          return 0;
      }
-- 
2.43.0





More information about the Hostap mailing list