diff options
| author | Qiuwen Lu <[email protected]> | 2020-09-25 11:06:06 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2020-09-25 11:06:06 +0800 |
| commit | 2d13de4fb619981b007fe169825581e83a9981bc (patch) | |
| tree | 4069488be4a84d567792a33942ffd02c9e994468 | |
| parent | db786dde8c5c06974de6a270b07c095fc458bc54 (diff) | |
pdump增加区分捕获Rx或Tx方向报文的功能。v4.3.28-20200925
| -rw-r--r-- | tools/tcpdump/pdump.c | 110 |
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; } } |
