Commit 9e859e8f authored by Daniel T. Lee's avatar Daniel T. Lee Committed by Daniel Borkmann

samples: bpf: make the use of xdp samples consistent

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: default avatarDaniel T. Lee <danieltimlee@gmail.com>
Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
Acked-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Acked-by: default avatarSong Liu <songliubraving@fb.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 9db1ff0a
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <net/if.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/ether.h> #include <netinet/ether.h>
...@@ -69,7 +70,7 @@ static void usage(const char *cmd) ...@@ -69,7 +70,7 @@ static void usage(const char *cmd)
printf("Start a XDP prog which send ICMP \"packet too big\" \n" printf("Start a XDP prog which send ICMP \"packet too big\" \n"
"messages if ingress packet is bigger then MAX_SIZE bytes\n"); "messages if ingress packet is bigger then MAX_SIZE bytes\n");
printf("Usage: %s [...]\n", cmd); 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(" -T <stop-after-X-seconds> Default: 0 (forever)\n");
printf(" -S use skb-mode\n"); printf(" -S use skb-mode\n");
printf(" -N enforce native mode\n"); printf(" -N enforce native mode\n");
...@@ -102,7 +103,9 @@ int main(int argc, char **argv) ...@@ -102,7 +103,9 @@ int main(int argc, char **argv)
switch (opt) { switch (opt) {
case 'i': case 'i':
ifindex = atoi(optarg); ifindex = if_nametoindex(optarg);
if (!ifindex)
ifindex = atoi(optarg);
break; break;
case 'T': case 'T':
kill_after_s = atoi(optarg); kill_after_s = atoi(optarg);
...@@ -136,6 +139,11 @@ int main(int argc, char **argv) ...@@ -136,6 +139,11 @@ int main(int argc, char **argv)
return 1; return 1;
} }
if (!ifindex) {
fprintf(stderr, "Invalid ifname\n");
return 1;
}
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
prog_load_attr.file = filename; prog_load_attr.file = filename;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include <net/if.h>
#include <unistd.h> #include <unistd.h>
#include <libgen.h> #include <libgen.h>
#include <sys/resource.h> #include <sys/resource.h>
...@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex) ...@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex)
static void usage(const char *prog) static void usage(const char *prog)
{ {
fprintf(stderr, fprintf(stderr,
"usage: %s [OPTS] IFINDEX_IN IFINDEX_OUT\n\n" "usage: %s [OPTS] <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n\n"
"OPTS:\n" "OPTS:\n"
" -S use skb-mode\n" " -S use skb-mode\n"
" -N enforce native mode\n" " -N enforce native mode\n"
...@@ -127,7 +128,7 @@ int main(int argc, char **argv) ...@@ -127,7 +128,7 @@ int main(int argc, char **argv)
} }
if (optind == argc) { 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; return 1;
} }
...@@ -136,8 +137,14 @@ int main(int argc, char **argv) ...@@ -136,8 +137,14 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ifindex_in = strtoul(argv[optind], NULL, 0); ifindex_in = if_nametoindex(argv[optind]);
ifindex_out = strtoul(argv[optind + 1], NULL, 0); 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); printf("input: %d output: %d\n", ifindex_in, ifindex_out);
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include <net/if.h>
#include <unistd.h> #include <unistd.h>
#include <libgen.h> #include <libgen.h>
#include <sys/resource.h> #include <sys/resource.h>
...@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex) ...@@ -85,7 +86,7 @@ static void poll_stats(int interval, int ifindex)
static void usage(const char *prog) static void usage(const char *prog)
{ {
fprintf(stderr, fprintf(stderr,
"usage: %s [OPTS] IFINDEX_IN IFINDEX_OUT\n\n" "usage: %s [OPTS] <IFNAME|IFINDEX>_IN <IFNAME|IFINDEX>_OUT\n\n"
"OPTS:\n" "OPTS:\n"
" -S use skb-mode\n" " -S use skb-mode\n"
" -N enforce native mode\n" " -N enforce native mode\n"
...@@ -128,7 +129,7 @@ int main(int argc, char **argv) ...@@ -128,7 +129,7 @@ int main(int argc, char **argv)
} }
if (optind == argc) { 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; return 1;
} }
...@@ -137,8 +138,14 @@ int main(int argc, char **argv) ...@@ -137,8 +138,14 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ifindex_in = strtoul(argv[optind], NULL, 0); ifindex_in = if_nametoindex(argv[optind]);
ifindex_out = strtoul(argv[optind + 1], NULL, 0); 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); printf("input: %d output: %d\n", ifindex_in, ifindex_out);
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <net/if.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/ether.h> #include <netinet/ether.h>
...@@ -83,7 +84,7 @@ static void usage(const char *cmd) ...@@ -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" "in an IPv4/v6 header and XDP_TX it out. The dst <VIP:PORT>\n"
"is used to select packets to encapsulate\n\n"); "is used to select packets to encapsulate\n\n");
printf("Usage: %s [...]\n", cmd); 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(" -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(" -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"); printf(" -s <source-ip> Used in the IPTunnel header\n");
...@@ -181,7 +182,9 @@ int main(int argc, char **argv) ...@@ -181,7 +182,9 @@ int main(int argc, char **argv)
switch (opt) { switch (opt) {
case 'i': case 'i':
ifindex = atoi(optarg); ifindex = if_nametoindex(optarg);
if (!ifindex)
ifindex = atoi(optarg);
break; break;
case 'a': case 'a':
vip.family = parse_ipstr(optarg, vip.daddr.v6); vip.family = parse_ipstr(optarg, vip.daddr.v6);
...@@ -253,6 +256,11 @@ int main(int argc, char **argv) ...@@ -253,6 +256,11 @@ int main(int argc, char **argv)
return 1; return 1;
} }
if (!ifindex) {
fprintf(stderr, "Invalid ifname\n");
return 1;
}
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
prog_load_attr.file = filename; prog_load_attr.file = filename;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment