##############################################################################
# QUICK-START
#
# The quickest start is if you want to use DHCP.
# In that case, everything should work out of the box, no configuration
# necessary, though the startup script will warn you that you haven't
# specified anything.
#
# If you want to use a static address or use DHCP explicitly, jump
# down to the section labelled INTERFACE HANDLERS.
#
# If you want to do anything more fancy, you should take the time to
# read through the rest of this file.


##############################################################################
# MODULES
#
# We now support modular networking scripts which means we can easily
# add support for new interface types and modules while keeping
# compatability with existing ones.
# 
# Modules load by default if the package they need is installed.  If
# you specify a module here that doesn't have it's package installed
# then you get an error stating which package you need to install.
# Ideally, you only use the modules setting when you have two or more
# packages installed that supply the same service.
#
# In other words, you probably should DO NOTHING HERE...

# Prefer iproute2 over ifconfig
#modules=( "iproute2" )

# You can also specify other modules for an interface
# In this case we prefer udhcpc over dhcpcd
#modules_eth0=( "udhcpc" )

# You can also specify which modules not to use - for example you may be
# using a supplicant or linux-wlan-ng to control wireless configuration but
# you still want to configure network settings per ESSID associated with.
#modules=( "!iwconfig" )


##############################################################################
# INTERFACE HANDLERS
# 
# We provide two interface handlers presently: ifconfig and iproute2.
# You need one of these to do any kind of network configuration.
# For ifconfig support, emerge sys-apps/net-tools
# For iproute2 support, emerge sys-apps/iproute2

# If you don't specify an interface then we prefer ifconfig it it's installed
# Prefer iproute2 over ifconfig
#modules=( "iproute2" )

# For a static configuration, use something like this
# (They all do exactly the same thing btw)
#config_eth0=( "192.168.0.2/24" )
#config_eth0=( "192.168.0.2 netmask 255.255.255.0" )

# We can also specify a broadcast
#config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
#config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )

# If you need more than one address, you can use something like this
# NOTE: ifconfig creates an aliased device for each extra IPv4 address
#       (eth0:1, eth0:2, etc)
#       iproute2 does not do this
#config_eth0=(
#	"192.168.0.2/24"
#	"192.168.0.3/24"
#	"192.168.0.4/24"
#)

# You can also use IPv6 addresses
#config_eth0=(
#	"192.168.0.2/24"
#	"4321:0:1:2:3:4:567:89ab"
#	"4321:0:1:2:3:4:567:89ac"
#)

# If you wish to keep existing addresses + routing and the interface is up,
# you can specify a noop (no operation). If the interface is down or there
# are no addresses assigned, then we move onto the next step (default dhcp)
# This is useful when configuring your interface with a kernel command line
# or similar
#config_eth0=( "noop" "192.168.0.2/24" )

# If you don't want ANY address (only useful when calling for advanced stuff)
#config_eth0=( "null" )

# Here's how todo routing if you need it - the below sets the default gateway
#routes_eth0=(
#	"default via 192.168.0.1"
#	"default via 4321:0:1:2:3:4:567:89ab"
#)

# If a specified module fails (like dhcp - see below), you can specify a
# fallback like so
#fallback_eth0=( "192.168.0.2 netmask 255.255.255.0" )
#fallback_route_eth0=( "default via 192.168.0.1" )

# NOTE: fallback entry must match the entry location in config_eth0
# As such you can only have one fallback route.


##############################################################################
# OPTIONAL MODULES

#-----------------------------------------------------------------------------
# WIRELESS (802.11 support)
# Wireless can be provided by iwconfig or wpa_supplicant

# iwconfig
# emerge net-wireless/wireless-tools
# Wireless options are held in /etc/conf.d/wireless - but could be here too
# Consult the sample file /etc/conf.d/wireless.example for instructions
# iwconfig is the default

# wpa_supplicant
# emerge net-wireless/wpa-supplicant
# Wireless options are held in /etc/wpa_supplicant.conf
# Consult the sample file /etc/wpa_supplicant.conf.example for instructions
# To choose wpa_supplicant over iwconfig
#modules=( "wpa_supplicant" )
# To configure wpa_supplicant
#wpa_supplicant_eth0="-Dprism54" # For Prism54 based cards
#wpa_supplicant_ath0="-Dmadwifi" # For Atheros based cards
# Consult wpa_supplicant for more drivers
# By default we give wpa_suppliant 60 seconds to associate and authenticate
#wpa_timeout_eth0=60

# GENERIC WIRELESS OPTIONS
# PLEASE READ THE INSTRUCTIONS IN /etc/conf.d/wireless.example FOR
# HOW TO USE THIS ESSID VARIABLE
# You can also override any settings found here per ESSID - which is very
# handy if you use different networks a lot
#config_ESSID=( "dhcp" )
#dhcpcd_ESSID="-t 5"

# 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
# set dhcp_ESSID="nodns"
#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 override any settings found here per MAC address of the AP
# 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" )

# When an interface has been associated with an Access Point, a global
# variable called ESSID is set to the Access Point's ESSID for use in the
# pre/post user functions below (although it's not available in preup as you
# won't have associated then)

# If you're using anything else to configure wireless on your interface AND
# you have installed any of the above packages, you need to disable them
#modules=( "!iwconfig" "!wpa_supplicant" )

#-----------------------------------------------------------------------------
# DHCP
# DHCP can be provided by dhcpcd, dhclient, udhcpc or pump
#
# dhcpcd:   emerge net-misc/dhcpcd
# dhclient: emerge net-misc/dhcp
# udhcpc:   emerge net-misc/udhcp
# pump:     emerge net-misc/pump

# If you have more than one DHCP client installed, you need to specify which
# one to use - otherwise we default to dhcpcd if available
#modules=( "udhcpc" ) # to select udhcpc over dhcpcd
#
# Notes:
# - dhcpcd, udhcpc and pump send the current hostname
#   to the DHCP server by default
# - dhcpcd does not daemonize when the lease time is infinite
# - udhcp-0.9.3-r3 and earlier does not support getting NTP servers 
# - dhclient does not support getting NTP servers 
# - pump does not support getting NIS servers
# - DHCP tends to erase any existing device information - so add
#   static addresses after dhcp if you need them

# Regardless of which DHCP client you prefer, you configure them the
# same way using one of following depending on which interface modules
# you're using.
#config_eth0=( "dhcp" )

# For passing custom options to dhcpcd use something like the following.  This
# example reduces the timeout for retrieving an address from 60 seconds (the
# default) to 10 seconds.
#dhcpcd_eth0="-t 10"

# dhclient, udhcpc and pump don't have many runtime options
# You can pass options to them in a similar manner to dhcpcd though
#dhclient_eth0="..."
#udhcpc_eth0="..."
#pump_eth0="..."

# To set options for dhclient, you need to have an /etc/dhclient.conf file
# See the dhclient man page for details

# GENERIC DHCP OPTIONS
# Set generic DHCP options like so
#dhcp_eth0="release nodns nontp nonis nogateway nosendhost"

# This tells the dhcp client to release it's lease when it stops, not to
# overwrite dns, ntp and nis settings, not to set a default route and not to
# send the current hostname to the dhcp server and when it starts.
# You can use any combination of the above options - the default is not to
# use any of them.

#-----------------------------------------------------------------------------
# Automatic Private IP Addressing (APIPA)
# For APIPA support, emerge net-misc/iputils or net-analyzer/arping

# APIPA is a module that tries to find a free address in the range
# 169.254.0.0-169.254.255.255 by arping a random address in that range on the
# interface. If no reply is found then we assign that address to the interface

# This is only useful for LANs where there is no DHCP server and you don't
# connect directly to the internet.
#config_eth0=( "dhcp" )
#fallback_eth0=( "apipa" )

#-----------------------------------------------------------------------------
# VLAN (802.1q support)
# For VLAN support, emerge net-misc/vconfig

# Specify the VLAN numbers for the interface like so
# Please ensure your VLAN IDs are NOT zero-padded
#vlans_eth0="1 2"

# You can also configure the VLAN - see for vconfig man page for more details
#vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
#vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
#config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
#config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )

# NOTE: Vlans can be configured with a . in their interface names
# When configuring vlans with this name type, you need to replace . with a _
#config_eth0.1=( "dhcp" ) - does not work
#config_eth0_1=( "dhcp" ) - does work

#-----------------------------------------------------------------------------
# Bonding
# For link bonding/trunking emerge net-misc/ifenslave

# To bond interfaces together
#slaves_bond0="eth0 eth1 eth2"
#config_bond0=( "null" ) # You may not want to assign an IP the the bond

# If any of the slaves require extra configuration - for example wireless or
# ppp devices - we need to write a depend function for the bond so they get
# configured correctly.
# This is exactly the same as a depend() function in our init scripts
#depend_bond0() {
#       need net.eth0 net.eth1
#}

#-----------------------------------------------------------------------------
# ADSL
# For ADSL support, emerge net-dialup/rp-pppoe 
# You should make the following settings and also put your
# username/password information in /etc/ppp/pap-secrets

# Configure the interface to use ADSL
#config_eth0=( "adsl" )

# You probably won't need to edit /etc/ppp/pppoe.conf if you set this
#adsl_user_eth0="my-adsl-username"

#-----------------------------------------------------------------------------
# ISDN
# For ISDN support, emerge net-dialup/isdn4k-utils
# You should make the following settings and also put your
# username/password information in /etc/ppp/pap-secrets

# Configure the interface to use ISDN
#config_ippp0=( "dhcp" )
# It's important to specify dhcp if you need it!
#config_ippp0=( "192.168.0.1/24" )
# Otherwise, you can use a static IP

# NOTE: The interface name must be either ippp or isdn followed by a number

# You may need this option to set the default route
#ipppd_eth0="defaultroute"

#-----------------------------------------------------------------------------
# MAC changer
# For changing MAC addresses emerge net-analyzer/macchanger

# - to set a specific MAC address
#mac_eth0="00:11:22:33:44:55"
# - to randomize the last 3 bytes only
#mac_eth0="random-ending"
# - to randomize between the same physical type of connection (eg fibre,
# copper, wireless) , all vendors
#mac_eth0="random-samekind"
# - to randomize between any physical type of connection (eg fibre, copper,
# wireless) , all vendors
#mac_eth0="random-anykind"
# - full randomization - WARNING: some MAC addresses generated by this may NOT
# act as expected
#mac_eth0="random-full"
# custom - passes all parameters directly to net-analyzer/macchanger
#mac_eth0="some custom set of parameters"

#-----------------------------------------------------------------------------
# TUN/TAP
# For TUN/TAP support emerge sys-apps/usermode-utilities
#
# NOTE: The interface name must be either tun or tap followed by a number
#config_tun1=( "192.168.0.1/24")

# For passing custom options to tunctl use something like the following.  This
# example sets the owner to adm
#tunctl_tun1="-u adm"

#-----------------------------------------------------------------------------
# Bridging (802.1d)
# For bridging support emerge net-misc/bridge-utils

# To add ports to bridge br0
#bridge_br0="eth0 eth1"

# You need to configure the ports to null values so dhcp does not get started 
#config_eth0=( "null" )
#config_eth1=( "null" )

# Finally give the bridge an address - dhcp or a static IP
#config_br0=( "dhcp" )
#config_br0=( "192.168.0.1/24" )

# If any of the ports require extra configuration - for example wireless or
# ppp devices - we need to write a depend function for the bridge so they get
# configured correctly.
# This is exactly the same as a depend() function in our init scripts
#depend_br0() {
#	need net.eth0 net.eth1
#}

# NOTE: This creates an interface called br0 - you can give the interface
# any name you like

# Below is an example of configuring the bridge
# Consult "man brctl" for more details
#brctl_br0=( "setfd 0" "sethello 0" "stp off" )

#-----------------------------------------------------------------------------
# Tunnelling
# For GRE tunnels
#iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# For IPIP tunnels
#iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# To configure the interface
#config_vpn0=( "192.168.0.2 pointopoint 192.168.1.2" )		# ifconfig style
#config_vpn0=( "192.168.0.2 peer 192.168.1.1" )			# iproute2 style

##############################################################################
# ADVANCED CONFIGURATION
# 
# Four functions can be defined which will be called surrounding the
# start/stop operations.  The functions are called with the interface
# name first so that one function can control multiple adapters.
#
# The return values for the preup and predown functions should be 0
# (success) to indicate that configuration or deconfiguration of the
# interface can continue.  If preup returns a non-zero value, then
# interface configuration will be aborted.  If predown returns a
# non-zero value, then the interface will not be allowed to continue
# deconfiguration.
#
# The return values for the postup and postdown functions are ignored
# since there's nothing to do if they indicate failure.
#
# ${IFACE} is set to the interface being brought up/down
# ${IFVAR} is ${IFACE} converted to variable name bash allows

#preup() {
#	# Test for link on the interface prior to bringing it up.  This
#	# only works on some network adapters and requires the mii-diag
#	# package to be installed.
#	if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
#		ewarn "No link on ${IFACE}, aborting configuration"
#		return 1
#	fi 
#
#	# Test for link on the interface prior to bringing it up.  This
#	# only works on some network adapters and requires the ethtool
#	# package to be installed.
#	if ethtool ${IFACE} | grep -q 'Link detected: no'; then
#		ewarn "No link on ${IFACE}, aborting configuration"
#		return 1
#	fi
#
#	# Remember to return 0 on success
#	return 0
#}

#predown() {
#	# The default in the script is to test for NFS root and disallow
#	# downing interfaces in that case.  Note that if you specify a
#	# predown() function you will override that logic.  Here it is, in
#	# case you still want it...
#	if is_net_fs /; then
#		eerror "root filesystem is network mounted -- can't stop ${IFACE}"
#		return 1
#	fi
#
#	# Remember to return 0 on success
#	return 0
#}

#postup() {
#	# This function could be used, for example, to register with a
#	# dynamic DNS service.  Another possibility would be to
#	# send/receive mail once the interface is brought up.
#	return 0
#}

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

##############################################################################
# FORCING MODULES
# The Big Fat Warning :- If you use module forcing do not complain to us or
# file bugs about it not working!
#
# Loading modules is a slow afair - we have to check each one for the following
# 1) Code sanity
# 2) Has the required package been emerged?
# 3) Has it modified anything?
# 4) Have all the dependant modules been loaded?

# Then we have to strip out the conflicting modules based on user preference
# and default configuration and sort them into the correct order.
# Finally we check the end result for dependancies.

# This, of course, takes valuable CPU time so we provide module forcing as a
# means to speed things up. We still do *some* checking but not much.

# It is essential that you force modules in the correct order and supply all
# the modules you need. You must always supply an interface module - we
# supply ifconfig or iproute2.

# The Big Fat Warning :- If you use module forcing do not complain to us or
# file bugs about it not working!

# Now that we've warned you twice, here's how to do it
#modules_force=( "ifconfig" )
#modules_force=( "iproute2" "dhcpcd" )

# We can also apply this to a specific interface
#modules_force_eth1=( "iproute2" )

# The below will not work
#modules_force=( "dhcpcd" )
# No interface (ifconfig/iproute2)
#modules_force=( "ifconfig" "essidnet" "iwconfig" )
# Although it will not crash, essidnet will not work as it has to come after
# iwconfig
#modules_force=( "iproute2" "ifconfig" )
# The interface will be setup twice which will cause problems
