[v4,2/3] app/testpmd: add packet dump callback functions
Checks
Commit Message
add new rx/tx callback functions to be used for dumping the packets.
Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
---
app/test-pmd/config.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++
app/test-pmd/testpmd.h | 15 +++++++++++
app/test-pmd/util.c | 17 +++++++++++++
3 files changed, 99 insertions(+)
Comments
> -----Original Message-----
> From: Raslan Darawsheh [mailto:rasland@mellanox.com]
> Sent: Sunday, October 7, 2018 8:38 AM
> To: Wu, Jingjing <jingjing.wu@intel.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>; dev@dpdk.org; Shahaf Shuler
> <shahafs@mellanox.com>; Raslan Darawsheh <rasland@mellanox.com>;
> Xueming(Steven) Li <xuemingl@mellanox.com>; Ori Kam
> <orika@mellanox.com>; jerin.jacob@caviumnetworks.com;
> david.marchand@6wind.com; Iremonger, Bernard
> <bernard.iremonger@intel.com>
> Subject: [PATCH v4 2/3] app/testpmd: add packet dump callback functions
>
> add new rx/tx callback functions to be used for dumping the packets.
>
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
On 10/7/2018 8:38 AM, Raslan Darawsheh wrote:
> add new rx/tx callback functions to be used for dumping the packets.
>
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
<...>
> +uint16_t
> +dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
> + uint16_t nb_pkts, __rte_unused uint16_t max_pkts,
> + __rte_unused void *user_param)
> +{
> + dump_pkt_burst(port_id, queue, pkts, nb_pkts, 1);
You can add an enum or define to clarify what last param 0/1 is.
> + return nb_pkts;
> +}
> +
> +uint16_t
> +dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
> + uint16_t nb_pkts, __rte_unused void *user_param)
> +{
> + dump_pkt_burst(port_id, queue, pkts, nb_pkts, 0);
> + return nb_pkts;
> +}
>
Hi Ferruh,
This is a good point I'll fix it and send a new version for it.
Kindest regards,
Raslan Darawsheh
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> Sent: Thursday, October 11, 2018 5:58 PM
> To: Raslan Darawsheh <rasland@mellanox.com>; jingjing.wu@intel.com
> Cc: Thomas Monjalon <thomas@monjalon.net>; dev@dpdk.org; Shahaf
> Shuler <shahafs@mellanox.com>; Xueming(Steven) Li
> <xuemingl@mellanox.com>; Ori Kam <orika@mellanox.com>;
> jerin.jacob@caviumnetworks.com; david.marchand@6wind.com;
> bernard.iremonger@intel.com
> Subject: Re: [dpdk-dev] [PATCH v4 2/3] app/testpmd: add packet dump
> callback functions
>
> On 10/7/2018 8:38 AM, Raslan Darawsheh wrote:
> > add new rx/tx callback functions to be used for dumping the packets.
> >
> > Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
>
> <...>
>
> > +uint16_t
> > +dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
> > + uint16_t nb_pkts, __rte_unused uint16_t max_pkts,
> > + __rte_unused void *user_param)
> > +{
> > + dump_pkt_burst(port_id, queue, pkts, nb_pkts, 1);
>
> You can add an enum or define to clarify what last param 0/1 is.
>
> > + return nb_pkts;
> > +}
> > +
> > +uint16_t
> > +dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
> > + uint16_t nb_pkts, __rte_unused void *user_param) {
> > + dump_pkt_burst(port_id, queue, pkts, nb_pkts, 0);
> > + return nb_pkts;
> > +}
> >
@@ -2896,6 +2896,73 @@ set_pkt_forwarding_mode(const char *fwd_mode_name)
}
void
+add_rx_dump_callbacks(portid_t portid)
+{
+ struct rte_eth_dev_info dev_info;
+ uint16_t queue;
+
+ if (port_id_is_invalid(portid, ENABLED_WARN))
+ return;
+
+ rte_eth_dev_info_get(portid, &dev_info);
+ for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
+ if (!ports[portid].rx_dump_cb[queue])
+ ports[portid].rx_dump_cb[queue] =
+ rte_eth_add_rx_callback(portid, queue,
+ dump_rx_pkts, NULL);
+}
+
+void
+add_tx_dump_callbacks(portid_t portid)
+{
+ struct rte_eth_dev_info dev_info;
+ uint16_t queue;
+
+ if (port_id_is_invalid(portid, ENABLED_WARN))
+ return;
+ rte_eth_dev_info_get(portid, &dev_info);
+ for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
+ if (!ports[portid].tx_dump_cb[queue])
+ ports[portid].tx_dump_cb[queue] =
+ rte_eth_add_tx_callback(portid, queue,
+ dump_tx_pkts, NULL);
+}
+
+void
+remove_rx_dump_callbacks(portid_t portid)
+{
+ struct rte_eth_dev_info dev_info;
+ uint16_t queue;
+
+ if (port_id_is_invalid(portid, ENABLED_WARN))
+ return;
+ rte_eth_dev_info_get(portid, &dev_info);
+ for (queue = 0; queue < dev_info.nb_rx_queues; queue++)
+ if (ports[portid].rx_dump_cb[queue]) {
+ rte_eth_remove_rx_callback(portid, queue,
+ ports[portid].rx_dump_cb[queue]);
+ ports[portid].rx_dump_cb[queue] = NULL;
+ }
+}
+
+void
+remove_tx_dump_callbacks(portid_t portid)
+{
+ struct rte_eth_dev_info dev_info;
+ uint16_t queue;
+
+ if (port_id_is_invalid(portid, ENABLED_WARN))
+ return;
+ rte_eth_dev_info_get(portid, &dev_info);
+ for (queue = 0; queue < dev_info.nb_tx_queues; queue++)
+ if (ports[portid].tx_dump_cb[queue]) {
+ rte_eth_remove_tx_callback(portid, queue,
+ ports[portid].tx_dump_cb[queue]);
+ ports[portid].tx_dump_cb[queue] = NULL;
+ }
+}
+
+void
set_verbose_level(uint16_t vb_level)
{
printf("Change verbose level from %u to %u\n",
@@ -180,6 +180,8 @@ struct rte_port {
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
uint8_t slave_flag; /**< bonding slave port */
struct port_flow *flow_list; /**< Associated flows. */
+ const struct rte_eth_rxtx_callback *rx_dump_cb[MAX_QUEUE_ID+1];
+ const struct rte_eth_rxtx_callback *tx_dump_cb[MAX_QUEUE_ID+1];
#ifdef SOFTNIC
struct softnic_port softport; /**< softnic params */
#endif
@@ -743,6 +745,19 @@ int check_nb_rxq(queueid_t rxq);
queueid_t get_allowed_max_nb_txq(portid_t *pid);
int check_nb_txq(queueid_t txq);
+
+uint16_t dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
+ uint16_t nb_pkts, __rte_unused uint16_t max_pkts,
+ __rte_unused void *user_param);
+
+uint16_t dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
+ uint16_t nb_pkts, __rte_unused void *user_param);
+
+void add_rx_dump_callbacks(portid_t portid);
+void remove_rx_dump_callbacks(portid_t portid);
+void add_tx_dump_callbacks(portid_t portid);
+void remove_tx_dump_callbacks(portid_t portid);
+
/*
* Work-around of a compilation error with ICC on invocations of the
* rte_be_to_cpu_16() function.
@@ -148,3 +148,20 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
printf(" ol_flags: %s\n", buf);
}
}
+
+uint16_t
+dump_rx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
+ uint16_t nb_pkts, __rte_unused uint16_t max_pkts,
+ __rte_unused void *user_param)
+{
+ dump_pkt_burst(port_id, queue, pkts, nb_pkts, 1);
+ return nb_pkts;
+}
+
+uint16_t
+dump_tx_pkts(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[],
+ uint16_t nb_pkts, __rte_unused void *user_param)
+{
+ dump_pkt_burst(port_id, queue, pkts, nb_pkts, 0);
+ return nb_pkts;
+}