# /etc/conf.d/wireless:
# Global wireless config file for net.* rc-scripts

##############################################################################
# IMPORTANT
# linux-wlan-ng is not supported as they have their own configuration program
# ensure that /etc/conf.d/net has the entry "!iwconfig" in it's modules line
# Try and use an alternative driver if you need to use this - hostap-driver
# supports non-usb linux-wlan-ng driven devices
##############################################################################

##############################################################################
# HINTS
##############################################################################
# Remember to change eth0 to your wireless interface which may be
# eth0, eth1, wlan0, ath0 - you get the idea. If you're not sure
# you can type "iwconfig" at the command prompt and it will tell you which
# interfaces are wireless.
# Say that your wireless interface is ath0 - the line
#      #essid_eth0="any"
# becomes
#      #essid_ath0="any"
#
# Remember to change ESSID to your ESSID.
# Say that your ESSID is My NET - the line
#      #key_ESSID="s:passkey"
# becomes
#      #key_My_NET="s:passkey"
# Notice that the space has changed to an underscore - do the same with all
# characters not in a-z A-Z (english alphabet) 0-9. This only applies to
# variables and not values.
#
# Any ESSID's in values like essid_eth0="My NET" may need to be escaped
# This means placing the character \ before the character
# \" need to be escaped for example
# So if your ESSID is
#      My "\ NET
# it becomes
#      My \"\\ NET
# for example
#      #essid_eth0="My\"\\NET"
#
# So using the above we can use
#      #dns_domain_My____NET="My\"\\NET"
# which is an invalid dns domain, but shows the how to use the variable
# structure
#
# As a final note, most users will just need to set the following options
# key_ESSID1="s:yourkeyhere enc open" # s: means a text key
# key_ESSID2="aaaa-bbbb-cccc-dd"      # no s: means a hex key
# preferred_aps=( "ESSID1" "ESSID2" )
#
# Clear? Good. Now configure your wireless network below
#########################################################

##############################################################################
# SETTINGS
##############################################################################
# Hard code an ESSID to an interface - leave this unset if you wish the driver
# to scan for available Access Points
# Set to "any" to connect to any ESSID - the driver picks an Access Point
# This needs to be done when the driver doesn't support scanning
# This may work for drivers that don't support scanning but you need automatic
# AP association
# I would only set this as a last resort really - use the preferred_aps
# setting at the bottom of this file

# However, using ad-hoc (without scanning for APs) and master mode
# do require the ESSID to be set - do this here
#essid_eth0="any"

# Set the mode of the interface (managed, ad-hoc, master or auto)
# The default is auto
# If it's ad-hoc or master you also may need to specify the channel below
#mode_eth0="auto"

# If managed mode fails, drop to ad-hoc mode with the below ESSID?
#adhoc_essid_eth0="WLAN"

#Channel can be set (1-14), but defaults to 3 if not set.
#
# The below is taken verbatim from the BSD wavelan documentation found at
# http://www.netbsd.org/Documentation/network/wavelan.html
# There are 14 channels possible; We are told that channels 1-11 are legal for
# North America, channels 1-13 for most of Europe, channels 10-13 for France,
# and only channel 14 for Japan. If in doubt, please refer to the documentation
# that came with your card or access point. Make sure that the channel you
# select is the same channel your access point (or the other card in an ad-hoc
# network) is on. The default for cards sold in North America and most of Europe
# is 3; the default for cards sold in France is 11, and the default for cards
# sold in Japan is 14.
#channel_eth0="3"

# Setup any other config commands. This is basically the iwconfig argument
# without the iwconfig $iface
#iwconfig_eth0=""

# Set private driver ioctls. This is basically the iwpriv argument without
# the iwpriv $iface
#iwpriv_eth0=""

# Seconds to wait before scanning
# Some drivers need to wait until they have finished "loading"
# before they can scan - otherwise they error and claim that they cannot scan
# or resource is unavailable. The default is to wait zero seconds
#sleep_scan_eth0="1"

# Seconds to wait until associated. The default is to wait 10 seconds
#sleep_associate_eth0="5"

# By default a successful association in Managed mode sets the MAC
# address of the AP connected to. However, some drivers (namely
# the ipw2100) don't set an invalid MAC address when association
# fails - so we need to check on link quality which some drivers
# don't report properly either.
# So if you have connection problems try flipping this setting
# Valid options are MAC, quality and all - defaults to MAC
#associate_test_eth0="MAC"

# Some driver/card combinations need to scan in Ad-Hoc mode
# After scanning, the mode is reset to the one defined above
#scan_mode_eth0="Ad-Hoc"

# Below you can define private ioctls to run before and after scanning
# Format is the same as the iwpriv_eth0 above
# This is needed for the HostAP drivers
#iwpriv_scan_pre_eth0="host_roaming 2"
#iwpriv_scan_post_eth0="host_roaming 0"

# Define a WEP key per ESSID or MAC address (of the AP, not your card)
# The encryption type (open or restricted) must match the
# encryption type on the Access Point
# You can't use "any" for an ESSID here
#key_ESSID="1234-1234-1234-1234-1234-1234-56"
# or you can use strings. Passphrase IS NOT supported
# To use a string, prefix it with s:
# Note - this example also sets the encryption method to open
# which is regarded as more secure than restricted
#key_ESSID="s:foobar enc open"
#key_ESSID="s:foobar enc restricted"

# If you have whitespace in your key, here's how to set it and use other
# commands like using open encryption.
#key_ESSID="s:'foo bar' enc open"

# WEP key for the AP with MAC address 001122334455
#mac_key_001122334455="s:foobar"

# Here are some more examples of keys as some users find others work
# and some don't where they should all do the same thing
#key_ESSID="open s:foobar"
#key_ESSID="open 1234-5678-9012"
#key_ESSID="s:foobar enc open"
#key_ESSID="1234-5678-9012 enc open"

# You may want to set muliple keys - here's an example
# It sets 4 keys on the card and instructs to use key 2 by default
#key_ESSID="[1] s:passkey1 key [2] s:passkey2 key [3] s:passkey3 key [4] s:passkey4 key [2]"

# You can also override the interface settings found in /etc/conf.d/net
# per ESSID - which is very handy if you use different networks a lot
#config_ESSID=( "dhcp" )
#dhcpcd_ESSID="-t 5"
#routes_ESSID=()
#fallback_ESSID=()

# Setting name/domain server causes /etc/resolv.conf to be overwritten
# Note that if DHCP is used, and you want this to take precedence then
# please put -R in your dhcpcd options
#dns_servers_ESSID=( "192.168.0.1" "192.168.0.2" )
#dns_domain_ESSID="some.domain"
#dns_search_domains_ESSID="search.this.domain search.that.domain"
# Please check the man page for resolv.conf for more information
# as domain and search (searchdomains) are mutually exclusive and
# searchdomains takes precedence

# You can also set any of the /etc/conf.d/net variables per MAC address
# incase you use Access Points with the same ESSID but need different
# networking configs. Below is an example - of course you use the same
# method with other variables
#mac_config_001122334455=( "dhcp" )
#mac_dhcpcd_001122334455="-t 10"
#mac_dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )

# Map a MAC address to an ESSID
# This is used when the Access Point is not broadcasting it's ESSID
# WARNING: This will override the ESSID being broadcast due to some
# Access Points sending an ESSID even when they have been configured
# not to!
# Change 001122334455 to the MAC address and ESSID to the ESSID
# it should map to
#mac_essid_001122334455="ESSID"

# This lists the preferred ESSIDs to connect to in order
# ESSID's can contain any characters here as they must match the broadcast
# ESSID exactly.
# Surround each ESSID with the " character and seperate them with a space
# If the first ESSID isn't found then it moves onto the next
# If this isn't defined then it connects to the first one found
#preferred_aps=( "ESSID 1" "ESSID 2" )

# You can also define a preferred_aps list per interface
#preferred_aps_eth0=( "ESSID 3" "ESSID 4" )

# You can also say whether we only connect to preferred APs or not
# Values are "any", "preferredonly", "forcepreferred", "forcepreferredonly" and "forceany"
# "any" means it will connect to visible APs in the preferred list and then any
# other available AP
# "preferredonly" means it will only connect to visible APs in the preferred list
# "forcepreferred" means it will forceably connect to APs in order if it does not find
# them in a scan
# "forcepreferredonly" means it forceably connects to the APs in order and does not bother
# to scan
# "forceany" does the same as forcepreferred + connects to any other available AP
# Default is "any"
#associate_order="any"
#associate_order_eth0="any"

# You can define blacklisted Access Points in the same way
#blacklist_aps=( "ESSID 1" "ESSID 2" )
#blacklist_aps_eth0=( "ESSID 3" ESSID 4" )

# If you have more than one wireless card, you can say if you want
# to allow each card to associate with the same Access Point or not
# Values are "yes" and "no"
# Default is "yes"
#unique_ap="yes"
#unique_ap_eth0="yes"

# IMPORTANT: preferred_only, blacklisted_aps and unique_ap only work when
# essid_eth0 is not set and your card is capable of scanning

# NOTE: preferred_aps  list ignores blacklisted_aps - so if you have
# the same ESSID in both, well, you're a bit silly :p


##############################################################################
# ADVANCED CONFIGURATION
# 
# Two functions can be defined which will be called surrounding the
# associate function.  The functions are called with the interface
# name first so that one function can control multiple adapters.
#
# The return values for the preassociate function should be 0
# (success) to indicate that configuration or deconfiguration of the
# interface can continue.  If preassociate returns a non-zero value, then
# interface configuration will be aborted.
#
# The return value for the postassociate function is ignored
# since there's nothing to do if it indicates failure.

#preassociate() {
#	# The below adds two configuration variables leap_user_ESSID
#	# and leap_pass_ESSID. When they are both confiugred for the ESSID
#	# being connected to then we run the CISCO LEAP script
#
#	local user pass
#	eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
#	eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
#
#	if [[ -n ${user} && -n ${pass} ]]; then
#		if [[ ! -x /opt/cisco/bin/leapscript ]]; then
#			eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
#			return 1
#		fi
#		einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
#		if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
#			ewarn "Login Failed for ${user}"
#			return 1
#		fi
#	fi
#
#	return 0
#}

#postassociate() {
#	# This function is mostly here for completeness... I haven't
#	# thought of anything nifty to do with it yet ;-)
#	# Return 0 always
#	return 0
#}
