From 9c5c435f6240c0293ad01c34e1e4c4b224fffea2 Mon Sep 17 00:00:00 2001 From: Jouke Witteveen Date: Tue, 6 Jan 2015 18:21:54 +0100 Subject: Unify wired and wireless automatic profile selection (FS#35252) The previous wired automatic profile selection procedure was not properly documented. Now both wired and wireless automatic profile selection use ExcludeAuto= and Priority= --- src/ifplugd.action | 46 ++++++++++++++++++---------------------------- src/netctl-auto | 11 ++++------- 2 files changed, 22 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/ifplugd.action b/src/ifplugd.action index c87ac0c..42d1c5a 100755 --- a/src/ifplugd.action +++ b/src/ifplugd.action @@ -1,4 +1,4 @@ -#!/bin/bash +#! /bin/bash # # ifplugd.action script for netctl @@ -8,39 +8,29 @@ PROFILE_FILE="$STATE_DIR/ifplugd_$1.profile" case "$2" in up) - # Look for a dhcp based profile to try first - # dhcp can actually outright fail, whereas - # it's difficult to tell if static succeeded - # Also check profile is same iface and is right connection - echo "up" - declare -a preferred_profiles - declare -a dhcp_profiles - declare -a static_profiles while read -r profile; do - ( - echo "Reading profile '$profile'" - source "$PROFILE_DIR/$profile" - [[ "$Interface" == "$1" && "$Connection" == "ethernet" ]] || continue - is_yes "${AutoWired:-no}" && exit 1 # user preferred AUTO profile - [[ "$IP" == "dhcp" ]] && exit 2 # dhcp profile - exit 3 # static profile - ) - case $? in - 1) preferred_profiles+=("$profile");; - 2) dhcp_profiles+=("$profile");; - 3) static_profiles+=("$profile");; - esac - done < <(list_profiles) - if [[ ${#preferred_profiles[@]} > 1 ]]; then - echo "AutoWired flag for '$1' set in more than one profile (${preferred_profiles[*]})" - fi - for profile in "${preferred_profiles[@]}" "${dhcp_profiles[@]}" "${static_profiles[@]}"; do if ForceConnect=yes "$SUBR_DIR/network" start "$profile"; then mkdir -p "$(dirname "$PROFILE_FILE")" printf "%s" "$profile" > "$PROFILE_FILE" exit 0 fi - done + done < <(list_profiles | while read -r profile; do + report_debug "Examining profile '$profile'" + ( + source "$PROFILE_DIR/$profile" > /dev/null + [[ $Interface == "$1" && $Connection == "ethernet" ]] || exit + # Prioritize dhcp based profiles as they can outright fail, whereas + # it is difficult to tell if a profile with a static address fails + if [[ $IP == "dhcp" || $IP6 == dhcp* ]]; then + : ${ExcludeAuto:=no} + : ${Priority:=1} + fi + is_yes "${ExcludeAuto:-yes}" && exit + printf "%i\t%s\n" "${Priority:-0}" "$profile" + report_debug "Included profile '$profile'" + ) + done | sort -nrs -k 1,1 | cut -f 2-) + report_error "Could not start any suitable profile" ;; down) if [[ -e "$PROFILE_FILE" ]]; then diff --git a/src/netctl-auto b/src/netctl-auto index d9fac3a..b84c0de 100755 --- a/src/netctl-auto +++ b/src/netctl-auto @@ -192,13 +192,10 @@ start() { report_debug "Examining profile '$profile'" ( source "$PROFILE_DIR/$profile" - [[ $Interface == "$interface" ]] || continue - is_yes "${ExcludeAuto:-no}" && exit 1 - [[ $Connection != "wireless" ]] && exit 1 - : ${Security:=none} - # Exclude wpa-config, the wpa_conf is 'complete' and doesn't fit in this scheme - [[ $Security == "wpa-config" ]] && exit 1 - + [[ $Interface == "$interface" && $Connection == "wireless" ]] || exit + 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" report_notice "Included profile '$profile'" ) -- cgit v1.2.3-24-g4f1b