Het is tegenwoordig nauwelijks voorstelbaar dat een computer geen netwerkverbinding heeft. Het toevoegen en instellen van een netwerkkaart is een gebruikelijke taak voor een FreeBSD-beheerder.
Voor het zoeken begint, moet duidelijk zijn om welke kaart het gaat, welke chip erop zit en of het een PCI- of ISA-kaart is. FreeBSD ondersteunt vele kaarten. Op de Hardware Compatibiliteitslijst voor de betreffende uitgave staan de kaarten die ondersteund worden.
Als duidelijk is dat een kaart ondersteund wordt, moet
vastgesteld worden wat het geschikte stuurprogramma is. In het
bestand /usr/src/sys/conf/NOTES
staat een
lijst van stuurprogramma's voor netwerkinterfaces met wat
informatie over de ondersteunde chipsets of kaarten. In geval
van twijfel biedt de hulppagina voor het stuurprogramma
(man
) vaak uitkomst. In het algemeen bevat
deze meer informatie over de ondersteunde hardware en mogelijke
problemen die kunnen optreden.
Als een veelgebruikte kaart gebruikt wordt, hoeft meestal
niet ver gezocht te worden. Stuurprogramma's voor
veelvoorkomende netwerkinterfaces zijn al aanwezig in de
algemene kernel GENERIC
. In dat geval
wordt zo'n kaart al gevonden bij het opstarten, bijvoorbeeld met
het volgende bericht:
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 miibus0: <MII bus> on dc0 bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0 bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc0: Ethernet address: 00:a0:cc:da:da:da dc0: [ITHREAD] dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 miibus1: <MII bus> on dc1 bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1 bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: Ethernet address: 00:a0:cc:da:da:db dc1: [ITHREAD]
In dit voorbeeld zitten er twee kaarten in het systeem die het stuurprogramma dc(4) gebruiken.
Als het stuurprogramma voor een NIC geen onderdeel is van de
kernel GENERIC
, dan dient het juiste
stuurprogramma voor die NIC geladen te worden. Dit kan op twee
manieren:
De meest eenvoudige manier is het laden van een
kernelmodule voor een netwerkkaart met kldload(8) of
automatisch tijdens het opstarten van het systeem door de
benodigde regel toe te voegen aan
/boot/loader.conf
. Niet alle
NIC-stuurprogramma's zijn als module beschikbaar. Zo zijn
er bijvoorbeeld geen modules beschikbaar voor
ISA-kaarten.
Ondersteuning voor een kaart kan ook in de kernel
gecompileerd worden. In
/usr/src/sys/conf/NOTES
,
/usr/src/sys/arch/conf/NOTES
en de hulppagina van het stuurprogramma is na te lezen wat
er in het kernelinstellingenbestand moet staan. In Hoofdstuk 9, De FreeBSD-kernel instellen staat meer informatie over het
compileren van een eigen kernel. Als een netwerkkaart al
bij het opstarten wordt herkend door de kernel
GENERIC
, is er geen reden om een andere
kernel te bouwen.
Helaas zijn er nog steeds veel leveranciers die geen schema's leveren voor stuurprogramma's aan de open-source gemeenschap, omdat ze deze informatie beschouwen als handelsgeheimen. Als gevolg daarvan hebben de ontwikkelaars van FreeBSD en andere projecten twee keuzes: zelf de stuurprogramma's ontwikkelen door een langdurig en pijnlijk proces van de huidige stuurprogramma's te ontcijferen, of door gebruik te maken van de huidige binaire bestanden voor het Microsoft® Windows® platform. De meeste ontwikkelaars, inclusief diegeen die gekoppeld zijn aan FreeBSD, hebben voor het laatste gekozen.
Dankzij de bijdragen van Bill Paul (wpaul) is er “native” ondersteuning voor de Network Driver Interface Specification (NDIS). De FreeBSD NDISulator (ook wel bekend als Project Evil) neemt een binair Windows® stuurprogramma en doet net alsof deze in een Windows® systeem draait. Omdat het stuurprogramma ndis(4) een Windows® binary gebruikt; draait het alleen op i386™- en amd64-systemen. PCI, CardBus, PCMCIA (PC-Card) en USB-apparaten worden ondersteund.
Om de NDISulator te gebruiken zijn drie dingen nodig:
De bronbestanden van de kernel
Een Windows® XP stuurprogramma (met de extensie
.SYS
)
Een instellingenbestand van het Windows® XP
stuurprogramma (met de extensie
.INF
)
Lokaliseer de bestanden voor uw specifieke kaart. Over
het algemeen kunnen deze gevonden worden op de bijgeleverde
CD's of op de website van de leverancier. In de volgende
voorbeelden maken we gebruik van
W32DRIVER.SYS
en
W32DRIVER.INF
.
De bit-breedte van het stuurprogramma moet overeenkomen met die van het stuurprogramma. Gebruik voor FreeBSD/i386 een 32-bits Windows® stuurprogramma. Voor FreeBSD/amd64 is een 64-bits Windows® stuurprogramma nodig.
De volgende stap is het compileren van het binaire
stuurprogramma in een laadbare kernelmodule. Gebruik ndisgen(8)
als root
:
#
ndisgen /pad/naar/W32DRIVER.INF /pad/naar/W32DRIVER.SYS
ndisgen(8) is interactief en vraagt om extra informatie als het dat nodig heeft. Een nieuwe kernel-module wordt in de huidige map geschreven. Gebruik kldload(8) om de nieuwe module te laden:
#
kldload ./W32DRIVER_SYS.ko
Naast de gegenereerde kernelmodule, moeten ook de modules
ndis.ko
en
if_ndis.ko
geladen worden. Dit zou
automatisch moeten gebeuren als er een module geladen wordt
dit afhankelijk is van ndis(4). Als ze handmatig
ingeladen moeten worden gebruik dan de volgende
commando's:
#
kldload ndis
#
kldload if_ndis
Het eerste commando laadt de stuurprogrammawrapper voor de NDIS miniport, de tweede laadt de daadwerkelijke netwerkinterface.
Controleer nu dmesg(8) om te zien of er ergens fouten voorkomen. Als alles goed gegaan is ziet u ongeveer het volgende:
ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1 ndis0: NDIS API version: 5.0 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps
Vanaf dit moment kan de ndis0
net zo gebruikt worden als elke andere netwerkkaart (bv.
dc0
).
Het systeem kan geconfigureerd worden zodat de
NDIS-modules automatisch gestart worden tijdens het opstarten
van het systeem, net zoals bij andere modules. Kopieer eerst
de gegenereerde module W32DRIVER_SYS.ko
naar
de map /boot/modules
.
Voeg daarna de volgende regel toe aan
/boot/loader.conf
:
W32DRIVER_SYS_load="YES"
Nadat een geschikt stuurprogramma geladen is, moet de kaart nog ingesteld worden. Mogelijk is dit al gebeurd door sysinstall tijdens de installatie.
Om de instellen van de netwerkkaarten weer te geven:
%
ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:db inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 media: Ethernet 10baseT/UTP status: no carrier lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 inet6 ::1 prefixlen 128 nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
In dit voorbeeld werden de volgende apparaten weergegeven:
dc0
: de eerste
Ethernet-interface;
dc1
: de tweede
Ethernet-interface;
lo0
: het
loopback-apparaat;
FreeBSD gebruikt de naam van het stuurprogramma gevolgd door
een nummer voor de volgorde waarop de kaarten gedetecteerd zijn
bij het opstarten. sis2
is de derde
netwerkkaart in het systeem die het stuurprogramma sis(4)
gebruikt.
In het vorige voorbeeld is het apparaat
dc0
volledig operationeel. Dit blijkt
uit de volgende indicatoren:
UP
betekent dat de kaart ingesteld is
en klaar is voor gebruik;
De kaart heeft een Internet (inet
)
adres (in dit geval 192.168.1.3
);
Het heeft een geldig subnetmasker
(netmask
; 0xffffff00
is hetzelfde als
255.255.255.0
);
Het heeft een geldig broadcastadres (in dit geval
192.168.1.255
);
Het MAC-adres van de kaart (ether
) is
00:a0:cc:da:da:da
;
De fysieke mediaselectie staat in autoselectiemodus
(media: Ethernet autoselect (100baseTX
<full-duplex>)
).
dc1
is ingesteld om met
10baseT/UTP
-media te werken. Meer
informatie over de mogelijke mediatypes staan in de
hulppagina's voor het betreffende stuurprogramma.
De status van de verbinding (status
)
is active
, dat wil zeggen dat de drager
is gevonden. Bij dc1
staat echter
status: no carrier
. Dit is normaal als
er geen Ethernetkabel in de kaart gestoken is.
Als de uitvoer ifconfig(8) er ongeveer zoals hieronder uitziet, dan is de netwerkkaart nog niet ingesteld:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active
Om de kaart in te stellen zijn
root
-rechten nodig. De netwerkkaart kan
vanaf de console worden ingesteld met ifconfig(8), maar dan
moet dat na elke herstart herhaald worden. Daarom wordt het
vrijwel altijd in /etc/rc.conf
gezet.
In /etc/rc.conf
moet voor elke
netwerkkaart in een systeem een regel toegevoegd worden. In het
huidige voorbeeld zou dat het volgende kunnen zijn:
ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
dc0
, dc1
,
enzovoort, moeten vervangen worden door de correcte
stuurprogramma's voor de netwerkkaarten, zo ook de
IP-adressen. In de handleiding van het
stuurprogramma en van ifconfig(8) staan meer details over
de mogelijke opties en in rc.conf(5) staat meer informatie
over /etc/rc.conf
.
Als het netwerk al is ingesteld tijdens het installeren van
FreeBSD staan er al enkele regels met betrekking tot de
netwerkkaart(en) in /etc/rc.conf
. Het is
dus handig /etc/rc.conf
te controleren
voordat er regels toegevoegd worden.
Ook /etc/hosts
moet worden gewijzigd om
de namen en IP adressen van verschillende
machines op het lokale netwerk, als ze er nog niet in staan.
Meer informatie staat in hosts(5) en
/usr/share/examples/etc/hosts
.
Als internettoegang nodig is met dit apparaat, kan het zijn dat de default gateway en de naamserver handmatig moeten worden ingesteld:
#
echo 'defaultrouter="your_default_router"' >> /etc/rc.conf
#
echo 'nameserver your_DNS_server' >> /etc/resolv.conf
Als de veranderingen in /etc/rc.conf
zijn gemaakt, moet het systeem opnieuw gestarten worden (of
moeten nauwkeurig alle daemons gestart of herstart worden).
Veranderingen aan de interface(s) worden dan toegepast en dan
kan er controleerd worden of herstarten goed werkt zonder
foutmeldingen. Als alternatief kan ook het netwerk systeem
herstart worden:
#
service netif restart
Als er ook een default gateway ingesteld is in het
/etc/rc.conf
bestand, moet ook onderstaand
command worden gegeven:
#
service routing restart
Zodra het netwerk systeem is herstart, moeten de netwerk interfaces opnieuw getest worden.
Om te controleren of een ethernet kaart goed geconfigureerd is, moeten er twee dingen gedaan worden. Allereerst, ping de interface zelf, en daarna een andere machine op het LAN.
Test eerst de lokale interface:
%
ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
Nu kan er een andere machine op het LAN gepinged worden:
%
ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms
Dit kan ook worden geprobeerd met de machine naam in plaats
van met 192.168.1.2
als dit
geconfigureerd is in /etc/hosts
.
Het testen en zoeken van problemen is altijd een pijnpunt, welke verminderd kan worden door een aantal simpele dingen eerst te controleren. Is de netwerkkabel ingestoken? Zijn de netwerk instellingen correct opgegeven? Is de firewall goed geconfigureerd? Is de netwerkkaart ondersteund door FreeBSD? Controleer altijd de hardware notities voordat er een probleem rapport wordt verstuurd. Update naar de laatste -STABLE versie, en controleer de mailing lijsten en misschien zelfs het internet.
Als de kaart werkt, maar de prestaties zijn slecht, dan kan het de moeite waard zijn om tuning(7) door te nemen. Incorrecte netwerkinstellingen kunnen ook tot langzame verbindingen leiden.
Soms kunnen enkele device timeouts optreden. Met sommige kaarten is dit normaal gedrag. Maar als dit continu gebeurt of storend is, is het verstandig uit te zoeken of er geen sprake is van een hardwareconfict tussen de netwerkkaart en een ander apparaat. Ook dient nogmaals de bekabeling gecontroleerd te worden. Misschien zit er niets anders op dan een andere netwerkkaart te gebruiken.
Het is ook mogelijk dat er watchdog timeout foutmeldingen optreden. Als eerste moet dan de netwerkkabel gecontroleerd worden. Veel kaarten hebben een PCI-slot nodig dat Bus Mastering ondersteunt. Sommige oudere moederborden hebben maar één PCI-slot waarmee dit kan (meestal slot 0). In de documentatie van de netwerkkaart en het moederbord is na te gaan of dit het probleem is.
No route to host meldingen treden op
als het systeem niet in staat is om een pakket naar de
eindbestemming te routeren. Dit kan gebeuren als er geen
standaardroute aangegeven is of als er een kabel niet verbonden
is. De uitvoer van netstat -rn
moet
gecontroleerd worden of er een geldige route is naar de
bestemming. Mocht dit niet het geval zijn, dan staat er meer
informatie in Hoofdstuk 31, Geavanceerde netwerken.
ping: sendto: Permission denied
foutmeldingen worden vaak veroorzaakt door een verkeerd
ingestelde firewall. Als de kernel ipfw
activeert bij het opstarten zonder dat er firewallregels zijn
gedefiniëerd, is het standaardbeleid om alle verkeer te
weigeren, zelfs pings! In Hoofdstuk 30, Firewalls staat meer
informatie.
Er kan ook sprake zijn van onvoldoende prestaties doordat de
instelling van de mediaselectie niet optimaal is. In dergelijke
gevallen is het mogelijk om de mediaselectie niet als
autoselect
in te stellen, maar expliciet aan
te geven wat de mediaselectie moet zijn, bijvoorbeeld
10baseT/UTP voor twisted pair. Hoewel dit voor de meeste
hardware helpt, kan het zijn dat de problemen blijven. Dan
moeten nogmaals de netwerkinstellingen gecontroleerd worden en
geeft de tuning(7) handleiding wellicht meer
informatie.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.