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

Reply via email to