[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
2. Advanced Configuration
Content:
2.a. Advanced Configuration
The config_eth0 variable is the heart of an interface configuration. It's
a high level instruction list for configuring the interface (eth0 in this
case). Each command in the instruction list is performed sequentially. The
interface is deemed OK if at least one command works.
Here's a list of built-in instructions.
| Command |
Description |
| null |
Do nothing |
| noop |
If the interface is up and there is an address then abort configuration
successfully
|
| an IPv4 or IPv6 address |
Add the address to the interface |
|
dhcp, adsl or apipa (or a custom command from a 3rd
party module)
|
Run the module which provides the command. For example dhcp will run
a module that provides DHCP which can be one of either dhcpcd,
dhclient or pump.
|
If a command fails, you can specify a fallback command. The fallback has to
match the config structure exactly.
You can chain these commands together. Here are some real world examples.
Code ListingĀ 1.1: Configuration examples |
config_eth0=(
"192.168.0.2/24"
"192.168.0.3/24"
"192.168.0.4/24"
)
config_eth0=(
"192.168.0.2/24"
"4321:0:1:2:3:4:567:89ab"
"4321:0:1:2:3:4:567:89ac"
)
config_eth0=(
"noop"
"dhcp"
)
fallback_eth0=(
"null"
"apipa"
)
|
Note:
When using the ifconfig module and adding more than one address,
interface aliases are created for each extra address. So with the above two
examples you will get interfaces eth0, eth0:1 and eth0:2.
You cannot do anything special with these interfaces as the kernel and other
programs will just treat eth0:1 and eth0:2 as eth0.
|
Important:
The fallback order is important! If we did not specify the null option
then the apipa command would only be run if the noop command
failed.
|
Note:
APIPA and DHCP are discussed later.
|
2.b. Network Dependencies
Init scripts in /etc/init.d can depend on a specific network
interface or just net. net can be defined in /etc/conf.d/rc
to mean different things using the RC_NET_STRICT_CHECKING variable.
| Value |
Description |
| none |
The net service is always considered up |
| no |
This basically means that at least one net.* service besides
net.lo must be up. This can be used by notebook users that
have a WIFI and a static NIC, and only wants one up at any given time to
have the net service seen as up.
|
| lo |
This is the same as the no option, but net.lo is also
counted. This should be useful to people that do not care about any specific
interface being up at boot.
|
| yes |
For this ALL network interfaces MUST be up for the net service
to be considered up.
|
But what about net.br0 depending on net.eth0 and
net.eth1? net.eth1 may be a wireless or PPP device
that needs configuration before it can be added to the bridge. This cannot be
done in /etc/init.d/net.br0 as that's a symbolic link to
net.lo.
The answer is making your own depend() function in
/etc/conf.d/net.
Code ListingĀ 2.1: net.br0 dependency in /etc/conf.d/net |
depend_br0() {
need net.eth0 net.eth1
}
|
For a more detailed discussion about dependency, consult the section Writing Init Scripts in the Gentoo
Handbook.
2.c. Variable names and values
Variable names are dynamic. They normally follow the structure of
variable_${interface|mac|essid|apmac}. For example, the variable
dhcpcd_eth0 holds the value for dhcpcd options for eth0 and
dhcpcd_essid holds the value for dhcpcd options when any interface
connects to the ESSID "essid".
However, there is no hard and fast rule that states interface names must be
ethx. In fact, many wireless interfaces have names like wlanx, rax as well as
ethx. Also, some user defined interfaces such as bridges can be given any name,
such as foo. To make life more interesting, wireless Access Points can have
names with non alpha-numeric characters in them - this is important because
you can configure networking parameters per ESSID.
The downside of all this is that Gentoo uses bash variables for networking -
and bash cannot use anything outside of English alpha-numerics. To get around
this limitation we change every character that is not an English alpha-numeric
into a _ character.
Another downside of bash is the content of variables - some characters need to
be escaped. This can be achived by placing the \ character in front of
the character that needs to be escaped. The following list of characters needs
to be escaped in this way: ", ' and \.
In this example we use wireless ESSID as they can contain the widest scope
of characters. We shall use the ESSID My "\ NET:
Code ListingĀ 3.1: variable name example |
dns_domain_My____NET="My \"\\ NET"
|
[ << ]
[ < ]
[ Home ]
[ > ]
[ >> ]
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|