通用 HDLC 层

Krzysztof Halasa <khc@pm.waw.pl>

通用 HDLC 层目前支持

  1. 帧中继 (ANSI, CCITT, Cisco 和无 LMI)

    • 普通(路由)和以太网桥接(以太网设备模拟)接口可以共享一个 PVC。

    • ARP 支持(内核中没有 InARP 支持 - 在以下位置提供了一个实验性的 InARP 用户空间守护程序:https://linuxkernel.org.cn/pub/linux/utils/net/hdlc/)。

  2. 原始 HDLC - 无论是 IP (IPv4) 接口还是以太网设备模拟

  3. Cisco HDLC

  4. PPP

  5. X.25(使用 X.25 例程)。

通用 HDLC 仅是一个协议驱动程序 - 它需要适用于您特定硬件的底层驱动程序。

以太网设备模拟(使用 HDLC 或帧中继 PVC)与 IEEE 802.1Q (VLAN) 和 802.1D (以太网桥接) 兼容。

确保已加载 hdlc.o 和硬件驱动程序。它应该创建许多“hdlc”(hdlc0 等)网络设备,每个 WAN 端口一个。您需要“sethdlc”实用程序,从以下位置获取:

编译 sethdlc.c 实用程序

gcc -O2 -Wall -o sethdlc sethdlc.c

确保您使用的 sethdlc 版本与您的内核匹配。

使用 sethdlc 设置物理接口、时钟速率、使用的 HDLC 模式,如果使用帧中继,则添加任何所需的 PVC。通常你想要类似的东西

sethdlc hdlc0 clock int rate 128000
sethdlc hdlc0 cisco interval 10 timeout 25

或者

sethdlc hdlc0 rs232 clock ext
sethdlc hdlc0 fr lmi ansi
sethdlc hdlc0 create 99
ifconfig hdlc0 up
ifconfig pvc0 localIP pointopoint remoteIP

在帧中继模式下,在使用 pvc 设备之前,先启动主 hdlc 设备 (不为其分配任何 IP 地址)。

设置接口

  • v35 | rs232 | x21 | t1 | e1
    • 如果该卡具有软件可选的接口,则为给定端口设置物理接口

    loopback
    • 激活硬件环回(仅用于测试)

  • clock ext
    • RX 时钟和 TX 时钟都外部

  • clock int
    • RX 时钟和 TX 时钟都内部

  • clock txint
    • RX 时钟外部,TX 时钟内部

  • clock txfromrx
    • RX 时钟外部,TX 时钟从 RX 时钟导出

  • rate
    • 设置 bps 中的时钟速率(仅适用于“int”或“txint”时钟)

设置协议

  • hdlc - 设置原始 HDLC(仅 IP)模式

    nrz / nrzi / fm-mark / fm-space / manchester - 设置传输代码

    no-parity / crc16 / crc16-pr0 (CRC16 with preset zeros) / crc32-itu

    crc16-itu (具有 ITU-T 多项式的 CRC16) / crc16-itu-pr0 - 设置奇偶校验

  • hdlc-eth - 使用 HDLC 的以太网设备模拟。奇偶校验和编码与上面相同。

  • cisco - 设置 Cisco HDLC 模式(支持 IP、IPv6 和 IPX)

    interval - keepalive 数据包之间的间隔时间(以秒为单位)

    timeout - 在收到最后一个 keepalive 数据包后,经过多少秒

    我们认为链路已关闭

  • ppp - 设置同步 PPP 模式

  • x25 - 设置 X.25 模式

  • fr - 帧中继模式

    lmi ansi / ccitt / cisco / none - LMI(链路管理)类型

    dce - 帧中继 DCE(网络)端 LMI,而不是默认的 DTE(用户)。

    它与时钟无关!

    • t391 - 链路完整性验证轮询计时器(以秒为单位)- 用户

    • t392 - 轮询验证计时器(以秒为单位)- 网络

    • n391 - 完整状态轮询计数器 - 用户

    • n392 - 错误阈值 - 用户和网络

    • n393 - 监控的事件计数 - 用户和网络

仅限帧中继

  • create n | delete n - 添加/删除具有 DLCI #n 的 PVC 接口。新创建的接口将被命名为 pvc0、pvc1 等。

  • create ether n | delete ether n - 为以太网桥接帧添加设备。该设备将被命名为 pvceth0、pvceth1 等。

特定于板的问题

n2.o 和 c101.o 需要参数才能工作

insmod n2 hw=io,irq,ram,ports[:io,irq,...]

例子

insmod n2 hw=0x300,10,0xD0000,01

或者

insmod c101 hw=irq,ram[:irq,...]

例子

insmod c101 hw=9,0xdc000

如果构建到内核中,这些驱动程序需要内核(命令行)参数

n2.hw=io,irq,ram,ports:...

或者

c101.hw=irq,ram:...

如果您在使用 N2、C101 或 PLX200SYN 卡时遇到问题,您可以发出“private”命令来查看端口的数据包描述符环(在内核日志中)

sethdlc hdlc0 private

硬件驱动程序必须使用 #define DEBUG_RINGS 构建。将此信息附加到错误报告中将很有帮助。无论如何,如果您在使用此功能时遇到问题,请告诉我。

有关补丁和其他信息,请查看:<https://linuxkernel.org.cn/pub/linux/utils/net/hdlc/>。