]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Allow fragmentation/RTS threshold to be disabled explicitly
authorJouni Malinen <jouni@codeaurora.org>
Tue, 12 Mar 2019 15:15:08 +0000 (17:15 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 12 Mar 2019 15:15:08 +0000 (17:15 +0200)
hostapd configuration parameters fragm_threshold and rts_threshold were
documented to disable the threshold with value -1 and not change driver
configuration if the parameter is not included. However, -1 was mapped
into not changing the driver value, so the explicit disabling part did
not work.

Replace the default values for these to be -2 so that explicitly set
configuration value -1 can be distinguished from the case of not
including the parameter. Map the -1 value to a driver request to disable
the threshold. Ignore any error from this operation just in case to
avoid breaking functionality should some drivers not accept the (u32) -1
value as a threshold value request to disable the mechanism.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/ap/ap_config.c
src/ap/hostapd.c
src/drivers/driver_nl80211.c

index a30859e0c5cceeeff8d10f0a1000e9f240a9360e..e640e9984b70ef8bded3e18eda042f037d671dbf 100644 (file)
@@ -200,8 +200,8 @@ struct hostapd_config * hostapd_config_defaults(void)
        conf->num_bss = 1;
 
        conf->beacon_int = 100;
-       conf->rts_threshold = -1; /* use driver default: 2347 */
-       conf->fragm_threshold = -1; /* user driver default: 2346 */
+       conf->rts_threshold = -2; /* use driver default: 2347 */
+       conf->fragm_threshold = -2; /* user driver default: 2346 */
        /* Set to invalid value means do not add Power Constraint IE */
        conf->local_pwr_constraint = -1;
 
index 849d20bec54191fa949d4d6d21caf1eba5a988ee..77742f441d8459deaa328cd73156eede4aed9a18 100644 (file)
@@ -1883,15 +1883,17 @@ static int hostapd_setup_interface_complete_sync(struct hostapd_iface *iface,
                }
        }
 
-       if (hapd->iconf->rts_threshold > -1 &&
-           hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
+       if (hapd->iconf->rts_threshold >= -1 &&
+           hostapd_set_rts(hapd, hapd->iconf->rts_threshold) &&
+           hapd->iconf->rts_threshold >= -1) {
                wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
                           "kernel driver");
                goto fail;
        }
 
-       if (hapd->iconf->fragm_threshold > -1 &&
-           hostapd_set_frag(hapd, hapd->iconf->fragm_threshold)) {
+       if (hapd->iconf->fragm_threshold >= -1 &&
+           hostapd_set_frag(hapd, hapd->iconf->fragm_threshold) &&
+           hapd->iconf->fragm_threshold != -1) {
                wpa_printf(MSG_ERROR, "Could not set fragmentation threshold "
                           "for kernel driver");
                goto fail;
index e0e6fe52c3fcfcba1026c2eecb243ec999575f1a..5cd4e9b5f5e7e3457343b1497119168b401a8fb9 100644 (file)
@@ -6166,7 +6166,7 @@ static int i802_set_rts(void *priv, int rts)
        int ret;
        u32 val;
 
-       if (rts >= 2347)
+       if (rts >= 2347 || rts == -1)
                val = (u32) -1;
        else
                val = rts;
@@ -6194,7 +6194,7 @@ static int i802_set_frag(void *priv, int frag)
        int ret;
        u32 val;
 
-       if (frag >= 2346)
+       if (frag >= 2346 || frag == -1)
                val = (u32) -1;
        else
                val = frag;