X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2Fdevice%2Fformat.c;h=b3ccb35295505854c0951e86baba10fc3519d0eb;hb=d3c008d108aa2187d1a2afe2833b4de25ca2c2ab;hp=93eca524380c01d836dbd47689de6eb5719cca2c;hpb=bc66a9122f73b97ca1ae60f1df47b39c141be3ae;p=vpp.git diff --git a/src/plugins/dpdk/device/format.c b/src/plugins/dpdk/device/format.c index 93eca524380..b3ccb352955 100644 --- a/src/plugins/dpdk/device/format.c +++ b/src/plugins/dpdk/device/format.c @@ -143,6 +143,16 @@ foreach_dpdk_pkt_rx_offload_flag \ foreach_dpdk_pkt_tx_offload_flag +#define foreach_dpdk_log_level \ + _ (EMERG, "emergency") \ + _ (ALERT, "alert") \ + _ (CRIT, "critical") \ + _ (ERR, "error") \ + _ (WARNING, "warning") \ + _ (NOTICE, "notice") \ + _ (INFO, "info") \ + _ (DEBUG, "debug") + u8 * format_dpdk_device_name (u8 * s, va_list * args) { @@ -168,10 +178,18 @@ format_dpdk_device_name (u8 * s, va_list * args) device_name = "TenGigabitEthernet"; break; + case VNET_DPDK_PORT_TYPE_ETH_25G: + device_name = "TwentyFiveGigabitEthernet"; + break; + case VNET_DPDK_PORT_TYPE_ETH_40G: device_name = "FortyGigabitEthernet"; break; + case VNET_DPDK_PORT_TYPE_ETH_50G: + device_name = "FiftyGigabitEthernet"; + break; + case VNET_DPDK_PORT_TYPE_ETH_100G: device_name = "HundredGigabitEthernet"; break; @@ -183,10 +201,22 @@ format_dpdk_device_name (u8 * s, va_list * args) device_name = "EthernetSwitch"; break; + case VNET_DPDK_PORT_TYPE_ETH_VF: + device_name = "VirtualFunctionEthernet"; + break; + case VNET_DPDK_PORT_TYPE_AF_PACKET: rte_eth_dev_info_get (i, &dev_info); return format (s, "af_packet%d", dm->devices[i].port_id); + case VNET_DPDK_PORT_TYPE_VIRTIO_USER: + device_name = "VirtioUser"; + break; + + case VNET_DPDK_PORT_TYPE_VHOST_ETHER: + device_name = "VhostEthernet"; + break; + default: case VNET_DPDK_PORT_TYPE_UNKNOWN: device_name = "UnknownEthernet"; @@ -260,6 +290,10 @@ format_dpdk_device_type (u8 * s, va_list * args) dev_type = "Chelsio T4/T5"; break; + case VNET_DPDK_PMD_MLX4: + dev_type = "Mellanox ConnectX-3 Family"; + break; + case VNET_DPDK_PMD_MLX5: dev_type = "Mellanox ConnectX-4 Family"; break; @@ -280,6 +314,18 @@ format_dpdk_device_type (u8 * s, va_list * args) dev_type = "NXP DPAA2 Mac"; break; + case VNET_DPDK_PMD_VIRTIO_USER: + dev_type = "Virtio User"; + break; + + case VNET_DPDK_PMD_THUNDERX: + dev_type = "Cavium ThunderX"; + break; + + case VNET_DPDK_PMD_VHOST_ETHER: + dev_type = "VhostEthernet"; + break; + default: case VNET_DPDK_PMD_UNKNOWN: dev_type = "### UNKNOWN ###"; @@ -328,7 +374,7 @@ format_dpdk_rss_hf_name (u8 * s, va_list * args) { u64 bitmap = va_arg (*args, u64); int next_split = _line_len; - int indent = format_get_indent (s); + u32 indent = format_get_indent (s); if (!bitmap) return format (s, "none"); @@ -341,7 +387,7 @@ format_dpdk_rx_offload_caps (u8 * s, va_list * args) { u32 bitmap = va_arg (*args, u32); int next_split = _line_len; - int indent = format_get_indent (s); + u32 indent = format_get_indent (s); if (!bitmap) return format (s, "none"); @@ -354,7 +400,7 @@ format_dpdk_tx_offload_caps (u8 * s, va_list * args) { u32 bitmap = va_arg (*args, u32); int next_split = _line_len; - int indent = format_get_indent (s); + u32 indent = format_get_indent (s); if (!bitmap) return format (s, "none"); @@ -364,6 +410,20 @@ format_dpdk_tx_offload_caps (u8 * s, va_list * args) #undef _line_len #undef _ +u8 * +format_dpdk_device_errors (u8 * s, va_list * args) +{ + dpdk_device_t *xd = va_arg (*args, dpdk_device_t *); + clib_error_t *e; + u32 indent = format_get_indent (s); + + vec_foreach (e, xd->errors) + { + s = format (s, "%U%v\n", format_white_space, indent, e->what); + } + return s; +} + u8 * format_dpdk_device (u8 * s, va_list * args) { @@ -371,7 +431,7 @@ format_dpdk_device (u8 * s, va_list * args) int verbose = va_arg (*args, int); dpdk_main_t *dm = &dpdk_main; dpdk_device_t *xd = vec_elt_at_index (dm->devices, dev_instance); - uword indent = format_get_indent (s); + u32 indent = format_get_indent (s); f64 now = vlib_time_now (dm->vlib_main); struct rte_eth_dev_info di; @@ -499,6 +559,12 @@ format_dpdk_device (u8 * s, va_list * args) vec_free (xs); } + if (vec_len (xd->errors)) + { + s = format (s, "%UErrors:\n %U", format_white_space, indent, + format_dpdk_device_errors, xd); + } + return s; } @@ -511,7 +577,7 @@ format_dpdk_tx_dma_trace (u8 * s, va_list * va) dpdk_tx_dma_trace_t *t = va_arg (*va, dpdk_tx_dma_trace_t *); dpdk_main_t *dm = &dpdk_main; dpdk_device_t *xd = vec_elt_at_index (dm->devices, t->device_index); - uword indent = format_get_indent (s); + u32 indent = format_get_indent (s); vnet_sw_interface_t *sw = vnet_get_sw_interface (vnm, xd->vlib_sw_if_index); s = format (s, "%U tx queue %d", @@ -538,7 +604,7 @@ format_dpdk_rx_dma_trace (u8 * s, va_list * va) dpdk_main_t *dm = &dpdk_main; dpdk_device_t *xd = vec_elt_at_index (dm->devices, t->device_index); format_function_t *f; - uword indent = format_get_indent (s); + u32 indent = format_get_indent (s); vnet_sw_interface_t *sw = vnet_get_sw_interface (vnm, xd->vlib_sw_if_index); s = format (s, "%U rx queue %d", @@ -575,7 +641,7 @@ static inline u8 * format_dpdk_pkt_types (u8 * s, va_list * va) { u32 *pkt_types = va_arg (*va, u32 *); - uword indent __attribute__ ((unused)) = format_get_indent (s) + 2; + u32 indent __attribute__ ((unused)) = format_get_indent (s) + 2; if (!*pkt_types) return s; @@ -598,7 +664,7 @@ static inline u8 * format_dpdk_pkt_offload_flags (u8 * s, va_list * va) { u64 *ol_flags = va_arg (*va, u64 *); - uword indent = format_get_indent (s) + 2; + u32 indent = format_get_indent (s) + 2; if (!*ol_flags) return s; @@ -643,7 +709,7 @@ 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; + u32 indent = format_get_indent (s) + 2; s = format (s, "PKT MBUF: port %d, nb_segs %d, pkt_len %d" "\n%Ubuf_len %d, data_len %d, ol_flags 0x%x, data_off %d, phys_addr 0x%x" @@ -672,36 +738,6 @@ format_dpdk_rte_mbuf (u8 * s, va_list * va) return s; } -/* FIXME is this function used? */ -#if 0 -uword -unformat_socket_mem (unformat_input_t * input, va_list * va) -{ - uword **r = va_arg (*va, uword **); - int i = 0; - u32 mem; - - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) - { - if (unformat (input, ",")) - hash_set (*r, i, 1024); - else if (unformat (input, "%u,", &mem)) - hash_set (*r, i, mem); - else if (unformat (input, "%u", &mem)) - hash_set (*r, i, mem); - else - { - unformat_put_input (input); - goto done; - } - i++; - } - -done: - return 1; -} -#endif - clib_error_t * unformat_rss_fn (unformat_input_t * input, uword * rss_fn) { @@ -725,6 +761,20 @@ unformat_rss_fn (unformat_input_t * input, uword * rss_fn) return 0; } +uword +unformat_dpdk_log_level (unformat_input_t * input, va_list * args) +{ + u32 *r = va_arg (*args, u32 *); + + if (0); +#define _(v,s) else if (unformat (input, s)) *r = RTE_LOG_##v; + foreach_dpdk_log_level +#undef _ + else + return 0; + return 1; +} + clib_error_t * unformat_hqos (unformat_input_t * input, dpdk_device_config_hqos_t * hqos) {