Fix the wlan-ng if-pre-up script to only act on devices which we know are managed...
authorChris Larson <clarson@kergoth.com>
Sun, 14 Nov 2004 18:35:59 +0000 (18:35 +0000)
committerChris Larson <clarson@kergoth.com>
Sun, 14 Nov 2004 18:35:59 +0000 (18:35 +0000)
BKrev: 4197a58fiytlALC1VH2o-d_mUeLwNw

wlan-ng/files/pre-up
wlan-ng/wlan-ng-modules_0.2.1pre22.oe

index e69de29..002ab37 100644 (file)
@@ -0,0 +1,226 @@
+#!/bin/sh
+#
+# This script takes care of bringing up wlan-ng device.
+# It is run by ifup, and gets information from the 
+# /etc/network/interfaces file. It is derived from the
+# init.d/wlan script in the wlan-ng distribution 
+
+WLANCTL=/sbin/wlanctl-ng
+PRIV_GENERATOR=/sbin/nwepgen
+
+if [ ! -x $WLANCTL ] ; then 
+       exit 0
+fi
+
+# Detect and act only on linux-wlan-ng interfaces
+if [ -x /sbin/wlancfg ]; then
+  if ! /sbin/wlancfg show $IFACE >/dev/null 2>&1; then
+    exit 0
+  fi
+fi
+
+# Create a lock file; remove on script exit. This is a fairly crummy lock,
+# but all it needs to do is prevent hotplug from calling this script,
+# which may happen when the module is loaded below. Since it should only
+# happen when the module is loaded, I don't need a proper lock.
+if [ -e /var/lock/wlan-$IFACE.lock ]; then
+       exit 0
+fi
+touch /var/lock/wlan-$IFACE.lock
+cleanup () {
+       rm -f /var/lock/wlan-$IFACE.lock
+}
+trap cleanup 0
+
+if [ -z "$IF_WIRELESS_MODE" ]; then
+       IF_WIRELESS_MODE="ad_hoc"
+fi
+
+if [ -z "$IF_WLAN_NG_HOSTWEP" ]; then
+       IF_WLAN_NG_HOSTWEP=false
+fi
+
+if [ -z "$IF_WLAN_NG_DEFAULT_KEY_ID" ]; then
+       IF_WLAN_NG_DEFAULT_KEY_ID=0
+fi
+
+if [ -z "$IF_WLAN_NG_EXCLUDE_UNENCRYPTED" ]; then
+       IF_WLAN_NG_EXCLUDE_UNENCRYPTED=true
+fi
+
+if [ -z "$IF_WLAN_NG_PRIV_KEY128" ]; then
+       IF_WLAN_NG_PRIV_KEY128=false
+fi
+
+if [ -z "$IF_WLAN_NG_BCINT" ]; then
+       IF_WLAN_NG_BCINT=100
+fi
+
+if [ -z "$IF_WLAN_NG_BASICRATES" ]; then
+       IF_WLAN_NG_BASICRATES="2 4"
+fi
+
+if [ -z "$IF_WLAN_NG_OPRATES" ]; then
+       IF_WLAN_NG_OPRATES="2 4 11 22"
+fi
+
+if [ -z "$IF_WLAN_NG_AUTHTYPE" ]; then
+       IF_WLAN_NG_AUTHTYPE="opensystem"
+fi
+
+if [ -z "$IF_WIRELESS_CHANNEL" ]; then
+       IF_WIRELESS_CHANNEL=1
+fi
+
+if ! modprobe p80211; then
+       echo "Failed to load p80211.o." >&2
+       exit 1
+fi
+
+# NOTE: We don't explicitly insmod the card driver here.  The
+#  best thing to do is to specify an alias in /etc/modules.conf.
+#  Then, the first time we call wlanctl with the named device,
+#  the kernel module autoload stuff will take over.
+#  But, if you prefer, you could modprobe it here.
+
+
+# Bring the card up into an operable state.
+result=`$WLANCTL $IFACE lnxreq_ifstate ifstate=enable`
+if [ $? = 0 ] ; then
+       eval $result
+       if [ $resultcode != "success" ]; then
+               echo "Failed to enable the device, resultcode=" $resultcode "." >&2
+               exit 1
+       fi
+else
+       echo "Failed to enable the device, exitcode=" $? "." >&2
+       exit 1
+fi
+
+# Set user-specified MIB items.
+for i in $IF_WLAN_NG_USER_MIBS; do
+       result=`$WLANCTL $IFACE dot11req_mibset "mibattribute=$i"`
+
+       if [ $? = 0 ] ; then
+               eval $result
+               if [ $resultcode != "success" ] ; then
+                       echo "Failed to set user MIB $i." >&2
+                       exit 1
+               fi
+       else
+               echo "Failed to set user MIB $i." >&2
+               exit 1
+       fi
+done
+
+if [ "$IF_WIRELESS_ENC" = "on" ]; then
+       # Set up WEP.
+       result=`$WLANCTL $IFACE dot11req_mibget mibattribute=dot11PrivacyOptionImplemented`
+       if [ $? = 0 ] ; then
+               eval $result
+               eval $mibattribute
+       else
+               echo "mibget failed." >&2
+               exit 1
+       fi
+       
+       if [ "$dot11PrivacyOptionImplemented" != "true" ]; then
+               echo "Cannot enable privacy, dot11PrivacyOptionImplemented=$dot11PrivacyOptionImplemented." >&2
+               exit 1
+       fi
+
+       $WLANCTL $IFACE lnxreq_hostwep decrypt=$IF_WLAN_NG_HOSTWEP encrypt=$IF_WLAN_NG_HOSTWEP >/dev/null
+       
+       $WLANCTL $IFACE dot11req_mibset \
+               mibattribute=dot11WEPDefaultKeyID=$IF_WLAN_NG_DEFAULT_KEY_ID \
+             >/dev/null
+       
+       $WLANCTL $IFACE dot11req_mibset \
+               mibattribute=dot11ExcludeUnencrypted=$IF_WLAN_NG_EXCLUDE_UNENCRYPTED \
+            >/dev/null
+
+       $WLANCTL $IFACE dot11req_mibset \
+               mibattribute=dot11PrivacyInvoked=true >/dev/null
+
+       if [ -e "$IF_WLAN_NG_KEYFILE" ]; then
+               IF_WLAN_NG_PRIV_GENSTR=`cat $IF_WLAN_NG_KEYFILE`
+       fi
+       if [ ! -z "$IF_WLAN_NG_PRIV_GENSTR" ]; then
+               if [ "$IF_WLAN_NG_PRIV_KEY128" = "false" ]; then
+                       keys=`$PRIV_GENERATOR "$IF_WLAN_NG_PRIV_GENSTR" 5`
+               else
+                       keys=`$PRIV_GENERATOR "$IF_WLAN_NG_PRIV_GENSTR" 13`
+               fi
+
+               knum=0
+               for i in $keys; do
+                       $WLANCTL $IFACE dot11req_mibset \
+                               mibattribute=dot11WEPDefaultKey$knum=$i \
+                             >/dev/null
+                       knum=$(expr $knum + 1)
+               done
+       else
+               $WLANCTL $IFACE dot11req_mibset \
+                       mibattribute=dot11WEPDefaultKey0=$IF_WLAN_NG_KEY0 \
+                    >/dev/null
+               $WLANCTL $IFACE dot11req_mibset \
+                       mibattribute=dot11WEPDefaultKey1=$IF_WLAN_NG_KEY1 \
+                    >/dev/null
+               $WLANCTL $IFACE dot11req_mibset \
+                       mibattribute=dot11WEPDefaultKey2=$IF_WLAN_NG_KEY2 \
+                    >/dev/null
+               $WLANCTL $IFACE dot11req_mibset \
+                       mibattribute=dot11WEPDefaultKey3=$IF_WLAN_NG_KEY3 \
+                    >/dev/null
+       fi
+fi
+       
+# MAC startup
+if [ "$IF_WIRELESS_MODE" = "ad_hoc" ] || 
+   [ "$IF_WIRELESS_MODE" = "ad-hoc" ]; then
+       startcmd="$WLANCTL $IFACE dot11req_start "
+       startcmd="$startcmd ssid=$IF_WIRELESS_ESSID"
+       startcmd="$startcmd bsstype=independent"
+       startcmd="$startcmd beaconperiod=$IF_WLAN_NG_BCINT"
+       startcmd="$startcmd dtimperiod=3"
+       startcmd="$startcmd cfpollable=false"
+       startcmd="$startcmd cfpollreq=false"
+       startcmd="$startcmd cfpperiod=3"
+       startcmd="$startcmd cfpmaxduration=100"
+       startcmd="$startcmd probedelay=100"
+       startcmd="$startcmd dschannel=$IF_WIRELESS_CHANNEL"
+       j=1
+       for i in $IF_WLAN_NG_BASICRATES; do
+               startcmd="$startcmd basicrate$j=$i"
+               j=$(expr $j + 1)
+       done
+       j=1
+       for i in $IF_WLAN_NG_OPRATES; do
+               startcmd="$startcmd operationalrate$j=$i"
+               j=$(expr $j + 1)
+       done
+
+       results=`$startcmd`
+       if [ $? = 0 ]; then 
+               eval $results
+               if [ $resultcode != "success" ] ; then
+                       echo "IBSS not started, resultcode=$resultcode" >&2
+                       exit 1
+               fi
+       else
+               echo FAILED: $startcmd >&2
+               exit 1
+       fi
+else
+       # Infrastructure mode.
+       results=`$WLANCTL $IFACE lnxreq_autojoin \
+               "ssid=$IF_WIRELESS_ESSID" \
+               authtype=$IF_WLAN_NG_AUTHTYPE | sed 's/\([^=]*\)=\(.*\)/\1="\2"/'`
+       if [ $? = 0 ]; then
+               eval $results
+               if [ ${resultcode:-"failure"} != "success" ]; then
+                       echo 'error: Autojoin indicated failure!' >&2
+                       exit 1
+               fi
+       fi
+fi
index 00577d5..d52e795 100644 (file)
@@ -4,7 +4,7 @@ DEPENDS = "virtual/kernel"
 RRECOMMENDS = "wlan-ng-utils"
 MAINTAINER = "Bruno Randolf <bruno.randolf@4g-systems.biz>"
 LICENSE = "GPL"
-PR = "r6a"
+PR = "r7"
 
 SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
        file://no-compat.patch;patch=1 \