[Image] [ISDN] en [Linux], hoe? $Date: 1998/12/09 20:33:47 $ ------------------------------------------------------------------------ Inhoud * Nodig * Configuratie van isdn4linux (kernel gedeelte) o kernel config o HiSax parameters o Plug-n-Pray kaarten o HiSax meldingen * Installatie van i4k-utils (de utilities / interface configuratie tools) * Testen van kaart en aansluiting * isdnlog en consorten * mgetty configuratie * syncPPP naar ISP * Problemen... * Links ------------------------------------------------------------------------ Nodig: * Linux 2.0.36. Vanaf 2.0.31 zit de HiSax driver standaard in de kernel sources; dit is "A Good Thing"®. Niet 2.0.30 gebruiken. Zo ja, niet zeuren als het niet werkt. * De 2.0.36 kernel bevat een vrij actuele (stand: 8 november 1998) versie van ISDN4Linux, en ondersteunt meer kaarten. Je hebt hierbij VERPLICHT de 3.0(beta) of de CVS versie van de utils nodig! Zie twee puntjes lager. Lees ook de punt betreffende isdnctrl dialmode over een belangrijke wijziging met het configureren van een netwerk interface. * Evt. een nieuwe versie HiSax voor de avontuurlijken onder ons. Er is momenteel echter weinig verschil met 2.0.36. Alleen nuttig als je de TIMRU zaken wilt gebruiken (zit niet in 2.0.36), of vage problemen hebt en zeker wilt weten dat die nog niet opgelost zijn. Te vinden hier. Zie ook de instructies. * De 3.0(beta) versie van isdn4k-utils (bzip2 versie ook beschikbaar) of je kunt een CVS snapshot van isdn4k-utils proberen. Een nieuwere utils is VERPLICHT als je 2.0.36 of later gebruikt. Lees ook de punt betreffende isdnctrl dialmode over een belangrijke wijziging. * werkende isdn kaart :-) Als je tweedehands een Teles 16.3 kaart kunt kopen, dan is dat een prima keus (hier is een plaatje van een echte 16.3). Echter, als je eentje nieuw gaat kopen, dan zou ik een van de volgende kaarten aanraden: o Elsa Microlink PCC-16, PCF(pro), PCC-8 o Elsa Quickstep 1000(pro) ISA/PCI, 3000 o AVM A1 ("Fritz! Classic" / Teledat 150) o Dynalink IS64PH (wordt standaard ondersteund vanaf 2.0.36, gewoon de "asuscom" type kiezen); zie plaatje van een oude en een nieuwe versie. o Teledat 100 / Sedlbauer win speed (vanaf 2.0.36) o Teleint SA1 "No.1" (vanaf 2.0.36) plaatje o Eicon.Diehl Diva 2.0 ISA en PCI (geen PRO!) (vanaf 2.0.36); dit is de nieuwe "PTT" kaart. (Als men mij een plaatje kan toesturen van een kaart waar ik nog geen plaatje heb, dan stel ik dat zeer op prijs!) De categorieën waarin deze kaarten vallen zijn globaal kaal ISA, PnP ISA, en PCI. Ik negeer voorlopig PCMCIA totdat iemand mij een laptop met PCMCIA ISDN kaart geeft :-) De reden waarom ik niet Teles in m'n lijstje heb staan is dat Teles niet behulpzaam is bij de ontwikkeling van ISDN4Linux (zachtjes uitgedrukt), en de anderen hierboven wel. Ik heb het hieronder verder wel over een Teles 16.3 omdat dat is wat ik had toen ik ooit aan dit verhaal begon. Bij Elsa betekent de "pro" toevoeging dat er software bij zit. Als er alleen gebruik gemaakt gaat worden van Linux, dan is de software dus niet belangrijk. Recente exemplaren van de Fritz! kaart schijnen niet lekker te lopen op IRQ's anders dan 5. Ikzelf heb eentje in m'n Alpha XLT op IRQ 10. YMMV. Overigens werkt ISDN4Linux goed met de 2.0.36 kernel op Alpha. Als je audio support wilt hebben (bijvoorbeeld voor vbox, het antwoordapparaat), dan moet je niet de volgende kaarten nemen: o Teles 16.3c o NetJet o TeleInt Verder wordt deze (voor zover ik weet) nog niet ondersteund: o Diamond NetCommander plaatje van voorkant en achterkant ------------------------------------------------------------------------ Configuratie van isdn4linux (kernel gedeelte) Kernel config In de configuratie van de kernel moeten de volgende items geselecteerd zijn: <*> ISDN support [*] Support synchronous PPP HiSax SiemensChipSet driver support [*] HiSax Support for EURO/DSS1 Hierboven is dus ISDN vast in de kernel, en HiSax als module geconfigureerd. Dat laatste is een vereiste als je een Plug-n-Pray kaart hebt; de kaart moet nl. eerst met de isapnp utility geconfigureerd worden waarna die pas door de driver gedetecteerd kan worden. Zie verderop voor info over isapnp. Ook moet nog minstens één kaarttype gekozen worden. Voor de "normale" Teles kaart is dat dus [*] HiSax Support for Teles 16.3 or PNP or PCMCIA maar je zou b.v. een AVM A1 of een Elsa kaart kunnen hebben; hier gewoon de juiste kiezen. Je kunt meer dan een type kiezen, maar denk er aan dat elk extra type weer meer geheugen in beslag neemt. Opmerkingen: * EURO/DSS1 wil zoveel zeggen als Euro-ISDN, dus welke smaak ISDN de PTT spreekt (volledig is het Digital Subscriber Signalling no. 1). * Ik gebruik de HiSax driver als module, maar dat hoeft niet. Het werkt ook prima wanneer het vast in de kernel gecompileerd wordt, mits het geen Plug-n-Pray kaart betreft!. * "VJ-compression" (CONFIG_ISDN_PPP_VJ) lijkt tegenwoordig te werken, maar veel nut heeft het niet (het is voornamelijk ontworpen voor trage verbindingen). * Als je met ISDN voice applicaties wil gaan spelen (zoals vbox, een antwoordapparaat) dan moet je uiteraard ook Support audio via ISDN (CONFIG_ISDN_AUDIO) [N/y/?] y kiezen. * Op een Alpha is het niet verstandig om iets anders als make config te gebruiken! Je mist wellicht delen van de config met menuconfig of xconfig. -------------------------------------- HiSax parameters De Teles S0/16.3 ISDN adapter wordt vaak als volgt gebruikt: * I/O address op 0x180 (tegelijk ook 0x580 + 0x980 + 0xd80, ook al zegt het DOS installatie programma alleen maar 0x180 :-) * IRQ op 15 (geen 2e IDE controller aktief, anders is IRQ 15 hierdoor bezet! IRQ 5, 9, 10, 11 en 12 zijn dan mogelijke alternatieven, waarbij IRQ 12 vaak door de al dan niet gebruikte PS/2 muis interface bezet gehouden wordt). * mem address op 0 Dit alles kan het beste via de modprobe commando geconfigureerd worden wanneer met HiSax als module gewerkt wordt, of via een LILO argument wanneer HiSax in de kernel gecompileerd zit. Dus: module modprobe hisax io=0x180 irq=10 type=3 protocol=2 id=line0 in kernel (via lilo.conf append= of handmatig ingeven bij de LILO prompt) hisax=3,2,15,0x180,0,line0 Let op: de IRQ wordt door de driver gezet; hiervoor is dus geen (DOS/Win) configuratie programma voor nodig! Mooi he... Alleen de I/O address moet hardwarematig ingesteld worden d.m.v. de dipswitches op de kaart. Voor andere kaarten dan de Teles 16.3 zijn de parameters anders! Kijk naar de documentatie van HiSax in de kernel sources (waarschijnlijk hier te vinden). -------------------------------------- Plug-n-Pray kaarten Steeds meer ISA kaarten zijn van het type "Plug-n-Pray" (ze zeggen "Plug-n-Play" maar da's een foutje :-). Deze kaarten hebben geen jumpers of switches; in plaats daarvan moeten ze softwarematig geconfigureerd worden volgens een bepaalde standaard. Overigens zijn PCI kaarten ook een soort PnP, maar daarbij is goed in de PCI standaard vastgelegd hoe een en ander werkt, dus dat gaat in principe altijd goed (buggy BIOSsen en kaarten daargelaten). Het is dus onzin om te spreken van "PnP PCI" kaarten, PCI kaarten zijn impliciet altijd PnP, en dan nog op een manier zodat het altijd werkt... Om onder Linux PnP kaarten te kunnen gebruiken is een isapnp utility ontwikkeld. Het gebruik hiervan gaat in twee stappen: * met pnpdump de informatie over de beschikbare PnP kaarten dumpen. Deze output moet in een file opgevangen worden (meestal wordt daar /etc/isapnp.conf voor gebruikt) en aangepast worden aan de gewenste instellingen. * met isapnp de aangepaste configuratie file toepassen. De eerste stap hoeft maar een keer te gebeuren. De tweede steeds nadat het systeem geboot is en voordat de kaart(en) gebruikt worden. Een voorbeeld van het configureren van een Dynalink IS64PH kaart: /etc/isapnp.conf ziet er als volgt uit: (CONFIGURE ASU1688/68 (LD 0 # Logical device decodes 10 bit IO address lines # Minimum IO base address 0x0100 # Maximum IO base address 0x03f8 # IO base alignment 4 bytes # Number of IO addresses required: 4 (IO 0 (BASE 0x0104)) # IRQ 3, 4, 5, 9, 10, 11, 12 or 15. # High true, edge sensitive interrupt (INT 0 (IRQ 10 (MODE +E))) # *** ERROR *** No IRQ specified! (ACT Y) )) Als je net pnpdump gedaan hebt, dan staan er nog overal '#' tekens voor. Haal de '#' tekens weg voor die regels die jij wilt activeren, vergeet vooral niet om dat ook te doen bij de "(ACT Y)" regel! Je kunt nu met "isapnp /etc/isapnp.conf" de instellingen aan de kaart doorgeven. Daarna HiSax met modprobe hisax io=0x104 irq=10 type=12 protocol=2 id=line0 laden waarbij dus de juiste IO en IRQ uit isapnp.conf doorgegeven worden aan HiSax. -------------------------------------- HiSax meldingen Bij het booten c.q. het laden van de HiSax modules moet zoiets als de volgende meldingen verschijnen: Jul 29 15:53:12 wurtel kernel: HiSax: Linux Driver for passive ISDN cards Jul 29 15:53:12 wurtel kernel: HiSax: Version 3.0 Jul 29 15:53:12 wurtel kernel: HiSax: Layer1 Revision 1.15.2.13 Jul 29 15:53:12 wurtel kernel: HiSax: Layer2 Revision 1.10.2.9 Jul 29 15:53:12 wurtel kernel: HiSax: TeiMgr Revision 1.8.2.6 Jul 29 15:53:12 wurtel kernel: HiSax: Layer3 Revision 1.10.2.4 Jul 29 15:53:12 wurtel kernel: HiSax: LinkLayer Revision 1.30.2.9 Jul 29 15:53:12 wurtel kernel: HiSax: Total 1 card defined Jul 29 15:53:12 wurtel kernel: HiSax: Card 1 Protocol EDSS1 Id=line0 (0) Jul 29 15:53:12 wurtel kernel: HiSax: Teles IO driver Rev. 1.11.2.9 Jul 29 15:53:12 wurtel kernel: HiSax: Teles 16.3 config irq:9 isac:0x980 cfg:0xD80 Jul 29 15:53:12 wurtel kernel: HiSax: hscx A:0x180 hscx B:0x580 Jul 29 15:53:12 wurtel kernel: Teles3: ISAC version (0): 2086/2186 V1.1 Jul 29 15:53:12 wurtel kernel: Teles3: HSCX version A: V2.1 B: V2.1 Jul 29 15:53:12 wurtel kernel: Teles 16.3: IRQ 9 count 3 Jul 29 15:53:12 wurtel kernel: Teles 16.3: IRQ 9 count 6 Jul 29 15:53:12 wurtel kernel: HiSax: DSS1 Rev. 1.16.2.4 Jul 29 15:53:12 wurtel kernel: HiSax: 2 channels added Jul 29 15:53:12 wurtel kernel: HiSax: module installed Als je geen meldingen ziet, dan kun je de meest recente kernel meldingen met "dmesg" laten zien. Met de oude teles driver kwam het nog weleens voor dat de kaart verkeerd gespecificeerd werd, waardoor een verkeerde type "gevonden" werd. De HiSax driver is echter vrij goed in het detecteren van dergelijke problemen; als die een kaart gedetecteerd heeft, dan kun je er wel van uit gaan dat die ook gaat werken. Zoals je hierboven ziet, is de driver in staat om interrupts te laten genereren (eerst 3 interrupts, dan 6); de werking van de interrupts is dus in orde. ------------------------------------------------------------------------ Installatie van i4k-utils Om de ISDN faciliteiten van de kernel te kunnen benutten moet isdn4k-utils 3.0(-beta) gebouwd en geïnstalleerd worden. * Debian gebruikers kunnen de package "isdnutils" installeren, te vinden op de Debian ftp site. De versies voor Debian 1.3.1, 2.0 en 2.1 zijn nog gebaseerd op de oude 2.1b1 utilities; Debian 2.0 en 2.1 gebruikers kunnen echter de 2.2 (alias "potato") versie probleemloos installeren. De versie voor Debian 2.0 is te vinden in deze directory of voor 2.1 in deze directory. De 3.0-beta versie van isdnutils is te vinden in deze directory. * Red Hat 5.x gebruikers kunnen proberen of het lukt met deze RPM (is nog gebaseerd op een oude versie, als iemand een nieuwe kent...). * SuSE gebruikers hebben als het goed is al een kant-en-klare ISDN installatie. Ophalen, uitpakken, config met make config (gebeurt op dezelfde wijze als de kernel configureren met "make menuconfig"), compileren met make. De config options spreken over het algemeen voor zich. Als er hierbij problemen zijn, dan is dat vaak te wijten aan verschillen tussen de pakketten geïnstalleerd op het systeem van de ontwikkelaar en dat van jouw. Bronnen van ellende zijn: * dbm * ncurses * tcl Er is echter altijd wel uit te komen (al dan niet met hulp...). * Bij een fout ncurses.h not found, bekijk eerst of je wel ncurses als pakket geïnstalleerd hebt. Zo ja, kijk of er ergens een ncurses.h hebt staan. Zo ja, zorg ervoor dat er een (sym)link daarheen in /usr/include staat. Als je geen ncurses.h hebt, maar wel een curses.h, dan moet die gelinked worden naar /usr/include/ncurses.h. Evt. moet in de Makefile -lncurses vervangen worden door -lcurses. * Bij een fout ndbm.h not found, het GNU dbm pakket installeren. Als je die als sources ophaalt, dan moet je behalve make install ook nog make install-compat uitvoeren om de ndbm.h te krijgen. Bij Red Hat zou het genoeg zijn om de "db" en "db-devel" RPM's te installeren. De beruchte isdnlog-time-patch is met de huidige CVS en 3.0 versie niet meer nodig. Vergeet niet de script makedev.sh uit te voeren! Deze creëert alle devices in /dev die voor ISDN nodig zijn. Helaas zijn ze vergeten deze in de i4k-utils 2.1b1 package te zetten. Wel is die in de 3.0 versie aanwezig. Het is handig om een paar dingen altijd uit te voeren tijdens het opstarten. In SlackWare kun je die in /etc/rc.d/rc.local zetten, bijvoorbeeld. Ik had daarin staan: /sbin/isdnctrl verbose 3 /sbin/isdnlog -sS -v1 -w10 -m0x17d7 -l0x3d7 -C /dev/console -D /dev/isdnctrl Isdnlog is handig wanneer je gaat testen met minicom (zie onder); je ziet alle inkomende verbindingen, en dan weet je of je b.v. het juiste nummer voor jezelf kiest. Zie hier voor meer info over isdnlog. Je kunt echter ook met het commando dmesg de kernel meldingen controleren. ------------------------------------------------------------------------ Testen van kaart en aansluiting Het lukte mij eerst niet om mijzelf te bellen, omdat ik niet het netnummer erbij gezet had als "eigen" nummer. Het lukt nu wel, door deze stappen te nemen: * Hier wordt minicom gebruikt als terminal emulatie programma. Uiteraard kan ook een ander terminal emulatie programma gebruikt worden, zoals seyon. * minicom isdn0 opstarten, en bij port instellingen (ctrl-A O) /dev/ttyI0 opgeven. Bij modem init string AT&E546851514^M~AT&B512^M ingeven (mijn nummer is 0546-851514, dus eerste nul en het streepje weglaten; block size 512). Als speed iets van 38400 opgeven; dat is de hoogste standaard snelheid, en het maakt verder toch helemaal niets uit. Opslaan m.b.v. save . Daarna exit kiezen (niet exit minicom ). Minicom gaat nu de "modem" initialiseren, en dan heb je een verbinding met de ISDN modem emulator. Tik ATI in, of AT&V om jezelf te overtuigen. * In een andere xterm of virtual screen opnieuw wat hierboven staat uitvoeren, maar dan uiteraard met minicom isdn1 en /dev/ttyI1! een virtuele ISDN tty kan natuurlijk maar één keer tegelijk gebruikt worden! Configureer ook het liefst een ander nummer (MSN)! Het werkt wel met 2 x hetzelfde nummer, maar het is toch makkelijker debuggen met twee verschillende nummers. Opslaan, en ook weer exit kiezen. * Nu in het tweede scherm ATD851514 ingeven. Net nummer niet nodig (wel uiteraard eigen nummer invullen!). In het eerste scherm moet nu RING verschijnen. Met ATA kun je de lijn "opnemen", wat je dan in het ene scherm typt komt op het andere scherm in beeld en vice versa. * Als er geen RING komt, dan moet het nummer wellicht met of juist zonder netnummer ingesteld worden. Je kunt in de system (debug) logging kijken met welke nummer aangeklopt wordt. * Als het scherm waar ATD ingetikt wordt met BUSY komt, dan kan dit van alles betekenen; er wordt namelijk niet echt onderscheid gemaakt tussen verschillende fout oorzaken. Alleen NO DIALTONE klopt meestal; dat betekent dat de kaart niet aangesloten is... Als BUSY na zo'n 1-3 seconden komt, dan zou het weleens kunnen kloppen. Als het langer duurt, dan is er iets anders aan de hand. Kijk dan in de syslog naar debug meldingen (die moeten dan wel gelogd worden). ------------------------------------------------------------------------ isdnlog en consorten Met isdnlog kun je van alles bij houden. Inkomende telefoontjes (helaas voorlopig alleen indien vanaf een ISDN lijn) worden getoond op de console, zelfs compleet met plaatsnaam (hopelijk altijd goed) als je de nieuwe versie van de areacode database hebt staan waarin ook nederlandse netnummers in staan (door mij verzorgd). Ook onderverdelingen zijn gemaakt (b.v. 0546 is Almelo, maar 0546-5 is Wierden). Deze moet normaal gesproken als /usr/lib/isdn/areacodes geïnstalleerd worden. Zie ook de announcement. Er zijn nog wat mankementjes, maar die zijn bij de volgende versie hopelijk verholpen. Boven gaf ik een voorbeeld van de aanroep van isdnlog; hier is die nog eens: /sbin/isdnlog -S -v1 -w10 -m0x17d7 -l0x3d7 -C /dev/console -D /dev/isdnctrl -S scripts uitvoeren enablen (welke wordt in isdn.conf geregeld) -v1 verbosity op 1 -w10 betekent elke 10 seconden de overdrachtssnelheid berekenen en tonen. -m0x17d7 bepaalde soorten berichten melden op output -l0x3d7 bepaalde soorten berichten melden via syslog -C /dev/console output (van b.v. -m) schrijven naar /dev/console -D /dev/isdnctrl hier de informatie vandaan halen De soorten berichten voor -m en -l bit soort bericht 0x0001errors 0x0002warnings 0x0004notice 0x0008Log /dev/DEVICE (b.v. isdnctrl) messages naar /tmp/DEVICE 0x0010telefoonnummers onmiddelijk laten zien 0x0020kostenindicatie (kost geld bij PTT) 0x0040connect messages 0x0080hangup messages 0x0100cause bij hangup 0x0200time messages 0x0400throughput in bytes (elke -wX seconden) 0x0800B-channel state 0x1000service indicator (voice, data, ...) bij notice 0x2000geschatte tijd tot volgende kostenpuls (duits) De gewenste berichten optellen (in hex!) en als parameter bij de -m en -l opties meegeven. Hoe het allemaal precies in z'n werking gaat zal ik op een later tijdstip nog wel eens verduidelijken. ------------------------------------------------------------------------ mgetty configuratie Het is mogelijk om logins rechtstreeks toe te laten op je Linux systeem via ISDN (dus niet via TCP/IP, maar via X.75). Heel handig als je bijvoorbeeld bij kennissen hun systeem aan het configureren bent, en je wilt even kijken hoe het ook al weer thuis werkt... Het meest gebruikt hiervoor is mgetty. Deze heb ik dus ook maar gebruikt. Ikzelf heb momenteel versie 1.1.14 (standaard Debian package). Er zijn ongetwijfeld nieuwere versies, of gebruik de versie die bij je distribution geleverd wordt. Compileren en installeren is vrij simpel (vond ik). Belangrijk is de exacte configuratie (zoals altijd). Ik heb dit in m'n inittab staan: i1:23:respawn:/sbin/mgetty ttyI1 en in /etc/mgetty/mgetty.config (o.a.): port ttyI1 init-chat "" ATZ OK AT&Exxxxxxxxx OK AT&B512 OK data-only y speed 38400 Op de plaats van de 9 x'jes je MSN invullen, waarschijnlijk moet dat met netnummer maar zonder nul. Als het "jezelf bellen" test met minicom zoals hierboven gelukt is, dan weet je wel welk nummer dat moet zijn. Het is in feite hetzelfde, behalve dat nu mgetty luistert op de ISDN tty port in plaats van een handmatig opgestart minicom. Je kunt dit ook weer testen door met minicom (op een andere tty dan /dev/ttyI1 uiteraard) het opgegeven MSN te bellen, wederom net zoals bij het testen hierboven. Natuurlijk wel eerst de inittab entry activeren met "init q", maar dat wist je vast wel... ------------------------------------------------------------------------ syncPPP naar ISP Nu het stukje wat het meest interessant is (althans, dat vind ik!). Ik gebruik zelf Demon, waar het mogelijk is om landelijk in te bellen (al heeft Enertel nogal last van capaciteitsproblemen, wat "cause" 0322 of 0722 tot gevolg kan hebben), en waarbij men het geluk heeft een vast IP nummer te hebben. Dynamische IP nummers hebben het nadeel dat als de verbinding weggevallen is (vanwege idle timeout), nieuwe activiteit op een bestaande verbinding weer een impliciete dial oplevert, met wellicht (waarschijnlijk?) deze keer weer een ander IP adres, waardoor er helemaal geen verkeer meer mogelijk is over die bestaande verbinding (nieuwe verbindingen lukt wel). Het "eerste pakket kwijt" syndroom is in kernel 2.0.31 opgelost (zeggen ze). Je dient wel dit te activeren via het commando: echo 1 > /proc/sys/net/ipv4/ip_dynaddr Stuur een 2 voor 'verbose mode'. Stuur een 0 om de faciliteit te deactiveren. De procedure voor het initialiseren van een ISDN netwerk interface is globaal: * creëer een ISDN interface * configureer die interface * voeg die interface toe aan de standaard lijst van netwerk interfaces * IP routing juist zetten voor deze interface * configureer een ipppd process om deze interface af te handelen Ik raad aan de volgende script te gebruiken om e.e.a. voor te bereiden (uiteraard de xxx'jes, de 999's, "hostnaam", "ispnaam" enz. veranderen!): MYUSER=mijnnaam # mijn username bij ISP REMNAME=demon # naam van ISP's systeem MYIP=123.45.67.89 # mijn vast IP nummer (gebruik 10.0.0.2 als je geen vast IP hebt) REMIP=194.159.73.222 # IP nummer van ISP (deze is bijna altijd wel vast) MYMSN=123456789 # mijn nummer, zonder 0, met netnummer REMMSN=0748800806 # nummer van ISP REMMSN2=0206233733 # als de andere in gesprek is... /sbin/isdnctrl verbose 3 # was waarschijnlijk al /sbin/isdnctrl system on # idem; maar voor de zekerheid... /sbin/isdnctrl addif ippp0 # eerste moet altijd ippp0 zijn /sbin/isdnctrl eaz ippp0 $MYMSN /sbin/isdnctrl addphone ippp0 out $REMMSN2 # laatste ingevuld wordt /sbin/isdnctrl addphone ippp0 out $REMMSN # als eerste gebeld!! /sbin/isdnctrl huptimeout ippp0 90 # na 90 sec geen verkeer: ophangen /sbin/isdnctrl l2_prot ippp0 hdlc # default, mag weggelaten worden /sbin/isdnctrl l3_prot ippp0 trans # ook default /sbin/isdnctrl encap ippp0 syncppp # we want syncPPP, dammit! #/sbin/isdnctrl status ippp0 on # indien gebruik gemaakt wordt van HiSax 3.0 /sbin/isdnctrl dialmode ippp0 auto # als 2.0.36 gebruikt wordt (of CVS versie) /sbin/ifconfig ippp0 $MYIP pointopoint $REMIP /sbin/route add $REMIP ippp0 # $REMIP is via ippp0 te bereiken /sbin/route add default ippp0 # alle non-lokaal verkeer gaat via ippp0 /sbin/ifconfig ippp0 -arp -broadcast # geen arps en broadcasts toegestaan /sbin/ipppd user $MYUSER remotename $REMNAME \ $MYIP:$REMIP \ name $MYUSER \ -detach \ mru 1500 \ mtu 1500 \ lcp-restart 1 \ /dev/ippp0 & Zorg ervoor dat de IP nummers $MYIP en $REMIP al in /etc/hosts staan; het ifconfig ippp0 commando zal proberen de IP nummers te resolven. Dat lukt anders niet. De lcp-restart 1 heeft te maken met retries bij de LCP (link control protocol) onderhandeling die plaats vindt om user / password enz. te checken; er wordt vaak begonnen voordat de andere kant er klaar voor is, en hiermee worden weer een paar "kostbare" seconden gewonnen. Mensen met dynamische IP nummers dienen de $MYIP:$REMIP te vervangen door ipcp-accept-local ipcp-accept-remote en de /proc/sys/net/ipv4/ip_dynaddr gedoe zoals hierboven beschreven te regelen. Je moet ook nog /etc/ppp/options hebben (leeg), en /etc/ppp/pap-secrets met deze inhoud: hostnaam ispnaam geheim Hier uiteraard de namen van je eigen systeem invullen voor hostnaam (zoals aangemeld bij ISP). Voor ispnaam zou ook een sterretje ingevuld kunnen worden. Vergeet niet om geheim aan te passen :-) De files /etc/ppp/ip-up en /etc/ppp/ip-down neerzetten met als inhoud #!/bin/sh en "chmod +x /etc/ppp/ip-up /etc/ppp/ip-down" voorkomt dat ipppd verwarrende foutmeldingen geeft ("bad file descriptor") die verder geen kwaad kunnen. Als je dynamische IP nummers hebt, dan moet je het volgende in de ip-down en ip-up scripts zetten: #!/bin/sh /sbin/route del default >/dev/null 2>&1 /sbin/route add ippp0 default Dit is nodig om de dial-on-demand werkend te houden, en om nog juiste routering te hebben nadat verbinding gemaakt is (wanneer het IP nummer van een interface veranderd wordt, dan verdwijnen alle routes die via die interface liepen). Nadat bovenstaande script uitgevoerd is, dan kan isdnctrl dial ippp0 gedaan worden, en 4 seconden later is er verbinding. Deze 'dial' kan ook achterwege gelaten worden, en gewoon netscape of een ftp session gestart worden; zodra er IP activiteit is wat over de link zou moeten, dan wordt de verbinding opgebouwd. Daarna een isdnctrl hangup ippp0 en de verbinding is weg (ook na 90 seconden zonder IP verkeer zou dat moeten gebeuren, maar zo weet je het zeker). Om er zeker van te zijn dat er geen verbinding tot stand komt zonder dat je ervan op de hoogte bent, kun je het telefoonnummer verwijderen waarheen gebeld moet worden; het systeem kan dan moeilijk een verbinding tot stand brengen! Dus: /sbin/isdnctrl delphone ippp0 out 0748800806 /sbin/isdnctrl hangup ippp0 Uiteraard wel het juiste nummer hier vermelden... Als je meerdere nummers geconfigureerd hebt, moeten die allemaal een voor een verwijderd worden. Autodial wordt hierna weer geactiveerd door simpelweg het nummer weer toe te voegen: /sbin/isdnctrl addphone ippp0 out 0748800806 Als een (handiger?) alternatief, als je 2.0.36 gebruikt, dan kun je de dialmode setting gebruiken om de verbindingsopbouw in de hand te houden; dit verbreekt een verbinding en voorkomt nieuwe verbindingen: /sbin/isdnctrl dialmode ippp0 off Hiermee worden nieuwe verbindingen weer mogelijk: /sbin/isdnctrl dialmode ippp0 auto ------------------------------------------------------------------------ Problemen... Tja, er kan zoveel mis gaan... Echter, door bovenstaande aan te houden, zal het meestal wel lukken. * Als de HiSax driver tijden het opstarten het volgende meldt: Teles: 16.3 Byte at d82 is 39 dan is er sprake van een Teles 16.3 revision 1.1 kaart. Oplossing: nieuwe versie HiSax toepassen. * Als de HiSax driver geen Teles 16.3 lijkt te detecteren, dan is er misschien (helaas!) sprake van een 16.3C kaart. Oplossing: nieuwe versie HiSax toepassen. * Mensen worden nog weleens in verwarring gebracht doordat de kernel de volgende melding genereert: Feb 5 11:30:27 wurtel kernel: ippp0: dialing 0 793600036... Dit lijkt goed; echter, die '0' heeft niets met het nummer te maken, en dus mist hier de '0' van het netnummer. Er komt dan snel iets als Feb 5 11:30:35 wurtel kernel: isdn_net: local hangup ippp0 en als het goed is roept isdnlog iets over "unassigned number". Vergeet dus niet de '0' bij "ISPMSN" in te vullen! * Een mogelijk probleem wat zich bij syncPPP voor kan doen is dat er wel gebeld wordt met de ISP, maar geen verbinding tot stand komt. Dit is meestal te wijten aan een probleem met de authentification zoals die door ipppd uitgevoerd wordt. Door debug toe te voegen aan de lijst van opties bij de aanroep van ipppd zal e.e.a. gelogd worden via syslog, met facility daemon (kan ook local2 zijn) en level debug (zie manpage van syslogd en syslog.conf voor meer info). * De melding Nov 4 18:11:30 wurtel kernel: HiSax, ch0 cause: E0010 is geen fout. Dit betekent gewoon dat het lokale systeem de verbinding verbroken heeft; gewoon "opgehangen" dus. Zie de isdn_cause manpage voor uitleg (deze manpage zit bij de isdn4k-utils). Meestal is dit gewoon een gevolg van een ipppd configuratie fout, of een fout ingevoerd wachtwoord in /etc/ppp/pap-secrets (zie vorig punt). Indien je wachtwoord "vreemde" tekens bevat, dan moet je er quotes " omheen zetten. Je wachtwoord laten beginnen met een @ is een heel slecht idee... * De melding Sep 27 21:19:21 wurtel kernel: HiSax, ch0 cause: E0322 betekent dat het VPoP netwerk overbelast is (dit is eind september bij het Enertel netwerk van Demon het geval geweest). Gewoon opnieuw proberen... E0722 krijg je soms ook in zo'n geval, da's dan een bug bij KPN of Enertel. Zie de isdn_cause manpage voor meer informatie (deze wordt geinstalleerd bij de nieuwere isdn4k-utils pakketten). * Als je b.v. bij telnet sessies de melding "connected" krijgt, maar vervolgens niets, dan is de kans groot dat je VJ-compression niet uitgezet hebt in je ipppd config, terwijl de kernel zonder VJ-compression gecompileerd is. Helaas controleert ipppd niet of er ook daadwerkelijk VJ-compression in de kernel aanwezig is. Zo niet, dan loopt de verbinding vast; er kan ook een melding gegeven worden van "unknown protocol". Oplossing: VJ-compression uitzetten d.m.v. "-vj -vjccomp" als options voor ipppd. Alternatief is toch VJ-compression in de kernel aanzetten. * Alles lijkt goed geconfigureerd te zijn, maar bij belpogingen verschijnt "local hangup ippp0" in de log, en "dial suppressed". Dit duidt op een HiSax 3.0 driver die niet "aangezet" is met "isdnctrl status ippp0 on". (Je zou eigenlijk 2.0.36 moeten nemen, waarin status vervangen is door dialmode.) Zie ook volgende punt: * LET OP! In de CVS snapshots vanaf 24 oktober 1998 en ook in kernel 2.0.36 is "isdnctrl status" vervangen door "isdnctrl dialmode". Dit beschrijft de functie wat beter, alhowel het nog niet perfekt is (er kan dus opnieuw wat veranderen!); daarnaast is de functionaliteit ook uitgebreid. Er zijn drie dialmodes mogelijk: off geen verbinding mogelijk. Evt. bestaande verbinding wordt verbroken. manual alleen verbinding met isdnctrl dial mogelijk. Verbinding wordt ook niet automatisch verbroken!! Alleen met isdnctrl hangup wordt de verbinding verbroken. Opmerking: in recente CVS versies is de idle timeout hangup voor zulke verbindingen geimplementeerd (dit was te gevaarlijk...) auto de "ouderwetse" situatie, zoals dat ooit was. Een uitgaande IP pakket zal de verbinding tot stand brengen, en na de timeout wordt de verbinding verbroken. Lees ook de isdnctrl manpage. Mochten er andere dingen misgaan, laat die dan weten (inclusief de oplossing indien voorhanden!), zodat ik die hier kan vermelden. Ik ben ook wel geïnteresseerd in speciale gevallen... ------------------------------------------------------------------------ Links ISDN4Linux homepage B.v. links naar de ontwikkelaars. ISDN met Linux bij XS4ALL van Jeroen van Pelt; gebaseerd op Red Hat 5. Gaat uit van dynamische IP nummers. ISDN met Linux bij XS4ALL nog eentje voor XS4ALL. ISDN met Linux bij WXS i4l configureren met dynamische IP nummers ISDN met Linux Handleiding van iaf.nl Nederlandse ISDN Homepage alles wat je ooit wilde weten over ISDN (maar niet durfde te vragen) Linux and ISDN verschillende configuraties voor diverse situaties. Ook een FAQ en HOWTO's zijn hier te vinden. Duits en engels. Building a low cost ISDN Internet Gateway Een aardig verhaal over het toepassen van ISDN4Linux. Linux and ISDN nog meer configuratievoorbeelden uit Duitsland wat verouderde ISDN4Linux FAQ of even oude ISDN4Linux FAQ ISDN4Linux FAQ per FTP Linux Linux 2.0 kernel sources HiSax 3.1 nieuwe HiSax versie voor 2.0.x kernels. Dit is een "known-good" CVS snapshot 3.0(beta) versie van isdn4k-utils (bzip2 versie) Utilities nodig voor het configureren en gebruiken van isdn4linux. isdn4linux-utils Utilities nodig voor het configureren en gebruiken van isdn4linux; dit is een "known-good" CVS snapshot (hopelijk!). makedev.sh ontbrekende script uit isdn4linux-utils, nodig voor het creëeren van ISDN devices in /dev areacode database met o.a. NL plaatsnamen (http download!) lijst van netnummers en plaatsnamen tbv. isdnlog. Bevat zoveel mogelijk info over dorpen enz. die netnummers delen met andere plaatsen; ook een deel van abonneenummer wordt gebruikt om de plaatsnaam te bepalen. directory met mgetty sources tbv. inlog mogelijkheid via X.75 (voor wat betreft ISDN; biedt nog veel meer mogelijkheden zoals fax. Het bekijken waard.) terug naar m'n homepage ------------------------------------------------------------------------ © 1996,1997,1998 Paul Slootman Mag vrij gebruikt, gecopieerd en verspreid worden, maar mijn naam en deze copyright tekst moeten onveranderd behouden blijven. Zie het maar als een soort GPL. Uitzondering: Teles mag dit alleen gebruiken wanneer ik aan Teles nadrukkelijk schriftelijk of PGP/GPG gesigned toestemming hiervoor gegeven heb. Eventuele wijzigingen c.q. aanvullingen rechtstreeks aan mij sturen zodat ik ze aan kan brengen (na goedkeuring).