X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=test%2Ftest%2Ftest_link_bonding_mode4.c;h=fd2e92042f69ca8efc0cd95e5fec22191c7cc3d8;hb=e00093f381a185e59795b554c040754b1c33c9ef;hp=53caa3e980877c90c344fab65dc58e5cadcd61dc;hpb=7d3b1ec47fae5b2d972e05d0ee37bb7a1731b085;p=dpdk.git diff --git a/test/test/test_link_bonding_mode4.c b/test/test/test_link_bonding_mode4.c index 53caa3e980..fd2e92042f 100644 --- a/test/test/test_link_bonding_mode4.c +++ b/test/test/test_link_bonding_mode4.c @@ -1,34 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation */ #include @@ -73,11 +44,11 @@ #define MAX_PKT_BURST (32) #define DEF_PKT_BURST (16) -#define BONDED_DEV_NAME ("unit_test_mode4_bond_dev") +#define BONDED_DEV_NAME ("net_bonding_m4_bond_dev") -#define SLAVE_DEV_NAME_FMT ("unit_test_mode4_slave_%d") -#define SLAVE_RX_QUEUE_FMT ("unit_test_mode4_slave_%d_rx") -#define SLAVE_TX_QUEUE_FMT ("unit_test_mode4_slave_%d_tx") +#define SLAVE_DEV_NAME_FMT ("net_virt_%d") +#define SLAVE_RX_QUEUE_FMT ("net_virt_%d_rx") +#define SLAVE_TX_QUEUE_FMT ("net_virt_%d_tx") #define INVALID_SOCKET_ID (-1) #define INVALID_PORT_ID (0xFF) @@ -102,7 +73,7 @@ static const struct ether_addr slow_protocol_mac_addr = { struct slave_conf { struct rte_ring *rx_queue; struct rte_ring *tx_queue; - uint8_t port_id; + uint16_t port_id; uint8_t bonded : 1; uint8_t lacp_parnter_state; @@ -143,7 +114,7 @@ static struct rte_eth_conf default_pmd_conf = { .hw_ip_checksum = 0, /**< IP checksum offload enabled */ .hw_vlan_filter = 0, /**< VLAN filtering disabled */ .jumbo_frame = 0, /**< Jumbo Frame Support disabled */ - .hw_strip_crc = 0, /**< CRC stripped by hardware */ + .hw_strip_crc = 1, /**< CRC stripped by hardware */ }, .txmode = { .mq_mode = ETH_MQ_TX_NONE, @@ -193,7 +164,8 @@ static uint8_t lacpdu_rx_count[RTE_MAX_ETHPORTS] = {0, }; static int slave_get_pkts(struct slave_conf *slave, struct rte_mbuf **buf, uint16_t size) { - return rte_ring_dequeue_burst(slave->tx_queue, (void **)buf, size); + return rte_ring_dequeue_burst(slave->tx_queue, (void **)buf, + size, NULL); } /* @@ -206,7 +178,8 @@ slave_get_pkts(struct slave_conf *slave, struct rte_mbuf **buf, uint16_t size) static int slave_put_pkts(struct slave_conf *slave, struct rte_mbuf **buf, uint16_t size) { - return rte_ring_enqueue_burst(slave->rx_queue, (void **)buf, size); + return rte_ring_enqueue_burst(slave->rx_queue, (void **)buf, + size, NULL); } static uint16_t @@ -233,7 +206,7 @@ free_pkts(struct rte_mbuf **pkts, uint16_t count) } static int -configure_ethdev(uint8_t port_id, uint8_t start) +configure_ethdev(uint16_t port_id, uint8_t start) { TEST_ASSERT(rte_eth_dev_configure(port_id, 1, 1, &default_pmd_conf) == 0, "Failed to configure device %u", port_id); @@ -323,7 +296,7 @@ remove_slave(struct slave_conf *slave) } static void -lacp_recv_cb(uint8_t slave_id, struct rte_mbuf *lacp_pkt) +lacp_recv_cb(uint16_t slave_id, struct rte_mbuf *lacp_pkt) { struct ether_hdr *hdr; struct slow_protocol_frame *slow_hdr; @@ -341,7 +314,7 @@ lacp_recv_cb(uint8_t slave_id, struct rte_mbuf *lacp_pkt) } static int -initialize_bonded_device_with_slaves(uint8_t slave_count, uint8_t external_sm) +initialize_bonded_device_with_slaves(uint16_t slave_count, uint8_t external_sm) { uint8_t i; @@ -377,8 +350,8 @@ remove_slaves_and_stop_bonded_device(void) { struct slave_conf *slave; int retval; - uint8_t slaves[RTE_MAX_ETHPORTS]; - uint8_t i; + uint16_t slaves[RTE_MAX_ETHPORTS]; + uint16_t i; rte_eth_dev_stop(test_params.bonded_port_id); @@ -409,7 +382,7 @@ test_setup(void) char name[RTE_ETH_NAME_MAX_LEN]; struct slave_conf *port; const uint8_t socket_id = rte_socket_id(); - uint8_t i; + uint16_t i; if (test_params.mbuf_pool == NULL) { nb_mbuf_per_pool = TEST_RX_DESC_MAX + DEF_PKT_BURST + @@ -659,7 +632,7 @@ bond_handshake(void) TEST_ASSERT_EQUAL(all_slaves_done, 1, "Bond handshake failed\n"); /* If flags doesn't match - report failure */ - return all_slaves_done = 1 ? TEST_SUCCESS : TEST_FAILED; + return all_slaves_done == 1 ? TEST_SUCCESS : TEST_FAILED; } #define TEST_LACP_SLAVE_COUT RTE_DIM(test_params.slave_ports) @@ -680,6 +653,74 @@ test_mode4_lacp(void) return TEST_SUCCESS; } +static int +test_mode4_agg_mode_selection(void) +{ + int retval; + /* Test and verify for Stable mode */ + retval = initialize_bonded_device_with_slaves(TEST_LACP_SLAVE_COUT, 0); + TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device"); + + + retval = rte_eth_bond_8023ad_agg_selection_set( + test_params.bonded_port_id, AGG_STABLE); + TEST_ASSERT_SUCCESS(retval, "Failed to initialize bond aggregation mode"); + retval = bond_handshake(); + TEST_ASSERT_SUCCESS(retval, "Initial handshake failed"); + + + retval = rte_eth_bond_8023ad_agg_selection_get( + test_params.bonded_port_id); + TEST_ASSERT_EQUAL(retval, AGG_STABLE, + "Wrong agg mode received from bonding device"); + + retval = remove_slaves_and_stop_bonded_device(); + TEST_ASSERT_SUCCESS(retval, "Test cleanup failed."); + + + /* test and verify for Bandwidth mode */ + retval = initialize_bonded_device_with_slaves(TEST_LACP_SLAVE_COUT, 0); + TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device"); + + + retval = rte_eth_bond_8023ad_agg_selection_set( + test_params.bonded_port_id, + AGG_BANDWIDTH); + TEST_ASSERT_SUCCESS(retval, + "Failed to initialize bond aggregation mode"); + retval = bond_handshake(); + TEST_ASSERT_SUCCESS(retval, "Initial handshake failed"); + + retval = rte_eth_bond_8023ad_agg_selection_get( + test_params.bonded_port_id); + TEST_ASSERT_EQUAL(retval, AGG_BANDWIDTH, + "Wrong agg mode received from bonding device"); + + retval = remove_slaves_and_stop_bonded_device(); + TEST_ASSERT_SUCCESS(retval, "Test cleanup failed."); + + /* test and verify selection for count mode */ + retval = initialize_bonded_device_with_slaves(TEST_LACP_SLAVE_COUT, 0); + TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device"); + + + retval = rte_eth_bond_8023ad_agg_selection_set( + test_params.bonded_port_id, AGG_COUNT); + TEST_ASSERT_SUCCESS(retval, + "Failed to initialize bond aggregation mode"); + retval = bond_handshake(); + TEST_ASSERT_SUCCESS(retval, "Initial handshake failed"); + + retval = rte_eth_bond_8023ad_agg_selection_get( + test_params.bonded_port_id); + TEST_ASSERT_EQUAL(retval, AGG_COUNT, + "Wrong agg mode received from bonding device"); + + retval = remove_slaves_and_stop_bonded_device(); + TEST_ASSERT_SUCCESS(retval, "Test cleanup failed."); + + return TEST_SUCCESS; +} static int generate_packets(struct ether_addr *src_mac, @@ -819,7 +860,7 @@ test_mode4_rx(void) TEST_ASSERT(cnt[0] == expected_pkts_cnt / 2 && cnt[1] == expected_pkts_cnt / 2, "Expected %u packets with the same MAC and %u with different but " - "got %u with the same and %u with diffrent MAC", + "got %u with the same and %u with different MAC", expected_pkts_cnt / 2, expected_pkts_cnt / 2, cnt[1], cnt[0]); } else if (retval > 0) free_pkts(pkts, retval); @@ -923,7 +964,7 @@ test_mode4_rx(void) break; } - TEST_ASSERT(j < 5, "Failed to agregate slave after link up"); + TEST_ASSERT(j < 5, "Failed to aggregate slave after link up"); } remove_slaves_and_stop_bonded_device(); @@ -1261,7 +1302,7 @@ test_mode4_expired(void) retval = bond_handshake_reply(slave); TEST_ASSERT(retval >= 0, "Handshake failed"); - /* Remove replay for slave that supose to be expired. */ + /* Remove replay for slave that suppose to be expired. */ if (slave == exp_slave) { while (rte_ring_count(slave->rx_queue) > 0) { void *pkt = NULL; @@ -1451,7 +1492,7 @@ check_environment(void) { struct slave_conf *port; uint8_t i, env_state; - uint8_t slaves[RTE_DIM(test_params.slave_ports)]; + uint16_t slaves[RTE_DIM(test_params.slave_ports)]; int slaves_count; env_state = 0; @@ -1532,6 +1573,11 @@ test_mode4_executor(int (*test_func)(void)) return test_result; } +static int +test_mode4_agg_mode_selection_wrapper(void){ + return test_mode4_executor(&test_mode4_agg_mode_selection); +} + static int test_mode4_lacp_wrapper(void) { @@ -1579,6 +1625,8 @@ static struct unit_test_suite link_bonding_mode4_test_suite = { .setup = test_setup, .teardown = testsuite_teardown, .unit_test_cases = { + TEST_CASE_NAMED("test_mode4_agg_mode_selection", + test_mode4_agg_mode_selection_wrapper), TEST_CASE_NAMED("test_mode4_lacp", test_mode4_lacp_wrapper), TEST_CASE_NAMED("test_mode4_rx", test_mode4_rx_wrapper), TEST_CASE_NAMED("test_mode4_tx_burst", test_mode4_tx_burst_wrapper),