<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sections SYSTEM "/dtd/book.dtd">

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->

<!-- $Id: hb-net-advanced.xml,v 1.2 2006/09/01 17:34:09 neysx Exp $ -->

<!-- Sync: 1.12 -->

<sections>

<version>7.0</version>
<date>2006-08-30</date>

<section>
<title>Geavanceerde configuratie</title>
<body>

<p>
De variabele <c>config_eth0</c> is het hart van een netwerkkaart configuratie.
Het is een geavanceerde instructielijst om de netwerkkaart (<c>eth0</c> in dit
geval) in te stellen. Elk commando wordt na het vorige uitgevoerd en wanneer
tenminste één commando werkt zal de netwerkkaart zijn werk kunnen uitvoeren.
</p>

<p>
Hieronder volgt een lijst met ingebouwde instructies.
</p>

<table>
<tr>
  <th>Commando</th>
  <th>Beschrijving</th>
</tr>
<tr>
  <ti><c>null</c></ti>
  <ti>Doe niets</ti>
</tr>
<tr>
  <ti><c>noop</c></ti>
  <ti>
    Wanneer de netwerkkaart het doet en er een IP adres is, breek dan de
    verdere configuratie af
  </ti>
</tr>
<tr>
  <ti>Een IPv4 of IPv6 adres</ti>
  <ti>Voeg het adres toe aan de netwerkkaart</ti>
</tr>
<tr>
  <ti>
    <c>dhcp</c>, <c>adsl</c> of <c>apipa</c> (of een ander commando van een
    ander programma)
  </ti>
  <ti>
    Start de module die het commando opgeeft. Zo zal <c>dhcp</c> een module
    starten die DHCP beschikbaar maakt, bijvoorbeeld <c>dhcpcd</c>,
    <c>udhcpc</c>, <c>dhclient</c> of <c>pump</c>.
  </ti>
</tr>
</table>

<p>
Voor het geval een commando niet werkt, kunt u een tweede keus opgeven. Deze
tweede keus moet de structuur van de configuratie bestanden uiteraard ook 
volgen.
</p>

<p>
U kunt verschillende commando's achter elkaar gebruiken. Hieronder volgen
enkele voorbeelden.
</p>

<pre caption="Voorbeeld instellingen">
<comment># Drie IPv4 adressen instellen</comment>
config_eth0=(
  "192.168.0.2/24"
  "192.168.0.3/24"
  "192.168.0.4/24"
)

<comment># Een IPv4 adres en twee IPv6 adressen instellen</comment>
config_eth0=(
  "192.168.0.2/24"
  "4321:0:1:2:3:4:567:89ab"
  "4321:0:1:2:3:4:567:89ac"
)

<comment># Gebruik van het door uw kernel bepaalde adres, tenzij het
# netwerk plaat gaat, gebruik dan DHCP. Als DHCP niet werkt, gebruik dan een
# vast IP adres, bepaald door APIPA</comment>
config_eth0=(
  "noop"
  "dhcp"
)
fallback_eth0=(
  "null"
  "apipa"
)
</pre>

<note>
Wanneer u de module <c>ifconfig</c> gebruikt en meer dan één adres toevoegt,
worden er aliassen gecreëerd voor de extra adressen. Dus met de bovenstaande
voorbeelden krijgt u de netwerk interfaces <c>eth0</c>, <c>eth0:1</c> en
<c>eth0:2</c>. U kunt verder niets met deze interfaces; de kernel en alle
toepassing zullen ze als <c>eth0</c> beschouwen.
</note>

<impo>
Het instellen van de tweede keus is heel belangrijk. Indien we de optie
<c>null</c> niet instellen, zal <c>apipa</c> alleen starten wanneer <c>noop</c>
niet werkt namelijk.
</impo>

<note>
<uri link="?part=4&amp;chap=3#apipa">APIPA</uri> en <uri
link="?part=4&amp;chap=3#dhcp">DHCP</uri> worden later besproken.
</note>

</body>
</section>
<section>
<title>Netwerk afhankelijkheden</title>
<body>

<p>
De init scripts in de map <path>/ect/init.d</path> kunnen op een specifieke
netwerkkaart zijn toegespitst of in het algemeen op de netwerkkaarten. 
<c>net</c> kunt u definiëren in <path>/etc/conf.d/rc</path>. Hier kunnen 
verschillende instellingen worden gekozen via <c>RC_NET_STRICT_CHECKING</c>.
</p>

<table>
<tr>
  <th>Waarde</th>
  <th>Beschrijving</th>
</tr>
<tr>
  <ti><c>none</c></ti>
  <ti>De service <path>net</path> wordt geacht altijd online te zijn</ti>
</tr>
<tr>
  <ti><c>no</c></ti>
  <ti>
    Dit betekent dat er tenminste één service van het type <path>net.*</path>
    moet werken naast <path>net.lo</path>. Dit is handig voor laptop gebruikers
    die een WIFI en een vaste netwerkverbinding hebben en slechts één van
    beiden tegelijk online willen hebben.
  </ti>
</tr>
<tr>
  <ti><c>lo</c></ti>
  <ti>
    Dit een zelfde optie als de optie <c>no</c>, alleen wordt nu
    <path>net.lo</path> ook meegeteld. Dit is handig voor mensen die niet
    altijd een netwerkkaart willen opstarten.
  </ti>
</tr>
<tr>
  <ti><c>yes</c></ti>
  <ti>
    In dit geval moeten ALLE netwerkkaarten werken om de service
    <path>net</path> als online te laten zien.
  </ti>
</tr>
</table>

<p>
Maar hoe werkt het nu wanneer u <path>net.br0</path> heeft, die afhankelijk
is van <path>net.eth0</path> en <path>net.eth1</path>? <path>net.eth1</path>
kan in dit geval bijvoorbeeld een wireless of PPP verbinding zijn, die moet
worden ingesteld voordat deze wordt toegevoegd aan de netwerkbrug. Dit kan niet
gebeuren in <path>/etc/init.d/net.br0</path>, aangezien dit een symlink naar
<path>net.lo</path> is.
</p>

<p>
Hiervoor zult u een eigen <c>depend()</c> functie in 
<path>/etc/conf.d/net</path> moeten aanmaken.
</p>

<pre caption="net.br0 afhankelijkheden in /etc/conf.d/net">
<comment># U kunt afhankelijkheid gebruiken, zoals gevonden in andere scripts</comment>
depend_br0() {
  need net.eth0 net.eth1
}
</pre>

<p>
Voor een uitgebreidere uitleg over afhankelijkheden, kunt u het hoofdstuk
<uri link="?part=2&amp;chap=4#doc_chap4">Initialisatie Scripts</uri> lezen
uit het Gentoo handboek.
</p>

</body>
</section>

<section id="variable_name">
<title>Namen en waarden van variabelen</title>
<body>

<p>
Namen van variabelen veranderen. Meestal volgen ze een gelijke structuur als
<c>variable_${interface|mac|essid|apmac}</c>. Zo bevat de variabele
<c>dhcpcd_eth0</c> de waarde voor de dhcpcd opties voor eth0 en bevat
<c>dhcpcd_essid</c> de waarde voor de dhcpcd opties met betrekking tot de
interface die verbinding maakt met de ESSID "essid".
</p>

<p>
Er zijn echter geen vaste regels voor het benoemen van netwerk interfaces. Ze
dus ethx heten, maar veel draadloze interfaces heten bijvoorbeeld wlanx, rax of
toch gewoon ethx. Sommige interfaces, zoals netwerkbruggen, kunnen een
willekeurige naam hebben. En wireless Acces Points kunnen zelfs namen hebben
met niet alpha-numerieke karakters erin - dit is belangrijk om te weten, omdat
u parameters voor uw netwerk kunt instellen per ESSID.
</p>

<p>
Er is echter één maar: Gentoo gebruikt bash variabelen voor het netwerk - en
bash kan alleen Engelse alpha-numerieke karakters gebruiken. Daarom worden alle
niet alpha-numerieke karakters omgezet in een <c>_</c>.
</p>

<p>
Een ander nadeel van bash, is de inhoud van de variabelen - sommige karakters
moeten vooraf gegaan worden door een <c>\</c>, het zogenaamde escapen. Dit
geldt voor de volgende karakters: <c>"</c>, <c>'</c> en <c>\</c>.
</p>

<p>
In het volgende voorbeeld zullen we verschillende karakters gebruiken. We
noemen daarom de ESSID <c>My "\ NET</c>:
</p>

<pre caption="Voorbeeld naam voor variabele">
<comment># Dit werkt wel, maar het domein is niet geldig</comment>
dns_domain_My____NET="My \"\\ NET"

<comment># Het bovenstaande stelt het dns domein in op My "\ NET voor een
# voor een draadloos netwerk waarvan de ESSID My "\ NET is</comment>
</pre>

</body>
</section>
</sections>
