diff mbox

Re: [EDT][PATCH] P2P :- Listen frequence and Operating frequency information

Message ID 1912834405.1132291433161273881.JavaMail.weblogic@epmlwas01c
State Changes Requested
Headers show

Commit Message

Amit Khatri June 1, 2015, 12:21 p.m. UTC
EP-000FDDED3B62486AA7D5E5FEC3026A62
Thanks for suggestion. i have made the changes accrodingly.

From 3110eb27fee98480fc6b7c1cbb951e0d53b0a322 Mon Sep 17 00:00:00 2001
From: Amit Khatri <amit.khatri@samsung.com>
Date: Mon, 1 Jun 2015 17:42:36 +0530
Subject: [PATCH] P2P :- Listen frequence and Operating frequency information
 into DBUS peer interface. This information is required for debug over dbus
 interface

Signed-off-by: Amit Khatri <amit.khatri@samsung.com>
Signed-off-by: Rahul Jain <rahul.jain@samsung.com>
Signed-off-by: Ashutosh Kaushik <k.ashutosh@samsung.com>
---
 doc/dbus.doxygen                            |  8 +++++
 src/p2p/p2p.c                               | 23 +++++++++++++
 src/p2p/p2p.h                               | 15 +++++++++
 wpa_supplicant/dbus/dbus_new.c              |  8 +++++
 wpa_supplicant/dbus/dbus_new_handlers_p2p.c | 50 +++++++++++++++++++++++++++++
 wpa_supplicant/dbus/dbus_new_handlers_p2p.h |  8 +++++
 6 files changed, 112 insertions(+)

Comments

Jouni Malinen June 6, 2015, 2:41 p.m. UTC | #1
On Mon, Jun 01, 2015 at 12:21:13PM +0000, Amit Khatri wrote:
> Thanks for suggestion. i have made the changes accrodingly.

Could you please clarify what you are planning on using this information
for? While you do note this is for "debug over dbus interface", I do not
really want to expose these internal parameters from wpa_supplicant
through the D-Bus interface since there is significant risk of them
being misused just like they did over the control interface.

> diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
> @@ -1642,6 +1642,14 @@ Interface implemented by objects representing P2P peer devices.
>    <li>
> +    <h3>ListenFreq - i - (read)</h3>
> +  </li>
> +
> +  <li>
> +    <h3>OperFreq - i - (read)</h3>
> +  </li>

This is even documenting these variables without any sign of debugging
mentioned here. These fields are simply not reliable since they may
change at any point in time and OperFreq is even worse since the peer
may have multiple operating channels.
diff mbox

Patch

diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
index 032d595..e9b14f7 100644
--- a/doc/dbus.doxygen
+++ b/doc/dbus.doxygen
@@ -1642,6 +1642,14 @@  Interface implemented by objects representing P2P peer devices.
   </li>
 
   <li>
+    <h3>ListenFreq - i - (read)</h3>
+  </li>
+
+  <li>
+    <h3>OperFreq - i - (read)</h3>
+  </li>
+
+  <li>
     <h3>PrimaryDeviceType - ay - (read)</h3>
   </li>
 
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index c02044b..ed7dd66 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -4884,6 +4884,29 @@  p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next)
 }
 
 
+int
+p2p_get_peer_found_freq(struct p2p_data *p2p, const u8 *addr, enum p2p_freq_type type)
+{
+	struct p2p_device *dev;
+
+	if (!addr)
+		return -1;
+	else{
+		dev = p2p_get_device(p2p, addr);
+		if (!dev)
+			return -1;
+
+		if (dev->flags & P2P_DEV_PROBE_REQ_ONLY)
+			return -1;
+		if(type == LISTEN_FREQ_TYPE)
+			return dev->listen_freq;
+		else if(type == OPERATING_FREQ_TYPE)
+			return dev->oper_freq;
+	}
+	return -1;
+}
+
+
 int p2p_in_progress(struct p2p_data *p2p)
 {
 	if (p2p == NULL)
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index da2446d..d362932 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -67,6 +67,11 @@  enum p2p_wps_method {
 	WPS_P2PS
 };
 
+enum p2p_freq_type {
+	LISTEN_FREQ_TYPE=1,
+	OPERATING_FREQ_TYPE=2
+};
+
 /**
  * struct p2p_go_neg_results - P2P Group Owner Negotiation results
  */
@@ -2077,6 +2082,16 @@  const struct p2p_peer_info *
 p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next);
 
 /**
+ * p2p_get_peer_found_freq - Get P2P peer frequencies of a found peer
+ * @p2p: P2P module context from p2p_init()
+ * @addr: P2P Device Address of the peer
+ * @type: 1 for listen_freq 2 for operating freq
+ * Returns: The P2P peer frequency based on type
+ */
+int
+p2p_get_peer_found_freq(struct p2p_data *p2p, const u8 *addr, enum p2p_freq_type type);
+
+/**
  * p2p_remove_wps_vendor_extensions - Remove WPS vendor extensions
  * @p2p: P2P module context from p2p_init()
  */
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index 6382d77..f583022 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -3351,6 +3351,14 @@  static const struct wpa_dbus_property_desc wpas_dbus_p2p_peer_properties[] = {
 	  wpas_dbus_getter_p2p_peer_groups,
 	  NULL
 	},
+	{ "ListenFreq", WPAS_DBUS_NEW_IFACE_P2P_PEER, "i",
+	  wpas_dbus_getter_p2p_device_listen_freq,
+	  NULL
+	},
+	{ "OperFreq", WPAS_DBUS_NEW_IFACE_P2P_PEER, "i",
+	  wpas_dbus_getter_p2p_device_oper_freq,
+	  NULL
+	},
 	{ NULL, NULL, NULL, NULL, NULL }
 };
 
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
index c8dd67b..a0608bb 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
@@ -1364,6 +1364,56 @@  dbus_bool_t wpas_dbus_getter_p2p_peer_level(DBusMessageIter *iter,
 }
 
 
+dbus_bool_t wpas_dbus_getter_p2p_device_listen_freq(DBusMessageIter *iter,
+					    DBusError *error,
+					    void *user_data)
+{
+	struct peer_handler_args *peer_args = user_data;
+	//const struct p2p_peer_info *info;
+	int listen=0;
+
+	listen = p2p_get_peer_found_freq(peer_args->wpa_s->global->p2p,
+				  peer_args->p2p_device_addr,LISTEN_FREQ_TYPE);
+	if (listen == -1) {
+		dbus_set_error(error, DBUS_ERROR_FAILED,
+			       "failed to find peer listen frequency");
+		return FALSE;
+	}
+
+	if (!wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32,
+					      &listen, error)) {
+		dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+
+dbus_bool_t wpas_dbus_getter_p2p_device_oper_freq(DBusMessageIter *iter,
+					    DBusError *error,
+					    void *user_data)
+{
+	struct peer_handler_args *peer_args = user_data;
+	int operating=0;
+
+	operating = p2p_get_peer_found_freq(peer_args->wpa_s->global->p2p,
+				  peer_args->p2p_device_addr,2);
+	if (operating == -1) {
+		dbus_set_error(error, DBUS_ERROR_FAILED,
+			       "failed to find peer operating frequency");
+		return FALSE;
+	}
+
+	if (!wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32,
+					      &operating, error)) {
+		dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
 dbus_bool_t wpas_dbus_getter_p2p_peer_device_capability(DBusMessageIter *iter,
 							DBusError *error,
 							void *user_data)
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_p2p.h b/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
index a84fc4a..b8d2718 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers_p2p.h
@@ -130,6 +130,14 @@  dbus_bool_t wpas_dbus_getter_p2p_peer_level(DBusMessageIter *iter,
 					    DBusError *error,
 					    void *user_data);
 
+dbus_bool_t wpas_dbus_getter_p2p_device_listen_freq(DBusMessageIter *iter,
+					    DBusError *error,
+					    void *user_data);
+
+dbus_bool_t wpas_dbus_getter_p2p_device_oper_freq(DBusMessageIter *iter,
+					    DBusError *error,
+					    void *user_data);
+
 dbus_bool_t wpas_dbus_getter_p2p_peer_device_capability(DBusMessageIter *iter,
 							DBusError *error,
 							void *user_data);