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 在 网络编程
每月 152 次下载
98KB
2K SLoC
dvb-gse
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=debug
或 RUST_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 License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,任何有意提交以包含在您的工作中的贡献,都将根据上述方式双许可,没有任何额外的条款或条件。
依赖项
~1.6–2.6MB
~56K SLoC