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