blob: 4844a187508885f6d1ec09d92146252c72ebb07c [file] [log] [blame]
// SPDX-License-Identifier: MIT
use super::{
LinkAddRequest, LinkDelPropRequest, LinkDelRequest, LinkGetRequest,
LinkNewPropRequest, LinkSetRequest,
};
use crate::{
packet_core::{NLM_F_ACK, NLM_F_REQUEST},
packet_route::link::LinkMessage,
Handle,
};
pub struct LinkHandle(Handle);
impl LinkHandle {
pub fn new(handle: Handle) -> Self {
LinkHandle(handle)
}
pub fn set(&self, message: LinkMessage) -> LinkSetRequest {
LinkSetRequest::new(self.0.clone(), message)
}
pub fn add(&self, message: LinkMessage) -> LinkAddRequest {
LinkAddRequest::new(self.0.clone(), message)
}
pub fn property_add(&self, index: u32) -> LinkNewPropRequest {
LinkNewPropRequest::new(self.0.clone(), index)
}
pub fn property_del(&self, index: u32) -> LinkDelPropRequest {
LinkDelPropRequest::new(self.0.clone(), index)
}
pub fn del(&mut self, index: u32) -> LinkDelRequest {
LinkDelRequest::new(self.0.clone(), index)
}
/// Retrieve the list of links (equivalent to `ip link show`)
pub fn get(&mut self) -> LinkGetRequest {
LinkGetRequest::new(self.0.clone())
}
/// The `LinkHandle::set()` cannot be used for setting bond or bridge port
/// configuration, `RTM_NEWLINK` and `NLM_F_REQUEST|NLM_F_ACK` are required,
/// Equal to `LinkAddRequest::new().set_flags(NLM_F_REQUEST | NLM_F_ACK)`
pub fn set_port(&self, message: LinkMessage) -> LinkAddRequest {
LinkAddRequest::new(self.0.clone(), message)
.set_flags(NLM_F_REQUEST | NLM_F_ACK)
}
}