rtnetlink/traffic_control/
handle.rs1use super::{
4 QDiscDelRequest, QDiscGetRequest, QDiscNewRequest, TrafficChainGetRequest,
5 TrafficClassGetRequest, TrafficFilterGetRequest, TrafficFilterNewRequest,
6};
7
8use crate::Handle;
9use netlink_packet_core::{NLM_F_CREATE, NLM_F_EXCL, NLM_F_REPLACE};
10use netlink_packet_route::TcMessage;
11
12pub struct QDiscHandle(Handle);
13
14impl QDiscHandle {
15 pub fn new(handle: Handle) -> Self {
16 QDiscHandle(handle)
17 }
18
19 pub fn get(&mut self) -> QDiscGetRequest {
21 QDiscGetRequest::new(self.0.clone())
22 }
23
24 pub fn add(&mut self, index: i32) -> QDiscNewRequest {
27 let msg = TcMessage::with_index(index);
28 QDiscNewRequest::new(self.0.clone(), msg, NLM_F_EXCL | NLM_F_CREATE)
29 }
30
31 pub fn change(&mut self, index: i32) -> QDiscNewRequest {
35 let msg = TcMessage::with_index(index);
36 QDiscNewRequest::new(self.0.clone(), msg, 0)
37 }
38
39 pub fn replace(&mut self, index: i32) -> QDiscNewRequest {
42 let msg = TcMessage::with_index(index);
43 QDiscNewRequest::new(self.0.clone(), msg, NLM_F_CREATE | NLM_F_REPLACE)
44 }
45
46 pub fn link(&mut self, index: i32) -> QDiscNewRequest {
49 let msg = TcMessage::with_index(index);
50 QDiscNewRequest::new(self.0.clone(), msg, NLM_F_REPLACE)
51 }
52
53 pub fn del(&mut self, index: i32) -> QDiscDelRequest {
55 let msg = TcMessage::with_index(index);
56 QDiscDelRequest::new(self.0.clone(), msg)
57 }
58}
59
60pub struct TrafficClassHandle {
61 handle: Handle,
62 ifindex: i32,
63}
64
65impl TrafficClassHandle {
66 pub fn new(handle: Handle, ifindex: i32) -> Self {
67 TrafficClassHandle { handle, ifindex }
68 }
69
70 pub fn get(&mut self) -> TrafficClassGetRequest {
73 TrafficClassGetRequest::new(self.handle.clone(), self.ifindex)
74 }
75}
76
77pub struct TrafficFilterHandle {
78 handle: Handle,
79 ifindex: i32,
80}
81
82impl TrafficFilterHandle {
83 pub fn new(handle: Handle, ifindex: i32) -> Self {
84 TrafficFilterHandle { handle, ifindex }
85 }
86
87 pub fn get(&mut self) -> TrafficFilterGetRequest {
90 TrafficFilterGetRequest::new(self.handle.clone(), self.ifindex)
91 }
92
93 pub fn add(&mut self) -> TrafficFilterNewRequest {
96 TrafficFilterNewRequest::new(
97 self.handle.clone(),
98 self.ifindex,
99 NLM_F_EXCL | NLM_F_CREATE,
100 )
101 }
102
103 pub fn change(&mut self) -> TrafficFilterNewRequest {
107 TrafficFilterNewRequest::new(self.handle.clone(), self.ifindex, 0)
108 }
109
110 pub fn replace(&mut self) -> TrafficFilterNewRequest {
113 TrafficFilterNewRequest::new(
114 self.handle.clone(),
115 self.ifindex,
116 NLM_F_CREATE,
117 )
118 }
119}
120
121pub struct TrafficChainHandle {
122 handle: Handle,
123 ifindex: i32,
124}
125
126impl TrafficChainHandle {
127 pub fn new(handle: Handle, ifindex: i32) -> Self {
128 TrafficChainHandle { handle, ifindex }
129 }
130
131 pub fn get(&mut self) -> TrafficChainGetRequest {
134 TrafficChainGetRequest::new(self.handle.clone(), self.ifindex)
135 }
136}