diff options
| author | Eric Leblond <eric@regit.org> | 2018-01-30 15:55:04 -0500 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2018-02-02 20:53:48 -0500 |
| commit | b259c2ffd9b4812aa42a1d502eabd8c62a32d063 (patch) | |
| tree | 83671596b4c2f36d19f38f1312756022c037dbc5 /samples | |
| parent | 6061a3d6720600c976b877c3ac1402b3ef0a8a55 (diff) | |
samples/bpf: use bpf_set_link_xdp_fd
Use bpf_set_link_xdp_fd instead of set_link_xdp_fd to remove some
code duplication and benefit of netlink ext ack errors message.
Signed-off-by: Eric Leblond <eric@regit.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'samples')
| -rw-r--r-- | samples/bpf/bpf_load.c | 102 | ||||
| -rw-r--r-- | samples/bpf/bpf_load.h | 2 | ||||
| -rw-r--r-- | samples/bpf/xdp1_user.c | 4 | ||||
| -rw-r--r-- | samples/bpf/xdp_redirect_cpu_user.c | 6 | ||||
| -rw-r--r-- | samples/bpf/xdp_redirect_map_user.c | 8 | ||||
| -rw-r--r-- | samples/bpf/xdp_redirect_user.c | 8 | ||||
| -rw-r--r-- | samples/bpf/xdp_router_ipv4_user.c | 10 | ||||
| -rw-r--r-- | samples/bpf/xdp_rxq_info_user.c | 4 | ||||
| -rw-r--r-- | samples/bpf/xdp_tx_iptunnel_user.c | 6 |
9 files changed, 24 insertions, 126 deletions
diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c index 242631aa4ea2..69806d74fa53 100644 --- a/samples/bpf/bpf_load.c +++ b/samples/bpf/bpf_load.c | |||
| @@ -695,105 +695,3 @@ struct ksym *ksym_search(long key) | |||
| 695 | return &syms[0]; | 695 | return &syms[0]; |
| 696 | } | 696 | } |
| 697 | 697 | ||
| 698 | int set_link_xdp_fd(int ifindex, int fd, __u32 flags) | ||
| 699 | { | ||
| 700 | struct sockaddr_nl sa; | ||
| 701 | int sock, seq = 0, len, ret = -1; | ||
| 702 | char buf[4096]; | ||
| 703 | struct nlattr *nla, *nla_xdp; | ||
| 704 | struct { | ||
| 705 | struct nlmsghdr nh; | ||
| 706 | struct ifinfomsg ifinfo; | ||
| 707 | char attrbuf[64]; | ||
| 708 | } req; | ||
| 709 | struct nlmsghdr *nh; | ||
| 710 | struct nlmsgerr *err; | ||
| 711 | |||
| 712 | memset(&sa, 0, sizeof(sa)); | ||
| 713 | sa.nl_family = AF_NETLINK; | ||
| 714 | |||
| 715 | sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); | ||
| 716 | if (sock < 0) { | ||
| 717 | printf("open netlink socket: %s\n", strerror(errno)); | ||
| 718 | return -1; | ||
| 719 | } | ||
| 720 | |||
| 721 | if (bind(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0) { | ||
| 722 | printf("bind to netlink: %s\n", strerror(errno)); | ||
| 723 | goto cleanup; | ||
| 724 | } | ||
| 725 | |||
| 726 | memset(&req, 0, sizeof(req)); | ||
| 727 | req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); | ||
| 728 | req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; | ||
| 729 | req.nh.nlmsg_type = RTM_SETLINK; | ||
| 730 | req.nh.nlmsg_pid = 0; | ||
| 731 | req.nh.nlmsg_seq = ++seq; | ||
| 732 | req.ifinfo.ifi_family = AF_UNSPEC; | ||
| 733 | req.ifinfo.ifi_index = ifindex; | ||
| 734 | |||
| 735 | /* started nested attribute for XDP */ | ||
| 736 | nla = (struct nlattr *)(((char *)&req) | ||
| 737 | + NLMSG_ALIGN(req.nh.nlmsg_len)); | ||
| 738 | nla->nla_type = NLA_F_NESTED | 43/*IFLA_XDP*/; | ||
| 739 | nla->nla_len = NLA_HDRLEN; | ||
| 740 | |||
| 741 | /* add XDP fd */ | ||
| 742 | nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); | ||
| 743 | nla_xdp->nla_type = 1/*IFLA_XDP_FD*/; | ||
| 744 | nla_xdp->nla_len = NLA_HDRLEN + sizeof(int); | ||
| 745 | memcpy((char *)nla_xdp + NLA_HDRLEN, &fd, sizeof(fd)); | ||
| 746 | nla->nla_len += nla_xdp->nla_len; | ||
| 747 | |||
| 748 | /* if user passed in any flags, add those too */ | ||
| 749 | if (flags) { | ||
| 750 | nla_xdp = (struct nlattr *)((char *)nla + nla->nla_len); | ||
| 751 | nla_xdp->nla_type = 3/*IFLA_XDP_FLAGS*/; | ||
| 752 | nla_xdp->nla_len = NLA_HDRLEN + sizeof(flags); | ||
| 753 | memcpy((char *)nla_xdp + NLA_HDRLEN, &flags, sizeof(flags)); | ||
| 754 | nla->nla_len += nla_xdp->nla_len; | ||
| 755 | } | ||
| 756 | |||
| 757 | req.nh.nlmsg_len += NLA_ALIGN(nla->nla_len); | ||
| 758 | |||
| 759 | if (send(sock, &req, req.nh.nlmsg_len, 0) < 0) { | ||
| 760 | printf("send to netlink: %s\n", strerror(errno)); | ||
| 761 | goto cleanup; | ||
| 762 | } | ||
| 763 | |||
| 764 | len = recv(sock, buf, sizeof(buf), 0); | ||
| 765 | if (len < 0) { | ||
| 766 | printf("recv from netlink: %s\n", strerror(errno)); | ||
| 767 | goto cleanup; | ||
| 768 | } | ||
| 769 | |||
| 770 | for (nh = (struct nlmsghdr *)buf; NLMSG_OK(nh, len); | ||
| 771 | nh = NLMSG_NEXT(nh, len)) { | ||
| 772 | if (nh->nlmsg_pid != getpid()) { | ||
| 773 | printf("Wrong pid %d, expected %d\n", | ||
| 774 | nh->nlmsg_pid, getpid()); | ||
| 775 | goto cleanup; | ||
| 776 | } | ||
| 777 | if (nh->nlmsg_seq != seq) { | ||
| 778 | printf("Wrong seq %d, expected %d\n", | ||
| 779 | nh->nlmsg_seq, seq); | ||
| 780 | goto cleanup; | ||
| 781 | } | ||
| 782 | switch (nh->nlmsg_type) { | ||
| 783 | case NLMSG_ERROR: | ||
| 784 | err = (struct nlmsgerr *)NLMSG_DATA(nh); | ||
| 785 | if (!err->error) | ||
| 786 | continue; | ||
| 787 | printf("nlmsg error %s\n", strerror(-err->error)); | ||
| 788 | goto cleanup; | ||
| 789 | case NLMSG_DONE: | ||
| 790 | break; | ||
| 791 | } | ||
| 792 | } | ||
| 793 | |||
| 794 | ret = 0; | ||
| 795 | |||
| 796 | cleanup: | ||
| 797 | close(sock); | ||
| 798 | return ret; | ||
| 799 | } | ||
diff --git a/samples/bpf/bpf_load.h b/samples/bpf/bpf_load.h index 7d57a4248893..453c200b389b 100644 --- a/samples/bpf/bpf_load.h +++ b/samples/bpf/bpf_load.h | |||
| @@ -61,5 +61,5 @@ struct ksym { | |||
| 61 | 61 | ||
| 62 | int load_kallsyms(void); | 62 | int load_kallsyms(void); |
| 63 | struct ksym *ksym_search(long key); | 63 | struct ksym *ksym_search(long key); |
| 64 | int set_link_xdp_fd(int ifindex, int fd, __u32 flags); | 64 | int bpf_set_link_xdp_fd(int ifindex, int fd, __u32 flags); |
| 65 | #endif | 65 | #endif |
diff --git a/samples/bpf/xdp1_user.c b/samples/bpf/xdp1_user.c index fdaefe91801d..b901ee2b3336 100644 --- a/samples/bpf/xdp1_user.c +++ b/samples/bpf/xdp1_user.c | |||
| @@ -25,7 +25,7 @@ static __u32 xdp_flags; | |||
| 25 | 25 | ||
| 26 | static void int_exit(int sig) | 26 | static void int_exit(int sig) |
| 27 | { | 27 | { |
| 28 | set_link_xdp_fd(ifindex, -1, xdp_flags); | 28 | bpf_set_link_xdp_fd(ifindex, -1, xdp_flags); |
| 29 | exit(0); | 29 | exit(0); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| @@ -116,7 +116,7 @@ int main(int argc, char **argv) | |||
| 116 | signal(SIGINT, int_exit); | 116 | signal(SIGINT, int_exit); |
| 117 | signal(SIGTERM, int_exit); | 117 | signal(SIGTERM, int_exit); |
| 118 | 118 | ||
| 119 | if (set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { | 119 | if (bpf_set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { |
| 120 | printf("link set xdp fd failed\n"); | 120 | printf("link set xdp fd failed\n"); |
| 121 | return 1; | 121 | return 1; |
| 122 | } | 122 | } |
diff --git a/samples/bpf/xdp_redirect_cpu_user.c b/samples/bpf/xdp_redirect_cpu_user.c index 35fec9fecb57..23744a8aaf21 100644 --- a/samples/bpf/xdp_redirect_cpu_user.c +++ b/samples/bpf/xdp_redirect_cpu_user.c | |||
| @@ -26,7 +26,7 @@ static const char *__doc__ = | |||
| 26 | 26 | ||
| 27 | /* Wanted to get rid of bpf_load.h and fake-"libbpf.h" (and instead | 27 | /* Wanted to get rid of bpf_load.h and fake-"libbpf.h" (and instead |
| 28 | * use bpf/libbpf.h), but cannot as (currently) needed for XDP | 28 | * use bpf/libbpf.h), but cannot as (currently) needed for XDP |
| 29 | * attaching to a device via set_link_xdp_fd() | 29 | * attaching to a device via bpf_set_link_xdp_fd() |
| 30 | */ | 30 | */ |
| 31 | #include "libbpf.h" | 31 | #include "libbpf.h" |
| 32 | #include "bpf_load.h" | 32 | #include "bpf_load.h" |
| @@ -67,7 +67,7 @@ static void int_exit(int sig) | |||
| 67 | "Interrupted: Removing XDP program on ifindex:%d device:%s\n", | 67 | "Interrupted: Removing XDP program on ifindex:%d device:%s\n", |
| 68 | ifindex, ifname); | 68 | ifindex, ifname); |
| 69 | if (ifindex > -1) | 69 | if (ifindex > -1) |
| 70 | set_link_xdp_fd(ifindex, -1, xdp_flags); | 70 | bpf_set_link_xdp_fd(ifindex, -1, xdp_flags); |
| 71 | exit(EXIT_OK); | 71 | exit(EXIT_OK); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| @@ -682,7 +682,7 @@ int main(int argc, char **argv) | |||
| 682 | /* Remove XDP program when program is interrupted */ | 682 | /* Remove XDP program when program is interrupted */ |
| 683 | signal(SIGINT, int_exit); | 683 | signal(SIGINT, int_exit); |
| 684 | 684 | ||
| 685 | if (set_link_xdp_fd(ifindex, prog_fd[prog_num], xdp_flags) < 0) { | 685 | if (bpf_set_link_xdp_fd(ifindex, prog_fd[prog_num], xdp_flags) < 0) { |
| 686 | fprintf(stderr, "link set xdp fd failed\n"); | 686 | fprintf(stderr, "link set xdp fd failed\n"); |
| 687 | return EXIT_FAIL_XDP; | 687 | return EXIT_FAIL_XDP; |
| 688 | } | 688 | } |
diff --git a/samples/bpf/xdp_redirect_map_user.c b/samples/bpf/xdp_redirect_map_user.c index 978a532f0748..7eae07d7293e 100644 --- a/samples/bpf/xdp_redirect_map_user.c +++ b/samples/bpf/xdp_redirect_map_user.c | |||
| @@ -34,9 +34,9 @@ static __u32 xdp_flags; | |||
| 34 | 34 | ||
| 35 | static void int_exit(int sig) | 35 | static void int_exit(int sig) |
| 36 | { | 36 | { |
| 37 | set_link_xdp_fd(ifindex_in, -1, xdp_flags); | 37 | bpf_set_link_xdp_fd(ifindex_in, -1, xdp_flags); |
| 38 | if (ifindex_out_xdp_dummy_attached) | 38 | if (ifindex_out_xdp_dummy_attached) |
| 39 | set_link_xdp_fd(ifindex_out, -1, xdp_flags); | 39 | bpf_set_link_xdp_fd(ifindex_out, -1, xdp_flags); |
| 40 | exit(0); | 40 | exit(0); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| @@ -120,13 +120,13 @@ int main(int argc, char **argv) | |||
| 120 | return 1; | 120 | return 1; |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | if (set_link_xdp_fd(ifindex_in, prog_fd[0], xdp_flags) < 0) { | 123 | if (bpf_set_link_xdp_fd(ifindex_in, prog_fd[0], xdp_flags) < 0) { |
| 124 | printf("ERROR: link set xdp fd failed on %d\n", ifindex_in); | 124 | printf("ERROR: link set xdp fd failed on %d\n", ifindex_in); |
| 125 | return 1; | 125 | return 1; |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | /* Loading dummy XDP prog on out-device */ | 128 | /* Loading dummy XDP prog on out-device */ |
| 129 | if (set_link_xdp_fd(ifindex_out, prog_fd[1], | 129 | if (bpf_set_link_xdp_fd(ifindex_out, prog_fd[1], |
| 130 | (xdp_flags | XDP_FLAGS_UPDATE_IF_NOEXIST)) < 0) { | 130 | (xdp_flags | XDP_FLAGS_UPDATE_IF_NOEXIST)) < 0) { |
| 131 | printf("WARN: link set xdp fd failed on %d\n", ifindex_out); | 131 | printf("WARN: link set xdp fd failed on %d\n", ifindex_out); |
| 132 | ifindex_out_xdp_dummy_attached = false; | 132 | ifindex_out_xdp_dummy_attached = false; |
diff --git a/samples/bpf/xdp_redirect_user.c b/samples/bpf/xdp_redirect_user.c index 4475d837bf2c..d54e91eb6cbf 100644 --- a/samples/bpf/xdp_redirect_user.c +++ b/samples/bpf/xdp_redirect_user.c | |||
| @@ -33,9 +33,9 @@ static __u32 xdp_flags; | |||
| 33 | 33 | ||
| 34 | static void int_exit(int sig) | 34 | static void int_exit(int sig) |
| 35 | { | 35 | { |
| 36 | set_link_xdp_fd(ifindex_in, -1, xdp_flags); | 36 | bpf_set_link_xdp_fd(ifindex_in, -1, xdp_flags); |
| 37 | if (ifindex_out_xdp_dummy_attached) | 37 | if (ifindex_out_xdp_dummy_attached) |
| 38 | set_link_xdp_fd(ifindex_out, -1, xdp_flags); | 38 | bpf_set_link_xdp_fd(ifindex_out, -1, xdp_flags); |
| 39 | exit(0); | 39 | exit(0); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| @@ -114,13 +114,13 @@ int main(int argc, char **argv) | |||
| 114 | return 1; | 114 | return 1; |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | if (set_link_xdp_fd(ifindex_in, prog_fd[0], xdp_flags) < 0) { | 117 | if (bpf_set_link_xdp_fd(ifindex_in, prog_fd[0], xdp_flags) < 0) { |
| 118 | printf("ERROR: link set xdp fd failed on %d\n", ifindex_in); | 118 | printf("ERROR: link set xdp fd failed on %d\n", ifindex_in); |
| 119 | return 1; | 119 | return 1; |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | /* Loading dummy XDP prog on out-device */ | 122 | /* Loading dummy XDP prog on out-device */ |
| 123 | if (set_link_xdp_fd(ifindex_out, prog_fd[1], | 123 | if (bpf_set_link_xdp_fd(ifindex_out, prog_fd[1], |
| 124 | (xdp_flags | XDP_FLAGS_UPDATE_IF_NOEXIST)) < 0) { | 124 | (xdp_flags | XDP_FLAGS_UPDATE_IF_NOEXIST)) < 0) { |
| 125 | printf("WARN: link set xdp fd failed on %d\n", ifindex_out); | 125 | printf("WARN: link set xdp fd failed on %d\n", ifindex_out); |
| 126 | ifindex_out_xdp_dummy_attached = false; | 126 | ifindex_out_xdp_dummy_attached = false; |
diff --git a/samples/bpf/xdp_router_ipv4_user.c b/samples/bpf/xdp_router_ipv4_user.c index 916462112d55..6296741c1fbd 100644 --- a/samples/bpf/xdp_router_ipv4_user.c +++ b/samples/bpf/xdp_router_ipv4_user.c | |||
| @@ -37,7 +37,7 @@ static void int_exit(int sig) | |||
| 37 | int i = 0; | 37 | int i = 0; |
| 38 | 38 | ||
| 39 | for (i = 0; i < total_ifindex; i++) | 39 | for (i = 0; i < total_ifindex; i++) |
| 40 | set_link_xdp_fd(ifindex_list[i], -1, flags); | 40 | bpf_set_link_xdp_fd(ifindex_list[i], -1, flags); |
| 41 | exit(0); | 41 | exit(0); |
| 42 | } | 42 | } |
| 43 | 43 | ||
| @@ -49,7 +49,7 @@ static void close_and_exit(int sig) | |||
| 49 | close(sock_arp); | 49 | close(sock_arp); |
| 50 | 50 | ||
| 51 | for (i = 0; i < total_ifindex; i++) | 51 | for (i = 0; i < total_ifindex; i++) |
| 52 | set_link_xdp_fd(ifindex_list[i], -1, flags); | 52 | bpf_set_link_xdp_fd(ifindex_list[i], -1, flags); |
| 53 | exit(0); | 53 | exit(0); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| @@ -183,7 +183,7 @@ static void read_route(struct nlmsghdr *nh, int nll) | |||
| 183 | int i = 0; | 183 | int i = 0; |
| 184 | 184 | ||
| 185 | for (i = 0; i < total_ifindex; i++) | 185 | for (i = 0; i < total_ifindex; i++) |
| 186 | set_link_xdp_fd(ifindex_list[i], -1, flags); | 186 | bpf_set_link_xdp_fd(ifindex_list[i], -1, flags); |
| 187 | exit(0); | 187 | exit(0); |
| 188 | } | 188 | } |
| 189 | assert(bpf_map_update_elem(map_fd[4], &route.iface, &route.iface, 0) == 0); | 189 | assert(bpf_map_update_elem(map_fd[4], &route.iface, &route.iface, 0) == 0); |
| @@ -633,12 +633,12 @@ int main(int ac, char **argv) | |||
| 633 | } | 633 | } |
| 634 | } | 634 | } |
| 635 | for (i = 0; i < total_ifindex; i++) { | 635 | for (i = 0; i < total_ifindex; i++) { |
| 636 | if (set_link_xdp_fd(ifindex_list[i], prog_fd[0], flags) < 0) { | 636 | if (bpf_set_link_xdp_fd(ifindex_list[i], prog_fd[0], flags) < 0) { |
| 637 | printf("link set xdp fd failed\n"); | 637 | printf("link set xdp fd failed\n"); |
| 638 | int recovery_index = i; | 638 | int recovery_index = i; |
| 639 | 639 | ||
| 640 | for (i = 0; i < recovery_index; i++) | 640 | for (i = 0; i < recovery_index; i++) |
| 641 | set_link_xdp_fd(ifindex_list[i], -1, flags); | 641 | bpf_set_link_xdp_fd(ifindex_list[i], -1, flags); |
| 642 | 642 | ||
| 643 | return 1; | 643 | return 1; |
| 644 | } | 644 | } |
diff --git a/samples/bpf/xdp_rxq_info_user.c b/samples/bpf/xdp_rxq_info_user.c index 32430e8b3a6a..478d95412de4 100644 --- a/samples/bpf/xdp_rxq_info_user.c +++ b/samples/bpf/xdp_rxq_info_user.c | |||
| @@ -56,7 +56,7 @@ static void int_exit(int sig) | |||
| 56 | "Interrupted: Removing XDP program on ifindex:%d device:%s\n", | 56 | "Interrupted: Removing XDP program on ifindex:%d device:%s\n", |
| 57 | ifindex, ifname); | 57 | ifindex, ifname); |
| 58 | if (ifindex > -1) | 58 | if (ifindex > -1) |
| 59 | set_link_xdp_fd(ifindex, -1, xdp_flags); | 59 | bpf_set_link_xdp_fd(ifindex, -1, xdp_flags); |
| 60 | exit(EXIT_OK); | 60 | exit(EXIT_OK); |
| 61 | } | 61 | } |
| 62 | 62 | ||
| @@ -521,7 +521,7 @@ int main(int argc, char **argv) | |||
| 521 | /* Remove XDP program when program is interrupted */ | 521 | /* Remove XDP program when program is interrupted */ |
| 522 | signal(SIGINT, int_exit); | 522 | signal(SIGINT, int_exit); |
| 523 | 523 | ||
| 524 | if (set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { | 524 | if (bpf_set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { |
| 525 | fprintf(stderr, "link set xdp fd failed\n"); | 525 | fprintf(stderr, "link set xdp fd failed\n"); |
| 526 | return EXIT_FAIL_XDP; | 526 | return EXIT_FAIL_XDP; |
| 527 | } | 527 | } |
diff --git a/samples/bpf/xdp_tx_iptunnel_user.c b/samples/bpf/xdp_tx_iptunnel_user.c index 715cd12eaca5..f0a787268a87 100644 --- a/samples/bpf/xdp_tx_iptunnel_user.c +++ b/samples/bpf/xdp_tx_iptunnel_user.c | |||
| @@ -30,7 +30,7 @@ static __u32 xdp_flags = 0; | |||
| 30 | static void int_exit(int sig) | 30 | static void int_exit(int sig) |
| 31 | { | 31 | { |
| 32 | if (ifindex > -1) | 32 | if (ifindex > -1) |
| 33 | set_link_xdp_fd(ifindex, -1, xdp_flags); | 33 | bpf_set_link_xdp_fd(ifindex, -1, xdp_flags); |
| 34 | exit(0); | 34 | exit(0); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| @@ -254,14 +254,14 @@ int main(int argc, char **argv) | |||
| 254 | } | 254 | } |
| 255 | } | 255 | } |
| 256 | 256 | ||
| 257 | if (set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { | 257 | if (bpf_set_link_xdp_fd(ifindex, prog_fd[0], xdp_flags) < 0) { |
| 258 | printf("link set xdp fd failed\n"); | 258 | printf("link set xdp fd failed\n"); |
| 259 | return 1; | 259 | return 1; |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | poll_stats(kill_after_s); | 262 | poll_stats(kill_after_s); |
| 263 | 263 | ||
| 264 | set_link_xdp_fd(ifindex, -1, xdp_flags); | 264 | bpf_set_link_xdp_fd(ifindex, -1, xdp_flags); |
| 265 | 265 | ||
| 266 | return 0; | 266 | return 0; |
| 267 | } | 267 | } |
