1 /* 2 * Copyright (c) 2000-2019 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 /* 29 * Copyright (c) 1982, 1986, 1989, 1993 30 * The Regents of the University of California. All rights reserved. 31 * 32 * Redistribution and use in source and binary forms, with or without 33 * modification, are permitted provided that the following conditions 34 * are met: 35 * 1. Redistributions of source code must retain the above copyright 36 * notice, this list of conditions and the following disclaimer. 37 * 2. Redistributions in binary form must reproduce the above copyright 38 * notice, this list of conditions and the following disclaimer in the 39 * documentation and/or other materials provided with the distribution. 40 * 3. All advertising materials mentioning features or use of this software 41 * must display the following acknowledgement: 42 * This product includes software developed by the University of 43 * California, Berkeley and its contributors. 44 * 4. Neither the name of the University nor the names of its contributors 45 * may be used to endorse or promote products derived from this software 46 * without specific prior written permission. 47 * 48 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 51 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 58 * SUCH DAMAGE. 59 * 60 * From: @(#)if.h 8.1 (Berkeley) 6/10/93 61 * $FreeBSD: src/sys/net/if_var.h,v 1.18.2.7 2001/07/24 19:10:18 brooks Exp $ 62 */ 63 64 #ifndef _NET_IF_VAR_H_ 65 #define _NET_IF_VAR_H_ 66 67 #include <sys/appleapiopts.h> 68 #include <stdint.h> 69 #include <sys/types.h> 70 #include <sys/time.h> 71 #include <sys/queue.h> /* get TAILQ macros */ 72 #ifdef BSD_KERN_PRIVATE 73 #include <sys/eventhandler.h> 74 #endif 75 76 77 #ifdef __APPLE__ 78 #define APPLE_IF_FAM_LOOPBACK 1 79 #define APPLE_IF_FAM_ETHERNET 2 80 #define APPLE_IF_FAM_SLIP 3 81 #define APPLE_IF_FAM_TUN 4 82 #define APPLE_IF_FAM_VLAN 5 83 #define APPLE_IF_FAM_PPP 6 84 #define APPLE_IF_FAM_PVC 7 85 #define APPLE_IF_FAM_DISC 8 86 #define APPLE_IF_FAM_MDECAP 9 87 #define APPLE_IF_FAM_GIF 10 88 #define APPLE_IF_FAM_FAITH 11 /* deprecated */ 89 #define APPLE_IF_FAM_STF 12 90 #define APPLE_IF_FAM_FIREWIRE 13 91 #define APPLE_IF_FAM_BOND 14 92 #define APPLE_IF_FAM_CELLULAR 15 93 #define APPLE_IF_FAM_6LOWPAN 16 94 #define APPLE_IF_FAM_UTUN 17 95 #define APPLE_IF_FAM_IPSEC 18 96 #endif /* __APPLE__ */ 97 98 /* 99 * 72 was chosen below because it is the size of a TCP/IP 100 * header (40) + the minimum mss (32). 101 */ 102 #define IF_MINMTU 72 103 #define IF_MAXMTU 65535 104 105 /* 106 * Structures defining a network interface, providing a packet 107 * transport mechanism (ala level 0 of the PUP protocols). 108 * 109 * Each interface accepts output datagrams of a specified maximum 110 * length, and provides higher level routines with input datagrams 111 * received from its medium. 112 * 113 * Output occurs when the routine if_output is called, with three parameters: 114 * (*ifp->if_output)(ifp, m, dst, rt) 115 * Here m is the mbuf chain to be sent and dst is the destination address. 116 * The output routine encapsulates the supplied datagram if necessary, 117 * and then transmits it on its medium. 118 * 119 * On input, each interface unwraps the data received by it, and either 120 * places it on the input queue of a internetwork datagram routine 121 * and posts the associated software interrupt, or passes the datagram to a raw 122 * packet input routine. 123 * 124 * Routines exist for locating interfaces by their addresses 125 * or for locating a interface on a certain network, as well as more general 126 * routing and gateway routines maintaining information used to locate 127 * interfaces. These routines live in the files if.c and route.c 128 */ 129 130 #define IFNAMSIZ 16 131 132 /* This belongs up in socket.h or socketvar.h, depending on how far the 133 * event bubbles up. 134 */ 135 136 struct net_event_data { 137 u_int32_t if_family; 138 u_int32_t if_unit; 139 char if_name[IFNAMSIZ]; 140 }; 141 142 #if defined(__LP64__) 143 #include <sys/_types/_timeval32.h> 144 #define IF_DATA_TIMEVAL timeval32 145 #else 146 #define IF_DATA_TIMEVAL timeval 147 #endif 148 149 #pragma pack(4) 150 151 /* 152 * Structure describing information about an interface 153 * which may be of interest to management entities. 154 */ 155 struct if_data { 156 /* generic interface information */ 157 u_char ifi_type; /* ethernet, tokenring, etc */ 158 u_char ifi_typelen; /* Length of frame type id */ 159 u_char ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */ 160 u_char ifi_addrlen; /* media address length */ 161 u_char ifi_hdrlen; /* media header length */ 162 u_char ifi_recvquota; /* polling quota for receive intrs */ 163 u_char ifi_xmitquota; /* polling quota for xmit intrs */ 164 u_char ifi_unused1; /* for future use */ 165 u_int32_t ifi_mtu; /* maximum transmission unit */ 166 u_int32_t ifi_metric; /* routing metric (external only) */ 167 u_int32_t ifi_baudrate; /* linespeed */ 168 /* volatile statistics */ 169 u_int32_t ifi_ipackets; /* packets received on interface */ 170 u_int32_t ifi_ierrors; /* input errors on interface */ 171 u_int32_t ifi_opackets; /* packets sent on interface */ 172 u_int32_t ifi_oerrors; /* output errors on interface */ 173 u_int32_t ifi_collisions; /* collisions on csma interfaces */ 174 u_int32_t ifi_ibytes; /* total number of octets received */ 175 u_int32_t ifi_obytes; /* total number of octets sent */ 176 u_int32_t ifi_imcasts; /* packets received via multicast */ 177 u_int32_t ifi_omcasts; /* packets sent via multicast */ 178 u_int32_t ifi_iqdrops; /* dropped on input, this interface */ 179 u_int32_t ifi_noproto; /* destined for unsupported protocol */ 180 u_int32_t ifi_recvtiming; /* usec spent receiving when timing */ 181 u_int32_t ifi_xmittiming; /* usec spent xmitting when timing */ 182 struct IF_DATA_TIMEVAL ifi_lastchange; /* time of last administrative change */ 183 u_int32_t ifi_unused2; /* used to be the default_proto */ 184 u_int32_t ifi_hwassist; /* HW offload capabilities */ 185 u_int32_t ifi_reserved1; /* for future use */ 186 u_int32_t ifi_reserved2; /* for future use */ 187 }; 188 189 /* 190 * Structure describing information about an interface 191 * which may be of interest to management entities. 192 */ 193 struct if_data64 { 194 /* generic interface information */ 195 u_char ifi_type; /* ethernet, tokenring, etc */ 196 u_char ifi_typelen; /* Length of frame type id */ 197 u_char ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */ 198 u_char ifi_addrlen; /* media address length */ 199 u_char ifi_hdrlen; /* media header length */ 200 u_char ifi_recvquota; /* polling quota for receive intrs */ 201 u_char ifi_xmitquota; /* polling quota for xmit intrs */ 202 u_char ifi_unused1; /* for future use */ 203 u_int32_t ifi_mtu; /* maximum transmission unit */ 204 u_int32_t ifi_metric; /* routing metric (external only) */ 205 u_int64_t ifi_baudrate; /* linespeed */ 206 /* volatile statistics */ 207 u_int64_t ifi_ipackets; /* packets received on interface */ 208 u_int64_t ifi_ierrors; /* input errors on interface */ 209 u_int64_t ifi_opackets; /* packets sent on interface */ 210 u_int64_t ifi_oerrors; /* output errors on interface */ 211 u_int64_t ifi_collisions; /* collisions on csma interfaces */ 212 u_int64_t ifi_ibytes; /* total number of octets received */ 213 u_int64_t ifi_obytes; /* total number of octets sent */ 214 u_int64_t ifi_imcasts; /* packets received via multicast */ 215 u_int64_t ifi_omcasts; /* packets sent via multicast */ 216 u_int64_t ifi_iqdrops; /* dropped on input, this interface */ 217 u_int64_t ifi_noproto; /* destined for unsupported protocol */ 218 u_int32_t ifi_recvtiming; /* usec spent receiving when timing */ 219 u_int32_t ifi_xmittiming; /* usec spent xmitting when timing */ 220 struct IF_DATA_TIMEVAL ifi_lastchange; /* time of last administrative change */ 221 }; 222 223 224 #pragma pack() 225 226 /* 227 * Structure defining a queue for a network interface. 228 */ 229 struct ifqueue { 230 void *ifq_head; 231 void *ifq_tail; 232 int ifq_len; 233 int ifq_maxlen; 234 int ifq_drops; 235 }; 236 237 238 239 240 241 242 #endif /* !_NET_IF_VAR_H_ */