X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Ftestpmd.h;h=2149ecd93a20a346bdd95ef1f3194da6e8e648ba;hb=c8557ed434213fe11ecd867819823ea6865311d2;hp=42a597596fddec47f051b6945c5dd38b7d20a80b;hpb=1bb4a528c41f4af4847bd3d58cc2b2b9f1ec9a27;p=dpdk.git diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 42a597596f..2149ecd93a 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -9,11 +9,18 @@ #include #include +#ifdef RTE_LIB_GRO #include +#endif +#ifdef RTE_LIB_GSO #include +#endif #include #include #include +#ifdef RTE_HAS_JANSSON +#include +#endif #define RTE_PORT_ALL (~(portid_t)0x0) @@ -93,7 +100,7 @@ enum { * that are recorded for each forwarding stream. */ struct pkt_burst_stats { - unsigned int pkt_burst_spread[MAX_PKT_BURST]; + unsigned int pkt_burst_spread[MAX_PKT_BURST + 1]; }; /** Information for a given RSS type. */ @@ -140,10 +147,13 @@ struct fwd_stream { /**< received packets has bad outer l4 checksum */ uint64_t rx_bad_outer_ip_csum; /**< received packets having bad outer ip checksum */ +#ifdef RTE_LIB_GRO unsigned int gro_times; /**< GRO operation times */ +#endif uint64_t core_cycles; /**< used for RX and TX processing */ struct pkt_burst_stats rx_burst_stats; struct pkt_burst_stats tx_burst_stats; + struct fwd_lcore *lcore; /**< Lcore being scheduled. */ }; /** @@ -173,8 +183,6 @@ struct port_indirect_action { enum rte_flow_action_type type; /**< Action type. */ struct rte_flow_action_handle *handle; /**< Indirect action handle. */ enum age_action_context_type age_type; /**< Age action context type. */ - /** If true, the action applies to "transfer" flows, and vice versa */ - bool transfer; }; struct port_flow_tunnel { @@ -247,8 +255,6 @@ struct rte_port { /**< dynamic flags. */ uint64_t mbuf_dynf; const struct rte_eth_rxtx_callback *tx_set_dynf_cb[RTE_MAX_QUEUES_PER_PORT+1]; - /** Associated port which is supposed to handle "transfer" flows */ - portid_t flow_transfer_proxy; struct xstat_display_info xstats_info; }; @@ -260,9 +266,13 @@ struct rte_port { * CPU id. configuration table. */ struct fwd_lcore { +#ifdef RTE_LIB_GSO struct rte_gso_ctx gso_ctx; /**< GSO context */ +#endif struct rte_mempool *mbp; /**< The mbuf pool to use by this core */ +#ifdef RTE_LIB_GRO void *gro_ctx; /**< GRO context */ +#endif streamid_t stream_idx; /**< index of 1st stream in "fwd_streams" */ streamid_t stream_nb; /**< number of streams in "fwd_streams" */ lcoreid_t cpuid_idx; /**< index of logical core in CPU id table */ @@ -295,6 +305,27 @@ struct fwd_engine { packet_fwd_t packet_fwd; /**< Mandatory. */ }; +#define FLEX_ITEM_MAX_SAMPLES_NUM 16 +#define FLEX_ITEM_MAX_LINKS_NUM 16 +#define FLEX_MAX_FLOW_PATTERN_LENGTH 64 +#define FLEX_MAX_PARSERS_NUM 8 +#define FLEX_MAX_PATTERNS_NUM 64 +#define FLEX_PARSER_ERR ((struct flex_item *)-1) + +struct flex_item { + struct rte_flow_item_flex_conf flex_conf; + struct rte_flow_item_flex_handle *flex_handle; + uint32_t flex_id; +}; + +struct flex_pattern { + struct rte_flow_item_flex spec, mask; + uint8_t spec_pattern[FLEX_MAX_FLOW_PATTERN_LENGTH]; + uint8_t mask_pattern[FLEX_MAX_FLOW_PATTERN_LENGTH]; +}; +extern struct flex_item *flex_items[RTE_MAX_ETHPORTS][FLEX_MAX_PARSERS_NUM]; +extern struct flex_pattern flex_patterns[FLEX_MAX_PATTERNS_NUM]; + #define BURST_TX_WAIT_US 1 #define BURST_TX_RETRIES 64 @@ -314,11 +345,14 @@ extern struct fwd_engine five_tuple_swap_fwd_engine; #ifdef RTE_LIBRTE_IEEE1588 extern struct fwd_engine ieee1588_fwd_engine; #endif +extern struct fwd_engine shared_rxq_engine; extern struct fwd_engine * fwd_engines[]; /**< NULL terminated array. */ extern cmdline_parse_inst_t cmd_set_raw; extern cmdline_parse_inst_t cmd_show_set_raw; extern cmdline_parse_inst_t cmd_show_set_raw_all; +extern cmdline_parse_inst_t cmd_set_flex_is_pattern; +extern cmdline_parse_inst_t cmd_set_flex_spec_pattern; extern uint16_t mempool_flags; @@ -465,7 +499,7 @@ extern lcoreid_t bitrate_lcore_id; extern uint8_t bitrate_enabled; #endif -extern struct rte_fdir_conf fdir_conf; +extern struct rte_eth_fdir_conf fdir_conf; extern uint32_t max_rx_pkt_len; @@ -498,6 +532,8 @@ extern enum tx_pkt_split tx_pkt_split; extern uint8_t txonly_multi_flow; +extern uint32_t rxq_share; + extern uint16_t nb_pkt_per_burst; extern uint16_t nb_pkt_flowgen_clones; extern int nb_flows_flowgen; @@ -530,6 +566,7 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +#ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ GRO_DEFAULT_ITEM_NUM_PER_FLOW) @@ -543,13 +580,16 @@ struct gro_status { }; extern struct gro_status gro_ports[RTE_MAX_ETHPORTS]; extern uint8_t gro_flush_cycles; +#endif /* RTE_LIB_GRO */ +#ifdef RTE_LIB_GSO #define GSO_MAX_PKT_BURST 2048 struct gso_status { uint8_t enable; }; extern struct gso_status gso_ports[RTE_MAX_ETHPORTS]; extern uint16_t gso_max_segment_size; +#endif /* RTE_LIB_GSO */ /* VXLAN encap/decap parameters. */ struct vxlan_encap_conf { @@ -814,6 +854,7 @@ void port_summary_header_display(void); void rx_queue_infos_display(portid_t port_idi, uint16_t queue_id); void tx_queue_infos_display(portid_t port_idi, uint16_t queue_id); void fwd_lcores_config_display(void); +bool pkt_fwd_shared_rxq_check(void); void pkt_fwd_config_display(struct fwd_config *cfg); void rxtx_config_display(void); void fwd_config_setup(void); @@ -975,10 +1016,14 @@ void port_rss_hash_key_update(portid_t port_id, char rss_type[], uint8_t *hash_key, uint8_t hash_key_len); int rx_queue_id_is_invalid(queueid_t rxq_id); int tx_queue_id_is_invalid(queueid_t txq_id); +#ifdef RTE_LIB_GRO void setup_gro(const char *onoff, portid_t port_id); void setup_gro_flush_cycles(uint8_t cycles); void show_gro(portid_t port_id); +#endif +#ifdef RTE_LIB_GSO void setup_gso(const char *mode, portid_t port_id); +#endif int eth_dev_info_get_print_err(uint16_t port_id, struct rte_eth_dev_info *dev_info); int eth_dev_conf_get_print_err(uint16_t port_id, @@ -1045,7 +1090,16 @@ uint16_t tx_pkt_set_dynf(uint16_t port_id, __rte_unused uint16_t queue, __rte_unused void *user_param); void add_tx_dynf_callback(portid_t portid); void remove_tx_dynf_callback(portid_t portid); -int update_jumbo_frame_offload(portid_t portid, uint32_t max_rx_pktlen); +int update_mtu_from_frame_size(portid_t portid, uint32_t max_rx_pktlen); +int update_jumbo_frame_offload(portid_t portid); +void flex_item_create(portid_t port_id, uint16_t flex_id, const char *filename); +void flex_item_destroy(portid_t port_id, uint16_t flex_id); +void port_flex_item_flush(portid_t port_id); + +extern int flow_parse(const char *src, void *result, unsigned int size, + struct rte_flow_attr **attr, + struct rte_flow_item **pattern, + struct rte_flow_action **actions); /* * Work-around of a compilation error with ICC on invocations of the