diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk index 72af838cd..ac62f41b2 100644 --- a/wpa_supplicant/Android.mk +++ b/wpa_supplicant/Android.mk @@ -822,6 +822,10 @@ L_CFLAGS += -DCONFIG_IEEE80211AC endif endif +ifdef CONFIG_MBO +L_CFLAGS += -DCONFIG_MBO +endif + ifdef NEED_AP_MLME OBJS += src/ap/wmm.c OBJS += src/ap/ap_list.c diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile index 234a0bf4b..bf2c0aaf6 100644 --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile @@ -864,6 +864,10 @@ CFLAGS += -DCONFIG_IEEE80211AC endif endif +ifdef CONFIG_MBO +CFLAGS += -DCONFIG_MBO +endif + ifdef NEED_AP_MLME OBJS += ../src/ap/wmm.o OBJS += ../src/ap/ap_list.o diff --git a/wpa_supplicant/android.config b/wpa_supplicant/android.config index e9c0a0103..190bc5ac5 100644 --- a/wpa_supplicant/android.config +++ b/wpa_supplicant/android.config @@ -482,4 +482,7 @@ CONFIG_WIFI_DISPLAY=y # Enable Fast Session Transfer (FST) #CONFIG_FST=y +# Support Multi Band Operation +#CONFIG_MBO=y + include $(wildcard $(LOCAL_PATH)/android_config_*.inc) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index e345895d0..3319ed18f 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -2286,6 +2286,9 @@ void wpa_config_free(struct wpa_config *config) os_free(config->wowlan_triggers); os_free(config->fst_group_id); os_free(config->sched_scan_plans); +#ifdef CONFIG_MBO + os_free(config->non_pref_chan); +#endif /* CONFIG_MBO */ os_free(config); } @@ -4265,6 +4268,9 @@ static const struct global_parse_data global_fields[] = { #endif /* CONFIG_FST */ { INT_RANGE(wpa_rsc_relaxation, 0, 1), 0 }, { STR(sched_scan_plans), CFG_CHANGED_SCHED_SCAN_PLANS }, +#ifdef CONFIG_MBO + { STR(non_pref_chan), 0 }, +#endif /*CONFIG_MBO */ }; #undef FUNC diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h index 86f940d35..27e9b9839 100644 --- a/wpa_supplicant/config.h +++ b/wpa_supplicant/config.h @@ -1275,6 +1275,16 @@ struct wpa_config { * format: ... */ char *sched_scan_plans; + +#ifdef CONFIG_MBO + /** + * non_pref_chan - Non-preferred channels list, separated by spaces. + * + * format: op_class:chan:preference:reason<:detail> + * Detail is optional. + */ + char *non_pref_chan; +#endif /* CONFIG_MBO */ }; diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c index a1eb69176..07822ef41 100644 --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c @@ -1327,6 +1327,12 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config) if (config->sched_scan_plans) fprintf(f, "sched_scan_plans=%s\n", config->sched_scan_plans); + +#ifdef CONFIG_MBO + if (config->non_pref_chan) + fprintf(f, "non_pref_chan=%s\n", config->non_pref_chan); +#endif /* CONFIG_MBO */ + } #endif /* CONFIG_NO_CONFIG_WRITE */ diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig index a615c7cea..79632e686 100644 --- a/wpa_supplicant/defconfig +++ b/wpa_supplicant/defconfig @@ -542,3 +542,6 @@ CONFIG_PEERKEY=y # For more details refer to: # http://wireless.kernel.org/en/users/Documentation/acs #CONFIG_ACS=y + +# Support Multi Band Operation +#CONFIG_MBO=y diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf index 478cb828f..a6e7bb9e4 100644 --- a/wpa_supplicant/wpa_supplicant.conf +++ b/wpa_supplicant/wpa_supplicant.conf @@ -641,6 +641,14 @@ fast_reauth=1 # Example: # sched_scan_plans=10:100 20:200 30 +# Multi Band Operation (MBO) non-preferred channels +# A space delimited list of non-preferred channels where each channel is a colon +# delimited list of values. Reason detail is optional. +# Format: +# non_pref_chan=:::[:reason_detail] +# Example: +# non_pref_chan="81:5:10:2:0 81:1:0:2:0 81:9:0:2" + # network block # # Each network (usually AP's sharing the same SSID) is configured as a separate