hostapd: Allow TDLS use to be prohibited in the BSS
tdls_prohibit=1 and tdls_prohibit_chan_switch=1 and now be used to disable use of TDLS or TDLS channel switching in the BSS using extended cabilities IE as defined in IEEE 802.11z.
This commit is contained in:
parent
9a994178f1
commit
1161ff1ef5
7 changed files with 57 additions and 0 deletions
|
@ -2034,6 +2034,18 @@ struct hostapd_config * hostapd_config_read(const char *fname)
|
||||||
#endif /* CONFIG_P2P_MANAGER */
|
#endif /* CONFIG_P2P_MANAGER */
|
||||||
} else if (os_strcmp(buf, "disassoc_low_ack") == 0) {
|
} else if (os_strcmp(buf, "disassoc_low_ack") == 0) {
|
||||||
bss->disassoc_low_ack = atoi(pos);
|
bss->disassoc_low_ack = atoi(pos);
|
||||||
|
} else if (os_strcmp(buf, "tdls_prohibit") == 0) {
|
||||||
|
int val = atoi(pos);
|
||||||
|
if (val)
|
||||||
|
bss->tdls |= TDLS_PROHIBIT;
|
||||||
|
else
|
||||||
|
bss->tdls &= ~TDLS_PROHIBIT;
|
||||||
|
} else if (os_strcmp(buf, "tdls_prohibit_chan_switch") == 0) {
|
||||||
|
int val = atoi(pos);
|
||||||
|
if (val)
|
||||||
|
bss->tdls |= TDLS_PROHIBIT_CHAN_SWITCH;
|
||||||
|
else
|
||||||
|
bss->tdls &= ~TDLS_PROHIBIT_CHAN_SWITCH;
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_ERROR, "Line %d: unknown configuration "
|
wpa_printf(MSG_ERROR, "Line %d: unknown configuration "
|
||||||
"item '%s'", line, buf);
|
"item '%s'", line, buf);
|
||||||
|
|
|
@ -995,6 +995,14 @@ own_ip_addr=127.0.0.1
|
||||||
# Allow cross connection
|
# Allow cross connection
|
||||||
#allow_cross_connection=1
|
#allow_cross_connection=1
|
||||||
|
|
||||||
|
#### TDLS (IEEE 802.11z-2010) #################################################
|
||||||
|
|
||||||
|
# Prohibit use of TDLS in this BSS
|
||||||
|
#tdls_prohibit=1
|
||||||
|
|
||||||
|
# Prohibit use of TDLS Channel Switching in this BSS
|
||||||
|
#tdls_prohibit_chan_switch=1
|
||||||
|
|
||||||
##### Multiple BSSID support ##################################################
|
##### Multiple BSSID support ##################################################
|
||||||
#
|
#
|
||||||
# Above configuration is using the default interface (wlan#, or multi-SSID VLAN
|
# Above configuration is using the default interface (wlan#, or multi-SSID VLAN
|
||||||
|
|
|
@ -325,6 +325,10 @@ struct hostapd_bss_config {
|
||||||
int p2p;
|
int p2p;
|
||||||
|
|
||||||
int disassoc_low_ack;
|
int disassoc_low_ack;
|
||||||
|
|
||||||
|
#define TDLS_PROHIBIT BIT(0)
|
||||||
|
#define TDLS_PROHIBIT_CHAN_SWITCH BIT(1)
|
||||||
|
int tdls;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -353,6 +353,8 @@ void handle_probe_req(struct hostapd_data *hapd,
|
||||||
pos = hostapd_eid_ht_operation(hapd, pos);
|
pos = hostapd_eid_ht_operation(hapd, pos);
|
||||||
#endif /* CONFIG_IEEE80211N */
|
#endif /* CONFIG_IEEE80211N */
|
||||||
|
|
||||||
|
pos = hostapd_eid_ext_capab(hapd, pos);
|
||||||
|
|
||||||
/* Wi-Fi Alliance WMM */
|
/* Wi-Fi Alliance WMM */
|
||||||
pos = hostapd_eid_wmm(hapd, pos);
|
pos = hostapd_eid_wmm(hapd, pos);
|
||||||
|
|
||||||
|
@ -478,6 +480,8 @@ void ieee802_11_set_beacon(struct hostapd_data *hapd)
|
||||||
tailpos = hostapd_eid_ht_operation(hapd, tailpos);
|
tailpos = hostapd_eid_ht_operation(hapd, tailpos);
|
||||||
#endif /* CONFIG_IEEE80211N */
|
#endif /* CONFIG_IEEE80211N */
|
||||||
|
|
||||||
|
tailpos = hostapd_eid_ext_capab(hapd, tailpos);
|
||||||
|
|
||||||
/* Wi-Fi Alliance WMM */
|
/* Wi-Fi Alliance WMM */
|
||||||
tailpos = hostapd_eid_wmm(hapd, tailpos);
|
tailpos = hostapd_eid_wmm(hapd, tailpos);
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,31 @@ u16 hostapd_own_capab_info(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid)
|
||||||
|
{
|
||||||
|
u8 *pos = eid;
|
||||||
|
|
||||||
|
if ((hapd->conf->tdls & (TDLS_PROHIBIT | TDLS_PROHIBIT_CHAN_SWITCH)) ==
|
||||||
|
0)
|
||||||
|
return eid;
|
||||||
|
|
||||||
|
*pos++ = WLAN_EID_EXT_CAPAB;
|
||||||
|
*pos++ = 5;
|
||||||
|
*pos++ = 0x00;
|
||||||
|
*pos++ = 0x00;
|
||||||
|
*pos++ = 0x00;
|
||||||
|
*pos++ = 0x00;
|
||||||
|
*pos = 0x00;
|
||||||
|
if (hapd->conf->tdls & TDLS_PROHIBIT)
|
||||||
|
*pos |= 0x40; /* Bit 38 - TDLS Prohibited */
|
||||||
|
if (hapd->conf->tdls & TDLS_PROHIBIT_CHAN_SWITCH)
|
||||||
|
*pos |= 0x80; /* Bit 39 - TDLS Channel Switching Prohibited */
|
||||||
|
pos++;
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
static u8 * hostapd_eid_assoc_comeback_time(struct hostapd_data *hapd,
|
static u8 * hostapd_eid_assoc_comeback_time(struct hostapd_data *hapd,
|
||||||
struct sta_info *sta, u8 *eid)
|
struct sta_info *sta, u8 *eid)
|
||||||
|
@ -867,6 +892,8 @@ static void send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
p = hostapd_eid_ht_operation(hapd, p);
|
p = hostapd_eid_ht_operation(hapd, p);
|
||||||
#endif /* CONFIG_IEEE80211N */
|
#endif /* CONFIG_IEEE80211N */
|
||||||
|
|
||||||
|
p = hostapd_eid_ext_capab(hapd, p);
|
||||||
|
|
||||||
if (sta->flags & WLAN_STA_WMM)
|
if (sta->flags & WLAN_STA_WMM)
|
||||||
p = hostapd_eid_wmm(hapd, p);
|
p = hostapd_eid_wmm(hapd, p);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ static inline int ieee802_11_get_mib_sta(struct hostapd_data *hapd,
|
||||||
#endif /* NEED_AP_MLME */
|
#endif /* NEED_AP_MLME */
|
||||||
u16 hostapd_own_capab_info(struct hostapd_data *hapd, struct sta_info *sta,
|
u16 hostapd_own_capab_info(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
int probe);
|
int probe);
|
||||||
|
u8 * hostapd_eid_ext_capab(struct hostapd_data *hapd, u8 *eid);
|
||||||
u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid);
|
u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid);
|
||||||
u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid);
|
u8 * hostapd_eid_ext_supp_rates(struct hostapd_data *hapd, u8 *eid);
|
||||||
u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid);
|
u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid);
|
||||||
|
|
|
@ -216,6 +216,7 @@
|
||||||
#define WLAN_EID_MMIE 76
|
#define WLAN_EID_MMIE 76
|
||||||
#define WLAN_EID_LINK_ID 101
|
#define WLAN_EID_LINK_ID 101
|
||||||
#define WLAN_EID_ADV_PROTO 108
|
#define WLAN_EID_ADV_PROTO 108
|
||||||
|
#define WLAN_EID_EXT_CAPAB 127
|
||||||
#define WLAN_EID_VENDOR_SPECIFIC 221
|
#define WLAN_EID_VENDOR_SPECIFIC 221
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue