]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - samples/bpf/xdpsock_user.c
Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
[linux.git] / samples / bpf / xdpsock_user.c
index 4914788b67274b51e161da8c403a2907e842107c..57ecadc5840397a3118abcdce41ced7ec8892ab2 100644 (file)
@@ -118,7 +118,6 @@ struct xdpsock {
        unsigned long prev_tx_npkts;
 };
 
-#define MAX_SOCKS 4
 static int num_socks;
 struct xdpsock *xsks[MAX_SOCKS];
 
@@ -596,7 +595,7 @@ static void dump_stats(void)
 
        prev_time = now;
 
-       for (i = 0; i < num_socks; i++) {
+       for (i = 0; i < num_socks && xsks[i]; i++) {
                char *fmt = "%-15s %'-11.0f %'-11lu\n";
                double rx_pps, tx_pps;
 
@@ -649,6 +648,8 @@ static struct option long_options[] = {
        {"xdp-skb", no_argument, 0, 'S'},
        {"xdp-native", no_argument, 0, 'N'},
        {"interval", required_argument, 0, 'n'},
+       {"zero-copy", no_argument, 0, 'z'},
+       {"copy", no_argument, 0, 'c'},
        {0, 0, 0, 0}
 };
 
@@ -667,6 +668,8 @@ static void usage(const char *prog)
                "  -S, --xdp-skb=n      Use XDP skb-mod\n"
                "  -N, --xdp-native=n   Enfore XDP native mode\n"
                "  -n, --interval=n     Specify statistics update interval (default 1 sec).\n"
+               "  -z, --zero-copy      Force zero-copy mode.\n"
+               "  -c, --copy           Force copy mode.\n"
                "\n";
        fprintf(stderr, str, prog);
        exit(EXIT_FAILURE);
@@ -679,7 +682,7 @@ static void parse_command_line(int argc, char **argv)
        opterr = 0;
 
        for (;;) {
-               c = getopt_long(argc, argv, "rtli:q:psSNn:", long_options,
+               c = getopt_long(argc, argv, "rtli:q:psSNn:cz", long_options,
                                &option_index);
                if (c == -1)
                        break;
@@ -716,6 +719,12 @@ static void parse_command_line(int argc, char **argv)
                case 'n':
                        opt_interval = atoi(optarg);
                        break;
+               case 'z':
+                       opt_xdp_bind_flags |= XDP_ZEROCOPY;
+                       break;
+               case 'c':
+                       opt_xdp_bind_flags |= XDP_COPY;
+                       break;
                default:
                        usage(basename(argv[0]));
                }