X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbonding%2Fnode.h;h=ddd48feb1a3aeb5ea34f4e1e43a55f3a71253f3c;hb=f18f09b16b02f3b136be0794a3de5f9ef6e6f651;hp=41e945a05f82725c1a6614c29c96dedbb76d4ba4;hpb=82c5dda455ce56ffaf8813b7fbee661e6dbb7cea;p=vpp.git diff --git a/src/vnet/bonding/node.h b/src/vnet/bonding/node.h index 41e945a05f8..ddd48feb1a3 100644 --- a/src/vnet/bonding/node.h +++ b/src/vnet/bonding/node.h @@ -82,6 +82,8 @@ typedef struct u8 hw_addr[6]; u8 mode; u8 lb; + u8 numa_only; + u8 gso; /* return */ u32 sw_if_index; int rv; @@ -109,6 +111,15 @@ typedef struct clib_error_t *error; } bond_detach_slave_args_t; +typedef struct +{ + u32 sw_if_index; + u32 weight; + /* return */ + int rv; + clib_error_t *error; +} bond_set_intf_weight_args_t; + /** BOND interface details struct */ typedef struct { @@ -117,6 +128,7 @@ typedef struct u8 interface_name[64]; u8 mode; u8 lb; + u8 numa_only; u32 active_slaves; u32 slaves; } bond_interface_details_t; @@ -128,6 +140,8 @@ typedef struct u8 interface_name[64]; u8 is_passive; u8 is_long_timeout; + u8 is_local_numa; + u32 weight; u32 active_slaves; } slave_interface_details_t; @@ -175,13 +189,19 @@ typedef struct /* Slaves that are in DISTRIBUTING state */ u32 *active_slaves; - /* rapidly find an active slave */ - uword *active_slave_by_sw_if_index; - lacp_port_info_t partner; lacp_port_info_t actor; u8 individual_aggregator; + /* If the flag numa_only is set, it means that only slaves + on local numa node works for lacp mode if have at least one, + otherwise it works as usual. */ + u8 numa_only; + u8 gso; + + /* How many slaves on local numa node are there in lacp mode? */ + word n_numa_slaves; + u32 group; uword *port_number_bitmap; u8 use_custom_mac; @@ -224,6 +244,9 @@ typedef struct /* neighbor vlib hw_if_index */ u32 hw_if_index; + /* weight -- valid only for active backup */ + u32 weight; + /* actor does not initiate the protocol exchange */ u8 is_passive; @@ -231,7 +254,7 @@ typedef struct lacp_port_info_t partner; lacp_port_info_t partner_admin;; - /* Partner port information */ + /* Actor port information */ lacp_port_info_t actor; lacp_port_info_t actor_admin; @@ -321,11 +344,20 @@ typedef struct /* pdu sent */ u64 marker_pdu_sent; + + /* slave is numa node */ + u8 is_local_numa; } slave_if_t; typedef void (*lacp_enable_disable_func) (vlib_main_t * vm, bond_if_t * bif, slave_if_t * sif, u8 enable); +typedef struct +{ + u32 partner_state; + u32 actor_state; +} lacp_stats_t; + typedef struct { /* pool of bonding interfaces */ @@ -352,6 +384,8 @@ typedef struct uword *slave_by_sw_if_index; bond_per_thread_data_t *per_thread_data; + + lacp_stats_t **stats; } bond_main_t; /* bond packet trace capture */ @@ -381,6 +415,8 @@ void bond_disable_collecting_distributing (vlib_main_t * vm, void bond_enable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif); u8 *format_bond_interface_name (u8 * s, va_list * args); +void bond_set_intf_weight (vlib_main_t * vm, + bond_set_intf_weight_args_t * args); void bond_create_if (vlib_main_t * vm, bond_create_if_args_t * args); int bond_delete_if (vlib_main_t * vm, u32 sw_if_index); void bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args);