From patchwork Thu Dec 19 17:09:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Schantl X-Patchwork-Id: 2651 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) client-signature ECDSA (P-384)) (Client CN "mail01.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 47dyzn1cCkz3xXp for ; Thu, 19 Dec 2019 17:09:57 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail02.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 47dyzl6Tsrz2Q0; Thu, 19 Dec 2019 17:09:55 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 47dyzl4jpdz2yHh; Thu, 19 Dec 2019 17:09:55 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) client-signature ECDSA (P-384)) (Client CN "mail01.haj.ipfire.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 47dyzk01n5z2yB5 for ; Thu, 19 Dec 2019 17:09:53 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) by mail01.ipfire.org (Postfix) with ESMTPSA id 47dyzZ6QpDz2Q0; Thu, 19 Dec 2019 17:09:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=201909rsa; t=1576775393; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LUg3az2VkEOlqYHedV/7w/TcuSg/KKMSo/jxbo2hzDc=; b=WQ0lBna/eTOgwqTGUuaV8X3s8N1IYd00dHMqUb+0yjknHyRE0hotUWPjVcziTz3LCkTSwI cJ48wmG1Vn3U4aBOHzPi/XD9aaamcAYMmEAE1ytQ9a6xdlFMLAnmLpDraPgfAQhYc8vT5T GIqV5Kd5CmbaPd6YLd4CZycCDJ34ggwfGVNGd0+K5JaEDXwIPw5mdRRsC3WhhrBpi+jtO/ XyWmmjN3uy0eNkqn9dGf35YmN2HycRrLO7r85L2JiH+iVh/I+HugUCI4+Lx/YV+redJkiW JwJpsAx7bNI44txSQ7k7XlcBgZ/o4/MdcmnSx0847QFEi7guE9qbn1EFiAzRCA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=201909ed25519; t=1576775393; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LUg3az2VkEOlqYHedV/7w/TcuSg/KKMSo/jxbo2hzDc=; b=uuuIwqfLjy12OVdx90ZXWsjrFvfWLjv11Z34Aj2xlt/TakeTydLkhtaVEoUP1N9yyyucBC glY/d2rPde9kRWBQ== From: Stefan Schantl To: development@lists.ipfire.org Subject: [PATCH] rfkill: New package. Date: Thu, 19 Dec 2019 18:09:42 +0100 Message-Id: <20191219170942.28654-1-stefan.schantl@ipfire.org> In-Reply-To: <4639465b-d23c-2a80-1b0c-d756ec09aace@rymes.com> References: <4639465b-d23c-2a80-1b0c-d756ec09aace@rymes.com> MIME-Version: 1.0 Authentication-Results: mail01.ipfire.org; auth=pass smtp.auth=stevee smtp.mailfrom=stefan.schantl@ipfire.org X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: development-bounces@lists.ipfire.org Sender: "Development" Signed-off-by: Stefan Schantl Acked-by: Michael Tremer --- config/rootfiles/common/rfkill | 2 + lfs/rfkill | 81 +++++ make.sh | 1 + src/patches/rfkill-5.0-use_uapi_rfkill.patch | 341 +++++++++++++++++++ 4 files changed, 425 insertions(+) create mode 100644 config/rootfiles/common/rfkill create mode 100644 lfs/rfkill create mode 100644 src/patches/rfkill-5.0-use_uapi_rfkill.patch diff --git a/config/rootfiles/common/rfkill b/config/rootfiles/common/rfkill new file mode 100644 index 000000000..8887a02f6 --- /dev/null +++ b/config/rootfiles/common/rfkill @@ -0,0 +1,2 @@ +usr/sbin/rfkill +#usr/share/man/man8/rfkill.8.gz diff --git a/lfs/rfkill b/lfs/rfkill new file mode 100644 index 000000000..bfd4e8516 --- /dev/null +++ b/lfs/rfkill @@ -0,0 +1,81 @@ +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007-2019 IPFire Team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +############################################################################### +# Definitions +############################################################################### + +include Config + +VER = 0.5 + +THISAPP = rfkill-$(VER) +DL_FILE = $(THISAPP).tar.xz +DL_FROM = $(URL_IPFIRE) +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) + +############################################################################### +# Top-level Rules +############################################################################### + +objects = $(DL_FILE) + +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) + +$(DL_FILE)_MD5 = ce834c00c049cd86a04ab115c92ef548 + +install : $(TARGET) + +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) + +download :$(patsubst %,$(DIR_DL)/%,$(objects)) + +md5 : $(subst %,%_MD5,$(objects)) + +############################################################################### +# Downloading, checking, md5sum +############################################################################### + +$(patsubst %,$(DIR_CHK)/%,$(objects)) : + @$(CHECK) + +$(patsubst %,$(DIR_DL)/%,$(objects)) : + @$(LOAD) + +$(subst %,%_MD5,$(objects)) : + @$(MD5) + +############################################################################### +# Installation Details +############################################################################### + +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) + @$(PREBUILD) + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + + # Apply upstream patches. + cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/rfkill-5.0-use_uapi_rfkill.patch + + cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make install + + @rm -rf $(DIR_APP) + @$(POSTBUILD) diff --git a/make.sh b/make.sh index c30ce7813..e1ac4c6b9 100755 --- a/make.sh +++ b/make.sh @@ -1633,6 +1633,7 @@ buildipfire() { lfsmake2 tshark lfsmake2 geoip-generator lfsmake2 speedtest-cli + lfsmake2 rfkill } buildinstaller() { diff --git a/src/patches/rfkill-5.0-use_uapi_rfkill.patch b/src/patches/rfkill-5.0-use_uapi_rfkill.patch new file mode 100644 index 000000000..4c3d3e144 --- /dev/null +++ b/src/patches/rfkill-5.0-use_uapi_rfkill.patch @@ -0,0 +1,341 @@ +From fd06998396d631f028fd8f8d7bcb2b442c578292 Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Thu, 8 Jan 2015 09:02:42 +0100 +Subject: use uapi rfkill.h + +--- + rfkill.h | 295 ++------------------------------------------------------------- + 1 file changed, 6 insertions(+), 289 deletions(-) + +diff --git a/rfkill.h b/rfkill.h +index d253b4e..058757f 100644 +--- a/rfkill.h ++++ b/rfkill.h +@@ -1,6 +1,3 @@ +-#ifndef __RFKILL_H +-#define __RFKILL_H +- + /* + * Copyright (C) 2006 - 2007 Ivo van Doorn + * Copyright (C) 2007 Dmitry Torokhov +@@ -18,6 +15,9 @@ + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ ++#ifndef _UAPI__RFKILL_H ++#define _UAPI__RFKILL_H ++ + + #include + +@@ -29,7 +29,7 @@ + /** + * enum rfkill_type - type of rfkill switch. + * +- * @RFKILL_TYPE_ALL: toggles all switches (userspace only) ++ * @RFKILL_TYPE_ALL: toggles all switches (requests only - not a switch type) + * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. + * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. + * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. +@@ -83,7 +83,7 @@ struct rfkill_event { + __u8 type; + __u8 op; + __u8 soft, hard; +-} __packed; ++} __attribute__((packed)); + + /* + * We are planning to be backward and forward compatible with changes +@@ -105,288 +105,5 @@ struct rfkill_event { + #define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) + + /* and that's all userspace gets */ +-#ifdef __KERNEL__ +-/* don't allow anyone to use these in the kernel */ +-enum rfkill_user_states { +- RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, +- RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, +- RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, +-}; +-#undef RFKILL_STATE_SOFT_BLOCKED +-#undef RFKILL_STATE_UNBLOCKED +-#undef RFKILL_STATE_HARD_BLOCKED +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* this is opaque */ +-struct rfkill; +- +-/** +- * struct rfkill_ops - rfkill driver methods +- * +- * @poll: poll the rfkill block state(s) -- only assign this method +- * when you need polling. When called, simply call one of the +- * rfkill_set{,_hw,_sw}_state family of functions. If the hw +- * is getting unblocked you need to take into account the return +- * value of those functions to make sure the software block is +- * properly used. +- * @query: query the rfkill block state(s) and call exactly one of the +- * rfkill_set{,_hw,_sw}_state family of functions. Assign this +- * method if input events can cause hardware state changes to make +- * the rfkill core query your driver before setting a requested +- * block. +- * @set_block: turn the transmitter on (blocked == false) or off +- * (blocked == true) -- ignore and return 0 when hard blocked. +- * This callback must be assigned. +- */ +-struct rfkill_ops { +- void (*poll)(struct rfkill *rfkill, void *data); +- void (*query)(struct rfkill *rfkill, void *data); +- int (*set_block)(void *data, bool blocked); +-}; +- +-#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) +-/** +- * rfkill_alloc - allocate rfkill structure +- * @name: name of the struct -- the string is not copied internally +- * @parent: device that has rf switch on it +- * @type: type of the switch (RFKILL_TYPE_*) +- * @ops: rfkill methods +- * @ops_data: data passed to each method +- * +- * This function should be called by the transmitter driver to allocate an +- * rfkill structure. Returns %NULL on failure. +- */ +-struct rfkill * __must_check rfkill_alloc(const char *name, +- struct device *parent, +- const enum rfkill_type type, +- const struct rfkill_ops *ops, +- void *ops_data); +- +-/** +- * rfkill_register - Register a rfkill structure. +- * @rfkill: rfkill structure to be registered +- * +- * This function should be called by the transmitter driver to register +- * the rfkill structure. Before calling this function the driver needs +- * to be ready to service method calls from rfkill. +- * +- * If rfkill_init_sw_state() is not called before registration, +- * set_block() will be called to initialize the software blocked state +- * to a default value. +- * +- * If the hardware blocked state is not set before registration, +- * it is assumed to be unblocked. +- */ +-int __must_check rfkill_register(struct rfkill *rfkill); +- +-/** +- * rfkill_pause_polling(struct rfkill *rfkill) +- * +- * Pause polling -- say transmitter is off for other reasons. +- * NOTE: not necessary for suspend/resume -- in that case the +- * core stops polling anyway +- */ +-void rfkill_pause_polling(struct rfkill *rfkill); +- +-/** +- * rfkill_resume_polling(struct rfkill *rfkill) +- * +- * Pause polling -- say transmitter is off for other reasons. +- * NOTE: not necessary for suspend/resume -- in that case the +- * core stops polling anyway +- */ +-void rfkill_resume_polling(struct rfkill *rfkill); +- +- +-/** +- * rfkill_unregister - Unregister a rfkill structure. +- * @rfkill: rfkill structure to be unregistered +- * +- * This function should be called by the network driver during device +- * teardown to destroy rfkill structure. Until it returns, the driver +- * needs to be able to service method calls. +- */ +-void rfkill_unregister(struct rfkill *rfkill); +- +-/** +- * rfkill_destroy - free rfkill structure +- * @rfkill: rfkill structure to be destroyed +- * +- * Destroys the rfkill structure. +- */ +-void rfkill_destroy(struct rfkill *rfkill); +- +-/** +- * rfkill_set_hw_state - Set the internal rfkill hardware block state +- * @rfkill: pointer to the rfkill class to modify. +- * @state: the current hardware block state to set +- * +- * rfkill drivers that get events when the hard-blocked state changes +- * use this function to notify the rfkill core (and through that also +- * userspace) of the current state. They should also use this after +- * resume if the state could have changed. +- * +- * You need not (but may) call this function if poll_state is assigned. +- * +- * This function can be called in any context, even from within rfkill +- * callbacks. +- * +- * The function returns the combined block state (true if transmitter +- * should be blocked) so that drivers need not keep track of the soft +- * block state -- which they might not be able to. +- */ +-bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); +- +-/** +- * rfkill_set_sw_state - Set the internal rfkill software block state +- * @rfkill: pointer to the rfkill class to modify. +- * @state: the current software block state to set +- * +- * rfkill drivers that get events when the soft-blocked state changes +- * (yes, some platforms directly act on input but allow changing again) +- * use this function to notify the rfkill core (and through that also +- * userspace) of the current state. +- * +- * Drivers should also call this function after resume if the state has +- * been changed by the user. This only makes sense for "persistent" +- * devices (see rfkill_init_sw_state()). +- * +- * This function can be called in any context, even from within rfkill +- * callbacks. +- * +- * The function returns the combined block state (true if transmitter +- * should be blocked). +- */ +-bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); +- +-/** +- * rfkill_init_sw_state - Initialize persistent software block state +- * @rfkill: pointer to the rfkill class to modify. +- * @state: the current software block state to set +- * +- * rfkill drivers that preserve their software block state over power off +- * use this function to notify the rfkill core (and through that also +- * userspace) of their initial state. It should only be used before +- * registration. +- * +- * In addition, it marks the device as "persistent", an attribute which +- * can be read by userspace. Persistent devices are expected to preserve +- * their own state when suspended. +- */ +-void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked); +- +-/** +- * rfkill_set_states - Set the internal rfkill block states +- * @rfkill: pointer to the rfkill class to modify. +- * @sw: the current software block state to set +- * @hw: the current hardware block state to set +- * +- * This function can be called in any context, even from within rfkill +- * callbacks. +- */ +-void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); +- +-/** +- * rfkill_blocked - query rfkill block +- * +- * @rfkill: rfkill struct to query +- */ +-bool rfkill_blocked(struct rfkill *rfkill); +-#else /* !RFKILL */ +-static inline struct rfkill * __must_check +-rfkill_alloc(const char *name, +- struct device *parent, +- const enum rfkill_type type, +- const struct rfkill_ops *ops, +- void *ops_data) +-{ +- return ERR_PTR(-ENODEV); +-} +- +-static inline int __must_check rfkill_register(struct rfkill *rfkill) +-{ +- if (rfkill == ERR_PTR(-ENODEV)) +- return 0; +- return -EINVAL; +-} +- +-static inline void rfkill_pause_polling(struct rfkill *rfkill) +-{ +-} +- +-static inline void rfkill_resume_polling(struct rfkill *rfkill) +-{ +-} +- +-static inline void rfkill_unregister(struct rfkill *rfkill) +-{ +-} +- +-static inline void rfkill_destroy(struct rfkill *rfkill) +-{ +-} +- +-static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) +-{ +- return blocked; +-} +- +-static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) +-{ +- return blocked; +-} +- +-static inline void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked) +-{ +-} +- +-static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) +-{ +-} +- +-static inline bool rfkill_blocked(struct rfkill *rfkill) +-{ +- return false; +-} +-#endif /* RFKILL || RFKILL_MODULE */ +- +- +-#ifdef CONFIG_RFKILL_LEDS +-/** +- * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. +- * This function might return a NULL pointer if registering of the +- * LED trigger failed. Use this as "default_trigger" for the LED. +- */ +-const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); +- +-/** +- * rfkill_set_led_trigger_name -- set the LED trigger name +- * @rfkill: rfkill struct +- * @name: LED trigger name +- * +- * This function sets the LED trigger name of the radio LED +- * trigger that rfkill creates. It is optional, but if called +- * must be called before rfkill_register() to be effective. +- */ +-void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); +-#else +-static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) +-{ +- return NULL; +-} +- +-static inline void +-rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) +-{ +-} +-#endif +- +-#endif /* __KERNEL__ */ + +-#endif /* RFKILL_H */ ++#endif /* _UAPI__RFKILL_H */ +-- +cgit v1.2.1 +