#ethernet #networking #tcp

ethox-io-uring

为ethox实现的io-uring设备

1个不稳定版本

0.0.2 2020年2月8日

#46 in #ethernet

AGPL-3.0-only

1MB
20K SLoC

Ethox

Ethox 是一个独立的网络和unikernel系统库,重点在于 速度 和稳定性。它包含将功能编译成完整网络堆栈的基本结构。它也可能对裸机微控制器有用,但它并非为此主要目标而设计。

作为一致性能承诺的一部分,Ethox 限制自己永不执行内部分配。然而,用户可以选择在认为必要的地方这样做。它仅针对 stablenightly Rust,并且不旨在与以前的稳定版本兼容。

概述和功能

初始功能集将是 eth+(ipv4|ipv6)+(udp+tcp)。还支持 arpicmp。更完整的功能列表请参见下文 详情

CI Status License Scc lines of code Scc comments

用法

Ethox 的主要接口围绕零拷贝构建,尽可能长时间。它不是基于套接字,而是基于动态构建的特质实现者树,这些实现者提供特定层功能、数据包接收和传输的回调。数据包缓冲区在这些回调中永远不会 拥有,而是对网络设备特定结构的可变、唯一的引用,该结构可以随意调整大小和重用。在网卡级别启用了数据包的入站和出站批处理。在上面的层中没有提供批处理。

许可证

Ethox 在AGPLv3下分发(原因)。目前,仅接受放弃版权的贡献,以便将来可以自由选择其他许可选项。未来可能会有所放宽这些条件。

原始网络代码的大部分内容来自 smoltcp,版权 whitequark@whitequark.org,根据其0-clause BSD许可证的条款在此处重述和修改。它可能已经发生了很大变化。

详情

每层更多的详细信息,包括支持、不支持和正在开发中的功能。请注意,这可能仍然会迅速演变,可能不是最新的。这也记录了可能的未来添加项。

Ethernet

Ethernet 是唯一支持的中介/链路层。

  • 支持常规的 Ethernet II 帧。
  • 支持单播和广播数据包(不支持组播)。
  • 不支持 802.3 帧和 802.1Q。
  • 不支持 Jumbo 帧。

IPv4

  • 生成并验证 IPv4 报头校验和。可能被忽略。
  • 支持 CIDR 表。
  • 不支持 每路由 QoS 和 TTL。
  • 支持链路本地路由。
  • 支持广播和网络寻址。
  • 支持前缀 31 和 32 网络。
  • 不支持 IGMP。
  • 不支持 IPv4 分片。
  • 不支持 IPv4 选项,并静默丢弃。

IPv4 — Icmpv4

  • 生成 Icmpv4 回显响应。
  • 支持 Icmpv4 报头校验和。
  • 可以将消息(包括不可达错误)传递到自定义接收器逻辑。
  • 不支持 生成 Icmpv4 错误。

IPv4 — Arp

  • ARP 数据包(请求和查询)自动执行并支持。
  • ARP 条目定期重新验证(1 分钟)。
  • 不支持 随意请求和回复,并忽略。
  • 不支持 自动配置和冲突检测。

IPv6

  • 不支持 IPv6 选项。
  • 不支持 IPv6 分片。

IPv6 — Icmpv6

尚未 支持。

IPv6 — NDISC

不支持 邻居发现。

Tcp

  • 生成并验证报头校验和。可能被忽略。
  • 消息的零复制接收和发送,所有缓冲区均受用户控制。
  • 遵循最大分段大小。
  • 协商并利用 Windows 缩放。可能被配置。
  • 提供用于任意长度重组的预定义结构。
  • 飞行中的字节数不受段大小限制。
  • 初始序列号根据 rfc6528(keyed siphash-2-4)生成。
  • 不支持 指数退避。
  • 忽略 选择性确认。
  • 未实现 拥塞控制。
  • 未实现 往返时间估计。
  • 未实现 MTU 发现。
  • 未实现 延迟确认。
  • 未实现 避免愚蠢窗口综合症。
  • 未实现 Nagle 算法。
  • 不支持 时间戳。
  • 忽略 紧急指针。
  • 未实现 探测零窗口。

Udp

  • 生成,验证报头校验和,可省略,可能被忽略。
  • 消息的零复制接收和发送

为什么是 AGPL

我可能最终会想将所有内容重新许可给最宽松的许可,以符合原始库的精神。然而,我目前无法承诺积极开发这个库。我希望这个许可能够鼓励用户,尤其是那些有成品产品的用户,贡献代码并扩大范围。如果您不同意这种立场,无论是从伦理、法律还是其他方面,那么欢迎发送一封详细说明您观点的友好电子邮件。

依赖项

~515KB
~12K SLoC