diff options
Diffstat (limited to 'src/vnet/bonding')
-rw-r--r-- | src/vnet/bonding/bond.api | 122 | ||||
-rw-r--r-- | src/vnet/bonding/bond_api.c | 203 | ||||
-rw-r--r-- | src/vnet/bonding/cli.c | 446 | ||||
-rw-r--r-- | src/vnet/bonding/device.c | 153 | ||||
-rw-r--r-- | src/vnet/bonding/node.c | 92 | ||||
-rw-r--r-- | src/vnet/bonding/node.h | 85 |
6 files changed, 684 insertions, 417 deletions
diff --git a/src/vnet/bonding/bond.api b/src/vnet/bonding/bond.api index 865dcbe0857..682298e9084 100644 --- a/src/vnet/bonding/bond.api +++ b/src/vnet/bonding/bond.api @@ -19,7 +19,7 @@ the bonding device driver */ -option version = "2.0.0"; +option version = "2.1.0"; import "vnet/interface_types.api"; import "vnet/ethernet/ethernet_types.api"; @@ -80,7 +80,7 @@ define bond_create_reply /** \brief Delete bond interface @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request - @param sw_if_index - interface index of slave interface + @param sw_if_index - interface index of member interface */ autoreply define bond_delete { @@ -99,6 +99,7 @@ autoreply define bond_delete */ define bond_enslave { + option deprecated="20.06"; u32 client_index; u32 context; vl_api_interface_index_t sw_if_index; @@ -117,13 +118,54 @@ define bond_enslave_reply i32 retval; }; +/** \brief Initialize a new bond interface with the given paramters + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request + @param sw_if_index - member sw_if_index + @param bond_sw_if_index - bond sw_if_index + @param is_passive - interface does not initiate the lacp protocol, remote must be active speaker + @param is_long_timeout - 90 seconds vs default 3 seconds neighbor timeout +*/ +define bond_add_member +{ + u32 client_index; + u32 context; + vl_api_interface_index_t sw_if_index; + vl_api_interface_index_t bond_sw_if_index; + bool is_passive; + bool is_long_timeout; +}; + +/** \brief Reply for bond add_member reply + @param context - returned sender context, to match reply w/ request + @param retval - return code +*/ +define bond_add_member_reply +{ + u32 context; + i32 retval; +}; + /** \brief bond detach slave @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request - @param sw_if_index - interface index of slave interface + @param sw_if_index - interface index of member interface */ autoreply define bond_detach_slave { + option deprecated="20.06"; + u32 client_index; + u32 context; + vl_api_interface_index_t sw_if_index; +}; + +/** \brief bond detach member + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request + @param sw_if_index - interface index of member interface +*/ +autoreply define bond_detach_member +{ u32 client_index; u32 context; vl_api_interface_index_t sw_if_index; @@ -132,6 +174,7 @@ autoreply define bond_detach_slave /** \brief Dump bond interfaces request */ define sw_interface_bond_dump { + option deprecated="20.06"; u32 client_index; u32 context; }; @@ -139,12 +182,12 @@ define sw_interface_bond_dump /** \brief Reply for bond dump request @param sw_if_index - software index of bond interface @param id - ID of interface + @param interface_name - name of interface @param mode - bonding mode @param lb - load balance algo @param numa_only - enable local numa TX for lacp mode - @param active_slaves - active slaves count - @param slaves - config slave count - @param interface_name - name of interface + @param active_slaves - active member count + @param slaves - config member count */ define sw_interface_bond_details { @@ -159,6 +202,37 @@ define sw_interface_bond_details string interface_name[64]; }; +/** \brief Dump bond interfaces request */ +define sw_bond_interface_dump +{ + u32 client_index; + u32 context; + vl_api_interface_index_t sw_if_index [default=0xffffffff]; +}; + +/** \brief Reply for bond dump request + @param sw_if_index - software index of bond interface + @param id - ID of interface + @param mode - bonding mode + @param lb - load balance algo + @param numa_only - enable local numa TX for lacp mode + @param active_members - active members count + @param members - config member count + @param interface_name - name of interface +*/ +define sw_bond_interface_details +{ + u32 context; + vl_api_interface_index_t sw_if_index; + u32 id; + vl_api_bond_mode_t mode; + vl_api_bond_lb_algo_t lb; + bool numa_only; + u32 active_members; + u32 members; + string interface_name[64]; +}; + /** \brief bond slave dump @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request @@ -166,6 +240,7 @@ define sw_interface_bond_details */ define sw_interface_slave_dump { + option deprecated="20.06"; u32 client_index; u32 context; vl_api_interface_index_t sw_if_index; @@ -190,11 +265,42 @@ define sw_interface_slave_details u32 weight; }; +/** \brief bond member dump + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request + @param sw_if_index - interface index of bond interface +*/ +define sw_member_interface_dump +{ + u32 client_index; + u32 context; + vl_api_interface_index_t sw_if_index; +}; + +/** \brief Reply for member dump request + @param sw_if_index - software index of member interface + @param interface_name - name of interface + @param is_passve - interface does not initiate the lacp protocol, remote must be active speaker + @param is_long_timeout - 90 seconds vs default 3 seconds neighbor timeout + @param is_local_numa - the member interface is local numa + @param weight - the weight for the member interface (active-backup mode only) +*/ +define sw_member_interface_details +{ + u32 context; + vl_api_interface_index_t sw_if_index; + string interface_name[64]; + bool is_passive; + bool is_long_timeout; + bool is_local_numa; + u32 weight; +}; + /** \brief Interface set bond weight @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request - @param sw_if_index - slave interface for which to set the weight - @param weight - weight value to be set for the slave interface + @param sw_if_index - member interface for which to set the weight + @param weight - weight value to be set for the member interface */ autoreply define sw_interface_set_bond_weight { diff --git a/src/vnet/bonding/bond_api.c b/src/vnet/bonding/bond_api.c index 525f058ee4c..2395a47fe7a 100644 --- a/src/vnet/bonding/bond_api.c +++ b/src/vnet/bonding/bond_api.c @@ -48,10 +48,14 @@ _(BOND_CREATE, bond_create) \ _(BOND_DELETE, bond_delete) \ _(BOND_ENSLAVE, bond_enslave) \ +_(BOND_ADD_MEMBER, bond_add_member) \ _(SW_INTERFACE_SET_BOND_WEIGHT, sw_interface_set_bond_weight) \ _(BOND_DETACH_SLAVE, bond_detach_slave) \ -_(SW_INTERFACE_BOND_DUMP, sw_interface_bond_dump)\ -_(SW_INTERFACE_SLAVE_DUMP, sw_interface_slave_dump) +_(BOND_DETACH_MEMBER, bond_detach_member) \ +_(SW_INTERFACE_BOND_DUMP, sw_interface_bond_dump) \ +_(SW_BOND_INTERFACE_DUMP, sw_bond_interface_dump) \ +_(SW_INTERFACE_SLAVE_DUMP, sw_interface_slave_dump) \ +_(SW_MEMBER_INTERFACE_DUMP, sw_member_interface_dump) static void vl_api_bond_delete_t_handler (vl_api_bond_delete_t * mp) @@ -99,21 +103,41 @@ vl_api_bond_create_t_handler (vl_api_bond_create_t * mp) } static void +vl_api_bond_add_member_t_handler (vl_api_bond_add_member_t * mp) +{ + vlib_main_t *vm = vlib_get_main (); + vl_api_bond_add_member_reply_t *rmp; + bond_add_member_args_t _a, *ap = &_a; + int rv = 0; + + clib_memset (ap, 0, sizeof (*ap)); + + ap->group = ntohl (mp->bond_sw_if_index); + ap->member = ntohl (mp->sw_if_index); + ap->is_passive = mp->is_passive; + ap->is_long_timeout = mp->is_long_timeout; + + bond_add_member (vm, ap); + + REPLY_MACRO (VL_API_BOND_ADD_MEMBER_REPLY); +} + +static void vl_api_bond_enslave_t_handler (vl_api_bond_enslave_t * mp) { vlib_main_t *vm = vlib_get_main (); vl_api_bond_enslave_reply_t *rmp; - bond_enslave_args_t _a, *ap = &_a; + bond_add_member_args_t _a, *ap = &_a; int rv = 0; clib_memset (ap, 0, sizeof (*ap)); ap->group = ntohl (mp->bond_sw_if_index); - ap->slave = ntohl (mp->sw_if_index); + ap->member = ntohl (mp->sw_if_index); ap->is_passive = mp->is_passive; ap->is_long_timeout = mp->is_long_timeout; - bond_enslave (vm, ap); + bond_add_member (vm, ap); REPLY_MACRO (VL_API_BOND_ENSLAVE_REPLY); } @@ -142,18 +166,34 @@ vl_api_bond_detach_slave_t_handler (vl_api_bond_detach_slave_t * mp) { vlib_main_t *vm = vlib_get_main (); vl_api_bond_detach_slave_reply_t *rmp; - bond_detach_slave_args_t _a, *ap = &_a; + bond_detach_member_args_t _a, *ap = &_a; int rv = 0; clib_memset (ap, 0, sizeof (*ap)); - ap->slave = ntohl (mp->sw_if_index); - bond_detach_slave (vm, ap); + ap->member = ntohl (mp->sw_if_index); + bond_detach_member (vm, ap); REPLY_MACRO (VL_API_BOND_DETACH_SLAVE_REPLY); } static void +vl_api_bond_detach_member_t_handler (vl_api_bond_detach_member_t * mp) +{ + vlib_main_t *vm = vlib_get_main (); + vl_api_bond_detach_member_reply_t *rmp; + bond_detach_member_args_t _a, *ap = &_a; + int rv = 0; + + clib_memset (ap, 0, sizeof (*ap)); + + ap->member = ntohl (mp->sw_if_index); + bond_detach_member (vm, ap); + + REPLY_MACRO (VL_API_BOND_DETACH_MEMBER_REPLY); +} + +static void bond_send_sw_interface_details (vpe_api_main_t * am, vl_api_registration_t * reg, bond_interface_details_t * bond_if, @@ -172,8 +212,8 @@ bond_send_sw_interface_details (vpe_api_main_t * am, mp->mode = htonl (bond_if->mode); mp->lb = htonl (bond_if->lb); mp->numa_only = bond_if->numa_only; - mp->active_slaves = htonl (bond_if->active_slaves); - mp->slaves = htonl (bond_if->slaves); + mp->active_slaves = htonl (bond_if->active_members); + mp->slaves = htonl (bond_if->members); mp->context = context; vl_api_send_msg (reg, (u8 *) mp); @@ -205,24 +245,83 @@ vl_api_sw_interface_bond_dump_t_handler (vl_api_sw_interface_bond_dump_t * mp) } static void -bond_send_sw_interface_slave_details (vpe_api_main_t * am, - vl_api_registration_t * reg, - slave_interface_details_t * slave_if, - u32 context) +bond_send_sw_bond_interface_details (vpe_api_main_t * am, + vl_api_registration_t * reg, + bond_interface_details_t * bond_if, + u32 context) +{ + vl_api_sw_bond_interface_details_t *mp; + + mp = vl_msg_api_alloc (sizeof (*mp)); + clib_memset (mp, 0, sizeof (*mp)); + mp->_vl_msg_id = htons (VL_API_SW_BOND_INTERFACE_DETAILS); + mp->sw_if_index = htonl (bond_if->sw_if_index); + mp->id = htonl (bond_if->id); + clib_memcpy (mp->interface_name, bond_if->interface_name, + MIN (ARRAY_LEN (mp->interface_name) - 1, + strlen ((const char *) bond_if->interface_name))); + mp->mode = htonl (bond_if->mode); + mp->lb = htonl (bond_if->lb); + mp->numa_only = bond_if->numa_only; + mp->active_members = htonl (bond_if->active_members); + mp->members = htonl (bond_if->members); + + mp->context = context; + vl_api_send_msg (reg, (u8 *) mp); +} + +static void +vl_api_sw_bond_interface_dump_t_handler (vl_api_sw_bond_interface_dump_t * mp) +{ + int rv; + vpe_api_main_t *am = &vpe_api_main; + vl_api_registration_t *reg; + bond_interface_details_t *bondifs = NULL; + bond_interface_details_t *bond_if = NULL; + u32 filter_sw_if_index; + + reg = vl_api_client_index_to_registration (mp->client_index); + if (!reg) + return; + + filter_sw_if_index = htonl (mp->sw_if_index); + if (filter_sw_if_index != ~0) + VALIDATE_SW_IF_INDEX (mp); + + rv = bond_dump_ifs (&bondifs); + if (rv) + return; + + vec_foreach (bond_if, bondifs) + { + if ((filter_sw_if_index == ~0) || + (bond_if->sw_if_index == filter_sw_if_index)) + bond_send_sw_bond_interface_details (am, reg, bond_if, mp->context); + } + + BAD_SW_IF_INDEX_LABEL; + vec_free (bondifs); +} + +static void +bond_send_sw_member_interface_details (vpe_api_main_t * am, + vl_api_registration_t * reg, + member_interface_details_t * member_if, + u32 context) { vl_api_sw_interface_slave_details_t *mp; mp = vl_msg_api_alloc (sizeof (*mp)); clib_memset (mp, 0, sizeof (*mp)); mp->_vl_msg_id = htons (VL_API_SW_INTERFACE_SLAVE_DETAILS); - mp->sw_if_index = htonl (slave_if->sw_if_index); - clib_memcpy (mp->interface_name, slave_if->interface_name, + mp->sw_if_index = htonl (member_if->sw_if_index); + clib_memcpy (mp->interface_name, member_if->interface_name, MIN (ARRAY_LEN (mp->interface_name) - 1, - strlen ((const char *) slave_if->interface_name))); - mp->is_passive = slave_if->is_passive; - mp->is_long_timeout = slave_if->is_long_timeout; - mp->is_local_numa = slave_if->is_local_numa; - mp->weight = htonl (slave_if->weight); + strlen ((const char *) member_if->interface_name))); + mp->is_passive = member_if->is_passive; + mp->is_long_timeout = member_if->is_long_timeout; + mp->is_local_numa = member_if->is_local_numa; + mp->weight = htonl (member_if->weight); mp->context = context; vl_api_send_msg (reg, (u8 *) mp); @@ -235,23 +334,73 @@ vl_api_sw_interface_slave_dump_t_handler (vl_api_sw_interface_slave_dump_t * int rv; vpe_api_main_t *am = &vpe_api_main; vl_api_registration_t *reg; - slave_interface_details_t *slaveifs = NULL; - slave_interface_details_t *slave_if = NULL; + member_interface_details_t *memberifs = NULL; + member_interface_details_t *member_if = NULL; + + reg = vl_api_client_index_to_registration (mp->client_index); + if (!reg) + return; + + rv = bond_dump_member_ifs (&memberifs, ntohl (mp->sw_if_index)); + if (rv) + return; + + vec_foreach (member_if, memberifs) + { + bond_send_sw_member_interface_details (am, reg, member_if, mp->context); + } + + vec_free (memberifs); +} + +static void +bond_send_member_interface_details (vpe_api_main_t * am, + vl_api_registration_t * reg, + member_interface_details_t * member_if, + u32 context) +{ + vl_api_sw_member_interface_details_t *mp; + + mp = vl_msg_api_alloc (sizeof (*mp)); + clib_memset (mp, 0, sizeof (*mp)); + mp->_vl_msg_id = htons (VL_API_SW_MEMBER_INTERFACE_DETAILS); + mp->sw_if_index = htonl (member_if->sw_if_index); + clib_memcpy (mp->interface_name, member_if->interface_name, + MIN (ARRAY_LEN (mp->interface_name) - 1, + strlen ((const char *) member_if->interface_name))); + mp->is_passive = member_if->is_passive; + mp->is_long_timeout = member_if->is_long_timeout; + mp->is_local_numa = member_if->is_local_numa; + mp->weight = htonl (member_if->weight); + + mp->context = context; + vl_api_send_msg (reg, (u8 *) mp); +} + +static void +vl_api_sw_member_interface_dump_t_handler (vl_api_sw_member_interface_dump_t * + mp) +{ + int rv; + vpe_api_main_t *am = &vpe_api_main; + vl_api_registration_t *reg; + member_interface_details_t *memberifs = NULL; + member_interface_details_t *member_if = NULL; reg = vl_api_client_index_to_registration (mp->client_index); if (!reg) return; - rv = bond_dump_slave_ifs (&slaveifs, ntohl (mp->sw_if_index)); + rv = bond_dump_member_ifs (&memberifs, ntohl (mp->sw_if_index)); if (rv) return; - vec_foreach (slave_if, slaveifs) + vec_foreach (member_if, memberifs) { - bond_send_sw_interface_slave_details (am, reg, slave_if, mp->context); + bond_send_member_interface_details (am, reg, member_if, mp->context); } - vec_free (slaveifs); + vec_free (memberifs); } #define vl_msg_name_crc_list diff --git a/src/vnet/bonding/cli.c b/src/vnet/bonding/cli.c index 92a9ff067f6..062e3092640 100644 --- a/src/vnet/bonding/cli.c +++ b/src/vnet/bonding/cli.c @@ -23,7 +23,7 @@ #include <vpp/stats/stat_segment.h> void -bond_disable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif) +bond_disable_collecting_distributing (vlib_main_t * vm, member_if_t * mif) { bond_main_t *bm = &bond_main; bond_if_t *bif; @@ -31,34 +31,34 @@ bond_disable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif) uword p; u8 switching_active = 0; - bif = bond_get_master_by_dev_instance (sif->bif_dev_instance); + bif = bond_get_bond_if_by_dev_instance (mif->bif_dev_instance); clib_spinlock_lock_if_init (&bif->lockp); - vec_foreach_index (i, bif->active_slaves) + vec_foreach_index (i, bif->active_members) { - p = *vec_elt_at_index (bif->active_slaves, i); - if (p == sif->sw_if_index) + p = *vec_elt_at_index (bif->active_members, i); + if (p == mif->sw_if_index) { if ((bif->mode == BOND_MODE_ACTIVE_BACKUP) && (i == 0) && - (vec_len (bif->active_slaves) > 1)) - /* deleting the active slave for active-backup */ + (vec_len (bif->active_members) > 1)) + /* deleting the active member for active-backup */ switching_active = 1; - vec_del1 (bif->active_slaves, i); - if (sif->lacp_enabled && bif->numa_only) + vec_del1 (bif->active_members, i); + if (mif->lacp_enabled && bif->numa_only) { - /* For lacp mode, if we check it is a slave on local numa node, - bif->n_numa_slaves should be decreased by 1 becasue the first - bif->n_numa_slaves are all slaves on local numa node */ - if (i < bif->n_numa_slaves) + /* For lacp mode, if we check it is a member on local numa node, + bif->n_numa_members should be decreased by 1 becasue the first + bif->n_numa_members are all members on local numa node */ + if (i < bif->n_numa_members) { - bif->n_numa_slaves--; - ASSERT (bif->n_numa_slaves >= 0); + bif->n_numa_members--; + ASSERT (bif->n_numa_members >= 0); } } break; } } - /* We get a new slave just becoming active */ + /* We get a new member just becoming active */ if (switching_active) vlib_process_signal_event (bm->vlib_main, bond_process_node.index, BOND_SEND_GARP_NA, bif->hw_if_index); @@ -70,46 +70,46 @@ bond_disable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif) * return -1 if s1 is preferred. */ static int -bond_slave_sort (void *a1, void *a2) +bond_member_sort (void *a1, void *a2) { u32 *s1 = a1; u32 *s2 = a2; - slave_if_t *sif1 = bond_get_slave_by_sw_if_index (*s1); - slave_if_t *sif2 = bond_get_slave_by_sw_if_index (*s2); + member_if_t *mif1 = bond_get_member_by_sw_if_index (*s1); + member_if_t *mif2 = bond_get_member_by_sw_if_index (*s2); bond_if_t *bif; - ALWAYS_ASSERT (sif1); - ALWAYS_ASSERT (sif2); + ALWAYS_ASSERT (mif1); + ALWAYS_ASSERT (mif2); /* * sort entries according to preference rules: * 1. biggest weight * 2. numa-node - * 3. current active slave (to prevent churning) + * 3. current active member (to prevent churning) * 4. lowest sw_if_index (for deterministic behavior) * */ - if (sif2->weight > sif1->weight) + if (mif2->weight > mif1->weight) return 1; - if (sif2->weight < sif1->weight) + if (mif2->weight < mif1->weight) return -1; else { - if (sif2->is_local_numa > sif1->is_local_numa) + if (mif2->is_local_numa > mif1->is_local_numa) return 1; - if (sif2->is_local_numa < sif1->is_local_numa) + if (mif2->is_local_numa < mif1->is_local_numa) return -1; else { - bif = bond_get_master_by_dev_instance (sif1->bif_dev_instance); - /* Favor the current active slave to avoid churning */ - if (bif->active_slaves[0] == sif2->sw_if_index) + bif = bond_get_bond_if_by_dev_instance (mif1->bif_dev_instance); + /* Favor the current active member to avoid churning */ + if (bif->active_members[0] == mif2->sw_if_index) return 1; - if (bif->active_slaves[0] == sif1->sw_if_index) + if (bif->active_members[0] == mif1->sw_if_index) return -1; /* go for the tiebreaker as the last resort */ - if (sif1->sw_if_index > sif2->sw_if_index) + if (mif1->sw_if_index > mif2->sw_if_index) return 1; - if (sif1->sw_if_index < sif2->sw_if_index) + if (mif1->sw_if_index < mif2->sw_if_index) return -1; else ASSERT (0); @@ -119,54 +119,54 @@ bond_slave_sort (void *a1, void *a2) } static void -bond_sort_slaves (bond_if_t * bif) +bond_sort_members (bond_if_t * bif) { bond_main_t *bm = &bond_main; - u32 old_active = bif->active_slaves[0]; + u32 old_active = bif->active_members[0]; - vec_sort_with_function (bif->active_slaves, bond_slave_sort); - if (old_active != bif->active_slaves[0]) + vec_sort_with_function (bif->active_members, bond_member_sort); + if (old_active != bif->active_members[0]) vlib_process_signal_event (bm->vlib_main, bond_process_node.index, BOND_SEND_GARP_NA, bif->hw_if_index); } void -bond_enable_collecting_distributing (vlib_main_t * vm, slave_if_t * sif) +bond_enable_collecting_distributing (vlib_main_t * vm, member_if_t * mif) { bond_if_t *bif; bond_main_t *bm = &bond_main; vnet_main_t *vnm = vnet_get_main (); - vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sif->sw_if_index); + vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, mif->sw_if_index); int i; uword p; - bif = bond_get_master_by_dev_instance (sif->bif_dev_instance); + bif = bond_get_bond_if_by_dev_instance (mif->bif_dev_instance); clib_spinlock_lock_if_init (&bif->lockp); - vec_foreach_index (i, bif->active_slaves) + vec_foreach_index (i, bif->active_members) { - p = *vec_elt_at_index (bif->active_slaves, i); - if (p == sif->sw_if_index) + p = *vec_elt_at_index (bif->active_members, i); + if (p == mif->sw_if_index) goto done; } - if (sif->lacp_enabled && bif->numa_only && (vm->numa_node == hw->numa_node)) + if (mif->lacp_enabled && bif->numa_only && (vm->numa_node == hw->numa_node)) { - vec_insert_elts (bif->active_slaves, &sif->sw_if_index, 1, - bif->n_numa_slaves); - bif->n_numa_slaves++; + vec_insert_elts (bif->active_members, &mif->sw_if_index, 1, + bif->n_numa_members); + bif->n_numa_members++; } else - vec_add1 (bif->active_slaves, sif->sw_if_index); + vec_add1 (bif->active_members, mif->sw_if_index); - sif->is_local_numa = (vm->numa_node == hw->numa_node) ? 1 : 0; + mif->is_local_numa = (vm->numa_node == hw->numa_node) ? 1 : 0; if (bif->mode == BOND_MODE_ACTIVE_BACKUP) { - if (vec_len (bif->active_slaves) == 1) - /* First slave becomes active? */ + if (vec_len (bif->active_members) == 1) + /* First member becomes active? */ vlib_process_signal_event (bm->vlib_main, bond_process_node.index, BOND_SEND_GARP_NA, bif->hw_if_index); else - bond_sort_slaves (bif); + bond_sort_members (bif); } done: @@ -198,8 +198,8 @@ bond_dump_ifs (bond_interface_details_t ** out_bondifs) bondif->mode = bif->mode; bondif->lb = bif->lb; bondif->numa_only = bif->numa_only; - bondif->active_slaves = vec_len (bif->active_slaves); - bondif->slaves = vec_len (bif->slaves); + bondif->active_members = vec_len (bif->active_members); + bondif->members = vec_len (bif->members); ); /* *INDENT-ON* */ @@ -209,58 +209,59 @@ bond_dump_ifs (bond_interface_details_t ** out_bondifs) } int -bond_dump_slave_ifs (slave_interface_details_t ** out_slaveifs, - u32 bond_sw_if_index) +bond_dump_member_ifs (member_interface_details_t ** out_memberifs, + u32 bond_sw_if_index) { vnet_main_t *vnm = vnet_get_main (); bond_if_t *bif; vnet_hw_interface_t *hi; vnet_sw_interface_t *sw; - slave_interface_details_t *r_slaveifs = NULL; - slave_interface_details_t *slaveif = NULL; + member_interface_details_t *r_memberifs = NULL; + member_interface_details_t *memberif = NULL; u32 *sw_if_index = NULL; - slave_if_t *sif; + member_if_t *mif; - bif = bond_get_master_by_sw_if_index (bond_sw_if_index); + bif = bond_get_bond_if_by_sw_if_index (bond_sw_if_index); if (!bif) return 1; - vec_foreach (sw_if_index, bif->slaves) + vec_foreach (sw_if_index, bif->members) { - vec_add2 (r_slaveifs, slaveif, 1); - clib_memset (slaveif, 0, sizeof (*slaveif)); - sif = bond_get_slave_by_sw_if_index (*sw_if_index); - if (sif) + vec_add2 (r_memberifs, memberif, 1); + clib_memset (memberif, 0, sizeof (*memberif)); + mif = bond_get_member_by_sw_if_index (*sw_if_index); + if (mif) { - sw = vnet_get_sw_interface (vnm, sif->sw_if_index); + sw = vnet_get_sw_interface (vnm, mif->sw_if_index); hi = vnet_get_hw_interface (vnm, sw->hw_if_index); - clib_memcpy (slaveif->interface_name, hi->name, - MIN (ARRAY_LEN (slaveif->interface_name) - 1, + clib_memcpy (memberif->interface_name, hi->name, + MIN (ARRAY_LEN (memberif->interface_name) - 1, vec_len ((const char *) hi->name))); /* enforce by memset() above */ ASSERT (0 == - slaveif->interface_name[ARRAY_LEN (slaveif->interface_name) - - 1]); - slaveif->sw_if_index = sif->sw_if_index; - slaveif->is_passive = sif->is_passive; - slaveif->is_long_timeout = sif->is_long_timeout; - slaveif->is_local_numa = sif->is_local_numa; - slaveif->weight = sif->weight; + memberif->interface_name[ARRAY_LEN (memberif->interface_name) + - 1]); + memberif->sw_if_index = mif->sw_if_index; + memberif->is_passive = mif->is_passive; + memberif->is_long_timeout = mif->is_long_timeout; + memberif->is_local_numa = mif->is_local_numa; + memberif->weight = mif->weight; } } - *out_slaveifs = r_slaveifs; + *out_memberifs = r_memberifs; return 0; } /* - * Manage secondary mac addresses when attaching/detaching a slave. - * If adding, copies any secondary addresses from master to slave - * If deleting, deletes the master's secondary addresses from the slave - * + * Manage secondary mac addresses when attaching/detaching a member. + * If adding, copy any secondary addresses from bond interface to member. + * If deleting, delete the bond interface's secondary addresses from the + * member. */ static void -bond_slave_add_del_mac_addrs (bond_if_t * bif, u32 sif_sw_if_index, u8 is_add) +bond_member_add_del_mac_addrs (bond_if_t * bif, u32 mif_sw_if_index, + u8 is_add) { vnet_main_t *vnm = vnet_get_main (); ethernet_interface_t *b_ei; @@ -271,7 +272,7 @@ bond_slave_add_del_mac_addrs (bond_if_t * bif, u32 sif_sw_if_index, u8 is_add) if (!b_ei || !b_ei->secondary_addrs) return; - s_hwif = vnet_get_sup_hw_interface (vnm, sif_sw_if_index); + s_hwif = vnet_get_sup_hw_interface (vnm, mif_sw_if_index); vec_foreach (sec_mac, b_ei->secondary_addrs) vnet_hw_interface_add_del_mac_address (vnm, s_hwif->hw_if_index, @@ -279,56 +280,56 @@ bond_slave_add_del_mac_addrs (bond_if_t * bif, u32 sif_sw_if_index, u8 is_add) } static void -bond_delete_neighbor (vlib_main_t * vm, bond_if_t * bif, slave_if_t * sif) +bond_delete_neighbor (vlib_main_t * vm, bond_if_t * bif, member_if_t * mif) { bond_main_t *bm = &bond_main; vnet_main_t *vnm = vnet_get_main (); int i; - vnet_hw_interface_t *sif_hw; + vnet_hw_interface_t *mif_hw; - sif_hw = vnet_get_sup_hw_interface (vnm, sif->sw_if_index); + mif_hw = vnet_get_sup_hw_interface (vnm, mif->sw_if_index); bif->port_number_bitmap = clib_bitmap_set (bif->port_number_bitmap, - ntohs (sif->actor_admin.port_number) - 1, 0); - bm->slave_by_sw_if_index[sif->sw_if_index] = 0; - vec_free (sif->last_marker_pkt); - vec_free (sif->last_rx_pkt); - vec_foreach_index (i, bif->slaves) + ntohs (mif->actor_admin.port_number) - 1, 0); + bm->member_by_sw_if_index[mif->sw_if_index] = 0; + vec_free (mif->last_marker_pkt); + vec_free (mif->last_rx_pkt); + vec_foreach_index (i, bif->members) { - uword p = *vec_elt_at_index (bif->slaves, i); - if (p == sif->sw_if_index) + uword p = *vec_elt_at_index (bif->members, i); + if (p == mif->sw_if_index) { - vec_del1 (bif->slaves, i); + vec_del1 (bif->members, i); break; } } - bond_disable_collecting_distributing (vm, sif); + bond_disable_collecting_distributing (vm, mif); vnet_feature_enable_disable ("device-input", "bond-input", - sif->sw_if_index, 0, 0, 0); + mif->sw_if_index, 0, 0, 0); /* Put back the old mac */ - vnet_hw_interface_change_mac_address (vnm, sif_hw->hw_if_index, - sif->persistent_hw_address); + vnet_hw_interface_change_mac_address (vnm, mif_hw->hw_if_index, + mif->persistent_hw_address); - /* delete the bond's secondary/virtual mac addrs from the slave */ - bond_slave_add_del_mac_addrs (bif, sif->sw_if_index, 0 /* is_add */ ); + /* delete the bond's secondary/virtual mac addrs from the member */ + bond_member_add_del_mac_addrs (bif, mif->sw_if_index, 0 /* is_add */ ); if ((bif->mode == BOND_MODE_LACP) && bm->lacp_enable_disable) - (*bm->lacp_enable_disable) (vm, bif, sif, 0); + (*bm->lacp_enable_disable) (vm, bif, mif, 0); if (bif->mode == BOND_MODE_LACP) { stat_segment_deregister_state_counter - (bm->stats[bif->sw_if_index][sif->sw_if_index].actor_state); + (bm->stats[bif->sw_if_index][mif->sw_if_index].actor_state); stat_segment_deregister_state_counter - (bm->stats[bif->sw_if_index][sif->sw_if_index].partner_state); + (bm->stats[bif->sw_if_index][mif->sw_if_index].partner_state); } - pool_put (bm->neighbors, sif); + pool_put (bm->neighbors, mif); } int @@ -337,23 +338,23 @@ bond_delete_if (vlib_main_t * vm, u32 sw_if_index) bond_main_t *bm = &bond_main; vnet_main_t *vnm = vnet_get_main (); bond_if_t *bif; - slave_if_t *sif; + member_if_t *mif; vnet_hw_interface_t *hw; - u32 *sif_sw_if_index; + u32 *mif_sw_if_index; u32 *s_list = 0; hw = vnet_get_sup_hw_interface (vnm, sw_if_index); if (hw == NULL || bond_dev_class.index != hw->dev_class_index) return VNET_API_ERROR_INVALID_SW_IF_INDEX; - bif = bond_get_master_by_dev_instance (hw->dev_instance); + bif = bond_get_bond_if_by_dev_instance (hw->dev_instance); - vec_append (s_list, bif->slaves); - vec_foreach (sif_sw_if_index, s_list) + vec_append (s_list, bif->members); + vec_foreach (mif_sw_if_index, s_list) { - sif = bond_get_slave_by_sw_if_index (*sif_sw_if_index); - if (sif) - bond_delete_neighbor (vm, bif, sif); + mif = bond_get_member_by_sw_if_index (*mif_sw_if_index); + if (mif) + bond_delete_neighbor (vm, bif, mif); } vec_free (s_list); @@ -595,57 +596,58 @@ VLIB_CLI_COMMAND (bond_delete__command, static) = /* *INDENT-ON* */ void -bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args) +bond_add_member (vlib_main_t * vm, bond_add_member_args_t * args) { bond_main_t *bm = &bond_main; vnet_main_t *vnm = vnet_get_main (); bond_if_t *bif; - slave_if_t *sif; + member_if_t *mif; vnet_interface_main_t *im = &vnm->interface_main; - vnet_hw_interface_t *bif_hw, *sif_hw; + vnet_hw_interface_t *bif_hw, *mif_hw; vnet_sw_interface_t *sw; u32 thread_index; - u32 sif_if_index; + u32 mif_if_index; - bif = bond_get_master_by_sw_if_index (args->group); + bif = bond_get_bond_if_by_sw_if_index (args->group); if (!bif) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; args->error = clib_error_return (0, "bond interface not found"); return; } - // make sure the interface is not already enslaved - if (bond_get_slave_by_sw_if_index (args->slave)) + // make sure the interface is not already added as member + if (bond_get_member_by_sw_if_index (args->member)) { args->rv = VNET_API_ERROR_VALUE_EXIST; - args->error = clib_error_return (0, "interface was already enslaved"); + args->error = clib_error_return + (0, "interface was already added as member"); return; } - sif_hw = vnet_get_sup_hw_interface (vnm, args->slave); - if (sif_hw->dev_class_index == bond_dev_class.index) + mif_hw = vnet_get_sup_hw_interface (vnm, args->member); + if (mif_hw->dev_class_index == bond_dev_class.index) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; args->error = - clib_error_return (0, "bond interface cannot be enslaved"); + clib_error_return (0, "bond interface cannot be added as member"); return; } - if (bif->gso && !(sif_hw->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO)) + if (bif->gso && !(mif_hw->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO)) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; args->error = - clib_error_return (0, "slave interface is not gso capable"); + clib_error_return (0, "member interface is not gso capable"); return; } if (bif->mode == BOND_MODE_LACP) { u8 *name = format (0, "/if/lacp/%u/%u/state%c", bif->sw_if_index, - args->slave, 0); + args->member, 0); vec_validate (bm->stats, bif->sw_if_index); - vec_validate (bm->stats[bif->sw_if_index], args->slave); + vec_validate (bm->stats[bif->sw_if_index], args->member); args->error = stat_segment_register_state_counter - (name, &bm->stats[bif->sw_if_index][args->slave].actor_state); + (name, &bm->stats[bif->sw_if_index][args->member].actor_state); if (args->error != 0) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; @@ -655,9 +657,9 @@ bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args) vec_reset_length (name); name = format (0, "/if/lacp/%u/%u/partner-state%c", bif->sw_if_index, - args->slave, 0); + args->member, 0); args->error = stat_segment_register_state_counter - (name, &bm->stats[bif->sw_if_index][args->slave].partner_state); + (name, &bm->stats[bif->sw_if_index][args->member].partner_state); vec_free (name); if (args->error != 0) { @@ -666,81 +668,81 @@ bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args) } } - pool_get (bm->neighbors, sif); - clib_memset (sif, 0, sizeof (*sif)); - sw = pool_elt_at_index (im->sw_interfaces, args->slave); + pool_get (bm->neighbors, mif); + clib_memset (mif, 0, sizeof (*mif)); + sw = pool_elt_at_index (im->sw_interfaces, args->member); /* port_enabled is both admin up and hw link up */ - sif->port_enabled = vnet_sw_interface_is_up (vnm, sw->sw_if_index); - sif->sw_if_index = sw->sw_if_index; - sif->hw_if_index = sw->hw_if_index; - sif->packet_template_index = (u8) ~ 0; - sif->is_passive = args->is_passive; - sif->group = args->group; - sif->bif_dev_instance = bif->dev_instance; - sif->mode = bif->mode; - - sif->is_long_timeout = args->is_long_timeout; + mif->port_enabled = vnet_sw_interface_is_up (vnm, sw->sw_if_index); + mif->sw_if_index = sw->sw_if_index; + mif->hw_if_index = sw->hw_if_index; + mif->packet_template_index = (u8) ~ 0; + mif->is_passive = args->is_passive; + mif->group = args->group; + mif->bif_dev_instance = bif->dev_instance; + mif->mode = bif->mode; + + mif->is_long_timeout = args->is_long_timeout; if (args->is_long_timeout) - sif->ttl_in_seconds = LACP_LONG_TIMOUT_TIME; + mif->ttl_in_seconds = LACP_LONG_TIMOUT_TIME; else - sif->ttl_in_seconds = LACP_SHORT_TIMOUT_TIME; + mif->ttl_in_seconds = LACP_SHORT_TIMOUT_TIME; - vec_validate_aligned (bm->slave_by_sw_if_index, sif->sw_if_index, + vec_validate_aligned (bm->member_by_sw_if_index, mif->sw_if_index, CLIB_CACHE_LINE_BYTES); /* - * sif - bm->neighbors may be 0 + * mif - bm->neighbors may be 0 * Left shift it by 1 bit to distinguish the valid entry that we actually * store from the null entries */ - bm->slave_by_sw_if_index[sif->sw_if_index] = - (uword) (((sif - bm->neighbors) << 1) | 1); - vec_add1 (bif->slaves, sif->sw_if_index); + bm->member_by_sw_if_index[mif->sw_if_index] = + (uword) (((mif - bm->neighbors) << 1) | 1); + vec_add1 (bif->members, mif->sw_if_index); - sif_hw = vnet_get_sup_hw_interface (vnm, sif->sw_if_index); + mif_hw = vnet_get_sup_hw_interface (vnm, mif->sw_if_index); /* Save the old mac */ - memcpy (sif->persistent_hw_address, sif_hw->hw_address, 6); + memcpy (mif->persistent_hw_address, mif_hw->hw_address, 6); bif_hw = vnet_get_sup_hw_interface (vnm, bif->sw_if_index); if (bif->use_custom_mac) { - vnet_hw_interface_change_mac_address (vnm, sif_hw->hw_if_index, + vnet_hw_interface_change_mac_address (vnm, mif_hw->hw_if_index, bif->hw_address); } else { - // bond interface gets the mac address from the first slave - if (vec_len (bif->slaves) == 1) + // bond interface gets the mac address from the first member + if (vec_len (bif->members) == 1) { - memcpy (bif->hw_address, sif_hw->hw_address, 6); + memcpy (bif->hw_address, mif_hw->hw_address, 6); vnet_hw_interface_change_mac_address (vnm, bif_hw->hw_if_index, - sif_hw->hw_address); + mif_hw->hw_address); } else { - // subsequent slaves gets the mac address of the bond interface - vnet_hw_interface_change_mac_address (vnm, sif_hw->hw_if_index, + // subsequent members gets the mac address of the bond interface + vnet_hw_interface_change_mac_address (vnm, mif_hw->hw_if_index, bif->hw_address); } } - /* if there are secondary/virtual mac addrs, propagate to the slave */ - bond_slave_add_del_mac_addrs (bif, sif->sw_if_index, 1 /* is_add */ ); + /* if there are secondary/virtual mac addrs, propagate to the member */ + bond_member_add_del_mac_addrs (bif, mif->sw_if_index, 1 /* is_add */ ); if (bif_hw->l2_if_count) - ethernet_set_flags (vnm, sif_hw->hw_if_index, + ethernet_set_flags (vnm, mif_hw->hw_if_index, ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); else - ethernet_set_flags (vnm, sif_hw->hw_if_index, + ethernet_set_flags (vnm, mif_hw->hw_if_index, /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0); if (bif->mode == BOND_MODE_LACP) { if (bm->lacp_enable_disable) - (*bm->lacp_enable_disable) (vm, bif, sif, 1); + (*bm->lacp_enable_disable) (vm, bif, mif, 1); } - else if (sif->port_enabled) + else if (mif->port_enabled) { - bond_enable_collecting_distributing (vm, sif); + bond_enable_collecting_distributing (vm, mif); } vec_foreach_index (thread_index, bm->per_thread_data) @@ -748,17 +750,17 @@ bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args) bond_per_thread_data_t *ptd = vec_elt_at_index (bm->per_thread_data, thread_index); - vec_validate_aligned (ptd->per_port_queue, vec_len (bif->slaves) - 1, + vec_validate_aligned (ptd->per_port_queue, vec_len (bif->members) - 1, CLIB_CACHE_LINE_BYTES); - vec_foreach_index (sif_if_index, ptd->per_port_queue) + vec_foreach_index (mif_if_index, ptd->per_port_queue) { - ptd->per_port_queue[sif_if_index].n_buffers = 0; + ptd->per_port_queue[mif_if_index].n_buffers = 0; } } args->rv = vnet_feature_enable_disable ("device-input", "bond-input", - sif->sw_if_index, 1, 0, 0); + mif->sw_if_index, 1, 0, 0); if (args->rv) { @@ -769,10 +771,10 @@ bond_enslave (vlib_main_t * vm, bond_enslave_args_t * args) } static clib_error_t * -enslave_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, - vlib_cli_command_t * cmd) +add_member_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, + vlib_cli_command_t * cmd) { - bond_enslave_args_t args = { 0 }; + bond_add_member_args_t args = { 0 }; unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); @@ -780,13 +782,13 @@ enslave_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, if (!unformat_user (input, unformat_line_input, line_input)) return clib_error_return (0, "Missing required arguments."); - args.slave = ~0; + args.member = ~0; args.group = ~0; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "%U %U", unformat_vnet_sw_interface, vnm, &args.group, - unformat_vnet_sw_interface, vnm, &args.slave)) + unformat_vnet_sw_interface, vnm, &args.member)) ; else if (unformat (line_input, "passive")) args.is_passive = 1; @@ -805,45 +807,46 @@ enslave_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, return args.error; if (args.group == ~0) return clib_error_return (0, "Missing bond interface"); - if (args.slave == ~0) - return clib_error_return (0, "please specify valid slave interface name"); + if (args.member == ~0) + return clib_error_return (0, + "please specify valid member interface name"); - bond_enslave (vm, &args); + bond_add_member (vm, &args); return args.error; } /* *INDENT-OFF* */ -VLIB_CLI_COMMAND (enslave_interface_command, static) = { +VLIB_CLI_COMMAND (add_member_interface_command, static) = { .path = "bond add", - .short_help = "bond add <BondEthernetx> <slave-interface> " + .short_help = "bond add <BondEthernetx> <member-interface> " "[passive] [long-timeout]", - .function = enslave_interface_command_fn, + .function = add_member_interface_command_fn, }; /* *INDENT-ON* */ void -bond_detach_slave (vlib_main_t * vm, bond_detach_slave_args_t * args) +bond_detach_member (vlib_main_t * vm, bond_detach_member_args_t * args) { bond_if_t *bif; - slave_if_t *sif; + member_if_t *mif; - sif = bond_get_slave_by_sw_if_index (args->slave); - if (!sif) + mif = bond_get_member_by_sw_if_index (args->member); + if (!mif) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; - args->error = clib_error_return (0, "interface was not enslaved"); + args->error = clib_error_return (0, "interface was not a member"); return; } - bif = bond_get_master_by_dev_instance (sif->bif_dev_instance); - bond_delete_neighbor (vm, bif, sif); + bif = bond_get_bond_if_by_dev_instance (mif->bif_dev_instance); + bond_delete_neighbor (vm, bif, mif); } static clib_error_t * detach_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { - bond_detach_slave_args_t args = { 0 }; + bond_detach_member_args_t args = { 0 }; unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); @@ -851,11 +854,11 @@ detach_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, if (!unformat_user (input, unformat_line_input, line_input)) return clib_error_return (0, "Missing required arguments."); - args.slave = ~0; + args.member = ~0; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "%U", - unformat_vnet_sw_interface, vnm, &args.slave)) + unformat_vnet_sw_interface, vnm, &args.member)) ; else { @@ -868,10 +871,11 @@ detach_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, if (args.error) return args.error; - if (args.slave == ~0) - return clib_error_return (0, "please specify valid slave interface name"); + if (args.member == ~0) + return clib_error_return (0, + "please specify valid member interface name"); - bond_detach_slave (vm, &args); + bond_detach_member (vm, &args); return args.error; } @@ -879,7 +883,7 @@ detach_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, /* *INDENT-OFF* */ VLIB_CLI_COMMAND (detach_interface_command, static) = { .path = "bond del", - .short_help = "bond del <slave-interface>", + .short_help = "bond del <member-interface>", .function = detach_interface_command_fn, }; /* *INDENT-ON* */ @@ -892,7 +896,7 @@ show_bond (vlib_main_t * vm) vlib_cli_output (vm, "%-16s %-12s %-13s %-13s %-14s %s", "interface name", "sw_if_index", "mode", - "load balance", "active slaves", "slaves"); + "load balance", "active members", "members"); /* *INDENT-OFF* */ pool_foreach (bif, bm->interfaces, @@ -901,7 +905,7 @@ show_bond (vlib_main_t * vm) format_bond_interface_name, bif->dev_instance, bif->sw_if_index, format_bond_mode, bif->mode, format_bond_load_balance, bif->lb, - vec_len (bif->active_slaves), vec_len (bif->slaves)); + vec_len (bif->active_members), vec_len (bif->members)); })); /* *INDENT-ON* */ } @@ -924,25 +928,25 @@ show_bond_details (vlib_main_t * vm) if (bif->gso) vlib_cli_output (vm, " gso enable"); if (bif->mode == BOND_MODE_ROUND_ROBIN) - vlib_cli_output (vm, " last xmit slave index: %u", + vlib_cli_output (vm, " last xmit member index: %u", bif->lb_rr_last_index); - vlib_cli_output (vm, " number of active slaves: %d", - vec_len (bif->active_slaves)); - vec_foreach (sw_if_index, bif->active_slaves) + vlib_cli_output (vm, " number of active members: %d", + vec_len (bif->active_members)); + vec_foreach (sw_if_index, bif->active_members) { vlib_cli_output (vm, " %U", format_vnet_sw_if_index_name, vnet_get_main (), *sw_if_index); if (bif->mode == BOND_MODE_ACTIVE_BACKUP) { - slave_if_t *sif = bond_get_slave_by_sw_if_index (*sw_if_index); - if (sif) + member_if_t *mif = bond_get_member_by_sw_if_index (*sw_if_index); + if (mif) vlib_cli_output (vm, " weight: %u, is_local_numa: %u, " - "sw_if_index: %u", sif->weight, - sif->is_local_numa, sif->sw_if_index); + "sw_if_index: %u", mif->weight, + mif->is_local_numa, mif->sw_if_index); } } - vlib_cli_output (vm, " number of slaves: %d", vec_len (bif->slaves)); - vec_foreach (sw_if_index, bif->slaves) + vlib_cli_output (vm, " number of members: %d", vec_len (bif->members)); + vec_foreach (sw_if_index, bif->members) { vlib_cli_output (vm, " %U", format_vnet_sw_if_index_name, vnet_get_main (), *sw_if_index); @@ -991,19 +995,19 @@ VLIB_CLI_COMMAND (show_bond_command, static) = { void bond_set_intf_weight (vlib_main_t * vm, bond_set_intf_weight_args_t * args) { - slave_if_t *sif; + member_if_t *mif; bond_if_t *bif; vnet_main_t *vnm; u32 old_weight; - sif = bond_get_slave_by_sw_if_index (args->sw_if_index); - if (!sif) + mif = bond_get_member_by_sw_if_index (args->sw_if_index); + if (!mif) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; - args->error = clib_error_return (0, "Interface not enslaved"); + args->error = clib_error_return (0, "Interface not a member"); return; } - bif = bond_get_master_by_dev_instance (sif->bif_dev_instance); + bif = bond_get_bond_if_by_dev_instance (mif->bif_dev_instance); if (!bif) { args->rv = VNET_API_ERROR_INVALID_INTERFACE; @@ -1018,21 +1022,21 @@ bond_set_intf_weight (vlib_main_t * vm, bond_set_intf_weight_args_t * args) return; } - old_weight = sif->weight; - sif->weight = args->weight; + old_weight = mif->weight; + mif->weight = args->weight; vnm = vnet_get_main (); /* - * No need to sort the list if the affected slave is not up (not in active - * slave set), active slave count is 1, or the current slave is already the - * primary slave and new weight > old weight. + * No need to sort the list if the affected member is not up (not in active + * member set), active member count is 1, or the current member is already the + * primary member and new weight > old weight. */ - if (!vnet_sw_interface_is_up (vnm, sif->sw_if_index) || - (vec_len (bif->active_slaves) == 1) || - ((bif->active_slaves[0] == sif->sw_if_index) && - (sif->weight >= old_weight))) + if (!vnet_sw_interface_is_up (vnm, mif->sw_if_index) || + (vec_len (bif->active_members) == 1) || + ((bif->active_members[0] == mif->sw_if_index) && + (mif->weight >= old_weight))) return; - bond_sort_slaves (bif); + bond_sort_members (bif); } static clib_error_t * @@ -1102,7 +1106,7 @@ bond_cli_init (vlib_main_t * vm) bm->vlib_main = vm; bm->vnet_main = vnet_get_main (); - vec_validate_aligned (bm->slave_by_sw_if_index, 1, CLIB_CACHE_LINE_BYTES); + vec_validate_aligned (bm->member_by_sw_if_index, 1, CLIB_CACHE_LINE_BYTES); vec_validate_aligned (bm->per_thread_data, vlib_get_thread_main ()->n_vlib_mains - 1, CLIB_CACHE_LINE_BYTES); diff --git a/src/vnet/bonding/device.c b/src/vnet/bonding/device.c index b3069fe0f13..38759eed1ef 100644 --- a/src/vnet/bonding/device.c +++ b/src/vnet/bonding/device.c @@ -29,7 +29,7 @@ #define foreach_bond_tx_error \ _(NONE, "no error") \ _(IF_DOWN, "interface down") \ - _(NO_SLAVE, "no slave") + _(NO_MEMBER, "no member") typedef enum { @@ -85,29 +85,29 @@ bond_set_l2_mode_function (vnet_main_t * vnm, { bond_if_t *bif; u32 *sw_if_index; - struct vnet_hw_interface_t *sif_hw; + struct vnet_hw_interface_t *mif_hw; - bif = bond_get_master_by_sw_if_index (bif_hw->sw_if_index); + bif = bond_get_bond_if_by_sw_if_index (bif_hw->sw_if_index); if (!bif) return 0; if ((bif_hw->l2_if_count == 1) && (l2_if_adjust == 1)) { /* Just added first L2 interface on this port */ - vec_foreach (sw_if_index, bif->slaves) + vec_foreach (sw_if_index, bif->members) { - sif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index); - ethernet_set_flags (vnm, sif_hw->hw_if_index, + mif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index); + ethernet_set_flags (vnm, mif_hw->hw_if_index, ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); } } else if ((bif_hw->l2_if_count == 0) && (l2_if_adjust == -1)) { /* Just removed last L2 subinterface on this port */ - vec_foreach (sw_if_index, bif->slaves) + vec_foreach (sw_if_index, bif->members) { - sif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index); - ethernet_set_flags (vnm, sif_hw->hw_if_index, + mif_hw = vnet_get_sup_hw_interface (vnm, *sw_if_index); + ethernet_set_flags (vnm, mif_hw->hw_if_index, /*ETHERNET_INTERFACE_FLAG_DEFAULT_L3 */ 0); } } @@ -132,7 +132,7 @@ bond_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags) bond_if_t *bif = pool_elt_at_index (bm->interfaces, hif->dev_instance); bif->admin_up = is_up; - if (is_up && vec_len (bif->active_slaves)) + if (is_up && vec_len (bif->active_members)) vnet_hw_interface_set_flags (vnm, bif->hw_if_index, VNET_HW_INTERFACE_FLAG_LINK_UP); return 0; @@ -149,17 +149,18 @@ bond_add_del_mac_address (vnet_hw_interface_t * hi, const u8 * address, int i; - bif = bond_get_master_by_sw_if_index (hi->sw_if_index); + bif = bond_get_bond_if_by_sw_if_index (hi->sw_if_index); if (!bif) { - return clib_error_return (0, "No bond master found for sw_if_index %u", + return clib_error_return (0, + "No bond interface found for sw_if_index %u", hi->sw_if_index); } - /* Add/del address on each slave hw intf, they control the hardware */ - vec_foreach_index (i, bif->slaves) + /* Add/del address on each member hw intf, they control the hardware */ + vec_foreach_index (i, bif->members) { - s_hi = vnet_get_sup_hw_interface (vnm, vec_elt (bif->slaves, i)); + s_hi = vnet_get_sup_hw_interface (vnm, vec_elt (bif->members, i)); error = vnet_hw_interface_add_del_mac_address (vnm, s_hi->hw_if_index, address, is_add); @@ -170,7 +171,7 @@ bond_add_del_mac_address (vnet_hw_interface_t * hi, const u8 * address, /* undo any that were completed before the failure */ for (j = i - 1; j > -1; j--) { - s_hi = vnet_get_sup_hw_interface (vnm, vec_elt (bif->slaves, j)); + s_hi = vnet_get_sup_hw_interface (vnm, vec_elt (bif->members, j)); vnet_hw_interface_add_del_mac_address (vnm, s_hi->hw_if_index, address, !(is_add)); } @@ -191,7 +192,7 @@ bond_tx_add_to_queue (bond_per_thread_data_t * ptd, u32 port, u32 bi) static_always_inline u32 bond_lb_broadcast (vlib_main_t * vm, - bond_if_t * bif, vlib_buffer_t * b0, uword n_slaves) + bond_if_t * bif, vlib_buffer_t * b0, uword n_members) { bond_main_t *bm = &bond_main; vlib_buffer_t *c0; @@ -201,9 +202,9 @@ bond_lb_broadcast (vlib_main_t * vm, bond_per_thread_data_t *ptd = vec_elt_at_index (bm->per_thread_data, thread_index); - for (port = 1; port < n_slaves; port++) + for (port = 1; port < n_members; port++) { - sw_if_index = *vec_elt_at_index (bif->active_slaves, port); + sw_if_index = *vec_elt_at_index (bif->active_members, port); c0 = vlib_buffer_copy (vm, b0); if (PREDICT_TRUE (c0 != 0)) { @@ -387,10 +388,10 @@ bond_lb_l34 (vlib_buffer_t * b0) } static_always_inline u32 -bond_lb_round_robin (bond_if_t * bif, vlib_buffer_t * b0, uword n_slaves) +bond_lb_round_robin (bond_if_t * bif, vlib_buffer_t * b0, uword n_members) { bif->lb_rr_last_index++; - if (bif->lb_rr_last_index >= n_slaves) + if (bif->lb_rr_last_index >= n_members) bif->lb_rr_last_index = 0; return bif->lb_rr_last_index; @@ -398,7 +399,7 @@ bond_lb_round_robin (bond_if_t * bif, vlib_buffer_t * b0, uword n_slaves) static_always_inline void bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, - u32 * h, u32 n_left, uword n_slaves, u32 lb_alg) + u32 * h, u32 n_left, uword n_members, u32 lb_alg) { while (n_left >= 4) { @@ -446,17 +447,17 @@ bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, } else if (lb_alg == BOND_LB_RR) { - h[0] = bond_lb_round_robin (bif, b[0], n_slaves); - h[1] = bond_lb_round_robin (bif, b[1], n_slaves); - h[2] = bond_lb_round_robin (bif, b[2], n_slaves); - h[3] = bond_lb_round_robin (bif, b[3], n_slaves); + h[0] = bond_lb_round_robin (bif, b[0], n_members); + h[1] = bond_lb_round_robin (bif, b[1], n_members); + h[2] = bond_lb_round_robin (bif, b[2], n_members); + h[3] = bond_lb_round_robin (bif, b[3], n_members); } else if (lb_alg == BOND_LB_BC) { - h[0] = bond_lb_broadcast (vm, bif, b[0], n_slaves); - h[1] = bond_lb_broadcast (vm, bif, b[1], n_slaves); - h[2] = bond_lb_broadcast (vm, bif, b[2], n_slaves); - h[3] = bond_lb_broadcast (vm, bif, b[3], n_slaves); + h[0] = bond_lb_broadcast (vm, bif, b[0], n_members); + h[1] = bond_lb_broadcast (vm, bif, b[1], n_members); + h[2] = bond_lb_broadcast (vm, bif, b[2], n_members); + h[3] = bond_lb_broadcast (vm, bif, b[3], n_members); } else { @@ -479,9 +480,9 @@ bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, else if (bif->lb == BOND_LB_L23) h[0] = bond_lb_l23 (b[0]); else if (bif->lb == BOND_LB_RR) - h[0] = bond_lb_round_robin (bif, b[0], n_slaves); + h[0] = bond_lb_round_robin (bif, b[0], n_members); else if (bif->lb == BOND_LB_BC) - h[0] = bond_lb_broadcast (vm, bif, b[0], n_slaves); + h[0] = bond_lb_broadcast (vm, bif, b[0], n_members); else { ASSERT (0); @@ -494,9 +495,10 @@ bond_tx_inline (vlib_main_t * vm, bond_if_t * bif, vlib_buffer_t ** b, } static_always_inline void -bond_hash_to_port (u32 * h, u32 n_left, u32 n_slaves, int use_modulo_shortcut) +bond_hash_to_port (u32 * h, u32 n_left, u32 n_members, + int use_modulo_shortcut) { - u32 mask = n_slaves - 1; + u32 mask = n_members - 1; #ifdef CLIB_HAVE_VEC256 /* only lower 16 bits of hash due to single precision fp arithmetic */ @@ -510,7 +512,7 @@ bond_hash_to_port (u32 * h, u32 n_left, u32 n_slaves, int use_modulo_shortcut) else { mask8 = u32x8_splat (0xffff); - sc8u = u32x8_splat (n_slaves); + sc8u = u32x8_splat (n_members); sc8f = f32x8_from_u32x8 (sc8u); } @@ -543,10 +545,10 @@ bond_hash_to_port (u32 * h, u32 n_left, u32 n_slaves, int use_modulo_shortcut) } else { - h[0] %= n_slaves; - h[1] %= n_slaves; - h[2] %= n_slaves; - h[3] %= n_slaves; + h[0] %= n_members; + h[1] %= n_members; + h[2] %= n_members; + h[3] %= n_members; } n_left -= 4; h += 4; @@ -556,7 +558,7 @@ bond_hash_to_port (u32 * h, u32 n_left, u32 n_slaves, int use_modulo_shortcut) if (use_modulo_shortcut) h[0] &= mask; else - h[0] %= n_slaves; + h[0] %= n_members; n_left -= 1; h += 1; } @@ -598,10 +600,10 @@ bond_update_sw_if_index (bond_per_thread_data_t * ptd, bond_if_t * bif, { u32 sw_if_index[4]; - sw_if_index[0] = *vec_elt_at_index (bif->active_slaves, h[0]); - sw_if_index[1] = *vec_elt_at_index (bif->active_slaves, h[1]); - sw_if_index[2] = *vec_elt_at_index (bif->active_slaves, h[2]); - sw_if_index[3] = *vec_elt_at_index (bif->active_slaves, h[3]); + sw_if_index[0] = *vec_elt_at_index (bif->active_members, h[0]); + sw_if_index[1] = *vec_elt_at_index (bif->active_members, h[1]); + sw_if_index[2] = *vec_elt_at_index (bif->active_members, h[2]); + sw_if_index[3] = *vec_elt_at_index (bif->active_members, h[3]); vnet_buffer (b[0])->sw_if_index[VLIB_TX] = sw_if_index[0]; vnet_buffer (b[1])->sw_if_index[VLIB_TX] = sw_if_index[1]; @@ -628,7 +630,7 @@ bond_update_sw_if_index (bond_per_thread_data_t * ptd, bond_if_t * bif, } else { - u32 sw_if_index0 = *vec_elt_at_index (bif->active_slaves, h[0]); + u32 sw_if_index0 = *vec_elt_at_index (bif->active_members, h[0]); vnet_buffer (b[0])->sw_if_index[VLIB_TX] = sw_if_index0; bond_tx_add_to_queue (ptd, h[0], bi[0]); @@ -661,11 +663,12 @@ bond_tx_trace (vlib_main_t * vm, vlib_node_runtime_t * node, bond_if_t * bif, t0->sw_if_index = vnet_buffer (b[0])->sw_if_index[VLIB_TX]; if (!h) { - t0->bond_sw_if_index = *vec_elt_at_index (bif->active_slaves, 0); + t0->bond_sw_if_index = *vec_elt_at_index (bif->active_members, 0); } else { - t0->bond_sw_if_index = *vec_elt_at_index (bif->active_slaves, h[0]); + t0->bond_sw_if_index = + *vec_elt_at_index (bif->active_members, h[0]); h++; } b++; @@ -681,7 +684,7 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm, bond_main_t *bm = &bond_main; u16 thread_index = vm->thread_index; bond_if_t *bif = pool_elt_at_index (bm->interfaces, rund->dev_instance); - uword n_slaves; + uword n_members; vlib_buffer_t *bufs[VLIB_FRAME_SIZE]; u32 *from = vlib_frame_vector_args (frame); u32 n_left = frame->n_vectors; @@ -703,15 +706,15 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm, return frame->n_vectors; } - n_slaves = vec_len (bif->active_slaves); - if (PREDICT_FALSE (n_slaves == 0)) + n_members = vec_len (bif->active_members); + if (PREDICT_FALSE (n_members == 0)) { vlib_buffer_free (vm, vlib_frame_vector_args (frame), frame->n_vectors); vlib_increment_simple_counter (vnet_main.interface_main.sw_if_counters + VNET_INTERFACE_COUNTER_DROP, thread_index, bif->sw_if_index, frame->n_vectors); - vlib_error_count (vm, node->node_index, BOND_TX_ERROR_NO_SLAVE, + vlib_error_count (vm, node->node_index, BOND_TX_ERROR_NO_MEMBER, frame->n_vectors); return frame->n_vectors; } @@ -719,9 +722,9 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm, vlib_get_buffers (vm, from, bufs, n_left); /* active-backup mode, ship everything to first sw if index */ - if ((bif->lb == BOND_LB_AB) || PREDICT_FALSE (n_slaves == 1)) + if ((bif->lb == BOND_LB_AB) || PREDICT_FALSE (n_members == 1)) { - sw_if_index = *vec_elt_at_index (bif->active_slaves, 0); + sw_if_index = *vec_elt_at_index (bif->active_members, 0); bond_tx_trace (vm, node, bif, bufs, frame->n_vectors, 0); bond_update_sw_if_index (ptd, bif, from, bufs, &sw_if_index, n_left, @@ -731,37 +734,37 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm, if (bif->lb == BOND_LB_BC) { - sw_if_index = *vec_elt_at_index (bif->active_slaves, 0); + sw_if_index = *vec_elt_at_index (bif->active_members, 0); - bond_tx_inline (vm, bif, bufs, hashes, n_left, n_slaves, BOND_LB_BC); + bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_BC); bond_tx_trace (vm, node, bif, bufs, frame->n_vectors, 0); bond_update_sw_if_index (ptd, bif, from, bufs, &sw_if_index, n_left, /* single_sw_if_index */ 1); goto done; } - /* if have at least one slave on local numa node, only slaves on local numa + /* if have at least one member on local numa node, only members on local numa node will transmit pkts when bif->local_numa_only is enabled */ - if (bif->n_numa_slaves >= 1) - n_slaves = bif->n_numa_slaves; + if (bif->n_numa_members >= 1) + n_members = bif->n_numa_members; if (bif->lb == BOND_LB_L2) - bond_tx_inline (vm, bif, bufs, hashes, n_left, n_slaves, BOND_LB_L2); + bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_L2); else if (bif->lb == BOND_LB_L34) - bond_tx_inline (vm, bif, bufs, hashes, n_left, n_slaves, BOND_LB_L34); + bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_L34); else if (bif->lb == BOND_LB_L23) - bond_tx_inline (vm, bif, bufs, hashes, n_left, n_slaves, BOND_LB_L23); + bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_L23); else if (bif->lb == BOND_LB_RR) - bond_tx_inline (vm, bif, bufs, hashes, n_left, n_slaves, BOND_LB_RR); + bond_tx_inline (vm, bif, bufs, hashes, n_left, n_members, BOND_LB_RR); else ASSERT (0); /* calculate port out of hash */ h = hashes; - if (BOND_MODULO_SHORTCUT (n_slaves)) - bond_hash_to_port (h, frame->n_vectors, n_slaves, 1); + if (BOND_MODULO_SHORTCUT (n_members)) + bond_hash_to_port (h, frame->n_vectors, n_members, 1); else - bond_hash_to_port (h, frame->n_vectors, n_slaves, 0); + bond_hash_to_port (h, frame->n_vectors, n_members, 0); bond_tx_trace (vm, node, bif, bufs, frame->n_vectors, h); @@ -769,12 +772,12 @@ VNET_DEVICE_CLASS_TX_FN (bond_dev_class) (vlib_main_t * vm, /* single_sw_if_index */ 0); done: - for (p = 0; p < n_slaves; p++) + for (p = 0; p < n_members; p++) { vlib_frame_t *f; u32 *to_next; - sw_if_index = *vec_elt_at_index (bif->active_slaves, p); + sw_if_index = *vec_elt_at_index (bif->active_members, p); if (PREDICT_TRUE (ptd->per_port_queue[p].n_buffers)) { f = vnet_get_frame_to_sw_interface (vnm, sw_if_index); @@ -852,23 +855,23 @@ VNET_DEVICE_CLASS (bond_dev_class) = { /* *INDENT-ON* */ static clib_error_t * -bond_slave_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add) +bond_member_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add) { bond_main_t *bm = &bond_main; - slave_if_t *sif; - bond_detach_slave_args_t args = { 0 }; + member_if_t *mif; + bond_detach_member_args_t args = { 0 }; if (is_add) return 0; - sif = bond_get_slave_by_sw_if_index (sw_if_index); - if (!sif) + mif = bond_get_member_by_sw_if_index (sw_if_index); + if (!mif) return 0; - args.slave = sw_if_index; - bond_detach_slave (bm->vlib_main, &args); + args.member = sw_if_index; + bond_detach_member (bm->vlib_main, &args); return args.error; } -VNET_SW_INTERFACE_ADD_DEL_FUNCTION (bond_slave_interface_add_del); +VNET_SW_INTERFACE_ADD_DEL_FUNCTION (bond_member_interface_add_del); /* * fd.io coding-style-patch-verification: ON diff --git a/src/vnet/bonding/node.c b/src/vnet/bonding/node.c index a606d20f19c..d49894fcb74 100644 --- a/src/vnet/bonding/node.c +++ b/src/vnet/bonding/node.c @@ -136,40 +136,40 @@ bond_sw_if_idx_rewrite (vlib_main_t * vm, vlib_node_runtime_t * node, static inline void bond_update_next (vlib_main_t * vm, vlib_node_runtime_t * node, - u32 * last_slave_sw_if_index, u32 slave_sw_if_index, + u32 * last_member_sw_if_index, u32 member_sw_if_index, u32 * bond_sw_if_index, vlib_buffer_t * b, u32 * next_index, vlib_error_t * error) { - slave_if_t *sif; + member_if_t *mif; bond_if_t *bif; *next_index = BOND_INPUT_NEXT_DROP; *error = 0; - if (PREDICT_TRUE (*last_slave_sw_if_index == slave_sw_if_index)) + if (PREDICT_TRUE (*last_member_sw_if_index == member_sw_if_index)) goto next; - *last_slave_sw_if_index = slave_sw_if_index; + *last_member_sw_if_index = member_sw_if_index; - sif = bond_get_slave_by_sw_if_index (slave_sw_if_index); - ALWAYS_ASSERT (sif); + mif = bond_get_member_by_sw_if_index (member_sw_if_index); + ALWAYS_ASSERT (mif); - bif = bond_get_master_by_dev_instance (sif->bif_dev_instance); + bif = bond_get_bond_if_by_dev_instance (mif->bif_dev_instance); ALWAYS_ASSERT (bif); - ASSERT (vec_len (bif->slaves)); + ASSERT (vec_len (bif->members)); if (PREDICT_FALSE (bif->admin_up == 0)) { - *bond_sw_if_index = slave_sw_if_index; + *bond_sw_if_index = member_sw_if_index; *error = node->errors[BOND_INPUT_ERROR_IF_DOWN]; } if (PREDICT_FALSE ((bif->mode == BOND_MODE_ACTIVE_BACKUP) && - vec_len (bif->active_slaves) && - (slave_sw_if_index != bif->active_slaves[0]))) + vec_len (bif->active_members) && + (member_sw_if_index != bif->active_members[0]))) { - *bond_sw_if_index = slave_sw_if_index; + *bond_sw_if_index = member_sw_if_index; *error = node->errors[BOND_INPUT_ERROR_PASSIVE_IF]; return; } @@ -202,7 +202,7 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b; u32 sw_if_indices[VLIB_FRAME_SIZE], *sw_if_index; u16 nexts[VLIB_FRAME_SIZE], *next; - u32 last_slave_sw_if_index = ~0; + u32 last_member_sw_if_index = ~0; u32 bond_sw_if_index = 0; vlib_error_t error = 0; u32 next_index = 0; @@ -242,17 +242,17 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, sw_if_index[2] = vnet_buffer (b[2])->sw_if_index[VLIB_RX]; sw_if_index[3] = vnet_buffer (b[3])->sw_if_index[VLIB_RX]; - x |= sw_if_index[0] ^ last_slave_sw_if_index; - x |= sw_if_index[1] ^ last_slave_sw_if_index; - x |= sw_if_index[2] ^ last_slave_sw_if_index; - x |= sw_if_index[3] ^ last_slave_sw_if_index; + x |= sw_if_index[0] ^ last_member_sw_if_index; + x |= sw_if_index[1] ^ last_member_sw_if_index; + x |= sw_if_index[2] ^ last_member_sw_if_index; + x |= sw_if_index[3] ^ last_member_sw_if_index; if (PREDICT_TRUE (x == 0)) { /* * Optimize to call update_next only if there is a feature arc * after bond-input. Test feature count greater than 1 because - * bond-input itself is a feature arc for this slave interface. + * bond-input itself is a feature arc for this member interface. */ ASSERT ((vnet_buffer (b[0])->feature_arc_index == vnet_buffer (b[1])->feature_arc_index) && @@ -262,7 +262,7 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, vnet_buffer (b[3])->feature_arc_index)); if (PREDICT_FALSE (vnet_get_feature_count (vnet_buffer (b[0])->feature_arc_index, - last_slave_sw_if_index) > 1)) + last_member_sw_if_index) > 1)) bond_update_next_x4 (b[0], b[1], b[2], b[3]); next[0] = next[1] = next[2] = next[3] = next_index; @@ -287,8 +287,9 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, } else { - bond_update_next (vm, node, &last_slave_sw_if_index, sw_if_index[0], - &bond_sw_if_index, b[0], &next_index, &error); + bond_update_next (vm, node, &last_member_sw_if_index, + sw_if_index[0], &bond_sw_if_index, b[0], + &next_index, &error); next[0] = next_index; if (next_index == BOND_INPUT_NEXT_DROP) b[0]->error = error; @@ -296,8 +297,9 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, bond_sw_if_idx_rewrite (vm, node, b[0], bond_sw_if_index, &n_rx_packets, &n_rx_bytes); - bond_update_next (vm, node, &last_slave_sw_if_index, sw_if_index[1], - &bond_sw_if_index, b[1], &next_index, &error); + bond_update_next (vm, node, &last_member_sw_if_index, + sw_if_index[1], &bond_sw_if_index, b[1], + &next_index, &error); next[1] = next_index; if (next_index == BOND_INPUT_NEXT_DROP) b[1]->error = error; @@ -305,8 +307,9 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, bond_sw_if_idx_rewrite (vm, node, b[1], bond_sw_if_index, &n_rx_packets, &n_rx_bytes); - bond_update_next (vm, node, &last_slave_sw_if_index, sw_if_index[2], - &bond_sw_if_index, b[2], &next_index, &error); + bond_update_next (vm, node, &last_member_sw_if_index, + sw_if_index[2], &bond_sw_if_index, b[2], + &next_index, &error); next[2] = next_index; if (next_index == BOND_INPUT_NEXT_DROP) b[2]->error = error; @@ -314,8 +317,9 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, bond_sw_if_idx_rewrite (vm, node, b[2], bond_sw_if_index, &n_rx_packets, &n_rx_bytes); - bond_update_next (vm, node, &last_slave_sw_if_index, sw_if_index[3], - &bond_sw_if_index, b[3], &next_index, &error); + bond_update_next (vm, node, &last_member_sw_if_index, + sw_if_index[3], &bond_sw_if_index, b[3], + &next_index, &error); next[3] = next_index; if (next_index == BOND_INPUT_NEXT_DROP) b[3]->error = error; @@ -339,7 +343,7 @@ VLIB_NODE_FN (bond_input_node) (vlib_main_t * vm, while (n_left) { sw_if_index[0] = vnet_buffer (b[0])->sw_if_index[VLIB_RX]; - bond_update_next (vm, node, &last_slave_sw_if_index, sw_if_index[0], + bond_update_next (vm, node, &last_member_sw_if_index, sw_if_index[0], &bond_sw_if_index, b[0], &next_index, &error); next[0] = next_index; if (next_index == BOND_INPUT_NEXT_DROP) @@ -430,22 +434,22 @@ static clib_error_t * bond_sw_interface_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags) { bond_main_t *bm = &bond_main; - slave_if_t *sif; + member_if_t *mif; vlib_main_t *vm = bm->vlib_main; - sif = bond_get_slave_by_sw_if_index (sw_if_index); - if (sif) + mif = bond_get_member_by_sw_if_index (sw_if_index); + if (mif) { - if (sif->lacp_enabled) + if (mif->lacp_enabled) return 0; /* port_enabled is both admin up and hw link up */ - sif->port_enabled = ((flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) && + mif->port_enabled = ((flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) && vnet_sw_interface_is_link_up (vnm, sw_if_index)); - if (sif->port_enabled == 0) - bond_disable_collecting_distributing (vm, sif); + if (mif->port_enabled == 0) + bond_disable_collecting_distributing (vm, mif); else - bond_enable_collecting_distributing (vm, sif); + bond_enable_collecting_distributing (vm, mif); } return 0; @@ -457,25 +461,25 @@ static clib_error_t * bond_hw_interface_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags) { bond_main_t *bm = &bond_main; - slave_if_t *sif; + member_if_t *mif; vnet_sw_interface_t *sw; vlib_main_t *vm = bm->vlib_main; sw = vnet_get_hw_sw_interface (vnm, hw_if_index); - sif = bond_get_slave_by_sw_if_index (sw->sw_if_index); - if (sif) + mif = bond_get_member_by_sw_if_index (sw->sw_if_index); + if (mif) { - if (sif->lacp_enabled) + if (mif->lacp_enabled) return 0; /* port_enabled is both admin up and hw link up */ - sif->port_enabled = ((flags & VNET_HW_INTERFACE_FLAG_LINK_UP) && + mif->port_enabled = ((flags & VNET_HW_INTERFACE_FLAG_LINK_UP) && vnet_sw_interface_is_admin_up (vnm, sw->sw_if_index)); - if (sif->port_enabled == 0) - bond_disable_collecting_distributing (vm, sif); + if (mif->port_enabled == 0) + bond_disable_collecting_distributing (vm, mif); else - bond_enable_collecting_distributing (vm, sif); + bond_enable_collecting_distributing (vm, mif); } return 0; diff --git a/src/vnet/bonding/node.h b/src/vnet/bonding/node.h index ddd48feb1a3..843c236f123 100644 --- a/src/vnet/bonding/node.h +++ b/src/vnet/bonding/node.h @@ -92,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; @@ -101,15 +101,15 @@ 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 { @@ -126,14 +126,14 @@ typedef struct u32 sw_if_index; u32 id; u8 interface_name[64]; - u8 mode; - u8 lb; + u32 mode; + u32 lb; u8 numa_only; - u32 active_slaves; - u32 slaves; + u32 active_members; + u32 members; } bond_interface_details_t; -/** slave interface details struct */ +/** member interface details struct */ typedef struct { u32 sw_if_index; @@ -142,8 +142,8 @@ typedef struct u8 is_long_timeout; u8 is_local_numa; u32 weight; - u32 active_slaves; -} slave_interface_details_t; + u32 active_members; +} member_interface_details_t; typedef CLIB_PACKED (struct { @@ -171,7 +171,7 @@ typedef struct u8 mode; u8 lb; - /* 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 */ @@ -183,24 +183,24 @@ 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; + /* 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 slaves + /* 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 slaves on local numa node are there in lacp mode? */ - word n_numa_slaves; + /* How many members on local numa node are there in lacp mode? */ + word n_numa_members; u32 group; uword *port_number_bitmap; @@ -345,12 +345,12 @@ typedef struct /* pdu sent */ u64 marker_pdu_sent; - /* slave is numa node */ + /* member is numa node */ u8 is_local_numa; -} slave_if_t; +} 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 { @@ -366,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; @@ -381,7 +381,7 @@ 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; @@ -398,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 { @@ -411,19 +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) @@ -499,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; @@ -513,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__ */ |