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 35c7028..31323e8 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 47d0e76..723275f 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 */