![]() |
FD.io VPP
v18.01-8-g0eacf49
Vector Packet Processing
|
Go to the source code of this file.
Data Structures | |
struct | ip_adjacency_t_ |
IP unicast adjacency. More... | |
Macros | |
#define | IP4_LOOKUP_NEXT_NODES |
#define | IP6_LOOKUP_NEXT_NODES |
Typedefs | |
typedef void(* | adj_midchain_fixup_t) (vlib_main_t *vm, struct ip_adjacency_t_ *adj, vlib_buffer_t *b0) |
A function type for post-rewrite fixups on midchain adjacency. More... | |
typedef enum ip_adjacency_flags_t_ | adj_flags_t |
Flags on an IP adjacency. More... | |
typedef struct ip_adjacency_t_ | ip_adjacency_t |
IP unicast adjacency. More... | |
Enumerations | |
enum | ip_lookup_next_t { IP_LOOKUP_NEXT_DROP, IP_LOOKUP_NEXT_PUNT, IP_LOOKUP_NEXT_LOCAL, IP_LOOKUP_NEXT_ARP, IP_LOOKUP_NEXT_GLEAN, IP_LOOKUP_NEXT_REWRITE, IP_LOOKUP_NEXT_MIDCHAIN, IP_LOOKUP_NEXT_ICMP_ERROR, IP_LOOKUP_NEXT_MCAST, IP_LOOKUP_NEXT_MCAST_MIDCHAIN, IP_LOOKUP_N_NEXT } |
An adjacency is a representation of an attached L3 peer. More... | |
enum | ip4_lookup_next_t { IP4_LOOKUP_N_NEXT = IP_LOOKUP_N_NEXT } |
enum | ip6_lookup_next_t { IP6_LOOKUP_NEXT_HOP_BY_HOP = IP_LOOKUP_N_NEXT, IP6_LOOKUP_NEXT_ADD_HOP_BY_HOP, IP6_LOOKUP_NEXT_POP_HOP_BY_HOP, IP6_LOOKUP_N_NEXT } |
enum | ip_adjacency_flags_t_ { ADJ_FLAG_NONE = 0, ADJ_FLAG_SYNC_WALK_ACTIVE = (1 << 0), ADJ_FLAG_MIDCHAIN_NO_COUNT = (1 << 1) } |
Flags on an IP adjacency. More... | |
Functions | |
STATIC_ASSERT ((STRUCT_OFFSET_OF(ip_adjacency_t, cacheline0)==0),"IP adjacency cachline 0 is not offset") | |
STATIC_ASSERT ((STRUCT_OFFSET_OF(ip_adjacency_t, cacheline1)==CLIB_CACHE_LINE_BYTES),"IP adjacency cachline 1 is more than one cachline size offset") | |
void | adj_lock (adj_index_t adj_index) |
Take a reference counting lock on the adjacency. More... | |
void | adj_unlock (adj_index_t adj_index) |
Release a reference counting lock on the adjacency. More... | |
u32 | adj_child_add (adj_index_t adj_index, fib_node_type_t type, fib_node_index_t child_index) |
Add a child dependent to an adjacency. More... | |
void | adj_child_remove (adj_index_t adj_index, u32 sibling_index) |
Remove a child dependent. More... | |
void | adj_walk (u32 sw_if_index, adj_walk_cb_t cb, void *ctx) |
Walk the Adjacencies on a given interface. More... | |
vnet_link_t | adj_get_link_type (adj_index_t ai) |
Return the link type of the adjacency. More... | |
u32 | adj_get_sw_if_index (adj_index_t ai) |
Return the sw interface index of the adjacency. More... | |
int | adj_is_up (adj_index_t ai) |
Return true if the adjacency is 'UP', i.e. More... | |
const u8 * | adj_get_rewrite (adj_index_t ai) |
Return the link type of the adjacency. More... | |
void | adj_feature_update (u32 sw_if_index, u8 arc_index, u8 is_enable) |
Notify the adjacency subsystem that the features settings for an interface have changed. More... | |
static ip_adjacency_t * | adj_get (adj_index_t adj_index) |
Get a pointer to an adjacency object from its index. More... | |
static int | adj_are_counters_enabled (void) |
Get the global configuration option for enabling per-adj counters. More... | |
Variables | |
ip_adjacency_t * | adj_pool |
The global adjacnecy pool. More... | |
vlib_combined_counter_main_t | adjacency_counters |
Adjacency packet counters. More... | |
int | adj_per_adj_counters |
Global Config for enabling per-adjacency counters This is configurable because it comes with a non-negligible performance cost. More... | |
#define IP4_LOOKUP_NEXT_NODES |
#define IP6_LOOKUP_NEXT_NODES |
typedef enum ip_adjacency_flags_t_ adj_flags_t |
Flags on an IP adjacency.
typedef void(* adj_midchain_fixup_t) (vlib_main_t *vm, struct ip_adjacency_t_ *adj, vlib_buffer_t *b0) |
typedef struct ip_adjacency_t_ ip_adjacency_t |
IP unicast adjacency.
An adjacency is a represenation of a peer on a particular link.
enum ip4_lookup_next_t |
enum ip6_lookup_next_t |
Flags on an IP adjacency.
enum ip_lookup_next_t |
An adjacency is a representation of an attached L3 peer.
Adjacency Sub-types:
The API to create and update the adjacency is very sub-type specific. This is intentional as it encourages the user to carefully consider which adjacency sub-type they are really using, and hence assign it data in the appropriate sub-type space in the union of sub-types. This prevents the adj becoming a disorganised dumping group for 'my features needs a u16 somewhere' data. It is important to enforce this approach as space in the adjacency is a premium, as we need it to fit in 1 cache line.
the API is also based around an index to an ajdacency not a raw pointer. This is so the user doesn't suffer the same limp inducing firearm injuries that the author suffered as the adjacenices can realloc.Common (IP4/IP6) next index stored in adjacency.
|
inlinestatic |
u32 adj_child_add | ( | adj_index_t | adj_index, |
fib_node_type_t | type, | ||
fib_node_index_t | child_index | ||
) |
void adj_child_remove | ( | adj_index_t | adj_index, |
u32 | sibling_index | ||
) |
|
inlinestatic |
vnet_link_t adj_get_link_type | ( | adj_index_t | ai | ) |
const u8* adj_get_rewrite | ( | adj_index_t | ai | ) |
u32 adj_get_sw_if_index | ( | adj_index_t | ai | ) |
int adj_is_up | ( | adj_index_t | ai | ) |
void adj_lock | ( | adj_index_t | adj_index | ) |
void adj_unlock | ( | adj_index_t | adj_index | ) |
void adj_walk | ( | u32 | sw_if_index, |
adj_walk_cb_t | cb, | ||
void * | ctx | ||
) |
STATIC_ASSERT | ( | (STRUCT_OFFSET_OF(ip_adjacency_t, cacheline0)==0) | , |
"IP adjacency cachline 0 is not offset" | |||
) |
STATIC_ASSERT | ( | (STRUCT_OFFSET_OF(ip_adjacency_t, cacheline1)==CLIB_CACHE_LINE_BYTES) | , |
"IP adjacency cachline 1 is more than one cachline size offset" | |||
) |
int adj_per_adj_counters |
Global Config for enabling per-adjacency counters This is configurable because it comes with a non-negligible performance cost.
Global Config for enabling per-adjacency counters This is configurable because it comes with a non-negligible performance cost.
By default these are disabled.
ip_adjacency_t* adj_pool |
vlib_combined_counter_main_t adjacency_counters |