samples: bpf: make the use of xdp samples consistent
authorDaniel T. Lee <danieltimlee@gmail.com>
Tue, 25 Jun 2019 00:55:36 +0000 (09:55 +0900)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 26 Jun 2019 13:39:15 +0000 (15:39 +0200)
Currently, each xdp samples are inconsistent in the use.
Most of the samples fetch the interface with it's name.
(ex. xdp1, xdp2skb, xdp_redirect_cpu, xdp_sample_pkts, etc.)

But some of the xdp samples are fetching the interface with
ifindex by command argument.

This commit enables xdp samples to fetch interface with it's name
without changing the original index interface fetching.
(<ifname|ifindex> fetching in the same way as xdp_sample_pkts_user.c does.)

Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
samples/bpf/xdp_adjust_tail_user.c
samples/bpf/xdp_redirect_map_user.c
samples/bpf/xdp_redirect_user.c
samples/bpf/xdp_tx_iptunnel_user.c

index 586ff751aba9ec35ef7551fab5c5f0e06ebe9a47..a3596b617c4ce836f8908efa4d3ad54d66093db9 100644 (file)
@@ -13,6 +13,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <net/if.h>
 #include <sys/resource.h>
 #include <arpa/inet.h>
 #include <netinet/ether.h>
@@ -69,7 +70,7 @@ static void usage(const char *cmd)
        printf("Start a XDP prog which send ICMP \"packet too big\" \n"
                "messages if ingress packet is bigger then MAX_SIZE bytes\n");
        printf("Usage: %s [...]\n", cmd);
-       printf("    -i <ifindex> Interface Index\n");
+       printf("    -i <ifname|ifindex> Interface\n");
        printf("    -T <stop-after-X-seconds> Default: 0 (forever)\n");
        printf("    -S use skb-mode\n");
        printf("    -N enforce native mode\n");
@@ -102,7 +103,9 @@ int main(int argc, char **argv)
 
                switch (opt) {
                case 'i':
-                       ifindex = atoi(optarg);
+                       ifindex = if_nametoindex(optarg);
+                       if (!ifindex)
+                               ifindex = atoi(optarg);
                        break;
                case 'T':
                        kill_after_s = atoi(optarg);
@@ -136,6 +139,11 @@ int main(int argc, char **argv)
                return 1;
        }
 
+       if (!ifindex) {
+               fprintf(stderr, "Invalid ifname\n");
+               return 1;
+       }
+
        snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
        prog_load_attr.file = filename;
 
index 15bb6f67f9c3472d8b0d8403335ed4f31062252b..f70ee33907fde0e845437d5403c7b8acc995b859 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
+#include <net/if.h>
 #include <unistd.h>
 #include <libgen.h>
 #include <sys/resource.h>
@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex)
 static void usage(const char *prog)
 {
        fprintf(stderr,
-               "usage: %s [OPTS] IFINDEX_IN IFINDEX_OUT\n\n"
+               "usage: %s [OPTS] <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n\n"
                "OPTS:\n"
                "    -S    use skb-mode\n"
                "    -N    enforce native mode\n"
@@ -127,7 +128,7 @@ int main(int argc, char **argv)
        }
 
        if (optind == argc) {
-               printf("usage: %s IFINDEX_IN IFINDEX_OUT\n", argv[0]);
+               printf("usage: %s <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n", argv[0]);
                return 1;
        }
 
@@ -136,8 +137,14 @@ int main(int argc, char **argv)
                return 1;
        }
 
-       ifindex_in = strtoul(argv[optind], NULL, 0);
-       ifindex_out = strtoul(argv[optind + 1], NULL, 0);
+       ifindex_in = if_nametoindex(argv[optind]);
+       if (!ifindex_in)
+               ifindex_in = strtoul(argv[optind], NULL, 0);
+
+       ifindex_out = if_nametoindex(argv[optind + 1]);
+       if (!ifindex_out)
+               ifindex_out = strtoul(argv[optind + 1], NULL, 0);
+
        printf("input: %d output: %d\n", ifindex_in, ifindex_out);
 
        snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
index ce71be1872057b1b8b7becb820c281066980b08a..39de06f3ec25c86398e89ee62bb087e8aba26ccd 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <string.h>
+#include <net/if.h>
 #include <unistd.h>
 #include <libgen.h>
 #include <sys/resource.h>
@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex)
 static void usage(const char *prog)
 {
        fprintf(stderr,
-               "usage: %s [OPTS] IFINDEX_IN IFINDEX_OUT\n\n"
+               "usage: %s [OPTS] <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n\n"
                "OPTS:\n"
                "    -S    use skb-mode\n"
                "    -N    enforce native mode\n"
@@ -128,7 +129,7 @@ int main(int argc, char **argv)
        }
 
        if (optind == argc) {
-               printf("usage: %s IFINDEX_IN IFINDEX_OUT\n", argv[0]);
+               printf("usage: %s <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n", argv[0]);
                return 1;
        }
 
@@ -137,8 +138,14 @@ int main(int argc, char **argv)
                return 1;
        }
 
-       ifindex_in = strtoul(argv[optind], NULL, 0);
-       ifindex_out = strtoul(argv[optind + 1], NULL, 0);
+       ifindex_in = if_nametoindex(argv[optind]);
+       if (!ifindex_in)
+               ifindex_in = strtoul(argv[optind], NULL, 0);
+
+       ifindex_out = if_nametoindex(argv[optind + 1]);
+       if (!ifindex_out)
+               ifindex_out = strtoul(argv[optind + 1], NULL, 0);
+
        printf("input: %d output: %d\n", ifindex_in, ifindex_out);
 
        snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
index 394896430712c6129eff2ad9773f3f6d3aaed1cb..dfb68582e24390a7c0587ae1828a50e5d9a7d7be 100644 (file)
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <net/if.h>
 #include <sys/resource.h>
 #include <arpa/inet.h>
 #include <netinet/ether.h>
@@ -83,7 +84,7 @@ static void usage(const char *cmd)
               "in an IPv4/v6 header and XDP_TX it out.  The dst <VIP:PORT>\n"
               "is used to select packets to encapsulate\n\n");
        printf("Usage: %s [...]\n", cmd);
-       printf("    -i <ifindex> Interface Index\n");
+       printf("    -i <ifname|ifindex> Interface\n");
        printf("    -a <vip-service-address> IPv4 or IPv6\n");
        printf("    -p <vip-service-port> A port range (e.g. 433-444) is also allowed\n");
        printf("    -s <source-ip> Used in the IPTunnel header\n");
@@ -181,7 +182,9 @@ int main(int argc, char **argv)
 
                switch (opt) {
                case 'i':
-                       ifindex = atoi(optarg);
+                       ifindex = if_nametoindex(optarg);
+                       if (!ifindex)
+                               ifindex = atoi(optarg);
                        break;
                case 'a':
                        vip.family = parse_ipstr(optarg, vip.daddr.v6);
@@ -253,6 +256,11 @@ int main(int argc, char **argv)
                return 1;
        }
 
+       if (!ifindex) {
+               fprintf(stderr, "Invalid ifname\n");
+               return 1;
+       }
+
        snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
        prog_load_attr.file = filename;