【发布时间】:2015-04-25 01:12:31
【问题描述】:
我需要让运行 2.6.12.1 内核的旧 Linux 机器与正在使用的旧计算机通信:
ISO 8602 数据报(无连接服务)1987 12 15(第 1 版)
ISO 8073 第 4 类(面向连接的服务)
这些正在使用“非活动网络层”子集。 (我很确定这意味着我不必担心路由问题。两个端点用它们的 mac 地址互相攻击。)
我有一个实现无连接部分的内核模块。为了使面向连接的服务可操作,最好的方法是什么?我一直在参考 tcp 实现,将 struct proto_ops .connect、.accept、.listen 函数添加到我现有的无连接驱动程序中。
也许有更好的方法?我花了很多时间试图确定 tcp 代码在做什么,然后确定这是否与我的需求相关。例如,不需要 Nagle 算法,因为我没有传输少量数据。此外,我可能不需要很多错误恢复和流量控制的东西,因为我知道两个端点正在传输的数据以及它们传输的频率。我的计划是首先通过任何简单的(如果有的话)数据包重传、排序等来实现这一点。我的wireshark 看起来类似于我从实时系统中获得的wireshark 捕获。然后尝试使用真实的东西,然后添加任何似乎必要的错误恢复/重新传输的东西。换句话说,试图确定我想要复制的 tcp/stream 实现的核心与我可能永远不需要的额外纠错/流控制的内容是一个痛苦。
我发现 \net\core\stream.c 说:
* 通用流处理例程。这些对大多数人来说都是通用的
* 协议。甚至IP。今晚 8-)。
* 这是因为 TCP、LLC(也包括其他)层都有大部分
* 相同的 sendmsg() 和 recvmsg() 代码。
*所以我们(将)在这里分享。
这向我暗示,也许我可以从一个更简单的流开始。有人可以推荐一个我应该从而不是 tcp 开始的更基本的流驱动程序吗?
是否有提供基本流实现的示例代码?
【问题讨论】:
标签: linux tcp kernel protocols osi