[RFC 2/2] test/transceiver: move module EEPROM decoding tests
Roman Khromenok
roma55592 at yandex.ru
Wed Oct 14 09:12:45 CEST 2026
Move the module EEPROM decoding tests to the transceiver library,
use rte_transceiver_decode() and the RTE_TRANSCEIVER_SFF_* types,
and rename the test from ethdev_module_eeprom_autotest
to transceiver_autotest.
Keep one test for rte_eth_module_eeprom_parse(), which is now
a wrapper of the library, with the RTE_ETH_MODULE_SFF_* types.
Signed-off-by: Roman Khromenok <roma55592 at yandex.ru>
---
MAINTAINERS | 1 +
app/test/meson.build | 2 +-
...dev_module_eeprom.c => test_transceiver.c} | 138 +++++++++++-------
3 files changed, 84 insertions(+), 57 deletions(-)
rename app/test/{test_ethdev_module_eeprom.c => test_transceiver.c} (82%)
diff --git a/MAINTAINERS b/MAINTAINERS
index 3150a4e794..0dd9c943b6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -451,6 +451,7 @@ Transceiver module EEPROM
M: Roman Khromenok <roma55592 at yandex.ru>
T: git://dpdk.org/next/dpdk-next-net
F: lib/transceiver/
+F: app/test/test_transceiver.c
F: doc/guides/prog_guide/transceiver_lib.rst
Flow API
diff --git a/app/test/meson.build b/app/test/meson.build
index 9805cf5bee..c2b6bb532f 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -78,7 +78,6 @@ source_file_deps = {
'test_errno.c': [],
'test_ethdev_api.c': ['ethdev'],
'test_ethdev_link.c': ['ethdev'],
- 'test_ethdev_module_eeprom.c': ['ethdev'],
'test_event_crypto_adapter.c': ['cryptodev', 'eventdev', 'bus_vdev'],
'test_event_dma_adapter.c': ['dmadev', 'eventdev', 'bus_vdev'],
'test_event_eth_rx_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'],
@@ -214,6 +213,7 @@ source_file_deps = {
'test_trace.c': [],
'test_trace_perf.c': [],
'test_trace_register.c': [],
+ 'test_transceiver.c': ['transceiver', 'ethdev'],
'test_vdev.c': ['kvargs', 'bus_vdev', 'net_null'],
'test_version.c': [],
}
diff --git a/app/test/test_ethdev_module_eeprom.c b/app/test/test_transceiver.c
similarity index 82%
rename from app/test/test_ethdev_module_eeprom.c
rename to app/test/test_transceiver.c
index 5f7e5db403..80e128b287 100644
--- a/app/test/test_ethdev_module_eeprom.c
+++ b/app/test/test_transceiver.c
@@ -10,6 +10,7 @@
#include <rte_common.h>
#include <rte_ethdev.h>
+#include <rte_transceiver.h>
#include <rte_string_fns.h>
#include "test.h"
@@ -55,7 +56,7 @@ static int
parse(uint32_t type, const uint8_t *data, uint32_t length)
{
memset(&fields, 0, sizeof(fields));
- return rte_eth_module_eeprom_parse(type, data, length, collect_field, &fields);
+ return rte_transceiver_decode(type, data, length, collect_field, &fields);
}
#define CHECK_FIELD(name, expected) do { \
@@ -100,9 +101,9 @@ put_u16(uint8_t *data, unsigned int offset, uint16_t value)
static void
fill_sfp(uint8_t *data)
{
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
- memset(data, 0, RTE_ETH_MODULE_SFF_8472_LEN);
+ memset(data, 0, RTE_TRANSCEIVER_SFF_8472_LEN);
data[0] = 0x03; /* identifier: SFP */
data[1] = 0x04; /* extended identifier */
data[2] = 0x07; /* connector: LC */
@@ -131,7 +132,7 @@ fill_sfp(uint8_t *data)
static void
fill_qsfp(uint8_t *data)
{
- memset(data, 0, RTE_ETH_MODULE_SFF_8636_LEN);
+ memset(data, 0, RTE_TRANSCEIVER_SFF_8636_LEN);
data[0] = 0x11; /* identifier: QSFP28 */
put_u16(data, 22, 0x3040); /* temperature: 48.25 C */
put_u16(data, 26, 32638); /* voltage: 3.2638 V */
@@ -169,10 +170,10 @@ check_sfp_identity(void)
static int
test_module_eeprom_sfp_8079(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
fill_sfp(data);
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8079, data, RTE_ETH_MODULE_SFF_8079_LEN),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8079, data, RTE_TRANSCEIVER_SFF_8079_LEN),
"Failed to parse SFF-8079 data");
TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8079 base information");
CHECK_NO_FIELD("Optical diagnostics support");
@@ -182,10 +183,10 @@ test_module_eeprom_sfp_8079(void)
static int
test_module_eeprom_sfp_8472(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
fill_sfp(data);
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse SFF-8472 data");
TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8472 base information");
CHECK_FIELD("Optical diagnostics support", "Yes");
@@ -200,16 +201,16 @@ test_module_eeprom_sfp_8472(void)
static int
test_module_eeprom_sfp_8472_short(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
const uint32_t lengths[] = {
- RTE_ETH_MODULE_SFF_8079_LEN,
- RTE_ETH_MODULE_SFF_8472_LEN - 1,
+ RTE_TRANSCEIVER_SFF_8079_LEN,
+ RTE_TRANSCEIVER_SFF_8472_LEN - 1,
};
unsigned int i;
fill_sfp(data);
for (i = 0; i < RTE_DIM(lengths); i++) {
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, lengths[i]),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, lengths[i]),
"Failed to parse SFF-8472 data of %u bytes", lengths[i]);
TEST_ASSERT_SUCCESS(check_sfp_identity(),
"Wrong SFF-8472 base information from %u bytes", lengths[i]);
@@ -223,10 +224,10 @@ test_module_eeprom_sfp_8472_short(void)
static int
test_module_eeprom_qsfp_8636(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN];
fill_qsfp(data);
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data");
CHECK_FIELD("Identifier", "0x11 (QSFP28)");
CHECK_FIELD("Connector", "0x07 (LC)");
@@ -249,14 +250,14 @@ test_module_eeprom_qsfp_8636(void)
static int
test_module_eeprom_qsfp_8636_thresholds(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8636_MAX_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8636_MAX_LEN];
memset(data, 0, sizeof(data));
/* paging is supported (flat memory bit is clear), page 03h is at 0x200 */
fill_qsfp(data);
put_u16(data, 0x200, 0x5000); /* temperature high alarm: 80 C */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data with page 03h");
CHECK_FIELD("Vendor name", "FINISAR CORP.");
CHECK_FIELD("Alarm/warning flags implemented", "Yes");
@@ -332,32 +333,32 @@ test_module_eeprom_qsfp_compliance(void)
static int
test_module_eeprom_sfp_8472_status(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
/* state is raised but the module does not advertise it */
fill_sfp(data);
a2[SFP_A2_STATUS] = 0x06;
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse SFF-8472 data");
CHECK_NO_FIELD("Rx loss of signal");
CHECK_NO_FIELD("Tx fault");
data[SFP_ENH_OPTIONS] |= 0x30; /* soft Tx fault and Rx LOS monitoring */
a2[SFP_A2_STATUS] = 0;
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse SFF-8472 data without status bits");
CHECK_FIELD("Rx loss of signal", "None");
CHECK_FIELD("Tx fault", "None");
a2[SFP_A2_STATUS] = 0x02; /* Rx LOS */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse SFF-8472 data with Rx LOS");
CHECK_FIELD("Rx loss of signal", "[ Yes ]");
CHECK_FIELD("Tx fault", "None");
a2[SFP_A2_STATUS] = 0x04; /* Tx fault */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse SFF-8472 data with Tx fault");
CHECK_FIELD("Rx loss of signal", "None");
CHECK_FIELD("Tx fault", "[ Yes ]");
@@ -384,7 +385,7 @@ fill_qsfp_signals(uint8_t *data)
static int
test_module_eeprom_qsfp_8636_signals_not_implemented(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN];
/* flags are raised but the module does not advertise them */
fill_qsfp(data);
@@ -392,7 +393,7 @@ test_module_eeprom_qsfp_8636_signals_not_implemented(void)
data[QSFP_FAULT_FLAGS] = 0xff;
data[QSFP_LOL_FLAGS] = 0xff;
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data");
/* Rx LOS has no implemented bit and is always reported */
CHECK_FIELD("Rx loss of signal", "[ Yes, Yes, Yes, Yes ]");
@@ -407,10 +408,10 @@ test_module_eeprom_qsfp_8636_signals_not_implemented(void)
static int
test_module_eeprom_qsfp_8636_signals(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN];
+ uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN];
fill_qsfp_signals(data);
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data without flags");
CHECK_FIELD("Rx loss of signal", "None");
CHECK_FIELD("Tx loss of signal", "None");
@@ -423,7 +424,7 @@ test_module_eeprom_qsfp_8636_signals(void)
data[QSFP_LOS_FLAGS] = 0x21; /* Rx lane 1, Tx lane 2 */
data[QSFP_FAULT_FLAGS] = 0x84; /* Tx fault lane 3, Tx adaptive eq lane 4 */
data[QSFP_LOL_FLAGS] = 0x18; /* Rx lane 4, Tx lane 1 */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data with flags");
CHECK_FIELD("Rx loss of signal", "[ Yes, No, No, No ]");
CHECK_FIELD("Tx loss of signal", "[ No, Yes, No, No ]");
@@ -433,7 +434,7 @@ test_module_eeprom_qsfp_8636_signals(void)
CHECK_FIELD("Tx adaptive eq fault", "[ No, No, No, Yes ]");
data[QSFP_LOS_FLAGS] = 0x0f; /* Rx on all lanes, no Tx */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)),
"Failed to parse SFF-8636 data with Rx LOS on all lanes");
CHECK_FIELD("Rx loss of signal", "[ Yes, Yes, Yes, Yes ]");
CHECK_FIELD("Tx loss of signal", "None");
@@ -444,9 +445,9 @@ static int
test_module_eeprom_sfp_8472_ext_cal_unaligned(void)
{
/* the SFF-8472 calibration floats must be readable from any address */
- uint8_t alignas(8) buf[RTE_ETH_MODULE_SFF_8472_LEN + 1];
+ uint8_t alignas(8) buf[RTE_TRANSCEIVER_SFF_8472_LEN + 1];
uint8_t *data = buf + 1;
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
const uint8_t two[4] = { 0x40, 0x00, 0x00, 0x00 }; /* 2.0f big endian */
fill_sfp(data);
@@ -459,7 +460,7 @@ test_module_eeprom_sfp_8472_ext_cal_unaligned(void)
a2[88] = 1; /* voltage slope */
memcpy(&a2[68], two, sizeof(two));
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, RTE_ETH_MODULE_SFF_8472_LEN),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, RTE_TRANSCEIVER_SFF_8472_LEN),
"Failed to parse externally calibrated SFF-8472 data");
CHECK_FIELD("Laser bias current", "39.580 mA");
CHECK_FIELD("Receiver signal average optical power", "1.3448 mW / 1.29 dBm");
@@ -478,8 +479,8 @@ put_be_float(uint8_t *data, unsigned int offset, uint32_t bits)
static int
test_module_eeprom_sfp_8472_rx_power_polynomial(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
fill_sfp(data);
/* diagnostics implemented, externally calibrated, average RX power */
@@ -496,7 +497,7 @@ test_module_eeprom_sfp_8472_rx_power_polynomial(void)
put_be_float(a2, 68, 0x3f800000); /* RX_PWR(1) = 1.0 */
put_be_float(a2, 72, 0); /* RX_PWR(0) = 0 */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse externally calibrated SFF-8472 data");
CHECK_FIELD("Receiver signal average optical power", "0.1560 mW / -8.07 dBm");
return TEST_SUCCESS;
@@ -506,7 +507,7 @@ test_module_eeprom_sfp_8472_rx_power_polynomial(void)
static void
fill_sfp_ext_cal(uint8_t *data)
{
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
fill_sfp(data);
/* diagnostics implemented, externally calibrated, average RX power */
@@ -521,8 +522,8 @@ fill_sfp_ext_cal(uint8_t *data)
static int
test_module_eeprom_sfp_8472_cal_saturate_max(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
fill_sfp_ext_cal(data);
/* results above the 16-bit range must saturate */
@@ -537,7 +538,7 @@ test_module_eeprom_sfp_8472_cal_saturate_max(void)
put_u16(a2, 104, 65535); /* raw RX power */
put_be_float(a2, 56, 0x3f800000); /* RX_PWR(4) = 1.0 */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse externally calibrated SFF-8472 data");
CHECK_FIELD("Laser bias current", "131.070 mA");
CHECK_FIELD("Laser output power", "6.5535 mW / 8.16 dBm");
@@ -550,8 +551,8 @@ test_module_eeprom_sfp_8472_cal_saturate_max(void)
static int
test_module_eeprom_sfp_8472_cal_saturate_min(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
fill_sfp_ext_cal(data);
/* results below the 16-bit range must saturate */
@@ -565,7 +566,7 @@ test_module_eeprom_sfp_8472_cal_saturate_min(void)
put_u16(a2, 90, -1000); /* voltage offset */
put_be_float(a2, 68, 0xbf800000); /* RX_PWR(1) = -1.0 */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse externally calibrated SFF-8472 data");
CHECK_FIELD("Laser bias current", "0.000 mA");
CHECK_FIELD("Laser output power", "0.0000 mW / -inf dBm");
@@ -578,8 +579,8 @@ test_module_eeprom_sfp_8472_cal_saturate_min(void)
static int
test_module_eeprom_sfp_8472_cal_round(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
- uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN;
+ uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN];
+ uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN;
fill_sfp_ext_cal(data);
/* calibrated values must be rounded to the nearest, not truncated */
@@ -588,7 +589,7 @@ test_module_eeprom_sfp_8472_cal_round(void)
put_u16(a2, 104, 1000); /* raw RX power */
put_be_float(a2, 68, 0x3f333333); /* RX_PWR(1) = 0.7, stored as 0.69999999 */
- TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)),
+ TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)),
"Failed to parse externally calibrated SFF-8472 data");
CHECK_FIELD("Laser bias current", "0.010 mA");
CHECK_FIELD("Receiver signal average optical power", "0.0700 mW / -11.55 dBm");
@@ -598,12 +599,12 @@ test_module_eeprom_sfp_8472_cal_round(void)
static int
test_module_eeprom_invalid(void)
{
- uint8_t data[RTE_ETH_MODULE_SFF_8636_MAX_LEN] = {0};
+ uint8_t data[RTE_TRANSCEIVER_SFF_8636_MAX_LEN] = {0};
const uint32_t types[] = {
- RTE_ETH_MODULE_SFF_8079,
- RTE_ETH_MODULE_SFF_8472,
- RTE_ETH_MODULE_SFF_8436,
- RTE_ETH_MODULE_SFF_8636,
+ RTE_TRANSCEIVER_SFF_8079,
+ RTE_TRANSCEIVER_SFF_8472,
+ RTE_TRANSCEIVER_SFF_8436,
+ RTE_TRANSCEIVER_SFF_8636,
};
unsigned int i;
int ret;
@@ -620,23 +621,47 @@ test_module_eeprom_invalid(void)
ret = parse(0, data, sizeof(data));
TEST_ASSERT_EQUAL(ret, -ENOTSUP, "Type 0: expected %d, got %d", -ENOTSUP, ret);
- ret = parse(RTE_ETH_MODULE_SFF_8436 + 1, data, sizeof(data));
+ ret = parse(RTE_TRANSCEIVER_SFF_8436 + 1, data, sizeof(data));
TEST_ASSERT_EQUAL(ret, -ENOTSUP, "Unknown type: expected %d, got %d", -ENOTSUP, ret);
TEST_ASSERT_EQUAL(fields.count, 0, "Unknown type: callback called %u times",
fields.count);
- ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8079, NULL,
- RTE_ETH_MODULE_SFF_8079_LEN, collect_field, &fields);
+ ret = rte_transceiver_decode(RTE_TRANSCEIVER_SFF_8079, NULL,
+ RTE_TRANSCEIVER_SFF_8079_LEN, collect_field, &fields);
TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL data: expected %d, got %d", -EINVAL, ret);
- ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8079, data,
- RTE_ETH_MODULE_SFF_8079_LEN, NULL, NULL);
+ ret = rte_transceiver_decode(RTE_TRANSCEIVER_SFF_8079, data,
+ RTE_TRANSCEIVER_SFF_8079_LEN, NULL, NULL);
TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL callback: expected %d, got %d", -EINVAL, ret);
return TEST_SUCCESS;
}
+/* rte_eth_module_eeprom_parse() is kept as a wrapper of the library */
+static int
+test_module_eeprom_ethdev_wrapper(void)
+{
+ uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN];
+ int ret;
+
+ fill_sfp(data);
+ memset(&fields, 0, sizeof(fields));
+ TEST_ASSERT_SUCCESS(rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, data,
+ sizeof(data), collect_field, &fields),
+ "Failed to parse SFF-8472 data with the ethdev API");
+ TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8472 base information");
+ CHECK_FIELD("Laser bias current", "39.580 mA");
+
+ ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, NULL,
+ sizeof(data), collect_field, &fields);
+ TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL data: expected %d, got %d", -EINVAL, ret);
+ ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, data,
+ sizeof(data), NULL, NULL);
+ TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL callback: expected %d, got %d", -EINVAL, ret);
+ return TEST_SUCCESS;
+}
+
static struct unit_test_suite module_eeprom_testsuite = {
- .suite_name = "ethdev module EEPROM decoding",
+ .suite_name = "transceiver module EEPROM decoding",
.setup = NULL,
.teardown = NULL,
.unit_test_cases = {
@@ -656,6 +681,7 @@ static struct unit_test_suite module_eeprom_testsuite = {
TEST_CASE(test_module_eeprom_qsfp_8636_signals_not_implemented),
TEST_CASE(test_module_eeprom_qsfp_8636_signals),
TEST_CASE(test_module_eeprom_invalid),
+ TEST_CASE(test_module_eeprom_ethdev_wrapper),
TEST_CASES_END()
}
};
@@ -666,4 +692,4 @@ test_module_eeprom(void)
return unit_test_suite_runner(&module_eeprom_testsuite);
}
-REGISTER_FAST_TEST(ethdev_module_eeprom_autotest, NOHUGE_OK, ASAN_OK, test_module_eeprom);
+REGISTER_FAST_TEST(transceiver_autotest, NOHUGE_OK, ASAN_OK, test_module_eeprom);
--
2.47.3
More information about the dev
mailing list