summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2020-09-25 11:06:06 +0800
committerQiuwen Lu <[email protected]>2020-09-25 11:06:06 +0800
commit2d13de4fb619981b007fe169825581e83a9981bc (patch)
tree4069488be4a84d567792a33942ffd02c9e994468
parentdb786dde8c5c06974de6a270b07c095fc458bc54 (diff)
pdump增加区分捕获Rx或Tx方向报文的功能。v4.3.28-20200925
-rw-r--r--tools/tcpdump/pdump.c110
1 files changed, 63 insertions, 47 deletions
diff --git a/tools/tcpdump/pdump.c b/tools/tcpdump/pdump.c
index c968115..8d1d932 100644
--- a/tools/tcpdump/pdump.c
+++ b/tools/tcpdump/pdump.c
@@ -61,9 +61,8 @@
#define PDUMP_PORT_ARG "port"
#define PDUMP_PCI_ARG "device_id"
#define PDUMP_QUEUE_ARG "queue"
-#define PDUMP_DIR_ARG "dir"
-#define PDUMP_RX_DEV_ARG "rx-dev"
-#define PDUMP_TX_DEV_ARG "tx-dev"
+#define PDUMP_RX_ARG "rx"
+#define PDUMP_TX_ARG "tx"
#define PDUMP_RING_SIZE_ARG "ring-size"
#define PDUMP_MSIZE_ARG "mbuf-size"
#define PDUMP_NUM_MBUFS_ARG "total-num-mbufs"
@@ -74,8 +73,6 @@
#define CMD_LINE_OPT_BPF_RULE "bpf-rule"
#define CMD_LINE_OPT_USE_PPI_HEADER "use-ppi-header"
-#define VDEV_PCAP "net_pcap_%s_%d,tx_pcap=%s"
-#define VDEV_IFACE "net_pcap_%s_%d,tx_iface=%s"
#define TX_STREAM_SIZE 64
#define MP_NAME "pdump_pool_%d"
@@ -123,9 +120,8 @@ const char *valid_pdump_arguments[] = {
PDUMP_PORT_ARG,
PDUMP_PCI_ARG,
PDUMP_QUEUE_ARG,
- PDUMP_DIR_ARG,
- PDUMP_RX_DEV_ARG,
- PDUMP_TX_DEV_ARG,
+ PDUMP_RX_ARG,
+ PDUMP_TX_ARG,
PDUMP_RING_SIZE_ARG,
PDUMP_MSIZE_ARG,
PDUMP_NUM_MBUFS_ARG,
@@ -208,24 +204,24 @@ static bool is_use_ppi_header = false;
static void
pdump_usage(const char *prgname)
{
- printf("usage: %s [EAL options] -- --pdump "
- "'(port=<port id> | device_id=<pci id or vdev name>),"
- "(queue=<queue_id>),"
- "(rx-dev=<iface or pcap file> |"
- " tx-dev=<iface or pcap file>,"
- "[ring-size=<ring size>default:16384],"
- "[mbuf-size=<mbuf data size>default:2176],"
- "[total-num-mbufs=<number of mbufs>default:65535]'\n"
- "[--server-socket-path=<server socket dir>"
- "default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
- "[--client-socket-path=<client socket dir>"
- "default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
- "[--dumpfile-path=<dumpfile>]"
- "default:dumpfile.pcap\n"
- "[--bpf-rule=<bpf-rule>]"
- "default:<None>\n"
- "[--use-ppi-header]",
- prgname);
+ fprintf(stderr, "usage: %s [EAL options] -- --pdump "
+ "'(port=<port id> | device_id=<pci id or vdev name>),"
+ "(queue=<queue_id>),"
+ "(rx-dev=<iface or pcap file> |"
+ " tx-dev=<iface or pcap file>,"
+ "[ring-size=<ring size>default:16384],"
+ "[mbuf-size=<mbuf data size>default:2176],"
+ "[total-num-mbufs=<number of mbufs>default:65535]'\n"
+ "[--server-socket-path=<server socket dir>"
+ "default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
+ "[--client-socket-path=<client socket dir>"
+ "default:/var/run/.dpdk/ (or) ~/.dpdk/]\n"
+ "[--dumpfile-path=<dumpfile>]"
+ "default:dumpfile.pcap\n"
+ "[--bpf-rule=<bpf-rule>]"
+ "default:<None>\n"
+ "[--use-ppi-header]",
+ prgname);
}
static int
@@ -270,16 +266,16 @@ parse_uint_value(const char *key, const char *value, void *extra_args)
if (errno != 0 || end[0] != 0 || t < v->min || t > v->max)
{
- printf("invalid value:\"%s\" for key:\"%s\", "
- "value must be >= %" PRIu64 " and <= %" PRIu64 "\n",
- value, key, v->min, v->max);
+ fprintf(stderr, "invalid value:\"%s\" for key:\"%s\", "
+ "value must be >= %" PRIu64 " and <= %" PRIu64 "\n",
+ value, key, v->min, v->max);
ret = -EINVAL;
}
if (!strcmp(key, PDUMP_RING_SIZE_ARG) && !POWEROF2(t))
{
- printf("invalid value:\"%s\" for key:\"%s\", "
- "value must be power of 2\n",
- value, key);
+ fprintf(stderr, "invalid value:\"%s\" for key:\"%s\", "
+ "value must be power of 2\n",
+ value, key);
ret = -EINVAL;
}
@@ -304,7 +300,7 @@ parse_pdump(const char *optarg)
kvlist = rte_kvargs_parse(optarg, valid_pdump_arguments);
if (kvlist == NULL)
{
- printf("--pdump=\"%s\": invalid argument passed\n", optarg);
+ fprintf(stderr, "--pdump=\"%s\": invalid argument passed\n", optarg);
return -1;
}
@@ -313,9 +309,9 @@ parse_pdump(const char *optarg)
cnt2 = rte_kvargs_count(kvlist, PDUMP_PCI_ARG);
if (!((cnt1 == 1 && cnt2 == 0) || (cnt1 == 0 && cnt2 == 1)))
{
- printf("--pdump=\"%s\": must have either port or "
- "device_id argument\n",
- optarg);
+ fprintf(stderr, "--pdump=\"%s\": must have either port or "
+ "device_id argument\n",
+ optarg);
ret = -1;
goto free_kvlist;
}
@@ -342,7 +338,7 @@ parse_pdump(const char *optarg)
cnt1 = rte_kvargs_count(kvlist, PDUMP_QUEUE_ARG);
if (cnt1 != 1)
{
- printf("--pdump=\"%s\": must have queue argument\n", optarg);
+ fprintf(stderr, "--pdump=\"%s\": must have queue argument\n", optarg);
ret = -1;
goto free_kvlist;
}
@@ -350,7 +346,27 @@ parse_pdump(const char *optarg)
if (ret < 0)
goto free_kvlist;
- pt->dir = RTE_PDUMP_FLAG_RXTX;
+ cnt1 = rte_kvargs_count(kvlist, PDUMP_RX_ARG);
+ cnt2 = rte_kvargs_count(kvlist, PDUMP_TX_ARG);
+
+ if ((cnt1 == 0 && cnt2 == 0) || (cnt1 == 1 && cnt2 == 1))
+ {
+ pt->dir = RTE_PDUMP_FLAG_RXTX;
+ }
+ else if (cnt1 == 1)
+ {
+ pt->dir = RTE_PDUMP_FLAG_RX;
+ }
+ else if (cnt2 == 1)
+ {
+ pt->dir = RTE_PDUMP_FLAG_TX;
+ }
+ else
+ {
+ fprintf(stderr, "--pdump=\"%s\": too many rx or tx options\n", optarg);
+ ret = -1;
+ goto free_kvlist;
+ }
/* optional */
/* ring_size parsing and validation */
@@ -512,14 +528,14 @@ print_pdump_stats(void)
for (i = 0; i < num_tuples; i++)
{
- printf("##### PDUMP DEBUG STATS #####\n");
+ fprintf(stderr, "##### PDUMP DEBUG STATS #####\n");
pt = &pdump_t[i];
- printf(" -packets dequeued: %" PRIu64 "\n",
- pt->stats.dequeue_pkts);
- printf(" -packets transmitted to vdev: %" PRIu64 "\n",
- pt->stats.tx_pkts);
- printf(" -packets freed: %" PRIu64 "\n",
- pt->stats.freed_pkts);
+ fprintf(stderr, " -packets dequeued: %" PRIu64 "\n",
+ pt->stats.dequeue_pkts);
+ fprintf(stderr, " -packets transmitted to vdev: %" PRIu64 "\n",
+ pt->stats.tx_pkts);
+ fprintf(stderr, " -packets freed: %" PRIu64 "\n",
+ pt->stats.freed_pkts);
}
}
@@ -717,8 +733,8 @@ signal_handler(int sig_num)
{
if (sig_num == SIGINT)
{
- printf("\n\nSignal %d received, preparing to exit...\n",
- sig_num);
+ fprintf(stderr, "\n\nSignal %d received, preparing to exit...\n",
+ sig_num);
quit_signal = 1;
}
}