/* * Copyright (c) 2016 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. */ /** * @file * @brief Common utility functions for IPv4, IPv6 and L2 LISP-GPE tunnels. * */ #ifndef LISP_GPE_TUNNEL_H__ #define LISP_GPE_TUNNEL_H__ #include <vnet/lisp-gpe/lisp_gpe.h> #include <vnet/lisp-gpe/lisp_gpe_packet.h> /** * Forward declaration */ struct lisp_gpe_adjacency_t_; /** * A Key for a tunnel */ typedef struct lisp_gpe_tunnel_key_t_ { ip_address_t rmt; ip_address_t lcl; u32 fib_index; } lisp_gpe_tunnel_key_t; /** * @brief A LISP GPE Tunnel. * * A tunnel represents an associatation between a local and remote RLOC. * As such it represents a unique LISP rewrite. */ typedef struct lisp_gpe_tunnel_t_ { /** * RLOC pair and rloc fib_index. This is the tunnel's key. */ lisp_gpe_tunnel_key_t *key; /** * number of reference counting locks */ u32 locks; /** * the FIB entry through which the remote rloc is reachable s */ fib_node_index_t fib_entry_index; } lisp_gpe_tunnel_t; extern index_t lisp_gpe_tunnel_find_or_create_and_lock (const locator_pair_t * pair, u32 rloc_fib_index); extern void lisp_gpe_tunnel_unlock (index_t lgti); extern const lisp_gpe_tunnel_t *lisp_gpe_tunnel_get (index_t lgti); extern u8 *lisp_gpe_tunnel_build_rewrite (const lisp_gpe_tunnel_t * lgt, const struct lisp_gpe_adjacency_t_ *ladj, lisp_gpe_next_protocol_e payload_proto); extern u8 *format_lisp_gpe_tunnel (u8 * s, va_list * args); #endif /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */