X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=app%2Ftest-pmd%2Ftestpmd.h;h=e3995d24ab534eaee533947fdf713a66795077c6;hb=80da61198b6be66ab16964eb0944c79c0325c40e;hp=c314b30f2efc3f915da3cd0f366b2176c2590dc4;hpb=4b61b8774be951c7caeaba2edde27c42f2f4c58a;p=dpdk.git diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index c314b30f2e..e3995d24ab 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -11,8 +11,12 @@ #include #include #include +#include #include #include +#ifdef RTE_HAS_JANSSON +#include +#endif #define RTE_PORT_ALL (~(portid_t)0x0) @@ -172,6 +176,8 @@ 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 { @@ -194,6 +200,17 @@ struct tunnel_ops { uint32_t items:1; }; +/** Information for an extended statistics to show. */ +struct xstat_display_info { + /** Supported xstats IDs in the order of xstats_display */ + uint64_t *ids_supp; + size_t ids_supp_sz; + uint64_t *prev_values; + uint64_t *curr_values; + uint64_t prev_ns; + bool allocated; +}; + /** * The data structure associated with each port. */ @@ -233,6 +250,9 @@ 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; }; /** @@ -267,7 +287,7 @@ struct fwd_lcore { * Forwards packets unchanged on the same port. * Check that sent IEEE1588 PTP packets are timestamped by the hardware. */ -typedef void (*port_fwd_begin_t)(portid_t pi); +typedef int (*port_fwd_begin_t)(portid_t pi); typedef void (*port_fwd_end_t)(portid_t pi); typedef void (*packet_fwd_t)(struct fwd_stream *fs); @@ -278,6 +298,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 @@ -302,6 +343,8 @@ 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; @@ -425,7 +468,6 @@ extern uint64_t noisy_lkup_num_reads; extern uint64_t noisy_lkup_num_reads_writes; extern uint8_t dcb_config; -extern uint8_t dcb_test; extern uint32_t mbuf_data_size_n; extern uint16_t mbuf_data_size[MAX_SEGS_BUFFER_SPLIT]; @@ -434,6 +476,9 @@ extern uint32_t param_total_num_mbufs; extern uint16_t stats_period; +extern struct rte_eth_xstat_name *xstats_display; +extern unsigned int xstats_display_num; + extern uint16_t hairpin_mode; #ifdef RTE_LIB_LATENCYSTATS @@ -448,6 +493,8 @@ extern uint8_t bitrate_enabled; extern struct rte_fdir_conf fdir_conf; +extern uint32_t max_rx_pkt_len; + /* * Configuration of packet segments used to scatter received packets * if some of split features is configured. @@ -479,6 +526,7 @@ extern uint8_t txonly_multi_flow; extern uint16_t nb_pkt_per_burst; extern uint16_t nb_pkt_flowgen_clones; +extern int nb_flows_flowgen; extern uint16_t mb_mempool_cache; extern int8_t rx_pthresh; extern int8_t rx_hthresh; @@ -630,6 +678,17 @@ extern struct mplsoudp_decap_conf mplsoudp_decap_conf; extern enum rte_eth_rx_mq_mode rx_mq_mode; +extern struct rte_flow_action_conntrack conntrack_context; + +extern int proc_id; +extern unsigned int num_procs; + +static inline bool +is_proc_primary(void) +{ + return rte_eal_process_type() == RTE_PROC_PRIMARY; +} + static inline unsigned int lcore_num(void) { @@ -685,7 +744,7 @@ port_pci_reg_read(struct rte_port *port, uint32_t reg_off) uint32_t reg_v; if (!port->dev_info.device) { - printf("Invalid device\n"); + fprintf(stderr, "Invalid device\n"); return 0; } @@ -693,7 +752,7 @@ port_pci_reg_read(struct rte_port *port, uint32_t reg_off) if (bus && !strcmp(bus->name, "pci")) { pci_dev = RTE_DEV_TO_PCI(port->dev_info.device); } else { - printf("Not a PCI device\n"); + fprintf(stderr, "Not a PCI device\n"); return 0; } @@ -713,7 +772,7 @@ port_pci_reg_write(struct rte_port *port, uint32_t reg_off, uint32_t reg_v) void *reg_addr; if (!port->dev_info.device) { - printf("Invalid device\n"); + fprintf(stderr, "Invalid device\n"); return; } @@ -721,7 +780,7 @@ port_pci_reg_write(struct rte_port *port, uint32_t reg_off, uint32_t reg_v) if (bus && !strcmp(bus->name, "pci")) { pci_dev = RTE_DEV_TO_PCI(port->dev_info.device); } else { - printf("Not a PCI device\n"); + fprintf(stderr, "Not a PCI device\n"); return; } @@ -761,7 +820,7 @@ inc_tx_burst_stats(struct fwd_stream *fs, uint16_t nb_tx) } /* Prototypes */ -unsigned int parse_item_list(char* str, const char* item_name, +unsigned int parse_item_list(const char *str, const char *item_name, unsigned int max_items, unsigned int *parsed_items, int check_unique_values); void launch_args_parse(int argc, char** argv); @@ -838,6 +897,8 @@ void port_flow_tunnel_list(portid_t port_id); void port_flow_tunnel_destroy(portid_t port_id, uint32_t tunnel_id); void port_flow_tunnel_create(portid_t port_id, const struct tunnel_ops *ops); int port_flow_isolate(portid_t port_id, int set); +int port_meter_policy_add(portid_t port_id, uint32_t policy_id, + const struct rte_flow_action *actions); void rx_ring_desc_display(portid_t port_id, queueid_t rxq_id, uint16_t rxd_id); void tx_ring_desc_display(portid_t port_id, queueid_t txq_id, uint16_t txd_id); @@ -882,7 +943,7 @@ void show_tx_pkt_segments(void); void set_tx_pkt_times(unsigned int *tx_times); void show_tx_pkt_times(void); void set_tx_pkt_split(const char *name); -int parse_fec_mode(const char *name, enum rte_eth_fec_mode *mode); +int parse_fec_mode(const char *name, uint32_t *fec_capa); void show_fec_capability(uint32_t num, struct rte_eth_fec_capa *speed_fec_capa); void set_nb_pkt_per_burst(uint16_t pkt_burst); char *list_pkt_forwarding_modes(void); @@ -946,6 +1007,8 @@ void show_gro(portid_t port_id); void setup_gso(const char *mode, portid_t port_id); 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, + struct rte_eth_conf *dev_conf); void eth_set_promisc_mode(uint16_t port_id, int enable); void eth_set_allmulticast_mode(uint16_t port, int enable); int eth_link_get_nowait_print_err(uint16_t port_id, struct rte_eth_link *link); @@ -1008,7 +1071,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_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