Martin Varghese | 571912c | 2020-02-24 10:57:50 +0530 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ======================================== |
| 4 | Bare UDP Tunnelling Module Documentation |
| 5 | ======================================== |
| 6 | |
| 7 | There are various L3 encapsulation standards using UDP being discussed to |
| 8 | leverage the UDP based load balancing capability of different networks. |
| 9 | MPLSoUDP (__ https://tools.ietf.org/html/rfc7510) is one among them. |
| 10 | |
Martin Varghese | 1ed06db | 2020-07-28 22:35:52 +0530 | [diff] [blame] | 11 | The Bareudp tunnel module provides a generic L3 encapsulation support for |
| 12 | tunnelling different L3 protocols like MPLS, IP, NSH etc. inside a UDP tunnel. |
Martin Varghese | 571912c | 2020-02-24 10:57:50 +0530 | [diff] [blame] | 13 | |
Martin Varghese | 4b5f672 | 2020-02-24 10:58:35 +0530 | [diff] [blame] | 14 | Special Handling |
| 15 | ---------------- |
| 16 | The bareudp device supports special handling for MPLS & IP as they can have |
| 17 | multiple ethertypes. |
| 18 | MPLS procotcol can have ethertypes ETH_P_MPLS_UC (unicast) & ETH_P_MPLS_MC (multicast). |
| 19 | IP protocol can have ethertypes ETH_P_IP (v4) & ETH_P_IPV6 (v6). |
| 20 | This special handling can be enabled only for ethertypes ETH_P_IP & ETH_P_MPLS_UC |
| 21 | with a flag called multiproto mode. |
| 22 | |
Martin Varghese | 571912c | 2020-02-24 10:57:50 +0530 | [diff] [blame] | 23 | Usage |
| 24 | ------ |
| 25 | |
| 26 | 1) Device creation & deletion |
| 27 | |
Guillaume Nault | 34b85ad | 2020-07-20 17:46:58 +0200 | [diff] [blame] | 28 | a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc |
Martin Varghese | 571912c | 2020-02-24 10:57:50 +0530 | [diff] [blame] | 29 | |
| 30 | This creates a bareudp tunnel device which tunnels L3 traffic with ethertype |
| 31 | 0x8847 (MPLS traffic). The destination port of the UDP header will be set to |
| 32 | 6635.The device will listen on UDP port 6635 to receive traffic. |
| 33 | |
| 34 | b) ip link delete bareudp0 |
| 35 | |
Guillaume Nault | 34b85ad | 2020-07-20 17:46:58 +0200 | [diff] [blame] | 36 | 2) Device creation with multiproto mode enabled |
Martin Varghese | 4b5f672 | 2020-02-24 10:58:35 +0530 | [diff] [blame] | 37 | |
Guillaume Nault | 34b85ad | 2020-07-20 17:46:58 +0200 | [diff] [blame] | 38 | The multiproto mode allows bareudp tunnels to handle several protocols of the |
| 39 | same family. It is currently only available for IP and MPLS. This mode has to |
| 40 | be enabled explicitly with the "multiproto" flag. |
Martin Varghese | 4b5f672 | 2020-02-24 10:58:35 +0530 | [diff] [blame] | 41 | |
Guillaume Nault | 34b85ad | 2020-07-20 17:46:58 +0200 | [diff] [blame] | 42 | a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype ipv4 multiproto |
Martin Varghese | 4b5f672 | 2020-02-24 10:58:35 +0530 | [diff] [blame] | 43 | |
Guillaume Nault | 34b85ad | 2020-07-20 17:46:58 +0200 | [diff] [blame] | 44 | For an IPv4 tunnel the multiproto mode allows the tunnel to also handle |
| 45 | IPv6. |
| 46 | |
| 47 | b) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls_uc multiproto |
| 48 | |
| 49 | For MPLS, the multiproto mode allows the tunnel to handle both unicast |
| 50 | and multicast MPLS packets. |
Martin Varghese | 4b5f672 | 2020-02-24 10:58:35 +0530 | [diff] [blame] | 51 | |
| 52 | 3) Device Usage |
Martin Varghese | 571912c | 2020-02-24 10:57:50 +0530 | [diff] [blame] | 53 | |
| 54 | The bareudp device could be used along with OVS or flower filter in TC. |
| 55 | The OVS or TC flower layer must set the tunnel information in SKB dst field before |
| 56 | sending packet buffer to the bareudp device for transmission. On reception the |
| 57 | bareudp device extracts and stores the tunnel information in SKB dst field before |
| 58 | passing the packet buffer to the network stack. |