@@ -2069,6 +2069,10 @@ Interface for performing P2P (Wi-Fi Peer-to-Peer) P2P Device operations.
<li>
<h3>PersistentGroups - ao - (read)</h3>
</li>
+
+ <li>
+ <h3>DeviceAddress - ay - (read)</h3>
+ </li>
</ul>
\subsection dbus_p2pdevice_signals Signals
@@ -62,6 +62,18 @@ def prepare_dbus(dev):
except Exception as e:
raise HwsimSkip("Could not connect to D-Bus: %s" % e)
+def assert_dev_addr(p2p, expected):
+ property = p2p.Get(WPAS_DBUS_IFACE_P2PDEVICE, "DeviceAddress",
+ dbus_interface=dbus.PROPERTIES_IFACE)
+ dev_addr_str = ''
+ for item in property:
+ if len(dev_addr_str) > 0:
+ dev_addr_str += ':'
+ dev_addr_str += '%02x' % item
+
+ if expected != dev_addr_str:
+ raise Exception("Expected device addr to be %s, got %s" % (expected, dev_addr_str))
+
class TestDbus(object):
def __init__(self, bus):
self.loop = gobject.MainLoop()
@@ -3195,6 +3207,7 @@ def run_dbus_p2p_discovery(dev, apdev):
p2p = dbus.Interface(if_obj, WPAS_DBUS_IFACE_P2PDEVICE)
addr0 = dev[0].p2p_dev_addr()
+ assert_dev_addr(p2p, addr0);
dev[1].request("SET sec_device_type 1-0050F204-2")
dev[1].request("VENDOR_ELEM_ADD 1 dd0c0050f2041049000411223344")
@@ -5075,6 +5088,7 @@ def test_dbus_p2p_wps_failure(dev, apdev):
(bus, wpas_obj, path, if_obj) = prepare_dbus(dev[0])
p2p = dbus.Interface(if_obj, WPAS_DBUS_IFACE_P2PDEVICE)
addr0 = dev[0].p2p_dev_addr()
+ assert_dev_addr(p2p, addr0);
class TestDbusP2p(TestDbus):
def __init__(self, bus):
@@ -5156,6 +5170,8 @@ def test_dbus_p2p_two_groups(dev, apdev):
addr2 = dev[2].p2p_dev_addr()
dev[1].p2p_start_go(freq=2412)
+ assert_dev_addr(p2p, addr0);
+
class TestDbusP2p(TestDbus):
def __init__(self, bus):
TestDbus.__init__(self, bus)
@@ -5341,6 +5357,8 @@ def test_dbus_p2p_cancel(dev, apdev):
pass
addr0 = dev[0].p2p_dev_addr()
+ assert_dev_addr(p2p, addr0);
+
dev[1].p2p_listen()
class TestDbusP2p(TestDbus):
@@ -4055,6 +4055,11 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = {
wpas_dbus_setter_p2p_device_config,
NULL
},
+ { "DeviceAddress", WPAS_DBUS_NEW_IFACE_P2PDEVICE, "ay",
+ wpas_dbus_getter_p2p_device_address,
+ NULL,
+ NULL
+ },
{ "Peers", WPAS_DBUS_NEW_IFACE_P2PDEVICE, "ao",
wpas_dbus_getter_p2p_peers,
NULL,
@@ -1455,6 +1455,21 @@ dbus_bool_t wpas_dbus_getter_p2p_peergo(
&path, error);
}
+dbus_bool_t wpas_dbus_getter_p2p_device_address(
+ const struct wpa_dbus_property_desc *property_desc,
+ DBusMessageIter *iter, DBusError *error, void *user_data)
+{
+ struct wpa_supplicant *wpa_s = user_data;
+
+ if (!wpa_dbus_p2p_check_enabled(wpa_s, NULL, NULL, error))
+ return FALSE;
+
+ wpa_s = wpa_s->global->p2p_init_wpa_s;
+
+ return wpas_dbus_simple_array_property_getter(
+ iter, DBUS_TYPE_BYTE, (char *) wpa_s->own_addr,
+ ETH_ALEN, error);
+}
/*
* Peer object properties accessor methods
@@ -95,6 +95,7 @@ DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peers);
DECLARE_ACCESSOR(wpas_dbus_getter_p2p_role);
DECLARE_ACCESSOR(wpas_dbus_getter_p2p_group);
DECLARE_ACCESSOR(wpas_dbus_getter_p2p_peergo);
+DECLARE_ACCESSOR(wpas_dbus_getter_p2p_device_address);
/*
* P2P Peer properties.
(Re-sending because I realized I hadn't signed off on the previous patch, please remove this paragraph if/when applying the patch. Thanks and sorry for the noise!) If you have two peers using wpa_supplicant, right now the client can get both the GO interface and device addresses, but you can't know your own device address. Knowing your own device address is useful to coordinate to the GO and map the interface address to a Peer object once the P2P connection has been established. Android seems to expose this information: https://stackoverflow.com/questions/10650337/how-do-you-retrieve-the-wifi-direct-mac-address Let me know if I'm missing something and this is achievable some other way or what not. Add some basic tests in test_dbus.py. Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io> --- doc/dbus.doxygen | 4 ++++ tests/hwsim/test_dbus.py | 18 ++++++++++++++++++ wpa_supplicant/dbus/dbus_new.c | 5 +++++ wpa_supplicant/dbus/dbus_new_handlers_p2p.c | 15 +++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers_p2p.h | 1 + 5 files changed, 43 insertions(+)