Manapság már el sem tudunk képzelni számítógépet hálózati csatlakozás nélkül. A hálózati csatolókártyák hozzáadása és beállítása egy FreeBSD rendszergazda mindennapos feladata.
Mielőtt bárminek is nekikezdenénk, érdemes tisztában lennünk azzal, hogy a rendelkezésünkre álló kártya milyen típusú, milyen chipet használ és hogy PCI vagy ISA buszon csatlakozik-e. A FreeBSD a PCI és ISA csatolós kártyák széles spektrumát ismeri. Az egyes kiadásokhoz mellékelt “Hardware Compatibility List” (Hardverkompatibilitási lista) dokumentumokban tudjuk ellenőrizni, hogy a kártyákat ismeri a rendszer.
Miután meggyőződtünk róla, hogy a kártyánkat ismeri a rendszer, meg kell keresnünk a hozzátartozó meghajtót. A /usr/src/sys/conf/NOTES és a /usr/src/sys/arch/conf/NOTES állományok tartalmazzák a hálózati kártyák meghajtóinak rövid leírását, benne a támogatott chipsetek és kártyák típusaival. Ha ez alapján nem tudjuk teljes biztosággal eldönteni, hogy melyik a számunkra megfelelő meghajtó, nézzük meg a saját man oldalát. Ezen a man oldalon megtaláljuk az által ismert összes eszközt és velük kapcsolatban előforduló jellemző problémákat.
Ha egy elterjedt típust sikerült beszereznünk, akkor nem kell különösebben sokáig keresnünk a neki megfelelő meghajtót. Az ismertebb hálózati kártyák meghajtói ugyanis alapból benne vannak a GENERIC rendszermagban, ezért a rendszer indítása során ehhez hasonlóan meg is jelennek a kártyák:
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
Ebben a példában láthatunk is két olyan kártyát, amelyek a dc(4) meghajtót használják.
Ha a hálózati kártyánk meghajtója nem szerepel a GENERIC konfigurációban, akkor a működéséhez be kell tölteni a megfelelő meghajtót. Ezt alapvetően kétféleképpen érhetjük el:
Ennek legegyszerűbb módja, ha a kldload(8) használatával alkalmanként vagy a /boot/loader.conf állományban a megfelelő sor hozzáadásával a rendszer indításával együtt betöltjük a hálózati kártya meghajtójához tartozó modult. Nem mindegyik hálózati kártya meghajtója érhető el modul formájában. Erre konkrét például szolgálnak az ISA kártyákhoz tartozó modulok.
Másik lehetőségünk, ha statikusan beépítjük a kártyánk támogatását a rendszermagba. A /usr/src/sys/conf/NOTES és az /usr/src/sys/arch/conf/NOTES állományok, valamint a meghajtóhoz tartozó man oldal elolvasásából megtudhatjuk a rendszermag beállításait tartalmazó állományban megadandó paramétereket. A rendszermag újrafordítását lásd 8 fejezet. Ha a rendszermag (GENERIC) az indulás során észlelte a kártyánkat, nem kell újat készítenünk.
Sajnos még mindig sok olyan gyártó akad, akik a nyílt forrású közösség számára nem adják ki a meghajtóik működésének alapjait, mivel az ilyen adatokat szakmai titkoknak tekintik. Ebből következik, hogy a FreeBSD és más operációs rendszerek fejlesztői számára két választás marad: vagy a gyári meghajtók visszafejtésének hosszú és fájdalmas útján haladva fejlesztik ki a saját meghajtójukat, vagy pedig a Microsoft® Windows platformra kiadott meghajtók binárisait hasznosítják. A legtöbb fejlesztő, köztük a FreeBSD fejlesztői is, ez utóbbi megközelítést választották.
Bill Paul (wpaul) jóvoltából a FreeBSD 5.3-RELEASE változatában megjelent a “Network Driver Interface Specification” (NDIS, avagy hálózati meghajtók szabványos felülete) “natív” támogatása. A FreeBSD NDISulator (másnéven Project Evil, a Gonosz terve) nevű komponense fog egy Windows-os meghajtót és elhiteti vele, hogy a Windows-szal kommunikál. Mivel az ndis(4) meghajtó Windows binárisokat használ fel, ezért csak i386 és amd64 rendszerek esetén érhető el.
Megjegyzés: Az ndis(4) meghajtó leginkább a PCI, CardBus és PCMCIA csatolójú eszközök támogatására lett kitalálva, az USB eszközöket még nem ismeri.
Az NDISulator használatához három tényezőre van szükségünk:
A rendszermag forrása
a Windows XP meghajtó binárisa (.SYS a kiterjesztése)
a Windows XP meghajtó konfigurációs állománya (.INF a kiterjesztése)
Keressük meg az említett állományokat az adott kártyához. Ezeket általában a mellékelt CD-n vagy a gyártó honlapján találjuk meg. A most következő példákban a W32DRIVER.SYS és a W32DRIVER.INF neveket fogjuk használni.
Megjegyzés: A Windows i386 architektúrájú verziójához készült meghajtóprogramokat nem tudjuk a FreeBSD/amd64 verziójával használni. A működéshez amd64-re készült Windows-os meghajtókra van szükség.
A következő lépés a meghajtó binárisainak betölthető modulba fordítása. Ennek eléréséhez használjuk az ndisgen(8) parancsot a root felhasználóval:
# ndisgen /windowszos/meghajtó/W32DRIVER.INF /windowsos/meghajtó/W32DRIVER.SYS
Az ndisgen(8) egy interaktív segédprogram, amely működése közben még rákérdez néhány szükséges információra. Az aktuális könyvtárban létrehoz egy rendszermagmodult, amelyet az alábbi módon tudunk betölteni:
# kldload ./W32DRIVER.ko
Az előállított modul mellé be kell töltenünk még az ndis.ko és az if_ndis.ko modulokat is. Ez általában minden olyan modul esetén megtörténik magától, amely függ az ndis(4) használatától. Kézileg az következő parancsokkal tudjuk ezeket betölteni:
# kldload ndis # kldload if_ndis
Itt az első parancs betölti az NDIS miniport meghajtó burkolására szánt kódot, valamint a második a tényleges hálózati csatolófelületet.
Most pedig a dmesg(8) kimenetében ellenőrizzük, hogy történt-e valamilyen hiba a betöltés során. Ha minden jól ment, akkor az alábbiakhoz hasonló kimenetet produkált:
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
Innentől kezdve az ndis0 nevű eszközt úgy tudjuk használni, mint bármelyik más hálózati felületet (például dc0).
A többi modulhoz hasonló módon be tudjuk állítani, hogy a rendszer indulásával együtt betöltődjenek az NDIS modulok. Ehhez először másoljuk az imént létrehozott modult, az W32DRIVER.ko állományt a /boot/modules könyvtárba. Ezután adjuk hozzá a következő sort a /boot/loader.conf állomány tartalmához:
W32DRIVER_load="YES"
Ahogy betöltődött a megfelelő meghajtó a hálózati kártyánkhoz, be is kell állítanunk a kártyát. A hálózati kártyák sok más dologgal együtt beállíthatóak a telepítés során a sysinstall segítségével.
A rendszerünkben beállított hálózati csatolófelületek megjelenítéséhez gépeljük be a következő parancsot:
% ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
Megjegyzés: A FreeBSD korábbi változatainál az ifconfig(8) parancsnak ehhez még meg kell adni az
-a
kapcsolót is. Az ifconfig(8) érvényes paraméterezésével kapcsolatban legyünk szívesek elolvasni a hozzátartozó man oldalt. Hozzátennénk, hogy IPv6 (inet6 stb.) típusú bejegyzések nem szerepelnek a példában.
Az előbbi parancs kimenetében a következő eszközök jelentek meg:
dc0: az első Ethernet felület
dc1: a második Ethernet felület
lp0: a párhuzamos port felülete
lo0: a loopback eszköz
tun0: a ppp által használt tunnelhez tartozó eszköz
A FreeBSD a kártyához tartozó meghajtó nevével és egy sorszámmal azonosítja a rendszermag indulása során talált eszközöket. Például az sis2 a rendszerben található harmadik olyan eszköz, amely a sis(4) meghajtót használja.
A példában a dc0 eszköz aktív és működőképes. Ennek legfontosabb jelei:
Az UP szó mutatja, hogy a kártyát sikerült beállítani és készen áll a használatra.
A kártya internet (inet) címe (jelen esetünkben ez 192.168.1.3).
Érvényes hálózati maszkkal rendelkezik (netmask, ahol a 0xffffff00 a 255.255.255.0 címnek felel meg).
Érvényes broadcast (üzenetszóró) címmel rendelkezik (ami itt most 192.168.1.255).
A kártya MAC-címe (ether) 00:a0:cc:da:da:da.
A hozzátartozó fizikai eszköz kiválasztása automatikus (media: Ethernet autoselect (100baseTX <full-duplex>)). Láthatjuk, hogy a dc1 eszközt egy 10baseT/UTP típusú fizikai eszközhöz állítottuk be. Az egyes meghajtókhoz tartozó fizikai módokról a nekik megfelelő man oldalakon olvashatunk.
A kapcsolat állapota (status) active értékű, tehát van vonal. A dc1 esetén láthatjuk, hogy a status: no carrier (nincs vonal). Ez teljesen normálisnak tekinthető minden olyan esetben, amikor a kártyába még nem dugtunk Ethernet-kábelt.
Amennyiben az ifconfig(8) kimenete valami ilyesmi:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da
akkor az arra utal, hogy a kártyát nem állítottuk be.
A kártya beállításához a root felhasználó jogosultságaira van szükségünk. A hálózati kártyák beállítása az ifconfig(8) segítségével elvégezhető parancssorból is, de a gép újraindításakor az így megadott értékek elvesznek. Ezért az /etc/rc.conf állományba kell felvennünk a hálózati kártyák érvényes beállításait.
A kedvenc szövegszerkesztőnkben nyissuk meg az /etc/rc.conf állományt. Minden egyes hálózati csatolóhoz fel kell vennünk benne egy sort, ennek megfelelően most a példához tartozó módon az alábbiakat:
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"
A dc0 és dc1 neveket kell a rendszerünkben ténylegesen megtalálható eszközök neveire kicserélni, valamint megadni a nekik megfelelő címeket. A kártya meghajtójának és az ifconfig(8) man oldalának elolvasásával kideríthetjük az itt megadható további beállításokat, valamint az rc.conf(5) man oldalán részletesebben megismerhetjük az /etc/rc.conf formai követelményeit.
Ha a telepítés során beállítottuk volna a hálózati kapcsolatokat, akkor tapasztalhatjuk, hogy egyes hálózati kártyák sorai itt már szerepelnek. Ellenőrizzük le az /etc/rc.conf tartalmát mielőtt bővítenénk!
Mindezek mellett az /etc/hosts állományba is be kell írnunk a helyi hálózatunkon található különféle gépek neveit és IP-címeit, ha még nem szerepelnének ott. Erről további részleteket a hosts(5) man oldalról és az /usr/share/examples/etc/hosts állományból tudhatunk meg.
Miután az /etc/rc.conf állományban elvégeztük a szükséges változtatásokat, érdemes újraindítanunk a rendszerünket. Ennek révén érvényesítjük a csatolófelületekkel kapcsolatos változtatásainkat és ellenőrizzük, hogy így a rendszer mindenféle hibaüzenet nélkül képes elindulni.
Ahogy a rendszerünk működőképessé vált, ki is tudjuk próbálni a hálózati felületeket.
Az Ethernet kártyák helyes beállításának vizsgálatához két dolgot kell kipróbálnunk. Először is pingeljük magát a felületet, majd ezután pingeljünk meg a helyi hálózaton egy másik számítógépet.
Elsőként tehát próbáljuk meg a helyi felületet:
% 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
Most pedig pingeljünk meg egy másik számítógépet a helyi hálózaton:
% 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
Ha beállítottuk az /etc/hosts állományt, akkor a 192.168.1.2 helyett a gép nevét is megadhatjuk.
A hardverek és szoftverek beállításaiban mindig is valódi kín megtalálni a hibákat, és ezeket a kínokat többnyire úgy tudjuk enyhíteni, ha először az egyszerű hibaforrásokat szűrjük ki. Csatlakoztattuk a hálózati kábelt? Tisztességesen beállítottuk a hálózati szolgáltatásokat? Jól állítottuk be a tűzfalat? A FreeBSD képes kezelni a kártyát? A hibajelentések elküldése előtt mindig bújjuk át a támogatott hardvereszközök listáját. A FreeBSD verziókat frissítsük a legújabb STABLE változatra. Olvassuk át a levelezési listák archívumait vagy legalább keressünk rá a témára az interneten.
Ha a kártya működik, de a teljesítménye nem kielégítő, érdemes ennek utánanézni a tuning(7) man oldalon. Ilyenkor érdemes ellenőrizni a hálózati beállításainkat is, mivel a helytelen beállítások gyakran okoznak teljesítményvesztést.
Bizonyos esetekben láthatunk egy vagy két “device timeout” típusú hibát is, ami a kártyák egyes fajtáinál elfogadható. Ha azonban folyamatosan megjelennek vagy zavaróvá válnak, érdemes utánanéznünk, hogy az eszköz nem ütközik-e valamelyik másikkal. Mindenképpen győzödjünk meg a kábelek épségéről és csatlakoztatásáról. Még az is elképzelhető, hogy egyszerűen csak egy másik hálózati kártyára van szükségünk.
Néha felbukkanak “watchdog timeout” jellegű hibák is. Ilyenkor elsőként mindig a hálózati kábelt ellenőrizzük. Egyes kártyáknak olyan PCI foglalatra van szükségük, ami támogatja a Bus Mastering opciót. Néhány régebbi alaplapon csak ilyen PCI bővítőhely található (ami általában a 0. foglalat). Olvassunk utána a hálózati kártya és az alaplap dokumentációjában, hátha ezek okozzák a problémát.
A “No route to host” üzenet akkor jelenik meg, ha a rendszer képtelen megállapítani, milyen úton jutassa el a csomagokat a megadott célhoz. Ez többnyire olyankor történik meg, amikor nem adtunk meg alapértelmezett kézbesítési irányt (default route) vagy nem dugtuk be a hálózati kábelt. A netstat -rn kimenetéből meg tudjuk állapítani, hogy létezik-e érvényes út az elérni kívánt cél felé. Ha nincs, akkor haladjunk tovább a 31 fejezetre.
A “ping: sendto: Permission denied” jellegű üzeneteket többségében egy helytelenül beállított tűzfal okozza. Ha az ipfw működését engedélyeztük a rendszermagban, de nem adtunk meg hozzá szabályokat, akkor az alapértelmezett házirend szerint minden forgalmat blokkolni fog, tehát még a pingeket is! Ezzel kapcsolatban a 30 fejezet elolvasását ajánljuk.
Előfordulhat, hogy a kártya teljesítménye igen gyenge vagy az átlagos alatt van. Ilyenkor a fizikai eszköz autoselect (automatikus) típusú kiválasztása helyett érdemes megadnunk a konkrét eszköznek megfelelő típust. Habár ez a legtöbb hardver esetén beválik, nem mindenki számára jelent megoldást. Ismételten csak annyit tudunk ehhez hozzátenni, hogy ellenőrizzük a hálózati beállításainkat és olvassuk el a tuning(7) man oldalt.
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.