X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fadj%2Fadj.h;h=e22e7ecd58a17558586027f75ef407bbbe2a9f20;hb=d1e6b2937d551b58adf1b89697d7169f4b72bbdc;hp=fb3dc368db08cc8063fe46741102d009a997d573;hpb=521a8d7df423a0b5aaf259d49ca9230705bc25ee;p=vpp.git diff --git a/src/vnet/adj/adj.h b/src/vnet/adj/adj.h index fb3dc368db0..e22e7ecd58a 100644 --- a/src/vnet/adj/adj.h +++ b/src/vnet/adj/adj.h @@ -23,7 +23,7 @@ * '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. + * - 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 @@ -33,9 +33,9 @@ * 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 + * 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 adjacenices can realloc. + * the author suffered as the adjacencies can realloc. */ #ifndef __ADJ_H__ @@ -81,10 +81,10 @@ typedef enum /** Multicast Adjacency. */ IP_LOOKUP_NEXT_MCAST, - /** Broadcasr Adjacency. */ + /** Broadcast Adjacency. */ IP_LOOKUP_NEXT_BCAST, - /** Multicast Midchain Adjacency. An Adjacency for sending macst packets + /** Multicast Midchain Adjacency. An Adjacency for sending multicast packets * on a tunnel/virtual interface */ IP_LOOKUP_NEXT_MCAST_MIDCHAIN, @@ -142,7 +142,7 @@ typedef enum extern const ip46_address_t ADJ_BCAST_ADDR; /** - * Forward delcartion + * Forward declaration */ struct ip_adjacency_t_; @@ -150,7 +150,7 @@ struct ip_adjacency_t_; * @brief A function type for post-rewrite fixups on midchain adjacency */ typedef void (*adj_midchain_fixup_t) (vlib_main_t * vm, - struct ip_adjacency_t_ * adj, + const struct ip_adjacency_t_ * adj, vlib_buffer_t * b0, const void *data); @@ -167,7 +167,7 @@ typedef enum adj_attr_t_ /** * 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 + * interface and that L2 interface is in a bridge domain. In that case * the packet will have traversed the interface's TX node, and hence have * been counted, before it traverses ths midchain */ @@ -216,14 +216,14 @@ extern u8* format_adj_flags(u8 * s, va_list * args); * @brief IP unicast adjacency. * @note cache aligned. * - * An adjacency is a represenation of a peer on a particular link. + * An adjacency is a representation of a peer on a particular link. */ typedef struct ip_adjacency_t_ { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /** - * Linkage into the FIB node grpah. First member since this type + * Linkage into the FIB node graph. First member since this type * has 8 byte alignment requirements. */ fib_node_t ia_node; @@ -243,8 +243,8 @@ typedef struct ip_adjacency_t_ /** * The protocol of the neighbor/peer. i.e. the protocol with - * which to interpret the 'next-hop' attirbutes of the sub-types. - * 1-btyes + * which to interpret the 'next-hop' attributes of the sub-types. + * 1-bytes */ fib_protocol_t ia_nh_proto; @@ -269,7 +269,7 @@ typedef struct ip_adjacency_t_ * IP_LOOKUP_NEXT_MIDCHAIN * * A nbr adj that is also recursive. Think tunnels. - * A nbr adj can transition to be of type MDICHAIN + * A nbr adj can transition to be of type MIDCHAIN * so be sure to leave the two structs with the next_hop * fields aligned. */ @@ -316,7 +316,7 @@ typedef struct ip_adjacency_t_ CLIB_CACHE_LINE_ALIGN_MARK (cacheline1); /* Rewrite in second/third cache lines */ - vnet_declare_rewrite (VLIB_BUFFER_PRE_DATA_SIZE); + VNET_DECLARE_REWRITE; /** * more control plane members that do not fit on the first cacheline @@ -326,13 +326,17 @@ typedef struct ip_adjacency_t_ */ struct adj_delegate_t_ *ia_delegates; + /** + * The VLIB node in which this adj is used to forward packets + */ + u32 ia_node_index; } ip_adjacency_t; STATIC_ASSERT ((STRUCT_OFFSET_OF (ip_adjacency_t, cacheline0) == 0), - "IP adjacency cachline 0 is not offset"); + "IP adjacency cacheline 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"); + "IP adjacency cacheline 1 is more than one cacheline size offset"); /** * @brief @@ -348,7 +352,7 @@ extern void adj_unlock(adj_index_t adj_index); /** * @brief * Add a child dependent to an adjacency. The child will - * thus be informed via its registerd back-walk function + * thus be informed via its registered back-walk function * when the adjacency state changes. */ extern u32 adj_child_add(adj_index_t adj_index, @@ -389,12 +393,6 @@ extern int adj_is_up (adj_index_t ai); */ extern const u8* adj_get_rewrite (adj_index_t ai); -/** - * @brief Notify the adjacency subsystem that the features settings for - * an interface have changed - */ -extern void adj_feature_update (u32 sw_if_index, u8 arc_index, u8 is_enable); - /** * @brief descend the FIB graph looking for loops * @@ -409,7 +407,7 @@ extern int adj_recursive_loop_detect (adj_index_t ai, /** * @brief - * The global adjacnecy pool. Exposed for fast/inline data-plane access + * The global adjacency pool. Exposed for fast/inline data-plane access */ extern ip_adjacency_t *adj_pool; @@ -432,7 +430,13 @@ extern int adj_per_adj_counters; static inline ip_adjacency_t * adj_get (adj_index_t adj_index) { - return (vec_elt_at_index(adj_pool, adj_index)); + return (pool_elt_at_index(adj_pool, adj_index)); +} + +static inline int +adj_is_valid(adj_index_t adj_index) +{ + return !(pool_is_free_index(adj_pool, adj_index)); } /**