1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28 /* 29 * Interface-related (RTM_<NEW|DEL|GET|SET>LINK) message header and attributes. 30 */ 31 32 #ifndef _NETLINK_ROUTE_INTERFACE_H_ 33 #define _NETLINK_ROUTE_INTERFACE_H_ 34 35 /* Base header for all of the relevant messages */ 36 struct ifinfomsg { 37 unsigned char ifi_family; /* not used */ 38 unsigned char __ifi_pad; 39 unsigned short ifi_type; /* ARPHRD_* */ 40 int ifi_index; /* Inteface index */ 41 unsigned ifi_flags; /* IFF_* flags */ 42 unsigned ifi_change; /* IFF_* change mask */ 43 }; 44 45 /* Linux-specific link-level state flag */ 46 #define IFF_LOWER_UP IFF_NETLINK_1 47 48 #ifndef _KERNEL 49 /* Compatilbility helpers */ 50 #define _IFINFO_HDRLEN ((int)sizeof(struct ifinfomsg)) 51 #define IFLA_RTA(_ifi) ((struct rtattr *)NL_ITEM_DATA(_ifi, _IFINFO_HDRLEN)) 52 #define IFLA_PAYLOAD(_ifi) NLMSG_PAYLOAD(_ifi, _IFINFO_HDRLEN) 53 #endif 54 55 enum { 56 IFLA_UNSPEC = 0, 57 IFLA_ADDRESS = 1, /* binary: Link-level address (MAC) */ 58 #define IFLA_ADDRESS IFLA_ADDRESS 59 IFLA_BROADCAST = 2, /* binary: link-level broadcast address */ 60 #define IFLA_BROADCAST IFLA_BROADCAST 61 IFLA_IFNAME = 3, /* string: Interface name */ 62 #define IFLA_IFNAME IFLA_IFNAME 63 IFLA_MTU = 4, /* u32: Current interface L3 mtu */ 64 #define IFLA_MTU IFLA_MTU 65 IFLA_LINK = 5, /* u32: interface index */ 66 #define IFLA_LINK IFLA_LINK 67 IFLA_QDISC = 6, /* string: Queing policy (not supported) */ 68 #define IFLA_QDISC IFLA_QDISC 69 IFLA_STATS = 7, /* Interface counters */ 70 #define IFLA_STATS IFLA_STATS 71 IFLA_COST = 8, /* not supported */ 72 #define IFLA_COST IFLA_COST 73 IFLA_PRIORITY = 9, /* not supported */ 74 #define IFLA_PRIORITY IFLA_PRIORITY 75 IFLA_MASTER = 10, /* u32: parent interface ifindex */ 76 #define IFLA_MASTER IFLA_MASTER 77 IFLA_WIRELESS = 11, /* not supported */ 78 #define IFLA_WIRELESS IFLA_WIRELESS 79 IFLA_PROTINFO = 12, /* protocol-specific data */ 80 #define IFLA_PROTINFO IFLA_PROTINFO 81 IFLA_TXQLEN = 13, /* u32: transmit queue length */ 82 #define IFLA_TXQLEN IFLA_TXQLEN 83 IFLA_MAP = 14, /* not supported */ 84 #define IFLA_MAP IFLA_MAP 85 IFLA_WEIGHT = 15, /* not supported */ 86 #define IFLA_WEIGHT IFLA_WEIGHT 87 IFLA_OPERSTATE = 16, /* u8: ifOperStatus per RFC 2863 */ 88 #define IFLA_OPERSTATE IFLA_OPERSTATE 89 IFLA_LINKMODE = 17, /* u8: ifmedia (not supported) */ 90 #define IFLA_LINKMODE IFLA_LINKMODE 91 IFLA_LINKINFO = 18, /* nested: IFLA_INFO_ */ 92 #define IFLA_LINKINFO IFLA_LINKINFO 93 IFLA_NET_NS_PID = 19, /* u32: vnet id (not supported) */ 94 #define IFLA_NET_NS_PID IFLA_NET_NS_PID 95 IFLA_IFALIAS = 20, /* string: interface description */ 96 #define IFLA_IFALIAS IFLA_IFALIAS 97 IFLA_NUM_VF = 21, /* not supported */ 98 #define IFLA_NUM_VF IFLA_NUM_VF 99 IFLA_VFINFO_LIST= 22, /* not supported */ 100 #define IFLA_VFINFO_LIST IFLA_VFINFO_LIST 101 IFLA_STATS64 = 23, /* rtnl_link_stats64: iface stats */ 102 #define IFLA_STATS64 IFLA_STATS64 103 IFLA_VF_PORTS, 104 IFLA_PORT_SELF, 105 IFLA_AF_SPEC, 106 IFLA_GROUP, /* Group the device belongs to */ 107 IFLA_NET_NS_FD, 108 IFLA_EXT_MASK, /* Extended info mask, VFs, etc */ 109 IFLA_PROMISCUITY, /* Promiscuity count: > 0 means acts PROMISC */ 110 #define IFLA_PROMISCUITY IFLA_PROMISCUITY 111 IFLA_NUM_TX_QUEUES, 112 IFLA_NUM_RX_QUEUES, 113 IFLA_CARRIER, 114 IFLA_PHYS_PORT_ID, 115 IFLA_CARRIER_CHANGES, 116 IFLA_PHYS_SWITCH_ID, 117 IFLA_LINK_NETNSID, 118 IFLA_PHYS_PORT_NAME, 119 IFLA_PROTO_DOWN, 120 IFLA_GSO_MAX_SEGS, 121 IFLA_GSO_MAX_SIZE, 122 IFLA_PAD, 123 IFLA_XDP, 124 IFLA_EVENT, 125 IFLA_NEW_NETNSID, 126 IFLA_IF_NETNSID, 127 IFLA_TARGET_NETNSID = IFLA_IF_NETNSID, /* new alias */ 128 IFLA_CARRIER_UP_COUNT, 129 IFLA_CARRIER_DOWN_COUNT, 130 IFLA_NEW_IFINDEX, 131 IFLA_MIN_MTU, 132 IFLA_MAX_MTU, 133 IFLA_PROP_LIST, 134 IFLA_ALT_IFNAME, /* Alternative ifname */ 135 IFLA_PERM_ADDRESS, 136 IFLA_PROTO_DOWN_REASON, 137 IFLA_PARENT_DEV_NAME, 138 IFLA_PARENT_DEV_BUS_NAME, 139 IFLA_GRO_MAX_SIZE, 140 IFLA_TSO_MAX_SEGS, 141 IFLA_ALLMULTI, 142 IFLA_DEVLINK_PORT, 143 IFLA_GSO_IPV4_MAX_SIZE, 144 IFLA_GRO_IPV4_MAX_SIZE, 145 IFLA_FREEBSD, 146 __IFLA_MAX 147 }; 148 #define IFLA_MAX (__IFLA_MAX - 1) 149 150 enum { 151 IFLAF_UNSPEC = 0, 152 IFLAF_ORIG_IFNAME = 1, /* string, original interface name at creation */ 153 IFLAF_ORIG_HWADDR = 2, /* binary, original hardware address */ 154 IFLAF_CAPS = 3, /* bitset, interface capabilities */ 155 __IFLAF_MAX 156 }; 157 #define IFLAF_MAX (__IFLAF_MAX - 1) 158 159 /* 160 * Attributes that can be used as filters: 161 * IFLA_IFNAME, IFLA_GROUP, IFLA_ALT_IFNAME 162 * Headers that can be used as filters: 163 * ifi_index, ifi_type 164 */ 165 166 /* 167 * IFLA_OPERSTATE. 168 * The values below represent the possible 169 * states of ifOperStatus defined by RFC 2863 170 */ 171 enum { 172 IF_OPER_UNKNOWN = 0, /* status can not be determined */ 173 IF_OPER_NOTPRESENT = 1, /* some (hardware) component not present */ 174 IF_OPER_DOWN = 2, /* down */ 175 IF_OPER_LOWERLAYERDOWN = 3, /* some lower-level interface is down */ 176 IF_OPER_TESTING = 4, /* in some test mode */ 177 IF_OPER_DORMANT = 5, /* "up" but waiting for some condition (802.1X) */ 178 IF_OPER_UP = 6, /* ready to pass packets */ 179 }; 180 181 /* IFLA_STATS */ 182 struct rtnl_link_stats { 183 uint32_t rx_packets; /* total RX packets (IFCOUNTER_IPACKETS) */ 184 uint32_t tx_packets; /* total TX packets (IFCOUNTER_OPACKETS) */ 185 uint32_t rx_bytes; /* total RX bytes (IFCOUNTER_IBYTES) */ 186 uint32_t tx_bytes; /* total TX bytes (IFCOUNTER_OBYTES) */ 187 uint32_t rx_errors; /* RX errors (IFCOUNTER_IERRORS) */ 188 uint32_t tx_errors; /* RX errors (IFCOUNTER_OERRORS) */ 189 uint32_t rx_dropped; /* RX drop (no space in ring/no bufs) (IFCOUNTER_IQDROPS) */ 190 uint32_t tx_dropped; /* TX drop (IFCOUNTER_OQDROPS) */ 191 uint32_t multicast; /* RX multicast packets (IFCOUNTER_IMCASTS) */ 192 uint32_t collisions; /* not supported */ 193 uint32_t rx_length_errors; /* not supported */ 194 uint32_t rx_over_errors; /* not supported */ 195 uint32_t rx_crc_errors; /* not supported */ 196 uint32_t rx_frame_errors; /* not supported */ 197 uint32_t rx_fifo_errors; /* not supported */ 198 uint32_t rx_missed_errors; /* not supported */ 199 uint32_t tx_aborted_errors; /* not supported */ 200 uint32_t tx_carrier_errors; /* not supported */ 201 uint32_t tx_fifo_errors; /* not supported */ 202 uint32_t tx_heartbeat_errors; /* not supported */ 203 uint32_t tx_window_errors; /* not supported */ 204 uint32_t rx_compressed; /* not supported */ 205 uint32_t tx_compressed; /* not supported */ 206 uint32_t rx_nohandler; /* dropped due to no proto handler (IFCOUNTER_NOPROTO) */ 207 }; 208 209 /* IFLA_STATS64 */ 210 struct rtnl_link_stats64 { 211 uint64_t rx_packets; /* total RX packets (IFCOUNTER_IPACKETS) */ 212 uint64_t tx_packets; /* total TX packets (IFCOUNTER_OPACKETS) */ 213 uint64_t rx_bytes; /* total RX bytes (IFCOUNTER_IBYTES) */ 214 uint64_t tx_bytes; /* total TX bytes (IFCOUNTER_OBYTES) */ 215 uint64_t rx_errors; /* RX errors (IFCOUNTER_IERRORS) */ 216 uint64_t tx_errors; /* RX errors (IFCOUNTER_OERRORS) */ 217 uint64_t rx_dropped; /* RX drop (no space in ring/no bufs) (IFCOUNTER_IQDROPS) */ 218 uint64_t tx_dropped; /* TX drop (IFCOUNTER_OQDROPS) */ 219 uint64_t multicast; /* RX multicast packets (IFCOUNTER_IMCASTS) */ 220 uint64_t collisions; /* not supported */ 221 uint64_t rx_length_errors; /* not supported */ 222 uint64_t rx_over_errors; /* not supported */ 223 uint64_t rx_crc_errors; /* not supported */ 224 uint64_t rx_frame_errors; /* not supported */ 225 uint64_t rx_fifo_errors; /* not supported */ 226 uint64_t rx_missed_errors; /* not supported */ 227 uint64_t tx_aborted_errors; /* not supported */ 228 uint64_t tx_carrier_errors; /* not supported */ 229 uint64_t tx_fifo_errors; /* not supported */ 230 uint64_t tx_heartbeat_errors; /* not supported */ 231 uint64_t tx_window_errors; /* not supported */ 232 uint64_t rx_compressed; /* not supported */ 233 uint64_t tx_compressed; /* not supported */ 234 uint64_t rx_nohandler; /* dropped due to no proto handler (IFCOUNTER_NOPROTO) */ 235 }; 236 237 /* IFLA_LINKINFO child nlattr types */ 238 enum { 239 IFLA_INFO_UNSPEC, 240 IFLA_INFO_KIND = 1, /* string, link type ("vlan") */ 241 IFLA_INFO_DATA = 2, /* Per-link-type custom data */ 242 IFLA_INFO_XSTATS = 3, 243 IFLA_INFO_SLAVE_KIND = 4, 244 IFLA_INFO_SLAVE_DATA = 5, 245 __IFLA_INFO_MAX, 246 }; 247 #define IFLA_INFO_MAX (__IFLA_INFO_MAX - 1) 248 249 /* IFLA_INFO_DATA vlan attributes */ 250 enum { 251 IFLA_VLAN_UNSPEC, 252 IFLA_VLAN_ID, 253 IFLA_VLAN_FLAGS, 254 IFLA_VLAN_EGRESS_QOS, 255 IFLA_VLAN_INGRESS_QOS, 256 IFLA_VLAN_PROTOCOL, 257 __IFLA_VLAN_MAX, 258 }; 259 260 #define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1) 261 struct ifla_vlan_flags { 262 uint32_t flags; 263 uint32_t mask; 264 }; 265 266 #endif 267