From 561b0015bbdfe45ba175feead3cec037f72ed922 Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Tue, 19 Jan 2021 07:45:21 +0000 Subject: [PATCH] programs: xdp: support detaching with FdLink --- src/programs/xdp.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/programs/xdp.rs b/src/programs/xdp.rs index 6eed0f75..12cd83cf 100644 --- a/src/programs/xdp.rs +++ b/src/programs/xdp.rs @@ -1,11 +1,11 @@ -use std::ffi::CString; +use std::{cell::RefCell, ffi::CString, rc::Rc}; use libc::if_nametoindex; use crate::RawFd; use crate::{ generated::{bpf_attach_type::BPF_XDP, bpf_prog_type::BPF_PROG_TYPE_XDP}, - programs::{load_program, ProgramData, ProgramError}, + programs::{load_program, FdLink, Link, LinkRef, ProgramData, ProgramError}, syscalls::bpf_link_create, }; @@ -23,7 +23,7 @@ impl Xdp { self.data.name.to_string() } - pub fn attach(&self, interface: &str) -> Result<(), ProgramError> { + pub fn attach(&mut self, interface: &str) -> Result { let prog_fd = self.data.fd_or_err()?; let c_interface = CString::new(interface).unwrap(); @@ -39,8 +39,10 @@ impl Xdp { program: self.name(), io_error, } - })?; + })? as RawFd; + let link = Rc::new(RefCell::new(FdLink { fd: Some(link_fd) })); + self.data.links.push(link.clone()); - Ok(()) + Ok(LinkRef::new(&link)) } }