]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Move local TX queue parameter parser into a common file
authorSubrat Dash <sdash@codeaurora.org>
Thu, 21 May 2020 05:03:39 +0000 (10:33 +0530)
committerJouni Malinen <j@w1.fi>
Mon, 8 Jun 2020 21:17:39 +0000 (00:17 +0300)
This allows the same implementation to be used for wpa_supplicant as
well.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
hostapd/config_file.c
src/ap/ap_config.h
src/common/ieee802_11_common.c
src/common/ieee802_11_common.h

index dac0e8054de17a95afeeb0d1570cfc9d3baf8f9a..0a181f2e1f5a039b94da6a5901bc9335631f5ccb 100644 (file)
@@ -943,35 +943,6 @@ static int hostapd_config_bss(struct hostapd_config *conf, const char *ifname)
 }
 
 
-/* convert floats with one decimal place to value*10 int, i.e.,
- * "1.5" will return 15 */
-static int hostapd_config_read_int10(const char *value)
-{
-       int i, d;
-       char *pos;
-
-       i = atoi(value);
-       pos = os_strchr(value, '.');
-       d = 0;
-       if (pos) {
-               pos++;
-               if (*pos >= '0' && *pos <= '9')
-                       d = *pos - '0';
-       }
-
-       return i * 10 + d;
-}
-
-
-static int valid_cw(int cw)
-{
-       return (cw == 1 || cw == 3 || cw == 7 || cw == 15 || cw == 31 ||
-               cw == 63 || cw == 127 || cw == 255 || cw == 511 || cw == 1023 ||
-               cw == 2047 || cw == 4095 || cw == 8191 || cw == 16383 ||
-               cw == 32767);
-}
-
-
 enum {
        IEEE80211_TX_QUEUE_DATA0 = 0, /* used for EDCA AC_VO data */
        IEEE80211_TX_QUEUE_DATA1 = 1, /* used for EDCA AC_VI data */
@@ -979,67 +950,6 @@ enum {
        IEEE80211_TX_QUEUE_DATA3 = 3 /* used for EDCA AC_BK data */
 };
 
-static int hostapd_config_tx_queue(struct hostapd_config *conf,
-                                  const char *name, const char *val)
-{
-       int num;
-       const char *pos;
-       struct hostapd_tx_queue_params *queue;
-
-       /* skip 'tx_queue_' prefix */
-       pos = name + 9;
-       if (os_strncmp(pos, "data", 4) == 0 &&
-           pos[4] >= '0' && pos[4] <= '9' && pos[5] == '_') {
-               num = pos[4] - '0';
-               pos += 6;
-       } else if (os_strncmp(pos, "after_beacon_", 13) == 0 ||
-                  os_strncmp(pos, "beacon_", 7) == 0) {
-               wpa_printf(MSG_INFO, "DEPRECATED: '%s' not used", name);
-               return 0;
-       } else {
-               wpa_printf(MSG_ERROR, "Unknown tx_queue name '%s'", pos);
-               return -1;
-       }
-
-       if (num >= NUM_TX_QUEUES) {
-               /* for backwards compatibility, do not trigger failure */
-               wpa_printf(MSG_INFO, "DEPRECATED: '%s' not used", name);
-               return 0;
-       }
-
-       queue = &conf->tx_queue[num];
-
-       if (os_strcmp(pos, "aifs") == 0) {
-               queue->aifs = atoi(val);
-               if (queue->aifs < 0 || queue->aifs > 255) {
-                       wpa_printf(MSG_ERROR, "Invalid AIFS value %d",
-                                  queue->aifs);
-                       return -1;
-               }
-       } else if (os_strcmp(pos, "cwmin") == 0) {
-               queue->cwmin = atoi(val);
-               if (!valid_cw(queue->cwmin)) {
-                       wpa_printf(MSG_ERROR, "Invalid cwMin value %d",
-                                  queue->cwmin);
-                       return -1;
-               }
-       } else if (os_strcmp(pos, "cwmax") == 0) {
-               queue->cwmax = atoi(val);
-               if (!valid_cw(queue->cwmax)) {
-                       wpa_printf(MSG_ERROR, "Invalid cwMax value %d",
-                                  queue->cwmax);
-                       return -1;
-               }
-       } else if (os_strcmp(pos, "burst") == 0) {
-               queue->burst = hostapd_config_read_int10(val);
-       } else {
-               wpa_printf(MSG_ERROR, "Unknown tx_queue field '%s'", pos);
-               return -1;
-       }
-
-       return 0;
-}
-
 
 #ifdef CONFIG_IEEE80211R_AP
 
@@ -3424,7 +3334,7 @@ static int hostapd_config_fill(struct hostapd_config *conf,
        } else if (os_strcmp(buf, "ap_table_expiration_time") == 0) {
                conf->ap_table_expiration_time = atoi(pos);
        } else if (os_strncmp(buf, "tx_queue_", 9) == 0) {
-               if (hostapd_config_tx_queue(conf, buf, pos)) {
+               if (hostapd_config_tx_queue(conf->tx_queue, buf, pos)) {
                        wpa_printf(MSG_ERROR, "Line %d: invalid TX queue item",
                                   line);
                        return 1;
index 4c2e600951750673a909bca7252ed0281c839ca6..b705c378fe28ce6180d2856083877e1c3dfd1d22 100644 (file)
@@ -197,15 +197,6 @@ struct hostapd_radius_attr {
 
 
 #define NUM_TX_QUEUES 4
-
-struct hostapd_tx_queue_params {
-       int aifs;
-       int cwmin;
-       int cwmax;
-       int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
-};
-
-
 #define MAX_ROAMING_CONSORTIUM_LEN 15
 
 struct hostapd_roaming_consortium {
index 981652e4713ebe34244b1c0b35c28094865ca87a..5bfaece5a3892280e4359491e9f9b0c5c6446936 100644 (file)
@@ -763,6 +763,98 @@ int hostapd_config_wmm_ac(struct hostapd_wmm_ac_params wmm_ac_params[],
 }
 
 
+/* convert floats with one decimal place to value*10 int, i.e.,
+ * "1.5" will return 15
+ */
+static int hostapd_config_read_int10(const char *value)
+{
+       int i, d;
+       char *pos;
+
+       i = atoi(value);
+       pos = os_strchr(value, '.');
+       d = 0;
+       if (pos) {
+               pos++;
+               if (*pos >= '0' && *pos <= '9')
+                       d = *pos - '0';
+       }
+
+       return i * 10 + d;
+}
+
+
+static int valid_cw(int cw)
+{
+       return (cw == 1 || cw == 3 || cw == 7 || cw == 15 || cw == 31 ||
+               cw == 63 || cw == 127 || cw == 255 || cw == 511 || cw == 1023 ||
+               cw == 2047 || cw == 4095 || cw == 8191 || cw == 16383 ||
+               cw == 32767);
+}
+
+
+int hostapd_config_tx_queue(struct hostapd_tx_queue_params tx_queue[],
+                           const char *name, const char *val)
+{
+       int num;
+       const char *pos;
+       struct hostapd_tx_queue_params *queue;
+
+       /* skip 'tx_queue_' prefix */
+       pos = name + 9;
+       if (os_strncmp(pos, "data", 4) == 0 &&
+           pos[4] >= '0' && pos[4] <= '9' && pos[5] == '_') {
+               num = pos[4] - '0';
+               pos += 6;
+       } else if (os_strncmp(pos, "after_beacon_", 13) == 0 ||
+                  os_strncmp(pos, "beacon_", 7) == 0) {
+               wpa_printf(MSG_INFO, "DEPRECATED: '%s' not used", name);
+               return 0;
+       } else {
+               wpa_printf(MSG_ERROR, "Unknown tx_queue name '%s'", pos);
+               return -1;
+       }
+
+       if (num >= NUM_TX_QUEUES) {
+               /* for backwards compatibility, do not trigger failure */
+               wpa_printf(MSG_INFO, "DEPRECATED: '%s' not used", name);
+               return 0;
+       }
+
+       queue = &tx_queue[num];
+
+       if (os_strcmp(pos, "aifs") == 0) {
+               queue->aifs = atoi(val);
+               if (queue->aifs < 0 || queue->aifs > 255) {
+                       wpa_printf(MSG_ERROR, "Invalid AIFS value %d",
+                                  queue->aifs);
+                       return -1;
+               }
+       } else if (os_strcmp(pos, "cwmin") == 0) {
+               queue->cwmin = atoi(val);
+               if (!valid_cw(queue->cwmin)) {
+                       wpa_printf(MSG_ERROR, "Invalid cwMin value %d",
+                                  queue->cwmin);
+                       return -1;
+               }
+       } else if (os_strcmp(pos, "cwmax") == 0) {
+               queue->cwmax = atoi(val);
+               if (!valid_cw(queue->cwmax)) {
+                       wpa_printf(MSG_ERROR, "Invalid cwMax value %d",
+                                  queue->cwmax);
+                       return -1;
+               }
+       } else if (os_strcmp(pos, "burst") == 0) {
+               queue->burst = hostapd_config_read_int10(val);
+       } else {
+               wpa_printf(MSG_ERROR, "Unknown queue field '%s'", pos);
+               return -1;
+       }
+
+       return 0;
+}
+
+
 enum hostapd_hw_mode ieee80211_freq_to_chan(int freq, u8 *channel)
 {
        u8 op_class;
index cf4865014bb053850716032a4a2b3f59c9dc536d..4abe468ec4396db93a0cb67d780a304e7aefd1dc 100644 (file)
@@ -192,6 +192,18 @@ struct hostapd_wmm_ac_params {
 
 int hostapd_config_wmm_ac(struct hostapd_wmm_ac_params wmm_ac_params[],
                          const char *name, const char *val);
+
+struct hostapd_tx_queue_params {
+       int aifs;
+       int cwmin;
+       int cwmax;
+       int burst; /* maximum burst time in 0.1 ms, i.e., 10 = 1 ms */
+};
+
+#define NUM_TX_QUEUES 4
+
+int hostapd_config_tx_queue(struct hostapd_tx_queue_params queue[],
+                           const char *name, const char *val);
 enum hostapd_hw_mode ieee80211_freq_to_chan(int freq, u8 *channel);
 int ieee80211_chan_to_freq(const char *country, u8 op_class, u8 chan);
 enum hostapd_hw_mode ieee80211_freq_to_channel_ext(unsigned int freq,