github.com/sagernet/gvisor@v0.0.0-20240428053021-e691de28565f/pkg/abi/linux/netlink.go (about) 1 // Copyright 2018 The gVisor Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package linux 16 17 // Netlink protocols, from uapi/linux/netlink.h. 18 const ( 19 NETLINK_ROUTE = 0 20 NETLINK_UNUSED = 1 21 NETLINK_USERSOCK = 2 22 NETLINK_FIREWALL = 3 23 NETLINK_SOCK_DIAG = 4 24 NETLINK_NFLOG = 5 25 NETLINK_XFRM = 6 26 NETLINK_SELINUX = 7 27 NETLINK_ISCSI = 8 28 NETLINK_AUDIT = 9 29 NETLINK_FIB_LOOKUP = 10 30 NETLINK_CONNECTOR = 11 31 NETLINK_NETFILTER = 12 32 NETLINK_IP6_FW = 13 33 NETLINK_DNRTMSG = 14 34 NETLINK_KOBJECT_UEVENT = 15 35 NETLINK_GENERIC = 16 36 NETLINK_SCSITRANSPORT = 18 37 NETLINK_ECRYPTFS = 19 38 NETLINK_RDMA = 20 39 NETLINK_CRYPTO = 21 40 ) 41 42 // SockAddrNetlink is struct sockaddr_nl, from uapi/linux/netlink.h. 43 // 44 // +marshal 45 type SockAddrNetlink struct { 46 Family uint16 47 _ uint16 48 PortID uint32 49 Groups uint32 50 } 51 52 // SockAddrNetlinkSize is the size of SockAddrNetlink. 53 const SockAddrNetlinkSize = 12 54 55 // NetlinkMessageHeader is struct nlmsghdr, from uapi/linux/netlink.h. 56 // 57 // +marshal 58 type NetlinkMessageHeader struct { 59 Length uint32 60 Type uint16 61 Flags uint16 62 Seq uint32 63 PortID uint32 64 } 65 66 // NetlinkMessageHeaderSize is the size of NetlinkMessageHeader. 67 const NetlinkMessageHeaderSize = 16 68 69 // Netlink message header flags, from uapi/linux/netlink.h. 70 const ( 71 NLM_F_REQUEST = 0x1 72 NLM_F_MULTI = 0x2 73 NLM_F_ACK = 0x4 74 NLM_F_ECHO = 0x8 75 NLM_F_DUMP_INTR = 0x10 76 NLM_F_ROOT = 0x100 77 NLM_F_MATCH = 0x200 78 NLM_F_ATOMIC = 0x400 79 NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH 80 NLM_F_REPLACE = 0x100 81 NLM_F_EXCL = 0x200 82 NLM_F_CREATE = 0x400 83 NLM_F_APPEND = 0x800 84 ) 85 86 // Standard netlink message types, from uapi/linux/netlink.h. 87 const ( 88 NLMSG_NOOP = 0x1 89 NLMSG_ERROR = 0x2 90 NLMSG_DONE = 0x3 91 NLMSG_OVERRUN = 0x4 92 93 // NLMSG_MIN_TYPE is the first value for protocol-level types. 94 NLMSG_MIN_TYPE = 0x10 95 ) 96 97 // NLMSG_ALIGNTO is the alignment of netlink messages, from 98 // uapi/linux/netlink.h. 99 const NLMSG_ALIGNTO = 4 100 101 // NetlinkAttrHeader is the header of a netlink attribute, followed by payload. 102 // 103 // This is struct nlattr, from uapi/linux/netlink.h. 104 // 105 // +marshal 106 type NetlinkAttrHeader struct { 107 Length uint16 108 Type uint16 109 } 110 111 // NetlinkAttrHeaderSize is the size of NetlinkAttrHeader. 112 const NetlinkAttrHeaderSize = 4 113 114 // NLA_ALIGNTO is the alignment of netlink attributes, from 115 // uapi/linux/netlink.h. 116 const NLA_ALIGNTO = 4 117 118 // Socket options, from uapi/linux/netlink.h. 119 const ( 120 NETLINK_ADD_MEMBERSHIP = 1 121 NETLINK_DROP_MEMBERSHIP = 2 122 NETLINK_PKTINFO = 3 123 NETLINK_BROADCAST_ERROR = 4 124 NETLINK_NO_ENOBUFS = 5 125 NETLINK_LISTEN_ALL_NSID = 8 126 NETLINK_LIST_MEMBERSHIPS = 9 127 NETLINK_CAP_ACK = 10 128 NETLINK_EXT_ACK = 11 129 NETLINK_DUMP_STRICT_CHK = 12 130 ) 131 132 // NetlinkErrorMessage is struct nlmsgerr, from uapi/linux/netlink.h. 133 // 134 // +marshal 135 type NetlinkErrorMessage struct { 136 Error int32 137 Header NetlinkMessageHeader 138 }