这个项目能做什么

pktc 是一个命令行工具和树平铺编译器,允许用户描述在网络线路上期望的数据包结构,并自动推导出相应的 Linux 内核隧道设备配置。 与 `netplan`、`systemd-networkd` 和 NetworkManager 要求先指定设备类型再填写参数不同,pktc 采用了相反的方法:用户描述封装栈为一棵树,工具则确定能产生该封装栈的内核原语。 其核心思想是通过树平铺进行指令选择。封装栈被展平为一个脊柱——即协议层的线性列表——然后用设备形状的“瓦片”覆盖。这一技术类似于编译器后端选择机器指令的方式,只不过这里的瓦片是 Linux 隧道设备,而生成的代码是 `iproute2` 命令。 支持的瓦片包括 IPIP(`ipv4 · ipv4`)、GRE(`ipv4 · gre · ipv4`)、GRE tap(`ipv4 · gre · ethernet`)以及 VXLAN(`ipv4 · udp · vxlan · ethernet`)。嵌套隧道可以自然地组合,无需特殊逻辑处理多个瓦片。 主要命令包括: - `pktc lower` —— 输出用于创建设备的 `ip link` / `ip addr` 命令; - `pktc mirror` —— 输出远端对称配置; - `pktc expect` —— 输出底层流量应如何以供验证; - `pktc parse` —— 从描述文件中输出封装脊柱。 一个显著特性是环回测试模式:`make netns` 在 veth 对上构建两个网络命名空间,使用同一描述配置两端,推送流量并捕获底层流量。黄金测试证明生成了预期命令;内核测试证明设备已创建;捕获结果证明设备承载了树结构所声称的内容。 可通过 `go install github.com/vinodhalaharvi/pktc/cmd/pktc@latest` 安装,或通过 `make check`、`make demo` 和 `make netns` 从源码构建。 该项目处于早期阶段,目前支持四个瓦片和一个后端。Geneve、VLAN、XFRM 和 WireGuard 被有意省略,因为在开发期间这些内核模块不可用。