return s;
}
+u8 *
+format_rdma_rss4 (u8 *s, va_list *args)
+{
+ const rdma_rss4_t *rss4 = va_arg (*args, const rdma_rss4_t *);
+ switch (*rss4)
+ {
+ case RDMA_RSS4_IP:
+ return format (s, "ipv4");
+ case RDMA_RSS4_IP_UDP:
+ return format (s, "ipv4-udp");
+ case RDMA_RSS4_AUTO: /* fallthrough */
+ case RDMA_RSS4_IP_TCP:
+ return format (s, "ipv4-tcp");
+ }
+ ASSERT (0);
+ return format (s, "unknown(%x)", *rss4);
+}
+
+u8 *
+format_rdma_rss6 (u8 *s, va_list *args)
+{
+ const rdma_rss6_t *rss6 = va_arg (*args, const rdma_rss6_t *);
+ switch (*rss6)
+ {
+ case RDMA_RSS6_IP:
+ return format (s, "ipv6");
+ case RDMA_RSS6_IP_UDP:
+ return format (s, "ipv6-udp");
+ case RDMA_RSS6_AUTO: /* fallthrough */
+ case RDMA_RSS6_IP_TCP:
+ return format (s, "ipv6-tcp");
+ }
+ ASSERT (0);
+ return format (s, "unknown(%x)", *rss6);
+}
+
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);
- s = format (s, "%Uflags: %U", format_white_space, indent,
+ 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\n", format_white_space, indent,
format_rdma_device_flags, rd);
+ s = format (s, "%Urss: %U %U", format_white_space, indent, format_rdma_rss4,
+ &rd->rss4, format_rdma_rss6, &rd->rss6);
if (rd->error)
s = format (s, "\n%Uerror %U", format_white_space, indent,
format_clib_error, rd->error);