48 #ifndef included_ip_lookup_h 49 #define included_ip_lookup_h 61 #define IP_FLOW_HASH_SRC_ADDR (1<<0) 62 #define IP_FLOW_HASH_DST_ADDR (1<<1) 63 #define IP_FLOW_HASH_PROTO (1<<2) 64 #define IP_FLOW_HASH_SRC_PORT (1<<3) 65 #define IP_FLOW_HASH_DST_PORT (1<<4) 66 #define IP_FLOW_HASH_REVERSE_SRC_DST (1<<5) 67 #define IP_FLOW_HASH_SYMMETRIC (1<<6) 70 #define IP_FLOW_HASH_DEFAULT (0x1F) 72 #define foreach_flow_hash_bit \ 73 _(src, IP_FLOW_HASH_SRC_ADDR) \ 74 _(dst, IP_FLOW_HASH_DST_ADDR) \ 75 _(sport, IP_FLOW_HASH_SRC_PORT) \ 76 _(dport, IP_FLOW_HASH_DST_PORT) \ 77 _(proto, IP_FLOW_HASH_PROTO) \ 78 _(reverse, IP_FLOW_HASH_REVERSE_SRC_DST) \ 79 _(symmetric, IP_FLOW_HASH_SYMMETRIC) 163 u32 is_del,
u32 * result_index);
182 #define foreach_ip_interface_address(lm,a,sw_if_index,loop,body) \ 184 vnet_main_t *_vnm = vnet_get_main(); \ 185 u32 _sw_if_index = sw_if_index; \ 186 vnet_sw_interface_t *_swif; \ 187 _swif = vnet_get_sw_interface (_vnm, _sw_if_index); \ 192 if (_swif->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED) \ 195 _sw_if_index = _swif->unnumbered_sw_if_index; \ 201 u32 _ia = ((vec_len((lm)->if_address_pool_index_by_sw_if_index) \ 202 > (_sw_if_index)) ? \ 203 vec_elt ((lm)->if_address_pool_index_by_sw_if_index, \ 206 ip_interface_address_t * _a; \ 209 _a = pool_elt_at_index ((lm)->if_address_pool, _ia); \ 210 _ia = _a->next_this_sw_interface; \ 231 typedef struct _vnet_ip_container_proxy_args
void ip_container_proxy_walk(ip_container_proxy_cb_t cb, void *ctx)
clib_error_t * ip_interface_address_add_del(ip_lookup_main_t *lm, u32 sw_if_index, void *address, u32 address_length, u32 is_del, u32 *result_index)
ip_interface_address_t * if_address_pool
Pool of addresses that are assigned to interfaces.
mhash_t address_to_if_address_index
Hash table mapping address to index in interface address pool.
u8 mcast_feature_arc_index
Feature arc indices.
u8 output_feature_arc_index
struct _vnet_ip_container_proxy_args vnet_ip_container_proxy_args_t
Aggregrate type for a prefix.
int(* ip_container_proxy_cb_t)(const fib_prefix_t *pfx, u32 sw_if_index, void *ctx)
struct ip_lookup_main_t ip_lookup_main_t
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
u32 * classify_table_index_by_sw_if_index
First table index to use for this interface, ~0 => none.
static void ip_lookup_set_buffer_fib_index(u32 *fib_index_by_sw_if_index, vlib_buffer_t *b)
u8 local_next_by_ip_protocol[256]
Table mapping ip protocol to ip[46]-local node next index.
u8 * format_ip_flow_hash_config(u8 *s, va_list *args)
const ip46_address_t zero_addr
static ip_interface_address_t * ip_get_interface_address(ip_lookup_main_t *lm, void *addr_fib)
u8 builtin_protocol_by_ip_protocol[256]
IP_BUILTIN_PROTOCOL_{TCP,UDP,ICMP,OTHER} by protocol in IP header.
u32 * if_address_pool_index_by_sw_if_index
Head of doubly linked list of interface addresses for each software interface.
vlib buffer structure definition and a few select access methods.
static uword * mhash_get(mhash_t *h, const void *key)
clib_error_t * vnet_ip_container_proxy_add_del(vnet_ip_container_proxy_args_t *args)
u32 flow_hash_config_t
A flow hash configuration is a mask of the flow hash options.
#define vec_elt(v, i)
Get vector value at index i.
u8 ucast_feature_arc_index
u32 is_ip6
1 for ip6; 0 for ip4.
static void * mhash_key_to_mem(mhash_t *h, uword key)
void ip_lookup_init(ip_lookup_main_t *lm, u32 ip_lookup_node_index)
static void * ip_interface_address_get_address(ip_lookup_main_t *lm, ip_interface_address_t *a)
u32 fib_result_n_bytes
Number of bytes in a fib result.
u32 next_this_sw_interface
format_function_t * format_address_and_length
Either format_ip4_address_and_length or format_ip6_address_and_length.
u32 prev_this_sw_interface