|  | Generic HDLC layer | 
|  | Krzysztof Halasa <khc@pm.waw.pl> | 
|  | January, 2003 | 
|  |  | 
|  |  | 
|  | Generic HDLC layer currently supports: | 
|  | - Frame Relay (ANSI, CCITT and no LMI), with ARP support (no InARP). | 
|  | Normal (routed) and Ethernet-bridged (Ethernet device emulation) | 
|  | interfaces can share a single PVC. | 
|  | - raw HDLC - either IP (IPv4) interface or Ethernet device emulation. | 
|  | - Cisco HDLC, | 
|  | - PPP (uses syncppp.c), | 
|  | - X.25 (uses X.25 routines). | 
|  |  | 
|  | There are hardware drivers for the following cards: | 
|  | - C101 by Moxa Technologies Co., Ltd. | 
|  | - RISCom/N2 by SDL Communications Inc. | 
|  | - and others, some not in the official kernel. | 
|  |  | 
|  | Ethernet device emulation (using HDLC or Frame-Relay PVC) is compatible | 
|  | with IEEE 802.1Q (VLANs) and 802.1D (Ethernet bridging). | 
|  |  | 
|  |  | 
|  | Make sure the hdlc.o and the hardware driver are loaded. It should | 
|  | create a number of "hdlc" (hdlc0 etc) network devices, one for each | 
|  | WAN port. You'll need the "sethdlc" utility, get it from: | 
|  | http://hq.pm.waw.pl/hdlc/ | 
|  |  | 
|  | Compile sethdlc.c utility: | 
|  | gcc -O2 -Wall -o sethdlc sethdlc.c | 
|  | Make sure you're using a correct version of sethdlc for your kernel. | 
|  |  | 
|  | Use sethdlc to set physical interface, clock rate, HDLC mode used, | 
|  | and add any required PVCs if using Frame Relay. | 
|  | Usually you want something like: | 
|  |  | 
|  | sethdlc hdlc0 clock int rate 128000 | 
|  | sethdlc hdlc0 cisco interval 10 timeout 25 | 
|  | or | 
|  | sethdlc hdlc0 rs232 clock ext | 
|  | sethdlc hdlc0 fr lmi ansi | 
|  | sethdlc hdlc0 create 99 | 
|  | ifconfig hdlc0 up | 
|  | ifconfig pvc0 localIP pointopoint remoteIP | 
|  |  | 
|  | In Frame Relay mode, ifconfig master hdlc device up (without assigning | 
|  | any IP address to it) before using pvc devices. | 
|  |  | 
|  |  | 
|  | Setting interface: | 
|  |  | 
|  | * v35 | rs232 | x21 | t1 | e1 - sets physical interface for a given port | 
|  | if the card has software-selectable interfaces | 
|  | loopback - activate hardware loopback (for testing only) | 
|  | * clock ext - external clock (uses DTE RX and TX clock) | 
|  | * clock int - internal clock (provides clock signal on DCE clock output) | 
|  | * clock txint - TX internal, RX external (provides TX clock on DCE output) | 
|  | * clock txfromrx - TX clock derived from RX clock (TX clock on DCE output) | 
|  | * rate - sets clock rate in bps (not required for external clock or | 
|  | for txfromrx) | 
|  |  | 
|  | Setting protocol: | 
|  |  | 
|  | * hdlc - sets raw HDLC (IP-only) mode | 
|  | nrz / nrzi / fm-mark / fm-space / manchester - sets transmission code | 
|  | no-parity / crc16 / crc16-pr0 (CRC16 with preset zeros) / crc32-itu | 
|  | crc16-itu (CRC16 with ITU-T polynomial) / crc16-itu-pr0 - sets parity | 
|  |  | 
|  | * hdlc-eth - Ethernet device emulation using HDLC. Parity and encoding | 
|  | as above. | 
|  |  | 
|  | * cisco - sets Cisco HDLC mode (IP, IPv6 and IPX supported) | 
|  | interval - time in seconds between keepalive packets | 
|  | timeout - time in seconds after last received keepalive packet before | 
|  | we assume the link is down | 
|  |  | 
|  | * ppp - sets synchronous PPP mode | 
|  |  | 
|  | * x25 - sets X.25 mode | 
|  |  | 
|  | * fr - Frame Relay mode | 
|  | lmi ansi / ccitt / none - LMI (link management) type | 
|  | dce - Frame Relay DCE (network) side LMI instead of default DTE (user). | 
|  | It has nothing to do with clocks! | 
|  | t391 - link integrity verification polling timer (in seconds) - user | 
|  | t392 - polling verification timer (in seconds) - network | 
|  | n391 - full status polling counter - user | 
|  | n392 - error threshold - both user and network | 
|  | n393 - monitored events count - both user and network | 
|  |  | 
|  | Frame-Relay only: | 
|  | * create n | delete n - adds / deletes PVC interface with DLCI #n. | 
|  | Newly created interface will be named pvc0, pvc1 etc. | 
|  |  | 
|  | * create ether n | delete ether n - adds a device for Ethernet-bridged | 
|  | frames. The device will be named pvceth0, pvceth1 etc. | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | Board-specific issues | 
|  | --------------------- | 
|  |  | 
|  | n2.o and c101.o need parameters to work: | 
|  |  | 
|  | insmod n2 hw=io,irq,ram,ports[:io,irq,...] | 
|  | example: | 
|  | insmod n2 hw=0x300,10,0xD0000,01 | 
|  |  | 
|  | or | 
|  | insmod c101 hw=irq,ram[:irq,...] | 
|  | example: | 
|  | insmod c101 hw=9,0xdc000 | 
|  |  | 
|  | If built into the kernel, these drivers need kernel (command line) parameters: | 
|  | n2.hw=io,irq,ram,ports:... | 
|  | or | 
|  | c101.hw=irq,ram:... | 
|  |  | 
|  |  | 
|  |  | 
|  | If you have a problem with N2 or C101 card, you can issue the "private" | 
|  | command to see port's packet descriptor rings (in kernel logs): | 
|  |  | 
|  | sethdlc hdlc0 private | 
|  |  | 
|  | The hardware driver has to be build with CONFIG_HDLC_DEBUG_RINGS. | 
|  | Attaching this info to bug reports would be helpful. Anyway, let me know | 
|  | if you have problems using this. | 
|  |  | 
|  | For patches and other info look at http://hq.pm.waw.pl/hdlc/ |