netlink_packet_route/rtnl/link/nlas/inet/
dev_conf.rs1use crate::{
4 traits::{Emitable, Parseable},
5 DecodeError,
6};
7
8pub const DEV_CONF_LEN: usize = 124;
9
10buffer!(InetDevConfBuffer(DEV_CONF_LEN) {
11 forwarding: (i32, 0..4),
12 mc_forwarding: (i32, 4..8),
13 proxy_arp: (i32, 8..12),
14 accept_redirects: (i32, 12..16),
15 secure_redirects: (i32, 16..20),
16 send_redirects: (i32, 20..24),
17 shared_media: (i32, 24..28),
18 rp_filter: (i32, 28..32),
19 accept_source_route: (i32, 32..36),
20 bootp_relay: (i32, 36..40),
21 log_martians: (i32, 40..44),
22 tag: (i32, 44..48),
23 arpfilter: (i32, 48..52),
24 medium_id: (i32, 52..56),
25 noxfrm: (i32, 56..60),
26 nopolicy: (i32, 60..64),
27 force_igmp_version: (i32, 64..68),
28 arp_announce: (i32, 68..72),
29 arp_ignore: (i32, 72..76),
30 promote_secondaries: (i32, 76..80),
31 arp_accept: (i32, 80..84),
32 arp_notify: (i32, 84..88),
33 accept_local: (i32, 88..92),
34 src_vmark: (i32, 92..96),
35 proxy_arp_pvlan: (i32, 96..100),
36 route_localnet: (i32, 100..104),
37 igmpv2_unsolicited_report_interval: (i32, 104..108),
38 igmpv3_unsolicited_report_interval: (i32, 108..112),
39 ignore_routes_with_linkdown: (i32, 112..116),
40 drop_unicast_in_l2_multicast: (i32, 116..120),
41 drop_gratuitous_arp: (i32, 120..124),
42});
43
44#[derive(Clone, Copy, Eq, PartialEq, Debug)]
45pub struct InetDevConf {
46 pub forwarding: i32,
47 pub mc_forwarding: i32,
48 pub proxy_arp: i32,
49 pub accept_redirects: i32,
50 pub secure_redirects: i32,
51 pub send_redirects: i32,
52 pub shared_media: i32,
53 pub rp_filter: i32,
54 pub accept_source_route: i32,
55 pub bootp_relay: i32,
56 pub log_martians: i32,
57 pub tag: i32,
58 pub arpfilter: i32,
59 pub medium_id: i32,
60 pub noxfrm: i32,
61 pub nopolicy: i32,
62 pub force_igmp_version: i32,
63 pub arp_announce: i32,
64 pub arp_ignore: i32,
65 pub promote_secondaries: i32,
66 pub arp_accept: i32,
67 pub arp_notify: i32,
68 pub accept_local: i32,
69 pub src_vmark: i32,
70 pub proxy_arp_pvlan: i32,
71 pub route_localnet: i32,
72 pub igmpv2_unsolicited_report_interval: i32,
73 pub igmpv3_unsolicited_report_interval: i32,
74 pub ignore_routes_with_linkdown: i32,
75 pub drop_unicast_in_l2_multicast: i32,
76 pub drop_gratuitous_arp: i32,
77}
78
79impl<T: AsRef<[u8]>> Parseable<InetDevConfBuffer<T>> for InetDevConf {
80 fn parse(buf: &InetDevConfBuffer<T>) -> Result<Self, DecodeError> {
81 Ok(Self {
82 forwarding: buf.forwarding(),
83 mc_forwarding: buf.mc_forwarding(),
84 proxy_arp: buf.proxy_arp(),
85 accept_redirects: buf.accept_redirects(),
86 secure_redirects: buf.secure_redirects(),
87 send_redirects: buf.send_redirects(),
88 shared_media: buf.shared_media(),
89 rp_filter: buf.rp_filter(),
90 accept_source_route: buf.accept_source_route(),
91 bootp_relay: buf.bootp_relay(),
92 log_martians: buf.log_martians(),
93 tag: buf.tag(),
94 arpfilter: buf.arpfilter(),
95 medium_id: buf.medium_id(),
96 noxfrm: buf.noxfrm(),
97 nopolicy: buf.nopolicy(),
98 force_igmp_version: buf.force_igmp_version(),
99 arp_announce: buf.arp_announce(),
100 arp_ignore: buf.arp_ignore(),
101 promote_secondaries: buf.promote_secondaries(),
102 arp_accept: buf.arp_accept(),
103 arp_notify: buf.arp_notify(),
104 accept_local: buf.accept_local(),
105 src_vmark: buf.src_vmark(),
106 proxy_arp_pvlan: buf.proxy_arp_pvlan(),
107 route_localnet: buf.route_localnet(),
108 igmpv2_unsolicited_report_interval: buf.igmpv2_unsolicited_report_interval(),
109 igmpv3_unsolicited_report_interval: buf.igmpv3_unsolicited_report_interval(),
110 ignore_routes_with_linkdown: buf.ignore_routes_with_linkdown(),
111 drop_unicast_in_l2_multicast: buf.drop_unicast_in_l2_multicast(),
112 drop_gratuitous_arp: buf.drop_gratuitous_arp(),
113 })
114 }
115}
116
117impl Emitable for InetDevConf {
118 fn buffer_len(&self) -> usize {
119 DEV_CONF_LEN
120 }
121
122 fn emit(&self, buffer: &mut [u8]) {
123 let mut buffer = InetDevConfBuffer::new(buffer);
124 buffer.set_forwarding(self.forwarding);
125 buffer.set_mc_forwarding(self.mc_forwarding);
126 buffer.set_proxy_arp(self.proxy_arp);
127 buffer.set_accept_redirects(self.accept_redirects);
128 buffer.set_secure_redirects(self.secure_redirects);
129 buffer.set_send_redirects(self.send_redirects);
130 buffer.set_shared_media(self.shared_media);
131 buffer.set_rp_filter(self.rp_filter);
132 buffer.set_accept_source_route(self.accept_source_route);
133 buffer.set_bootp_relay(self.bootp_relay);
134 buffer.set_log_martians(self.log_martians);
135 buffer.set_tag(self.tag);
136 buffer.set_arpfilter(self.arpfilter);
137 buffer.set_medium_id(self.medium_id);
138 buffer.set_noxfrm(self.noxfrm);
139 buffer.set_nopolicy(self.nopolicy);
140 buffer.set_force_igmp_version(self.force_igmp_version);
141 buffer.set_arp_announce(self.arp_announce);
142 buffer.set_arp_ignore(self.arp_ignore);
143 buffer.set_promote_secondaries(self.promote_secondaries);
144 buffer.set_arp_accept(self.arp_accept);
145 buffer.set_arp_notify(self.arp_notify);
146 buffer.set_accept_local(self.accept_local);
147 buffer.set_src_vmark(self.src_vmark);
148 buffer.set_proxy_arp_pvlan(self.proxy_arp_pvlan);
149 buffer.set_route_localnet(self.route_localnet);
150 buffer.set_igmpv2_unsolicited_report_interval(self.igmpv2_unsolicited_report_interval);
151 buffer.set_igmpv3_unsolicited_report_interval(self.igmpv3_unsolicited_report_interval);
152 buffer.set_ignore_routes_with_linkdown(self.ignore_routes_with_linkdown);
153 buffer.set_drop_unicast_in_l2_multicast(self.drop_unicast_in_l2_multicast);
154 buffer.set_drop_gratuitous_arp(self.drop_gratuitous_arp);
155 }
156}