1use abol_core::packet::Packet;
2pub const ACCT_STATUS_TYPE_TYPE: u8 = 40u8;
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4#[repr(u32)]
5pub enum AcctStatusType {
6 Start,
7 Stop,
8 Alive,
9 InterimUpdate,
10 AccountingOn,
11 AccountingOff,
12 Failed,
13 Unknown(u32),
14}
15impl From<u32> for AcctStatusType {
16 fn from(v: u32) -> Self {
17 match v {
18 1u32 => Self::Start,
19 2u32 => Self::Stop,
20 3u32 => Self::Alive,
21 7u32 => Self::AccountingOn,
22 8u32 => Self::AccountingOff,
23 15u32 => Self::Failed,
24 other => Self::Unknown(other),
25 }
26 }
27}
28impl From<AcctStatusType> for u32 {
29 fn from(e: AcctStatusType) -> Self {
30 match e {
31 AcctStatusType::Start => 1u32,
32 AcctStatusType::Stop => 2u32,
33 AcctStatusType::Alive => 3u32,
34 AcctStatusType::InterimUpdate => 3u32,
35 AcctStatusType::AccountingOn => 7u32,
36 AcctStatusType::AccountingOff => 8u32,
37 AcctStatusType::Failed => 15u32,
38 AcctStatusType::Unknown(v) => v,
39 }
40 }
41}
42pub const ACCT_DELAY_TIME_TYPE: u8 = 41u8;
43pub const ACCT_INPUT_OCTETS_TYPE: u8 = 42u8;
44pub const ACCT_OUTPUT_OCTETS_TYPE: u8 = 43u8;
45pub const ACCT_SESSION_ID_TYPE: u8 = 44u8;
46pub const ACCT_AUTHENTIC_TYPE: u8 = 45u8;
47#[derive(Debug, Clone, Copy, PartialEq, Eq)]
48#[repr(u32)]
49pub enum AcctAuthentic {
50 Radius,
51 Local,
52 Remote,
53 Diameter,
54 Unknown(u32),
55}
56impl From<u32> for AcctAuthentic {
57 fn from(v: u32) -> Self {
58 match v {
59 1u32 => Self::Radius,
60 2u32 => Self::Local,
61 3u32 => Self::Remote,
62 4u32 => Self::Diameter,
63 other => Self::Unknown(other),
64 }
65 }
66}
67impl From<AcctAuthentic> for u32 {
68 fn from(e: AcctAuthentic) -> Self {
69 match e {
70 AcctAuthentic::Radius => 1u32,
71 AcctAuthentic::Local => 2u32,
72 AcctAuthentic::Remote => 3u32,
73 AcctAuthentic::Diameter => 4u32,
74 AcctAuthentic::Unknown(v) => v,
75 }
76 }
77}
78pub const ACCT_SESSION_TIME_TYPE: u8 = 46u8;
79pub const ACCT_INPUT_PACKETS_TYPE: u8 = 47u8;
80pub const ACCT_OUTPUT_PACKETS_TYPE: u8 = 48u8;
81pub const ACCT_TERMINATE_CAUSE_TYPE: u8 = 49u8;
82#[derive(Debug, Clone, Copy, PartialEq, Eq)]
83#[repr(u32)]
84pub enum AcctTerminateCause {
85 UserRequest,
86 LostCarrier,
87 LostService,
88 IdleTimeout,
89 SessionTimeout,
90 AdminReset,
91 AdminReboot,
92 PortError,
93 NasError,
94 NasRequest,
95 NasReboot,
96 PortUnneeded,
97 PortPreempted,
98 PortSuspended,
99 ServiceUnavailable,
100 Callback,
101 UserError,
102 HostRequest,
103 Unknown(u32),
104}
105impl From<u32> for AcctTerminateCause {
106 fn from(v: u32) -> Self {
107 match v {
108 1u32 => Self::UserRequest,
109 2u32 => Self::LostCarrier,
110 3u32 => Self::LostService,
111 4u32 => Self::IdleTimeout,
112 5u32 => Self::SessionTimeout,
113 6u32 => Self::AdminReset,
114 7u32 => Self::AdminReboot,
115 8u32 => Self::PortError,
116 9u32 => Self::NasError,
117 10u32 => Self::NasRequest,
118 11u32 => Self::NasReboot,
119 12u32 => Self::PortUnneeded,
120 13u32 => Self::PortPreempted,
121 14u32 => Self::PortSuspended,
122 15u32 => Self::ServiceUnavailable,
123 16u32 => Self::Callback,
124 17u32 => Self::UserError,
125 18u32 => Self::HostRequest,
126 other => Self::Unknown(other),
127 }
128 }
129}
130impl From<AcctTerminateCause> for u32 {
131 fn from(e: AcctTerminateCause) -> Self {
132 match e {
133 AcctTerminateCause::UserRequest => 1u32,
134 AcctTerminateCause::LostCarrier => 2u32,
135 AcctTerminateCause::LostService => 3u32,
136 AcctTerminateCause::IdleTimeout => 4u32,
137 AcctTerminateCause::SessionTimeout => 5u32,
138 AcctTerminateCause::AdminReset => 6u32,
139 AcctTerminateCause::AdminReboot => 7u32,
140 AcctTerminateCause::PortError => 8u32,
141 AcctTerminateCause::NasError => 9u32,
142 AcctTerminateCause::NasRequest => 10u32,
143 AcctTerminateCause::NasReboot => 11u32,
144 AcctTerminateCause::PortUnneeded => 12u32,
145 AcctTerminateCause::PortPreempted => 13u32,
146 AcctTerminateCause::PortSuspended => 14u32,
147 AcctTerminateCause::ServiceUnavailable => 15u32,
148 AcctTerminateCause::Callback => 16u32,
149 AcctTerminateCause::UserError => 17u32,
150 AcctTerminateCause::HostRequest => 18u32,
151 AcctTerminateCause::Unknown(v) => v,
152 }
153 }
154}
155pub const ACCT_MULTI_SESSION_ID_TYPE: u8 = 50u8;
156pub const ACCT_LINK_COUNT_TYPE: u8 = 51u8;
157pub trait Rfc2866Ext {
158 fn get_acct_status_type(&self) -> Option<AcctStatusType>;
159 fn set_acct_status_type(&mut self, value: AcctStatusType);
160 fn get_acct_delay_time(&self) -> Option<u32>;
161 fn set_acct_delay_time(&mut self, value: u32);
162 fn get_acct_input_octets(&self) -> Option<u32>;
163 fn set_acct_input_octets(&mut self, value: u32);
164 fn get_acct_output_octets(&self) -> Option<u32>;
165 fn set_acct_output_octets(&mut self, value: u32);
166 fn get_acct_session_id(&self) -> Option<String>;
167 fn set_acct_session_id(&mut self, value: impl Into<String>);
168 fn get_acct_authentic(&self) -> Option<AcctAuthentic>;
169 fn set_acct_authentic(&mut self, value: AcctAuthentic);
170 fn get_acct_session_time(&self) -> Option<u32>;
171 fn set_acct_session_time(&mut self, value: u32);
172 fn get_acct_input_packets(&self) -> Option<u32>;
173 fn set_acct_input_packets(&mut self, value: u32);
174 fn get_acct_output_packets(&self) -> Option<u32>;
175 fn set_acct_output_packets(&mut self, value: u32);
176 fn get_acct_terminate_cause(&self) -> Option<AcctTerminateCause>;
177 fn set_acct_terminate_cause(&mut self, value: AcctTerminateCause);
178 fn get_acct_multi_session_id(&self) -> Option<String>;
179 fn set_acct_multi_session_id(&mut self, value: impl Into<String>);
180 fn get_acct_link_count(&self) -> Option<u32>;
181 fn set_acct_link_count(&mut self, value: u32);
182}
183impl Rfc2866Ext for Packet {
184 fn get_acct_status_type(&self) -> Option<AcctStatusType> {
185 self.get_attribute_as::<u32>(ACCT_STATUS_TYPE_TYPE)
186 .map(AcctStatusType::from)
187 }
188 fn set_acct_status_type(&mut self, value: AcctStatusType) {
189 let wire_val: u32 = value.into();
190 self.set_attribute_as::<u32>(ACCT_STATUS_TYPE_TYPE, wire_val);
191 }
192 fn get_acct_delay_time(&self) -> Option<u32> {
193 self.get_attribute_as::<u32>(ACCT_DELAY_TIME_TYPE)
194 }
195 fn set_acct_delay_time(&mut self, value: u32) {
196 let wire_val = value;
197 self.set_attribute_as::<u32>(ACCT_DELAY_TIME_TYPE, wire_val);
198 }
199 fn get_acct_input_octets(&self) -> Option<u32> {
200 self.get_attribute_as::<u32>(ACCT_INPUT_OCTETS_TYPE)
201 }
202 fn set_acct_input_octets(&mut self, value: u32) {
203 let wire_val = value;
204 self.set_attribute_as::<u32>(ACCT_INPUT_OCTETS_TYPE, wire_val);
205 }
206 fn get_acct_output_octets(&self) -> Option<u32> {
207 self.get_attribute_as::<u32>(ACCT_OUTPUT_OCTETS_TYPE)
208 }
209 fn set_acct_output_octets(&mut self, value: u32) {
210 let wire_val = value;
211 self.set_attribute_as::<u32>(ACCT_OUTPUT_OCTETS_TYPE, wire_val);
212 }
213 fn get_acct_session_id(&self) -> Option<String> {
214 self.get_attribute_as::<String>(ACCT_SESSION_ID_TYPE)
215 }
216 fn set_acct_session_id(&mut self, value: impl Into<String>) {
217 let wire_val: String = value.into();
218 self.set_attribute_as::<String>(ACCT_SESSION_ID_TYPE, wire_val);
219 }
220 fn get_acct_authentic(&self) -> Option<AcctAuthentic> {
221 self.get_attribute_as::<u32>(ACCT_AUTHENTIC_TYPE)
222 .map(AcctAuthentic::from)
223 }
224 fn set_acct_authentic(&mut self, value: AcctAuthentic) {
225 let wire_val: u32 = value.into();
226 self.set_attribute_as::<u32>(ACCT_AUTHENTIC_TYPE, wire_val);
227 }
228 fn get_acct_session_time(&self) -> Option<u32> {
229 self.get_attribute_as::<u32>(ACCT_SESSION_TIME_TYPE)
230 }
231 fn set_acct_session_time(&mut self, value: u32) {
232 let wire_val = value;
233 self.set_attribute_as::<u32>(ACCT_SESSION_TIME_TYPE, wire_val);
234 }
235 fn get_acct_input_packets(&self) -> Option<u32> {
236 self.get_attribute_as::<u32>(ACCT_INPUT_PACKETS_TYPE)
237 }
238 fn set_acct_input_packets(&mut self, value: u32) {
239 let wire_val = value;
240 self.set_attribute_as::<u32>(ACCT_INPUT_PACKETS_TYPE, wire_val);
241 }
242 fn get_acct_output_packets(&self) -> Option<u32> {
243 self.get_attribute_as::<u32>(ACCT_OUTPUT_PACKETS_TYPE)
244 }
245 fn set_acct_output_packets(&mut self, value: u32) {
246 let wire_val = value;
247 self.set_attribute_as::<u32>(ACCT_OUTPUT_PACKETS_TYPE, wire_val);
248 }
249 fn get_acct_terminate_cause(&self) -> Option<AcctTerminateCause> {
250 self.get_attribute_as::<u32>(ACCT_TERMINATE_CAUSE_TYPE)
251 .map(AcctTerminateCause::from)
252 }
253 fn set_acct_terminate_cause(&mut self, value: AcctTerminateCause) {
254 let wire_val: u32 = value.into();
255 self.set_attribute_as::<u32>(ACCT_TERMINATE_CAUSE_TYPE, wire_val);
256 }
257 fn get_acct_multi_session_id(&self) -> Option<String> {
258 self.get_attribute_as::<String>(ACCT_MULTI_SESSION_ID_TYPE)
259 }
260 fn set_acct_multi_session_id(&mut self, value: impl Into<String>) {
261 let wire_val: String = value.into();
262 self.set_attribute_as::<String>(ACCT_MULTI_SESSION_ID_TYPE, wire_val);
263 }
264 fn get_acct_link_count(&self) -> Option<u32> {
265 self.get_attribute_as::<u32>(ACCT_LINK_COUNT_TYPE)
266 }
267 fn set_acct_link_count(&mut self, value: u32) {
268 let wire_val = value;
269 self.set_attribute_as::<u32>(ACCT_LINK_COUNT_TYPE, wire_val);
270 }
271}