1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 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_MAX 138 }; 139 #define IFLA_MAX (__IFLA_MAX - 1) 140 141 /* 142 * Attributes that can be used as filters: 143 * IFLA_IFNAME, IFLA_GROUP, IFLA_ALT_IFNAME 144 * Headers that can be used as filters: 145 * ifi_index, ifi_type 146 */ 147 148 /* 149 * IFLA_OPERSTATE. 150 * The values below represent the possible 151 * states of ifOperStatus defined by RFC 2863 152 */ 153 enum { 154 IF_OPER_UNKNOWN = 0, /* status can not be determined */ 155 IF_OPER_NOTPRESENT = 1, /* some (hardware) component not present */ 156 IF_OPER_DOWN = 2, /* down */ 157 IF_OPER_LOWERLAYERDOWN = 3, /* some lower-level interface is down */ 158 IF_OPER_TESTING = 4, /* in some test mode */ 159 IF_OPER_DORMANT = 5, /* "up" but waiting for some condition (802.1X) */ 160 IF_OPER_UP = 6, /* ready to pass packets */ 161 }; 162 163 /* IFLA_STATS */ 164 struct rtnl_link_stats { 165 uint32_t rx_packets; /* total RX packets (IFCOUNTER_IPACKETS) */ 166 uint32_t tx_packets; /* total TX packets (IFCOUNTER_OPACKETS) */ 167 uint32_t rx_bytes; /* total RX bytes (IFCOUNTER_IBYTES) */ 168 uint32_t tx_bytes; /* total TX bytes (IFCOUNTER_OBYTES) */ 169 uint32_t rx_errors; /* RX errors (IFCOUNTER_IERRORS) */ 170 uint32_t tx_errors; /* RX errors (IFCOUNTER_OERRORS) */ 171 uint32_t rx_dropped; /* RX drop (no space in ring/no bufs) (IFCOUNTER_IQDROPS) */ 172 uint32_t tx_dropped; /* TX drop (IFCOUNTER_OQDROPS) */ 173 uint32_t multicast; /* RX multicast packets (IFCOUNTER_IMCASTS) */ 174 uint32_t collisions; /* not supported */ 175 uint32_t rx_length_errors; /* not supported */ 176 uint32_t rx_over_errors; /* not supported */ 177 uint32_t rx_crc_errors; /* not supported */ 178 uint32_t rx_frame_errors; /* not supported */ 179 uint32_t rx_fifo_errors; /* not supported */ 180 uint32_t rx_missed_errors; /* not supported */ 181 uint32_t tx_aborted_errors; /* not supported */ 182 uint32_t tx_carrier_errors; /* not supported */ 183 uint32_t tx_fifo_errors; /* not supported */ 184 uint32_t tx_heartbeat_errors; /* not supported */ 185 uint32_t tx_window_errors; /* not supported */ 186 uint32_t rx_compressed; /* not supported */ 187 uint32_t tx_compressed; /* not supported */ 188 uint32_t rx_nohandler; /* dropped due to no proto handler (IFCOUNTER_NOPROTO) */ 189 }; 190 191 /* IFLA_STATS64 */ 192 struct rtnl_link_stats64 { 193 uint64_t rx_packets; /* total RX packets (IFCOUNTER_IPACKETS) */ 194 uint64_t tx_packets; /* total TX packets (IFCOUNTER_OPACKETS) */ 195 uint64_t rx_bytes; /* total RX bytes (IFCOUNTER_IBYTES) */ 196 uint64_t tx_bytes; /* total TX bytes (IFCOUNTER_OBYTES) */ 197 uint64_t rx_errors; /* RX errors (IFCOUNTER_IERRORS) */ 198 uint64_t tx_errors; /* RX errors (IFCOUNTER_OERRORS) */ 199 uint64_t rx_dropped; /* RX drop (no space in ring/no bufs) (IFCOUNTER_IQDROPS) */ 200 uint64_t tx_dropped; /* TX drop (IFCOUNTER_OQDROPS) */ 201 uint64_t multicast; /* RX multicast packets (IFCOUNTER_IMCASTS) */ 202 uint64_t collisions; /* not supported */ 203 uint64_t rx_length_errors; /* not supported */ 204 uint64_t rx_over_errors; /* not supported */ 205 uint64_t rx_crc_errors; /* not supported */ 206 uint64_t rx_frame_errors; /* not supported */ 207 uint64_t rx_fifo_errors; /* not supported */ 208 uint64_t rx_missed_errors; /* not supported */ 209 uint64_t tx_aborted_errors; /* not supported */ 210 uint64_t tx_carrier_errors; /* not supported */ 211 uint64_t tx_fifo_errors; /* not supported */ 212 uint64_t tx_heartbeat_errors; /* not supported */ 213 uint64_t tx_window_errors; /* not supported */ 214 uint64_t rx_compressed; /* not supported */ 215 uint64_t tx_compressed; /* not supported */ 216 uint64_t rx_nohandler; /* dropped due to no proto handler (IFCOUNTER_NOPROTO) */ 217 }; 218 219 /* IFLA_LINKINFO child nlattr types */ 220 enum { 221 IFLA_INFO_UNSPEC, 222 IFLA_INFO_KIND = 1, /* string, link type ("vlan") */ 223 IFLA_INFO_DATA = 2, /* Per-link-type custom data */ 224 IFLA_INFO_XSTATS = 3, 225 IFLA_INFO_SLAVE_KIND = 4, 226 IFLA_INFO_SLAVE_DATA = 5, 227 __IFLA_INFO_MAX, 228 }; 229 #define IFLA_INFO_MAX (__IFLA_INFO_MAX - 1) 230 231 /* IFLA_INFO_DATA vlan attributes */ 232 enum { 233 IFLA_VLAN_UNSPEC, 234 IFLA_VLAN_ID, 235 IFLA_VLAN_FLAGS, 236 IFLA_VLAN_EGRESS_QOS, 237 IFLA_VLAN_INGRESS_QOS, 238 IFLA_VLAN_PROTOCOL, 239 __IFLA_VLAN_MAX, 240 }; 241 242 #define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1) 243 struct ifla_vlan_flags { 244 uint32_t flags; 245 uint32_t mask; 246 }; 247 248 #endif 249