|
| 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...
|
|
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 nighbour 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 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.
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_MCAST_MIDCHAIN |
Multicast Midchain Adjacency.
An Adjacency for sending macst 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 382 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 36 of file adj.c.