[PATCH v4 2/3] hostap: set driver probe-response template

Jouni Malinen j
Sat Dec 10 11:18:54 PST 2011


On Thu, Nov 10, 2011 at 11:33:24AM +0200, Arik Nemtsov wrote:
> Configure a probe response template for drivers that support it. The
> template is updated when the beacon is updated.
> 
> The probe response template is propagated to kernel via the set_ap()
> callback.

This was a bit difficult patch to review - it would have helped if it
had been split in multiple parts. I ended up dropping parts that did not
seem to be related and/or needed (splitting of ieee802_11_set_beacon()
into pieces and renaming of some of the functions. In addition, I
committed this in smaller parts to make it easier to review and address
conflicts (this area is quite difficult between number of trees). Please
let me know if I missed something from the patch that should really have
went in.

> diff --git a/src/ap/ap_list.c b/src/ap/ap_list.c
> @@ -326,7 +326,7 @@ void ap_list_process_beacon(struct hostapd_iface *iface,
> -		ieee802_11_set_beacons(iface);
> +		ieee802_11_set_beacons_and_probes(iface);

I dropped all renames like this as mentioned above..

> diff --git a/src/ap/beacon.c b/src/ap/beacon.c
> @@ -186,18 +186,133 @@ static u8 * hostapd_eid_wpa(struct hostapd_data *hapd, u8 *eid, size_t len)

> +static size_t hostapd_gen_probe_resp(struct hostapd_data *hapd,
> +				     const struct ieee80211_mgmt *req,
> +				     struct ieee80211_mgmt *resp,
> +				     size_t resp_basic_len,
> +				     int is_p2p)
> +{
> +	u8 *pos, *epos;
> +	struct sta_info *sta = NULL;

> +		host_to_le16(hostapd_own_capab_info(hapd, sta, 1));

That's a bug... sta was hardcoded to NULL after this change. I changed
the caller to pass in the sta pointer instead.

> -void ieee802_11_set_beacon(struct hostapd_data *hapd)
> +static int hostapd_alloc_beacon(struct hostapd_data *hapd,
> +				u8 **head, u8 **tail)

These changes of splitting ieee802_11_set_beacon() did not seem to
really do anything, so I dropped them. This would have just added
likelihood of conflicts between different trees.

> diff --git a/src/drivers/driver.h b/src/drivers/driver.h
> @@ -1444,6 +1457,20 @@ struct wpa_driver_ops {
>  	int (*set_ap)(void *priv, struct wpa_driver_ap_params *params);
>  
>  	/**
> +	 * set_probe_resp - Set Probe Response frame template
> +	 * @priv: Private driver interface data
> +	 * @resp: Probe Response template
> +	 * @resp_len: Length of the resp buffer in octets
> +	 * Returns: 0 on success, -1 on failure
> +	 *
> +	 * This function is used to configure a Probe Response template for the
> +	 * driver in AP mode. The driver is responsible for building the full
> +	 * Probe Response frame by setting the destination address to that of
> +	 * the desired recipient.
> +	 */
> +	int (*set_probe_resp)(void *priv, const u8 *resp, size_t resp_len);

I assume this was just forgotten here - I dropped it.

-- 
Jouni Malinen                                            PGP id EFC895FA



More information about the Hostap mailing list