diff options
author | Ole Troan <ot@cisco.com> | 2018-03-08 12:30:43 +0100 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2018-03-14 14:06:02 +0000 |
commit | 298c69510ff4b64a262d465eb8877c4e7f4e60e0 (patch) | |
tree | e9ecf5fe32203ff40798841ac6442c9eaca943ca /src/vnet/ipip/sixrd.h | |
parent | 1c5ddbb22ba37e022a4cbf7c23d3cf6490d8ac6e (diff) |
IPIP: Add IP{v4,v6} over IP{v4,v6} configured tunnel support.
Change-Id: I166301c9e2388bae5f70ec0179d663a2703e27f5
Signed-off-by: Ole Troan <ot@cisco.com>
Diffstat (limited to 'src/vnet/ipip/sixrd.h')
-rw-r--r-- | src/vnet/ipip/sixrd.h | 72 |
1 files changed, 72 insertions, 0 deletions
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 <stdbool.h> +#include <vnet/fib/ip6_fib.h> +#include <vnet/ip/ip.h> +#include <vnet/ipip/ipip.h> +#include <vnet/vnet.h> +#include <vppinfra/error.h> + +#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: + */ |