summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobby Workman <rworkman@slackware.com>2017-01-06 15:27:27 -0600
committerRobby Workman <rworkman@slackware.com>2017-01-06 15:27:27 -0600
commit2b563b7a34b1d00d7162983ff13c12867cc62c2e (patch)
treea4af435e0c64b2bf9f2838f3363cf0bf21cda4e2
downloadslacknetsetup-2b563b7a34b1d00d7162983ff13c12867cc62c2e.tar.xz
Initial commit of rc.inet1* and rc.wireless*
If other files are needed, they can be added later
-rw-r--r--rc.inet1326
-rw-r--r--rc.inet1.conf117
-rw-r--r--rc.wireless342
-rw-r--r--rc.wireless.conf225
4 files changed, 1010 insertions, 0 deletions
diff --git a/rc.inet1 b/rc.inet1
new file mode 100644
index 0000000..19b89d5
--- /dev/null
+++ b/rc.inet1
@@ -0,0 +1,326 @@
+#! /bin/sh
+# /etc/rc.d/rc.inet1
+# This script is used to bring up the various network interfaces.
+#
+# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv)
+
+############################
+# READ NETWORK CONFIG FILE #
+############################
+
+# Get the configuration information from /etc/rc.d/rc.inet1.conf:
+. /etc/rc.d/rc.inet1.conf
+
+###########
+# LOGGING #
+###########
+
+# If possible, log events in /var/log/messages:
+if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then
+ LOGGER=/usr/bin/logger
+else # output to stdout/stderr:
+ LOGGER=/bin/cat
+fi
+
+############################
+# DETERMINE INTERFACE LIST #
+############################
+
+# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum
+# of 6 interfaces, but you can easily enlarge the interface limit
+# - send me a picture of such a box :-).
+# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface.
+# This way, the new script is compatible with older rc.inet1.conf files.
+# The IFNAME array will be used to determine which interfaces to bring up/down.
+MAXNICS=${MAXNICS:-6}
+i=0
+while [ $i -lt $MAXNICS ];
+do
+ IFNAME[$i]=${IFNAME[$i]:=eth${i}}
+ i=$(($i+1))
+done
+if [ "$DEBUG_ETH_UP" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER
+fi
+
+######################
+# LOOPBACK FUNCTIONS #
+######################
+
+# Function to bring up the loopback interface. If loopback is
+# already up, do nothing.
+lo_up() {
+ if grep lo: /proc/net/dev 1> /dev/null ; then
+ if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER
+ /sbin/ifconfig lo 127.0.0.1
+ echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER
+ /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
+ fi
+ fi
+}
+
+# Function to take down the loopback interface:
+lo_down() {
+ if grep lo: /proc/net/dev 1> /dev/null ; then
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER
+ /sbin/ifconfig lo down
+ fi
+}
+
+#######################
+# INTERFACE FUNCTIONS #
+#######################
+
+# Function to assemble a bridge interface.
+br_open() {
+ # argument is 'i' - the position of this interface in the IFNAME array.
+ /sbin/brctl addbr ${IFNAME[$1]}
+ for BRIF in $(echo ${BRNICS[$1]}); do
+ /sbin/ifconfig $BRIF down
+ /sbin/ifconfig $BRIF 0.0.0.0 promisc up
+ /sbin/brctl addif ${IFNAME[$1]} $BRIF
+ done
+}
+
+# Function to disassemble a bridge interface.
+br_close() {
+ # argument is 'i' - the position of this interface in the IFNAME array.
+ #for BRIF in $(echo ${BRNICS[$1]}); do
+ for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/)
+ do
+ /sbin/brctl delif ${IFNAME[$1]} $BRIF
+ done
+ /sbin/ifconfig ${IFNAME[$1]} down
+ /sbin/brctl delbr ${IFNAME[$1]}
+}
+
+# Function to bring up a network interface. If the interface is
+# already up or does not yet exist (perhaps because the kernel driver
+# is not loaded yet), do nothing.
+if_up() {
+ # Determine position 'i' of this interface in the IFNAME array:
+ i=0
+ while [ $i -lt $MAXNICS ]; do
+ [ "${IFNAME[$i]}" = "${1}" ] && break
+ i=$(($i+1))
+ done
+ # If the interface is a bridge, then create it first:
+ [ -n "${BRNICS[$i]}" ] && br_open $i
+ # If the interface isn't in the kernel yet (but there's an alias for it in
+ # modules.conf), then it should be loaded first:
+ if [ "${IPADDR[$i]}" = "" -a "${USE_DHCP[$i]}" != "yes" ]; then # skip unconfigured interfaces
+ if [ "$DEBUG_ETH_UP" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: skipping ${1} early, interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER
+ fi
+ continue
+ fi
+ if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet
+ if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then
+ echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER
+ /sbin/modprobe ${1}
+ fi
+ fi
+ if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists
+ if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \
+ ! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured
+ if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up:
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER
+ /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}
+ fi
+ if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER
+ /sbin/ifconfig ${1} mtu ${MTU[$i]}
+ fi
+ if [ -x /etc/rc.d/rc.wireless ]; then
+ . /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters
+ fi
+ if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up
+ # Clear DHCP_OPTIONS before adding new options to it:
+ unset DHCP_OPTIONS
+ # Set DHCP_OPTIONS for this interface:
+ [ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}"
+ [ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf"
+ [ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf"
+ [ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G"
+ [ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d"
+ [ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L"
+ [ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}"
+ echo "Polling for DHCP server on interface ${1}:"
+ # If you set a timeout, you get one, even if the kernel doesn't think that
+ # your device is connected, in case /sys isn't right (which it usually isn't
+ # except right after the device is loaded, when it usually is):
+ #### (start commented out)
+ # This is deactivated for now since the kernel has been returning incorrect
+ # results concerning whether the interface carrier is detected.
+ #if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then
+ # ifconfig ${1} up && sleep 1
+ # CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)"
+ # ifconfig ${1} down
+ # if [ "$CONNSTATUS" = "0" ]; then
+ # # The kernel has just told us the cable isn't even plugged in, but we will
+ # # give any DHCP server a short chance to reply anyway:
+ # echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds."
+ # DHCP_TIMEOUT[$i]=10
+ # fi
+ #fi
+ #### (end commented out)
+ # 10 seconds should be a reasonable default DHCP timeout. 30 was too much.
+ echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -L -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER
+ /sbin/dhcpcd -L -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}
+ else # bring up interface using a static IP address
+ if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces
+ # Determine broadcast address from the IP address and netmask:
+ BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '`
+ # Set up the network card:
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER
+ /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}
+ else
+ if [ "$DEBUG_ETH_UP" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER
+ fi
+ fi
+ fi
+ else
+ if [ "$DEBUG_ETH_UP" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER
+ fi
+ fi
+ else
+ if [ "$DEBUG_ETH_UP" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER
+ fi
+ fi
+}
+
+# Function to take down a network interface:
+if_down() {
+ # Determine position 'i' of this interface in the IFNAME array:
+ i=0
+ while [ $i -lt $MAXNICS ]; do
+ [ "${IFNAME[$i]}" = "${1}" ] && break
+ i=$(($i+1))
+ done
+ if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then
+ if [ "${USE_DHCP[$i]}" = "yes" ]; then
+ echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER
+ /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down
+ sleep 1
+ else
+ echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER
+ /sbin/ifconfig ${1} down
+ fi
+ if [ -x /etc/rc.d/rc.wireless ]; then
+ . /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any.
+ fi
+ # If the interface is a bridge, then destroy it now:
+ if [ -n "${BRNICS[$i]}" ]; then
+ br_close $i
+ fi
+ fi
+}
+
+#####################
+# GATEWAY FUNCTIONS #
+#####################
+
+# Function to bring up the gateway if there is not yet a default route:
+gateway_up() {
+ if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then
+ if [ ! "$GATEWAY" = "" ]; then
+ echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER
+ /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER
+ fi
+ fi
+}
+
+# Function to take down an existing default gateway:
+gateway_down() {
+ if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then
+ echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER
+ /sbin/route del default
+ fi
+}
+
+# Function to start the network:
+start() {
+ lo_up
+ for i in ${IFNAME[@]} ; do
+ if_up $i
+ done
+ gateway_up
+}
+
+# Function to stop the network:
+stop() {
+ gateway_down
+ for i in ${IFNAME[@]} ; do
+ if_down $i
+ done
+ lo_down
+}
+
+
+############
+### MAIN ###
+############
+
+case "$1" in
+'start') # "start" brings up all configured interfaces:
+ start
+ ;;
+'stop') # "stop" takes down all configured interfaces:
+ stop
+ ;;
+'restart') # "restart" restarts the network:
+ stop
+ start
+ ;;
+'lo_start') # Start the loopback interface:
+ lo_up
+ ;;
+*_start) # Example: "eth1_start" will start the specified interface 'eth1'
+ INTERFACE=`echo $1 | /bin/cut -d '_' -f 1`
+ if_up $INTERFACE
+ gateway_up
+ ;;
+'lo_stop') # Stop the loopback interface:
+ lo_down
+ ;;
+*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0'
+ INTERFACE=`echo $1 | /bin/cut -d '_' -f 1`
+ if_down $INTERFACE
+ ;;
+*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again
+ INTERFACE=`echo $1 | /bin/cut -d '_' -f 1`
+ if_down $INTERFACE
+ sleep 1
+ if_up $INTERFACE
+ gateway_up
+ ;;
+'up') # "up" does the same thing as "start"
+ start
+ ;;
+'down') # "down" does the same thing as "stop"
+ stop
+ ;;
+'lo_up') # Start the loopback interface:
+ lo_up
+ ;;
+*_up) # "*_up" does the same thing as "*_start"
+ INTERFACE=`echo $1 | /bin/cut -d '_' -f 1`
+ if_up $INTERFACE
+ gateway_up
+ ;;
+'lo_down') # Stop the loopback interface:
+ lo_down
+ ;;
+*_down) # "*_down" does the same thing as "*_stop"
+ INTERFACE=`echo $1 | /bin/cut -d '_' -f 1`
+ if_down $INTERFACE
+ ;;
+*) # The default is to bring up all configured interfaces:
+ start
+esac
+
+# End of /etc/rc.d/rc.inet1
diff --git a/rc.inet1.conf b/rc.inet1.conf
new file mode 100644
index 0000000..85a8041
--- /dev/null
+++ b/rc.inet1.conf
@@ -0,0 +1,117 @@
+# /etc/rc.d/rc.inet1.conf
+#
+# This file contains the configuration settings for network interfaces.
+# If USE_DHCP[interface] is set to "yes", this overrides any other settings.
+# If you don't have an interface, leave the settings null ("").
+
+# You can configure network interfaces other than eth0,eth1... by setting
+# IFNAME[interface] to the interface's name. If IFNAME[interface] is unset
+# or empty, it is assumed you're configuring eth<interface>.
+
+# Several other parameters are available, the end of this file contains a
+# comprehensive set of examples.
+
+# =============================================================================
+
+# Config information for eth0:
+IPADDR[0]=""
+NETMASK[0]=""
+USE_DHCP[0]=""
+DHCP_HOSTNAME[0]=""
+
+# Config information for eth1:
+IPADDR[1]=""
+NETMASK[1]=""
+USE_DHCP[1]=""
+DHCP_HOSTNAME[1]=""
+
+# Config information for eth2:
+IPADDR[2]=""
+NETMASK[2]=""
+USE_DHCP[2]=""
+DHCP_HOSTNAME[2]=""
+
+# Config information for eth3:
+IPADDR[3]=""
+NETMASK[3]=""
+USE_DHCP[3]=""
+DHCP_HOSTNAME[3]=""
+
+# Default gateway IP address:
+GATEWAY=""
+
+# Change this to "yes" for debugging output to stdout. Unfortunately,
+# /sbin/hotplug seems to disable stdout so you'll only see debugging output
+# when rc.inet1 is called directly.
+DEBUG_ETH_UP="no"
+
+# Example of how to configure a bridge:
+# Note the added "BRNICS" variable which contains a space-separated list
+# of the physical network interfaces you want to add to the bridge.
+#IFNAME[0]="br0"
+#BRNICS[0]="eth0"
+#IPADDR[0]="192.168.0.1"
+#NETMASK[0]="255.255.255.0"
+#USE_DHCP[0]=""
+#DHCP_HOSTNAME[0]=""
+
+## Example config information for wlan0. Uncomment the lines you need and fill
+## in your data. (You may not need all of these for your wireless network)
+#IFNAME[4]="wlan0"
+#IPADDR[4]=""
+#NETMASK[4]=""
+#USE_DHCP[4]="yes"
+#DHCP_HOSTNAME[4]="icculus-wireless"
+#DHCP_KEEPRESOLV[4]="yes"
+#DHCP_KEEPNTP[4]="yes"
+#DHCP_KEEPGW[4]="yes"
+#DHCP_IPADDR[4]=""
+#WLAN_ESSID[4]=DARKSTAR
+#WLAN_MODE[4]=Managed
+#WLAN_RATE[4]="54M auto"
+#WLAN_CHANNEL[4]="auto"
+#WLAN_KEY[4]="D5A31F54ACF0487C2D0B1C10D2"
+#WLAN_IWPRIV[4]="set AuthMode=WPAPSK | set EncrypType=TKIP | set WPAPSK=96389dc66eaf7e6efd5b5523ae43c7925ff4df2f8b7099495192d44a774fda16"
+#WLAN_WPA[4]="wpa_supplicant"
+#WLAN_WPADRIVER[4]="wext"
+#WLAN_WPAWAIT[4]=30
+
+## Some examples of additional network parameters that you can use.
+## Config information for wlan0:
+#IFNAME[4]="wlan0" # Use a different interface name instead of
+ # the default 'eth4'
+#IFNAME[4]="eth0:1" # Set up an IP alias.
+#HWADDR[4]="00:01:23:45:67:89" # Overrule the card's hardware MAC address
+#MTU[4]="" # The default MTU is 1500, but you might need
+ # 1360 when you use NAT'ed IPSec traffic.
+#DHCP_TIMEOUT[4]=15 # The default timeout for the DHCP client to
+ # wait for server resonse is 10 seconds, but
+ # you might want a shorter or longer wait.
+#DHCP_KEEPRESOLV[4]="yes" # If you don't want /etc/resolv.conf overwritten
+#DHCP_KEEPNTP[4]="yes" # If you don't want ntp.conf overwritten
+#DHCP_KEEPGW[4]="yes" # If you don't want the DHCP server to change
+ # your default gateway
+#DHCP_IPADDR[4]="" # Request a specific IP address from the DHCP
+ # server
+#DHCP_DEBUG[4]="yes" # Make dhcpcd show verbose diagnostics
+#DHCP_NOIPV4LL[4]="yes" # Do not assign an ipv4ll address when a DHCP
+ # server is not found (ipv4ll link-local
+ # adresses in the IP range 169.254.0.0/16 are
+ # also known as "zeroconf" addresses)
+#WLAN_ESSID[4]=DARKSTAR # An example of how you can override _any_
+ # parameter defined in rc.wireless.conf, by
+ # prepending 'WLAN_' to the parameter's name.
+ # Useful with multiple wireless interfaces.
+#WLAN_IWPRIV[4]="set AuthMode=WPAPSK | set EncrypType=TKIP | set WPAPSK=thekey"
+ # Some drivers require a private ioctl to be
+ # set through the iwpriv command. If more than
+ # one is required, you can place them in the
+ # IWPRIV parameter (separated with the pipe (|)
+ # character, see the example).
+#WLAN_WPA[4]="wpa_supplicant" # Run wpa_supplicant for WPA support
+#WLAN_WPADRIVER[4]="ndiswrapper"# Tell wpa_supplicant to specifically use the
+ # ndiswrapper driver (if you leave this empty
+ # the 'wext' driver is used by default)
+#WLAN_WPAWAIT[4]=30 # In case it takes long for the WPA association
+ # to finish, you can increase the wait time
+ # (defaults to 10 seconds)
diff --git a/rc.wireless b/rc.wireless
new file mode 100644
index 0000000..51623d5
--- /dev/null
+++ b/rc.wireless
@@ -0,0 +1,342 @@
+#!/bin/sh
+# /etc/rc.d/rc.wireless
+# $Id: rc.wireless,v 1.13 2007/04/13 14:14:43 eha Exp eha $
+#
+# Wireless network card setup.
+#
+# This script sets up PCI, USB, and 32-bit Cardbus wireless devices
+# NOT 16-bit PCMCIA cards! Those are configured in /etc/pcmcia/.
+# Single parameter to this script is the name of a network interface.
+# Normally this script is called from rc.inet1 rather than run
+# directly.
+#
+# This script is a modified '/etc/pcmcia/wireless' script
+# 09/apr/2004 by Eric Hameleers
+# 16/sep/2004 * Eric Hameleers * Fixed iwspy and iwpriv commands
+# 08/apr/2005 * Eric Hameleers * Allow per-interface overrides of the wireless
+# parameters (see /etc/rc.d/rc.inet1.conf)
+# 11/apr/2005 * Eric Hameleers * Tune wpa_supplicant interactions.
+# 23/apr/2005 * Eric Hameleers * First configure card with iwconfig,
+# before starting wpa_supplicant
+# 27/apr/2005 * Eric Hameleers * Multiple 'iwpriv $INTERFACE set' commands.
+# 14/feb/2006 * Eric Hameleers * Better error messages; alternative way of
+# getting HWADDR; parametrized WPA_WAIT value.
+# Don't kill an already running wpa_supplicant.
+# 29/apr/2006 * Pat Volkerding * Reverted HWADDR change, since it relies on
+# a binary (macaddr) that is not built or
+# installed by default since it is not
+# compatible with all interfaces.
+# 15/aug/2006 * Eric Hameleers * Added missing "" around $ESSID, which broke
+# ESSIDs that contain a space character.
+# 10/oct/2006 * Eric Hameleers * Added default empty values for all parameters.
+# This makes a second wireless card leave
+# wpa_supplicant alone if WPA is not configured.
+# 15/oct/2006 * Eric Hameleers * Swapped the calls to "key <key>" and
+# "key restricted" since that might be needed
+# for WEP to work reliably.
+# 09/jan/2007 * Eric Hameleers * Add explicit default values to wireless params;
+# also set the ESSID before IWPRIV commands,
+# needed for some RaLink cards;
+# use /proc/net/wireless instead of calling
+# iwconfig to determine if a card is wireless.
+# 13/apr/2007 * Eric Hameleers * Use of the IWPRIV variable was broken.
+# NOTE: if you need to enter multiple parameters
+# in IWPRIV, you must separate them with the pipe
+# (|) character - this used to be a space char!
+# See the example in rc.inet1.conf.
+# 16/apr/2008 * Pat Volkerding * Make sure that HWADDR is all upper case.
+# 23/apr/2008 * Pat Volkerding * Increase sleep time after bringing up an
+# interface to 3 seconds. Some drivers
+# need this additional time to initalize.
+# 02/jan/2010 * Pat Volkerding * Look for /sys/class/net/$NETDEV/wireless rather
+# than the contents of /proc/net/wireless to find
+# if a network device is wireless. In newer
+# kernels devices will not show up in
+# /proc/net/wireless until active.
+# 16/aug/2012 * Pat Volkerding * Use several tests to determine if an interface
+# is wireless, as the reliability of any given
+# test may depend on the kernel options and the
+# wireless driver used.
+# Convert the MAC address to uppercase in sed.
+# ------------------------------------------------------------------------------
+
+LOGGER=${LOGGER:-cat}
+
+if [ -z $IFNAME ] ; then
+ echo "WARNING: The script 'rc.wireless' must be executed by 'rc.inet1'!" | $LOGGER
+ echo " You should run the command \"/etc/rc.d/rc.inet1 <your_interface>_start\" yourself." | $LOGGER
+ return 1 2> /dev/null || exit 1
+fi
+
+INTERFACE=$1
+
+# Find the path where wireless tools are installed
+for IWPATH in /usr/{bin,sbin} /usr/local/{bin,sbin} /sbin /bin ; do
+ if [ -x $IWPATH/iwconfig ] ; then break ; fi
+done
+
+# The same for wpa_supplicant (needed for WPA support)
+for SUPPATH in /usr/{bin,sbin} /usr/local/{bin,sbin} /sbin /bin ; do
+ if [ -x $SUPPATH/wpa_supplicant ] ; then break ; fi
+done
+
+# Set all desired settings through the wireless tools
+IWCOMMAND="$IWPATH/iwconfig ${INTERFACE}"
+IWPRIVCMD="$IWPATH/iwpriv ${INTERFACE}"
+IWSPYCMD="$IWPATH/iwspy ${INTERFACE}"
+IFCOMMAND="/sbin/ifconfig ${INTERFACE}"
+
+is_wireless_device ()
+{
+ # Return 0 for a wireless interface, or 1 for a non-wireless interface.
+ if LC_ALL=C $IWPATH/iwconfig $1 2>&1 | grep -q "IEEE 802.11" ; then
+ return 0
+ elif [ -d /sys/class/net/${1}/wireless ]; then
+ return 0
+ elif [ "$(cat /sys/class/net/${1}/uevent | grep DEVTYPE)" = "DEVTYPE=wlan" ]; then
+ return 0
+ else # all tests failed, assume the device is not wireless (or add a better test :)
+ return 1
+ fi
+}
+
+###############
+# EXIT POINTS #
+###############
+
+# Is the device wireless? If not, exit this script.
+is_wireless_device ${INTERFACE} || return 0 2> /dev/null || exit 0
+
+# If we stop a wireless interface using wpa_supplicant,
+# we'll kill its wpa_supplicant daemon too and exit this script:
+if [ "$2" = "stop" ]; then
+ WPAPID=$(echo $(ps axww | grep wpa_supplicant | grep i${INTERFACE}) | cut -f1 -d' ')
+ [ ${WPAPID} ] && kill ${WPAPID}
+ return 0
+fi
+
+# -----------------------------------------------------
+# Continue with the script - bringing the interface UP.
+# -----------------------------------------------------
+
+# Bring interface up - for determining the HWADDR
+$IFCOMMAND up
+sleep 3
+
+# Get the MAC address for the interface
+HWADDR=$(/sbin/ifconfig ${INTERFACE} | sed -ne 's/.*\(..:..:..:..:..:..\).*/\U\1/p')
+
+# Empty all wireless parameters- some of them could still be set for a previous interface:
+# when rc.inet1 is sourced from rc.M all scripts are run in the same shell.
+CHANNEL=""
+ESSID=""
+FREQ=""
+FRAG=""
+IWCONFIG=""
+IWPRIV=""
+IWSPY=""
+KEY=""
+MODE=""
+NICKNAME=""
+NWID=""
+RATE=""
+RTS=""
+SENS=""
+WPA=""
+WPADRIVER=""
+WPACONF=""
+WPAWAIT=""
+# Read the configuration information for the card with address $HWADDR
+# from /etc/rc.d/rc.wireless.conf:
+[[ -r /etc/rc.d/rc.wireless.conf ]] && . /etc/rc.d/rc.wireless.conf
+
+# Let any per-interface overrides (the WLAN_xxxx parameters) that are set
+# in /etc/rc.d/rc.inet1.conf have precedence.
+# The reason: you might have multiple wireless cards of the same brand, or
+# connecting to multiple networks.
+# Position 'i' of this interface in the IFNAME array was determined in rc.inet1
+CHANNEL=${WLAN_CHANNEL[$i]:-${CHANNEL}}
+ESSID=${WLAN_ESSID[$i]:-${ESSID}}
+FREQ=${WLAN_FREQ[$i]:-${FREQ}}
+FRAG=${WLAN_FRAG[$i]:-${FRAG}}
+IWCONFIG=${WLAN_IWCONFIG[$i]:-${IWCONFIG}}
+IWPRIV=${WLAN_IWPRIV[$i]:-${IWPRIV}}
+IWSPY=${WLAN_IWSPY[$i]:-${IWSPY}}
+KEY=${WLAN_KEY[$i]:-${KEY}}
+MODE=${WLAN_MODE[$i]:-${MODE}}
+NICKNAME=${WLAN_NICKNAME[$i]:-${NICKNAME}}
+NWID=${WLAN_NWID[$i]:-${NWID}}
+RATE=${WLAN_RATE[$i]:-${RATE}}
+RTS=${WLAN_RTS[$i]:-${RTS}}
+SENS=${WLAN_SENS[$i]:-${SENS}}
+WPA=${WLAN_WPA[$i]:-${WPA}}
+# The "ext" interface will be default if not explicitly set
+WPADRIVER=${WLAN_WPADRIVER[$i]:-${WPADRIVER:="wext"}}
+# The default config file as installed by the wpa_supplicant package:
+WPACONF=${WLAN_WPACONF[$i]:-${WPACONF:="/etc/wpa_supplicant.conf"}}
+WPAWAIT=${WLAN_WPAWAIT[$i]:-${WPAWAIT:="60"}}
+
+
+[ -n "$VERBOSE" -a -n "$INFO" ] && echo "$0: $1 information: '$INFO'"
+
+###################
+# WIRELESS CONFIG #
+###################
+
+# Mode needs to be first : some settings apply only in a specific mode!
+if [ -n "$MODE" ] ; then
+ echo "$0: $IWCOMMAND mode $MODE" | $LOGGER
+ # if $IWCOMMAND fails, try taking the interface down to run it.
+ # Some drivers require this.
+ if ! $IWCOMMAND mode $MODE 2> /dev/null ; then
+ $IFCOMMAND down
+ $IWCOMMAND mode $MODE
+ $IFCOMMAND up
+ sleep 3
+ fi
+fi
+# This is a bit hackish, but should do the job right...
+if [ ! -n "$NICKNAME" ] ; then
+ NICKNAME=$(/bin/hostname)
+fi
+if [ -n "$ESSID" -o -n "$MODE" ] ; then
+ echo "$0: $IWCOMMAND nick $NICKNAME" | $LOGGER
+ $IWCOMMAND nick $NICKNAME
+fi
+# Regular stuff...
+if [ -n "$NWID" ] ; then
+ echo "$0: $IWCOMMAND nwid $NWID" | $LOGGER
+ $IWCOMMAND nwid $NWID
+fi
+if [ -n "$FREQ" ] ; then
+ echo "$0: $IWCOMMAND freq $FREQ" | $LOGGER
+ $IWCOMMAND freq $FREQ
+elif [ -n "$CHANNEL" ] ; then
+ echo "$0: $IWCOMMAND channel $CHANNEL" | $LOGGER
+ $IWCOMMAND channel $CHANNEL
+fi
+
+# WEP keys (non-WPA)
+if [ -n "$KEY" -a ! -n "$WPA" ] ; then
+ if [ "$KEY" = "off" ]; then
+ echo "$0: $IWCOMMAND key open" | $LOGGER
+ $IWCOMMAND key open
+ echo "$0: $IWCOMMAND key off" | $LOGGER
+ $IWCOMMAND key off
+ else
+ echo "$0: $IWCOMMAND key ************" | $LOGGER
+ $IWCOMMAND key $KEY
+ if ! echo "$KEY" | egrep -qw "restricted|open" ; then
+ # Set "restricted" as the default security mode:
+ echo "$0: $IWCOMMAND key restricted" | $LOGGER
+ $IWCOMMAND key restricted
+ fi
+ fi
+fi
+if [ -n "$SENS" ] ; then
+ echo "$0: $IWCOMMAND sens $SENS" | $LOGGER
+ $IWCOMMAND sens $SENS
+fi
+if [ -n "$RATE" ] ; then
+ echo "$0: $IWCOMMAND rate $RATE" | $LOGGER
+ $IWCOMMAND rate $RATE
+fi
+if [ -n "$RTS" ] ; then
+ echo "$0: $IWCOMMAND rts $RTS" | $LOGGER
+ $IWCOMMAND rts $RTS
+fi
+if [ -n "$FRAG" ] ; then
+ echo "$0: $IWCOMMAND frag $FRAG" | $LOGGER
+ $IWCOMMAND frag $FRAG
+fi
+# More specific parameters
+if [ -n "$IWCONFIG" ] ; then
+ echo "$0: $IWCOMMAND $IWCONFIG" | $LOGGER
+ $IWCOMMAND $IWCONFIG
+fi
+if [ -n "$IWSPY" ] ; then
+ echo "$0: $IWSPYCMD $IWSPY" | $LOGGER
+ $IWSPYCMD $IWSPY
+fi
+# For RaLink cards, the SSID must be set right before configuring WPAPSK/TKIP parameters
+# using iwpriv commands in order to generate the wpapsk password. This should not hurt other cards:
+if [ -n "$ESSID" ] ; then
+ echo "$0: $IWCOMMAND essid \"$ESSID\"" | $LOGGER
+ $IWCOMMAND essid "$ESSID"
+fi
+# The iwpriv can set one private IOCTL at the time, so if the $IWPRIV
+# variable contains multiple pipe ('|') separated settings, we split them here:
+# WARNING: if your iwpriv commands contain a WEP/WPA key, these can be logged
+# in /var/log/messages!
+if [ -n "$IWPRIV" ] ; then
+ echo "${IWPRIV}|" | \
+ while read -d '|' iwi; do
+ if [ -n "$iwi" ]; then
+ echo "$0: '$IWPRIVCMD $iwi'" | $LOGGER
+ $IWPRIVCMD $iwi
+ fi
+ done
+fi
+
+##################
+# WPA_SUPPLICANT #
+##################
+
+# Support for WPA (wireless protected access) is provided by wpa_supplicant
+# for those drivers that support it (and it looks like wpa_supplicant is
+# the future for WPA support in Linux anyway)
+if [ "$WPA" = "wpa_supplicant" ] || [ "$WPA" = "wpaxsupplicant" ] && [ -x ${SUPPATH}/wpa_supplicant ]; then
+ # Interface down, so wpa_supplicant can associate with the AP
+ $IFCOMMAND down
+ #WPACONF=${WPACONF:-/etc/wpa_supplicant.conf}
+ WPA_OPTIONS=""
+ [ ${WPADRIVER} ] && WPA_OPTIONS="-D${WPADRIVER}" # specify the driver
+ [ ${WPA} = "wpaxsupplicant" ] && WPA_OPTIONS="${WPA_OPTIONS} -e" # Use external xsupplicant (disables the internal supplicant)
+
+ # We leave a running wpa_supplicant process in peace:
+ WPAPID=$(echo $(ps axww | grep wpa_supplicant | grep i${INTERFACE}) | cut -f1 -d' ')
+ if [ ${WPAPID} ]; then
+ echo "$0: wpa_supplicant found running already" | $LOGGER
+ else
+ echo "$0: wpa_supplicant -B -c${WPACONF} ${WPA_OPTIONS} -i$INTERFACE" | $LOGGER
+ ${SUPPATH}/wpa_supplicant -B -c${WPACONF} ${WPA_OPTIONS} -i$INTERFACE
+ fi
+
+ # Buy wpa_supplicant some time to authenticate before bringing the
+ # interface back up... but we don't wait forever:
+ # You can increase this value in rc.inet1.conf (WLAN_WPAWAIT) or rc.wireless.conf (WPAWAIT)
+ # if your card takes longer to associate:
+ WPAWAIT=${WPAWAIT:-10}
+ wi=0
+ while [ $wi -lt $WPAWAIT ]; do
+ wi=$(($wi+1)); sleep 1
+ if (grep -q "^ctrl_interface=" ${WPACONF}); then
+ if (LC_ALL=C ${SUPPATH}/wpa_cli -i$INTERFACE status | grep -q "^wpa_state=COMPLETED"); then break; fi
+ else
+ if (LC_ALL=C ${IWCOMMAND} | grep -Eq "Encryption key:....-"); then break; fi
+ fi
+ done
+ if [ $wi -eq $WPAWAIT ]; then
+ echo "WPA authentication did not complete, try running '/etc/rc.d/rc.inet1 ${INTERFACE}_start' in a few seconds." | $LOGGER
+ fi
+ # Bring interface up to avoid 'not ready' errors when calling iwconfig
+ $IFCOMMAND up
+ sleep 3
+
+else
+
+ # ESSID need to be last: most devices re-perform the scanning/discovery
+ # when this is set, and things like encryption keys had better be
+ # defined if we want to discover the right set of APs/nodes.
+ # NOTE: when automatic association does not work, but you manage to get
+ # an IP address by manually setting the ESSID and then calling dhcpcd,
+ # then the cause might be the incorrect definition of your ESSID="bla"
+ # parameter in rc.wireless.conf.
+ # Debug your wireless problems by running 'iwevent' while the card
+ # is being configured.
+ if [ -n "$ESSID" ] ; then
+ echo "$0: $IWCOMMAND essid \"$ESSID\"" | $LOGGER
+ $IWCOMMAND essid "$ESSID"
+ fi
+
+fi
diff --git a/rc.wireless.conf b/rc.wireless.conf
new file mode 100644
index 0000000..d02d7c2
--- /dev/null
+++ b/rc.wireless.conf
@@ -0,0 +1,225 @@
+# Wireless LAN adapter configuration
+#
+# Theory of operation :
+#
+# The script attempts to match a block of settings to the specific wireless
+# card inserted, the *first* block matching the card is used.
+# The address format is "hwaddr", with * as a wildcard.
+# 'hwaddr' is the unique MAC address identifier of the wireless card.
+# The MAC address is usually printed on the card, or can be found via ifconfig.
+# Some examples here use only half of the MAC address with a wildcard to
+# match a whole family of cards...
+#
+# All the Wireless specific configuration is done through the Wireless
+# Extensions, so we will just call 'iwconfig' with the right parameters
+# defined below.
+# Of course, you need to have iwconfig installled on your system.
+# To download iwconfig, or for more info on Wireless Extensions :
+# http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
+#
+# Note : you don't need to fill all parameters, leave them blank, in most
+# cases the driver will initialise itself with sane defaults values or
+# automatically figure out the value... And no drivers do support all
+# possible settings...
+#
+# -- This is a modified '/etc/pcmcia/wireless.opts' script --
+# -- I added sections for Prism/GT and Atheros based cards --
+# -- (supported by the prism54 and madwifi drivers) --
+# -- 16/sep/2004 * Eric Hameleers --
+#
+
+VERBOSE=1
+
+case "$HWADDR" in
+
+## NOTE : Comment out the following five lines to activate the samples below ...
+## --------- START SECTION TO REMOVE -----------
+## Pick up any Access Point, should work on most 802.11 cards
+*)
+ INFO="Any ESSID"
+ ESSID="any"
+ ;;
+## ---------- END SECTION TO REMOVE ------------
+
+
+# Here are a few examples with a few Wireless LANs supported...
+# The matching is done on the first 3 bytes of the MAC address
+
+# SMC2835W EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Adapter
+00:04:E2:*)
+ INFO="SMC2835W EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Adapter"
+ # ESSID (extended network name) : My Network, any
+ ESSID="any"
+ # NWID/Domain (cell identifier) : 89AB, 100, off
+ NWID=""
+ # Operation mode : Ad-Hoc, Managed, Master, Repeater, Secondary, auto
+ MODE="Managed"
+ # Frequency or channel : 1, 2, 3 (channel) ; 2.422G, 2.46G (frequency)
+ FREQ=""
+ CHANNEL="7"
+ # Sensitivity (cell size + roaming speed) : 1, 2, 3 ; -70 (dBm)
+ SENS=""
+ # Bit rate : auto, 1M, 11M,54M
+ RATE="auto"
+ # Encryption key : 4567-89AB-CD, s:password
+ # Example for 40-bit encryption:
+ #KEY="883e-aa67-21 [1] key 5501-d0da-87 [2] key 91f5-3368-6b [3] key 2d73-31b7-96 [4]"
+ # Example for 104-bit encryption (aka 128-bit WEP):
+ #KEY="d5ad2f05abd048ecf10b1c80c7"
+ KEY=""
+ # RTS threshold : off, 500
+ RTS=""
+ # Fragmentation threshold : off, 1000
+ FRAG=""
+ # Other iwconfig parameters : power off, ap 01:23:45:67:89:AB
+ IWCONFIG=""
+ # iwspy parameters : + 01:23:45:67:89:AB
+ IWSPY=""
+ # iwpriv parameters : set_port 2, set_histo 50 60
+ IWPRIV=""
+;;
+
+# Multiband Atheros based 802.11a/b/g universal NIC cards
+00:05:4E:*)
+ INFO="Multiband Atheros based 802.11a/b/g universal NIC"
+ # ESSID (extended network name) : My Network, any
+ ESSID=""
+ # Operation mode : Ad-Hoc, Managed, Master, Repeater, Secondary, auto
+ MODE="Managed"
+ # Frequency or channel : 1, 2, 3 (channel) ; 2.422G, 2.46G (frequency)
+ FREQ=""
+ CHANNEL="7"
+ # Bit rate : auto, 1M, 11M,54M
+ RATE="auto"
+ # Encryption key : 4567-89AB-CD, s:password
+ # Example for 40-bit encryption:
+ #KEY="883e-aa67-21 [1] key 5501-d0da-87 [2] key 91f5-3368-6b [3] key 2d73-31b7-96 [4]"
+ # Example for 104-bit encryption (aka 128-bit WEP):
+ #KEY="d5ad2f05abd048ecf10b1c80c7"
+ KEY=""
+ # Other iwconfig parameters : power off, ap 01:23:45:67:89:AB
+ IWCONFIG=""
+ # iwspy parameters : + 01:23:45:67:89:AB
+ IWSPY=""
+ # iwpriv parameters : set_port 2, set_histo 50 60
+ IWPRIV=""
+ ;;
+
+# Lucent Wavelan IEEE (+ Orinoco, RoamAbout and ELSA)
+# Note : wvlan_cs driver only, and version 1.0.4+ for encryption support
+00:60:1D:*|00:02:2D:*)
+ INFO="Wavelan IEEE example (Lucent default settings)"
+ ESSID="Wavelan Network"
+ MODE="Managed"
+ #RATE="auto"
+ KEY="s:secu1"
+ # To set all four keys, use :
+ #KEY="s:secu1 [1] key s:secu2 [2] key s:secu3 [3] key s:secu4 [4] key [1]"
+ # For the RG 1000 Residential Gateway: The ESSID is the identifier on
+ # the unit, and the default key is the last 5 digits of the same.
+ #ESSID="084d70"
+ #KEY="s:84d70"
+ ;;
+
+# Cisco/Aironet 4800/3x0
+# Note : MPL driver only (airo/airo_cs), version 1.3 or later
+00:40:96:*|00:02:8A:*)
+ INFO="Cisco/Aironet example (Cisco default settings)"
+ ESSID="any"
+ # To set all four ESSID, use iwconfig v21 and the same trick as above
+ MODE="Managed"
+ #RATE="11M auto"
+ #KEY="d5ad2f05abd048ecf10b1c80c7"
+ KEY="off"
+ ;;
+
+# Samsung MagicLan (+ some other PrismII cards)
+# Note : Samsung binary library driver, version 1.20 or later
+00:00:F0:*|00:02:78:*)
+ INFO="Samsung MagicLan example (Samsung default settings)"
+ ESSID="any"
+ MODE="Managed"
+ CHANNEL="4"
+ RATE="auto"
+ #KEY="883e-aa67-21 [1] key 5501-d0da-87 [2] key 91f5-3368-6b [3] key 2d73-31b7-96 [4]"
+ #IWCONFIG="power on"
+ ;;
+
+# Raytheon Raylink/WebGear Aviator2.4
+# Note : doesn't work yet, please use for debugging only :-(
+00:00:8F:*|00:00:F1:*)
+ INFO="Raylink/Aviator2.4 example (Aviator default ad-hoc setting)"
+ ESSID="ADHOC_ESSID"
+ MODE="Ad-Hoc"
+ RATE="auto"
+ IWPRIV="set_framing 1"
+ ;;
+
+# Old Lucent Wavelan
+08:00:0E:*)
+ INFO="Wavelan example (Lucent default settings)"
+ NWID="0100"
+ MODE="Ad-Hoc"
+ FREQ="2.425G"
+ KEY="off"
+ ;;
+
+# Netwave (Xircom Netwave/Netwave Airsurfer)
+00:80:C7:*)
+ INFO="Netwave example (Netwave default settings)"
+ NWID="100"
+ KEY="00"
+ ;;
+
+# Proxim RangeLan2/Symphony (what is the MAC address ???)
+XX:XX:XX:*)
+ INFO="Proxim RangeLan2/Symphony example"
+ NWID="0"
+ MODE="Master"
+ CHANNEL="15"
+ IWPRIV="setsubchan 1"
+ ;;
+
+# No Wires Needed Swallow 550 and 1100 setting (what is the MAC address ???)
+XX:XX:XX:*)
+ INFO="NWN Swallow example"
+ ESSID="session"
+ KEY="0000-0000-00 open"
+ ;;
+
+# Symbol Spectrum24 setting (what is the MAC address ???)
+XX:XX:XX:*)
+ INFO="Symbol Spectrum24 example"
+ ESSID="Essid string"
+ ;;
+
+# Generic example (decribe all possible settings)
+*)
+ INFO="Fill with your own settings..."
+ # ESSID (extended network name) : My Network, any
+ ESSID=""
+ # NWID/Domain (cell identifier) : 89AB, 100, off
+ NWID=""
+ # Operation mode : Ad-Hoc, Managed, Master, Repeater, Secondary, auto
+ MODE=""
+ # Frequency or channel : 1, 2, 3 (channel) ; 2.422G, 2.46G (frequency)
+ FREQ=""
+ CHANNEL=""
+ # Sensitivity (cell size + roaming speed) : 1, 2, 3 ; -70 (dBm)
+ SENS=""
+ # Bit rate : auto, 1M, 11M
+ RATE=""
+ # Encryption key : 4567-89AB-CD, s:password
+ KEY=""
+ # RTS threshold : off, 500
+ RTS=""
+ # Fragmentation threshold : off, 1000
+ FRAG=""
+ # Other iwconfig parameters : power off, ap 01:23:45:67:89:AB
+ IWCONFIG=""
+ # iwspy parameters : + 01:23:45:67:89:AB
+ IWSPY=""
+ # iwpriv parameters : set_port 2, set_histo 50 60
+ IWPRIV=""
+ ;;
+esac