X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Ftestpmd.c;h=3ed3523b791ea89061ca4860a1540622f0f59378;hb=575e0fd1a0b33b5b6c977f743fd4ba27b3523517;hp=f0061d99f9125179d6c9c891c9114dc3b55614a3;hpb=5e91aeef218c452c370aacf74265c7a42b67dffa;p=dpdk.git diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index f0061d99f9..3ed3523b79 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -137,7 +137,7 @@ uint8_t txring_numa[RTE_MAX_ETHPORTS]; * Must be instantiated with the ethernet addresses of peer traffic generator * ports. */ -struct ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; +struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; portid_t nb_peer_eth_addrs = 0; /* @@ -413,7 +413,8 @@ lcoreid_t latencystats_lcore_id = -1; * Ethernet device configuration. */ struct rte_eth_rxmode rx_mode = { - .max_rx_pkt_len = ETHER_MAX_LEN, /**< Default maximum frame length. */ + .max_rx_pkt_len = RTE_ETHER_MAX_LEN, + /**< Default maximum frame length. */ }; struct rte_eth_txmode tx_mode = { @@ -479,8 +480,8 @@ struct vxlan_encap_conf vxlan_encap_conf = { .vni = "\x00\x00\x00", .udp_src = 0, .udp_dst = RTE_BE16(4789), - .ipv4_src = IPv4(127, 0, 0, 1), - .ipv4_dst = IPv4(255, 255, 255, 255), + .ipv4_src = RTE_IPV4(127, 0, 0, 1), + .ipv4_dst = RTE_IPV4(255, 255, 255, 255), .ipv6_src = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x01", .ipv6_dst = "\x00\x00\x00\x00\x00\x00\x00\x00" @@ -496,8 +497,8 @@ struct nvgre_encap_conf nvgre_encap_conf = { .select_ipv4 = 1, .select_vlan = 0, .tni = "\x00\x00\x00", - .ipv4_src = IPv4(127, 0, 0, 1), - .ipv4_dst = IPv4(255, 255, 255, 255), + .ipv4_src = RTE_IPV4(127, 0, 0, 1), + .ipv4_dst = RTE_IPV4(255, 255, 255, 255), .ipv6_src = "\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x01", .ipv6_dst = "\x00\x00\x00\x00\x00\x00\x00\x00" @@ -526,7 +527,7 @@ static void dev_event_callback(const char *device_name, static int all_ports_started(void); struct gso_status gso_ports[RTE_MAX_ETHPORTS]; -uint16_t gso_max_segment_size = ETHER_MAX_LEN - ETHER_CRC_LEN; +uint16_t gso_max_segment_size = RTE_ETHER_MAX_LEN - RTE_ETHER_CRC_LEN; /* * Helper function to check if socket is already discovered. @@ -582,7 +583,7 @@ set_def_peer_eth_addrs(void) portid_t i; for (i = 0; i < RTE_MAX_ETHPORTS; i++) { - peer_eth_addrs[i].addr_bytes[0] = ETHER_LOCAL_ADMIN_ADDR; + peer_eth_addrs[i].addr_bytes[0] = RTE_ETHER_LOCAL_ADMIN_ADDR; peer_eth_addrs[i].addr_bytes[5] = i; } } @@ -1100,6 +1101,8 @@ init_config(void) uint8_t port_per_socket[RTE_MAX_NUMA_NODES]; struct rte_gro_param gro_param; uint32_t gso_types; + uint16_t data_size; + bool warning = 0; int k; memset(port_per_socket,0,RTE_MAX_NUMA_NODES); @@ -1167,8 +1170,28 @@ init_config(void) port->need_reconfig = 1; port->need_reconfig_queues = 1; port->tx_metadata = 0; + + /* Check for maximum number of segments per MTU. Accordingly + * update the mbuf data size. + */ + if (port->dev_info.rx_desc_lim.nb_mtu_seg_max != UINT16_MAX && + port->dev_info.rx_desc_lim.nb_mtu_seg_max != 0) { + data_size = rx_mode.max_rx_pkt_len / + port->dev_info.rx_desc_lim.nb_mtu_seg_max; + + if ((data_size + RTE_PKTMBUF_HEADROOM) > + mbuf_data_size) { + mbuf_data_size = data_size + + RTE_PKTMBUF_HEADROOM; + warning = 1; + } + } } + if (warning) + TESTPMD_LOG(WARNING, "Configured mbuf size %hu\n", + mbuf_data_size); + /* * Create pools of mbuf. * If NUMA support is disabled, create a single pool of mbuf in @@ -1223,8 +1246,8 @@ init_config(void) fwd_lcores[lc_id]->gso_ctx.direct_pool = mbp; fwd_lcores[lc_id]->gso_ctx.indirect_pool = mbp; fwd_lcores[lc_id]->gso_ctx.gso_types = gso_types; - fwd_lcores[lc_id]->gso_ctx.gso_size = ETHER_MAX_LEN - - ETHER_CRC_LEN; + fwd_lcores[lc_id]->gso_ctx.gso_size = RTE_ETHER_MAX_LEN - + RTE_ETHER_CRC_LEN; fwd_lcores[lc_id]->gso_ctx.flag = 0; } @@ -2018,7 +2041,7 @@ start_port(portid_t pid) portid_t pi; queueid_t qi; struct rte_port *port; - struct ether_addr mac_addr; + struct rte_ether_addr mac_addr; if (port_id_is_invalid(pid, ENABLED_WARN)) return 0; @@ -2360,7 +2383,7 @@ attach_port(char *identifier) return; } - if (rte_dev_probe(identifier) != 0) { + if (rte_dev_probe(identifier) < 0) { TESTPMD_LOG(ERR, "Failed to attach port %s\n", identifier); return; } @@ -2430,7 +2453,7 @@ detach_port_device(portid_t port_id) port_flow_flush(port_id); } - if (rte_dev_remove(dev) != 0) { + if (rte_dev_remove(dev) < 0) { TESTPMD_LOG(ERR, "Failed to detach device %s\n", dev->name); return; } @@ -2455,7 +2478,6 @@ detach_port_device(portid_t port_id) void pmd_test_exit(void) { - struct rte_device *device; portid_t pt_id; int ret; int i; @@ -2481,18 +2503,6 @@ pmd_test_exit(void) printf("\nShutting down port %d...\n", pt_id); fflush(stdout); close_port(pt_id); - - /* - * This is a workaround to fix a virtio-user issue that - * requires to call clean-up routine to remove existing - * socket. - * This workaround valid only for testpmd, needs a fix - * valid for all applications. - * TODO: Implement proper resource cleanup - */ - device = rte_eth_devices[pt_id].device; - if (device && !strcmp(device->driver->name, "net_virtio_user")) - detach_port_device(pt_id); } } @@ -2814,7 +2824,8 @@ rxtx_port_config(struct rte_port *port) for (qid = 0; qid < nb_rxq; qid++) { offloads = port->rx_conf[qid].offloads; port->rx_conf[qid] = port->dev_info.default_rxconf; - port->rx_conf[qid].offloads |= offloads; + if (offloads != 0) + port->rx_conf[qid].offloads = offloads; /* Check if any Rx parameters have been passed */ if (rx_pthresh != RTE_PMD_PARAM_UNSET) @@ -2838,7 +2849,8 @@ rxtx_port_config(struct rte_port *port) for (qid = 0; qid < nb_txq; qid++) { offloads = port->tx_conf[qid].offloads; port->tx_conf[qid] = port->dev_info.default_txconf; - port->tx_conf[qid].offloads |= offloads; + if (offloads != 0) + port->tx_conf[qid].offloads = offloads; /* Check if any Tx parameters have been passed */ if (tx_pthresh != RTE_PMD_PARAM_UNSET)