netlink_packet_route/rtnl/link/nlas/inet6/
dev_conf.rs

1// SPDX-License-Identifier: MIT
2
3use crate::{
4    traits::{Emitable, Parseable},
5    DecodeError,
6};
7
8pub const LINK_INET6_DEV_CONF_LEN: usize = 204;
9buffer!(Inet6DevConfBuffer(LINK_INET6_DEV_CONF_LEN) {
10    forwarding: (i32, 0..4),
11    hoplimit: (i32, 4..8),
12    mtu6: (i32, 8..12),
13    accept_ra: (i32, 12..16),
14    accept_redirects: (i32, 16..20),
15    autoconf: (i32, 20..24),
16    dad_transmits: (i32, 24..28),
17    rtr_solicits: (i32, 28..32),
18    rtr_solicit_interval: (i32, 32..36),
19    rtr_solicit_delay: (i32, 36..40),
20    use_tempaddr: (i32, 40..44),
21    temp_valid_lft: (i32, 44..48),
22    temp_prefered_lft: (i32, 48..52),
23    regen_max_retry: (i32, 52..56),
24    max_desync_factor: (i32, 56..60),
25    max_addresses: (i32, 60..64),
26    force_mld_version: (i32, 64..68),
27    accept_ra_defrtr: (i32, 68..72),
28    accept_ra_pinfo: (i32, 72..76),
29    accept_ra_rtr_pref: (i32, 76..80),
30    rtr_probe_interval: (i32, 80..84),
31    accept_ra_rt_info_max_plen: (i32, 84..88),
32    proxy_ndp: (i32, 88..92),
33    optimistic_dad: (i32, 92..96),
34    accept_source_route: (i32, 96..100),
35    mc_forwarding: (i32, 100..104),
36    disable_ipv6: (i32, 104..108),
37    accept_dad: (i32, 108..112),
38    force_tllao: (i32, 112..116),
39    ndisc_notify: (i32, 116..120),
40    mldv1_unsolicited_report_interval: (i32, 120..124),
41    mldv2_unsolicited_report_interval: (i32, 124..128),
42    suppress_frag_ndisc: (i32, 128..132),
43    accept_ra_from_local: (i32, 132..136),
44    use_optimistic: (i32, 136..140),
45    accept_ra_mtu: (i32, 140..144),
46    stable_secret: (i32, 144..148),
47    use_oif_addrs_only: (i32, 148..152),
48    accept_ra_min_hop_limit: (i32, 152..156),
49    ignore_routes_with_linkdown: (i32, 156..160),
50    drop_unicast_in_l2_multicast: (i32, 160..164),
51    drop_unsolicited_na: (i32, 164..168),
52    keep_addr_on_down: (i32, 168..172),
53    rtr_solicit_max_interval: (i32, 172..176),
54    seg6_enabled: (i32, 176..180),
55    seg6_require_hmac: (i32, 180..184),
56    enhanced_dad: (i32, 184..188),
57    addr_gen_mode: (i32, 188..192),
58    disable_policy: (i32, 192..196),
59    accept_ra_rt_info_min_plen: (i32, 196..200),
60    ndisc_tclass: (i32, 200..204),
61});
62
63impl<T: AsRef<[u8]>> Parseable<Inet6DevConfBuffer<T>> for Inet6DevConf {
64    fn parse(buf: &Inet6DevConfBuffer<T>) -> Result<Self, DecodeError> {
65        Ok(Self {
66            forwarding: buf.forwarding(),
67            hoplimit: buf.hoplimit(),
68            mtu6: buf.mtu6(),
69            accept_ra: buf.accept_ra(),
70            accept_redirects: buf.accept_redirects(),
71            autoconf: buf.autoconf(),
72            dad_transmits: buf.dad_transmits(),
73            rtr_solicits: buf.rtr_solicits(),
74            rtr_solicit_interval: buf.rtr_solicit_interval(),
75            rtr_solicit_delay: buf.rtr_solicit_delay(),
76            use_tempaddr: buf.use_tempaddr(),
77            temp_valid_lft: buf.temp_valid_lft(),
78            temp_prefered_lft: buf.temp_prefered_lft(),
79            regen_max_retry: buf.regen_max_retry(),
80            max_desync_factor: buf.max_desync_factor(),
81            max_addresses: buf.max_addresses(),
82            force_mld_version: buf.force_mld_version(),
83            accept_ra_defrtr: buf.accept_ra_defrtr(),
84            accept_ra_pinfo: buf.accept_ra_pinfo(),
85            accept_ra_rtr_pref: buf.accept_ra_rtr_pref(),
86            rtr_probe_interval: buf.rtr_probe_interval(),
87            accept_ra_rt_info_max_plen: buf.accept_ra_rt_info_max_plen(),
88            proxy_ndp: buf.proxy_ndp(),
89            optimistic_dad: buf.optimistic_dad(),
90            accept_source_route: buf.accept_source_route(),
91            mc_forwarding: buf.mc_forwarding(),
92            disable_ipv6: buf.disable_ipv6(),
93            accept_dad: buf.accept_dad(),
94            force_tllao: buf.force_tllao(),
95            ndisc_notify: buf.ndisc_notify(),
96            mldv1_unsolicited_report_interval: buf.mldv1_unsolicited_report_interval(),
97            mldv2_unsolicited_report_interval: buf.mldv2_unsolicited_report_interval(),
98            suppress_frag_ndisc: buf.suppress_frag_ndisc(),
99            accept_ra_from_local: buf.accept_ra_from_local(),
100            use_optimistic: buf.use_optimistic(),
101            accept_ra_mtu: buf.accept_ra_mtu(),
102            stable_secret: buf.stable_secret(),
103            use_oif_addrs_only: buf.use_oif_addrs_only(),
104            accept_ra_min_hop_limit: buf.accept_ra_min_hop_limit(),
105            ignore_routes_with_linkdown: buf.ignore_routes_with_linkdown(),
106            drop_unicast_in_l2_multicast: buf.drop_unicast_in_l2_multicast(),
107            drop_unsolicited_na: buf.drop_unsolicited_na(),
108            keep_addr_on_down: buf.keep_addr_on_down(),
109            rtr_solicit_max_interval: buf.rtr_solicit_max_interval(),
110            seg6_enabled: buf.seg6_enabled(),
111            seg6_require_hmac: buf.seg6_require_hmac(),
112            enhanced_dad: buf.enhanced_dad(),
113            addr_gen_mode: buf.addr_gen_mode(),
114            disable_policy: buf.disable_policy(),
115            accept_ra_rt_info_min_plen: buf.accept_ra_rt_info_min_plen(),
116            ndisc_tclass: buf.ndisc_tclass(),
117        })
118    }
119}
120
121impl Emitable for Inet6DevConf {
122    fn buffer_len(&self) -> usize {
123        LINK_INET6_DEV_CONF_LEN
124    }
125
126    fn emit(&self, buffer: &mut [u8]) {
127        let mut buffer = Inet6DevConfBuffer::new(buffer);
128        buffer.set_forwarding(self.forwarding);
129        buffer.set_hoplimit(self.hoplimit);
130        buffer.set_mtu6(self.mtu6);
131        buffer.set_accept_ra(self.accept_ra);
132        buffer.set_accept_redirects(self.accept_redirects);
133        buffer.set_autoconf(self.autoconf);
134        buffer.set_dad_transmits(self.dad_transmits);
135        buffer.set_rtr_solicits(self.rtr_solicits);
136        buffer.set_rtr_solicit_interval(self.rtr_solicit_interval);
137        buffer.set_rtr_solicit_delay(self.rtr_solicit_delay);
138        buffer.set_use_tempaddr(self.use_tempaddr);
139        buffer.set_temp_valid_lft(self.temp_valid_lft);
140        buffer.set_temp_prefered_lft(self.temp_prefered_lft);
141        buffer.set_regen_max_retry(self.regen_max_retry);
142        buffer.set_max_desync_factor(self.max_desync_factor);
143        buffer.set_max_addresses(self.max_addresses);
144        buffer.set_force_mld_version(self.force_mld_version);
145        buffer.set_accept_ra_defrtr(self.accept_ra_defrtr);
146        buffer.set_accept_ra_pinfo(self.accept_ra_pinfo);
147        buffer.set_accept_ra_rtr_pref(self.accept_ra_rtr_pref);
148        buffer.set_rtr_probe_interval(self.rtr_probe_interval);
149        buffer.set_accept_ra_rt_info_max_plen(self.accept_ra_rt_info_max_plen);
150        buffer.set_proxy_ndp(self.proxy_ndp);
151        buffer.set_optimistic_dad(self.optimistic_dad);
152        buffer.set_accept_source_route(self.accept_source_route);
153        buffer.set_mc_forwarding(self.mc_forwarding);
154        buffer.set_disable_ipv6(self.disable_ipv6);
155        buffer.set_accept_dad(self.accept_dad);
156        buffer.set_force_tllao(self.force_tllao);
157        buffer.set_ndisc_notify(self.ndisc_notify);
158        buffer.set_mldv1_unsolicited_report_interval(self.mldv1_unsolicited_report_interval);
159        buffer.set_mldv2_unsolicited_report_interval(self.mldv2_unsolicited_report_interval);
160        buffer.set_suppress_frag_ndisc(self.suppress_frag_ndisc);
161        buffer.set_accept_ra_from_local(self.accept_ra_from_local);
162        buffer.set_use_optimistic(self.use_optimistic);
163        buffer.set_accept_ra_mtu(self.accept_ra_mtu);
164        buffer.set_stable_secret(self.stable_secret);
165        buffer.set_use_oif_addrs_only(self.use_oif_addrs_only);
166        buffer.set_accept_ra_min_hop_limit(self.accept_ra_min_hop_limit);
167        buffer.set_ignore_routes_with_linkdown(self.ignore_routes_with_linkdown);
168        buffer.set_drop_unicast_in_l2_multicast(self.drop_unicast_in_l2_multicast);
169        buffer.set_drop_unsolicited_na(self.drop_unsolicited_na);
170        buffer.set_keep_addr_on_down(self.keep_addr_on_down);
171        buffer.set_rtr_solicit_max_interval(self.rtr_solicit_max_interval);
172        buffer.set_seg6_enabled(self.seg6_enabled);
173        buffer.set_seg6_require_hmac(self.seg6_require_hmac);
174        buffer.set_enhanced_dad(self.enhanced_dad);
175        buffer.set_addr_gen_mode(self.addr_gen_mode);
176        buffer.set_disable_policy(self.disable_policy);
177        buffer.set_accept_ra_rt_info_min_plen(self.accept_ra_rt_info_min_plen);
178        buffer.set_ndisc_tclass(self.ndisc_tclass);
179    }
180}
181
182#[derive(Clone, Copy, Eq, PartialEq, Debug)]
183pub struct Inet6DevConf {
184    pub forwarding: i32,
185    pub hoplimit: i32,
186    pub mtu6: i32,
187    pub accept_ra: i32,
188    pub accept_redirects: i32,
189    pub autoconf: i32,
190    pub dad_transmits: i32,
191    pub rtr_solicits: i32,
192    pub rtr_solicit_interval: i32,
193    pub rtr_solicit_delay: i32,
194    pub use_tempaddr: i32,
195    pub temp_valid_lft: i32,
196    pub temp_prefered_lft: i32,
197    pub regen_max_retry: i32,
198    pub max_desync_factor: i32,
199    pub max_addresses: i32,
200    pub force_mld_version: i32,
201    pub accept_ra_defrtr: i32,
202    pub accept_ra_pinfo: i32,
203    pub accept_ra_rtr_pref: i32,
204    pub rtr_probe_interval: i32,
205    pub accept_ra_rt_info_max_plen: i32,
206    pub proxy_ndp: i32,
207    pub optimistic_dad: i32,
208    pub accept_source_route: i32,
209    pub mc_forwarding: i32,
210    pub disable_ipv6: i32,
211    pub accept_dad: i32,
212    pub force_tllao: i32,
213    pub ndisc_notify: i32,
214    pub mldv1_unsolicited_report_interval: i32,
215    pub mldv2_unsolicited_report_interval: i32,
216    pub suppress_frag_ndisc: i32,
217    pub accept_ra_from_local: i32,
218    pub use_optimistic: i32,
219    pub accept_ra_mtu: i32,
220    pub stable_secret: i32,
221    pub use_oif_addrs_only: i32,
222    pub accept_ra_min_hop_limit: i32,
223    pub ignore_routes_with_linkdown: i32,
224    pub drop_unicast_in_l2_multicast: i32,
225    pub drop_unsolicited_na: i32,
226    pub keep_addr_on_down: i32,
227    pub rtr_solicit_max_interval: i32,
228    pub seg6_enabled: i32,
229    pub seg6_require_hmac: i32,
230    pub enhanced_dad: i32,
231    pub addr_gen_mode: i32,
232    pub disable_policy: i32,
233    pub accept_ra_rt_info_min_plen: i32,
234    pub ndisc_tclass: i32,
235}