#![allow(non_camel_case_types, non_snake_case)]
use std::mem;
use std::os::raw::*;
#[cfg(target_env = "gnu")]
pub type iovlen = usize;
#[cfg(target_env = "musl")]
pub type iovlen = i32;
#[repr(u32)]
#[derive(Debug, Copy, Clone)]
pub enum netlink_family {
NETLINK_ROUTE = 0,
NETLINK_UNUSED = 1,
NETLINK_USERSOCK = 2,
NETLINK_FIREWALL = 3,
NETLINK_SOCK_DIAG = 4,
NETLINK_NFLOG = 5,
NETLINK_XFRM = 6,
NETLINK_SELINUX = 7,
NETLINK_ISCSI = 8,
NETLINK_AUDIT = 9,
NETLINK_FIB_LOOKUP = 10,
NETLINK_CONNECTOR = 11,
NETLINK_NETFILTER = 12,
NETLINK_IP6_FW = 13,
NETLINK_DNRTMSG = 14,
NETLINK_KOBJECT_UEVENT = 15,
NETLINK_GENERIC = 16,
NETLINK_SCSITRANSPORT = 18,
NETLINK_ECRYPTFS = 19,
NETLINK_RDMA = 20,
NETLINK_CRYPTO = 21,
NETLINK_SMC = 22,
}
pub const AF_UNSPEC: u8 = 0;
pub const AF_UNIX: u8 = 1;
pub const AF_INET: u8 = 2;
pub const AF_INET6: u8 = 10;
pub const IPPROTO_ICMP: u8 = 1;
pub const IPPROTO_IGMP: u8 = 2;
pub const IPPROTO_IPIP: u8 = 4;
pub const IPPROTO_TCP: u8 = 6;
pub const IPPROTO_EGP: u8 = 8;
pub const IPPROTO_PUP: u8 = 12;
pub const IPPROTO_UDP: u8 = 17;
pub const IPPROTO_IDP: u8 = 22;
pub const IPPROTO_TP: u8 = 29;
pub const IPPROTO_DCCP: u8 = 33;
pub const IPPROTO_IPV6: u8 = 41;
pub const IPPROTO_RSVP: u8 = 46;
pub const IPPROTO_GRE: u8 = 47;
pub const IPPROTO_ESP: u8 = 50;
pub const IPPROTO_AH: u8 = 51;
pub const IPPROTO_MTP: u8 = 92;
pub const IPPROTO_BEETPH: u8 = 94;
pub const IPPROTO_ENCAP: u8 = 98;
pub const IPPROTO_PIM: u8 = 103;
pub const IPPROTO_COMP: u8 = 108;
pub const IPPROTO_SCTP: u8 = 132;
pub const IPPROTO_UDPLITE: u8 = 136;
pub const IPPROTO_MPLS: u8 = 137;
pub const IPPROTO_RAW: u8 = 255;
pub const RTM_NEWLINK: u16 = 16;
pub const RTM_DELLINK: u16 = 17;
pub const RTM_GETLINK: u16 = 18;
pub const RTM_SETLINK: u16 = 19;
pub const RTM_NEWADDR: u16 = 20;
pub const RTM_DELADDR: u16 = 21;
pub const RTM_GETADDR: u16 = 22;
pub const RTM_NEWROUTE: u16 = 24;
pub const RTM_DELROUTE: u16 = 25;
pub const RTM_GETROUTE: u16 = 26;
pub const RTM_NEWNEIGH: u16 = 28;
pub const RTM_DELNEIGH: u16 = 29;
pub const RTM_GETNEIGH: u16 = 20;
pub const RTM_NEWRULE: u16 = 32;
pub const RTM_DELRULE: u16 = 31;
pub const RTM_GETRULE: u16 = 32;
pub const RTM_NEWQDISC: u16 = 36;
pub const RTM_DELQDISC: u16 = 33;
pub const RTM_GETQDISC: u16 = 34;
pub const RTM_NEWTCLASS: u16 = 40;
pub const RTM_DELTCLASS: u16 = 41;
pub const RTM_GETTCLASS: u16 = 42;
pub const RTM_NEWTFILTER: u16 = 44;
pub const RTM_DELTFILTER: u16 = 45;
pub const RTM_GETTFILTER: u16 = 46;
pub const RTM_NEWACTION: u16 = 48;
pub const RTM_DELACTION: u16 = 49;
pub const RTM_GETACTION: u16 = 50;
pub const RTM_NEWPREFIX: u16 = 52;
pub const RTM_GETMULTICAST: u16 = 58;
pub const RTM_GETANYCAST: u16 = 62;
pub const RTM_NEWNEIGHTBL: u16 = 64;
pub const RTM_GETNEIGHTBL: u16 = 66;
pub const RTM_SETNEIGHTBL: u16 = 67;
pub const RTM_NEWNDUSEROPT: u16 = 68;
pub const RTM_NEWADDRLABEL: u16 = 72;
pub const RTM_DELADDRLABEL: u16 = 73;
pub const RTM_GETADDRLABEL: u16 = 74;
pub const RTM_GETDCB: u16 = 78;
pub const RTM_SETDCB: u16 = 79;
pub const RTM_NEWNETCONF: u16 = 80;
pub const RTM_DELNETCONF: u16 = 81;
pub const RTM_GETNETCONF: u16 = 82;
pub const RTM_NEWMDB: u16 = 84;
pub const RTM_DELMDB: u16 = 85;
pub const RTM_GETMDB: u16 = 86;
pub const RTM_NEWNSID: u16 = 88;
pub const RTM_DELNSID: u16 = 89;
pub const RTM_GETNSID: u16 = 90;
pub const RTM_NEWSTATS: u16 = 92;
pub const RTM_GETSTATS: u16 = 94;
pub const RTM_NEWCACHEREPORT: u16 = 96;
pub const SOCK_DIAG_BY_FAMILY: u16 = 20;
pub const NLM_F_REQUEST: u16 = 0x01;
pub const NLM_F_MULTI: u16 = 0x02;
pub const NLM_F_ACK: u16 = 0x04;
pub const NLM_F_ECHO: u16 = 0x08;
pub const NLM_F_DUMP_INTR: u16 = 0x10;
pub const NLM_F_DUMP_FILTERED: u16 = 0x20;
pub const NLM_F_ROOT: u16 = 0x100;
pub const NLM_F_MATCH: u16 = 0x200;
pub const NLM_F_ATOMIC: u16 = 0x400;
pub const NLM_F_DUMP: u16 = NLM_F_ROOT|NLM_F_MATCH;
pub const NLM_F_REPLACE: u16 = 0x100;
pub const NLM_F_EXCL: u16 = 0x200;
pub const NLM_F_CREATE: u16 = 0x400;
pub const NLM_F_APPEND: u16 = 0x800;
pub const NLM_F_CAPPED: u16 = 0x100;
pub const NLM_F_ACK_TLVS: u16 = 0x200;
pub const NLMSG_NOOP: u16 = 0x01;
pub const NLMSG_ERROR: u16 = 0x02;
pub const NLMSG_DONE: u16 = 0x03;
pub const NLMSG_OVERRUN: u16 = 0x04;
pub const IFLA_UNSPEC: u16 = 0;
pub const IFLA_ADDRESS: u16 = 1;
pub const IFLA_BROADCAST: u16 = 2;
pub const IFLA_IFNAME: u16 = 3;
pub const IFLA_MTU: u16 = 4;
pub const IFLA_LINK: u16 = 5;
pub const IFLA_QDISC: u16 = 6;
pub const IFLA_STATS: u16 = 7;
pub const IFLA_COST: u16 = 8;
pub const IFLA_PRIORITY: u16 = 9;
pub const IFLA_MASTER: u16 = 10;
pub const IFLA_WIRELESS: u16 = 11;
pub const IFLA_PROTINFO: u16 = 12;
pub const IFLA_TXQLEN: u16 = 13;
pub const IFLA_MAP: u16 = 14;
pub const IFLA_WEIGHT: u16 = 15;
pub const IFLA_OPERSTATE: u16 = 16;
pub const IFLA_LINKMODE: u16 = 17;
pub const IFLA_LINKINFO: u16 = 18;
pub const IFLA_NET_NS_PID: u16 = 19;
pub const IFLA_IFALIAS: u16 = 20;
pub const IFLA_NUM_VF: u16 = 21;
pub const IFLA_VFINFO_LIST: u16 = 22;
pub const IFLA_STATS64: u16 = 23;
pub const IFLA_VF_PORTS: u16 = 24;
pub const IFLA_PORT_SELF: u16 = 25;
pub const IFLA_AF_SPEC: u16 = 26;
pub const IFLA_GROUP: u16 = 27;
pub const IFLA_NET_NS_FD: u16 = 28;
pub const IFLA_EXT_MASK: u16 = 29;
pub const IFLA_PROMISCUITY: u16 = 30;
pub const IFLA_NUM_TX_QUEUES: u16 = 31;
pub const IFLA_NUM_RX_QUEUES: u16 = 32;
pub const IFLA_CARRIER: u16 = 33;
pub const IFLA_PHYS_PORT_ID: u16 = 34;
pub const IFLA_CARRIER_CHANGES:u16 = 35;
pub const IFLA_PHYS_SWITCH_ID: u16 = 36;
pub const IFLA_LINK_NETNSID: u16 = 37;
pub const IFLA_PHYS_PORT_NAME: u16 = 38;
pub const IFLA_PROTO_DOWN: u16 = 39;
pub const IFLA_GSO_MAX_SEGS: u16 = 40;
pub const IFLA_GSO_MAX_SIZE: u16 = 41;
pub const IFLA_PAD: u16 = 42;
pub const IFLA_XDP: u16 = 43;
pub const IFLA_EVENT: u16 = 44;
pub const IFF_UP: c_int = 1 << 0;
pub const IFF_BROADCAST: c_int = 1 << 1;
pub const IFF_DEBUG: c_int = 1 << 2;
pub const IFF_LOOPBACK: c_int = 1 << 3;
pub const IFF_POINTOPOINT: c_int = 1 << 4;
pub const IFF_NOTRAILERS: c_int = 1 << 5;
pub const IFF_RUNNING: c_int = 1 << 6;
pub const IFF_NOARP: c_int = 1 << 7;
pub const IFF_PROMISC: c_int = 1 << 8;
pub const IFF_ALLMULTI: c_int = 1 << 9;
pub const IFF_MASTER: c_int = 1 << 10;
pub const IFF_SLAVE: c_int = 1 << 11;
pub const IFF_MULTICAST: c_int = 1 << 12;
pub const IFF_PORTSEL: c_int = 1 << 13;
pub const IFF_AUTOMEDIA: c_int = 1 << 14;
pub const IFF_DYNAMIC: c_int = 1 << 15;
pub const IFF_LOWER_UP: c_int = 1 << 16;
pub const IFF_DORMANT: c_int = 1 << 17;
pub const IFF_ECHO: c_int = 1 << 18;
pub const NLA_F_NET_BYTEORDER: u16 = 1 << 14;
pub const NLA_F_NESTED: u16 = 1 << 15;
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct nlmsghdr {
pub nlmsg_len: u32,
pub nlmsg_type: u16,
pub nlmsg_flags: u16,
pub nlmsg_seq: u32,
pub nlmsg_pid: u32,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct nlmsgerr {
pub error: c_int,
pub msg: nlmsghdr,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct nlattr {
pub nla_len: u16,
pub nla_type: u16,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct rtattr {
pub rta_len: c_ushort,
pub rta_type: c_ushort,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct rtgenmsg {
pub rtgen_family: c_uchar,
}
pub const TCPF_ESTABLISHED: u16 = 1 << 1;
pub const TCPF_SYN_SENT: u16 = 1 << 2;
pub const TCPF_SYN_RECV: u16 = 1 << 3;
pub const TCPF_FIN_WAIT1: u16 = 1 << 4;
pub const TCPF_FIN_WAIT2: u16 = 1 << 5;
pub const TCPF_TIME_WAIT: u16 = 1 << 6;
pub const TCPF_CLOSE: u16 = 1 << 7;
pub const TCPF_CLOSE_WAIT: u16 = 1 << 8;
pub const TCPF_LAST_ACK: u16 = 1 << 9;
pub const TCPF_LISTEN: u16 = 1 << 10;
pub const TCPF_CLOSING: u16 = 1 << 11;
pub const TCPF_NEW_SYN_RECV: u16 = 1 << 12;
pub const INET_DIAG_NONE: u16 = 0;
pub const INET_DIAG_MEMINFO: u16 = 1;
pub const INET_DIAG_INFO: u16 = 2;
pub const INET_DIAG_VEGASINFO: u16 = 3;
pub const INET_DIAG_CONG: u16 = 4;
pub const INET_DIAG_TOS: u16 = 5;
pub const INET_DIAG_TCLASS: u16 = 6;
pub const INET_DIAG_SKMEMINFO: u16 = 7;
pub const INET_DIAG_SHUTDOWN: u16 = 8;
pub const INET_DIAG_DCTCPINFO: u16 = 9;
pub const INET_DIAG_PROTOCOL: u16 = 10;
pub const INET_DIAG_SKV6ONLY: u16 = 11;
pub const INET_DIAG_LOCALS: u16 = 12;
pub const INET_DIAG_PEERS: u16 = 13;
pub const INET_DIAG_PAD: u16 = 14;
pub const INET_DIAG_MARK: u16 = 15;
pub const INET_DIAG_BBRINFO: u16 = 16;
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct ifinfomsg {
pub ifi_family: c_uchar,
pub __ifi_pad: c_uchar,
pub ifi_type: c_ushort,
pub ifi_index: c_int,
pub ifi_flags: c_uint,
pub ifi_change: c_uint,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct rtnl_link_stats64 {
pub rx_packets: u64,
pub tx_packets: u64,
pub rx_bytes: u64,
pub tx_bytes: u64,
pub rx_errors: u64,
pub tx_errors: u64,
pub rx_dropped: u64,
pub tx_dropped: u64,
pub multicast: u64,
pub collisions: u64,
pub rx_length_errors: u64,
pub rx_over_errors: u64,
pub rx_crc_errors: u64,
pub rx_frame_errors: u64,
pub rx_fifo_errors: u64,
pub rx_missed_errors: u64,
pub tx_aborted_errors: u64,
pub tx_carrier_errors: u64,
pub tx_fifo_errors: u64,
pub tx_heartbeat_errors: u64,
pub tx_window_errors: u64,
pub rx_compressed: u64,
pub tx_compressed: u64,
pub rx_nohandler: u64,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct inet_diag_sockid {
pub idiag_sport: u16,
pub idiag_dport: u16,
pub idiag_src: [u32; 4],
pub idiag_dst: [u32; 4],
pub idiag_if: u32,
pub idiag_cookie: [u32; 2],
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct inet_diag_req_v2 {
pub sdiag_family: u8,
pub sdiag_protocol: u8,
pub idiag_ext: u8,
pub _pad: u8,
pub idiag_states: u32,
pub id: inet_diag_sockid,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct inet_diag_msg {
pub idiag_family: u8,
pub idiag_state: u8,
pub idiag_timer: u8,
pub idiag_retrans: u8,
pub id: inet_diag_sockid,
pub idiag_expires: u32,
pub idiag_rqueue: u32,
pub idiag_wqueue: u32,
pub idiag_uid: u32,
pub idiag_inode: u32,
}
#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct tcp_info {
pub tcpi_state: u8,
pub tcpi_ca_state: u8,
pub tcpi_retransmits: u8,
pub tcpi_probes: u8,
pub tcpi_backoff: u8,
pub tcpi_options: u8,
pub _bitfield_1: [u8; 2usize],
pub tcpi_rto: u32,
pub tcpi_ato: u32,
pub tcpi_snd_mss: u32,
pub tcpi_rcv_mss: u32,
pub tcpi_unacked: u32,
pub tcpi_sacked: u32,
pub tcpi_lost: u32,
pub tcpi_retrans: u32,
pub tcpi_fackets: u32,
pub tcpi_last_data_sent: u32,
pub tcpi_last_ack_sent: u32,
pub tcpi_last_data_recv: u32,
pub tcpi_last_ack_recv: u32,
pub tcpi_pmtu: u32,
pub tcpi_rcv_ssthresh: u32,
pub tcpi_rtt: u32,
pub tcpi_rttvar: u32,
pub tcpi_snd_ssthresh: u32,
pub tcpi_snd_cwnd: u32,
pub tcpi_advmss: u32,
pub tcpi_reordering: u32,
pub tcpi_rcv_rtt: u32,
pub tcpi_rcv_space: u32,
pub tcpi_total_retrans: u32,
pub tcpi_pacing_rate: u64,
pub tcpi_max_pacing_rate: u64,
pub tcpi_bytes_acked: u64,
pub tcpi_bytes_received: u64,
}
pub const XDP_ATTACHED_NONE: u16 = 0;
pub const XDP_ATTACHED_DRV: u16 = 1;
pub const XDP_ATTACHED_SKB: u16 = 2;
pub const XDP_ATTACHED_HW: u16 = 3;
pub const IFLA_XDP_UNSPEC: u16 = 0;
pub const IFLA_XDP_FD: u16 = 1;
pub const IFLA_XDP_ATTACHED: u16 = 2;
pub const IFLA_XDP_FLAGS: u16 = 3;
pub const IFLA_XDP_PROG_ID: u16 = 4;
pub const XDP_FLAGS_SKB_MODE: u32 = 1 << 1;
pub const XDP_FLAGS_DRV_MODE: u32 = 1 << 2;
pub const XDP_FLAGS_HW_MODE: u32 = 1 << 3;
pub fn nlmsg_align(len: u32) -> u32 {
const NLMSG_ALIGNTO: u32 = 4;
(len + NLMSG_ALIGNTO - 1) & !(NLMSG_ALIGNTO - 1)
}
pub fn nlmsg_hdrlen() -> u32 {
nlmsg_align(mem::size_of::<nlmsghdr>() as u32)
}
pub fn nlmsg_length(len: u32) -> u32 {
len + nlmsg_hdrlen()
}