Konfiguracja łącza światłowodowego ATM POLPAK pod Linux PLD

Firma ISP dla której od czasu do czasu świadczę usługi postanowiła wykupić nieco szybsze łącze i z uwagi na w sumie niewielki, a właściwie żaden :P wybór - padło na Telekomunikację Polską. Interesującą okazała się usługa ATM/Frame relay. Z uwagi na zastosowaną technologie jak i wymagania co do transferu łącze zakończone zostało światłowodem.

Jako zakończenie klienckie użyta została karta PROATM-V155FM firmy Prosum. Jest to doskonała alternatywa do zastosowań sprzetowych typu Cisco, Nortel, etc, szczególnie jeśli chodzi o cenę. W Polsce koszt zakupu tej karty na chwilę obecną to około 2.500 zł. Tak więc przy koszcie ~3k, bazuąc na Linuxie można uruchomić w pełni funkcjonalny punkt dostępowy obsługujący interfejs ATM, routing, firewall, QOS oraz dodatkowe, przydatne usługi takie jak DHCP, lokalny DNS.

Zasadniczo karta ma wsparcie w postaci natywnie dostarczanych wraz z kernelem sterowników - konfiguracja samego ATM jest wspierana przez kernel i oprogramowanie linux-atm - w PLD, którego użyłem jako systemu bazowego - dostępne są nawet rc-scripts które w ładny sposób pozwalają skonfigurować interfejs i resztę rzeczy.

Sama konfiguracja poszła szybko i bezproblemowo - sterownik wykrył kartę bez problemu - skrypty podniosły interfejs - pozostało czekać jedynie na zestawienie łącza.

Niestety po uruchomieniu usługi przez TP sprawa się nieco skomplikowała. Otóż okazało się że całość po prostu nie działa. Po ponad 2 dniowych rozmowach z działem reklamacyjnym POLPAKu skierowano mnie wreszcie do kompetentnej (dziękuję Panie Grzegorzu za okazaną pomoc) osoby, która była mi stanie wyjaśnić mi na czym dokładnie polega problem.

Otóż TP podłącza klientów do dwóch rodzajów przełączników ATM, o ile przełączniki Nortel Passport 4860 nie sprawiają większych problemów, o tyle Nortel Passport 15000/20000 wymagają komunikacji z użyciem protokołu strict SDH.

Problem niestety leży w tym, iż sterownik warstwy ATM w linuxie (suni) domyślnie pracuje z użyciem protokołu SONET - starsze przełączniki są to w stanie obsłużyć - nowsze niestety wymagają obsługi SDH.

Po jakimś czasie grzebania w źródłach sterownika karty i sterowniku suni udało mi się zmusić do inicjalizacji domyślnie w trybie SDH co oczywiście poskutkowało natychmiastowym (na wcześniej przygotowanych konfigach) uaktywnieniem łącza.

Ok, jak to zatem wszystko do kupy uruchomić? Otóż na początek należy od TP uzyskać informacje o adresacji, adresie IP przełącznika, oraz VPI/VCI. Warto równe, po to aby uniknąć kłopotów dowiedzieć się do jakiego przełącznika jest wpięte zakończenie - szczególnie zaś jakiego protokołu wymaga. Jeśli jest to starszy typ przełącznika Nortel, lub taki który obsłuży protokół SONET całość prawdopodobnie ruszy na domyślnym sterowniku, który jest dostępny w paczce z kernelem PLD. Jeśli przełącznik wymaga SDH lub nie powiedzie sie uruchomienie karty na domyślnym sterowniku niestety czeka cię ręczna kompilacja jądra.

Przed kompilacją jądra pobrać należy sterowniki dla karty, które znaleźć można na stronie producenta. Po wymianie listów i wskazaniu problemu producent poprawił sterowniki, tak aby inicjowały suni w trybie SDH, tak więc używając obecnie dostępnych sterowników nie musisz grzebać w suni.

W dalszej kolejności pobieramy paczkę ze źródłami kernela oraz wszystko co przyda sie do kompilacji (mam nadzieję że nie pominąłem niczego, część nie podanych tu pakietów doinstaluje sie jako zależności):

[root@ozi-x proc]# poldek -i patch gcc make glibc-devel ncurses-devel kernel-sources

Lepiej jest użyć gotowej paczki PLD, gdyż te źródła kernela zawierają nałozone już wszystkie przydatne później łaty takie jak IMQ, Layer7, esfq, etc. W dalszej kolejności przekopiować należy pliki z paczki do katalogu drivers/atm, nałożyć patch odpowiedni dla wersji kernela, wyedytować nicstar.h i uaktywnić opcję NS_SUNI_FULL_SDH  (update: poczytaj dołączony do sterownika plik README, wymuszenie trybu SDH odbywa sie aktualnie poprzez przekazanie parametru  do modułu), zaznaczyć odpowiednie moduły do kompilacji i skompilować jądro. Zajrzyj do README, który znajdziesz w paczce ze sterownikiem - tam jest opisane które moduły należy zaznaczyć przy kompilacji kernela, którego patcha użyć, etc.

Tutaj jedna uwaga - zmiany w sterowniku, wg. tego co mi napisał producent nie zostały jeszcze przetestowane za switchem SDH tak więc nie ma pewności że działają. Producent prosił mnie o przeprowadzenie testów, niestety w tym momencie nie jestem tego w stanie zrobić. Jeśli z jakiegoś powodu sterownik nadal by nie działał potrzebne jest patchowanie suni.c

Po kompilacji otrzymujemy sterownik nicstar - który to najlepiej dopisać do /etc/modules - tak aby się ładował przy starcie.

Sama karta powinna być widoczna via lspci:

[root@ozi-x proc]# lspci
[...]
02:08.0 ATM network controller: Integrated Device Technology, Inc. IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller (rev 05)

Załadowanie sterownika nicstar powinno wrzucić do logu kernela:

NET: Registered protocol family 8
NET: Registered protocol family 20
nicstar0: PHY type detection called.
nicstar0: PHY seems to be 155 Mbps.
nicstar0: SRAM size = 512K x 32bit
nicstar0: vpibase=0, vcibase=0, VPM=0x0
nicstar0: MAC address 00:XX:XX:XX:XX:XX

Załadowanie sterownika idt77252 wygląda nieco inaczej:

NET: Registered protocol family 8
NET: Registered protocol family 20
idt77252_init: at df80d000
ACPI: PCI Interrupt 0000:02:08.0[A] -> GSI 18 (level, low) -> IRQ 169
idt77252-0: ABR SAR (Rev E): MEM f1000000 SRAM f4000000 [2048 KB]
idt77252-0: Linkrate on ATM line : 149760000 bit/s, 353207 cell/s.

W obu przypadkach załadowanie sterownika powinno automatycznie załadować sterowniki atm i suni.

Paczki które należy zainstalować w PLD to:

[root@ozi-x proc]# poldek -i linux-atm linux-atm-rc-scripts

Następnie wyedytuj plik:

[root@ozi-x atm]# cat /etc/sysconfig/atm
ATM=yes
ATM_NICS_NUMBER=1
CLIP=yes
LANE=no
BR2684=no
PPPOA=no
LANE_SERVER_SERVICES=no
ILMI=yes

Konfiguracja samego interfejsu powinna wyglądać tak:

[root@ozi-x atm]# cat /etc/sysconfig/interfaces/ifcfg-atm0
# ip - adres ip przydzielony przez TP
# gw - adres portu routera brzegowego
DEVICE=atm0
IPADDR=80.50.55.ip
PREFIX=30
ATMARP_REMIP=80.50.55.gw
ATMARP_PVC=0.VPI.VCI
ATMARP_QOS="ubr,aal5:pcr=20000"
DEFAULTHANDLING=yes
ARP=yes
ONBOOT=yes
. /etc/sysconfig/network-scripts/ifup-atm.post

Uruchom usługę ATM:

[root@ozi-x atm]# service atm start

I teraz trochę diagnostyki. Użyteczne informacje znajdziesz w /proc/net/atm - w pvc powinieneś zobaczyć wszystkie zestawione kanały PVC - w szczególności ten odpowiadający VPI/VCI twojego łącza:

[root@ozi-x atm]# cat /proc/net/atm/pvc
Itf VPI VCI AAL RX(PCR,Class) TX(PCR,Class)
0 0 5 5 0 UBR 0 UBR
0 0 16 5 0 UBR 0 UBR
0 x xxx 5 0 UBR 0 UBR CLIP, Itf:atm0, Encap:LLC/SNAP

0.5 i 0.16 są zestawiane przez atmsigd i ilmi i służą do sterowania sygnalizacją ATM

Dodatkowo używając atmarp możesz sprawdzić czy poprawnie zestawił się CLIP via PVC:

[root@ozi-x atm]# atmarp -a
----- Itf 0 (80.50.55.ip, netmask 255.255.255.252) -----
Default QOS: ubr,aal5:max_sdu=9188
IP 80.50.55.gw, state VALID, addr <none>, flags 0x4<PERM>
QOS: ubr,aal5:pcr=20000,max_sdu=9188
0.vpi.vci
Send buffer: 109568
----- Unknown incoming connections -----
----- Incoming unidirectional connections -----
----- End of dump -----

Statystyki ramek ATM pokazuje atmdiag:

[root@ozi-x atm]# atmdiag
Itf TX_okay TX_err RX_okay RX_err RX_drop
0 AAL0 0 0 0 0 0
AAL5 103087429 0 131246245 0 0

W przypadku pojawienia się problemów z protokołem SONET/SDH (patrz port switcha ATM i sterownik) interfejs podniesie się bez problemów, otrzymasz również prawidłowe wyniki z atmarp. Zaś admdiag pokaże zmianę liczników TX_okay i RX_drop, RX_okay będzie cały czas pokazywało 0. Próbuj w takim przypadku kompilować sterownik ręcznie.

Jeśli wszystko jest prawidłowo, pingując IP portu switcha ATM powinieneś otrzymać odpowiedź. IP switcha oraz twoje IP powinno również odpowiadać na ping z zewnątrz. Tutaj uwaga: jeśli nie podniesiesz interfejsu ATM, lub wystąpią problemy w komunikacji karta->przełacznik ATM IP portu switcha nie odpowiada na ping z zewnątrz.

Po uruchomieniu interfejsu należy ustawić jeszcze domyślną bramę:

[root@ozi-x atm]# route del default
[root@ozi-x atm]# route add default gw $ATMARP_REMIP

Można do dopisać do /etc/sysconfig/network-scripts/ifup-atm.post, nie ma chyba lepszej metody bo skrypty nie ustawiają domyślnej bramy same.

  1. One Response to “Konfiguracja łącza światłowodowego ATM POLPAK pod Linux PLD”

  2. By TTT on cze 26, 2008

    A tak to mozemy odpalic z reki, w tpsa:

    modprobe nicstar
    /usr/sbin/atmarpd -b
    /usr/sbin/atmarp -c atm0
    ifconfig atm0 (nasze ip atm) netmask (maska)
    /usr/sbin/atmarp -s (druga strona ip) 0.1.104 qos ubr:pcr=338700
    ip route add default via (druga strona ip) dev atm0

Post a Comment

Security Code: