[RFC 2/4] P2P: Handling single channel concurrency
Jithu Jance
jithujance
Mon Apr 9 00:14:54 PDT 2012
Hi Jouni & Johannes,
> Like Johannes pointed out, it would be nice to get a patch file that is
> not corrupted (tabs were removed or converted to a single space, etc.,
> that prevented the patch from applying). Similarly, it would be good to
> get the D-Bus indication added, too.
No matter how much I try, still some how I miss to find the white space
corruption. :(
Sorry for the trouble. I am not sure yet on whether corruption happens at
my editor(customized vim) or at my email client. Any tips or ideas would be
helpful.
Regarding DBUS, I still don't have a very good understanding of D-BUS
interface. So thought of working on it once initial changes are
frozen/done.
Regarding the patch, do we really need to iterate through the interface
list?. I was assuming that the wpas_drv_shared_freq implementation should
take care of this.In case of virtual interfaces sharing a single PHY, the
shared_freq handler should return the freq in use (STA associated freq/ GO
operating freq).
Again, this iteration check would be required for drivers which doesn't
implement the shared_freq handler and still have shared virtual interfaces
over a single PHY. I may be missing something here also. Please correct my
understanding, if wrong. Apart from this doubt, everything else looks fine
with the cleaned up version of the patch.
- Jithu
On Sun, Apr 8, 2012 at 10:47 PM, Jouni Malinen <j at w1.fi> wrote:
> On Tue, Mar 06, 2012 at 10:33:55AM +0530, Jithu Jance wrote:
> > Single channel concurrency Patch [2/4]
> >
> > This patch handles the case where a p2p join fails due to a freq conflict
> > with the existing STA connection.
>
> Like Johannes pointed out, it would be nice to get a patch file that is
> not corrupted (tabs were removed or converted to a single space, etc.,
> that prevented the patch from applying). Similarly, it would be good to
> get the D-Bus indication added, too.
>
> > diff --git a/wpa_supplicant/p2p_supplicant.c
> > @@ -2644,6 +2645,14 @@ static void wpas_p2p_scan_res_join(struct
> > wpa_supplicant *wpa_s,
> > wpa_printf(MSG_DEBUG, "P2P: Target GO operating frequency "
> > "from P2P peer table: %d MHz", freq);
> > }
> > +
> > + if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT) &&
> > + ((shared_freq = wpa_drv_shared_freq(wpa_s)) > 0) && (shared_freq !=
> > freq)) {
> > + wpa_msg(wpa_s->parent, MSG_INFO,
> > + P2P_EVENT_GROUP_FORMATION_FAILURE "reason=FREQ_CONFLICT");
> > + return;
> > + }
>
> This is not enough and not in the correct location. The following freq
> update based on BSS table is needed for many cases. In addition, the
> wpa_s->global->ifaces list should be iterated in search of an
> conflicting operating channel.
>
> I added a more complete version of this type of validation:
>
>
> commit 4b156206092d1d500407abbed7007071deee47d0
>
> P2P: Abort join-group operation if concurrent group cannot be supported
>
> If the driver does not indicate support for multi-channel concurrency,
> abort join-group operation if the end result would result in use of
> multiple operating frequencies with the same radio.
>
> Signed-hostap: Jouni Malinen <j at w1.fi>
>
> diff --git a/wpa_supplicant/p2p_supplicant.c
> b/wpa_supplicant/p2p_supplicant.c
> index 1c339d2..fa675fe 100644
> --- a/wpa_supplicant/p2p_supplicant.c
> +++ b/wpa_supplicant/p2p_supplicant.c
> @@ -2605,6 +2605,44 @@ static void wpas_p2p_pd_before_join_timeout(void
> *eloop_ctx, void *timeout_ctx)
> }
>
>
> +static int wpas_check_freq_conflict(struct wpa_supplicant *wpa_s, int
> freq)
> +{
> + struct wpa_supplicant *iface;
> + int shared_freq;
> + u8 bssid[ETH_ALEN];
> +
> + if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT)
> + return 0;
> +
> + for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
> + if (!wpas_p2p_create_iface(wpa_s) && iface == wpa_s)
> + continue;
> + if (iface->current_ssid == NULL || iface->assoc_freq == 0)
> + continue;
> + if (wpa_drv_get_bssid(iface, bssid) == 0) {
> + if (freq != (int) wpa_s->assoc_freq) {
> + wpa_printf(MSG_DEBUG, "P2P: Frequency "
> + "conflict - %s connected on %d
> MHz "
> + "- new connection on %d MHz",
> + wpa_s->ifname,
> wpa_s->assoc_freq,
> + freq);
> + return 1;
> + }
> + }
> + }
> +
> + shared_freq = wpa_drv_shared_freq(wpa_s);
> + if (shared_freq > 0 && shared_freq != freq) {
> + wpa_printf(MSG_DEBUG, "P2P: Frequency conflict - shared "
> + "virtual interface connected on %d MHz - new "
> + "connection on %d MHz", shared_freq, freq);
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> +
> static void wpas_p2p_scan_res_join(struct wpa_supplicant *wpa_s,
> struct wpa_scan_results *scan_res)
> {
> @@ -2655,6 +2693,13 @@ static void wpas_p2p_scan_res_join(struct
> wpa_supplicant *wpa_s,
> if (freq > 0) {
> u16 method;
>
> + if (wpas_check_freq_conflict(wpa_s, freq) > 0) {
> + wpa_msg(wpa_s->parent, MSG_INFO,
> + P2P_EVENT_GROUP_FORMATION_FAILURE
> + "reason=FREQ_CONFLICT");
> + return;
> + }
> +
> wpa_printf(MSG_DEBUG, "P2P: Send Provision Discovery
> Request "
> "prior to joining an existing group (GO " MACSTR
> " freq=%u MHz)",
>
> --
> Jouni Malinen PGP id EFC895FA
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.shmoo.com/pipermail/hostap/attachments/20120409/717148d1/attachment.htm
More information about the Hostap
mailing list