From 298c69510ff4b64a262d465eb8877c4e7f4e60e0 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Thu, 8 Mar 2018 12:30:43 +0100 Subject: IPIP: Add IP{v4,v6} over IP{v4,v6} configured tunnel support. Change-Id: I166301c9e2388bae5f70ec0179d663a2703e27f5 Signed-off-by: Ole Troan --- src/vnet/ipip/sixrd.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/vnet/ipip/sixrd.h (limited to 'src/vnet/ipip/sixrd.h') diff --git a/src/vnet/ipip/sixrd.h b/src/vnet/ipip/sixrd.h new file mode 100644 index 00000000000..f107d5e76cd --- /dev/null +++ b/src/vnet/ipip/sixrd.h @@ -0,0 +1,72 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2009-2014 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *--------------------------------------------------------------------------- + */ +#include +#include +#include +#include +#include +#include + +#define SIXRD_DEFAULT_MTU 1480 /* 1500 - IPv4 header */ + +#define foreach_sixrd_error \ + /* Must be first. */ \ + _(NONE, "valid SIXRD packets") \ + _(BAD_PROTOCOL, "bad protocol") \ + _(SEC_CHECK, "security check failed") \ + _(NO_TUNNEL, "no tunnel") + + +typedef enum +{ +#define _(sym, str) SIXRD_ERROR_##sym, + foreach_sixrd_error +#undef _ + SIXRD_N_ERROR, +} sixrd_error_t; + +extern sixrd_main_t sixrd_main; + +static_always_inline sixrd_tunnel_t * +find_tunnel_by_ip4_address (ip4_address_t * ip) +{ + sixrd_main_t *sm = &sixrd_main; + uword *p; + p = hash_get (sm->tunnel_by_ip, ip->as_u32); + if (!p) + return NULL; + return pool_elt_at_index (sm->tunnels, p[0]); +} + +static_always_inline sixrd_tunnel_t * +ip4_sixrd_get_tunnel (u32 sdi, ip4_address_t * addr, u8 * error) +{ + sixrd_tunnel_t *t = find_tunnel_by_ip4_address (addr); + if (!t) + { + *error = SIXRD_ERROR_NO_TUNNEL; + return NULL; + } + return t; +} + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ -- cgit 1.2.3-korg