summaryrefslogtreecommitdiffstats
path: root/src/connections
diff options
context:
space:
mode:
authorJim Pryor <profjim@jimpryor.net>2009-08-11 14:05:10 +0200
committerJames Rayner <james@archlinux.org>2009-08-15 04:28:29 +0200
commit9578dda45b86acf3bd25def5de8f1d51f2ec22b2 (patch)
tree214394f032dc086c0c63befc8e22fffc80d16403 /src/connections
parentc37f2081157b15be719ce8afb0e8e15afbf24253 (diff)
downloadnetctl-9578dda45b86acf3bd25def5de8f1d51f2ec22b2.tar.gz
netctl-9578dda45b86acf3bd25def5de8f1d51f2ec22b2.tar.xz
Add AP argument to profile, also let ESSID arguments be regexps
* AP= arguments in profiles take precedence over ESSID= arguments * ESSID= arguments regexps instead of literals. To avoid screwing up any currently working profiles, I restricted the interpretation as a regexp to just the new wireless-dbus connection types. * But a global change involved in implementing this is that the connection up/down calls will be passed a literal ESSID (which of the local networks matches the regexp) as an additional argument. Signed-off-by: Jim Pryor <profjim@jimpryor.net>
Diffstat (limited to 'src/connections')
-rw-r--r--src/connections/wireless48
1 files changed, 39 insertions, 9 deletions
diff --git a/src/connections/wireless b/src/connections/wireless
index 644b002..430f0ab 100644
--- a/src/connections/wireless
+++ b/src/connections/wireless
@@ -17,6 +17,8 @@ rfkill_from_name() {
wireless_up() {
load_profile $1
+ [[ -n "$2" ]] && ESSID="$2" # JP: use the literal ESSID (though currently we only interpret wireless-dbus ESSIDs as regexps)
+
. ${SUBR_DIR}/8021x
. ${SUBR_DIR}/wireless
@@ -51,14 +53,28 @@ wireless_up() {
report_debug wireless_up ifup
set_interface up $INTERFACE || return 1
-
- quirk "prescan" && iwlist $INTERFACE scan &> /dev/null # bcm43xx
- quirk "preessid" && eval "iwconfig $INTERFACE mode managed essid \"$ESSID\"" # ipw3945
+ ## wireless_control "$INTERFACE" up || return 1
+
+ quirk prescan && iwlist "$INTERFACE" scan &> /dev/null # bcm43xx
+ if quirk preessid; then # ipw3945
+ if [[ -n "$AP" ]]; then # JP: enable use of AP
+ iwconfig "$INTERFACE" mode managed ap "$AP"
+ else
+ eval "iwconfig \"$INTERFACE\" mode managed essid \"$ESSID\""
+ fi
+ fi
if checkyesno ${SCAN:-no}; then
report_debug wireless_up scanning
- if ! find_essid $INTERFACE "$ESSID"; then
- report_fail "Network not present."
+ local OLDESSID="$ESSID"
+ if [[ -n "$AP" ]]; then
+ ESSID=$(find_ap "$INTERFACE" "$AP")
+ else
+ ESSID=$(find_essid "$INTERFACE" "$ESSID" "$CONNECTION") # JP: we could have left $3 null for default of treating ESSID as literal
+ # but instead we explicitly pass $CONNECTION
+ fi
+ if [[ $? -gt 0 ]]; then
+ report_fail "Network \"$OLDESSID\" not present."
return 1
fi
fi
@@ -77,9 +93,17 @@ wireless_up() {
# 'none' uses iwconfig like wep. Use sane default if WEP_OPTS=""
if [[ -z "$WEP_OPTS" ]]; then
if [[ "$SECURITY" = "wep" ]]; then
- WEP_OPTS="essid \"$ESSID\" key $KEY"
+ if [[ -n "$AP" ]]; then
+ WEP_OPTS="ap \"$AP\" key $KEY"
+ else
+ WEP_OPTS="essid \"$ESSID\" key $KEY"
+ fi
elif [[ "$SECURITY" = "none" ]]; then
- WEP_OPTS="essid \"$ESSID\""
+ if [[ -n "$AP" ]]; then
+ WEP_OPTS="ap \"$AP\""
+ else
+ WEP_OPTS="essid \"$ESSID\""
+ fi
fi
fi
@@ -102,7 +126,13 @@ wireless_up() {
wpa)
# Quirk for broken drivers... http://bbs.archlinux.org/viewtopic.php?id=36384
- quirk "wpaessid" && eval iwconfig $INTERFACE essid "\"$ESSID\""
+ if quirk "wpaessid"; then
+ if [[ -n "$AP" ]]; then
+ iwconfig "$INTERFACE" ap "$AP"
+ else
+ eval "iwconfig \"$INTERFACE\" essid \"$ESSID\""
+ fi
+ fi
local WPA_CONF="${TMPDIR:-/tmp}/wpa.${1// /}" # substitute spaces out
# make empty tmp dir with correct permissions, rename it
@@ -196,6 +226,6 @@ wireless_status() {
}
-wireless_$1 $2
+wireless_$1 "$2" "$3"
exit $?
# vim: set ts=4 et sw=4: