usingnamespace @import("../linux.zig"); /// Routing/device hook pub const NETLINK_ROUTE = 0; /// Unused number pub const NETLINK_UNUSED = 1; /// Reserved for user mode socket protocols pub const NETLINK_USERSOCK = 2; /// Unused number, formerly ip_queue pub const NETLINK_FIREWALL = 3; /// socket monitoring pub const NETLINK_SOCK_DIAG = 4; /// netfilter/iptables ULOG pub const NETLINK_NFLOG = 5; /// ipsec pub const NETLINK_XFRM = 6; /// SELinux event notifications pub const NETLINK_SELINUX = 7; /// Open-iSCSI pub const NETLINK_ISCSI = 8; /// auditing pub const NETLINK_AUDIT = 9; pub const NETLINK_FIB_LOOKUP = 10; pub const NETLINK_CONNECTOR = 11; /// netfilter subsystem pub const NETLINK_NETFILTER = 12; pub const NETLINK_IP6_FW = 13; /// DECnet routing messages pub const NETLINK_DNRTMSG = 14; /// Kernel messages to userspace pub const NETLINK_KOBJECT_UEVENT = 15; pub const NETLINK_GENERIC = 16; // leave room for NETLINK_DM (DM Events) /// SCSI Transports pub const NETLINK_SCSITRANSPORT = 18; pub const NETLINK_ECRYPTFS = 19; pub const NETLINK_RDMA = 20; /// Crypto layer pub const NETLINK_CRYPTO = 21; /// SMC monitoring pub const NETLINK_SMC = 22; // Flags values /// It is request message. pub const NLM_F_REQUEST = 0x01; /// Multipart message, terminated by NLMSG_DONE pub const NLM_F_MULTI = 0x02; /// Reply with ack, with zero or error code pub const NLM_F_ACK = 0x04; /// Echo this request pub const NLM_F_ECHO = 0x08; /// Dump was inconsistent due to sequence change pub const NLM_F_DUMP_INTR = 0x10; /// Dump was filtered as requested pub const NLM_F_DUMP_FILTERED = 0x20; // Modifiers to GET request /// specify tree root pub const NLM_F_ROOT = 0x100; /// return all matching pub const NLM_F_MATCH = 0x200; /// atomic GET pub const NLM_F_ATOMIC = 0x400; pub const NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH; // Modifiers to NEW request /// Override existing pub const NLM_F_REPLACE = 0x100; /// Do not touch, if it exists pub const NLM_F_EXCL = 0x200; /// Create, if it does not exist pub const NLM_F_CREATE = 0x400; /// Add to end of list pub const NLM_F_APPEND = 0x800; // Modifiers to DELETE request /// Do not delete recursively pub const NLM_F_NONREC = 0x100; // Flags for ACK message /// request was capped pub const NLM_F_CAPPED = 0x100; /// extended ACK TVLs were included pub const NLM_F_ACK_TLVS = 0x200; pub const NetlinkMessageType = extern enum(u16) { /// Nothing. NOOP = 0x1, /// Error ERROR = 0x2, /// End of a dump DONE = 0x3, /// Data lost OVERRUN = 0x4, /// < 0x10: reserved control messages pub const MIN_TYPE = 0x10; // rtlink types RTM_NEWLINK = 16, RTM_DELLINK, RTM_GETLINK, RTM_SETLINK, RTM_NEWADDR = 20, RTM_DELADDR, RTM_GETADDR, RTM_NEWROUTE = 24, RTM_DELROUTE, RTM_GETROUTE, RTM_NEWNEIGH = 28, RTM_DELNEIGH, RTM_GETNEIGH, RTM_NEWRULE = 32, RTM_DELRULE, RTM_GETRULE, RTM_NEWQDISC = 36, RTM_DELQDISC, RTM_GETQDISC, RTM_NEWTCLASS = 40, RTM_DELTCLASS, RTM_GETTCLASS, RTM_NEWTFILTER = 44, RTM_DELTFILTER, RTM_GETTFILTER, RTM_NEWACTION = 48, RTM_DELACTION, RTM_GETACTION, RTM_NEWPREFIX = 52, RTM_GETMULTICAST = 58, RTM_GETANYCAST = 62, RTM_NEWNEIGHTBL = 64, RTM_GETNEIGHTBL = 66, RTM_SETNEIGHTBL, RTM_NEWNDUSEROPT = 68, RTM_NEWADDRLABEL = 72, RTM_DELADDRLABEL, RTM_GETADDRLABEL, RTM_GETDCB = 78, RTM_SETDCB, RTM_NEWNETCONF = 80, RTM_DELNETCONF, RTM_GETNETCONF = 82, RTM_NEWMDB = 84, RTM_DELMDB = 85, RTM_GETMDB = 86, RTM_NEWNSID = 88, RTM_DELNSID = 89, RTM_GETNSID = 90, RTM_NEWSTATS = 92, RTM_GETSTATS = 94, RTM_NEWCACHEREPORT = 96, RTM_NEWCHAIN = 100, RTM_DELCHAIN, RTM_GETCHAIN, RTM_NEWNEXTHOP = 104, RTM_DELNEXTHOP, RTM_GETNEXTHOP, _, }; /// Netlink socket address pub const sockaddr_nl = extern struct { family: sa_family_t = AF_NETLINK, __pad1: c_ushort = 0, /// port ID pid: u32, /// multicast groups mask groups: u32, }; /// Netlink message header /// Specified in RFC 3549 Section 2.3.2 pub const nlmsghdr = extern struct { /// Length of message including header len: u32, /// Message content @"type": NetlinkMessageType, /// Additional flags flags: u16, /// Sequence number seq: u32, /// Sending process port ID pid: u32, }; pub const ifinfomsg = extern struct { family: u8, __pad1: u8 = 0, /// ARPHRD_* @"type": c_ushort, /// Link index index: c_int, /// IFF_* flags flags: c_uint, /// IFF_* change mask /// is reserved for future use and should be always set to 0xFFFFFFFF. change: c_uint = 0xFFFFFFFF, }; pub const rtattr = extern struct { /// Length of option len: c_ushort, /// Type of option @"type": IFLA, pub const ALIGNTO = 4; }; pub const IFLA = extern enum(c_ushort) { UNSPEC, ADDRESS, BROADCAST, IFNAME, MTU, LINK, QDISC, STATS, COST, PRIORITY, MASTER, /// Wireless Extension event WIRELESS, /// Protocol specific information for a link PROTINFO, TXQLEN, MAP, WEIGHT, OPERSTATE, LINKMODE, LINKINFO, NET_NS_PID, IFALIAS, /// Number of VFs if device is SR-IOV PF NUM_VF, VFINFO_LIST, STATS64, VF_PORTS, PORT_SELF, AF_SPEC, /// Group the device belongs to GROUP, NET_NS_FD, /// Extended info mask, VFs, etc EXT_MASK, /// Promiscuity count: > 0 means acts PROMISC PROMISCUITY, NUM_TX_QUEUES, NUM_RX_QUEUES, CARRIER, PHYS_PORT_ID, CARRIER_CHANGES, PHYS_SWITCH_ID, LINK_NETNSID, PHYS_PORT_NAME, PROTO_DOWN, GSO_MAX_SEGS, GSO_MAX_SIZE, PAD, XDP, EVENT, NEW_NETNSID, IF_NETNSID = 46, TARGET_NETNSID = 46, // new alias CARRIER_UP_COUNT, CARRIER_DOWN_COUNT, NEW_IFINDEX, MIN_MTU, MAX_MTU, _, }; pub const rtnl_link_ifmap = extern struct { mem_start: u64, mem_end: u64, base_addr: u64, irq: u16, dma: u8, port: u8, }; pub const rtnl_link_stats = extern struct { /// total packets received rx_packets: u32, /// total packets transmitted tx_packets: u32, /// total bytes received rx_bytes: u32, /// total bytes transmitted tx_bytes: u32, /// bad packets received rx_errors: u32, /// packet transmit problems tx_errors: u32, /// no space in linux buffers rx_dropped: u32, /// no space available in linux tx_dropped: u32, /// multicast packets received multicast: u32, collisions: u32, // detailed rx_errors rx_length_errors: u32, /// receiver ring buff overflow rx_over_errors: u32, /// recved pkt with crc error rx_crc_errors: u32, /// recv'd frame alignment error rx_frame_errors: u32, /// recv'r fifo overrun rx_fifo_errors: u32, /// receiver missed packet rx_missed_errors: u32, // detailed tx_errors tx_aborted_errors: u32, tx_carrier_errors: u32, tx_fifo_errors: u32, tx_heartbeat_errors: u32, tx_window_errors: u32, // for cslip etc rx_compressed: u32, tx_compressed: u32, /// dropped, no handler found rx_nohandler: u32, }; pub const rtnl_link_stats64 = extern struct { /// total packets received rx_packets: u64, /// total packets transmitted tx_packets: u64, /// total bytes received rx_bytes: u64, /// total bytes transmitted tx_bytes: u64, /// bad packets received rx_errors: u64, /// packet transmit problems tx_errors: u64, /// no space in linux buffers rx_dropped: u64, /// no space available in linux tx_dropped: u64, /// multicast packets received multicast: u64, collisions: u64, // detailed rx_errors rx_length_errors: u64, /// receiver ring buff overflow rx_over_errors: u64, /// recved pkt with crc error rx_crc_errors: u64, /// recv'd frame alignment error rx_frame_errors: u64, /// recv'r fifo overrun rx_fifo_errors: u64, /// receiver missed packet rx_missed_errors: u64, // detailed tx_errors tx_aborted_errors: u64, tx_carrier_errors: u64, tx_fifo_errors: u64, tx_heartbeat_errors: u64, tx_window_errors: u64, // for cslip etc rx_compressed: u64, tx_compressed: u64, /// dropped, no handler found rx_nohandler: u64, };