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