/* SPDX-License-Identifier: BSD-3-Clause * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved */ #include #include #include #include "test.h" static int32_t test_link_status_up_default(void) { int ret = 0; struct rte_eth_link link_status = { .link_speed = ETH_SPEED_NUM_2_5G, .link_status = ETH_LINK_UP, .link_autoneg = ETH_LINK_AUTONEG, .link_duplex = ETH_LINK_FULL_DUPLEX }; char text[RTE_ETH_LINK_MAX_STR_LEN]; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n"); printf("Default link up #1: %s\n", text); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 2.5 Gbps FDX Autoneg", text, strlen(text), "Invalid default link status string"); link_status.link_duplex = ETH_LINK_HALF_DUPLEX; link_status.link_autoneg = ETH_LINK_FIXED; link_status.link_speed = ETH_SPEED_NUM_10M, ret = rte_eth_link_to_str(text, sizeof(text), &link_status); printf("Default link up #2: %s\n", text); RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n"); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 10 Mbps HDX Fixed", text, strlen(text), "Invalid default link status " "string with HDX"); link_status.link_speed = ETH_SPEED_NUM_UNKNOWN; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); printf("Default link up #3: %s\n", text); RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n"); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at Unknown HDX Fixed", text, strlen(text), "Invalid default link status " "string with HDX"); link_status.link_speed = ETH_SPEED_NUM_NONE; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); printf("Default link up #3: %s\n", text); RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n"); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at None HDX Fixed", text, strlen(text), "Invalid default link status " "string with HDX"); /* test max str len */ link_status.link_speed = ETH_SPEED_NUM_200G; link_status.link_duplex = ETH_LINK_HALF_DUPLEX; link_status.link_autoneg = ETH_LINK_AUTONEG; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); printf("Default link up #4:len = %d, %s\n", ret, text); RTE_TEST_ASSERT(ret < RTE_ETH_LINK_MAX_STR_LEN, "String length exceeds max allowed value\n"); return TEST_SUCCESS; } static int32_t test_link_status_down_default(void) { int ret = 0; struct rte_eth_link link_status = { .link_speed = ETH_SPEED_NUM_2_5G, .link_status = ETH_LINK_DOWN, .link_autoneg = ETH_LINK_AUTONEG, .link_duplex = ETH_LINK_FULL_DUPLEX }; char text[RTE_ETH_LINK_MAX_STR_LEN]; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n"); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link down", text, strlen(text), "Invalid default link status string"); return TEST_SUCCESS; } static int32_t test_link_status_invalid(void) { int ret = 0; struct rte_eth_link link_status = { .link_speed = 55555, .link_status = ETH_LINK_UP, .link_autoneg = ETH_LINK_AUTONEG, .link_duplex = ETH_LINK_FULL_DUPLEX }; char text[RTE_ETH_LINK_MAX_STR_LEN]; ret = rte_eth_link_to_str(text, sizeof(text), &link_status); RTE_TEST_ASSERT(ret < RTE_ETH_LINK_MAX_STR_LEN, "Failed to format invalid string\n"); printf("invalid link up #1: len=%d %s\n", ret, text); TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at Invalid FDX Autoneg", text, strlen(text), "Incorrect invalid link status string"); return TEST_SUCCESS; } static int32_t test_link_speed_all_values(void) { const char *speed; uint32_t i; struct link_speed_t { const char *value; uint32_t link_speed; } speed_str_map[] = { { "None", ETH_SPEED_NUM_NONE }, { "10 Mbps", ETH_SPEED_NUM_10M }, { "100 Mbps", ETH_SPEED_NUM_100M }, { "1 Gbps", ETH_SPEED_NUM_1G }, { "2.5 Gbps", ETH_SPEED_NUM_2_5G }, { "5 Gbps", ETH_SPEED_NUM_5G }, { "10 Gbps", ETH_SPEED_NUM_10G }, { "20 Gbps", ETH_SPEED_NUM_20G }, { "25 Gbps", ETH_SPEED_NUM_25G }, { "40 Gbps", ETH_SPEED_NUM_40G }, { "50 Gbps", ETH_SPEED_NUM_50G }, { "56 Gbps", ETH_SPEED_NUM_56G }, { "100 Gbps", ETH_SPEED_NUM_100G }, { "200 Gbps", ETH_SPEED_NUM_200G }, { "Unknown", ETH_SPEED_NUM_UNKNOWN }, { "Invalid", 50505 } }; for (i = 0; i < sizeof(speed_str_map) / sizeof(struct link_speed_t); i++) { speed = rte_eth_link_speed_to_str(speed_str_map[i].link_speed); TEST_ASSERT_BUFFERS_ARE_EQUAL(speed_str_map[i].value, speed, strlen(speed_str_map[i].value), "Invalid link speed string"); } return TEST_SUCCESS; } static struct unit_test_suite link_status_testsuite = { .suite_name = "link status formatting", .setup = NULL, .teardown = NULL, .unit_test_cases = { TEST_CASE(test_link_status_up_default), TEST_CASE(test_link_status_down_default), TEST_CASE(test_link_speed_all_values), TEST_CASE(test_link_status_invalid), TEST_CASES_END() /**< NULL terminate unit test array */ } }; static int test_link_status(void) { rte_log_set_global_level(RTE_LOG_DEBUG); rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG); return unit_test_suite_runner(&link_status_testsuite); } REGISTER_TEST_COMMAND(ethdev_link_status, test_link_status);