Type: docs Change-Id: I9b5e5137eb4c1e89f6e8d7a278cd11a0fd496471 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
121 lines
2.7 KiB
C
121 lines
2.7 KiB
C
/*
|
|
* Copyright (c) 2019 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.
|
|
*/
|
|
|
|
/**
|
|
* A L3 cross connect will send all traffic that is received on the input
|
|
* interface to the [set of] paths requested.
|
|
* It is a much more memory efficient solution than using a separate IP table
|
|
* for each input interface and much faster than an ABF match all rule.
|
|
*/
|
|
|
|
#ifndef __L3XC_H__
|
|
#define __L3XC_H__
|
|
|
|
#include <vnet/fib/fib_node.h>
|
|
|
|
#define L3XC_PLUGIN_VERSION_MAJOR 1
|
|
#define L3XC_PLUGIN_VERSION_MINOR 0
|
|
|
|
/**
|
|
*/
|
|
typedef struct l3xc_t_
|
|
{
|
|
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
|
|
/**
|
|
* Linkage into the FIB graph
|
|
*/
|
|
fib_node_t l3xc_node;
|
|
|
|
/**
|
|
* The path-list describing how to forward in case of a match
|
|
*/
|
|
fib_node_index_t l3xc_pl;
|
|
|
|
fib_protocol_t l3xc_proto;
|
|
|
|
/**
|
|
* Sibling index on the path-list
|
|
*/
|
|
u32 l3xc_sibling;
|
|
|
|
/**
|
|
* The input interface
|
|
*/
|
|
u32 l3xc_sw_if_index;
|
|
|
|
/**
|
|
* DPO for forwarding
|
|
*/
|
|
dpo_id_t l3xc_dpo;
|
|
} l3xc_t;
|
|
|
|
/**
|
|
* Create or update an L3XC Policy
|
|
*
|
|
* @param sw_if_index the input interface
|
|
* @param is_ipv6 - 0 if ip4, 1 if ip6
|
|
* @param rpaths The set of paths to add to the forwarding set
|
|
* @return error code
|
|
*/
|
|
extern int l3xc_update (u32 sw_if_index,
|
|
u8 is_ip6, const fib_route_path_t * rpaths);
|
|
|
|
/**
|
|
* Delete an L3XC.
|
|
*
|
|
* @param sw_if_index the input interface
|
|
* @param is_ipv6 - 0 if ip4, 1 if ip6
|
|
*/
|
|
extern int l3xc_delete (u32 sw_if_index, u8 is_ip6);
|
|
|
|
/**
|
|
* Callback function invoked during a walk of all policies
|
|
*/
|
|
typedef int (*l3xc_walk_cb_t) (index_t l3xci, void *ctx);
|
|
|
|
/**
|
|
* Walk/visit each of the L3XC policies
|
|
*/
|
|
extern void l3xc_walk (l3xc_walk_cb_t cb, void *ctx);
|
|
|
|
/**
|
|
* Find a L3 XC object from an interface and FIB protocol
|
|
*/
|
|
extern index_t l3xc_find (u32 sw_if_index, fib_protocol_t fproto);
|
|
|
|
/**
|
|
* Data-plane functions
|
|
*/
|
|
extern l3xc_t *l3xc_pool;
|
|
|
|
static_always_inline l3xc_t *
|
|
l3xc_get (u32 index)
|
|
{
|
|
return (pool_elt_at_index (l3xc_pool, index));
|
|
}
|
|
|
|
extern vlib_node_registration_t l3xc_ip4_node;
|
|
extern vlib_node_registration_t l3xc_ip6_node;
|
|
|
|
/*
|
|
* fd.io coding-style-patch-verification: ON
|
|
*
|
|
* Local Variables:
|
|
* eval: (c-set-style "gnu")
|
|
* End:
|
|
*/
|
|
|
|
#endif
|