WPS: Make fragment size configurable for EAP-WSC peer
authorJouni Malinen <jouni.malinen@atheros.com>
Thu, 22 Jul 2010 17:24:23 +0000 (10:24 -0700)
committerJouni Malinen <j@w1.fi>
Thu, 9 Sep 2010 13:07:49 +0000 (06:07 -0700)
"wpa_cli set wps_fragment_size <val>" can now be used to configure the
fragment size limit for EAP-WSC.

src/eap_peer/eap_wsc.c
wpa_supplicant/ctrl_iface.c
wpa_supplicant/wpa_supplicant_i.h
wpa_supplicant/wps_supplicant.c

index a38e2ad..00eab63 100644 (file)
@@ -224,6 +224,8 @@ static void * eap_wsc_init(struct eap_sm *sm)
                data->fragment_size = res;
        else
                data->fragment_size = WSC_FRAGMENT_SIZE;
+       wpa_printf(MSG_DEBUG, "EAP-WSC: Fragment size limit %u",
+                  (unsigned int) data->fragment_size);
 
        if (registrar && cfg.pin) {
                wps_registrar_add_pin(data->wps_ctx->registrar, NULL, NULL,
index 9c849cb..f025548 100644 (file)
@@ -80,6 +80,8 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
        } else if (os_strcasecmp(cmd, "dot11RSNAConfigSATimeout") == 0) {
                if (wpa_sm_set_param(wpa_s->wpa, RSNA_SA_TIMEOUT, atoi(value)))
                        ret = -1;
+       } else if (os_strcasecmp(cmd, "wps_fragment_size") == 0) {
+               wpa_s->wps_fragment_size = atoi(value);
        } else
                ret = -1;
 
index 6c36a1a..b170638 100644 (file)
@@ -437,6 +437,7 @@ struct wpa_supplicant {
 
        int after_wps;
        unsigned int wps_freq;
+       int wps_fragment_size;
 };
 
 
index bb46adb..99fcabc 100644 (file)
@@ -673,6 +673,8 @@ int wpas_wps_start_pbc(struct wpa_supplicant *wpa_s, const u8 *bssid)
        if (ssid == NULL)
                return -1;
        wpa_config_set(ssid, "phase1", "\"pbc=1\"", 0);
+       if (wpa_s->wps_fragment_size)
+               ssid->eap.fragment_size = wpa_s->wps_fragment_size;
        eloop_register_timeout(WPS_PBC_WALK_TIME, 0, wpas_wps_timeout,
                               wpa_s, NULL);
        wpas_wps_reassoc(wpa_s, ssid);
@@ -698,6 +700,8 @@ int wpas_wps_start_pin(struct wpa_supplicant *wpa_s, const u8 *bssid,
                os_snprintf(val, sizeof(val), "\"pin=%08d\"", rpin);
        }
        wpa_config_set(ssid, "phase1", val, 0);
+       if (wpa_s->wps_fragment_size)
+               ssid->eap.fragment_size = wpa_s->wps_fragment_size;
        eloop_register_timeout(WPS_PBC_WALK_TIME, 0, wpas_wps_timeout,
                               wpa_s, NULL);
        wpas_wps_reassoc(wpa_s, ssid);
@@ -788,6 +792,8 @@ int wpas_wps_start_reg(struct wpa_supplicant *wpa_s, const u8 *bssid,
        if (res < 0 || res >= end - pos)
                return -1;
        wpa_config_set(ssid, "phase1", val, 0);
+       if (wpa_s->wps_fragment_size)
+               ssid->eap.fragment_size = wpa_s->wps_fragment_size;
        eloop_register_timeout(WPS_PBC_WALK_TIME, 0, wpas_wps_timeout,
                               wpa_s, NULL);
        wpas_wps_reassoc(wpa_s, ssid);