[arch-projects] [netctl][PATCH] Move away from using wpa_actiond
The same functionality is provided by wpa_supplicant, so we do not need an extra and Arch Linux specific dependency. --- README | 4 ++-- contrib/PKGBUILD.in | 1 - src/lib/auto.action | 31 ++++++++++++++----------------- src/netctl-auto | 30 +++++++++++++----------------- 4 files changed, 29 insertions(+), 37 deletions(-) diff --git a/README b/README index 95df087..f3ca634 100644 --- a/README +++ b/README @@ -9,8 +9,8 @@ Optional: - dhcpcd or dhclient: for DHCP support - wpa_supplicant: for WPA support - dialog: for the interactive assistant -- ifplugd: for automatic connection -- wpa_actiond: for automatic connection +- ifplugd: for automatic wired connections +- ppp: for PPP support For documentation generation: - asciidoc diff --git a/contrib/PKGBUILD.in b/contrib/PKGBUILD.in index b5ce44c..f3359c6 100644 --- a/contrib/PKGBUILD.in +++ b/contrib/PKGBUILD.in @@ -15,7 +15,6 @@ optdepends=('dialog: for the menu based wifi assistant' 'dhcpcd: for DHCP support (or dhclient)' 'wpa_supplicant: for wireless networking support' 'ifplugd: for automatic wired connections through netctl-ifplugd' - 'wpa_actiond: for automatic wireless connections through netctl-auto' 'ppp: for PPP connections' 'openvswitch: for Open vSwitch connections' ) diff --git a/src/lib/auto.action b/src/lib/auto.action index f81d4e3..999f66f 100755 --- a/src/lib/auto.action +++ b/src/lib/auto.action @@ -5,16 +5,17 @@ . "$SUBR_DIR/ip" export INTERFACE="$1" -export SSID="$2" -export ACTION="$4" +export ACTION="$2" +PROFILE_STATE="$STATE_DIR/netctl-auto-$INTERFACE.profile" -load_profile "$3" load_interface_config "$INTERFACE" case $ACTION in - CONNECT) + CONNECTED) + load_profile "$WPA_ID_STR" DhcpcdOptions+=" -K -L" ip_set || exit 1 + echo "$Profile" > "$PROFILE_STATE" # Sandbox the eval if ! ( do_debug eval "$ExecUpPost" ); then # Failing ExecUpPost will take the connection down @@ -22,20 +23,16 @@ case $ACTION in exit 1 fi ;; - DISCONNECT) - # Sandbox the eval - if ! ( do_debug eval "$ExecDownPre" ); then - exit 1 + DISCONNECTED) + if [[ -s "$PROFILE_STATE" ]]; then + load_profile "$(< "$PROFILE_STATE")" + rm -f "$PROFILE_STATE" + # Sandbox the eval + if ! ( do_debug eval "$ExecDownPre" ); then + exit 1 + fi + ip_unset fi - ip_unset - ;; - LOST|REESTABLISHED) - # Not handled. - exit 0 - ;; - *) - # ??? - exit 1 ;; esac diff --git a/src/netctl-auto b/src/netctl-auto index 18d2e10..7e4062e 100755 --- a/src/netctl-auto +++ b/src/netctl-auto @@ -6,7 +6,6 @@ . "$SUBR_DIR/rfkill" . "$SUBR_DIR/wpa" -: ${ACTIOND:=wpa_actiond -p /run/wpa_supplicant} : ${ACTION_SCRIPT:=$SUBR_DIR/auto.action} @@ -193,11 +192,10 @@ list() { done } -## Start and generate config file for the WPA supplicant, start wpa_actiond +## Start and generate config file for the WPA supplicant, monitor for changes # $1: interface start() { local interface="$1" - local pidfile="$STATE_DIR/wpa_actiond-$interface.pid" if interface_is_up "$interface"; then exit_error "The interface '$interface' is already up" @@ -206,12 +204,11 @@ start() { rf_enable "$interface" "$RFKill" || return 1 fi - local wpa_conf - if ! wpa_conf=$(wpa_make_config_file "$interface"); then + if ! WPAConfigFile=$(wpa_make_config_file "$interface"); then exit_error "Could not create the configuration file for interface '$interface'" fi - # Disable p2p to prevent wpa_supplicant from creating another control interface. - echo "p2p_disabled=1" >> "$wpa_conf" + # Disable p2p to prevent wpa_supplicant from creating another control interface + echo "p2p_disabled=1" >> "$WPAConfigFile" local profile list_profiles | while IFS= read -r profile; do @@ -222,16 +219,16 @@ start() { is_yes "${ExcludeAuto:-no}" && exit # Set default and exclude wpa-config as it does not fit this scheme [[ ${Security:=none} != "wpa-config" ]] || exit - printf '%s\n' "network={" "$(wpa_make_config_block)" "id_str=\"$profile\"" "}" >> "$wpa_conf" + printf '%s\n' "network={" "$(wpa_make_config_block)" "id_str=\"$profile\"" "}" >> "$WPAConfigFile" report_notice "Included profile '$profile'" ) done - # Start the WPA supplicant and wpa_actiond + # Start the WPA supplicant and wpa_cli : ${WPADriver:=nl80211,wext} WPAOptions+=" -W" - if wpa_start "$interface" "$WPADriver" "$wpa_conf"; then - if $ACTIOND -i "$interface" -P "$pidfile" -a "$ACTION_SCRIPT"; then + if wpa_start "$interface" "$WPADriver" "$WPAConfigFile"; then + if wpa_call "$interface" -B -a "$ACTION_SCRIPT"; then return 0 fi wpa_stop "$interface" @@ -241,17 +238,16 @@ start() { return 1 } -## Stop the WPA supplicant and wpa_actiond +## Stop the WPA supplicant, which automatically stops wpa_cli # $1: interface stop() { local interface="$1" - local pidfile="$STATE_DIR/wpa_actiond-$interface.pid" - [[ -e "$pidfile" ]] && kill "$(< "$pidfile")" - timeout_wait 1 '! wpa_is_active "$interface"' || wpa_stop "$interface" + wpa_stop "$interface" bring_interface_down "$interface" - [[ $RFKill ]] && rf_disable "$interface" "$RFKill" - return 0 + if [[ $RFKill ]]; then + rf_disable "$interface" "$RFKill" + fi } ## Remove WPA supplicant configuration files -- 2.20.1
On Thu, 7 Feb 2019 at 14:50, Jouke Witteveen via arch-projects <arch-projects@archlinux.org> wrote:
The same functionality is provided by wpa_supplicant, so we do not need an extra and Arch Linux specific dependency.
The introduction of wpa_actiond [1] hints there are issues with wpa_cli. Namely: - partial or missing logging capabilities - race conditions Sadly I don't know much more about this. It'll be great if can use wpa_cli, while not introducing new issues. -Emil [1] https://git.archlinux.org/wpa_actiond.git/commit/?id=c5c587771403d31ab4538e1...
On Fri, Feb 8, 2019 at 3:36 PM Emil Velikov <emil.l.velikov@gmail.com> wrote:
On Thu, 7 Feb 2019 at 14:50, Jouke Witteveen via arch-projects <arch-projects@archlinux.org> wrote:
The same functionality is provided by wpa_supplicant, so we do not need an extra and Arch Linux specific dependency.
The introduction of wpa_actiond [1] hints there are issues with wpa_cli. Namely: - partial or missing logging capabilities - race conditions
Sadly I don't know much more about this. It'll be great if can use wpa_cli, while not introducing new issues.
-Emil
[1] https://git.archlinux.org/wpa_actiond.git/commit/?id=c5c587771403d31ab4538e1...
Thanks! This detective work is highly appreciated! For some reason I had assumed wpa_cli would have gained this functionality only after wpa_actiond came into existence. This couldn't really explain why both use the same parameter names though... I wonder if the issues with wpa_cli have been taken upstream. In my experience, the maintainer of wpa_supplicant is very pleasant to work with. autowifi and, later, wpa_actiond are important parts of the history of netctl, but I tend to give over 10 years of development in wpa_supplicant the benefit of the doubt. This means I would like to try to move away from wpa_actiond anyway. Currently, except from those using wpa_actiond directly, I think netctl is the only user of wpa_actiond. @Thomas: do you have an oppinion in these matters? Thanks, - Jouke
participants (2)
-
Emil Velikov
-
Jouke Witteveen