samples/bpf: add -c/--copy -z/--zero-copy flags to xdpsock
authorBjörn Töpel <bjorn.topel@intel.com>
Tue, 28 Aug 2018 12:44:35 +0000 (14:44 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 29 Aug 2018 19:25:53 +0000 (12:25 -0700)
The -c/--copy -z/--zero-copy flags enforces either copy or zero-copy
mode.

Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
samples/bpf/xdpsock_user.c

index 4914788..b390611 100644 (file)
@@ -649,6 +649,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 +669,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 +683,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 +720,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]));
                }