| 219 | } |
| 220 | |
| 221 | static int |
| 222 | add_member(struct member_conf *member, uint8_t start) |
| 223 | { |
| 224 | struct rte_ether_addr addr, addr_check; |
| 225 | int retval; |
| 226 | |
| 227 | /* Some sanity check */ |
| 228 | RTE_VERIFY(test_params.member_ports <= member && |
| 229 | member - test_params.member_ports < (int)RTE_DIM(test_params.member_ports)); |
| 230 | RTE_VERIFY(member->bonding == 0); |
| 231 | RTE_VERIFY(member->port_id != INVALID_PORT_ID); |
| 232 | |
| 233 | rte_ether_addr_copy(&member_mac_default, &addr); |
| 234 | addr.addr_bytes[RTE_ETHER_ADDR_LEN - 1] = member->port_id; |
| 235 | |
| 236 | rte_eth_dev_mac_addr_remove(member->port_id, &addr); |
| 237 | |
| 238 | TEST_ASSERT_SUCCESS(rte_eth_dev_mac_addr_add(member->port_id, &addr, 0), |
| 239 | "Failed to set member MAC address"); |
| 240 | |
| 241 | TEST_ASSERT_SUCCESS(rte_eth_bond_member_add(test_params.bonding_port_id, |
| 242 | member->port_id), |
| 243 | "Failed to add member (idx=%u, id=%u) to bonding (id=%u)", |
| 244 | (uint8_t)(member - test_params.member_ports), member->port_id, |
| 245 | test_params.bonding_port_id); |
| 246 | |
| 247 | member->bonding = 1; |
| 248 | if (start) { |
| 249 | TEST_ASSERT_SUCCESS(rte_eth_dev_start(member->port_id), |
| 250 | "Failed to start member %u", member->port_id); |
| 251 | } |
| 252 | |
| 253 | retval = rte_eth_macaddr_get(member->port_id, &addr_check); |
| 254 | TEST_ASSERT_SUCCESS(retval, "Failed to get member mac address: %s", |
| 255 | strerror(-retval)); |
| 256 | TEST_ASSERT_EQUAL(rte_is_same_ether_addr(&addr, &addr_check), 1, |
| 257 | "Member MAC address is not as expected"); |
| 258 | |
| 259 | RTE_VERIFY(member->lacp_parnter_state == 0); |
| 260 | return 0; |
| 261 | } |
| 262 | |
| 263 | static int |
| 264 | remove_member(struct member_conf *member) |
no test coverage detected