]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Change HT parameter configuration to use a single driver ops function
authorJouni Malinen <jouni.malinen@atheros.com>
Tue, 25 Nov 2008 12:57:34 +0000 (14:57 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 25 Nov 2008 12:57:34 +0000 (14:57 +0200)
It is better to pass both HT Capabilities and HT Operation IEs in the
same function call since it may be easier for the driver wrappers to
handle the changes without having to wait for the other IE in the
wrapper code.

hostapd/beacon.c
hostapd/driver.h

index 35c7028496ded5313ef315b2f2defbc936ef269c..31323e864b70beda65f9ecb600e9f818ee49baa2 100644 (file)
@@ -400,21 +400,20 @@ void ieee802_11_set_beacon(struct hostapd_data *hapd)
 
 #ifdef CONFIG_IEEE80211N
        if (hapd->iconf->ieee80211n) {
-               u8 *start;
-               start = tailpos;
+               u8 *ht_capab, *ht_oper;
+               ht_capab = tailpos;
                tailpos = hostapd_eid_ht_capabilities_info(hapd, tailpos);
-               if (hostapd_set_ht_capability(hapd->conf->iface, hapd,
-                                             start + 2)) {
+
+               ht_oper = tailpos;
+               tailpos = hostapd_eid_ht_operation(hapd, tailpos);
+
+               if (tailpos > ht_oper && ht_oper > ht_capab &&
+                   hostapd_set_ht_params(hapd->conf->iface, hapd,
+                                         ht_capab + 2, ht_capab[1],
+                                         ht_oper + 2, ht_oper[1])) {
                        wpa_printf(MSG_ERROR, "Could not set HT capabilities "
                                   "for kernel driver");
                }
-
-               start = tailpos;
-               tailpos = hostapd_eid_ht_operation(hapd, tailpos);
-               if (hostapd_set_ht_operation(hapd->conf->iface, hapd,
-                                            start + 2))
-                       wpa_printf(MSG_ERROR, "Could not set HT operation for "
-                                  "kernel driver");
        }
 #endif /* CONFIG_IEEE80211N */
 
index 47d0e76192f551dfbb84ad5b1fc041f7fd28a864..723275f7d8a47abf9967b4ddf2bc4a62c873c24c 100644 (file)
@@ -176,10 +176,9 @@ struct wpa_driver_ops {
                                   u32 session_timeout);
        int (*set_radius_acl_expire)(void *priv, const u8 *mac);
 
-       int (*set_ht_capability)(const char *ifname, void *priv,
-                                const u8 *data, size_t data_len);
-       int (*set_ht_operation)(const char *ifname, void *priv,
-                               const u8 *data, size_t data_len);
+       int (*set_ht_params)(const char *ifname, void *priv,
+                            const u8 *ht_capab, size_t ht_capab_len,
+                            const u8 *ht_oper, size_t ht_oper_len);
 
        int (*set_wps_beacon_ie)(const char *ifname, void *priv,
                                 const u8 *ie, size_t len);
@@ -733,27 +732,16 @@ hostapd_set_radius_acl_expire(struct hostapd_data *hapd, const u8 *mac)
 
 #ifdef CONFIG_IEEE80211N
 static inline int
-hostapd_set_ht_capability(const char *ifname, struct hostapd_data *hapd,
-                         const u8 *ht_cap)
+hostapd_set_ht_params(const char *ifname, struct hostapd_data *hapd,
+                     const u8 *ht_capab, size_t ht_capab_len,
+                     const u8 *ht_oper, size_t ht_oper_len)
 {
-       if (hapd->driver == NULL || hapd->driver->set_ht_capability == NULL ||
-           ht_cap == NULL)
+       if (hapd->driver == NULL || hapd->driver->set_ht_params == NULL ||
+           ht_capab == NULL || ht_oper == NULL)
                return 0;
-       return hapd->driver->set_ht_capability(
-               ifname, hapd->drv_priv, ht_cap,
-               sizeof(struct ieee80211_ht_capability));
-}
-
-static inline int
-hostapd_set_ht_operation(const char *ifname, struct hostapd_data *hapd,
-                        const u8 *ht_operation)
-{
-       if (hapd->driver == NULL || hapd->driver->set_ht_operation == NULL ||
-           ht_operation == NULL)
-               return 0;
-       return hapd->driver->set_ht_operation(
-               ifname, hapd->drv_priv, ht_operation,
-               sizeof(struct ieee80211_ht_operation));
+       return hapd->driver->set_ht_params(
+               ifname, hapd->drv_priv, ht_capab, ht_capab_len,
+               ht_oper, ht_oper_len);
 }
 #endif /* CONFIG_IEEE80211N */