Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ================== |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 | Generic HDLC layer |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 5 | ================== |
| 6 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | Krzysztof Halasa <khc@pm.waw.pl> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 | |
| 9 | |
| 10 | Generic HDLC layer currently supports: |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 11 | |
Krzysztof Hałasa | e022c2f | 2008-08-14 19:17:38 +0200 | [diff] [blame] | 12 | 1. Frame Relay (ANSI, CCITT, Cisco and no LMI) |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 13 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 14 | - Normal (routed) and Ethernet-bridged (Ethernet device emulation) |
| 15 | interfaces can share a single PVC. |
| 16 | - ARP support (no InARP support in the kernel - there is an |
| 17 | experimental InARP user-space daemon available on: |
| 18 | http://www.kernel.org/pub/linux/utils/net/hdlc/). |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 19 | |
Krzysztof Hałasa | e022c2f | 2008-08-14 19:17:38 +0200 | [diff] [blame] | 20 | 2. raw HDLC - either IP (IPv4) interface or Ethernet device emulation |
| 21 | 3. Cisco HDLC |
| 22 | 4. PPP |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 23 | 5. X.25 (uses X.25 routines). |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 24 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 25 | Generic HDLC is a protocol driver only - it needs a low-level driver |
| 26 | for your particular hardware. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 | |
| 28 | Ethernet device emulation (using HDLC or Frame-Relay PVC) is compatible |
| 29 | with IEEE 802.1Q (VLANs) and 802.1D (Ethernet bridging). |
| 30 | |
| 31 | |
| 32 | Make sure the hdlc.o and the hardware driver are loaded. It should |
| 33 | create a number of "hdlc" (hdlc0 etc) network devices, one for each |
| 34 | WAN port. You'll need the "sethdlc" utility, get it from: |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 35 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 36 | http://www.kernel.org/pub/linux/utils/net/hdlc/ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 | |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 38 | Compile sethdlc.c utility:: |
| 39 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | gcc -O2 -Wall -o sethdlc sethdlc.c |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 41 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | Make sure you're using a correct version of sethdlc for your kernel. |
| 43 | |
| 44 | Use sethdlc to set physical interface, clock rate, HDLC mode used, |
| 45 | and add any required PVCs if using Frame Relay. |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 46 | Usually you want something like:: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 47 | |
| 48 | sethdlc hdlc0 clock int rate 128000 |
| 49 | sethdlc hdlc0 cisco interval 10 timeout 25 |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 50 | |
| 51 | or:: |
| 52 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | sethdlc hdlc0 rs232 clock ext |
| 54 | sethdlc hdlc0 fr lmi ansi |
| 55 | sethdlc hdlc0 create 99 |
| 56 | ifconfig hdlc0 up |
| 57 | ifconfig pvc0 localIP pointopoint remoteIP |
| 58 | |
| 59 | In Frame Relay mode, ifconfig master hdlc device up (without assigning |
| 60 | any IP address to it) before using pvc devices. |
| 61 | |
| 62 | |
| 63 | Setting interface: |
| 64 | |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 65 | * v35 | rs232 | x21 | t1 | e1 |
| 66 | - sets physical interface for a given port |
| 67 | if the card has software-selectable interfaces |
| 68 | loopback |
| 69 | - activate hardware loopback (for testing only) |
| 70 | * clock ext |
| 71 | - both RX clock and TX clock external |
| 72 | * clock int |
| 73 | - both RX clock and TX clock internal |
| 74 | * clock txint |
| 75 | - RX clock external, TX clock internal |
| 76 | * clock txfromrx |
| 77 | - RX clock external, TX clock derived from RX clock |
| 78 | * rate |
| 79 | - sets clock rate in bps (for "int" or "txint" clock only) |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 80 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 81 | |
| 82 | Setting protocol: |
| 83 | |
| 84 | * hdlc - sets raw HDLC (IP-only) mode |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 85 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 86 | nrz / nrzi / fm-mark / fm-space / manchester - sets transmission code |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 87 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 88 | no-parity / crc16 / crc16-pr0 (CRC16 with preset zeros) / crc32-itu |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 89 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 90 | crc16-itu (CRC16 with ITU-T polynomial) / crc16-itu-pr0 - sets parity |
| 91 | |
| 92 | * hdlc-eth - Ethernet device emulation using HDLC. Parity and encoding |
| 93 | as above. |
| 94 | |
| 95 | * cisco - sets Cisco HDLC mode (IP, IPv6 and IPX supported) |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 96 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 97 | interval - time in seconds between keepalive packets |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 98 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 99 | timeout - time in seconds after last received keepalive packet before |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 100 | we assume the link is down |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 101 | |
| 102 | * ppp - sets synchronous PPP mode |
| 103 | |
| 104 | * x25 - sets X.25 mode |
| 105 | |
| 106 | * fr - Frame Relay mode |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 107 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 108 | lmi ansi / ccitt / cisco / none - LMI (link management) type |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 109 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 110 | dce - Frame Relay DCE (network) side LMI instead of default DTE (user). |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 111 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 112 | It has nothing to do with clocks! |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 113 | |
| 114 | - t391 - link integrity verification polling timer (in seconds) - user |
| 115 | - t392 - polling verification timer (in seconds) - network |
| 116 | - n391 - full status polling counter - user |
| 117 | - n392 - error threshold - both user and network |
| 118 | - n393 - monitored events count - both user and network |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 119 | |
| 120 | Frame-Relay only: |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 121 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 122 | * create n | delete n - adds / deletes PVC interface with DLCI #n. |
| 123 | Newly created interface will be named pvc0, pvc1 etc. |
| 124 | |
| 125 | * create ether n | delete ether n - adds a device for Ethernet-bridged |
| 126 | frames. The device will be named pvceth0, pvceth1 etc. |
| 127 | |
| 128 | |
| 129 | |
| 130 | |
| 131 | Board-specific issues |
| 132 | --------------------- |
| 133 | |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 134 | n2.o and c101.o need parameters to work:: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 135 | |
| 136 | insmod n2 hw=io,irq,ram,ports[:io,irq,...] |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 137 | |
| 138 | example:: |
| 139 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 140 | insmod n2 hw=0x300,10,0xD0000,01 |
| 141 | |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 142 | or:: |
| 143 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 144 | insmod c101 hw=irq,ram[:irq,...] |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 145 | |
| 146 | example:: |
| 147 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 148 | insmod c101 hw=9,0xdc000 |
| 149 | |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 150 | If built into the kernel, these drivers need kernel (command line) parameters:: |
| 151 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 152 | n2.hw=io,irq,ram,ports:... |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 153 | |
| 154 | or:: |
| 155 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 156 | c101.hw=irq,ram:... |
| 157 | |
| 158 | |
| 159 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 160 | If you have a problem with N2, C101 or PLX200SYN card, you can issue the |
Mauro Carvalho Chehab | 16128ad | 2020-04-28 00:01:39 +0200 | [diff] [blame] | 161 | "private" command to see port's packet descriptor rings (in kernel logs):: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 162 | |
| 163 | sethdlc hdlc0 private |
| 164 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 165 | The hardware driver has to be build with #define DEBUG_RINGS. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 166 | Attaching this info to bug reports would be helpful. Anyway, let me know |
| 167 | if you have problems using this. |
| 168 | |
Krzysztof Halasa | b3dd65f | 2005-04-21 15:57:25 +0200 | [diff] [blame] | 169 | For patches and other info look at: |
| 170 | <http://www.kernel.org/pub/linux/utils/net/hdlc/>. |