Add support to fill "multi_ap_vlanid" info to the hostapd config file.
Add the Multi-AP Default 802.1Q Setting subelement into Multi-AP element
generating and parsing.
Signed-off-by: Manoj Sekar <quic_sekar@quicinc.com>
return -1;
}
bss->multi_ap_client_disallow = val;
+ } else if (os_strcmp(buf, "multi_ap_vlanid") == 0) {
+ int val = atoi(pos);
+
+ if (val < 0 || val > MAX_VLAN_ID) {
+ wpa_printf(MSG_ERROR,
+ "Line %d: Invalid multi_ap_vlan_id '%s'",
+ line, buf);
+ return -1;
+ }
+ bss->multi_ap_vlanid = val;
} else if (os_strcmp(buf, "rssi_reject_assoc_rssi") == 0) {
conf->rssi_reject_assoc_rssi = atoi(pos);
} else if (os_strcmp(buf, "rssi_reject_assoc_timeout") == 0) {
# 2 = Profile-2 Backhaul STA association disallowed
#multi_ap_client_disallow=0
+# Multi-AP VLAN ID
+# A valid non-zero VLAN ID will be used to update Default IEEE 802.1Q Setting
+#multi_ap_vlanid=0
+
# WPS UPnP interface
# If set, support for external Registrars is enabled.
#upnp_iface=br0
/* Multi-AP Profile-2 clients not allowed to connect */
#define PROFILE2_CLIENT_ASSOC_DISALLOW BIT(1)
unsigned int multi_ap_client_disallow;
+ /* Primary VLAN ID to use in Multi-AP */
+ int multi_ap_vlanid;
#ifdef CONFIG_AIRTIME_POLICY
unsigned int airtime_weight;
MULTI_AP_PROFILE2_BACKHAUL_STA_DISALLOWED;
multi_ap.profile = hapd->conf->multi_ap_profile;
+ multi_ap.vlanid = hapd->conf->multi_ap_vlanid;
return eid + add_multi_ap_ie(eid, len, &multi_ap);
}
{
const struct element *elem;
bool ext_present = false;
+ unsigned int vlan_id;
os_memset(multi_ap, 0, sizeof(*multi_ap));
return WLAN_STATUS_ASSOC_DENIED_UNSPEC;
}
break;
+ case MULTI_AP_VLAN_SUB_ELEM_TYPE:
+ if (multi_ap->profile < MULTI_AP_PROFILE_2) {
+ wpa_printf(MSG_DEBUG,
+ "Multi-AP IE invalid profile to read VLAN IE");
+ return WLAN_STATUS_INVALID_IE;
+ }
+ if (elen < 2) {
+ wpa_printf(MSG_DEBUG,
+ "Multi-AP IE invalid Multi-AP VLAN subelement");
+ return WLAN_STATUS_INVALID_IE;
+ }
+
+ vlan_id = WPA_GET_LE16(pos);
+ if (vlan_id < 1 || vlan_id > 4094) {
+ wpa_printf(MSG_INFO,
+ "Multi-AP IE invalid Multi-AP VLAN ID %d",
+ vlan_id);
+ return WLAN_STATUS_INVALID_IE;
+ }
+ multi_ap->vlanid = vlan_id;
+ break;
default:
wpa_printf(MSG_DEBUG,
"Ignore unknown subelement %u in Multi-AP IE",
*pos++ = multi_ap->profile;
}
+ /* Add Multi-AP Default 802.1Q Setting subelement only for backhaul BSS
+ */
+ if (multi_ap->vlanid &&
+ multi_ap->profile >= MULTI_AP_PROFILE_2 &&
+ (multi_ap->capability & MULTI_AP_BACKHAUL_BSS)) {
+ if (buf + len - pos < 4)
+ return 0;
+ *pos++ = MULTI_AP_VLAN_SUB_ELEM_TYPE;
+ *pos++ = 2;
+ WPA_PUT_LE16(pos, multi_ap->vlanid);
+ pos += 2;
+ }
+
*len_ptr = pos - len_ptr - 1;
return pos - buf;
struct multi_ap_params {
u8 capability;
u8 profile;
+ u16 vlanid;
};
/* Parsed Information Elements */
#define MULTI_AP_SUB_ELEM_TYPE 0x06
#define MULTI_AP_PROFILE_SUB_ELEM_TYPE 0x07
+#define MULTI_AP_VLAN_SUB_ELEM_TYPE 0x08
#define MULTI_AP_PROFILE2_BACKHAUL_STA_DISALLOWED BIT(2)
#define MULTI_AP_PROFILE1_BACKHAUL_STA_DISALLOWED BIT(3)