netconfig_rs/sys/posix/
ifreq.rs1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4#![allow(dead_code)]
5
6use super::InterfaceName;
7use crate::error::Error;
8use std::fmt::Debug;
9use std::mem;
10
11#[repr(C)]
12#[derive(Copy, Clone, Default)]
13pub struct ifreq {
14 pub ifr_ifrn: InterfaceName,
15 pub ifr_ifru: ifreq_ifru,
16}
17
18#[repr(C)]
19#[derive(Copy, Clone)]
20pub union ifreq_ifru {
21 pub ifru_addr: libc::sockaddr,
22 pub ifru_dstaddr: libc::sockaddr,
23 pub ifru_broadaddr: libc::sockaddr,
24 pub ifru_netmask: libc::sockaddr,
25 pub ifru_hwaddr: libc::sockaddr,
26 pub ifru_flags: libc::c_short,
27 pub ifru_ivalue: libc::c_int,
28 pub ifru_mtu: libc::c_int,
29 pub ifru_map: ifmap,
30 pub ifru_slave: InterfaceName,
31 pub ifru_newname: InterfaceName,
32 pub ifru_data: *mut libc::c_char,
33 align: [u64; 3usize],
34}
35
36impl Default for ifreq_ifru {
37 fn default() -> Self {
38 unsafe { mem::zeroed() }
39 }
40}
41
42#[repr(C)]
43#[derive(Debug, Copy, Clone, Default)]
44pub struct ifmap {
45 pub mem_start: libc::c_ulong,
46 pub mem_end: libc::c_ulong,
47 pub base_addr: libc::c_ushort,
48 pub irq: libc::c_uchar,
49 pub dma: libc::c_uchar,
50 pub port: libc::c_uchar,
51}
52
53#[repr(C)]
54#[derive(Debug, Copy, Clone)]
55pub struct ifaliasreq<SA> {
56 pub ifra_name: InterfaceName,
57 pub ifra_addr: SA,
58 pub ifra_broadaddr: SA,
59 pub ifra_mask: SA,
60}
61
62pub type ifaliasreq4 = ifaliasreq<libc::sockaddr_in>;
63pub type ifaliasreq6 = ifaliasreq<libc::sockaddr_in6>;
64
65impl ifreq {
66 pub fn new<T: Into<String>>(name: T) -> Result<Self, Error> {
67 Ok(ifreq {
68 ifr_ifrn: InterfaceName::try_from(&*name.into())
69 .map_err(|e| std::io::Error::other(e.to_string()))?,
70 ..Default::default()
71 })
72 }
73}