X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fflow_filtering%2Fmain.c;h=cc9e7e78081319c0bb529fba5391b6ef92a29125;hb=1bf6baac4ae06cb9a5914f8fab0e103a2436cd3d;hp=ce91e8a6fcf16f30ee7f79961e366b798203b72b;hpb=9a93446a0e8c7e95504ff0bfd26d139a8c1ef320;p=dpdk.git diff --git a/examples/flow_filtering/main.c b/examples/flow_filtering/main.c index ce91e8a6fc..cc9e7e7808 100644 --- a/examples/flow_filtering/main.c +++ b/examples/flow_filtering/main.c @@ -45,10 +45,10 @@ struct rte_flow *flow; #include "flow_blocks.c" static inline void -print_ether_addr(const char *what, struct ether_addr *eth_addr) +print_ether_addr(const char *what, struct rte_ether_addr *eth_addr) { - char buf[ETHER_ADDR_FMT_SIZE]; - ether_format_addr(buf, ETHER_ADDR_FMT_SIZE, eth_addr); + char buf[RTE_ETHER_ADDR_FMT_SIZE]; + rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, eth_addr); printf("%s%s", what, buf); } @@ -56,7 +56,7 @@ static void main_loop(void) { struct rte_mbuf *mbufs[32]; - struct ether_hdr *eth_hdr; + struct rte_ether_hdr *eth_hdr; struct rte_flow_error error; uint16_t nb_rx; uint16_t i; @@ -71,7 +71,7 @@ main_loop(void) struct rte_mbuf *m = mbufs[j]; eth_hdr = rte_pktmbuf_mtod(m, - struct ether_hdr *); + struct rte_ether_hdr *); print_ether_addr("src=", ð_hdr->s_addr); print_ether_addr(" - dst=", @@ -100,15 +100,19 @@ assert_link_status(void) { struct rte_eth_link link; uint8_t rep_cnt = MAX_REPEAT_TIMES; + int link_get_err = -EINVAL; memset(&link, 0, sizeof(link)); do { - rte_eth_link_get(port_id, &link); - if (link.link_status == ETH_LINK_UP) + link_get_err = rte_eth_link_get(port_id, &link); + if (link_get_err == 0 && link.link_status == ETH_LINK_UP) break; rte_delay_ms(CHECK_INTERVAL); } while (--rep_cnt); + if (link_get_err < 0) + rte_exit(EXIT_FAILURE, ":: error: link get is failing: %s\n", + rte_strerror(-link_get_err)); if (link.link_status == ETH_LINK_DOWN) rte_exit(EXIT_FAILURE, ":: error: link is still down\n"); } @@ -121,7 +125,6 @@ init_port(void) struct rte_eth_conf port_conf = { .rxmode = { .split_hdr_size = 0, - .offloads = DEV_RX_OFFLOAD_CRC_STRIP, }, .txmode = { .offloads = @@ -132,27 +135,18 @@ init_port(void) DEV_TX_OFFLOAD_SCTP_CKSUM | DEV_TX_OFFLOAD_TCP_TSO, }, - /* - * Initialize fdir_conf of rte_eth_conf. - * Fdir is used in flow filtering for I40e, - * so rte_flow rules involve some fdir - * configurations. In long term it's better - * that drivers don't require any fdir - * configuration for rte_flow, but we need to - * get this workaround so that sample app can - * run on I40e. - */ - .fdir_conf = { - .mode = RTE_FDIR_MODE_PERFECT, - .pballoc = RTE_FDIR_PBALLOC_64K, - .status = RTE_FDIR_REPORT_STATUS, - .drop_queue = 127, - }, }; struct rte_eth_txconf txq_conf; struct rte_eth_rxconf rxq_conf; struct rte_eth_dev_info dev_info; + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "Error during getting device (port %u) info: %s\n", + port_id, strerror(-ret)); + + port_conf.txmode.offloads &= dev_info.tx_offload_capa; printf(":: initializing port: %d\n", port_id); ret = rte_eth_dev_configure(port_id, nr_queues, nr_queues, &port_conf); @@ -162,10 +156,8 @@ init_port(void) ret, port_id); } - rte_eth_dev_info_get(port_id, &dev_info); rxq_conf = dev_info.default_rxconf; rxq_conf.offloads = port_conf.rxmode.offloads; - /* only set Rx queues: something we care only so far */ for (i = 0; i < nr_queues; i++) { ret = rte_eth_rx_queue_setup(port_id, i, 512, rte_eth_dev_socket_id(port_id), @@ -192,7 +184,12 @@ init_port(void) } } - rte_eth_promiscuous_enable(port_id); + ret = rte_eth_promiscuous_enable(port_id); + if (ret != 0) + rte_exit(EXIT_FAILURE, + ":: promiscuous mode enable failed: err=%s, port=%u\n", + rte_strerror(-ret), port_id); + ret = rte_eth_dev_start(port_id); if (ret < 0) { rte_exit(EXIT_FAILURE,