New upstream version 17.11-rc3
[deb_dpdk.git] / test / test / test_link_bonding.c
index 52d2d05..c6e3a72 100644 (file)
@@ -83,7 +83,7 @@
 #define MAX_PKT_BURST                  (512)
 #define DEF_PKT_BURST                  (16)
 
-#define BONDED_DEV_NAME                        ("unit_test_bond_dev")
+#define BONDED_DEV_NAME                        ("net_bonding_ut")
 
 #define INVALID_SOCKET_ID              (-1)
 #define INVALID_PORT_ID                        (-1)
@@ -94,9 +94,9 @@ uint8_t slave_mac[] = {0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00 };
 uint8_t bonded_mac[] = {0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF };
 
 struct link_bonding_unittest_params {
-       int8_t bonded_port_id;
-       int8_t slave_port_ids[TEST_MAX_NUMBER_OF_PORTS];
-       uint8_t bonded_slave_count;
+       int16_t bonded_port_id;
+       int16_t slave_port_ids[TEST_MAX_NUMBER_OF_PORTS];
+       uint16_t bonded_slave_count;
        uint8_t bonding_mode;
 
        uint16_t nb_rx_q;
@@ -221,8 +221,12 @@ static struct rte_eth_txconf tx_conf_default = {
 
 };
 
+static void free_virtualpmd_tx_queue(void);
+
+
+
 static int
-configure_ethdev(uint8_t port_id, uint8_t start, uint8_t en_isr)
+configure_ethdev(uint16_t port_id, uint8_t start, uint8_t en_isr)
 {
        int q_id;
 
@@ -313,7 +317,7 @@ test_create_bonded_device(void)
 {
        int current_slave_count;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        /* Don't try to recreate bonded device if re-running test suite*/
        if (test_params->bonded_port_id == -1) {
@@ -383,7 +387,7 @@ test_add_slave_to_bonded_device(void)
 {
        int current_slave_count;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params->bonded_port_id,
                        test_params->slave_port_ids[test_params->bonded_slave_count]),
@@ -430,7 +434,7 @@ test_remove_slave_from_bonded_device(void)
 {
        int current_slave_count;
        struct ether_addr read_mac_addr, *mac_addr;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(test_params->bonded_port_id,
                        test_params->slave_port_ids[test_params->bonded_slave_count-1]),
@@ -492,7 +496,7 @@ static int
 test_add_already_bonded_slave_to_bonded_device(void)
 {
        int port_id, current_slave_count;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
        char pmd_name[RTE_ETH_NAME_MAX_LEN];
 
        test_add_slave_to_bonded_device();
@@ -524,7 +528,7 @@ static int
 test_get_slaves_from_bonded_device(void)
 {
        int current_slave_count;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
                        "Failed to add slave to bonded device");
@@ -605,7 +609,7 @@ test_start_bonded_device(void)
        struct rte_eth_link link_status;
 
        int current_slave_count, current_bonding_mode, primary_port;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        /* Add slave to bonded device*/
        TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
@@ -654,7 +658,7 @@ static int
 test_stop_bonded_device(void)
 {
        int current_slave_count;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        struct rte_eth_link link_status;
 
@@ -684,6 +688,7 @@ static int
 remove_slaves_and_stop_bonded_device(void)
 {
        /* Clean up and remove slaves from bonded device */
+       free_virtualpmd_tx_queue();
        while (test_params->bonded_slave_count > 0)
                TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(),
                                "test_remove_slave_from_bonded_device failed");
@@ -927,7 +932,7 @@ test_set_bonded_port_initialization_mac_assignment(void)
 {
        int i, slave_count, bonded_port_id;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
        int slave_port_ids[BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT];
 
        struct ether_addr slave_mac_addr, bonded_mac_addr, read_mac_addr;
@@ -939,7 +944,7 @@ test_set_bonded_port_initialization_mac_assignment(void)
        /*
         * 1. a - Create / configure  bonded / slave ethdevs
         */
-       bonded_port_id = rte_eth_bond_create("ethdev_bond_mac_ass_test",
+       bonded_port_id = rte_eth_bond_create("net_bonding_mac_ass_test",
                        BONDING_MODE_ACTIVE_BACKUP, rte_socket_id());
        TEST_ASSERT(bonded_port_id > 0, "failed to create bonded device");
 
@@ -1109,7 +1114,7 @@ test_set_bonded_port_initialization_mac_assignment(void)
 
 static int
 initialize_bonded_device_with_slaves(uint8_t bonding_mode, uint8_t bond_en_isr,
-               uint8_t number_of_slaves, uint8_t enable_slave)
+               uint16_t number_of_slaves, uint8_t enable_slave)
 {
        /* Configure bonded device */
        TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 0,
@@ -1173,15 +1178,19 @@ test_adding_slave_after_bonded_device_started(void)
 int test_lsc_interrupt_count;
 
 
-static void
-test_bonding_lsc_event_callback(uint8_t port_id __rte_unused,
-               enum rte_eth_event_type type  __rte_unused, void *param __rte_unused)
+static int
+test_bonding_lsc_event_callback(uint16_t port_id __rte_unused,
+               enum rte_eth_event_type type  __rte_unused,
+               void *param __rte_unused,
+               void *ret_param __rte_unused)
 {
        pthread_mutex_lock(&mutex);
        test_lsc_interrupt_count++;
 
        pthread_cond_signal(&cvar);
        pthread_mutex_unlock(&mutex);
+
+       return 0;
 }
 
 static inline int
@@ -1215,7 +1224,7 @@ static int
 test_status_interrupt(void)
 {
        int slave_count;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        /* initialized bonding device with T slaves */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
@@ -1304,7 +1313,7 @@ test_status_interrupt(void)
 static int
 generate_test_burst(struct rte_mbuf **pkts_burst, uint16_t burst_size,
                uint8_t vlan, uint8_t ipv4, uint8_t toggle_dst_mac,
-               uint8_t toggle_ip_addr, uint8_t toggle_udp_port)
+               uint8_t toggle_ip_addr, uint16_t toggle_udp_port)
 {
        uint16_t pktlen, generated_burst_size, ether_type;
        void *ip_hdr;
@@ -1375,7 +1384,7 @@ test_roundrobin_tx_burst(void)
 
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_ROUND_ROBIN, 0, 2, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        burst_size = 20 * test_params->bonded_slave_count;
 
@@ -1464,7 +1473,7 @@ test_roundrobin_tx_burst_slave_tx_fail(void)
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_ROUND_ROBIN, 0,
                        TEST_RR_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Generate test bursts of packets to transmit */
        TEST_ASSERT_EQUAL(generate_test_burst(pkt_burst,
@@ -1617,9 +1626,6 @@ test_roundrobin_rx_burst_on_single_slave(void)
 
        /* free mbufs */
        for (i = 0; i < MAX_PKT_BURST; i++) {
-               if (gen_pkt_burst[i] != NULL)
-                       rte_pktmbuf_free(gen_pkt_burst[i]);
-
                if (rx_pkt_burst[i] != NULL)
                        rte_pktmbuf_free(rx_pkt_burst[i]);
        }
@@ -1848,7 +1854,7 @@ test_roundrobin_verify_slave_link_status_change_behaviour(void)
        struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
 
        struct rte_eth_stats port_stats;
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
        int i, burst_size, slave_count;
 
@@ -1966,12 +1972,6 @@ test_roundrobin_verify_slave_link_status_change_behaviour(void)
        for (i = 0; i < MAX_PKT_BURST; i++) {
                if (rx_pkt_burst[i] != NULL)
                        rte_pktmbuf_free(rx_pkt_burst[i]);
-
-               if (gen_pkt_burst[1][i] != NULL)
-                       rte_pktmbuf_free(gen_pkt_burst[1][i]);
-
-               if (gen_pkt_burst[3][i] != NULL)
-                       rte_pktmbuf_free(gen_pkt_burst[1][i]);
        }
 
        /* Clean up and remove slaves from bonded device */
@@ -2408,9 +2408,9 @@ test_activebackup_verify_slave_link_status_change_failover(void)
        struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
        struct rte_eth_stats port_stats;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
-       int i, j, burst_size, slave_count, primary_port;
+       int i, burst_size, slave_count, primary_port;
 
        burst_size = 21;
 
@@ -2543,16 +2543,6 @@ test_activebackup_verify_slave_link_status_change_failover(void)
                        "(%d) port_stats.opackets not as expected",
                        test_params->slave_port_ids[3]);
 
-       /* free mbufs */
-       for (i = 0; i < TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT; i++) {
-               for (j = 0; j < MAX_PKT_BURST; j++) {
-                       if (pkt_burst[i][j] != NULL) {
-                               rte_pktmbuf_free(pkt_burst[i][j]);
-                               pkt_burst[i][j] = NULL;
-                       }
-               }
-       }
-
        /* Clean up and remove slaves from bonded device */
        return remove_slaves_and_stop_bonded_device();
 }
@@ -2785,7 +2775,7 @@ balance_l23_tx_burst(uint8_t vlan_enabled, uint8_t ipv4,
 static int
 test_balance_l23_tx_burst_ipv4_toggle_ip_addr(void)
 {
-       return balance_l23_tx_burst(0, 1, 1, 0);
+       return balance_l23_tx_burst(0, 1, 0, 1);
 }
 
 static int
@@ -2951,7 +2941,7 @@ test_balance_tx_burst_slave_tx_fail(void)
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BALANCE, 0,
                        TEST_BAL_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
                        test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
@@ -3082,7 +3072,7 @@ test_balance_rx_burst(void)
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BALANCE, 0, 3, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Generate test bursts of packets to transmit */
        for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
@@ -3161,7 +3151,7 @@ test_balance_verify_promiscuous_enable_disable(void)
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BALANCE, 0, 4, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        rte_eth_promiscuous_enable(test_params->bonded_port_id);
 
@@ -3204,7 +3194,7 @@ test_balance_verify_mac_assignment(void)
        /* Initialize bonded device with 2 slaves in active backup mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BALANCE, 0, 2, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Verify that bonded MACs is that of first slave and that the other slave
         * MAC hasn't been changed */
@@ -3312,16 +3302,16 @@ test_balance_verify_slave_link_status_change_behaviour(void)
        struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
        struct rte_eth_stats port_stats;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
-       int i, j, burst_size, slave_count;
+       int i, burst_size, slave_count;
 
        memset(pkt_burst, 0, sizeof(pkt_burst));
 
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BALANCE, 0, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
                        test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
@@ -3452,16 +3442,6 @@ test_balance_verify_slave_link_status_change_behaviour(void)
                        test_params->bonded_port_id, (int)port_stats.ipackets,
                        burst_size * 3);
 
-       /* free mbufs allocate for rx testing */
-       for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
-               for (j = 0; j < MAX_PKT_BURST; j++) {
-                       if (pkt_burst[i][j] != NULL) {
-                               rte_pktmbuf_free(pkt_burst[i][j]);
-                               pkt_burst[i][j] = NULL;
-                       }
-               }
-       }
-
        /* Clean up and remove slaves from bonded device */
        return remove_slaves_and_stop_bonded_device();
 }
@@ -3476,7 +3456,7 @@ test_broadcast_tx_burst(void)
 
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BROADCAST, 0, 2, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        initialize_eth_header(test_params->pkt_eth_hdr,
                        (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_0,
@@ -3557,7 +3537,7 @@ test_broadcast_tx_burst_slave_tx_fail(void)
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BROADCAST, 0,
                        TEST_BCAST_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Generate test bursts for transmission */
        TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst,
@@ -3675,7 +3655,7 @@ test_broadcast_rx_burst(void)
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BROADCAST, 0, 3, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Generate test bursts of packets to transmit */
        for (i = 0; i < BROADCAST_RX_BURST_NUM_OF_SLAVES; i++) {
@@ -3754,7 +3734,7 @@ test_broadcast_verify_promiscuous_enable_disable(void)
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BROADCAST, 0, 4, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        rte_eth_promiscuous_enable(test_params->bonded_port_id);
 
@@ -3800,7 +3780,7 @@ test_broadcast_verify_mac_assignment(void)
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                        BONDING_MODE_BROADCAST, 0, 4, 1),
-                       "Failed to intialise bonded device");
+                       "Failed to initialise bonded device");
 
        /* Verify that all MACs are the same as first slave added to bonded
         * device */
@@ -3881,16 +3861,16 @@ test_broadcast_verify_slave_link_status_change_behaviour(void)
        struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
        struct rte_eth_stats port_stats;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
-       int i, j, burst_size, slave_count;
+       int i, burst_size, slave_count;
 
        memset(pkt_burst, 0, sizeof(pkt_burst));
 
        /* Initialize bonded device with 4 slaves in round robin mode */
        TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
                                BONDING_MODE_BROADCAST, 0, BROADCAST_LINK_STATUS_NUM_OF_SLAVES,
-                               1), "Failed to intialise bonded device");
+                               1), "Failed to initialise bonded device");
 
        /* Verify Current Slaves Count /Active Slave Count is */
        slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
@@ -3980,16 +3960,6 @@ test_broadcast_verify_slave_link_status_change_behaviour(void)
                        "(%d) port_stats.ipackets not as expected\n",
                        test_params->bonded_port_id);
 
-       /* free mbufs allocate for rx testing */
-       for (i = 0; i < BROADCAST_LINK_STATUS_NUM_OF_SLAVES; i++) {
-               for (j = 0; j < MAX_PKT_BURST; j++) {
-                       if (pkt_burst[i][j] != NULL) {
-                               rte_pktmbuf_free(pkt_burst[i][j]);
-                               pkt_burst[i][j] = NULL;
-                       }
-               }
-       }
-
        /* Clean up and remove slaves from bonded device */
        return remove_slaves_and_stop_bonded_device();
 }
@@ -4372,7 +4342,7 @@ test_tlb_verify_mac_assignment(void)
        /* Set explicit MAC address */
        TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
                        test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
-                       "failed to set MAC addres");
+                       "failed to set MAC address");
 
        rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
        TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
@@ -4403,9 +4373,9 @@ test_tlb_verify_slave_link_status_change_failover(void)
        struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
        struct rte_eth_stats port_stats;
 
-       uint8_t slaves[RTE_MAX_ETHPORTS];
+       uint16_t slaves[RTE_MAX_ETHPORTS];
 
-       int i, j, burst_size, slave_count, primary_port;
+       int i, burst_size, slave_count, primary_port;
 
        burst_size = 21;
 
@@ -4523,18 +4493,6 @@ test_tlb_verify_slave_link_status_change_failover(void)
                        "(%d) port_stats.ipackets not as expected\n",
                        test_params->bonded_port_id);
 
-       /* free mbufs */
-
-       for (i = 0; i < TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT; i++) {
-               for (j = 0; j < MAX_PKT_BURST; j++) {
-                       if (pkt_burst[i][j] != NULL) {
-                               rte_pktmbuf_free(pkt_burst[i][j]);
-                               pkt_burst[i][j] = NULL;
-                       }
-               }
-       }
-
-
        /* Clean up and remove slaves from bonded device */
        return remove_slaves_and_stop_bonded_device();
 }