|
u8 * | format_adj_flags (u8 *s, va_list *args) |
| Format adjacency flags. More...
|
|
| STATIC_ASSERT ((STRUCT_OFFSET_OF(ip_adjacency_t, cacheline0)==0), "IP adjacency cacheline 0 is not offset") |
|
| STATIC_ASSERT ((STRUCT_OFFSET_OF(ip_adjacency_t, cacheline1)==CLIB_CACHE_LINE_BYTES), "IP adjacency cacheline 1 is more than one cacheline size offset") |
|
| STATIC_ASSERT ((STRUCT_OFFSET_OF(ip_adjacency_t, cacheline3)==3 *CLIB_CACHE_LINE_BYTES), "IP adjacency cacheline 3 is more than one cacheline size offset") |
|
| STATIC_ASSERT_SIZEOF (ip_adjacency_t, 4 *64) |
|
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...
|
|
int | adj_recursive_loop_detect (adj_index_t ai, fib_node_index_t **entry_indicies) |
| descend the FIB graph looking for loops 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_is_valid (adj_index_t adj_index) |
|
static int | adj_are_counters_enabled (void) |
| Get the global configuration option for enabling per-adj counters. More...
|
|
An adjacency is a representation of an attached L3 peer.
Adjacency Sub-types:
- neighbour: a representation of an attached L3 peer. Key:{addr,interface,link/ether-type} SHARED
- glean: used to drive ARP/ND for packets destined to a local sub-net. 'glean' mean use the packet's destination address as the target address in the ARP packet. UNSHARED. Only one per-interface.
- midchain: a neighbour adj on a virtual/tunnel interface.
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 adjacency not a raw pointer. This is so the user doesn't suffer the same limp inducing firearm injuries that the author suffered as the adjacencies can realloc.Common (IP4/IP6) next index stored in adjacency.
Enumerator |
---|
IP_LOOKUP_NEXT_DROP | Adjacency to drop this packet.
|
IP_LOOKUP_NEXT_PUNT | Adjacency to punt this packet.
|
IP_LOOKUP_NEXT_LOCAL | This packet is for one of our own IP addresses.
|
IP_LOOKUP_NEXT_ARP | This packet matches an "incomplete adjacency" and packets need to be passed to ARP to find rewrite string for this destination.
|
IP_LOOKUP_NEXT_GLEAN | This packet matches an "interface route" and packets need to be passed to ARP to find rewrite string for this destination.
|
IP_LOOKUP_NEXT_REWRITE | This packet is to be rewritten and forwarded to the next processing node.
This is typically the output interface but might be another node for further output processing.
|
IP_LOOKUP_NEXT_MIDCHAIN | This packets follow a mid-chain adjacency.
|
IP_LOOKUP_NEXT_ICMP_ERROR | This packets needs to go to ICMP error.
|
IP_LOOKUP_NEXT_MCAST | Multicast Adjacency.
|
IP_LOOKUP_NEXT_BCAST | Broadcast Adjacency.
|
IP_LOOKUP_NEXT_MCAST_MIDCHAIN | Multicast Midchain Adjacency.
An Adjacency for sending multicast packets on a tunnel/virtual interface
|
IP_LOOKUP_N_NEXT | |
Definition at line 50 of file adj.h.
Return true if the adjacency is 'UP', i.e.
can be used for forwarding. 0 is down, !0 is up.
can be used for forwarding 0 is down, !0 is up.
Definition at line 533 of file adj.c.
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.
Definition at line 39 of file adj.c.