6pack 协议¶
这是 6pack-mini-HOWTO,由以下人员编写:
Andreas Könsgen DG3KQ
- 互联网:
- AMPR-net:
- AX.25:
上次更新:1998 年 4 月 7 日
1. 什么是 6pack,与 KISS 相比有什么优势?¶
6pack 是一种通过串行线路在 PC 和 TNC 之间进行数据交换的传输协议。它可以作为 KISS 的替代方案使用。
6pack 有两个主要优点
PC 可以完全控制无线信道。PC 和 TNC 之间交换特殊的控制数据,以便 PC 随时知道 TNC 是否正在接收数据、是否发生了 TNC 缓冲区欠载或溢出、PTT 是否已设置等等。此控制数据以比普通数据更高的优先级进行处理,因此可以随时中断数据流以发出重要事件。这有助于改进信道访问和定时算法,因为所有内容都在 PC 中计算。甚至可以尝试与已知的 CSMA 和 DAMA 信道访问方法完全不同的方法。这种实时控制对于连接在 PC 之间并通过菊花链连接的多个 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?¶
目前,可以通过匿名 ftp 从 db0bm.automation.fh-aachen.de 获取 6pack 相关内容。在目录 /incoming/dg3kq 中,有一个名为 6pack.tgz 的文件。
4. 准备 TNC 以进行 6pack 操作¶
要使用 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_AX25 替换为 N_6PACK。
重新编译 kissattach。将其重命名为 spattach 以避免混淆。
安装驱动程序:¶
执行 insmod 6pack。查看您的 /var/log/messages 文件,以检查该模块是否已打印其初始化消息。
像启动 KISS 端口时启动 kissattach 一样执行 spattach。检查内核是否打印消息“6pack:找到 TNC”。
从这里开始,一切都应该像设置 KISS 端口一样工作。唯一的区别是,代表 6pack 端口的网络设备称为 sp 而不是 sl 或 ax。因此,sp0 将是第一个 6pack 端口。
尽管该驱动程序已在各种平台上进行了测试,但我仍将其声明为 ALPHA。小心!在 insmod 6pack 模块和 spattach 之前,请同步您的磁盘。注意您的计算机是否表现异常。阅读本文件的第 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 Baud 或更高的数据速率运行时,驱动程序有时可能会在某些系统上打印消息“6pack:错误校验和”,这是由于如果其他站点发送两个或多个后续数据包,则会发生数据丢失。有人告诉我这是由于 2.0.3x 内核的串行驱动程序存在问题。我尚不清楚 2.1.x 内核是否仍然存在该问题,因为我听说串行驱动程序代码已在 2.1.x 中更改。
当使用 ifconfig 关闭 sp 接口时,如果仍然存在 AX.25 连接,并且该连接正在运行 IP 连接,即使该 IP 连接已关闭,内核也会崩溃。当仍有裸 AX.25 连接运行时,不会发生该问题。我不知道这是 6pack 驱动程序的问题还是内核中的其他问题。
该驱动程序已作为模块进行了测试,尚未作为内核内置驱动程序进行测试。
6pack 协议支持在令牌环中菊花链接 TNC,该令牌环连接到 PC 的一个串行端口。此功能尚未实现,并且至少目前我无法做到这一点,因为我没有机会构建 TNC 菊花链并进行测试。
源代码中的某些注释不准确。它们是从 SLIP/KISS 驱动程序中留下的,6pack 驱动程序是从 SLIP/KISS 驱动程序派生的。我尚未修改或删除它们 - 抱歉!代码本身需要一些清理和优化。这将在以后的版本中完成。
如果您遇到错误,或者您对该驱动程序有任何问题或建议,请随时通过本文件开头提供的地址给我发送邮件。
玩得开心!
Andreas