X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip-neighbor%2Fip_neighbor_types.h;fp=src%2Fvnet%2Fip%2Fip_neighbor.h;h=c6d4e104e8b58baeab6e7d5341e52a4218ba0699;hb=cbe25aab3be72154f2c706c39eeba6a77f34450f;hp=d370ddeeee499e250961f53e95f6b5ffb9ce4c32;hpb=96453fd2417ebd1d69354a7fb692976129cea80e;p=vpp.git diff --git a/src/vnet/ip/ip_neighbor.h b/src/vnet/ip-neighbor/ip_neighbor_types.h similarity index 51% rename from src/vnet/ip/ip_neighbor.h rename to src/vnet/ip-neighbor/ip_neighbor_types.h index d370ddeeee4..c6d4e104e8b 100644 --- a/src/vnet/ip/ip_neighbor.h +++ b/src/vnet/ip-neighbor/ip_neighbor_types.h @@ -15,8 +15,12 @@ * limitations under the License. */ -#ifndef included_ip_neighbor_h -#define included_ip_neighbor_h +#ifndef __INCLUDE_IP_NEIGHBOR_TYPES_H__ +#define __INCLUDE_IP_NEIGHBOR_TYPES_H__ + +#include +#include +#include #define IP_SCAN_DISABLED 0 #define IP_SCAN_V4_NEIGHBORS (1 << 0) @@ -33,28 +37,86 @@ typedef struct u8 stale_threshold; /* Threshold in minutes to delete nei entry */ } ip_neighbor_scan_arg_t; -void ip_neighbor_scan_enable_disable (ip_neighbor_scan_arg_t * arg); - typedef enum ip_neighbor_flags_t_ { IP_NEIGHBOR_FLAG_NONE = 0, IP_NEIGHBOR_FLAG_STATIC = (1 << 0), IP_NEIGHBOR_FLAG_DYNAMIC = (1 << 1), IP_NEIGHBOR_FLAG_NO_FIB_ENTRY = (1 << 2), + IP_NEIGHBOR_FLAG_PENDING = (1 << 3), } __attribute__ ((packed)) ip_neighbor_flags_t; +typedef struct ip_neighbor_watcher_t_ +{ + u32 ipw_pid; + u32 ipw_client; +} ip_neighbor_watcher_t; + +extern u8 *format_ip_neighbor_watcher (u8 * s, va_list * args); + +typedef struct ip_neighbor_key_t_ +{ + ip46_address_t ipnk_ip; + ip46_type_t ipnk_type; + u32 ipnk_sw_if_index; +} ip_neighbor_key_t; + +/** + * A representation of an IP neighbour/peer + */ +typedef struct ip_neighbor_t_ +{ + /** + * The idempotent key + */ + ip_neighbor_key_t *ipn_key; + + /** + * The learned MAC address of the neighbour + */ + mac_address_t ipn_mac; + + /** + * Falgs for this object + */ + ip_neighbor_flags_t ipn_flags; + + /** + * Aging related data + * - last time the neighbour was probed + * - number of probes - 3 and it's dead + */ + f64 ipn_time_last_updated; + u8 ipn_n_probes; + index_t ipn_elt; + + /** + * The index of the adj fib created for this neighbour + */ + fib_node_index_t ipn_fib_entry_index; +} ip_neighbor_t; + extern u8 *format_ip_neighbor_flags (u8 * s, va_list * args); +extern u8 *format_ip_neighbor_key (u8 * s, va_list * args); +extern u8 *format_ip_neighbor (u8 * s, va_list * args); + +extern ip_neighbor_t *ip_neighbor_get (index_t ipni); -extern int ip_neighbor_add (const ip46_address_t * ip, - ip46_type_t type, - const mac_address_t * mac, - u32 sw_if_index, - ip_neighbor_flags_t flags, u32 * stats_index); +typedef struct ip_neighbor_learn_t_ +{ + ip46_address_t ip; + ip46_type_t type; + mac_address_t mac; + u32 sw_if_index; +} ip_neighbor_learn_t; -extern int ip_neighbor_del (const ip46_address_t * ip, - ip46_type_t type, u32 sw_if_index); +typedef struct ip_neighbor_event_t_ +{ + ip_neighbor_watcher_t ipne_watch; + index_t ipne_index; +} ip_neighbor_event_t; -#endif /* included_ip_neighbor_h */ +#endif /* __INCLUDE_IP_NEIGHBOR_H__ */ /* * fd.io coding-style-patch-verification: ON