std: add some definitions for netlink sockets
parent
6ab156ce7d
commit
648f94c027
|
@ -18,6 +18,8 @@ pub usingnamespace switch (builtin.arch) {
|
|||
else => struct {},
|
||||
};
|
||||
|
||||
pub usingnamespace @import("linux/netlink.zig");
|
||||
|
||||
const is_mips = builtin.arch.isMIPS();
|
||||
|
||||
pub const pid_t = i32;
|
||||
|
@ -30,6 +32,10 @@ pub const NAME_MAX = 255;
|
|||
pub const PATH_MAX = 4096;
|
||||
pub const IOV_MAX = 1024;
|
||||
|
||||
/// Largest hardware address length
|
||||
/// e.g. a mac address is a type of hardware address
|
||||
pub const MAX_ADDR_LEN = 32;
|
||||
|
||||
pub const STDIN_FILENO = 0;
|
||||
pub const STDOUT_FILENO = 1;
|
||||
pub const STDERR_FILENO = 2;
|
||||
|
|
|
@ -0,0 +1,498 @@
|
|||
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,
|
||||
};
|
Loading…
Reference in New Issue