Revision control
Copy as Markdown
Other Tools
//! Header: `net/if.h`
//!
use crate::prelude::*;
use crate::IFNAMSIZ;
s! {
pub struct if_data {
pub ifi_type: c_uchar,
pub ifi_addrlen: c_uchar,
pub ifi_hdrlen: c_uchar,
pub ifi_link_state: c_int,
pub ifi_mtu: u64,
pub ifi_metric: u64,
pub ifi_baudrate: u64,
pub ifi_ipackets: u64,
pub ifi_ierrors: u64,
pub ifi_opackets: u64,
pub ifi_oerrors: u64,
pub ifi_collisions: u64,
pub ifi_ibytes: u64,
pub ifi_obytes: u64,
pub ifi_imcasts: u64,
pub ifi_omcasts: u64,
pub ifi_iqdrops: u64,
pub ifi_noproto: u64,
pub ifi_lastchange: crate::timespec,
}
}
pub const LINK_STATE_UNKNOWN: c_int = 0; // link invalid/unknown
pub const LINK_STATE_DOWN: c_int = 1; // link is down
pub const LINK_STATE_UP: c_int = 2; // link is up
pub const IFF_UP: c_int = 0x0001; // interface is up
pub const IFF_BROADCAST: c_int = 0x0002; // broadcast address valid
pub const IFF_DEBUG: c_int = 0x0004; // turn on debugging
pub const IFF_LOOPBACK: c_int = 0x0008; // is a loopback net
pub const IFF_POINTOPOINT: c_int = 0x0010; // interface is point-to-point link
pub const IFF_RUNNING: c_int = 0x0040; // resources allocated
pub const IFF_NOARP: c_int = 0x0080; // no address resolution protocol
pub const IFF_PROMISC: c_int = 0x0100; // receive all packets
pub const IFF_ALLMULTI: c_int = 0x0200; // receive all multicast packets
pub const IFF_OACTIVE: c_int = 0x0400; // transmission in progress
pub const IFF_SIMPLEX: c_int = 0x0800; // can't hear own transmissions
pub const IFF_LINK0: c_int = 0x1000; // per link layer defined bit
pub const IFF_LINK1: c_int = 0x2000; // per link layer defined bit
pub const IFF_LINK2: c_int = 0x4000; // per link layer defined bit
pub const IFF_MULTICAST: c_int = 0x8000; // supports multicast
s! {
#[repr(C, align(8))]
pub struct if_msghdr {
pub ifm_msglen: c_ushort,
pub ifm_version: c_uchar,
pub ifm_type: c_uchar,
pub ifm_addrs: c_int,
pub ifm_flags: c_int,
pub ifm_index: c_ushort,
pub ifm_data: if_data,
}
}
s_no_extra_traits! {
pub struct ifreq {
pub ifr_name: [c_char; IFNAMSIZ],
pub ifr_ifru: __c_anonymous_ifr_ifru,
}
pub union __c_anonymous_ifr_ifru {
pub ifru_addr: crate::sockaddr,
pub ifru_dstaddr: crate::sockaddr,
pub ifru_broadaddr: crate::sockaddr,
pub space: crate::sockaddr_storage,
pub ifru_flags: c_short,
pub ifru_addrflags: c_int,
pub ifru_metrics: c_int,
pub ifru_mtu: c_int,
pub ifru_dlt: c_int,
pub ifru_value: c_uint,
pub ifru_data: *mut c_void,
// buf and buflen are deprecated but they contribute to union size
ifru_b: __c_anonymous_ifr_ifru_ifru_b,
}
struct __c_anonymous_ifr_ifru_ifru_b {
b_buflen: u32,
b_buf: *mut c_void,
}
pub struct ifconf {
pub ifc_len: c_int,
pub ifc_ifcu: __c_anonymous_ifc_ifcu,
}
pub union __c_anonymous_ifc_ifcu {
pub ifcu_buf: *mut c_void,
pub ifcu_req: *mut ifreq,
}
}