15 个不稳定版本 (5 个重大更改)

0.6.2 2024 年 5 月 1 日
0.6.0 2023 年 12 月 12 日
0.5.0 2023 年 11 月 1 日
0.3.2 2023 年 7 月 19 日
0.2.0 2022 年 11 月 28 日

#629网络编程

Download history 125/week @ 2024-04-27 10/week @ 2024-05-04 38/week @ 2024-05-18 3/week @ 2024-05-25 1/week @ 2024-06-22 182/week @ 2024-06-29 148/week @ 2024-07-27 4/week @ 2024-08-10

每月 152 次下载

MIT/Apache

98KB
2K SLoC

dvb-gse

Crates.io Rust

dvg-gse 是 DVB GSE (通用流封装) 协议和相关协议的 Rust 实现。

它主要被设计成 CLI 应用程序,可以从 DVB-S2 接收器(如 Longmynd)通过 UDP 或 TCP 数据包接收 BBFRAMEs,从连续模式的 GSE 流中获取 IP 数据包,并将这些 IP 数据包发送到 TUN 设备。

该库也可以用作库来处理 GSE 数据包和 DVB-S2/DVB-S2X BBFRAMES。

快速入门

使用 cargo 安装 dvb-gse

cargo install dvb-gse

创建一个 TUN 设备以接收 IP 数据包

sudo ip tuntap add dev tun0 mode tun
sudo ip link set tun0 up

运行 dvb-gse

dvb-gse --listen 0.0.0.0:2000 --tun tun0

可以使用环境变量 RUST_LOG=debugRUST_LOG=trace 来查看更详细的日志信息。

现在发送 BBFRAMEs 到 UDP 端口 2000(具体操作取决于所使用的 DVB-S2 接收器)。dvb-gse 将从 GSE 流中获取 IP 数据包并将它们写入 tun0 接口。这些数据包可以通过在 tun0 上运行 Wireshark 或 tcpdump 来检查。

输入格式

CLI 应用程序支持以下 BBFRAMEs 输入格式。输入格式通过 --input 参数选择

UDP 片段 (--input UDP--input "UDP 片段")

这对应于被分割成多个 UDP 数据包的 BBFRAMEs(因为通常 DVB-S2 BBFRAMEs 大于 1500 字节的 MTU)。需要遵循以下规则。

  • 每个UDP数据包的负载可以可选地以最多64字节的头部开始,该头部将被此应用程序丢弃。头部长度由--header-length参数设置。默认情况下,假设没有头部。

  • 每个BBFRAME的开始应在头部末尾发生,或在没有头部的情况下,在UDP数据包负载的开始。

  • BBFRAME填充可以移除或保留。如果可能的话,建议移除BBFRAME填充,以减少网络流量并简化解碎片器的操作。

  • BBFRAME可以以任何方式分割成多个UDP数据包。

CLI应用程序试图从丢失的UDP数据包中恢复。

包含完整BBFRAMES的UDP数据包(--input "UDP complete"

这对应于单个UDP数据包中携带的BBFRAME(通常是一个巨包)。需要遵循以下规则。

  • 每个UDP数据包的负载可以可选地以最多64字节的头部开始,该头部将被此应用程序丢弃。头部长度由--header-length参数设置。默认情况下,假设没有头部。

  • 每个BBFRAME应完全包含在单个UDP数据包中。BBFRAME应紧随头部之后。

  • 在同一个UDP数据包中,可以在BBFRAME之后有填充或其他数据。

UDP数据包可能会丢失。CLI应用程序将优雅地处理这种情况。

TCP流(--input TCP

这对应于在TCP流中接收BBFRAME。CLI应用程序充当服务器。需要遵循以下规则。

  • 每个BBFRAME可以可选地以最多64字节的头部开始,该头部将被此应用程序丢弃。头部长度由--header-length参数设置。默认情况下,假设没有头部。

  • BBFRAME(包括其头部,如果适用)需要在TCP流中连续出现。

  • BBFRAME填充必须移除。流中BBFRAME的长度必须等于BBHEADER的长度加上其DFL值除以8。

  • 除了头部和BBFRAME之外,TCP流中不能有其他数据。

如果发生错误或客户端关闭连接,CLI应用程序将继续监听新客户端。

API文档

dvb-gse Rust crate的文档托管在docs.rs

许可证

根据您的要求,许可为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,任何有意提交以包含在您的工作中的贡献,都将根据上述方式双许可,没有任何额外的条款或条件。

依赖项

~1.6–2.6MB
~56K SLoC