diff options
author | Neale Ranns <nranns@cisco.com> | 2020-12-21 09:52:24 +0000 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-01-07 15:48:43 +0000 |
commit | e294de6f876587ddc34ab02771771aea60087adc (patch) | |
tree | a68640401fac25d1d137dd119dbb6a03c7938173 /src/vnet/ipip/node.c | |
parent | a9e2774f5561ccb77c8243a196f93f5070f6c5ad (diff) |
ipip: Support MPLS over IP
Type: feature
Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ief1755131297afcaa14fe74fd8dd28c71a92fbe6
Diffstat (limited to 'src/vnet/ipip/node.c')
-rw-r--r-- | src/vnet/ipip/node.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/vnet/ipip/node.c b/src/vnet/ipip/node.c index baaeee863fc..b008a21a20f 100644 --- a/src/vnet/ipip/node.c +++ b/src/vnet/ipip/node.c @@ -22,11 +22,12 @@ #include <vnet/tunnel/tunnel_dp.h> #include <vppinfra/sparse_vec.h> -#define foreach_ipip_input_next \ - _(PUNT, "error-punt") \ - _(DROP, "error-drop") \ - _(IP4_INPUT, "ip4-input") \ - _(IP6_INPUT, "ip6-input") +#define foreach_ipip_input_next \ + _ (PUNT, "error-punt") \ + _ (DROP, "error-drop") \ + _ (IP4_INPUT, "ip4-input") \ + _ (IP6_INPUT, "ip6-input") \ + _ (MPLS_INPUT, "mpls-input") typedef enum { @@ -175,6 +176,17 @@ ipip_input (vlib_main_t * vm, vlib_node_runtime_t * node, else tunnel_decap_fixup_4o4 (t0->flags, ip40 + 1, ip40); } + else if (inner_protocol0 == IP_PROTOCOL_MPLS_IN_IP) + { + next0 = IPIP_INPUT_NEXT_MPLS_INPUT; + + if (is_ipv6) + tunnel_decap_fixup_mplso6 ( + t0->flags, (mpls_unicast_header_t *) (ip60 + 1), ip60); + else + tunnel_decap_fixup_mplso4 ( + t0->flags, (mpls_unicast_header_t *) ip40 + 1, ip40); + } if (!is_ipv6 && t0->mode == IPIP_MODE_6RD && t0->sixrd.security_check) |