302 lines
8.7 KiB
Bash
Executable File
302 lines
8.7 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# etc/pcmcia/wlan-ng
|
|
#
|
|
# Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
|
|
# --------------------------------------------------------------------
|
|
#
|
|
# linux-wlan
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# Alternatively, the contents of this file may be used under the
|
|
# terms of the GNU Public License version 2 (the "GPL"), in which
|
|
# case the provisions of the GPL are applicable instead of the
|
|
# above. If you wish to allow the use of your version of this file
|
|
# only under the terms of the GPL and not to allow others to use
|
|
# your version of this file under the MPL, indicate your decision
|
|
# by deleting the provisions above and replace them with the notice
|
|
# and other provisions required by the GPL. If you do not delete
|
|
# the provisions above, a recipient may use your version of this
|
|
# file under either the MPL or the GPL.
|
|
#
|
|
# --------------------------------------------------------------------
|
|
#
|
|
# Inquiries regarding the linux-wlan Open Source project can be
|
|
# made directly to:
|
|
#
|
|
# AbsoluteValue Systems Inc.
|
|
# info@linux-wlan.com
|
|
# http://www.linux-wlan.com
|
|
#
|
|
# --------------------------------------------------------------------
|
|
#
|
|
# Portions of the development of this software were funded by
|
|
# Intersil Corporation as part of PRISM(R) chipset product development.
|
|
#
|
|
# --------------------------------------------------------------------
|
|
|
|
. ./shared
|
|
|
|
. /etc/wlan/shared
|
|
|
|
# set -x
|
|
|
|
# Get device attributes
|
|
get_info $DEVICE
|
|
HWADDR=`/sbin/ifconfig $DEVICE | sed -n -e 's/.*addr \(.*\)/\1/p'`
|
|
|
|
# Load site-specific settings
|
|
ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR"
|
|
. $0.opts
|
|
|
|
WLANCTL=/sbin/wlanctl-ng
|
|
|
|
case "$ACTION" in
|
|
|
|
'start'|'resume')
|
|
#=======ENABLE========================================
|
|
# Do we want to init the card at all?
|
|
if ! is_true $WLAN_ENABLE ; then
|
|
exit 0
|
|
fi
|
|
|
|
#=======DOWNLOAD======================================
|
|
# If the card needs code/data downloaded, do it.
|
|
if is_true $WLAN_DOWNLOAD; then
|
|
if ! $WLAN_DOWNLOADER -r $WLAN_DLIMAGE $DEVICE ; then
|
|
echo Code/Data Download Failed.
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
#=======USER MIB SETTINGS=============================
|
|
# Set the user specified MIB items.
|
|
for i in $USER_MIBS ; do
|
|
result=`$WLANCTL $DEVICE dot11req_mibset "mibattribute=$i"`
|
|
if [ $? = 0 ] ; then
|
|
eval $result
|
|
if [ $resultcode != "success" ] ; then
|
|
echo "Failed to set user MIB $i."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Failed to set user MIB $i."
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
#=======WEP===========================================
|
|
# Setup privacy
|
|
result=`$WLANCTL $DEVICE dot11req_mibget mibattribute=dot11PrivacyOptionImplemented`
|
|
if [ $? = 0 ] ; then
|
|
eval $result
|
|
eval $mibattribute
|
|
else
|
|
echo "mibget failed."
|
|
exit 1
|
|
fi
|
|
|
|
if [ $dot11PrivacyOptionImplemented = "false" -a \
|
|
$dot11PrivacyInvoked = "true" ] ; then
|
|
echo "Cannot enable privacy, dot11PrivacyOptionImplemented=false."
|
|
exit 1
|
|
fi
|
|
|
|
if [ $dot11PrivacyOptionImplemented = "true" -a \
|
|
$dot11PrivacyInvoked = "true" ] ; then
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKeyID=$dot11WEPDefaultKeyID
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11ExcludeUnencrypted=$dot11ExcludeUnencrypted
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11PrivacyInvoked=$dot11PrivacyInvoked
|
|
if [ "a$PRIV_GENSTRa" != "aa" ] ; then
|
|
keys=`$PRIV_GENERATOR $PRIV_GENSTR`
|
|
knum=0
|
|
for i in $keys ; do
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKey$knum=$i
|
|
knum=$[$knum + 1]
|
|
done
|
|
else
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKey0=$dot11WEPDefaultKey0
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKey1=$dot11WEPDefaultKey1
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKey2=$dot11WEPDefaultKey2
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
mibattribute=dot11WEPDefaultKey3=$dot11WEPDefaultKey3
|
|
fi
|
|
fi
|
|
|
|
#=======MAC STARTUP=========================================
|
|
if is_true $IS_AP ; then
|
|
#=======AP STARTUP==================================
|
|
startcmd="$WLANCTL $DEVICE dot11req_start "
|
|
startcmd="$startcmd ssid=$APSSID"
|
|
startcmd="$startcmd bsstype=infrastructure"
|
|
startcmd="$startcmd beaconperiod=$APBCNINT"
|
|
startcmd="$startcmd dtimperiod=$APDTIMINT"
|
|
startcmd="$startcmd cfpollable=$APCFPOLLABLE"
|
|
startcmd="$startcmd cfpollreq=$APCFPOLLREQ"
|
|
startcmd="$startcmd cfpperiod=$APCFPPERIOD"
|
|
startcmd="$startcmd cfpmaxduration=$APCFPMAXDURATION"
|
|
startcmd="$startcmd probedelay=$APPROBEDELAY"
|
|
startcmd="$startcmd dschannel=$APCHANNEL"
|
|
j=1
|
|
for i in $APBASICRATES ; do
|
|
startcmd="$startcmd basicrate$j=$i"
|
|
j=$[j + 1]
|
|
done
|
|
j=1
|
|
for i in $APOPRATES ; do
|
|
startcmd="$startcmd operationalrate$j=$i"
|
|
j=$[j + 1]
|
|
done
|
|
|
|
results=`$startcmd` # Here's where it runs
|
|
if [ $? = 0 ]; then
|
|
eval $results
|
|
if [ $resultcode != "success" ] ; then
|
|
echo "AP not started, resultcode=$resultcode"
|
|
exit 1
|
|
else
|
|
echo "WLAN AP mode started"
|
|
fi
|
|
else
|
|
echo FAILED: $startcmd
|
|
exit 1
|
|
fi
|
|
WLAN_SCHEMESSID="$APSSID"
|
|
else
|
|
#=======STA STARTUP==================================
|
|
$WLANCTL $DEVICE dot11req_mibset \
|
|
"mibattribute=dot11DesiredSSID=$dot11DesiredSSID"
|
|
|
|
$WLANCTL $DEVICE dot11req_associate "listeninterval=0"
|
|
WLAN_SCHEMESSID="$dot11DesiredSSID"
|
|
|
|
# ==========PCMCIA NETDEVICE=============================
|
|
# Append the SSID to the pcmcia scheme name
|
|
wlan_set_ssid_schemefile "$WLAN_SCHEMESSID"
|
|
|
|
# Call the normal network initialization
|
|
./network $1 $2
|
|
if [ ! $? ] ; then
|
|
echo "/etc/pcmcia/network initialization failed."
|
|
wlan_restore_schemefile
|
|
exit 1
|
|
fi
|
|
|
|
# Restore scheme file to it's prior contents
|
|
wlan_restore_schemefile
|
|
fi
|
|
|
|
# ==========AP Interface====================================
|
|
# For AP, interface initialization depends on whether we're
|
|
# routing or bridging. If routing, bring up the interface
|
|
# using the standard pcmcia-cs network script (like a STA).
|
|
# Note that routing APs will require that STAs have their
|
|
# gateway address set to the AP's address.
|
|
# If bridging, do NOT put the wlan MAC in promisc
|
|
# mode. The code here will set up the bridge device and
|
|
# set it up. NOTE: Physically ejecting either card while the bridge
|
|
# is active commonly leaves a system unstable (or locked). Use
|
|
# 'cardctl eject' on the wlan device prior to removal.
|
|
|
|
if is_true $IS_AP ; then if is_true $IS_BRIDGE; then
|
|
if is_true $IS_OLDBRIDGE; then
|
|
ifconfig $APWIREDDEVICE promisc
|
|
ifconfig $DEVICE up
|
|
brcfg start
|
|
else
|
|
ifconfig $APWIREDDEVICE down
|
|
ifconfig $DEVICE down
|
|
brctl addbr $APBRIDGEDEVICE
|
|
brctl addif $APBRIDGEDEVICE $APWIREDDEVICE
|
|
brctl addif $APBRIDGEDEVICE $DEVICE
|
|
ifconfig $APWIREDDEVICE up 0.0.0.0
|
|
ifconfig $DEVICE up 0.0.0.0
|
|
ifconfig $APBRIDGEDEVICE up $AP_IPADDR
|
|
fi
|
|
else
|
|
# Just set up the AP interface like any other net
|
|
# device.
|
|
|
|
# ==========PCMCIA NETDEVICE=============================
|
|
# Append the SSID to the pcmcia scheme name
|
|
wlan_set_ssid_schemefile "$WLAN_SCHEMESSID"
|
|
|
|
# Call the normal network initialization
|
|
./network $1 $2
|
|
if [ ! $? ] ; then
|
|
echo "/etc/pcmcia/network initialization failed."
|
|
wlan_restore_schemefile
|
|
exit 1
|
|
fi
|
|
|
|
# Restore scheme file to it's prior contents
|
|
wlan_restore_schemefile
|
|
fi;fi
|
|
;;
|
|
|
|
'stop'|'suspend')
|
|
# ==========AP BRIDGE====================================
|
|
if is_true $IS_AP ; then
|
|
if is_true $IS_OLDBRIDGE; then
|
|
brcfg stop
|
|
ifconfig $APWIREDDEVICE down
|
|
ifconfig $DEVICE down
|
|
else
|
|
ifconfig $APBRIDGEDEVICE down
|
|
ifconfig $DEVICE down
|
|
ifconfig $APWIREDDEVICE down
|
|
brctl delif $APBRIDGEDEVICE $APWIREDDEVICE
|
|
brctl delif $APBRIDGEDEVICE $DEVICE
|
|
brctl delbr $APBRIDGEDEVICE
|
|
fi
|
|
fi
|
|
;;
|
|
|
|
'check'|'cksum'|'restart')
|
|
# ==========STA ====================================
|
|
# Station just passes through for normal network device
|
|
# behavior. AP does nothing.
|
|
if ! is_true $IS_AP ; then
|
|
WLAN_SCHEMESSID="$dot11DesiredSSID"
|
|
|
|
# ==========PCMCIA NETDEVICE=============================
|
|
# Append the SSID to the pcmcia scheme name
|
|
wlan_set_ssid_schemefile "$WLAN_SCHEMESSID"
|
|
|
|
# Call the normal network initialization
|
|
./network $1 $2
|
|
if [ ! $? ] ; then
|
|
echo "/etc/pcmcia/network initialization failed."
|
|
wlan_restore_schemefile
|
|
exit 1
|
|
fi
|
|
|
|
# Restore scheme file to it's prior contents
|
|
wlan_restore_schemefile
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
usage
|
|
;;
|
|
|
|
esac
|
|
|
|
exit 0
|