From patchwork Thu Dec 28 17:58:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 10135515 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D358360388 for ; Thu, 28 Dec 2017 17:58:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C4EAE2D916 for ; Thu, 28 Dec 2017 17:58:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B93BF2D91F; Thu, 28 Dec 2017 17:58:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 697B42D916 for ; Thu, 28 Dec 2017 17:58:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754290AbdL1R6t (ORCPT ); Thu, 28 Dec 2017 12:58:49 -0500 Received: from mail-it0-f65.google.com ([209.85.214.65]:40798 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932206AbdL1R6k (ORCPT ); Thu, 28 Dec 2017 12:58:40 -0500 Received: by mail-it0-f65.google.com with SMTP id f190so29410387ita.5 for ; Thu, 28 Dec 2017 09:58:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=WnSptrJou5QvX6PGKN/f42v6pLiZSJdZ8Oa6HYwUVP4=; b=pXo7oHsnv9FUEx5LGcn+H59WBKezYrZ3GMmrxvNvSuVYkon8NkuARIok1h+p3xgtQo xIvMhBCJpelqeOGtNoa21HAxqkdp2FIkBYyJHdfOmuj9UgRlz4fS018MakNgLSNN1T/g tPpJgrohLYnhRlJ7RqwfZhrkKVQsCrSrDcidlfEIebCkevL3tbwluAcfaqDr5Dt7PsZS 513gsnuIVWO/VIPXcPnA02sKLeVw6EFU+wNPmUUMfkBjpIm31GCZeGAgtdm3J2w9pCfL Gl7b2sCb3t0Umo0Z7/JxXjqW7LyVpijYwy32FzLGnYlGBcQsJLWltIwNftSYFL+pKCLS oPOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=WnSptrJou5QvX6PGKN/f42v6pLiZSJdZ8Oa6HYwUVP4=; b=hTmzm9jo/knqLBmRe/x52qjRIbte/wz9ydWDSjCCDiFEA+0fYIM14sELEIBrg8phmj rV8pBHGxBei5FLQ25N2LpJIQUdVaUUVZabMRRmMNl3En+DTeKwti0iR/rzRygPa0UrLS UL7soGEgTOSsQbNT4cPd/+MvgupFquj3vYCQ2aqT3ONOzw7bm7uWbVciOWtVRYADJs2N pab7zrxNvT3XYcHLJpQwLx8r75Dm8SwOv1GZg+yNsO2LyfGvU3wxr1/wH7I7bi4/b4a5 +uIUNoffFvjJeHsZ4JL4yCYROmKBZ8BfGcqgUNah8/eiKzHQRALlVeGqOxsIs52wp2ho kd8A== X-Gm-Message-State: AKGB3mIH/7jLhT0vTQJnGnI95t9+1u4MDBNvP7xSZLpVRq7TzY8Efmfy XwXWeJv316DvsLHqGiZ7tpuOeg== X-Google-Smtp-Source: ACJfBoseeVrGrHj52OciCT450io0n0YE0393r2gSHSXizsEnImcVsT0HhK+ziMCvjaVIx6m0EzZkuw== X-Received: by 10.36.29.65 with SMTP id 62mr43254952itj.27.1514483919915; Thu, 28 Dec 2017 09:58:39 -0800 (PST) Received: from localhost.localdomain (216.106.3.52.reverse.socket.net. [216.106.3.52]) by smtp.gmail.com with ESMTPSA id v22sm4632955iog.2.2017.12.28.09.58.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Dec 2017 09:58:39 -0800 (PST) From: Denis Kenzior To: linux-wireless@vger.kernel.org Cc: Denis Kenzior Subject: [RFC 3/4] mac80211: Send control port frames over nl80211 Date: Thu, 28 Dec 2017 11:58:31 -0600 Message-Id: <20171228175832.3253-4-denkenz@gmail.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171228175832.3253-1-denkenz@gmail.com> References: <20171228175832.3253-1-denkenz@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If userspace requested control port frames to go over 80211, then do so. The control packets are intercepted just prior to delivery of the packet to the underlying network device. Signed-off-by: Denis Kenzior --- net/mac80211/rx.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index b3cff69bfd66..13e786fe62a6 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -2326,16 +2326,42 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx) } #endif - if (skb) { + if (!skb) + goto try_xmit; + + skb->protocol = eth_type_trans(skb, dev); + memset(skb->cb, 0, sizeof(skb->cb)); + + if (unlikely(skb->protocol == sdata->control_port_protocol && + sdata->control_port_over_nl80211)) { + struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); + bool noencrypt; + + ehdr = eth_hdr(skb); + + if (status->flag & RX_FLAG_DECRYPTED) + noencrypt = false; + else + noencrypt = true; + + if (!cfg80211_rx_control_port(&sdata->wdev, + skb->data, + skb->len, + ehdr->h_source, + be16_to_cpu(skb->protocol), + noencrypt)) { + dev_kfree_skb(skb); + skb = NULL; + } + } else { /* deliver to local stack */ - skb->protocol = eth_type_trans(skb, dev); - memset(skb->cb, 0, sizeof(skb->cb)); if (rx->napi) napi_gro_receive(rx->napi, skb); else netif_receive_skb(skb); } +try_xmit: if (xmit_skb) { /* * Send to wireless media and increase priority by 256 to