-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 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) 2015 Intel Corporation
*/
#include <string.h>
#include <rte_log.h>
#include <rte_lcore.h>
#include <rte_memory.h>
+#include <rte_bus_vdev.h>
#include <rte_string_fns.h>
#include <rte_errno.h>
#include <rte_eth_bond.h>
-#include <rte_eth_null.h>
#include "test.h"
#define RXTX_RING_SIZE 1024
#define RXTX_QUEUE_COUNT 4
-#define BONDED_DEV_NAME ("rssconf_bond_dev")
+#define BONDED_DEV_NAME ("net_bonding_rss")
-#define SLAVE_DEV_NAME_FMT ("rssconf_slave%d")
+#define SLAVE_DEV_NAME_FMT ("net_null%d")
#define SLAVE_RXTX_QUEUE_FMT ("rssconf_slave%d_q%d")
#define NUM_MBUFS 8191
-#define MBUF_SIZE (1600 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
+#define MBUF_SIZE (1600 + RTE_PKTMBUF_HEADROOM)
#define MBUF_CACHE_SIZE 250
#define BURST_SIZE 32
#define INVALID_BONDING_MODE (-1)
struct slave_conf {
- uint8_t port_id;
+ uint16_t port_id;
struct rte_eth_dev_info dev_info;
struct rte_eth_rss_conf rss_conf;
static struct rte_eth_conf default_pmd_conf = {
.rxmode = {
.mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
+ .max_rx_pkt_len = RTE_ETHER_MAX_LEN,
.split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .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 */
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
static struct rte_eth_conf rss_pmd_conf = {
.rxmode = {
.mq_mode = ETH_MQ_RX_RSS,
- .max_rx_pkt_len = ETHER_MAX_LEN,
+ .max_rx_pkt_len = RTE_ETHER_MAX_LEN,
.split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .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 */
},
.txmode = {
.mq_mode = ETH_MQ_TX_NONE,
RTE_DIM(test_params.slave_ports))
static int
-configure_ethdev(uint8_t port_id, struct rte_eth_conf *eth_conf, uint8_t start)
+configure_ethdev(uint16_t port_id, struct rte_eth_conf *eth_conf,
+ uint8_t start)
{
int rxq, txq;
* Set all RETA values in port_id to value
*/
static int
-reta_set(uint8_t port_id, uint8_t value, int reta_size)
+reta_set(uint16_t port_id, uint8_t value, int reta_size)
{
struct rte_eth_rss_reta_entry64 reta_conf[512/RTE_RETA_GROUP_SIZE];
int i, j;
uint64_t rss_hf = 0;
uint64_t default_rss_hf = 0;
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
+ retval = rte_eth_dev_info_get(test_params.bond_port_id,
+ &test_params.bond_dev_info);
+ TEST_ASSERT((retval == 0),
+ "Error during getting device (port %u) info: %s\n",
+ test_params.bond_port_id, strerror(-retval));
/*
* Test hash function propagation
/**
* Configure bonding port in RSS mq mode
*/
+ int ret;
+
TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
&rss_pmd_conf, 0), "Failed to configure bonding device\n");
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
+ ret = rte_eth_dev_info_get(test_params.bond_port_id,
+ &test_params.bond_dev_info);
+ TEST_ASSERT((ret == 0),
+ "Error during getting device (port %u) info: %s\n",
+ test_params.bond_port_id, strerror(-ret));
TEST_ASSERT_SUCCESS(bond_slaves(), "Bonding slaves failed");
static int
test_rss_lazy(void)
{
+ int ret;
+
TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
&default_pmd_conf, 0), "Failed to configure bonding device\n");
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
+ ret = rte_eth_dev_info_get(test_params.bond_port_id,
+ &test_params.bond_dev_info);
+ TEST_ASSERT((ret == 0),
+ "Error during getting device (port %u) info: %s\n",
+ test_params.bond_port_id, strerror(-ret));
TEST_ASSERT_SUCCESS(bond_slaves(), "Bonding slaves failed");
int port_id;
char name[256];
struct slave_conf *port;
+ struct rte_ether_addr mac_addr = { .addr_bytes = {0} };
if (test_params.mbuf_pool == NULL) {
- test_params.mbuf_pool = rte_mempool_create("RSS_MBUF_POOL", NUM_MBUFS *
- SLAVE_COUNT, MBUF_SIZE, MBUF_CACHE_SIZE,
- sizeof(struct rte_pktmbuf_pool_private), rte_pktmbuf_pool_init,
- NULL, rte_pktmbuf_init, NULL, rte_socket_id(), 0);
+ test_params.mbuf_pool = rte_pktmbuf_pool_create(
+ "RSS_MBUF_POOL", NUM_MBUFS * SLAVE_COUNT,
+ MBUF_CACHE_SIZE, 0, MBUF_SIZE, rte_socket_id());
TEST_ASSERT(test_params.mbuf_pool != NULL,
- "rte_mempool_create failed\n");
+ "rte_pktmbuf_pool_create failed\n");
}
/* Create / initialize ring eth devs. */
FOR_EACH_PORT(n, port) {
port = &test_params.slave_ports[n];
- port_id = rte_eth_dev_count();
+ port_id = rte_eth_dev_count_avail();
snprintf(name, sizeof(name), SLAVE_DEV_NAME_FMT, port_id);
- retval = eth_dev_null_create(name, 0, 64, 0);
+ retval = rte_vdev_init(name, "size=64,copy=0");
TEST_ASSERT_SUCCESS(retval, "Failed to create null device '%s'\n",
name);
TEST_ASSERT_SUCCESS(retval, "Failed to configure virtual ethdev %s\n",
name);
+ /* assign a non-zero MAC */
+ mac_addr.addr_bytes[5] = 0x10 + port->port_id;
+ rte_eth_dev_default_mac_addr_set(port->port_id, &mac_addr);
+
rte_eth_dev_info_get(port->port_id, &port->dev_info);
+ retval = rte_eth_dev_info_get(port->port_id, &port->dev_info);
+ TEST_ASSERT((retval == 0),
+ "Error during getting device (port %u) info: %s\n",
+ test_params.bond_port_id, strerror(-retval));
}
if (test_params.bond_port_id == INVALID_PORT_ID) {
TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
&default_pmd_conf, 0), "Failed to configure bonding device\n");
- rte_eth_dev_info_get(test_params.bond_port_id,
- &test_params.bond_dev_info);
+ retval = rte_eth_dev_info_get(test_params.bond_port_id,
+ &test_params.bond_dev_info);
+ TEST_ASSERT((retval == 0),
+ "Error during getting device (port %u) info: %s\n",
+ test_params.bond_port_id, strerror(-retval));
}
return TEST_SUCCESS;
}
-static int
+static void
testsuite_teardown(void)
{
struct slave_conf *port;
FOR_EACH_PORT(i, port)
rte_eth_dev_stop(port->port_id);
-
- return 0;
}
static int
TEST_CASE_NAMED("test_setup", test_setup_wrapper),
TEST_CASE_NAMED("test_rss", test_rss_wrapper),
TEST_CASE_NAMED("test_rss_lazy", test_rss_lazy_wrapper),
- { NULL, NULL, NULL, NULL, NULL } /**< NULL terminate unit test array */
+
+ TEST_CASES_END()
}
};
return unit_test_suite_runner(&link_bonding_rssconf_test_suite);
}
-static struct test_command test_link_bonding_rssconf_cmd = {
- .command = "link_bonding_rssconf_autotest",
- .callback = test_link_bonding_rssconf,
-};
-
-REGISTER_TEST_COMMAND(test_link_bonding_rssconf_cmd);
+REGISTER_TEST_COMMAND(link_bonding_rssconf_autotest, test_link_bonding_rssconf);