rdma: print device info from PCI VPD in 'show hardware' output 43/26243/2
authorDamjan Marion <damarion@cisco.com>
Mon, 30 Mar 2020 14:16:06 +0000 (16:16 +0200)
committerDamjan Marion <dmarion@me.com>
Tue, 31 Mar 2020 10:07:15 +0000 (10:07 +0000)
Type: improvement
Change-Id: I275bbca17c5a0263b3e017b48aa6ccd8f59bc7c3
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/plugins/rdma/format.c

index 89a2a7c..84b6439 100644 (file)
@@ -75,13 +75,27 @@ format_rdma_bit_flag (u8 * s, va_list * args)
 u8 *
 format_rdma_device (u8 * s, va_list * args)
 {
+  vlib_main_t *vm = vlib_get_main ();
   u32 i = va_arg (*args, u32);
   rdma_main_t *rm = &rdma_main;
   rdma_device_t *rd = vec_elt_at_index (rm->devices, i);
+  vlib_pci_device_info_t *d;
   u32 indent = format_get_indent (s);
 
   s = format (s, "netdev %v pci-addr %U\n", rd->linux_ifname,
              format_vlib_pci_addr, &rd->pci->addr);
+  if ((d = vlib_pci_get_device_info (vm, &rd->pci->addr, 0)))
+    {
+      s = format (s, "%Uproduct name: %s\n", format_white_space, indent,
+                 d->product_name ? (char *) d->product_name : "");
+      s = format (s, "%Upart number: %U\n", format_white_space, indent,
+                 format_vlib_pci_vpd, d->vpd_r, "PN");
+      s = format (s, "%Urevision: %U\n", format_white_space, indent,
+                 format_vlib_pci_vpd, d->vpd_r, "EC");
+      s = format (s, "%Userial number: %U\n", format_white_space, indent,
+                 format_vlib_pci_vpd, d->vpd_r, "SN");
+      vlib_pci_free_device_info (d);
+    }
   s = format (s, "%Uflags: %U", format_white_space, indent,
              format_rdma_device_flags, rd);
   if (rd->error)