裸 UDP 隧道模块文档¶
目前正在讨论各种使用 UDP 的 L3 封装标准,以利用不同网络基于 UDP 的负载均衡能力。 MPLSoUDP(https://tools.ietf.org/html/rfc7510)就是其中之一。
Bareudp 隧道模块为在 UDP 隧道内隧道传输不同的 L3 协议(如 MPLS、IP、NSH 等)提供通用的 L3 封装支持。
特殊处理¶
bareudp 设备支持对 MPLS 和 IP 的特殊处理,因为它们可以有多个 ethertype。 MPLS 协议可以具有 ethertype ETH_P_MPLS_UC(单播)和 ETH_P_MPLS_MC(多播)。 IP 协议可以具有 ethertype ETH_P_IP (v4) 和 ETH_P_IPV6 (v6)。 只有 ethertype ETH_P_IP 和 ETH_P_MPLS_UC 可以通过一个名为 multiproto 模式的标志启用此特殊处理。
用法¶
设备创建和删除
ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc
这将创建一个 bareudp 隧道设备,该设备通过 ethertype 0x8847(MPLS 流量)隧道传输 L3 流量。 UDP 标头的目标端口将设置为 6635。该设备将侦听 UDP 端口 6635 以接收流量。
ip link delete bareudp0
启用 multiproto 模式的设备创建
multiproto 模式允许 bareudp 隧道处理同一系列的多个协议。 目前仅适用于 IP 和 MPLS。 必须使用“multiproto”标志显式启用此模式。
ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto
对于 IPv4 隧道,multiproto 模式允许隧道也处理 IPv6。
ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto
对于 MPLS,multiproto 模式允许隧道处理单播和多播 MPLS 数据包。
设备用法
bareudp 设备可以与 OVS 或 TC 中的 flower 过滤器一起使用。 OVS 或 TC flower 层必须在将数据包缓冲区发送到 bareudp 设备进行传输之前,在 SKB dst 字段中设置隧道信息。 在接收时,bareUDP 设备提取隧道信息并将其存储在 SKB dst 字段中,然后将数据包缓冲区传递到网络堆栈。