[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