1use abol_core::packet::Packet;
2use std::net::Ipv6Addr;
3pub const FRAMED_IPV6_ADDRESS_TYPE: u8 = 168u8;
4pub const DNS_SERVER_IPV6_ADDRESS_TYPE: u8 = 169u8;
5pub const ROUTE_IPV6_INFORMATION_TYPE: u8 = 170u8;
6pub const DELEGATED_IPV6_PREFIX_POOL_TYPE: u8 = 171u8;
7pub const STATEFUL_IPV6_ADDRESS_POOL_TYPE: u8 = 172u8;
8pub trait Rfc6911Ext {
9 fn get_framed_ipv6_address(&self) -> Option<Ipv6Addr>;
10 fn set_framed_ipv6_address(&mut self, value: Ipv6Addr);
11 fn get_dns_server_ipv6_address(&self) -> Option<Ipv6Addr>;
12 fn set_dns_server_ipv6_address(&mut self, value: Ipv6Addr);
13 fn get_route_ipv6_information(&self) -> Option<Vec<u8>>;
14 fn set_route_ipv6_information(&mut self, value: Vec<u8>);
15 fn get_delegated_ipv6_prefix_pool(&self) -> Option<String>;
16 fn set_delegated_ipv6_prefix_pool(&mut self, value: impl Into<String>);
17 fn get_stateful_ipv6_address_pool(&self) -> Option<String>;
18 fn set_stateful_ipv6_address_pool(&mut self, value: impl Into<String>);
19}
20impl Rfc6911Ext for Packet {
21 fn get_framed_ipv6_address(&self) -> Option<Ipv6Addr> {
22 self.get_attribute_as::<Ipv6Addr>(FRAMED_IPV6_ADDRESS_TYPE)
23 }
24 fn set_framed_ipv6_address(&mut self, value: Ipv6Addr) {
25 let wire_val = value;
26 self.set_attribute_as::<Ipv6Addr>(FRAMED_IPV6_ADDRESS_TYPE, wire_val);
27 }
28 fn get_dns_server_ipv6_address(&self) -> Option<Ipv6Addr> {
29 self.get_attribute_as::<Ipv6Addr>(DNS_SERVER_IPV6_ADDRESS_TYPE)
30 }
31 fn set_dns_server_ipv6_address(&mut self, value: Ipv6Addr) {
32 let wire_val = value;
33 self.set_attribute_as::<Ipv6Addr>(DNS_SERVER_IPV6_ADDRESS_TYPE, wire_val);
34 }
35 fn get_route_ipv6_information(&self) -> Option<Vec<u8>> {
36 self.get_attribute_as::<Vec<u8>>(ROUTE_IPV6_INFORMATION_TYPE)
37 }
38 fn set_route_ipv6_information(&mut self, value: Vec<u8>) {
39 let wire_val = value;
40 self.set_attribute_as::<Vec<u8>>(ROUTE_IPV6_INFORMATION_TYPE, wire_val);
41 }
42 fn get_delegated_ipv6_prefix_pool(&self) -> Option<String> {
43 self.get_attribute_as::<String>(DELEGATED_IPV6_PREFIX_POOL_TYPE)
44 }
45 fn set_delegated_ipv6_prefix_pool(&mut self, value: impl Into<String>) {
46 let wire_val: String = value.into();
47 self.set_attribute_as::<String>(DELEGATED_IPV6_PREFIX_POOL_TYPE, wire_val);
48 }
49 fn get_stateful_ipv6_address_pool(&self) -> Option<String> {
50 self.get_attribute_as::<String>(STATEFUL_IPV6_ADDRESS_POOL_TYPE)
51 }
52 fn set_stateful_ipv6_address_pool(&mut self, value: impl Into<String>) {
53 let wire_val: String = value.into();
54 self.set_attribute_as::<String>(STATEFUL_IPV6_ADDRESS_POOL_TYPE, wire_val);
55 }
56}