裸 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 模式的標誌啟用此特殊處理。

用法

  1. 裝置建立和刪除

    1. ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc

      這將建立一個 bareudp 隧道裝置,該裝置透過 ethertype 0x8847(MPLS 流量)隧道傳輸 L3 流量。 UDP 標頭的目標埠將設定為 6635。該裝置將偵聽 UDP 埠 6635 以接收流量。

    2. ip link delete bareudp0

  2. 啟用 multiproto 模式的裝置建立

multiproto 模式允許 bareudp 隧道處理同一系列的多個協議。 目前僅適用於 IP 和 MPLS。 必須使用“multiproto”標誌顯式啟用此模式。

  1. ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto

    對於 IPv4 隧道,multiproto 模式允許隧道也處理 IPv6。

  2. ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto

    對於 MPLS,multiproto 模式允許隧道處理單播和多播 MPLS 資料包。

  1. 裝置用法

bareudp 裝置可以與 OVS 或 TC 中的 flower 過濾器一起使用。 OVS 或 TC flower 層必須在將資料包緩衝區傳送到 bareudp 裝置進行傳輸之前,在 SKB dst 欄位中設定隧道資訊。 在接收時,bareUDP 裝置提取隧道資訊並將其儲存在 SKB dst 欄位中,然後將資料包緩衝區傳遞到網路堆疊。