X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbonding%2Fnode.h;h=843c236f1235067df82f06068de030ce0dec0a6b;hb=4c4223edf;hp=178215073d39f70657237532a3eff06118b018fc;hpb=52c5f26fc5dc25cee34a24a948ec0e65154e0331;p=vpp.git diff --git a/src/vnet/bonding/node.h b/src/vnet/bonding/node.h index 178215073d3..843c236f123 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; @@ -90,8 +92,8 @@ typedef struct typedef struct { - /* slave's sw_if_index */ - u32 slave; + /* member's sw_if_index */ + u32 member; /* bond's sw_if_index */ u32 group; u8 is_passive; @@ -99,15 +101,24 @@ typedef struct /* return */ int rv; clib_error_t *error; -} bond_enslave_args_t; +} bond_add_member_args_t; typedef struct { - u32 slave; + u32 member; /* return */ int rv; clib_error_t *error; -} bond_detach_slave_args_t; +} bond_detach_member_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 @@ -115,21 +126,24 @@ typedef struct u32 sw_if_index; u32 id; u8 interface_name[64]; - u8 mode; - u8 lb; - u32 active_slaves; - u32 slaves; + u32 mode; + u32 lb; + u8 numa_only; + u32 active_members; + u32 members; } bond_interface_details_t; -/** slave interface details struct */ +/** member interface details struct */ typedef struct { u32 sw_if_index; u8 interface_name[64]; u8 is_passive; u8 is_long_timeout; - u32 active_slaves; -} slave_interface_details_t; + u8 is_local_numa; + u32 weight; + u32 active_members; +} member_interface_details_t; typedef CLIB_PACKED (struct { @@ -157,12 +171,7 @@ typedef struct u8 mode; u8 lb; - /* This flag works for active-backup mode only - and marks if the working port is local numa. */ - u8 is_local_numa; - /* current working sw_if_index in active-bakeup mode. */ - u32 sw_if_index_working; - /* the last slave index for the rr lb */ + /* the last member index for the rr lb */ u32 lb_rr_last_index; /* Real device instance in interface vector */ @@ -174,19 +183,25 @@ typedef struct u32 hw_if_index; u32 sw_if_index; - /* Configured slaves */ - u32 *slaves; + /* Configured members */ + u32 *members; - /* Slaves that are in DISTRIBUTING state */ - u32 *active_slaves; - - /* rapidly find an active slave */ - uword *active_slave_by_sw_if_index; + /* Members that are in DISTRIBUTING state */ + u32 *active_members; lacp_port_info_t partner; lacp_port_info_t actor; u8 individual_aggregator; + /* If the flag numa_only is set, it means that only members + 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 members on local numa node are there in lacp mode? */ + word n_numa_members; + u32 group; uword *port_number_bitmap; u8 use_custom_mac; @@ -229,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; @@ -326,10 +344,19 @@ typedef struct /* pdu sent */ u64 marker_pdu_sent; -} slave_if_t; + + /* member is numa node */ + u8 is_local_numa; +} member_if_t; typedef void (*lacp_enable_disable_func) (vlib_main_t * vm, bond_if_t * bif, - slave_if_t * sif, u8 enable); + member_if_t * mif, u8 enable); + +typedef struct +{ + u32 partner_state; + u32 actor_state; +} lacp_stats_t; typedef struct { @@ -339,8 +366,8 @@ typedef struct /* record used interface IDs */ uword *id_used; - /* pool of slave interfaces */ - slave_if_t *neighbors; + /* pool of member interfaces */ + member_if_t *neighbors; /* rapidly find a bond by vlib software interface index */ uword *bond_by_sw_if_index; @@ -354,9 +381,11 @@ typedef struct lacp_enable_disable_func lacp_enable_disable; - uword *slave_by_sw_if_index; + uword *member_by_sw_if_index; bond_per_thread_data_t *per_thread_data; + + lacp_stats_t **stats; } bond_main_t; /* bond packet trace capture */ @@ -369,7 +398,7 @@ typedef struct typedef u32 (*load_balance_func) (vlib_main_t * vm, vlib_node_runtime_t * node, bond_if_t * bif, - vlib_buffer_t * b0, uword slave_count); + vlib_buffer_t * b0, uword member_count); typedef struct { @@ -382,17 +411,20 @@ extern vnet_device_class_t bond_dev_class; extern bond_main_t bond_main; void bond_disable_collecting_distributing (vlib_main_t * vm, - slave_if_t * sif); -void bond_enable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif); + member_if_t * mif); +void bond_enable_collecting_distributing (vlib_main_t * vm, + member_if_t * mif); 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); -void bond_detach_slave (vlib_main_t * vm, bond_detach_slave_args_t * args); +void bond_add_member (vlib_main_t * vm, bond_add_member_args_t * args); +void bond_detach_member (vlib_main_t * vm, bond_detach_member_args_t * args); int bond_dump_ifs (bond_interface_details_t ** out_bondids); -int bond_dump_slave_ifs (slave_interface_details_t ** out_slaveids, - u32 bond_sw_if_index); +int bond_dump_member_ifs (member_interface_details_t ** out_memberids, + u32 bond_sw_if_index); static inline uword unformat_bond_mode (unformat_input_t * input, va_list * args) @@ -468,7 +500,7 @@ bond_register_callback (lacp_enable_disable_func func) } static inline bond_if_t * -bond_get_master_by_sw_if_index (u32 sw_if_index) +bond_get_bond_if_by_sw_if_index (u32 sw_if_index) { bond_main_t *bm = &bond_main; uword *p; @@ -482,28 +514,28 @@ bond_get_master_by_sw_if_index (u32 sw_if_index) } static inline bond_if_t * -bond_get_master_by_dev_instance (u32 dev_instance) +bond_get_bond_if_by_dev_instance (u32 dev_instance) { bond_main_t *bm = &bond_main; return pool_elt_at_index (bm->interfaces, dev_instance); } -static inline slave_if_t * -bond_get_slave_by_sw_if_index (u32 sw_if_index) +static inline member_if_t * +bond_get_member_by_sw_if_index (u32 sw_if_index) { bond_main_t *bm = &bond_main; - slave_if_t *sif = 0; + member_if_t *mif = 0; uword p; - if (sw_if_index < vec_len (bm->slave_by_sw_if_index)) + if (sw_if_index < vec_len (bm->member_by_sw_if_index)) { - p = bm->slave_by_sw_if_index[sw_if_index]; + p = bm->member_by_sw_if_index[sw_if_index]; if (p) - sif = pool_elt_at_index (bm->neighbors, p >> 1); + mif = pool_elt_at_index (bm->neighbors, p >> 1); } - return sif; + return mif; } #endif /* __included_vnet_bonding_node_h__ */