1*aca3beaaSApple OSS Distributions /* 2*aca3beaaSApple OSS Distributions * Copyright (c) 2000-2021 Apple Inc. All rights reserved. 3*aca3beaaSApple OSS Distributions * 4*aca3beaaSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5*aca3beaaSApple OSS Distributions * 6*aca3beaaSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7*aca3beaaSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8*aca3beaaSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9*aca3beaaSApple OSS Distributions * compliance with the License. The rights granted to you under the License 10*aca3beaaSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 11*aca3beaaSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 12*aca3beaaSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 13*aca3beaaSApple OSS Distributions * terms of an Apple operating system software license agreement. 14*aca3beaaSApple OSS Distributions * 15*aca3beaaSApple OSS Distributions * Please obtain a copy of the License at 16*aca3beaaSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 17*aca3beaaSApple OSS Distributions * 18*aca3beaaSApple OSS Distributions * The Original Code and all software distributed under the License are 19*aca3beaaSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20*aca3beaaSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21*aca3beaaSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22*aca3beaaSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23*aca3beaaSApple OSS Distributions * Please see the License for the specific language governing rights and 24*aca3beaaSApple OSS Distributions * limitations under the License. 25*aca3beaaSApple OSS Distributions * 26*aca3beaaSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27*aca3beaaSApple OSS Distributions */ 28*aca3beaaSApple OSS Distributions /* 29*aca3beaaSApple OSS Distributions * Copyright (c) 1982, 1986, 1989, 1993 30*aca3beaaSApple OSS Distributions * The Regents of the University of California. All rights reserved. 31*aca3beaaSApple OSS Distributions * 32*aca3beaaSApple OSS Distributions * Redistribution and use in source and binary forms, with or without 33*aca3beaaSApple OSS Distributions * modification, are permitted provided that the following conditions 34*aca3beaaSApple OSS Distributions * are met: 35*aca3beaaSApple OSS Distributions * 1. Redistributions of source code must retain the above copyright 36*aca3beaaSApple OSS Distributions * notice, this list of conditions and the following disclaimer. 37*aca3beaaSApple OSS Distributions * 2. Redistributions in binary form must reproduce the above copyright 38*aca3beaaSApple OSS Distributions * notice, this list of conditions and the following disclaimer in the 39*aca3beaaSApple OSS Distributions * documentation and/or other materials provided with the distribution. 40*aca3beaaSApple OSS Distributions * 3. All advertising materials mentioning features or use of this software 41*aca3beaaSApple OSS Distributions * must display the following acknowledgement: 42*aca3beaaSApple OSS Distributions * This product includes software developed by the University of 43*aca3beaaSApple OSS Distributions * California, Berkeley and its contributors. 44*aca3beaaSApple OSS Distributions * 4. Neither the name of the University nor the names of its contributors 45*aca3beaaSApple OSS Distributions * may be used to endorse or promote products derived from this software 46*aca3beaaSApple OSS Distributions * without specific prior written permission. 47*aca3beaaSApple OSS Distributions * 48*aca3beaaSApple OSS Distributions * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 49*aca3beaaSApple OSS Distributions * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 50*aca3beaaSApple OSS Distributions * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 51*aca3beaaSApple OSS Distributions * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 52*aca3beaaSApple OSS Distributions * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 53*aca3beaaSApple OSS Distributions * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 54*aca3beaaSApple OSS Distributions * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 55*aca3beaaSApple OSS Distributions * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 56*aca3beaaSApple OSS Distributions * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 57*aca3beaaSApple OSS Distributions * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 58*aca3beaaSApple OSS Distributions * SUCH DAMAGE. 59*aca3beaaSApple OSS Distributions * 60*aca3beaaSApple OSS Distributions * From: @(#)if.h 8.1 (Berkeley) 6/10/93 61*aca3beaaSApple OSS Distributions * $FreeBSD: src/sys/net/if_var.h,v 1.18.2.7 2001/07/24 19:10:18 brooks Exp $ 62*aca3beaaSApple OSS Distributions */ 63*aca3beaaSApple OSS Distributions 64*aca3beaaSApple OSS Distributions #ifndef _NET_IF_VAR_STATUS_H_ 65*aca3beaaSApple OSS Distributions #define _NET_IF_VAR_STATUS_H_ 66*aca3beaaSApple OSS Distributions 67*aca3beaaSApple OSS Distributions #include <machine/types.h> 68*aca3beaaSApple OSS Distributions #include <stdint.h> 69*aca3beaaSApple OSS Distributions 70*aca3beaaSApple OSS Distributions #pragma pack(4) 71*aca3beaaSApple OSS Distributions 72*aca3beaaSApple OSS Distributions /* 73*aca3beaaSApple OSS Distributions * Interface link status report -- includes statistics related to 74*aca3beaaSApple OSS Distributions * the link layer technology sent by the driver. The driver will monitor 75*aca3beaaSApple OSS Distributions * these statistics over an interval (3-4 secs) and will generate a report 76*aca3beaaSApple OSS Distributions * to the network stack. This will give first-hand information about the 77*aca3beaaSApple OSS Distributions * status of the first hop of the network path. The version and 78*aca3beaaSApple OSS Distributions * length values should be correct for the data to be processed correctly. 79*aca3beaaSApple OSS Distributions * The definitions are different for different kind of interfaces like 80*aca3beaaSApple OSS Distributions * Wifi, Cellular etc,. 81*aca3beaaSApple OSS Distributions */ 82*aca3beaaSApple OSS Distributions #define IF_CELLULAR_STATUS_REPORT_VERSION_1 1 83*aca3beaaSApple OSS Distributions #define IF_WIFI_STATUS_REPORT_VERSION_1 1 84*aca3beaaSApple OSS Distributions #define IF_CELLULAR_STATUS_REPORT_CURRENT_VERSION \ 85*aca3beaaSApple OSS Distributions IF_CELLULAR_STATUS_REPORT_VERSION_1 86*aca3beaaSApple OSS Distributions #define IF_WIFI_STATUS_REPORT_CURRENT_VERSION IF_WIFI_STATUS_REPORT_VERSION_1 87*aca3beaaSApple OSS Distributions /* 88*aca3beaaSApple OSS Distributions * For cellular interface -- 89*aca3beaaSApple OSS Distributions * There is no way to share common headers between the Baseband and 90*aca3beaaSApple OSS Distributions * the kernel. Any changes to this structure will need to be communicated 91*aca3beaaSApple OSS Distributions * to the Baseband team. It is better to use reserved space instead of 92*aca3beaaSApple OSS Distributions * changing the size or existing fields in the structure. 93*aca3beaaSApple OSS Distributions */ 94*aca3beaaSApple OSS Distributions struct if_cellular_status_v1 { 95*aca3beaaSApple OSS Distributions u_int32_t valid_bitmask; /* indicates which fields are valid */ 96*aca3beaaSApple OSS Distributions #define IF_CELL_LINK_QUALITY_METRIC_VALID 0x1 97*aca3beaaSApple OSS Distributions #define IF_CELL_UL_EFFECTIVE_BANDWIDTH_VALID 0x2 98*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MAX_BANDWIDTH_VALID 0x4 99*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MIN_LATENCY_VALID 0x8 100*aca3beaaSApple OSS Distributions #define IF_CELL_UL_EFFECTIVE_LATENCY_VALID 0x10 101*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MAX_LATENCY_VALID 0x20 102*aca3beaaSApple OSS Distributions #define IF_CELL_UL_RETXT_LEVEL_VALID 0x40 103*aca3beaaSApple OSS Distributions #define IF_CELL_UL_BYTES_LOST_VALID 0x80 104*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MIN_QUEUE_SIZE_VALID 0x100 105*aca3beaaSApple OSS Distributions #define IF_CELL_UL_AVG_QUEUE_SIZE_VALID 0x200 106*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MAX_QUEUE_SIZE_VALID 0x400 107*aca3beaaSApple OSS Distributions #define IF_CELL_DL_EFFECTIVE_BANDWIDTH_VALID 0x800 108*aca3beaaSApple OSS Distributions #define IF_CELL_DL_MAX_BANDWIDTH_VALID 0x1000 109*aca3beaaSApple OSS Distributions #define IF_CELL_CONFIG_INACTIVITY_TIME_VALID 0x2000 110*aca3beaaSApple OSS Distributions #define IF_CELL_CONFIG_BACKOFF_TIME_VALID 0x4000 111*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MSS_RECOMMENDED_VALID 0x8000 112*aca3beaaSApple OSS Distributions 113*aca3beaaSApple OSS Distributions u_int32_t link_quality_metric; 114*aca3beaaSApple OSS Distributions u_int32_t ul_effective_bandwidth; /* Measured uplink bandwidth based on current activity (bps) */ 115*aca3beaaSApple OSS Distributions u_int32_t ul_max_bandwidth; /* Maximum supported uplink bandwidth (bps) */ 116*aca3beaaSApple OSS Distributions u_int32_t ul_min_latency; /* min expected uplink latency for first hop (ms) */ 117*aca3beaaSApple OSS Distributions u_int32_t ul_effective_latency; /* current expected uplink latency for first hop (ms) */ 118*aca3beaaSApple OSS Distributions u_int32_t ul_max_latency; /* max expected uplink latency first hop (ms) */ 119*aca3beaaSApple OSS Distributions u_int32_t ul_retxt_level; /* Retransmission metric */ 120*aca3beaaSApple OSS Distributions #define IF_CELL_UL_RETXT_LEVEL_NONE 1 121*aca3beaaSApple OSS Distributions #define IF_CELL_UL_RETXT_LEVEL_LOW 2 122*aca3beaaSApple OSS Distributions #define IF_CELL_UL_RETXT_LEVEL_MEDIUM 3 123*aca3beaaSApple OSS Distributions #define IF_CELL_UL_RETXT_LEVEL_HIGH 4 124*aca3beaaSApple OSS Distributions u_int32_t ul_bytes_lost; /* % of total bytes lost on uplink in Q10 format */ 125*aca3beaaSApple OSS Distributions u_int32_t ul_min_queue_size; /* minimum bytes in queue */ 126*aca3beaaSApple OSS Distributions u_int32_t ul_avg_queue_size; /* average bytes in queue */ 127*aca3beaaSApple OSS Distributions u_int32_t ul_max_queue_size; /* maximum bytes in queue */ 128*aca3beaaSApple OSS Distributions u_int32_t dl_effective_bandwidth; /* Measured downlink bandwidth based on current activity (bps) */ 129*aca3beaaSApple OSS Distributions u_int32_t dl_max_bandwidth; /* Maximum supported downlink bandwidth (bps) */ 130*aca3beaaSApple OSS Distributions u_int32_t config_inactivity_time; /* ms */ 131*aca3beaaSApple OSS Distributions u_int32_t config_backoff_time; /* new connections backoff time in ms */ 132*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MSS_RECOMMENDED_NONE 0x0 /* Use default */ 133*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MSS_RECOMMENDED_MEDIUM 0x1 /* 1200 byte MSS */ 134*aca3beaaSApple OSS Distributions #define IF_CELL_UL_MSS_RECOMMENDED_LOW 0x2 /* 512 byte MSS */ 135*aca3beaaSApple OSS Distributions u_int16_t mss_recommended; 136*aca3beaaSApple OSS Distributions u_int16_t reserved_1; 137*aca3beaaSApple OSS Distributions u_int32_t reserved_2; 138*aca3beaaSApple OSS Distributions u_int64_t reserved_3; 139*aca3beaaSApple OSS Distributions u_int64_t reserved_4; 140*aca3beaaSApple OSS Distributions u_int64_t reserved_5; 141*aca3beaaSApple OSS Distributions u_int64_t reserved_6; 142*aca3beaaSApple OSS Distributions } __attribute__((packed)); 143*aca3beaaSApple OSS Distributions 144*aca3beaaSApple OSS Distributions struct if_cellular_status { 145*aca3beaaSApple OSS Distributions union { 146*aca3beaaSApple OSS Distributions struct if_cellular_status_v1 if_status_v1; 147*aca3beaaSApple OSS Distributions } if_cell_u; 148*aca3beaaSApple OSS Distributions }; 149*aca3beaaSApple OSS Distributions 150*aca3beaaSApple OSS Distributions /* 151*aca3beaaSApple OSS Distributions * These statistics will be provided by the Wifi driver periodically. 152*aca3beaaSApple OSS Distributions * After sending each report, the driver should start computing again 153*aca3beaaSApple OSS Distributions * for the next report duration so that the values represent the link 154*aca3beaaSApple OSS Distributions * status for one report duration. 155*aca3beaaSApple OSS Distributions */ 156*aca3beaaSApple OSS Distributions 157*aca3beaaSApple OSS Distributions struct if_wifi_status_v1 { 158*aca3beaaSApple OSS Distributions u_int32_t valid_bitmask; 159*aca3beaaSApple OSS Distributions #define IF_WIFI_LINK_QUALITY_METRIC_VALID 0x1 160*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_EFFECTIVE_BANDWIDTH_VALID 0x2 161*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_MAX_BANDWIDTH_VALID 0x4 162*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_MIN_LATENCY_VALID 0x8 163*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_EFFECTIVE_LATENCY_VALID 0x10 164*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_MAX_LATENCY_VALID 0x20 165*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_RETXT_LEVEL_VALID 0x40 166*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_ERROR_RATE_VALID 0x80 167*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_BYTES_LOST_VALID 0x100 168*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_EFFECTIVE_BANDWIDTH_VALID 0x200 169*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_MAX_BANDWIDTH_VALID 0x400 170*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_MIN_LATENCY_VALID 0x800 171*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_EFFECTIVE_LATENCY_VALID 0x1000 172*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_MAX_LATENCY_VALID 0x2000 173*aca3beaaSApple OSS Distributions #define IF_WIFI_DL_ERROR_RATE_VALID 0x4000 174*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_FREQUENCY_VALID 0x8000 175*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_MULTICAST_RATE_VALID 0x10000 176*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_SCAN_COUNT_VALID 0x20000 177*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_SCAN_DURATION_VALID 0x40000 178*aca3beaaSApple OSS Distributions u_int32_t link_quality_metric; /* link quality metric */ 179*aca3beaaSApple OSS Distributions u_int32_t ul_effective_bandwidth; /* Measured uplink bandwidth based on current activity (bps) */ 180*aca3beaaSApple OSS Distributions u_int32_t ul_max_bandwidth; /* Maximum supported uplink bandwidth (bps) */ 181*aca3beaaSApple OSS Distributions u_int32_t ul_min_latency; /* min expected uplink latency for first hop (ms) */ 182*aca3beaaSApple OSS Distributions u_int32_t ul_effective_latency; /* current expected uplink latency for first hop (ms) */ 183*aca3beaaSApple OSS Distributions u_int32_t ul_max_latency; /* max expected uplink latency for first hop (ms) */ 184*aca3beaaSApple OSS Distributions u_int32_t ul_retxt_level; /* Retransmission metric */ 185*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_RETXT_LEVEL_NONE 1 186*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_RETXT_LEVEL_LOW 2 187*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_RETXT_LEVEL_MEDIUM 3 188*aca3beaaSApple OSS Distributions #define IF_WIFI_UL_RETXT_LEVEL_HIGH 4 189*aca3beaaSApple OSS Distributions u_int32_t ul_bytes_lost; /* % of total bytes lost on uplink in Q10 format */ 190*aca3beaaSApple OSS Distributions u_int32_t ul_error_rate; /* % of bytes dropped on uplink after many retransmissions in Q10 format */ 191*aca3beaaSApple OSS Distributions u_int32_t dl_effective_bandwidth; /* Measured downlink bandwidth based on current activity (bps) */ 192*aca3beaaSApple OSS Distributions u_int32_t dl_max_bandwidth; /* Maximum supported downlink bandwidth (bps) */ 193*aca3beaaSApple OSS Distributions /* 194*aca3beaaSApple OSS Distributions * The download latency values indicate the time AP may have to wait for the 195*aca3beaaSApple OSS Distributions * driver to receive the packet. These values give the range of expected latency 196*aca3beaaSApple OSS Distributions * mainly due to co-existence events and channel hopping where the interface 197*aca3beaaSApple OSS Distributions * becomes unavailable. 198*aca3beaaSApple OSS Distributions */ 199*aca3beaaSApple OSS Distributions u_int32_t dl_min_latency; /* min expected latency for first hop in ms */ 200*aca3beaaSApple OSS Distributions u_int32_t dl_effective_latency; /* current expected latency for first hop in ms */ 201*aca3beaaSApple OSS Distributions u_int32_t dl_max_latency; /* max expected latency for first hop in ms */ 202*aca3beaaSApple OSS Distributions u_int32_t dl_error_rate; /* % of CRC or other errors in Q10 format */ 203*aca3beaaSApple OSS Distributions u_int32_t config_frequency; /* 2.4 or 5 GHz */ 204*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_FREQUENCY_2_4_GHZ 1 205*aca3beaaSApple OSS Distributions #define IF_WIFI_CONFIG_FREQUENCY_5_0_GHZ 2 206*aca3beaaSApple OSS Distributions u_int32_t config_multicast_rate; /* bps */ 207*aca3beaaSApple OSS Distributions u_int32_t scan_count; /* scan count during the previous period */ 208*aca3beaaSApple OSS Distributions u_int32_t scan_duration; /* scan duration in ms */ 209*aca3beaaSApple OSS Distributions u_int64_t reserved_1; 210*aca3beaaSApple OSS Distributions u_int64_t reserved_2; 211*aca3beaaSApple OSS Distributions u_int64_t reserved_3; 212*aca3beaaSApple OSS Distributions u_int64_t reserved_4; 213*aca3beaaSApple OSS Distributions } __attribute__((packed)); 214*aca3beaaSApple OSS Distributions 215*aca3beaaSApple OSS Distributions struct if_wifi_status { 216*aca3beaaSApple OSS Distributions union { 217*aca3beaaSApple OSS Distributions struct if_wifi_status_v1 if_status_v1; 218*aca3beaaSApple OSS Distributions } if_wifi_u; 219*aca3beaaSApple OSS Distributions }; 220*aca3beaaSApple OSS Distributions 221*aca3beaaSApple OSS Distributions struct if_link_status { 222*aca3beaaSApple OSS Distributions u_int32_t ifsr_version; /* version of this report */ 223*aca3beaaSApple OSS Distributions u_int32_t ifsr_len; /* length of the following struct */ 224*aca3beaaSApple OSS Distributions union { 225*aca3beaaSApple OSS Distributions struct if_cellular_status ifsr_cell; 226*aca3beaaSApple OSS Distributions struct if_wifi_status ifsr_wifi; 227*aca3beaaSApple OSS Distributions } ifsr_u; 228*aca3beaaSApple OSS Distributions }; 229*aca3beaaSApple OSS Distributions 230*aca3beaaSApple OSS Distributions /* 231*aca3beaaSApple OSS Distributions * This structure is used to define the parameters for advisory notifications 232*aca3beaaSApple OSS Distributions * on an interface. 233*aca3beaaSApple OSS Distributions */ 234*aca3beaaSApple OSS Distributions #pragma pack(push, 1) 235*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_version : uint8_t { 236*aca3beaaSApple OSS Distributions /* 237*aca3beaaSApple OSS Distributions * Initial version with interface advisory report for WiFi interface. 238*aca3beaaSApple OSS Distributions */ 239*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_VERSION_1 = 1, 240*aca3beaaSApple OSS Distributions #if XNU_KERNEL_PRIVATE 241*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_VERSION_MIN = IF_INTERFACE_ADVISORY_VERSION_1, 242*aca3beaaSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */ 243*aca3beaaSApple OSS Distributions /* 244*aca3beaaSApple OSS Distributions * Reorganized the interface advisory structure to separate out 245*aca3beaaSApple OSS Distributions * WiFi and Cellular interface specific reports. 246*aca3beaaSApple OSS Distributions */ 247*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_VERSION_2 = 2, 248*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_VERSION_CURRENT = IF_INTERFACE_ADVISORY_VERSION_2, 249*aca3beaaSApple OSS Distributions #if XNU_KERNEL_PRIVATE 250*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_VERSION_MAX = IF_INTERFACE_ADVISORY_VERSION_2, 251*aca3beaaSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */ 252*aca3beaaSApple OSS Distributions }; 253*aca3beaaSApple OSS Distributions 254*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_direction : uint8_t { 255*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_DIRECTION_TX = 1, 256*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_DIRECTION_RX = 2, 257*aca3beaaSApple OSS Distributions }; 258*aca3beaaSApple OSS Distributions 259*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_interface_type : uint8_t { 260*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_WIFI = 1, 261*aca3beaaSApple OSS Distributions #if XNU_KERNEL_PRIVATE 262*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_MIN = 263*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_WIFI, 264*aca3beaaSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */ 265*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_CELL = 2, 266*aca3beaaSApple OSS Distributions #if XNU_KERNEL_PRIVATE 267*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_MAX = 268*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_INTERFACE_TYPE_CELL, 269*aca3beaaSApple OSS Distributions #endif /* XNU_KERNEL_PRIVATE */ 270*aca3beaaSApple OSS Distributions }; 271*aca3beaaSApple OSS Distributions 272*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_header { 273*aca3beaaSApple OSS Distributions /* The current structure version */ 274*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_version version; 275*aca3beaaSApple OSS Distributions /* Specifies if the advisory is for transmit or receive path */ 276*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_direction direction; 277*aca3beaaSApple OSS Distributions /* Interface type */ 278*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_interface_type interface_type; 279*aca3beaaSApple OSS Distributions /* reserved for future use */ 280*aca3beaaSApple OSS Distributions uint8_t reserved; 281*aca3beaaSApple OSS Distributions }; 282*aca3beaaSApple OSS Distributions 283*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_rate_trend : int32_t { 284*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_RATE_SUGGESTION_RAMP_UP = INT32_MAX, 285*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_RATE_SUGGESTION_RAMP_DOWN = INT32_MIN, 286*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_RATE_SUGGESTION_RAMP_NEUTRAL = 0, 287*aca3beaaSApple OSS Distributions }; 288*aca3beaaSApple OSS Distributions 289*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_capacity { 290*aca3beaaSApple OSS Distributions /* 291*aca3beaaSApple OSS Distributions * suggestion for data rate change to keep the latency low. 292*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 293*aca3beaaSApple OSS Distributions * NOTE: if the interface cannot provide suggestions in 294*aca3beaaSApple OSS Distributions * terms of bps, it should use the following values: 295*aca3beaaSApple OSS Distributions * INT32_MAX : ramp up 296*aca3beaaSApple OSS Distributions * INT32_MIN : ramp down 297*aca3beaaSApple OSS Distributions * 0 : neutral 298*aca3beaaSApple OSS Distributions */ 299*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_rate_trend rate_trend_suggestion; 300*aca3beaaSApple OSS Distributions /* 301*aca3beaaSApple OSS Distributions * Time of the issue of advisory. 302*aca3beaaSApple OSS Distributions * Timestamp should be in the host domain. 303*aca3beaaSApple OSS Distributions * unit: mach absolute time 304*aca3beaaSApple OSS Distributions */ 305*aca3beaaSApple OSS Distributions uint64_t timestamp; 306*aca3beaaSApple OSS Distributions /* 307*aca3beaaSApple OSS Distributions * Maximum theoretical bandwidth of the interface. 308*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 309*aca3beaaSApple OSS Distributions */ 310*aca3beaaSApple OSS Distributions uint64_t max_bandwidth; 311*aca3beaaSApple OSS Distributions /* 312*aca3beaaSApple OSS Distributions * Total bytes sent or received on the interface. 313*aca3beaaSApple OSS Distributions * wrap around possible and the application should account for that. 314*aca3beaaSApple OSS Distributions * unit: byte 315*aca3beaaSApple OSS Distributions */ 316*aca3beaaSApple OSS Distributions uint64_t total_byte_count; 317*aca3beaaSApple OSS Distributions /* 318*aca3beaaSApple OSS Distributions * average throughput observed at the driver stack. 319*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 320*aca3beaaSApple OSS Distributions */ 321*aca3beaaSApple OSS Distributions uint64_t average_throughput; 322*aca3beaaSApple OSS Distributions /* 323*aca3beaaSApple OSS Distributions * flushable queue size at the driver. 324*aca3beaaSApple OSS Distributions * should be set to UINT32_MAX if not available. 325*aca3beaaSApple OSS Distributions * unit: byte 326*aca3beaaSApple OSS Distributions */ 327*aca3beaaSApple OSS Distributions uint32_t flushable_queue_size; 328*aca3beaaSApple OSS Distributions /* 329*aca3beaaSApple OSS Distributions * non flushable queue size at the driver. 330*aca3beaaSApple OSS Distributions * should be set to UINT32_MAX if not available. 331*aca3beaaSApple OSS Distributions * unit: byte 332*aca3beaaSApple OSS Distributions */ 333*aca3beaaSApple OSS Distributions uint32_t non_flushable_queue_size; 334*aca3beaaSApple OSS Distributions /* 335*aca3beaaSApple OSS Distributions * average delay observed at the interface. 336*aca3beaaSApple OSS Distributions * unit: milliseconds (ms) 337*aca3beaaSApple OSS Distributions */ 338*aca3beaaSApple OSS Distributions uint32_t average_delay; 339*aca3beaaSApple OSS Distributions }; 340*aca3beaaSApple OSS Distributions 341*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_wifi_freq_band : uint8_t { 342*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_FREQ_BAND_NOT_AVAIL = 0, 343*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_FREQ_BAND_WIFI_24GHZ = 1, 344*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_FREQ_BAND_WIFI_5GHZ = 2, 345*aca3beaaSApple OSS Distributions IF_INTERFACE_ADVISORY_FREQ_BAND_WIFI_6GHZ = 3, 346*aca3beaaSApple OSS Distributions }; 347*aca3beaaSApple OSS Distributions 348*aca3beaaSApple OSS Distributions /* 349*aca3beaaSApple OSS Distributions * This structure is used to define the parameters for advisory notifications 350*aca3beaaSApple OSS Distributions * that are specific for WiFi interface. 351*aca3beaaSApple OSS Distributions */ 352*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_wifi_context { 353*aca3beaaSApple OSS Distributions /* 354*aca3beaaSApple OSS Distributions * Current frequency band (enumeration). 355*aca3beaaSApple OSS Distributions */ 356*aca3beaaSApple OSS Distributions enum ifnet_interface_advisory_wifi_freq_band frequency_band; 357*aca3beaaSApple OSS Distributions /* 358*aca3beaaSApple OSS Distributions * Intermittent WiFi state [true(1)/false(0)] 359*aca3beaaSApple OSS Distributions */ 360*aca3beaaSApple OSS Distributions uint8_t intermittent_state; 361*aca3beaaSApple OSS Distributions /* 362*aca3beaaSApple OSS Distributions * Estimated period for which intermittent state is expected to last. 363*aca3beaaSApple OSS Distributions * 1 tick -> 1 ms UNDEF => UINT16_MAX 364*aca3beaaSApple OSS Distributions */ 365*aca3beaaSApple OSS Distributions uint16_t estimated_intermittent_period; 366*aca3beaaSApple OSS Distributions /* 367*aca3beaaSApple OSS Distributions * Expected wifi outage period during intermittent state 368*aca3beaaSApple OSS Distributions * 1 tick -> 1 ms UNDEF => UINT16_MAX 369*aca3beaaSApple OSS Distributions */ 370*aca3beaaSApple OSS Distributions uint16_t single_outage_period; 371*aca3beaaSApple OSS Distributions /* 372*aca3beaaSApple OSS Distributions * WiFi-BT coexistence, 1-ON, 0-OFF 373*aca3beaaSApple OSS Distributions */ 374*aca3beaaSApple OSS Distributions uint8_t bt_coex; 375*aca3beaaSApple OSS Distributions /* 376*aca3beaaSApple OSS Distributions * on scale of 1 to 5 377*aca3beaaSApple OSS Distributions */ 378*aca3beaaSApple OSS Distributions uint8_t quality_score_delay; 379*aca3beaaSApple OSS Distributions /* 380*aca3beaaSApple OSS Distributions * on scale of 1 to 5 381*aca3beaaSApple OSS Distributions */ 382*aca3beaaSApple OSS Distributions uint8_t quality_score_loss; 383*aca3beaaSApple OSS Distributions /* 384*aca3beaaSApple OSS Distributions * on scale of 1 to 5 385*aca3beaaSApple OSS Distributions */ 386*aca3beaaSApple OSS Distributions uint8_t quality_score_channel; 387*aca3beaaSApple OSS Distributions /* 388*aca3beaaSApple OSS Distributions * bitmap of all radio contenders. 389*aca3beaaSApple OSS Distributions */ 390*aca3beaaSApple OSS Distributions #define IF_INTERFACE_ADVISORY_WIFI_RADIO_COEX_BT 0x01 391*aca3beaaSApple OSS Distributions #define IF_INTERFACE_ADVISORY_WIFI_RADIO_COEX_AWDL 0x02 392*aca3beaaSApple OSS Distributions uint8_t radio_coex; 393*aca3beaaSApple OSS Distributions /* 394*aca3beaaSApple OSS Distributions * time available to WiFi since last notification (in ms). 395*aca3beaaSApple OSS Distributions */ 396*aca3beaaSApple OSS Distributions uint16_t wlan_duty_cycle; 397*aca3beaaSApple OSS Distributions /* 398*aca3beaaSApple OSS Distributions * bitrate information for each queue (in Kbps). 399*aca3beaaSApple OSS Distributions */ 400*aca3beaaSApple OSS Distributions #define IF_INTERFACE_ADVISORY_WIFI_TX_QUEUE_COUNT 6 401*aca3beaaSApple OSS Distributions uint32_t wifi_observed_tx_bitrate[IF_INTERFACE_ADVISORY_WIFI_TX_QUEUE_COUNT]; 402*aca3beaaSApple OSS Distributions }; 403*aca3beaaSApple OSS Distributions 404*aca3beaaSApple OSS Distributions /* 405*aca3beaaSApple OSS Distributions * This structure is used to define the parameters for advisory notifications 406*aca3beaaSApple OSS Distributions * that are specific for Cellular interface. 407*aca3beaaSApple OSS Distributions */ 408*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_cell_context { 409*aca3beaaSApple OSS Distributions /* 410*aca3beaaSApple OSS Distributions * Radio Access Technology 411*aca3beaaSApple OSS Distributions */ 412*aca3beaaSApple OSS Distributions uint8_t radio_access_technology; 413*aca3beaaSApple OSS Distributions /* 414*aca3beaaSApple OSS Distributions * Received Reference Signal Received level (RSRP dBm) 415*aca3beaaSApple OSS Distributions */ 416*aca3beaaSApple OSS Distributions int16_t reference_signal_level; 417*aca3beaaSApple OSS Distributions /* 418*aca3beaaSApple OSS Distributions * Received Signal strength level (RSSI dBm) 419*aca3beaaSApple OSS Distributions */ 420*aca3beaaSApple OSS Distributions int16_t signal_level; 421*aca3beaaSApple OSS Distributions /* 422*aca3beaaSApple OSS Distributions * Received signal quality (SNR dB). 423*aca3beaaSApple OSS Distributions */ 424*aca3beaaSApple OSS Distributions int8_t signal_quality; 425*aca3beaaSApple OSS Distributions /* 426*aca3beaaSApple OSS Distributions * Uplink Block Error Rate % 427*aca3beaaSApple OSS Distributions */ 428*aca3beaaSApple OSS Distributions uint8_t uplink_bler; 429*aca3beaaSApple OSS Distributions /* 430*aca3beaaSApple OSS Distributions * Downlink Block Error Rate % 431*aca3beaaSApple OSS Distributions */ 432*aca3beaaSApple OSS Distributions uint8_t downlink_bler; 433*aca3beaaSApple OSS Distributions /* 434*aca3beaaSApple OSS Distributions * Bandwidth Limitation Type. I.e. TTI-B. 435*aca3beaaSApple OSS Distributions */ 436*aca3beaaSApple OSS Distributions uint8_t bandwidth_limitation_indication; 437*aca3beaaSApple OSS Distributions /* 438*aca3beaaSApple OSS Distributions * Discontinuous reception state: CDRX on/off. 439*aca3beaaSApple OSS Distributions */ 440*aca3beaaSApple OSS Distributions uint8_t cdrx_state; 441*aca3beaaSApple OSS Distributions /* 442*aca3beaaSApple OSS Distributions * Discontinuous reception cycle in ms. 443*aca3beaaSApple OSS Distributions */ 444*aca3beaaSApple OSS Distributions uint16_t cdrx_cycle; 445*aca3beaaSApple OSS Distributions /* 446*aca3beaaSApple OSS Distributions * Approximate outage period when not known 447*aca3beaaSApple OSS Distributions */ 448*aca3beaaSApple OSS Distributions uint16_t estimated_outage_period; 449*aca3beaaSApple OSS Distributions /* 450*aca3beaaSApple OSS Distributions * Cellular outage state: i.e. handover in progress. 451*aca3beaaSApple OSS Distributions * 0 - no outage 452*aca3beaaSApple OSS Distributions * 1 - outage. 453*aca3beaaSApple OSS Distributions */ 454*aca3beaaSApple OSS Distributions #define IF_INTERFACE_ADVISORY_CELL_OUTAGE_STATE_NO 0 455*aca3beaaSApple OSS Distributions #define IF_INTERFACE_ADVISORY_CELL_OUTAGE_STATE_YES 1 456*aca3beaaSApple OSS Distributions uint8_t outage_state; 457*aca3beaaSApple OSS Distributions /* 458*aca3beaaSApple OSS Distributions * padding for alignment. 459*aca3beaaSApple OSS Distributions */ 460*aca3beaaSApple OSS Distributions uint8_t __pad; 461*aca3beaaSApple OSS Distributions }; 462*aca3beaaSApple OSS Distributions 463*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory { 464*aca3beaaSApple OSS Distributions union { 465*aca3beaaSApple OSS Distributions struct { /* version 1 structure (to be deprecated) */ 466*aca3beaaSApple OSS Distributions /* The current structure version */ 467*aca3beaaSApple OSS Distributions uint8_t version; 468*aca3beaaSApple OSS Distributions /* Specifies if the advisory is for transmit or receive path */ 469*aca3beaaSApple OSS Distributions uint8_t direction; 470*aca3beaaSApple OSS Distributions /* reserved for future use */ 471*aca3beaaSApple OSS Distributions uint16_t _reserved; 472*aca3beaaSApple OSS Distributions /* 473*aca3beaaSApple OSS Distributions * suggestion for data rate change to keep the latency low. 474*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 475*aca3beaaSApple OSS Distributions * NOTE: if the interface cannot provide suggestions in terms of bps, 476*aca3beaaSApple OSS Distributions * it should use the following values: 477*aca3beaaSApple OSS Distributions * INT32_MAX : ramp up 478*aca3beaaSApple OSS Distributions * INT32_MIN : ramp down 479*aca3beaaSApple OSS Distributions * 0 : neutral 480*aca3beaaSApple OSS Distributions */ 481*aca3beaaSApple OSS Distributions int32_t rate_trend_suggestion; 482*aca3beaaSApple OSS Distributions /* 483*aca3beaaSApple OSS Distributions * Time of the issue of advisory. 484*aca3beaaSApple OSS Distributions * Timestamp should be in the host domain. 485*aca3beaaSApple OSS Distributions * unit: mach absolute time 486*aca3beaaSApple OSS Distributions */ 487*aca3beaaSApple OSS Distributions uint64_t timestamp; 488*aca3beaaSApple OSS Distributions /* 489*aca3beaaSApple OSS Distributions * Maximum theoretical bandwidth of the interface. 490*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 491*aca3beaaSApple OSS Distributions */ 492*aca3beaaSApple OSS Distributions uint64_t max_bandwidth; 493*aca3beaaSApple OSS Distributions /* 494*aca3beaaSApple OSS Distributions * Total bytes sent or received on the interface. 495*aca3beaaSApple OSS Distributions * wrap around possible and the application should account for that. 496*aca3beaaSApple OSS Distributions * unit: byte 497*aca3beaaSApple OSS Distributions */ 498*aca3beaaSApple OSS Distributions uint64_t total_byte_count; 499*aca3beaaSApple OSS Distributions /* 500*aca3beaaSApple OSS Distributions * average throughput observed at the driver stack. 501*aca3beaaSApple OSS Distributions * unit: bits per second (bps) 502*aca3beaaSApple OSS Distributions */ 503*aca3beaaSApple OSS Distributions uint64_t average_throughput; 504*aca3beaaSApple OSS Distributions /* 505*aca3beaaSApple OSS Distributions * flushable queue size at the driver. 506*aca3beaaSApple OSS Distributions * should be set to UINT32_MAX if not available. 507*aca3beaaSApple OSS Distributions * unit: byte 508*aca3beaaSApple OSS Distributions */ 509*aca3beaaSApple OSS Distributions uint32_t flushable_queue_size; 510*aca3beaaSApple OSS Distributions /* 511*aca3beaaSApple OSS Distributions * non flushable queue size at the driver. 512*aca3beaaSApple OSS Distributions * should be set to UINT32_MAX if not available. 513*aca3beaaSApple OSS Distributions * unit: byte 514*aca3beaaSApple OSS Distributions */ 515*aca3beaaSApple OSS Distributions uint32_t non_flushable_queue_size; 516*aca3beaaSApple OSS Distributions /* 517*aca3beaaSApple OSS Distributions * average delay observed at the interface. 518*aca3beaaSApple OSS Distributions * unit: milliseconds (ms) 519*aca3beaaSApple OSS Distributions */ 520*aca3beaaSApple OSS Distributions uint32_t average_delay; 521*aca3beaaSApple OSS Distributions /* 522*aca3beaaSApple OSS Distributions * Current frequency band (enumeration). 523*aca3beaaSApple OSS Distributions */ 524*aca3beaaSApple OSS Distributions uint8_t frequency_band; 525*aca3beaaSApple OSS Distributions /* 526*aca3beaaSApple OSS Distributions * Intermittent WiFi state [true(1)/false(0)] 527*aca3beaaSApple OSS Distributions */ 528*aca3beaaSApple OSS Distributions uint8_t intermittent_state; 529*aca3beaaSApple OSS Distributions /* 530*aca3beaaSApple OSS Distributions * Estimated period for which intermittent state is expected to last. 531*aca3beaaSApple OSS Distributions * 1 tick -> 1 ms UNDEF => UINT16_MAX 532*aca3beaaSApple OSS Distributions */ 533*aca3beaaSApple OSS Distributions uint16_t estimated_intermittent_period; 534*aca3beaaSApple OSS Distributions /* 535*aca3beaaSApple OSS Distributions * Expected wifi outage period during intermittent state 536*aca3beaaSApple OSS Distributions * 1 tick -> 1 ms UNDEF => UINT16_MAX 537*aca3beaaSApple OSS Distributions */ 538*aca3beaaSApple OSS Distributions uint16_t single_outage_period; 539*aca3beaaSApple OSS Distributions 540*aca3beaaSApple OSS Distributions /* 541*aca3beaaSApple OSS Distributions * WiFi-BT coexistence, 1-ON, 0-OFF 542*aca3beaaSApple OSS Distributions */ 543*aca3beaaSApple OSS Distributions uint8_t bt_coex; 544*aca3beaaSApple OSS Distributions /* 545*aca3beaaSApple OSS Distributions * on scale of 1 to 5 546*aca3beaaSApple OSS Distributions */ 547*aca3beaaSApple OSS Distributions uint8_t quality_score_delay; 548*aca3beaaSApple OSS Distributions /* 549*aca3beaaSApple OSS Distributions * on scale of 1 to 5 550*aca3beaaSApple OSS Distributions */ 551*aca3beaaSApple OSS Distributions uint8_t quality_score_loss; 552*aca3beaaSApple OSS Distributions /* 553*aca3beaaSApple OSS Distributions * on scale of 1 to 5 554*aca3beaaSApple OSS Distributions */ 555*aca3beaaSApple OSS Distributions uint8_t quality_score_channel; 556*aca3beaaSApple OSS Distributions }; 557*aca3beaaSApple OSS Distributions 558*aca3beaaSApple OSS Distributions struct { /* version 2 structure */ 559*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_header header; 560*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_capacity capacity; 561*aca3beaaSApple OSS Distributions union { 562*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_wifi_context wifi_context; 563*aca3beaaSApple OSS Distributions struct ifnet_interface_advisory_cell_context cell_context; 564*aca3beaaSApple OSS Distributions }; 565*aca3beaaSApple OSS Distributions }; 566*aca3beaaSApple OSS Distributions }; 567*aca3beaaSApple OSS Distributions } __attribute__((aligned(sizeof(uint64_t)))); 568*aca3beaaSApple OSS Distributions #pragma pack(pop) 569*aca3beaaSApple OSS Distributions 570*aca3beaaSApple OSS Distributions /* 571*aca3beaaSApple OSS Distributions * Definitions related to traffic steering 572*aca3beaaSApple OSS Distributions */ 573*aca3beaaSApple OSS Distributions #pragma pack(push, 1) 574*aca3beaaSApple OSS Distributions 575*aca3beaaSApple OSS Distributions /* Supported types */ 576*aca3beaaSApple OSS Distributions /* Reserving 1 for link layer */ 577*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_TYPE_INET 2 578*aca3beaaSApple OSS Distributions 579*aca3beaaSApple OSS Distributions /* Supported flags */ 580*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_FLAG_INBOUND 0x0001 581*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_FLAG_OUTBOUND 0x0002 582*aca3beaaSApple OSS Distributions 583*aca3beaaSApple OSS Distributions struct ifnet_traffic_descriptor_common { 584*aca3beaaSApple OSS Distributions uint8_t itd_type; 585*aca3beaaSApple OSS Distributions uint8_t _reserved; 586*aca3beaaSApple OSS Distributions uint16_t itd_len; /* length of entire struct (common + td-specific) */ 587*aca3beaaSApple OSS Distributions uint32_t itd_flags; 588*aca3beaaSApple OSS Distributions }; 589*aca3beaaSApple OSS Distributions 590*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_IPVER 0x01 591*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_PROTO 0x02 592*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_LADDR 0x04 593*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_RADDR 0x08 594*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_LPORT 0x10 595*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_DESCRIPTOR_INET_RPORT 0x20 596*aca3beaaSApple OSS Distributions 597*aca3beaaSApple OSS Distributions struct ifnet_ip_addr { 598*aca3beaaSApple OSS Distributions union { 599*aca3beaaSApple OSS Distributions uint8_t addr8[16]; 600*aca3beaaSApple OSS Distributions uint16_t addr16[8]; 601*aca3beaaSApple OSS Distributions uint32_t addr32[4]; 602*aca3beaaSApple OSS Distributions }; 603*aca3beaaSApple OSS Distributions }; 604*aca3beaaSApple OSS Distributions #define iia_v4addr addr32[3] 605*aca3beaaSApple OSS Distributions 606*aca3beaaSApple OSS Distributions struct ifnet_traffic_descriptor_inet { 607*aca3beaaSApple OSS Distributions struct ifnet_traffic_descriptor_common inet_common; 608*aca3beaaSApple OSS Distributions uint8_t inet_mask; 609*aca3beaaSApple OSS Distributions uint8_t inet_ipver; /* IPVERSION or IPV6_VERSION */ 610*aca3beaaSApple OSS Distributions uint8_t inet_proto; /* IPPROTO_TCP or IPPROTO_UDP */ 611*aca3beaaSApple OSS Distributions uint8_t _reserved; 612*aca3beaaSApple OSS Distributions struct ifnet_ip_addr inet_laddr; 613*aca3beaaSApple OSS Distributions struct ifnet_ip_addr inet_raddr; 614*aca3beaaSApple OSS Distributions uint16_t inet_lport; 615*aca3beaaSApple OSS Distributions uint16_t inet_rport; 616*aca3beaaSApple OSS Distributions }; 617*aca3beaaSApple OSS Distributions 618*aca3beaaSApple OSS Distributions #define IFNET_TRAFFIC_RULE_ACTION_STEER 1 619*aca3beaaSApple OSS Distributions struct ifnet_traffic_rule_action { 620*aca3beaaSApple OSS Distributions uint8_t ra_type; 621*aca3beaaSApple OSS Distributions uint8_t _reserved; 622*aca3beaaSApple OSS Distributions uint16_t ra_len; 623*aca3beaaSApple OSS Distributions }; 624*aca3beaaSApple OSS Distributions 625*aca3beaaSApple OSS Distributions struct ifnet_traffic_rule_action_steer { 626*aca3beaaSApple OSS Distributions struct ifnet_traffic_rule_action ras_common; 627*aca3beaaSApple OSS Distributions uint64_t ras_qset_id; 628*aca3beaaSApple OSS Distributions }; 629*aca3beaaSApple OSS Distributions #pragma pack(pop) 630*aca3beaaSApple OSS Distributions 631*aca3beaaSApple OSS Distributions #pragma pack() 632*aca3beaaSApple OSS Distributions 633*aca3beaaSApple OSS Distributions #endif /* !_NET_IF_VAR_STATUS_H_ */ 634