fixed missing FindStopped in the case of separate P2P-Device interface

Message ID 20180212192720.14325-1-vvavrychuk@gmail.com
State Accepted
Headers show
Series
  • fixed missing FindStopped in the case of separate P2P-Device interface
Related show

Commit Message

Vasyl Vavrychuk Feb. 12, 2018, 7:27 p.m.
Propagate similiar change to p2p_group_formation_failure and
p2p_invitation_received.

Some wireless controllers might have separate P2P-Device interface, see
as example result of 'iw dev':

phy#0
        Unnamed/non-netdev interface
                ...
                type P2P-device
                ...
        Interface wlp2s0
                type managed
                ...

In this case there is separate 'struct wpa_supplicant' created for this
p2p-dev-* device as result of 'wpa_supplicant_add_iface >
wpas_p2p_add_p2pdev_interface > wpa_supplicant_add_iface'.

This instance of wpa_supplicant is not registered in D-Bus
(wpas_dbus_register_*) since for corresponding P2P device interface flag
'struct wpa_interface > p2p_mgmt' is set.

But this instance is saved in p2p_init_wpa_s and is used for handling
P2P related D-Bus commands. Therefore we should look for D-Bus path in
the parent of p2p_init_wpa_s instance.

Without this change test dbus_p2p_discovery starts failing if we set
support_p2p_device in vm-run.sh.

Signed-off-by: Vasyl Vavrychuk <vvavrychuk@gmail.com>
---
 wpa_supplicant/dbus/dbus_new.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

Comments

Vasyl Vavrychuk March 4, 2018, 2:56 p.m. | #1
Just reminding about this issue.

On Mon, Feb 12, 2018 at 9:27 PM, Vasyl Vavrychuk <vvavrychuk@gmail.com> wrote:
> Propagate similiar change to p2p_group_formation_failure and
> p2p_invitation_received.
>
> Some wireless controllers might have separate P2P-Device interface, see
> as example result of 'iw dev':
>
> phy#0
>         Unnamed/non-netdev interface
>                 ...
>                 type P2P-device
>                 ...
>         Interface wlp2s0
>                 type managed
>                 ...
>
> In this case there is separate 'struct wpa_supplicant' created for this
> p2p-dev-* device as result of 'wpa_supplicant_add_iface >
> wpas_p2p_add_p2pdev_interface > wpa_supplicant_add_iface'.
>
> This instance of wpa_supplicant is not registered in D-Bus
> (wpas_dbus_register_*) since for corresponding P2P device interface flag
> 'struct wpa_interface > p2p_mgmt' is set.
>
> But this instance is saved in p2p_init_wpa_s and is used for handling
> P2P related D-Bus commands. Therefore we should look for D-Bus path in
> the parent of p2p_init_wpa_s instance.
>
> Without this change test dbus_p2p_discovery starts failing if we set
> support_p2p_device in vm-run.sh.
>
> Signed-off-by: Vasyl Vavrychuk <vvavrychuk@gmail.com>
> ---
>  wpa_supplicant/dbus/dbus_new.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
> index 8115f7721..e0f16bbda 100644
> --- a/wpa_supplicant/dbus/dbus_new.c
> +++ b/wpa_supplicant/dbus/dbus_new.c
> @@ -2027,6 +2027,9 @@ void wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
>         if (iface == NULL)
>                 return;
>
> +       if (wpa_s->p2p_mgmt)
> +               wpa_s = wpa_s->parent;
> +
>         msg = dbus_message_new_signal(wpa_s->dbus_new_path,
>                                       WPAS_DBUS_NEW_IFACE_P2PDEVICE,
>                                       "GroupFormationFailure");
> @@ -2068,6 +2071,9 @@ void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s,
>         if (iface == NULL)
>                 return;
>
> +       if (wpa_s->p2p_mgmt)
> +               wpa_s = wpa_s->parent;
> +
>         msg = dbus_message_new_signal(wpa_s->dbus_new_path,
>                                       WPAS_DBUS_NEW_IFACE_P2PDEVICE,
>                                       "InvitationReceived");
> @@ -4266,7 +4272,13 @@ void wpas_dbus_signal_p2p_find_stopped(struct wpa_supplicant *wpa_s)
>         iface = wpa_s->global->dbus;
>
>         /* Do nothing if the control interface is not turned on */
> -       if (iface == NULL || !wpa_s->dbus_new_path)
> +       if (iface == NULL)
> +               return;
> +
> +       if (wpa_s->p2p_mgmt)
> +               wpa_s = wpa_s->parent;
> +
> +       if (!wpa_s->dbus_new_path)
>                 return;
>
>         msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> --
> 2.11.0
>
Jouni Malinen April 2, 2018, 10:31 a.m. | #2
On Mon, Feb 12, 2018 at 09:27:20PM +0200, Vasyl Vavrychuk wrote:
> Propagate similiar change to p2p_group_formation_failure and
> p2p_invitation_received.

Thanks, applied.

Patch

diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index 8115f7721..e0f16bbda 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -2027,6 +2027,9 @@  void wpas_dbus_signal_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
 	if (iface == NULL)
 		return;
 
+	if (wpa_s->p2p_mgmt)
+		wpa_s = wpa_s->parent;
+
 	msg = dbus_message_new_signal(wpa_s->dbus_new_path,
 				      WPAS_DBUS_NEW_IFACE_P2PDEVICE,
 				      "GroupFormationFailure");
@@ -2068,6 +2071,9 @@  void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s,
 	if (iface == NULL)
 		return;
 
+	if (wpa_s->p2p_mgmt)
+		wpa_s = wpa_s->parent;
+
 	msg = dbus_message_new_signal(wpa_s->dbus_new_path,
 				      WPAS_DBUS_NEW_IFACE_P2PDEVICE,
 				      "InvitationReceived");
@@ -4266,7 +4272,13 @@  void wpas_dbus_signal_p2p_find_stopped(struct wpa_supplicant *wpa_s)
 	iface = wpa_s->global->dbus;
 
 	/* Do nothing if the control interface is not turned on */
-	if (iface == NULL || !wpa_s->dbus_new_path)
+	if (iface == NULL)
+		return;
+
+	if (wpa_s->p2p_mgmt)
+		wpa_s = wpa_s->parent;
+
+	if (!wpa_s->dbus_new_path)
 		return;
 
 	msg = dbus_message_new_signal(wpa_s->dbus_new_path,