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/plugins/sixrd/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/plugins/sixrd/sixrd.h')
-rw-r--r-- | src/plugins/sixrd/sixrd.h | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/src/plugins/sixrd/sixrd.h b/src/plugins/sixrd/sixrd.h deleted file mode 100644 index f443c039a13..00000000000 --- a/src/plugins/sixrd/sixrd.h +++ /dev/null @@ -1,123 +0,0 @@ -/*--------------------------------------------------------------------------- - * 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/vnet.h> -#include <vppinfra/error.h> - -#define SIXRD_DEFAULT_MTU 1480 /* 1500 - IPv4 header */ - -typedef struct -{ - u32 fib_index; - u32 hw_if_index; - u32 sw_if_index; - u32 tunnel_index; - ip6_address_t ip6_prefix; - ip4_address_t ip4_prefix; - ip4_address_t ip4_src; - u8 ip6_prefix_len; - u8 ip4_prefix_len; - - /* helpers */ - u8 shift; - - u16 mtu; - bool security_check; -} sixrd_tunnel_t; - -typedef struct -{ - u16 msg_id_base; - - /* pool of SIXRD domains */ - sixrd_tunnel_t *tunnels; - u32 *tunnel_index_by_sw_if_index; - uword *tunnel_by_ip; - -} sixrd_main_t; - -#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; - -/* - * sixrd_get_addr - */ -static_always_inline u32 -sixrd_get_addr_net (const sixrd_tunnel_t * t, u64 dal) -{ - /* 1:1 mode */ - if (t->ip4_prefix_len == 32) - return (t->ip4_prefix.as_u32); - - dal = clib_net_to_host_u64 (dal); - - /* Grab 32 - ip4_prefix_len bits out of IPv6 address from offset - * ip6_prefix_len */ - u32 mask = ~(~0ULL << (32 - t->ip4_prefix_len)); - u32 ip4 = - clib_net_to_host_u32 (t-> - ip4_prefix.as_u32) | ((u32) (dal >> t-> - shift) & mask); - return clib_host_to_net_u32 (ip4); -} - -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: - */ |