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

1// SPDX-License-Identifier: MIT
2
3use netlink_packet_utils::{
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)]
45#[non_exhaustive]
46pub struct InetDevConf {
47    pub forwarding: i32,
48    pub mc_forwarding: i32,
49    pub proxy_arp: i32,
50    pub accept_redirects: i32,
51    pub secure_redirects: i32,
52    pub send_redirects: i32,
53    pub shared_media: i32,
54    pub rp_filter: i32,
55    pub accept_source_route: i32,
56    pub bootp_relay: i32,
57    pub log_martians: i32,
58    pub tag: i32,
59    pub arpfilter: i32,
60    pub medium_id: i32,
61    pub noxfrm: i32,
62    pub nopolicy: i32,
63    pub force_igmp_version: i32,
64    pub arp_announce: i32,
65    pub arp_ignore: i32,
66    pub promote_secondaries: i32,
67    pub arp_accept: i32,
68    pub arp_notify: i32,
69    pub accept_local: i32,
70    pub src_vmark: i32,
71    pub proxy_arp_pvlan: i32,
72    pub route_localnet: i32,
73    pub igmpv2_unsolicited_report_interval: i32,
74    pub igmpv3_unsolicited_report_interval: i32,
75    pub ignore_routes_with_linkdown: i32,
76    pub drop_unicast_in_l2_multicast: i32,
77    pub drop_gratuitous_arp: i32,
78}
79
80impl<T: AsRef<[u8]>> Parseable<InetDevConfBuffer<T>> for InetDevConf {
81    fn parse(buf: &InetDevConfBuffer<T>) -> Result<Self, DecodeError> {
82        Ok(Self {
83            forwarding: buf.forwarding(),
84            mc_forwarding: buf.mc_forwarding(),
85            proxy_arp: buf.proxy_arp(),
86            accept_redirects: buf.accept_redirects(),
87            secure_redirects: buf.secure_redirects(),
88            send_redirects: buf.send_redirects(),
89            shared_media: buf.shared_media(),
90            rp_filter: buf.rp_filter(),
91            accept_source_route: buf.accept_source_route(),
92            bootp_relay: buf.bootp_relay(),
93            log_martians: buf.log_martians(),
94            tag: buf.tag(),
95            arpfilter: buf.arpfilter(),
96            medium_id: buf.medium_id(),
97            noxfrm: buf.noxfrm(),
98            nopolicy: buf.nopolicy(),
99            force_igmp_version: buf.force_igmp_version(),
100            arp_announce: buf.arp_announce(),
101            arp_ignore: buf.arp_ignore(),
102            promote_secondaries: buf.promote_secondaries(),
103            arp_accept: buf.arp_accept(),
104            arp_notify: buf.arp_notify(),
105            accept_local: buf.accept_local(),
106            src_vmark: buf.src_vmark(),
107            proxy_arp_pvlan: buf.proxy_arp_pvlan(),
108            route_localnet: buf.route_localnet(),
109            igmpv2_unsolicited_report_interval: buf
110                .igmpv2_unsolicited_report_interval(),
111            igmpv3_unsolicited_report_interval: buf
112                .igmpv3_unsolicited_report_interval(),
113            ignore_routes_with_linkdown: buf.ignore_routes_with_linkdown(),
114            drop_unicast_in_l2_multicast: buf.drop_unicast_in_l2_multicast(),
115            drop_gratuitous_arp: buf.drop_gratuitous_arp(),
116        })
117    }
118}
119
120impl Emitable for InetDevConf {
121    fn buffer_len(&self) -> usize {
122        DEV_CONF_LEN
123    }
124
125    fn emit(&self, buffer: &mut [u8]) {
126        let mut buffer = InetDevConfBuffer::new(buffer);
127        buffer.set_forwarding(self.forwarding);
128        buffer.set_mc_forwarding(self.mc_forwarding);
129        buffer.set_proxy_arp(self.proxy_arp);
130        buffer.set_accept_redirects(self.accept_redirects);
131        buffer.set_secure_redirects(self.secure_redirects);
132        buffer.set_send_redirects(self.send_redirects);
133        buffer.set_shared_media(self.shared_media);
134        buffer.set_rp_filter(self.rp_filter);
135        buffer.set_accept_source_route(self.accept_source_route);
136        buffer.set_bootp_relay(self.bootp_relay);
137        buffer.set_log_martians(self.log_martians);
138        buffer.set_tag(self.tag);
139        buffer.set_arpfilter(self.arpfilter);
140        buffer.set_medium_id(self.medium_id);
141        buffer.set_noxfrm(self.noxfrm);
142        buffer.set_nopolicy(self.nopolicy);
143        buffer.set_force_igmp_version(self.force_igmp_version);
144        buffer.set_arp_announce(self.arp_announce);
145        buffer.set_arp_ignore(self.arp_ignore);
146        buffer.set_promote_secondaries(self.promote_secondaries);
147        buffer.set_arp_accept(self.arp_accept);
148        buffer.set_arp_notify(self.arp_notify);
149        buffer.set_accept_local(self.accept_local);
150        buffer.set_src_vmark(self.src_vmark);
151        buffer.set_proxy_arp_pvlan(self.proxy_arp_pvlan);
152        buffer.set_route_localnet(self.route_localnet);
153        buffer.set_igmpv2_unsolicited_report_interval(
154            self.igmpv2_unsolicited_report_interval,
155        );
156        buffer.set_igmpv3_unsolicited_report_interval(
157            self.igmpv3_unsolicited_report_interval,
158        );
159        buffer
160            .set_ignore_routes_with_linkdown(self.ignore_routes_with_linkdown);
161        buffer.set_drop_unicast_in_l2_multicast(
162            self.drop_unicast_in_l2_multicast,
163        );
164        buffer.set_drop_gratuitous_arp(self.drop_gratuitous_arp);
165    }
166}