Go to the source code of this file.
|
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_BCAST,
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...
|
|
|
| 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...
|
|
#define IP4_LOOKUP_NEXT_NODES |
Value:{ \
}
This packet is to be rewritten and forwarded to the next processing node.
Adjacency to punt this packet.
This packet matches an "interface route" and packets need to be passed to ARP to find rewrite string ...
This packet matches an "incomplete adjacency" and packets need to be passed to ARP to find rewrite st...
Adjacency to drop this packet.
Multicast Midchain Adjacency.
This packets follow a mid-chain adjacency.
This packets needs to go to ICMP error.
This packet is for one of our own IP addresses.
Definition at line 108 of file adj.h.
#define IP6_LOOKUP_NEXT_NODES |
Value:{ \
}
This packet is to be rewritten and forwarded to the next processing node.
Adjacency to punt this packet.
This packet matches an "interface route" and packets need to be passed to ARP to find rewrite string ...
This packet matches an "incomplete adjacency" and packets need to be passed to ARP to find rewrite st...
Adjacency to drop this packet.
Multicast Midchain Adjacency.
This packets follow a mid-chain adjacency.
This packets needs to go to ICMP error.
This packet is for one of our own IP addresses.
Definition at line 122 of file adj.h.
Flags on an IP adjacency.
A function type for post-rewrite fixups on midchain adjacency.
Definition at line 152 of file adj.h.
IP unicast adjacency.
- Note
- cache aligned.
An adjacency is a represenation of a peer on a particular link.
Enumerator |
---|
IP4_LOOKUP_N_NEXT |
|
Definition at line 94 of file adj.h.
Enumerator |
---|
IP6_LOOKUP_NEXT_HOP_BY_HOP |
|
IP6_LOOKUP_NEXT_ADD_HOP_BY_HOP |
|
IP6_LOOKUP_NEXT_POP_HOP_BY_HOP |
|
IP6_LOOKUP_N_NEXT |
|
Definition at line 99 of file adj.h.
Flags on an IP adjacency.
Enumerator |
---|
ADJ_FLAG_NONE |
|
ADJ_FLAG_SYNC_WALK_ACTIVE |
Currently a sync walk is active.
Used to prevent re-entrant walking
|
ADJ_FLAG_MIDCHAIN_NO_COUNT |
Packets TX through the midchain do not increment the interface counters.
This should be used when the adj is associated with an L2 interface and that L2 interface is in a bridege domain. In that case the packet will have traversed the interface's TX node, and hence have been counted, before it traverses ths midchain
|
Definition at line 160 of file adj.h.
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_BCAST |
Broadcasr 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.
static int adj_are_counters_enabled |
( |
void |
| ) |
|
|
inlinestatic |
Get the global configuration option for enabling per-adj counters.
Definition at line 389 of file adj.h.
Add a child dependent to an adjacency.
The child will thus be informed via its registerd back-walk function when the adjacency state changes.
Definition at line 271 of file adj.c.
Remove a child dependent.
Definition at line 288 of file adj.c.
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.
Definition at line 339 of file adj.c.
Get a pointer to an adjacency object from its index.
Definition at line 380 of file adj.h.
Return the link type of the adjacency.
Definition at line 400 of file adj.c.
Return the link type of the adjacency.
Return the link type of the adjacency.
Definition at line 436 of file adj.c.
Return the sw interface index of the adjacency.
Definition at line 413 of file adj.c.
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 427 of file adj.c.
Take a reference counting lock on the adjacency.
Definition at line 235 of file adj.c.
Release a reference counting lock on the adjacency.
Definition at line 252 of file adj.c.
Walk the Adjacencies on a given interface.
Definition at line 380 of file adj.c.
const ip46_address_t ADJ_BCAST_ADDR |
The special broadcast address (to construct a broadcast adjacency.
Definition at line 41 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.
The global adjacnecy pool.
Exposed for fast/inline data-plane access
Definition at line 33 of file adj.c.
Adjacency packet counters.
Definition at line 25 of file adj.c.