1use netlink_packet_utils::{
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
97 .mldv1_unsolicited_report_interval(),
98 mldv2_unsolicited_report_interval: buf
99 .mldv2_unsolicited_report_interval(),
100 suppress_frag_ndisc: buf.suppress_frag_ndisc(),
101 accept_ra_from_local: buf.accept_ra_from_local(),
102 use_optimistic: buf.use_optimistic(),
103 accept_ra_mtu: buf.accept_ra_mtu(),
104 stable_secret: buf.stable_secret(),
105 use_oif_addrs_only: buf.use_oif_addrs_only(),
106 accept_ra_min_hop_limit: buf.accept_ra_min_hop_limit(),
107 ignore_routes_with_linkdown: buf.ignore_routes_with_linkdown(),
108 drop_unicast_in_l2_multicast: buf.drop_unicast_in_l2_multicast(),
109 drop_unsolicited_na: buf.drop_unsolicited_na(),
110 keep_addr_on_down: buf.keep_addr_on_down(),
111 rtr_solicit_max_interval: buf.rtr_solicit_max_interval(),
112 seg6_enabled: buf.seg6_enabled(),
113 seg6_require_hmac: buf.seg6_require_hmac(),
114 enhanced_dad: buf.enhanced_dad(),
115 addr_gen_mode: buf.addr_gen_mode(),
116 disable_policy: buf.disable_policy(),
117 accept_ra_rt_info_min_plen: buf.accept_ra_rt_info_min_plen(),
118 ndisc_tclass: buf.ndisc_tclass(),
119 })
120 }
121}
122
123impl Emitable for Inet6DevConf {
124 fn buffer_len(&self) -> usize {
125 LINK_INET6_DEV_CONF_LEN
126 }
127
128 fn emit(&self, buffer: &mut [u8]) {
129 let mut buffer = Inet6DevConfBuffer::new(buffer);
130 buffer.set_forwarding(self.forwarding);
131 buffer.set_hoplimit(self.hoplimit);
132 buffer.set_mtu6(self.mtu6);
133 buffer.set_accept_ra(self.accept_ra);
134 buffer.set_accept_redirects(self.accept_redirects);
135 buffer.set_autoconf(self.autoconf);
136 buffer.set_dad_transmits(self.dad_transmits);
137 buffer.set_rtr_solicits(self.rtr_solicits);
138 buffer.set_rtr_solicit_interval(self.rtr_solicit_interval);
139 buffer.set_rtr_solicit_delay(self.rtr_solicit_delay);
140 buffer.set_use_tempaddr(self.use_tempaddr);
141 buffer.set_temp_valid_lft(self.temp_valid_lft);
142 buffer.set_temp_prefered_lft(self.temp_prefered_lft);
143 buffer.set_regen_max_retry(self.regen_max_retry);
144 buffer.set_max_desync_factor(self.max_desync_factor);
145 buffer.set_max_addresses(self.max_addresses);
146 buffer.set_force_mld_version(self.force_mld_version);
147 buffer.set_accept_ra_defrtr(self.accept_ra_defrtr);
148 buffer.set_accept_ra_pinfo(self.accept_ra_pinfo);
149 buffer.set_accept_ra_rtr_pref(self.accept_ra_rtr_pref);
150 buffer.set_rtr_probe_interval(self.rtr_probe_interval);
151 buffer.set_accept_ra_rt_info_max_plen(self.accept_ra_rt_info_max_plen);
152 buffer.set_proxy_ndp(self.proxy_ndp);
153 buffer.set_optimistic_dad(self.optimistic_dad);
154 buffer.set_accept_source_route(self.accept_source_route);
155 buffer.set_mc_forwarding(self.mc_forwarding);
156 buffer.set_disable_ipv6(self.disable_ipv6);
157 buffer.set_accept_dad(self.accept_dad);
158 buffer.set_force_tllao(self.force_tllao);
159 buffer.set_ndisc_notify(self.ndisc_notify);
160 buffer.set_mldv1_unsolicited_report_interval(
161 self.mldv1_unsolicited_report_interval,
162 );
163 buffer.set_mldv2_unsolicited_report_interval(
164 self.mldv2_unsolicited_report_interval,
165 );
166 buffer.set_suppress_frag_ndisc(self.suppress_frag_ndisc);
167 buffer.set_accept_ra_from_local(self.accept_ra_from_local);
168 buffer.set_use_optimistic(self.use_optimistic);
169 buffer.set_accept_ra_mtu(self.accept_ra_mtu);
170 buffer.set_stable_secret(self.stable_secret);
171 buffer.set_use_oif_addrs_only(self.use_oif_addrs_only);
172 buffer.set_accept_ra_min_hop_limit(self.accept_ra_min_hop_limit);
173 buffer
174 .set_ignore_routes_with_linkdown(self.ignore_routes_with_linkdown);
175 buffer.set_drop_unicast_in_l2_multicast(
176 self.drop_unicast_in_l2_multicast,
177 );
178 buffer.set_drop_unsolicited_na(self.drop_unsolicited_na);
179 buffer.set_keep_addr_on_down(self.keep_addr_on_down);
180 buffer.set_rtr_solicit_max_interval(self.rtr_solicit_max_interval);
181 buffer.set_seg6_enabled(self.seg6_enabled);
182 buffer.set_seg6_require_hmac(self.seg6_require_hmac);
183 buffer.set_enhanced_dad(self.enhanced_dad);
184 buffer.set_addr_gen_mode(self.addr_gen_mode);
185 buffer.set_disable_policy(self.disable_policy);
186 buffer.set_accept_ra_rt_info_min_plen(self.accept_ra_rt_info_min_plen);
187 buffer.set_ndisc_tclass(self.ndisc_tclass);
188 }
189}
190
191#[derive(Clone, Copy, Eq, PartialEq, Debug)]
192#[non_exhaustive]
193pub struct Inet6DevConf {
194 pub forwarding: i32,
195 pub hoplimit: i32,
196 pub mtu6: i32,
197 pub accept_ra: i32,
198 pub accept_redirects: i32,
199 pub autoconf: i32,
200 pub dad_transmits: i32,
201 pub rtr_solicits: i32,
202 pub rtr_solicit_interval: i32,
203 pub rtr_solicit_delay: i32,
204 pub use_tempaddr: i32,
205 pub temp_valid_lft: i32,
206 pub temp_prefered_lft: i32,
207 pub regen_max_retry: i32,
208 pub max_desync_factor: i32,
209 pub max_addresses: i32,
210 pub force_mld_version: i32,
211 pub accept_ra_defrtr: i32,
212 pub accept_ra_pinfo: i32,
213 pub accept_ra_rtr_pref: i32,
214 pub rtr_probe_interval: i32,
215 pub accept_ra_rt_info_max_plen: i32,
216 pub proxy_ndp: i32,
217 pub optimistic_dad: i32,
218 pub accept_source_route: i32,
219 pub mc_forwarding: i32,
220 pub disable_ipv6: i32,
221 pub accept_dad: i32,
222 pub force_tllao: i32,
223 pub ndisc_notify: i32,
224 pub mldv1_unsolicited_report_interval: i32,
225 pub mldv2_unsolicited_report_interval: i32,
226 pub suppress_frag_ndisc: i32,
227 pub accept_ra_from_local: i32,
228 pub use_optimistic: i32,
229 pub accept_ra_mtu: i32,
230 pub stable_secret: i32,
231 pub use_oif_addrs_only: i32,
232 pub accept_ra_min_hop_limit: i32,
233 pub ignore_routes_with_linkdown: i32,
234 pub drop_unicast_in_l2_multicast: i32,
235 pub drop_unsolicited_na: i32,
236 pub keep_addr_on_down: i32,
237 pub rtr_solicit_max_interval: i32,
238 pub seg6_enabled: i32,
239 pub seg6_require_hmac: i32,
240 pub enhanced_dad: i32,
241 pub addr_gen_mode: i32,
242 pub disable_policy: i32,
243 pub accept_ra_rt_info_min_plen: i32,
244 pub ndisc_tclass: i32,
245}