On 7/16/24 12:13 PM, Alexis Lothoré (eBPF Foundation) wrote: [...]
+static int attach_programs_to_veth_pair(struct skeletons *skeletons, int index) +{
- struct bpf_program *local_prog, *remote_prog;
- struct bpf_link **local_link, **remote_link;
- struct nstoken *nstoken;
- struct bpf_link *link;
- int interface;
- switch (index) {
- case 0:
local_prog = skeletons->xdp_redirect_maps->progs.xdp_redirect_map_0;
local_link = &skeletons->xdp_redirect_maps->links.xdp_redirect_map_0;
remote_prog = skeletons->xdp_dummy->progs.xdp_dummy_prog;
remote_link = &skeletons->xdp_dummy->links.xdp_dummy_prog;
break;
- case 1:
local_prog = skeletons->xdp_redirect_maps->progs.xdp_redirect_map_1;
local_link = &skeletons->xdp_redirect_maps->links.xdp_redirect_map_1;
remote_prog = skeletons->xdp_tx->progs.xdp_tx;
remote_link = &skeletons->xdp_tx->links.xdp_tx;
break;
- case 2:
local_prog = skeletons->xdp_redirect_maps->progs.xdp_redirect_map_2;
local_link = &skeletons->xdp_redirect_maps->links.xdp_redirect_map_2;
remote_prog = skeletons->xdp_dummy->progs.xdp_dummy_prog;
remote_link = &skeletons->xdp_dummy->links.xdp_dummy_prog;
break;
- }
- interface = if_nametoindex(config[index].local_veth);
- if (!ASSERT_NEQ(interface, 0, "non zero interface index"))
return -1;
- link = bpf_program__attach_xdp(local_prog, interface);
- if (!ASSERT_OK_PTR(link, "attach xdp program to local veth"))
return -1;
- *local_link = link;
- nstoken = open_netns(config[index].namespace);
- if (!ASSERT_OK_PTR(nstoken, "switch to remote veth namespace"))
return -1;
- interface = if_nametoindex(config[index].remote_veth);
- if (!ASSERT_NEQ(interface, 0, "non zero interface index"))
return -1;
Missing `close_netns(nstoken);` in error path here, otherwise looks reasonable to me.
- link = bpf_program__attach_xdp(remote_prog, interface);
- *remote_link = link;
- close_netns(nstoken);
- if (!ASSERT_OK_PTR(link, "attach xdp program to remote veth"))
return -1;
- return 0;
+}
Thanks, Daniel