X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=vnet%2Fvnet%2Fdevices%2Fdpdk%2Fformat.c;h=2d41221d247b524f6106e6ef4e6c981d619a605d;hb=dd522cbaf421de7b34887fb8c33981c4ebca9201;hp=aaafc90827c2e5cccebe07f4ff9587d319b8ad09;hpb=07515d7aaee6ab030501fc155bc8938f72f0da34;p=vpp.git diff --git a/vnet/vnet/devices/dpdk/format.c b/vnet/vnet/devices/dpdk/format.c index aaafc90827c..2d41221d247 100644 --- a/vnet/vnet/devices/dpdk/format.c +++ b/vnet/vnet/devices/dpdk/format.c @@ -24,45 +24,15 @@ #include "dpdk_priv.h" #include -#if RTE_VERSION >= RTE_VERSION_NUM(2, 2, 0, 0) #define foreach_dpdk_counter \ _ (tx_frames_ok, opackets) \ _ (tx_bytes_ok, obytes) \ _ (tx_errors, oerrors) \ - _ (tx_loopback_frames_ok, olbpackets) \ - _ (tx_loopback_bytes_ok, olbbytes) \ _ (rx_frames_ok, ipackets) \ _ (rx_bytes_ok, ibytes) \ _ (rx_errors, ierrors) \ _ (rx_missed, imissed) \ - _ (rx_multicast_frames_ok, imcasts) \ - _ (rx_no_bufs, rx_nombuf) \ - _ (rx_loopback_frames_ok, ilbpackets) \ - _ (rx_loopback_bytes_ok, ilbbytes) -#else -#define foreach_dpdk_counter \ - _ (tx_frames_ok, opackets) \ - _ (tx_bytes_ok, obytes) \ - _ (tx_errors, oerrors) \ - _ (tx_loopback_frames_ok, olbpackets) \ - _ (tx_loopback_bytes_ok, olbbytes) \ - _ (rx_frames_ok, ipackets) \ - _ (rx_bytes_ok, ibytes) \ - _ (rx_errors, ierrors) \ - _ (rx_missed, imissed) \ - _ (rx_bad_crc, ibadcrc) \ - _ (rx_bad_length, ibadlen) \ - _ (rx_multicast_frames_ok, imcasts) \ - _ (rx_no_bufs, rx_nombuf) \ - _ (rx_filter_match, fdirmatch) \ - _ (rx_filter_miss, fdirmiss) \ - _ (tx_pause_xon, tx_pause_xon) \ - _ (rx_pause_xon, rx_pause_xon) \ - _ (tx_pause_xoff, tx_pause_xoff) \ - _ (rx_pause_xoff, rx_pause_xoff) \ - _ (rx_loopback_frames_ok, ilbpackets) \ - _ (rx_loopback_bytes_ok, ilbbytes) -#endif + _ (rx_no_bufs, rx_nombuf) #define foreach_dpdk_q_counter \ _ (rx_frames_ok, q_ipackets) \ @@ -109,8 +79,6 @@ _(DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM, "outer-ipv4-cksum") \ _(DEV_TX_OFFLOAD_QINQ_INSERT, "qinq-insert") -#if RTE_VERSION >= RTE_VERSION_NUM(2, 1, 0, 0) - #define foreach_dpdk_pkt_rx_offload_flag \ _ (PKT_RX_VLAN_PKT, "RX packet is a 802.1q VLAN packet") \ _ (PKT_RX_RSS_HASH, "RX packet with RSS hash result") \ @@ -157,23 +125,6 @@ _ (INNER_L4, ICMP, "Inner ICMP packet") \ _ (INNER_L4, NONFRAG, "Inner non-fragmented IP packet") -#else -#define foreach_dpdk_pkt_rx_offload_flag \ - _ (PKT_RX_VLAN_PKT, "RX packet is a 802.1q VLAN packet") \ - _ (PKT_RX_RSS_HASH, "RX packet with RSS hash result") \ - _ (PKT_RX_FDIR, "RX packet with FDIR infos") \ - _ (PKT_RX_L4_CKSUM_BAD, "L4 cksum of RX pkt. is not OK") \ - _ (PKT_RX_IP_CKSUM_BAD, "IP cksum of RX pkt. is not OK") \ - _ (PKT_RX_IPV4_HDR, "RX packet with IPv4 header") \ - _ (PKT_RX_IPV4_HDR_EXT, "RX packet with extended IPv4 header") \ - _ (PKT_RX_IPV6_HDR, "RX packet with IPv6 header") \ - _ (PKT_RX_IPV6_HDR_EXT, "RX packet with extended IPv6 header") \ - _ (PKT_RX_IEEE1588_PTP, "RX IEEE1588 L2 Ethernet PT Packet") \ - _ (PKT_RX_IEEE1588_TMST, "RX IEEE1588 L2/L4 timestamped packet") - -#define foreach_dpdk_pkt_type /* Dummy */ -#endif /* RTE_VERSION */ - #define foreach_dpdk_pkt_tx_offload_flag \ _ (PKT_TX_VLAN_PKT, "TX packet is a 802.1q VLAN packet") \ _ (PKT_TX_IP_CKSUM, "IP cksum of TX pkt. computed by NIC") \ @@ -218,9 +169,11 @@ u8 * format_dpdk_device_name (u8 * s, va_list * args) return format(s, "kni%d", dm->devices[i].kni_port_id); } else #endif +#if DPDK_VHOST_USER if (dm->devices[i].dev_type == VNET_DPDK_DEV_VHOST_USER) { return format(s, "VirtualEthernet0/0/%d", dm->devices[i].vu_if_id); } +#endif switch (dm->devices[i].port_type) { case VNET_DPDK_PORT_TYPE_ETH_1G: @@ -242,12 +195,6 @@ u8 * format_dpdk_device_name (u8 * s, va_list * args) device_name = "EthernetSwitch"; break; - #ifdef NETMAP - case VNET_DPDK_PORT_TYPE_NETMAP: - rte_eth_dev_info_get(i, &dev_info); - return format(s, "netmap:%s", dev_info.driver_name); - #endif - case VNET_DPDK_PORT_TYPE_AF_PACKET: rte_eth_dev_info_get(i, &dev_info); return format(s, "af_packet%d", dm->devices[i].af_packet_port_id); @@ -263,22 +210,8 @@ u8 * format_dpdk_device_name (u8 * s, va_list * args) dev_info.pci_dev->addr.devid, dev_info.pci_dev->addr.function); - /* address Chelsio cards which share PCI address */ - if (dm->devices[i].pmd == VNET_DPDK_PMD_CXGBE) { - struct rte_eth_dev_info di; - - di.pci_dev = 0; - rte_eth_dev_info_get(i+1, &di); - if (di.pci_dev && memcmp(&dev_info.pci_dev->addr, &di.pci_dev->addr, - sizeof(struct rte_pci_addr)) == 0) - return format(ret, "/0"); - - di.pci_dev = 0; - rte_eth_dev_info_get(i-1, &di); - if (di.pci_dev && memcmp(&dev_info.pci_dev->addr, &di.pci_dev->addr, - sizeof(struct rte_pci_addr)) == 0) - return format(ret, "/1"); - } + if (dm->devices[i].interface_name_suffix) + return format (ret, "/%s", dm->devices[i].interface_name_suffix); return ret; } @@ -332,7 +265,6 @@ static u8 * format_dpdk_device_type (u8 * s, va_list * args) dev_type = "Intel 82599"; break; - case VNET_DPDK_PMD_VICE: case VNET_DPDK_PMD_ENIC: dev_type = "Cisco VIC"; break; @@ -345,12 +277,6 @@ static u8 * format_dpdk_device_type (u8 * s, va_list * args) dev_type = "VMware VMXNET3"; break; -#ifdef NETMAP - case VNET_DPDK_PMD_NETMAP: - dev_type = "Netmap/Vale"; - break; -#endif - case VNET_DPDK_PMD_AF_PACKET: dev_type = "af_packet"; break; @@ -474,9 +400,12 @@ u8 * format_dpdk_device (u8 * s, va_list * args) struct rte_pci_device * pci; struct rte_eth_rss_conf rss_conf; int vlan_off; + int retval; rss_conf.rss_key = 0; - rte_eth_dev_rss_hash_conf_get(xd->device_index, &rss_conf); + retval = rte_eth_dev_rss_hash_conf_get(xd->device_index, &rss_conf); + if (retval < 0) + clib_warning ("rte_eth_dev_rss_hash_conf_get returned %d", retval); pci = di.pci_dev; if (pci) @@ -534,7 +463,6 @@ u8 * format_dpdk_device (u8 * s, va_list * args) format_white_space, indent + 2, xd->cpu_socket); /* $$$ MIB counters */ - { #define _(N, V) \ if ((xd->stats.V - xd->last_cleared_stats.V) != 0) { \ @@ -550,21 +478,33 @@ u8 * format_dpdk_device (u8 * s, va_list * args) u8 * xs = 0; u32 i = 0; +#if RTE_VERSION < RTE_VERSION_NUM(16, 7, 0, 0) + struct rte_eth_xstats * xstat, * last_xstat; +#else + struct rte_eth_xstat * xstat, * last_xstat; + struct rte_eth_xstat_name * xstat_names = 0; + int len = rte_eth_xstats_get_names (xd->device_index, NULL, 0); + vec_validate (xstat_names, len - 1); + rte_eth_xstats_get_names (xd->device_index, xstat_names, len); +#endif ASSERT(vec_len(xd->xstats) == vec_len(xd->last_cleared_xstats)); vec_foreach_index(i, xd->xstats) { u64 delta = 0; - struct rte_eth_xstats* xstat = vec_elt_at_index(xd->xstats, i); - struct rte_eth_xstats* last_xstat = - vec_elt_at_index(xd->last_cleared_xstats, i); + xstat = vec_elt_at_index(xd->xstats, i); + last_xstat = vec_elt_at_index(xd->last_cleared_xstats, i); delta = xstat->value - last_xstat->value; if (verbose == 2 || (verbose && delta)) { /* format_c_identifier doesn't like c strings inside vector */ +#if RTE_VERSION < RTE_VERSION_NUM(16, 7, 0, 0) u8 * name = format(0,"%s", xstat->name); +#else + u8 * name = format(0,"%s", xstat_names[i].name); +#endif xs = format(xs, "\n%U%-38U%16Ld", format_white_space, indent + 4, format_c_identifier, name, delta); @@ -572,6 +512,11 @@ u8 * format_dpdk_device (u8 * s, va_list * args) } } +#if RTE_VERSION >= RTE_VERSION_NUM(16, 7, 0, 0) + vec_free (xstat_names); +#endif + +#if DPDK_VHOST_USER if (verbose && xd->dev_type == VNET_DPDK_DEV_VHOST_USER) { int i; for (i = 0; i < xd->rx_q_used * VIRTIO_QNUM; i++) { @@ -599,6 +544,7 @@ u8 * format_dpdk_device (u8 * s, va_list * args) } } } +#endif if (xs) { @@ -661,11 +607,11 @@ u8 * format_dpdk_rx_dma_trace (u8 * s, va_list * va) #ifdef RTE_LIBRTE_MBUF_EXT_RX_OLFLAGS s = format (s, "\n%U%U", format_white_space, indent, - format_dpdk_rx_rte_mbuf, &t->mb); + format_dpdk_rx_rte_mbuf, &t->mb, &t->data); #else s = format (s, "\n%U%U", format_white_space, indent, - format_dpdk_rte_mbuf, &t->mb); + format_dpdk_rte_mbuf, &t->mb, &t->data); #endif /* RTE_LIBRTE_MBUF_EXT_RX_OLFLAGS */ if (vm->trace_main.verbose) { @@ -733,9 +679,28 @@ static inline u8 * format_dpdk_pkt_offload_flags (u8 * s, va_list * va) return s; } +u8 * format_dpdk_rte_mbuf_vlan (u8 * s, va_list * va) +{ + ethernet_vlan_header_tv_t * vlan_hdr = va_arg (*va, ethernet_vlan_header_tv_t *); + + if (clib_net_to_host_u16(vlan_hdr->type) == ETHERNET_TYPE_DOT1AD) { + s = format (s, "%U 802.1q vlan ", + format_ethernet_vlan_tci, + clib_net_to_host_u16(vlan_hdr->priority_cfi_and_id)); + vlan_hdr++; + } + + s = format (s, "%U", + format_ethernet_vlan_tci, + clib_net_to_host_u16(vlan_hdr->priority_cfi_and_id)); + + return s; +} + u8 * format_dpdk_rte_mbuf (u8 * s, va_list * va) { struct rte_mbuf * mb = va_arg (*va, struct rte_mbuf *); + ethernet_header_t *eth_hdr = va_arg (*va, ethernet_header_t *); uword indent = format_get_indent (s) + 2; s = format (s, "PKT MBUF: port %d, nb_segs %d, pkt_len %d" @@ -751,9 +716,15 @@ u8 * format_dpdk_rte_mbuf (u8 * s, va_list * va) s = format (s, "\n%U%U", format_white_space, indent, format_dpdk_pkt_offload_flags, &mb->ol_flags); + if (mb->ol_flags & PKT_RX_VLAN_PKT) { + ethernet_vlan_header_tv_t * vlan_hdr = ((ethernet_vlan_header_tv_t *)&(eth_hdr->type)); + s = format (s, " %U", format_dpdk_rte_mbuf_vlan, vlan_hdr); + } + if (mb->packet_type) s = format (s, "\n%U%U", format_white_space, indent, format_dpdk_pkt_types, &mb->packet_type); + return s; } @@ -786,6 +757,7 @@ static inline u8 * format_dpdk_pkt_rx_offload_flags (u8 * s, va_list * va) u8 * format_dpdk_rx_rte_mbuf (u8 * s, va_list * va) { struct rte_mbuf * mb = va_arg (*va, struct rte_mbuf *); + ethernet_header_t *eth_hdr = va_arg (*args, ethernet_header_t *); uword indent = format_get_indent (s) + 2; /* @@ -805,9 +777,15 @@ u8 * format_dpdk_rx_rte_mbuf (u8 * s, va_list * va) s = format (s, "\n%U%U", format_white_space, indent, format_dpdk_pkt_rx_offload_flags, &mb->ol_flags); + if (mb->ol_flags & PKT_RX_VLAN_PKT) { + ethernet_vlan_header_tv_t * vlan_hdr = ((ethernet_vlan_header_tv_t *)&(eth_hdr->type)); + s = format (s, " %U", format_dpdk_rte_mbuf_vlan, vlan_hdr); + } + if (mb->packet_type) s = format (s, "\n%U%U", format_white_space, indent, format_dpdk_pkt_types, &mb->packet_type); + return s; } #endif /* RTE_LIBRTE_MBUF_EXT_RX_OLFLAGS */