1 // SPDX-License-Identifier: GPL-2.0
2 #include <test_progs.h>
3 #include <network_helpers.h>
7 struct vip key4
= {.protocol
= 6, .family
= AF_INET
};
8 struct vip key6
= {.protocol
= 6, .family
= AF_INET6
};
9 struct iptnl_info value4
= {.family
= AF_INET
};
10 struct iptnl_info value6
= {.family
= AF_INET6
};
11 const char *file
= "./test_xdp.o";
12 struct bpf_object
*obj
;
14 struct ipv6hdr
*iph6
= (void *)buf
+ sizeof(struct ethhdr
);
15 struct iphdr
*iph
= (void *)buf
+ sizeof(struct ethhdr
);
16 __u32 duration
, retval
, size
;
17 int err
, prog_fd
, map_fd
;
19 err
= bpf_prog_load(file
, BPF_PROG_TYPE_XDP
, &obj
, &prog_fd
);
23 map_fd
= bpf_find_map(__func__
, obj
, "vip2tnl");
26 bpf_map_update_elem(map_fd
, &key4
, &value4
, 0);
27 bpf_map_update_elem(map_fd
, &key6
, &value6
, 0);
29 err
= bpf_prog_test_run(prog_fd
, 1, &pkt_v4
, sizeof(pkt_v4
),
30 buf
, &size
, &retval
, &duration
);
32 CHECK(err
|| retval
!= XDP_TX
|| size
!= 74 ||
33 iph
->protocol
!= IPPROTO_IPIP
, "ipv4",
34 "err %d errno %d retval %d size %d\n",
35 err
, errno
, retval
, size
);
37 err
= bpf_prog_test_run(prog_fd
, 1, &pkt_v6
, sizeof(pkt_v6
),
38 buf
, &size
, &retval
, &duration
);
39 CHECK(err
|| retval
!= XDP_TX
|| size
!= 114 ||
40 iph6
->nexthdr
!= IPPROTO_IPV6
, "ipv6",
41 "err %d errno %d retval %d size %d\n",
42 err
, errno
, retval
, size
);
44 bpf_object__close(obj
);