X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=c8cda6b78142c7cb18f145cb3ebab8e2f12fb86b;hb=87dad11c8717735479e57cf6c065c7a7963c3aa3;hp=73f1895b74f55f185113af37548fb17c1551765b;hpb=6f4a6be8f222dd8caa94d19a7e4d87cb864ba7f4;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 73f1895b74f..c8cda6b7814 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -101,6 +101,31 @@ static void __vnet_interface_function_init_##tag##_##f (void) \ init_function.next_interface_function = vnm->tag##_functions[p]; \ vnm->tag##_functions[p] = &init_function; \ init_function.fp = (void *) &f; \ +} \ +static void __vnet_interface_function_deinit_##tag##_##f (void) \ + __attribute__((__destructor__)) ; \ + \ +static void __vnet_interface_function_deinit_##tag##_##f (void) \ +{ \ + vnet_main_t * vnm = vnet_get_main(); \ + _vnet_interface_function_list_elt_t *next; \ + if (vnm->tag##_functions[p]->fp == (void *) &f) \ + { \ + vnm->tag##_functions[p] = \ + vnm->tag##_functions[p]->next_interface_function; \ + return; \ + } \ + next = vnm->tag##_functions[p]; \ + while (next->next_interface_function) \ + { \ + if (next->next_interface_function->fp == (void *) &f) \ + { \ + next->next_interface_function = \ + next->next_interface_function->next_interface_function; \ + return; \ + } \ + next = next->next_interface_function; \ + } \ } #define _VNET_INTERFACE_FUNCTION_DECL(f,tag) \ @@ -200,6 +225,14 @@ static void __vnet_add_device_class_registration_##x (void) \ x.next_class_registration = vnm->device_class_registrations; \ vnm->device_class_registrations = &x; \ } \ +static void __vnet_rm_device_class_registration_##x (void) \ + __attribute__((__destructor__)) ; \ +static void __vnet_rm_device_class_registration_##x (void) \ +{ \ + vnet_main_t * vnm = vnet_get_main(); \ + VLIB_REMOVE_FROM_LINKED_LIST (vnm->device_class_registrations, \ + &x, next_class_registration); \ +} \ __VA_ARGS__ vnet_device_class_t x #define VLIB_DEVICE_TX_FUNCTION_CLONE_TEMPLATE(arch, fn, tgt) \ @@ -368,6 +401,14 @@ static void __vnet_add_hw_interface_class_registration_##x (void) \ x.next_class_registration = vnm->hw_interface_class_registrations; \ vnm->hw_interface_class_registrations = &x; \ } \ +static void __vnet_rm_hw_interface_class_registration_##x (void) \ + __attribute__((__destructor__)) ; \ +static void __vnet_rm_hw_interface_class_registration_##x (void) \ +{ \ + vnet_main_t * vnm = vnet_get_main(); \ + VLIB_REMOVE_FROM_LINKED_LIST (vnm->hw_interface_class_registrations,\ + &x, next_class_registration); \ +} \ __VA_ARGS__ vnet_hw_interface_class_t x /* Hardware-interface. This corresponds to a physical wire @@ -556,11 +597,15 @@ typedef struct typedef enum { + /* THe BVI interface */ + VNET_FLOOD_CLASS_BVI, /* Always flood */ VNET_FLOOD_CLASS_NORMAL, VNET_FLOOD_CLASS_TUNNEL_MASTER, /* Does not flood when tunnel master is in the same L2 BD */ - VNET_FLOOD_CLASS_TUNNEL_NORMAL + VNET_FLOOD_CLASS_TUNNEL_NORMAL, + /* Never flood to this type */ + VNET_FLOOD_CLASS_NO_FLOOD, } vnet_flood_class_t; /* Software-interface. This corresponds to a Ethernet VLAN, ATM vc, a @@ -633,25 +678,25 @@ typedef enum VNET_N_SIMPLE_INTERFACE_COUNTER = 9, /* Combined counters. */ VNET_INTERFACE_COUNTER_RX = 0, - VNET_INTERFACE_COUNTER_TX = 1, - VNET_INTERFACE_COUNTER_RX_UNICAST = 2, - VNET_INTERFACE_COUNTER_TX_UNICAST = 3, - VNET_INTERFACE_COUNTER_RX_MULTICAST = 4, - VNET_INTERFACE_COUNTER_TX_MULTICAST = 5, - VNET_INTERFACE_COUNTER_RX_BROADCAST = 6, + VNET_INTERFACE_COUNTER_RX_UNICAST = 1, + VNET_INTERFACE_COUNTER_RX_MULTICAST = 2, + VNET_INTERFACE_COUNTER_RX_BROADCAST = 3, + VNET_INTERFACE_COUNTER_TX = 4, + VNET_INTERFACE_COUNTER_TX_UNICAST = 5, + VNET_INTERFACE_COUNTER_TX_MULTICAST = 6, VNET_INTERFACE_COUNTER_TX_BROADCAST = 7, VNET_N_COMBINED_INTERFACE_COUNTER = 8, } vnet_interface_counter_type_t; -#define foreach_combined_interface_counter(X) \ - X(VNET_INTERFACE_COUNTER_RX, rx) \ - X(VNET_INTERFACE_COUNTER_TX, tx) \ - X(VNET_INTERFACE_COUNTER_RX_UNICAST, rx_unicast) \ - X(VNET_INTERFACE_COUNTER_TX_UNICAST, tx_unicast) \ - X(VNET_INTERFACE_COUNTER_RX_MULTICAST, rx_multicast) \ - X(VNET_INTERFACE_COUNTER_TX_MULTICAST, tx_multicast) \ - X(VNET_INTERFACE_COUNTER_RX_BROADCAST, rx_broadcast) \ - X(VNET_INTERFACE_COUNTER_TX_BROADCAST, tx_broadcast) +#define foreach_rx_combined_interface_counter(_x) \ + for (_x = VNET_INTERFACE_COUNTER_RX; \ + _x <= VNET_INTERFACE_COUNTER_RX_BROADCAST; \ + _x++) + +#define foreach_tx_combined_interface_counter(_x) \ + for (_x = VNET_INTERFACE_COUNTER_TX; \ + _x <= VNET_INTERFACE_COUNTER_TX_BROADCAST; \ + _x++) typedef enum { @@ -662,13 +707,13 @@ typedef enum extern int collect_detailed_interface_stats_flag; static inline int -collect_detailed_interface_stats () +collect_detailed_interface_stats (void) { return collect_detailed_interface_stats_flag; } -void collect_detailed_interface_stats_flag_set (); -void collect_detailed_interface_stats_flag_clear (); +void collect_detailed_interface_stats_flag_set (void); +void collect_detailed_interface_stats_flag_clear (void); typedef struct