6pack 协议

这是 6pack-mini-HOWTO,由以下人员编写:

Andreas Könsgen DG3KQ

互联网:

ajk@comnets.uni-bremen.de

AMPR 网络:

dg3kq@db0pra.ampr.org

AX.25:

dg3kq@db0ach.#nrw.deu.eu

上次更新:1998 年 4 月 7 日

1. 什么是 6pack,它相比 KISS 的优势是什么?

6pack 是一种用于 PC 和 TNC 之间通过串行线路进行数据交换的传输协议。它可以替代 KISS 使用。

6pack 有两个主要优势:

  • PC 可以完全控制无线电通道。PC 和 TNC 之间会交换特殊的控制数据,以便 PC 随时知道 TNC 是否正在接收数据、是否发生 TNC 缓冲区欠载或溢出、是否设置了 PTT 等。此控制数据以高于正常数据的优先级进行处理,因此可以随时中断数据流以发出重要事件。这有助于改进信道访问和定时算法,因为一切都在 PC 中计算。甚至可以尝试与已知的 CSMA 和 DAMA 信道访问方法完全不同的东西。这种实时控制对于为通过菊花链连接的多个 TNC 提供连接尤其重要(但是,Linux 6pack 驱动程序目前不支持此功能)。

  • 每个通过串行线路传输的数据包都提供校验和,因此很容易检测到由于串行线路问题导致的错误。损坏的接收数据包不会传递到 AX.25 层。TNC 从 PC 收到的损坏数据包不会被传输。

有关 6pack 的更多详细信息,请参见位于 AX.25 实用程序包的 doc 目录中的文件 6pack.ps。

2. 谁开发了 6pack 协议?

6pack 协议由 Ekki Plicht DF4OR、Henning Rech DF9IC 和 Gunter Jost DK7WJ 开发。Gunter Jost 和 Matthias Welwarsky DG2FEF 编写的 6pack 驱动程序与 PC 版本的 FlexNet 一起提供。他们还为 TNC 编写了固件来执行 6pack 协议(参见下文第 4 节)。

3. 在哪里可以获得 Linux 的最新版本 6pack?

目前,6pack 相关内容可以通过匿名 ftp 从 db0bm.automation.fh-aachen.de 获取。在目录 /incoming/dg3kq 中,有一个名为 6pack.tgz 的文件。

4. 为 6pack 操作准备 TNC

为了能够使用 6pack,需要 TNC 的特殊固件。新购买的 TNC 的 EPROM 不包含 6pack,因此您必须自己编程 EPROM。用于 6pack EPROM 的镜像文件应该可以在找到 PC/FlexNet 的任何数据包无线电盒上找到。该文件的名称是 6pack.bin。该文件受版权保护,并由 FlexNet 团队维护。它可以根据 PC/FlexNet 附带的许可条款使用。请不要问我关于此文件的内部结构,因为我对此一无所知。我使用 6pack 协议的文本描述来编程 Linux 驱动程序。

TNC 包含一个 64kByte 的 EPROM,其中下半部分用于固件/KISS。上半部分要么是空的,要么有时会使用名为 TAPR 的软件进行编程。在后一种情况下,TNC 配备了一个 DIP 开关,因此您可以轻松地在两个系统之间切换。在编程新的 EPROM 时,其中一个系统会被 6pack 取代。替换 TAPR 是很有用的,因为现在很少使用此软件。如果您的 TNC 没有配备上述开关,您可以自己安装一个开关,该开关可以在 EPROM 的最高地址引脚的 HIGH 和 LOW 电平之间切换。插入新的 EPROM 并切换到 6pack 后,给 TNC 通电进行首次测试。如果固件正确初始化 TNC,则连接和状态 LED 会亮起约一秒钟。

5. 构建和安装 6pack 驱动程序

该驱动程序已在内核版本 2.1.90 上进行了测试。在较旧的内核中使用可能会导致编译错误,因为内核函数的接口在 2.1.8x 内核中已更改。

如何启用 6pack 支持:

  • 在 Linux 内核配置程序中,选择代码成熟度级别选项菜单,然后启用对开发驱动程序的提示。

  • 选择业余无线电支持菜单,然后启用串行端口 6pack 驱动程序。

  • 编译并安装内核和模块。

要使用该驱动程序,必须修改 AX.25 实用程序附带的 kissattach 程序。

  • 执行 cd 到保存 kissattach 源代码的目录。编辑 kissattach.c 文件。在顶部,插入以下几行:

    #ifndef N_6PACK
    #define N_6PACK (N_AX25+1)
    #endif
    

    然后找到以下行:

    int disc = N_AX25;

    用 N_6PACK 替换 N_AX25。

  • 重新编译 kissattach。将其重命名为 spattach,以避免混淆。

安装驱动程序:

  • 执行 insmod 6pack。查看您的 /var/log/messages 文件以检查模块是否已打印其初始化消息。

  • 执行 spattach,就像启动 KISS 端口时启动 kissattach 一样。检查内核是否打印消息“6pack:发现 TNC”。

  • 从这里开始,一切都应该像设置 KISS 端口一样工作。唯一的区别是,表示 6pack 端口的网络设备称为 sp 而不是 sl 或 ax。因此,sp0 将是第一个 6pack 端口。

尽管该驱动程序已在各种平台上进行了测试,但我仍然将其声明为 ALPHA。请小心!在 insmod 6pack 模块和 spattaching 之前,请同步您的磁盘。如果您的计算机行为异常,请注意。阅读本文件第 6 节,了解已知问题。

请注意,TNC 的连接和状态 LED 的控制方式与 TNC 与 PC/FlexNet 一起使用时的控制方式不同。使用 FlexNet 时,如果有连接,则连接 LED 会亮起;如果有数据在 PC 的 AX.25 引擎的缓冲区中,并且必须传输,则状态 LED 会亮起。在 Linux 下,6pack 层位于 AX.25 层之外,因此 6pack 驱动程序不知道尚未传输的连接或数据。因此,LED 的控制方式与 KISS 模式下的控制方式相同:如果数据通过串行线路从 PC 传输到 TNC,则连接 LED 会亮起;如果数据发送到 PC,则状态 LED 会亮起。

6. 已知问题

在 2.0.3x 内核上测试驱动程序并以 9600 波特或更高的无线电信道数据速率运行时,驱动程序在某些系统上有时可能会打印消息“6pack:校验和错误”,这是由于如果另一站发送两个或多个连续数据包,则会发生数据丢失。我被告知这是由于 2.0.3x 内核的串行驱动程序存在问题。我尚不知道该问题在 2.1.x 内核中是否仍然存在,因为我听说串行驱动程序代码已在 2.1.x 中进行了更改。

当使用 ifconfig 关闭 sp 接口时,如果仍然存在运行 IP 连接的 AX.25 连接(即使该 IP 连接已关闭),则内核会崩溃。当仍然有裸 AX.25 连接运行时,不会发生此问题。我不知道这是 6pack 驱动程序的问题还是内核中的其他问题。

该驱动程序已作为模块进行了测试,但尚未作为内核内置驱动程序进行测试。

6pack 协议支持 TNC 以令牌环方式菊花链连接,该令牌环连接到 PC 的一个串行端口。此功能未实现,并且至少目前我无法做到这一点,因为我没有机会构建 TNC 菊花链并对其进行测试。

源代码中的一些注释是不准确的。它们是从 SLIP/KISS 驱动程序中遗留下来的,6pack 驱动程序就是从该驱动程序派生的。我尚未修改或删除它们——抱歉!代码本身需要一些清理和优化。这将在以后的版本中完成。

如果您遇到错误,或者您对驱动程序有任何疑问或建议,请随时给我发邮件,使用本文件开头给出的地址。

玩得开心!

Andreas