From patchwork Thu Apr 13 12:09:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nishant Chaprana X-Patchwork-Id: 750418 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3w3fjk6L8Mz9sCZ for ; Thu, 13 Apr 2017 22:09:46 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Pd5CP+k8"; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:List-Owner; bh=L/AM+IXXX0sh3AUM2ViPYrnBr1MAQwdeOskgdmX6ya8=; b=Pd 5CP+k8XnyQwjW13l7JyLnBD7bZEoOQ6uB62oMDYU7dWXNkcHPcLte5bhnq71gta4rbEr9PlysHFBg mS+Bjot7crT9pbu9eym6b3t1ViYA4rXQodQKw0RFLfUhti/PrZPVoF9BY6oHVewuSV/fFXg8AdbRi RpFlEAkFUhWDRA9si46H6iHk/+qJU8vtCCanVyCN1fvSoJdxdfsSq/IACNdZMipE+u8cxzy49YZ4o OggaGvupk2LMEzMBpmdcGv64qS1/qWuZetC2VdLWKzYGoxocmcY61hh4ByeQ7TGNtwpIbfry6c4IT JDj2ax/aUX4MRFz+kjHQCDq/MaDz5prg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cydZH-0007tp-Tn; Thu, 13 Apr 2017 12:09:43 +0000 Received: from mailout2.samsung.com ([203.254.224.25] helo=epoutp02.samsung.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cydZD-0007pS-Bj for hostap@lists.infradead.org; Thu, 13 Apr 2017 12:09:42 +0000 Received: from epcas2p2.samsung.com (unknown [182.195.41.54]) by epoutp02.samsung.com (KnoxPortal) with ESMTP id 20170413120912epoutp02e7c0b6631528b976a904bd5afd3a5f16~087kaDYla3186931869epoutp02Q for ; Thu, 13 Apr 2017 12:09:12 +0000 (GMT) Received: from epsmges5p1.samsung.com (unknown [182.195.40.77]) by epcas2p2.samsung.com (KnoxPortal) with ESMTP id 20170413120912epcas2p2a1f1f580478bd2fcc6962979daa90435~087j99UEW1243812438epcas2p22; Thu, 13 Apr 2017 12:09:12 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p1.samsung.com (EPCPMTA) with SMTP id 51.CA.20983.86A6FE85; Thu, 13 Apr 2017 21:09:12 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20170413120912epcas5p4066fc7b04ae1b58c8c06a0314c7f38bb~087jn3Fd11976019760epcas5p4u; Thu, 13 Apr 2017 12:09:12 +0000 (GMT) Received: from epsmgmsp2.samsung.com (unknown [182.195.42.98]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20170413120912epsmtrp1e5a5936eb243efa4fef65342e270e8f5~087jnGNWI1719017190epsmtrp1f; Thu, 13 Apr 2017 12:09:12 +0000 (GMT) X-AuditID: b6c32a2c-f79be6d0000051f7-9d-58ef6a6890cc Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgmsp2.samsung.com (Symantec Messaging Gateway) with SMTP id 1C.51.21918.22A6FE85; Thu, 13 Apr 2017 21:08:02 +0900 (KST) Received: from nishant-ubuntu.sa.corp.samsungelectronics.net (unknown [107.109.228.78]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20170413120911epsmtip14284e1a29b1d65f9d75eabeb8c096a48~087i0T2rr1352013520epsmtip1g; Thu, 13 Apr 2017 12:09:11 +0000 (GMT) From: Nishant Chaprana To: hostap@lists.infradead.org Subject: [PATCH 1/2] TDLS: Added dbus method to enable channel switching with TDLS peer Date: Thu, 13 Apr 2017 17:39:00 +0530 Message-Id: <1492085341-7930-1-git-send-email-n.chaprana@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFKsWRmVeSWpSXmKPExsWy7bCmpm5G1vsIg2drxSzWPkqz2LpkP5PF rRv9LA7MHpuX1Hv0bVnFGMAUlWqTkZqYklqkkJqXnJ+SmZduq+QdHO8cb2pmYKhraGlhrqSQ l5ibaqvk4hOg65aZA7RCSaEsMacUKBSQWFyspG9nU5RfWpKqkJFfXGKrFG1oaKRnaGCuZ2Rk pGdiGmtlZApUkpCaMWfJUZaC7yYVHf8mMDUwXtLuYuTkkBAwkTh/YiUrhC0mceHeerYuRi4O IYGljBIfbrcwQjifGCVeTTrCCud0Hu5lgmlf+ekUE0RiJ1DVlmdQVT1MEhf3HWEHqWIT0Jd4 2nWeBcQWEZCTOPnyAjOIzSzgKnHg3VywuLBApMSpG2sYQWwWAVWJvmNvwWp4gWp6381gg9gG 1HtsMtgCCYGLrBIP32yCSrhIrHw3jQXCFpZ4dXwLO4QtJfGyv40doqGbUeLyiuOMEM4URolj H09D/W0v0XZsN1A3B9BJmhLrd+mDmBICthKXuxMhTD6JG28FIW7mk+j9/QTqexWJzsezWSFK eCU62oQgTA+Jeb1pEBWOEj0TfoGtERKIlVj+7wT7BEb5WQibFjAyrmIUSy0ozk1PLTYtMNQr TswtLs1L10vOz93ECE5HWjo7GO8t8D7EKMDBqMTDqxH8PkKINbGsuDL3EKMEB7OSCO/6VKAQ b0piZVVqUX58UWlOavEhRlNgOE5klhJNzgemyrySeEMTSwMTUzNTE3NDC1MlcV6NldcihATS E0tSs1NTC1KLYPqYODilGhhXbQkI9Pl03b7ly+rSje6LMgMFHKak6vYH3TGPdvMTMHt98Kxo eovtvhsfzcyz48ov88eWHDy0Iv3mcQleJ0buxZ7qEcnHama//dnZt+SYa87t5JYHTX56UhvX iVeXf/YUWqH7ev3q/OC/9h7p/e29/Iuul/tt4mFOUlm9QGflsWYFtr1XjyqxFGckGmoxFxUn AgDIPrHnXQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAJMWRmVeSWpSXmKPExsWy7bCSnK5S1vsIgz9tzBZrH6VZbF2yn8ni 1o1+Fgdmj81L6j36tqxiDGCK4rJJSc3JLEst0rdL4MqYs+QoS8F3k4qOfxOYGhgvaXcxcnJI CJhIrPx0ignCFpO4cG89WxcjF4eQwHZGiX8NWxghEmoS1w/eYIawhSVW/nvODlHUxSTRcOQS WDebgL7E067zLCC2iICcxMmXF8AamAXcJX53fmADsYUFwiU27JgLFmcRUJXoO/YWzOYVcJXo fTeDDWIBUO+xyawTGHkXMDKsYhRNLSjOTc8tLjDSK07MLS7NS9dLzs/dxAgOB62kHYybZoQf YhTgYFTi4bVIfB8hxJpYVlyZe4hRgoNZSYR3fSpQiDclsbIqtSg/vqg0J7X4EKM0B4uSOO/2 6g0RQgLpiSWp2ampBalFMFkmDk6pBkYXpvuvjv6sCmbZ7JLCeiapobGgdt+Br8nySyvm+GT/ 3XFozjuDQofgeKZlsz/JHWc/UXOjN9iNz/jiqrRXsdmz+rTvKr1bdWl34OSugI/v13aULfTh P6PWvyUxxCC54Jt1dM5Dz87trbXXNrZ9+x769wHPlNTlHwJPNHA9kG5q1e15+PnIzzAlluKM REMt5qLiRABHukXRAwIAAA== X-CMS-MailID: 20170413120912epcas5p4066fc7b04ae1b58c8c06a0314c7f38bb X-Msg-Generator: CA X-Sender-IP: 182.195.40.13 X-Local-Sender: =?UTF-8?B?TmlzaGFudCBDaGFwcmFuYRtTUkktRGVsaGktQWR2YW5jZWQg?= =?UTF-8?B?U1cgVGVhbRvsgrzshLHsoITsnpAbTGVhZCBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?TmlzaGFudCBDaGFwcmFuYRtTUkktRGVsaGktQWR2YW5jZWQg?= =?UTF-8?B?U1cgVGVhbRtTYW1zdW5nIEVsZWN0cm9uaWNzG0xlYWQgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1NXQUhRG0MxMElEMDJJRDAyODExMQ==?= X-MTR: 20170413120912epcas5p4066fc7b04ae1b58c8c06a0314c7f38bb X-EPHeader: CA CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20170413120912epcas5p4066fc7b04ae1b58c8c06a0314c7f38bb X-RootMTR: 20170413120912epcas5p4066fc7b04ae1b58c8c06a0314c7f38bb References: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170413_050939_564467_F61149CA X-CRM114-Status: GOOD ( 10.14 ) X-Spam-Score: -6.9 (------) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-6.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high trust [203.254.224.25 listed in list.dnswl.org] -0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nishant Chaprana , sachin.dev@samsung.com MIME-Version: 1.0 Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Description: This patch adds "TDLSChannelSwitch" dbus method on "fi.w1.wpa_supplicant1.Interface" interface to enable channel switching with TDLS peer. Signed-off-by: Nishant Chaprana --- wpa_supplicant/dbus/dbus_new.c | 7 ++ wpa_supplicant/dbus/dbus_new_handlers.c | 130 ++++++++++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 2 + 3 files changed, 139 insertions(+) diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 0c355f7..0dce09e 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -3086,6 +3086,13 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = { END_ARGS } }, + { "TDLSChannelSwitch", WPAS_DBUS_NEW_IFACE_INTERFACE, + (WPADBusMethodHandler) wpas_dbus_handler_tdls_channel_switch, + { + { "args", "a{sv}", ARG_IN }, + END_ARGS + } + }, #endif /* CONFIG_TDLS */ { "VendorElemAdd", WPAS_DBUS_NEW_IFACE_INTERFACE, (WPADBusMethodHandler) wpas_dbus_handler_vendor_elem_add, diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index 56e6aab..9092e7a 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -2292,6 +2292,136 @@ DBusMessage * wpas_dbus_handler_tdls_teardown(DBusMessage *message, return NULL; } +/* + * wpas_dbus_handler_tdls_channel_switch - Enable channel switching with TDLS peer + * @message: Pointer to incoming dbus message + * @wpa_s: wpa_supplicant structure for a network interface + * Returns: NULL indicating success or DBus error message on failure + * + * Handler function for "TDLSChannelSwitch" method call of network interface. + */ +DBusMessage * wpas_dbus_handler_tdls_channel_switch(DBusMessage *message, + struct wpa_supplicant *wpa_s) +{ + DBusMessageIter iter, iter_dict; + struct wpa_dbus_dict_entry entry; + u8 peer[ETH_ALEN]; + struct hostapd_freq_params freq_params; + u8 oper_class = 0; + int ret; + int is_peer_present = 0; + + if (!wpa_tdls_is_external_setup(wpa_s->wpa)) { + wpa_printf(MSG_INFO, + "tdls_chanswitch: Only supported with external setup"); + return wpas_dbus_error_unknown_error(message, "tdls is not external setup"); + } + + os_memset(&freq_params, 0, sizeof(freq_params)); + + dbus_message_iter_init(message, &iter); + + if (!wpa_dbus_dict_open_read(&iter, &iter_dict, NULL)) + return wpas_dbus_error_invalid_args(message, NULL); + + while (wpa_dbus_dict_has_dict_entry(&iter_dict)) { + if (!wpa_dbus_dict_get_entry(&iter_dict, &entry)) + return wpas_dbus_error_invalid_args(message, NULL); + + if (os_strcmp(entry.key, "PeerAddress") == 0 && + entry.type == DBUS_TYPE_STRING) { + if (hwaddr_aton(entry.str_value, peer)) { + wpa_printf(MSG_DEBUG, + "tdls_chanswitch: Invalid address '%s'", + entry.str_value); + wpa_dbus_dict_entry_clear(&entry); + return wpas_dbus_error_invalid_args(message, + NULL); + } + + wpa_dbus_dict_entry_clear(&entry); + is_peer_present = 1; + + } else if (os_strcmp(entry.key, "OperClass") == 0 && + entry.type == DBUS_TYPE_BYTE) { + oper_class = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "Frequency") == 0 && + entry.type == DBUS_TYPE_INT32) { + freq_params.freq = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "SecChannelOffset") == 0 && + entry.type == DBUS_TYPE_INT32) { + freq_params.sec_channel_offset = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "CenterFrequency1") == 0 && + entry.type == DBUS_TYPE_INT32) { + freq_params.center_freq1 = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "CenterFrequency2") == 0 && + entry.type == DBUS_TYPE_INT32) { + freq_params.center_freq2 = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "Bandwidth") == 0 && + entry.type == DBUS_TYPE_INT32) { + freq_params.bandwidth = entry.int32_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "HT") == 0 && + entry.type == DBUS_TYPE_BOOLEAN) { + freq_params.ht_enabled = entry.bool_value; + wpa_dbus_dict_entry_clear(&entry); + + } else if (os_strcmp(entry.key, "VHT") == 0 && + entry.type == DBUS_TYPE_BOOLEAN) { + freq_params.vht_enabled = entry.bool_value; + wpa_dbus_dict_entry_clear(&entry); + + } else { + wpa_dbus_dict_entry_clear(&entry); + return wpas_dbus_error_invalid_args(message, NULL); + } + } + + if (oper_class == 0) { + wpa_printf(MSG_INFO, + "tdls_chanswitch: Invalid op class provided"); + return wpas_dbus_error_invalid_args(message, "Invalid op class provided"); + } + + if (freq_params.freq == 0) { + wpa_printf(MSG_INFO, + "tdls_chanswitch: Invalid freq provided"); + return wpas_dbus_error_invalid_args(message, "Invalid freq provided"); + } + + if (is_peer_present == 0) { + wpa_printf(MSG_DEBUG, + "tdls_chanswitch: peer address not provided"); + return wpas_dbus_error_invalid_args(message, "peer address not provided"); + } + + wpa_printf(MSG_DEBUG, "DBUS TDLS_CHAN_SWITCH " MACSTR + " OP CLASS %d FREQ %d CENTER1 %d CENTER2 %d BW %d SEC_OFFSET %d%s%s", + MAC2STR(peer), oper_class, freq_params.freq, + freq_params.center_freq1, freq_params.center_freq2, + freq_params.bandwidth, freq_params.sec_channel_offset, + freq_params.ht_enabled ? " HT" : "", + freq_params.vht_enabled ? " VHT" : ""); + + ret = wpa_tdls_enable_chan_switch(wpa_s->wpa, peer, oper_class, + &freq_params); + if (ret) + return wpas_dbus_error_unknown_error(message, "error processing TDLS channel switch"); + + return NULL; +} + #endif /* CONFIG_TDLS */ diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index 3b8f096..3987c07 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -213,6 +213,8 @@ DBusMessage * wpas_dbus_handler_tdls_status(DBusMessage *message, struct wpa_supplicant *wpa_s); DBusMessage * wpas_dbus_handler_tdls_teardown(DBusMessage *message, struct wpa_supplicant *wpa_s); +DBusMessage * wpas_dbus_handler_tdls_channel_switch(DBusMessage *message, + struct wpa_supplicant *wpa_s); DBusMessage * wpas_dbus_handler_vendor_elem_add(DBusMessage *message, struct wpa_supplicant *wpa_s);