Skip to content

Commit 26971ae

Browse files
authored
Add if_tun module (#165)
1 parent 31b97a9 commit 26971ae

File tree

21 files changed

+5844
-0
lines changed

21 files changed

+5844
-0
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ general = []
4040
if_arp = []
4141
if_ether = []
4242
if_packet = []
43+
if_tun = []
4344
image = []
4445
io_uring = []
4546
ioctl = []

gen/modules/if_tun.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#include "support.h"
2+
3+
#include <linux/if_tun.h>

src/aarch64/if_tun.rs

Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
/* automatically generated by rust-bindgen 0.72.1 */
2+
3+
pub type __s8 = crate::ctypes::c_schar;
4+
pub type __u8 = crate::ctypes::c_uchar;
5+
pub type __s16 = crate::ctypes::c_short;
6+
pub type __u16 = crate::ctypes::c_ushort;
7+
pub type __s32 = crate::ctypes::c_int;
8+
pub type __u32 = crate::ctypes::c_uint;
9+
pub type __s64 = crate::ctypes::c_longlong;
10+
pub type __u64 = crate::ctypes::c_ulonglong;
11+
pub type __kernel_key_t = crate::ctypes::c_int;
12+
pub type __kernel_mqd_t = crate::ctypes::c_int;
13+
pub type __kernel_old_uid_t = crate::ctypes::c_ushort;
14+
pub type __kernel_old_gid_t = crate::ctypes::c_ushort;
15+
pub type __kernel_long_t = crate::ctypes::c_long;
16+
pub type __kernel_ulong_t = crate::ctypes::c_ulong;
17+
pub type __kernel_ino_t = __kernel_ulong_t;
18+
pub type __kernel_mode_t = crate::ctypes::c_uint;
19+
pub type __kernel_pid_t = crate::ctypes::c_int;
20+
pub type __kernel_ipc_pid_t = crate::ctypes::c_int;
21+
pub type __kernel_uid_t = crate::ctypes::c_uint;
22+
pub type __kernel_gid_t = crate::ctypes::c_uint;
23+
pub type __kernel_suseconds_t = __kernel_long_t;
24+
pub type __kernel_daddr_t = crate::ctypes::c_int;
25+
pub type __kernel_uid32_t = crate::ctypes::c_uint;
26+
pub type __kernel_gid32_t = crate::ctypes::c_uint;
27+
pub type __kernel_old_dev_t = crate::ctypes::c_uint;
28+
pub type __kernel_size_t = __kernel_ulong_t;
29+
pub type __kernel_ssize_t = __kernel_long_t;
30+
pub type __kernel_ptrdiff_t = __kernel_long_t;
31+
pub type __kernel_off_t = __kernel_long_t;
32+
pub type __kernel_loff_t = crate::ctypes::c_longlong;
33+
pub type __kernel_old_time_t = __kernel_long_t;
34+
pub type __kernel_time_t = __kernel_long_t;
35+
pub type __kernel_time64_t = crate::ctypes::c_longlong;
36+
pub type __kernel_clock_t = __kernel_long_t;
37+
pub type __kernel_timer_t = crate::ctypes::c_int;
38+
pub type __kernel_clockid_t = crate::ctypes::c_int;
39+
pub type __kernel_caddr_t = *mut crate::ctypes::c_char;
40+
pub type __kernel_uid16_t = crate::ctypes::c_ushort;
41+
pub type __kernel_gid16_t = crate::ctypes::c_ushort;
42+
pub type __s128 = i128;
43+
pub type __u128 = u128;
44+
pub type __le16 = __u16;
45+
pub type __be16 = __u16;
46+
pub type __le32 = __u32;
47+
pub type __be32 = __u32;
48+
pub type __le64 = __u64;
49+
pub type __be64 = __u64;
50+
pub type __sum16 = __u16;
51+
pub type __wsum = __u32;
52+
pub type __poll_t = crate::ctypes::c_uint;
53+
#[repr(C)]
54+
#[derive(Default)]
55+
pub struct __IncompleteArrayField<T>(::core::marker::PhantomData<T>, [T; 0]);
56+
#[repr(C, packed)]
57+
#[derive(Debug, Copy, Clone)]
58+
pub struct ethhdr {
59+
pub h_dest: [crate::ctypes::c_uchar; 6usize],
60+
pub h_source: [crate::ctypes::c_uchar; 6usize],
61+
pub h_proto: __be16,
62+
}
63+
#[repr(C)]
64+
#[derive(Debug, Copy, Clone)]
65+
pub struct sock_filter {
66+
pub code: __u16,
67+
pub jt: __u8,
68+
pub jf: __u8,
69+
pub k: __u32,
70+
}
71+
#[repr(C)]
72+
#[derive(Debug, Copy, Clone)]
73+
pub struct sock_fprog {
74+
pub len: crate::ctypes::c_ushort,
75+
pub filter: *mut sock_filter,
76+
}
77+
#[repr(C)]
78+
#[derive(Debug, Copy, Clone)]
79+
pub struct tun_pi {
80+
pub flags: __u16,
81+
pub proto: __be16,
82+
}
83+
#[repr(C)]
84+
#[derive(Debug)]
85+
pub struct tun_filter {
86+
pub flags: __u16,
87+
pub count: __u16,
88+
pub addr: __IncompleteArrayField<[__u8; 6usize]>,
89+
}
90+
pub const __BITS_PER_LONG_LONG: u32 = 64;
91+
pub const ETH_ALEN: u32 = 6;
92+
pub const ETH_TLEN: u32 = 2;
93+
pub const ETH_HLEN: u32 = 14;
94+
pub const ETH_ZLEN: u32 = 60;
95+
pub const ETH_DATA_LEN: u32 = 1500;
96+
pub const ETH_FRAME_LEN: u32 = 1514;
97+
pub const ETH_FCS_LEN: u32 = 4;
98+
pub const ETH_MIN_MTU: u32 = 68;
99+
pub const ETH_MAX_MTU: u32 = 65535;
100+
pub const ETH_P_LOOP: u32 = 96;
101+
pub const ETH_P_PUP: u32 = 512;
102+
pub const ETH_P_PUPAT: u32 = 513;
103+
pub const ETH_P_TSN: u32 = 8944;
104+
pub const ETH_P_ERSPAN2: u32 = 8939;
105+
pub const ETH_P_IP: u32 = 2048;
106+
pub const ETH_P_X25: u32 = 2053;
107+
pub const ETH_P_ARP: u32 = 2054;
108+
pub const ETH_P_BPQ: u32 = 2303;
109+
pub const ETH_P_IEEEPUP: u32 = 2560;
110+
pub const ETH_P_IEEEPUPAT: u32 = 2561;
111+
pub const ETH_P_BATMAN: u32 = 17157;
112+
pub const ETH_P_DEC: u32 = 24576;
113+
pub const ETH_P_DNA_DL: u32 = 24577;
114+
pub const ETH_P_DNA_RC: u32 = 24578;
115+
pub const ETH_P_DNA_RT: u32 = 24579;
116+
pub const ETH_P_LAT: u32 = 24580;
117+
pub const ETH_P_DIAG: u32 = 24581;
118+
pub const ETH_P_CUST: u32 = 24582;
119+
pub const ETH_P_SCA: u32 = 24583;
120+
pub const ETH_P_TEB: u32 = 25944;
121+
pub const ETH_P_RARP: u32 = 32821;
122+
pub const ETH_P_ATALK: u32 = 32923;
123+
pub const ETH_P_AARP: u32 = 33011;
124+
pub const ETH_P_8021Q: u32 = 33024;
125+
pub const ETH_P_ERSPAN: u32 = 35006;
126+
pub const ETH_P_IPX: u32 = 33079;
127+
pub const ETH_P_IPV6: u32 = 34525;
128+
pub const ETH_P_PAUSE: u32 = 34824;
129+
pub const ETH_P_SLOW: u32 = 34825;
130+
pub const ETH_P_WCCP: u32 = 34878;
131+
pub const ETH_P_MPLS_UC: u32 = 34887;
132+
pub const ETH_P_MPLS_MC: u32 = 34888;
133+
pub const ETH_P_ATMMPOA: u32 = 34892;
134+
pub const ETH_P_PPP_DISC: u32 = 34915;
135+
pub const ETH_P_PPP_SES: u32 = 34916;
136+
pub const ETH_P_LINK_CTL: u32 = 34924;
137+
pub const ETH_P_ATMFATE: u32 = 34948;
138+
pub const ETH_P_PAE: u32 = 34958;
139+
pub const ETH_P_PROFINET: u32 = 34962;
140+
pub const ETH_P_REALTEK: u32 = 34969;
141+
pub const ETH_P_AOE: u32 = 34978;
142+
pub const ETH_P_ETHERCAT: u32 = 34980;
143+
pub const ETH_P_8021AD: u32 = 34984;
144+
pub const ETH_P_802_EX1: u32 = 34997;
145+
pub const ETH_P_PREAUTH: u32 = 35015;
146+
pub const ETH_P_TIPC: u32 = 35018;
147+
pub const ETH_P_LLDP: u32 = 35020;
148+
pub const ETH_P_MRP: u32 = 35043;
149+
pub const ETH_P_MACSEC: u32 = 35045;
150+
pub const ETH_P_8021AH: u32 = 35047;
151+
pub const ETH_P_MVRP: u32 = 35061;
152+
pub const ETH_P_1588: u32 = 35063;
153+
pub const ETH_P_NCSI: u32 = 35064;
154+
pub const ETH_P_PRP: u32 = 35067;
155+
pub const ETH_P_CFM: u32 = 35074;
156+
pub const ETH_P_FCOE: u32 = 35078;
157+
pub const ETH_P_IBOE: u32 = 35093;
158+
pub const ETH_P_TDLS: u32 = 35085;
159+
pub const ETH_P_FIP: u32 = 35092;
160+
pub const ETH_P_80221: u32 = 35095;
161+
pub const ETH_P_HSR: u32 = 35119;
162+
pub const ETH_P_NSH: u32 = 35151;
163+
pub const ETH_P_LOOPBACK: u32 = 36864;
164+
pub const ETH_P_QINQ1: u32 = 37120;
165+
pub const ETH_P_QINQ2: u32 = 37376;
166+
pub const ETH_P_QINQ3: u32 = 37632;
167+
pub const ETH_P_EDSA: u32 = 56026;
168+
pub const ETH_P_DSA_8021Q: u32 = 56027;
169+
pub const ETH_P_DSA_A5PSW: u32 = 57345;
170+
pub const ETH_P_IFE: u32 = 60734;
171+
pub const ETH_P_AF_IUCV: u32 = 64507;
172+
pub const ETH_P_802_3_MIN: u32 = 1536;
173+
pub const ETH_P_802_3: u32 = 1;
174+
pub const ETH_P_AX25: u32 = 2;
175+
pub const ETH_P_ALL: u32 = 3;
176+
pub const ETH_P_802_2: u32 = 4;
177+
pub const ETH_P_SNAP: u32 = 5;
178+
pub const ETH_P_DDCMP: u32 = 6;
179+
pub const ETH_P_WAN_PPP: u32 = 7;
180+
pub const ETH_P_PPP_MP: u32 = 8;
181+
pub const ETH_P_LOCALTALK: u32 = 9;
182+
pub const ETH_P_CAN: u32 = 12;
183+
pub const ETH_P_CANFD: u32 = 13;
184+
pub const ETH_P_CANXL: u32 = 14;
185+
pub const ETH_P_PPPTALK: u32 = 16;
186+
pub const ETH_P_TR_802_2: u32 = 17;
187+
pub const ETH_P_MOBITEX: u32 = 21;
188+
pub const ETH_P_CONTROL: u32 = 22;
189+
pub const ETH_P_IRDA: u32 = 23;
190+
pub const ETH_P_ECONET: u32 = 24;
191+
pub const ETH_P_HDLC: u32 = 25;
192+
pub const ETH_P_ARCNET: u32 = 26;
193+
pub const ETH_P_DSA: u32 = 27;
194+
pub const ETH_P_TRAILER: u32 = 28;
195+
pub const ETH_P_PHONET: u32 = 245;
196+
pub const ETH_P_IEEE802154: u32 = 246;
197+
pub const ETH_P_CAIF: u32 = 247;
198+
pub const ETH_P_XDSA: u32 = 248;
199+
pub const ETH_P_MAP: u32 = 249;
200+
pub const ETH_P_MCTP: u32 = 250;
201+
pub const BPF_LD: u32 = 0;
202+
pub const BPF_LDX: u32 = 1;
203+
pub const BPF_ST: u32 = 2;
204+
pub const BPF_STX: u32 = 3;
205+
pub const BPF_ALU: u32 = 4;
206+
pub const BPF_JMP: u32 = 5;
207+
pub const BPF_RET: u32 = 6;
208+
pub const BPF_MISC: u32 = 7;
209+
pub const BPF_W: u32 = 0;
210+
pub const BPF_H: u32 = 8;
211+
pub const BPF_B: u32 = 16;
212+
pub const BPF_IMM: u32 = 0;
213+
pub const BPF_ABS: u32 = 32;
214+
pub const BPF_IND: u32 = 64;
215+
pub const BPF_MEM: u32 = 96;
216+
pub const BPF_LEN: u32 = 128;
217+
pub const BPF_MSH: u32 = 160;
218+
pub const BPF_ADD: u32 = 0;
219+
pub const BPF_SUB: u32 = 16;
220+
pub const BPF_MUL: u32 = 32;
221+
pub const BPF_DIV: u32 = 48;
222+
pub const BPF_OR: u32 = 64;
223+
pub const BPF_AND: u32 = 80;
224+
pub const BPF_LSH: u32 = 96;
225+
pub const BPF_RSH: u32 = 112;
226+
pub const BPF_NEG: u32 = 128;
227+
pub const BPF_MOD: u32 = 144;
228+
pub const BPF_XOR: u32 = 160;
229+
pub const BPF_JA: u32 = 0;
230+
pub const BPF_JEQ: u32 = 16;
231+
pub const BPF_JGT: u32 = 32;
232+
pub const BPF_JGE: u32 = 48;
233+
pub const BPF_JSET: u32 = 64;
234+
pub const BPF_K: u32 = 0;
235+
pub const BPF_X: u32 = 8;
236+
pub const BPF_MAXINSNS: u32 = 4096;
237+
pub const BPF_MAJOR_VERSION: u32 = 1;
238+
pub const BPF_MINOR_VERSION: u32 = 1;
239+
pub const BPF_A: u32 = 16;
240+
pub const BPF_TAX: u32 = 0;
241+
pub const BPF_TXA: u32 = 128;
242+
pub const BPF_MEMWORDS: u32 = 16;
243+
pub const SKF_AD_OFF: i32 = -4096;
244+
pub const SKF_AD_PROTOCOL: u32 = 0;
245+
pub const SKF_AD_PKTTYPE: u32 = 4;
246+
pub const SKF_AD_IFINDEX: u32 = 8;
247+
pub const SKF_AD_NLATTR: u32 = 12;
248+
pub const SKF_AD_NLATTR_NEST: u32 = 16;
249+
pub const SKF_AD_MARK: u32 = 20;
250+
pub const SKF_AD_QUEUE: u32 = 24;
251+
pub const SKF_AD_HATYPE: u32 = 28;
252+
pub const SKF_AD_RXHASH: u32 = 32;
253+
pub const SKF_AD_CPU: u32 = 36;
254+
pub const SKF_AD_ALU_XOR_X: u32 = 40;
255+
pub const SKF_AD_VLAN_TAG: u32 = 44;
256+
pub const SKF_AD_VLAN_TAG_PRESENT: u32 = 48;
257+
pub const SKF_AD_PAY_OFFSET: u32 = 52;
258+
pub const SKF_AD_RANDOM: u32 = 56;
259+
pub const SKF_AD_VLAN_TPID: u32 = 60;
260+
pub const SKF_AD_MAX: u32 = 64;
261+
pub const SKF_NET_OFF: i32 = -1048576;
262+
pub const SKF_LL_OFF: i32 = -2097152;
263+
pub const BPF_NET_OFF: i32 = -1048576;
264+
pub const BPF_LL_OFF: i32 = -2097152;
265+
pub const TUN_READQ_SIZE: u32 = 500;
266+
pub const TUN_TYPE_MASK: u32 = 15;
267+
pub const IFF_TUN: u32 = 1;
268+
pub const IFF_TAP: u32 = 2;
269+
pub const IFF_NAPI: u32 = 16;
270+
pub const IFF_NAPI_FRAGS: u32 = 32;
271+
pub const IFF_NO_CARRIER: u32 = 64;
272+
pub const IFF_NO_PI: u32 = 4096;
273+
pub const IFF_ONE_QUEUE: u32 = 8192;
274+
pub const IFF_VNET_HDR: u32 = 16384;
275+
pub const IFF_TUN_EXCL: u32 = 32768;
276+
pub const IFF_MULTI_QUEUE: u32 = 256;
277+
pub const IFF_ATTACH_QUEUE: u32 = 512;
278+
pub const IFF_DETACH_QUEUE: u32 = 1024;
279+
pub const IFF_PERSIST: u32 = 2048;
280+
pub const IFF_NOFILTER: u32 = 4096;
281+
pub const TUN_TX_TIMESTAMP: u32 = 1;
282+
pub const TUN_F_CSUM: u32 = 1;
283+
pub const TUN_F_TSO4: u32 = 2;
284+
pub const TUN_F_TSO6: u32 = 4;
285+
pub const TUN_F_TSO_ECN: u32 = 8;
286+
pub const TUN_F_UFO: u32 = 16;
287+
pub const TUN_F_USO4: u32 = 32;
288+
pub const TUN_F_USO6: u32 = 64;
289+
pub const TUN_PKT_STRIP: u32 = 1;
290+
pub const TUN_FLT_ALLMULTI: u32 = 1;
291+
impl<T> __IncompleteArrayField<T> {
292+
#[inline]
293+
pub const fn new() -> Self {
294+
__IncompleteArrayField(::core::marker::PhantomData, [])
295+
}
296+
#[inline]
297+
pub fn as_ptr(&self) -> *const T {
298+
self as *const _ as *const T
299+
}
300+
#[inline]
301+
pub fn as_mut_ptr(&mut self) -> *mut T {
302+
self as *mut _ as *mut T
303+
}
304+
#[inline]
305+
pub unsafe fn as_slice(&self, len: usize) -> &[T] {
306+
::core::slice::from_raw_parts(self.as_ptr(), len)
307+
}
308+
#[inline]
309+
pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
310+
::core::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
311+
}
312+
}
313+
impl<T> ::core::fmt::Debug for __IncompleteArrayField<T> {
314+
fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
315+
fmt.write_str("__IncompleteArrayField")
316+
}
317+
}

0 commit comments

Comments
 (0)