From e294de6f876587ddc34ab02771771aea60087adc Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 21 Dec 2020 09:52:24 +0000 Subject: ipip: Support MPLS over IP Type: feature Signed-off-by: Neale Ranns Change-Id: Ief1755131297afcaa14fe74fd8dd28c71a92fbe6 --- src/vnet/ipip/node.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/vnet/ipip/node.c') 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 #include -#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) -- cgit 1.2.3-korg