From c45e190f70e0317b62eeec23ad92a80b81e0b384 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Mon, 24 Sep 2018 15:17:36 +0200 Subject: dpdk: show pluggable info in 'show hardware' module: id SFP/SFP+/SFP28, compatibility: 40g_active_cable vendor: Amphenol, part NDCCGF-I202 revision: C, serial: APF1711202351C, date code: 170318 cable length: 2m Change-Id: Ife35607b4f078f7b56737fe066ad4cbd247a7504 Signed-off-by: Damjan Marion --- src/plugins/dpdk/device/format.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/plugins/dpdk/device') diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c index eed7e2862d3..5cb03b85dab 100644 --- a/src/plugins/dpdk/device/format.c +++ b/src/plugins/dpdk/device/format.c @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -496,6 +497,30 @@ format_dpdk_device_errors (u8 * s, va_list * args) return s; } +static u8 * +format_dpdk_device_module_info (u8 * s, va_list * args) +{ + dpdk_device_t *xd = va_arg (*args, dpdk_device_t *); + struct rte_eth_dev_module_info mi = { 0 }; + struct rte_dev_eeprom_info ei = { 0 }; + + if (rte_eth_dev_get_module_info (xd->port_id, &mi) != 0) + return format (s, "unknown"); + + ei.length = mi.eeprom_len; + ei.data = clib_mem_alloc (mi.eeprom_len); + + if (rte_eth_dev_get_module_eeprom (xd->port_id, &ei) == 0) + { + s = format (s, "%U", format_sfp_eeprom, ei.data); + } + else + s = format (s, "eeprom read error"); + + clib_mem_free (ei.data); + return s; +} + static const char * ptr2sname (void *p) { @@ -567,6 +592,9 @@ format_dpdk_device (u8 * s, va_list * args) vec_free (s2); } + s = format (s, "%Umodule: %U\n", format_white_space, indent + 2, + format_dpdk_device_module_info, xd); + s = format (s, "%Umax rx packet len: %d\n", format_white_space, indent + 2, di.max_rx_pktlen); s = format (s, "%Upromiscuous: unicast %s all-multicast %s\n", -- cgit 1.2.3-korg