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