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/
