Full Code of OpenIntelWireless/itlwm for AI

master 53c51c2cdd6e cached
246 files
4.3 MB
1.1M tokens
7025 symbols
1 requests
Download .txt
Showing preview only (4,500K chars total). Download the full file or copy to clipboard to get everything.
Repository: OpenIntelWireless/itlwm
Branch: master
Commit: 53c51c2cdd6e
Files: 246
Total size: 4.3 MB

Directory structure:
gitextract_w4xojz7w/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── Bug.md
│   └── workflows/
│       └── main.yml
├── .gitignore
├── AirportItlwm/
│   ├── AirportAWDL.cpp
│   ├── AirportItlwm-Monterey-Info.plist
│   ├── AirportItlwm-Sonoma-Info.plist
│   ├── AirportItlwm.cpp
│   ├── AirportItlwm.hpp
│   ├── AirportItlwmEthernetInterface.cpp
│   ├── AirportItlwmEthernetInterface.hpp
│   ├── AirportItlwmInterface.cpp
│   ├── AirportItlwmInterface.hpp
│   ├── AirportItlwmSkywalkInterface.cpp
│   ├── AirportItlwmSkywalkInterface.hpp
│   ├── AirportItlwmV2.cpp
│   ├── AirportItlwmV2.hpp
│   ├── AirportSTAIOCTL.cpp
│   ├── AirportVirtualIOCTL.cpp
│   ├── IOPCIEDeviceWrapper.cpp
│   ├── IOPCIEDeviceWrapper.hpp
│   └── Info.plist
├── LICENSE
├── README.md
├── include/
│   ├── Airport/
│   │   ├── Apple80211.h
│   │   ├── CCDataPipe.h
│   │   ├── CCLogPipe.h
│   │   ├── CCLogStream.h
│   │   ├── CCPipe.h
│   │   ├── CCStream.h
│   │   ├── IO80211Controller.h
│   │   ├── IO80211ControllerV2.h
│   │   ├── IO80211InfraInterface.h
│   │   ├── IO80211InfraProtocol.h
│   │   ├── IO80211Interface.h
│   │   ├── IO80211P2PInterface.h
│   │   ├── IO80211SkywalkInterface.h
│   │   ├── IO80211VirtualInterface.h
│   │   ├── IO80211WorkLoop.h
│   │   ├── IO80211WorkQueue.h
│   │   ├── IOSkywalkEthernetInterface.h
│   │   ├── IOSkywalkInterface.h
│   │   ├── IOSkywalkLegacyEthernetInterface.h
│   │   ├── IOSkywalkLogicalLink.h
│   │   ├── IOSkywalkNetworkInterface.h
│   │   ├── IOSkywalkNetworkPacket.h
│   │   ├── IOSkywalkPacketBufferPool.h
│   │   ├── apple80211_ioctl.h
│   │   ├── apple80211_var.h
│   │   ├── apple80211_wps.h
│   │   ├── apple_private_spi.h
│   │   └── debug.h
│   ├── ClientKit/
│   │   ├── Common.h
│   │   └── IoctlId.h
│   ├── FwData.h
│   └── HAL/
│       ├── ItlDriverController.hpp
│       ├── ItlDriverInfo.hpp
│       ├── ItlHalService.cpp
│       └── ItlHalService.hpp
├── itl80211/
│   ├── Info.plist
│   ├── compat.cpp
│   ├── compat.h
│   ├── linux/
│   │   ├── bitfield.h
│   │   ├── kernel.h
│   │   ├── random.h
│   │   └── types.h
│   ├── openbsd/
│   │   ├── crypto/
│   │   │   ├── aes.c
│   │   │   ├── aes.h
│   │   │   ├── arc4.c
│   │   │   ├── arc4.h
│   │   │   ├── blf.c
│   │   │   ├── blf.h
│   │   │   ├── cast.c
│   │   │   ├── cast.h
│   │   │   ├── castsb.h
│   │   │   ├── chacha_private.h
│   │   │   ├── chachapoly.c
│   │   │   ├── chachapoly.h
│   │   │   ├── cmac.c
│   │   │   ├── cmac.h
│   │   │   ├── cryptodev.h
│   │   │   ├── des_locl.h
│   │   │   ├── ecb3_enc.c
│   │   │   ├── ecb_enc.c
│   │   │   ├── gmac.c
│   │   │   ├── gmac.h
│   │   │   ├── hmac.c
│   │   │   ├── hmac.h
│   │   │   ├── idgen.c
│   │   │   ├── idgen.h
│   │   │   ├── key_wrap.c
│   │   │   ├── key_wrap.h
│   │   │   ├── md5.c
│   │   │   ├── md5.h
│   │   │   ├── michael.c
│   │   │   ├── michael.h
│   │   │   ├── podd.h
│   │   │   ├── poly1305.c
│   │   │   ├── poly1305.h
│   │   │   ├── rijndael.c
│   │   │   ├── rijndael.h
│   │   │   ├── rmd160.c
│   │   │   ├── rmd160.h
│   │   │   ├── set_key.c
│   │   │   ├── sha1-pbkdf2.c
│   │   │   ├── sha1.c
│   │   │   ├── sha1.h
│   │   │   ├── sha2.c
│   │   │   ├── sha2.h
│   │   │   ├── sk.h
│   │   │   └── spr.h
│   │   ├── net80211/
│   │   │   ├── CTimeout.cpp
│   │   │   ├── _string.c
│   │   │   ├── ieee80211.c
│   │   │   ├── ieee80211.h
│   │   │   ├── ieee80211_amrr.c
│   │   │   ├── ieee80211_amrr.h
│   │   │   ├── ieee80211_crypto.c
│   │   │   ├── ieee80211_crypto.h
│   │   │   ├── ieee80211_crypto_bip.c
│   │   │   ├── ieee80211_crypto_ccmp.c
│   │   │   ├── ieee80211_crypto_tkip.c
│   │   │   ├── ieee80211_crypto_wep.c
│   │   │   ├── ieee80211_input.c
│   │   │   ├── ieee80211_ioctl.c
│   │   │   ├── ieee80211_ioctl.h
│   │   │   ├── ieee80211_mira.c
│   │   │   ├── ieee80211_mira.h
│   │   │   ├── ieee80211_node.c
│   │   │   ├── ieee80211_node.h
│   │   │   ├── ieee80211_output.c
│   │   │   ├── ieee80211_pae_input.c
│   │   │   ├── ieee80211_pae_output.c
│   │   │   ├── ieee80211_priv.h
│   │   │   ├── ieee80211_proto.c
│   │   │   ├── ieee80211_proto.h
│   │   │   ├── ieee80211_ra.c
│   │   │   ├── ieee80211_ra.h
│   │   │   ├── ieee80211_radiotap.h
│   │   │   ├── ieee80211_regdomain.c
│   │   │   ├── ieee80211_regdomain.h
│   │   │   ├── ieee80211_rssadapt.c
│   │   │   ├── ieee80211_rssadapt.h
│   │   │   ├── ieee80211_var.h
│   │   │   └── timeout.c
│   │   └── sys/
│   │       ├── CTimeout.hpp
│   │       ├── _arc4random.h
│   │       ├── _buf.h
│   │       ├── _clock.h
│   │       ├── _if_ether.h
│   │       ├── _if_media.h
│   │       ├── _ifq.cpp
│   │       ├── _ifq.h
│   │       ├── _malloc.h
│   │       ├── _mbuf.cpp
│   │       ├── _mbuf.h
│   │       ├── _netstat.h
│   │       ├── _null.h
│   │       ├── _task.cpp
│   │       ├── _task.h
│   │       ├── arp.c
│   │       ├── arp.h
│   │       ├── endian.h
│   │       ├── pcireg.h
│   │       ├── timeout.h
│   │       └── tree.h
│   ├── zutil.c
│   └── zutil.h
├── itlwm/
│   ├── Info.plist
│   ├── ItlNetworkUserClient.cpp
│   ├── ItlNetworkUserClient.hpp
│   ├── PrivateSPI.pch
│   ├── firmware/
│   │   ├── iwlwifi-Qu-b0-hr-b0-68.ucode
│   │   ├── iwlwifi-Qu-b0-jf-b0-68.ucode
│   │   ├── iwlwifi-Qu-c0-hr-b0-68.ucode
│   │   ├── iwlwifi-Qu-c0-jf-b0-68.ucode
│   │   ├── iwlwifi-QuZ-a0-hr-b0-68.ucode
│   │   ├── iwlwifi-QuZ-a0-jf-b0-68.ucode
│   │   ├── iwlwifi-cc-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf-a0.pnvm
│   │   ├── iwlwifi-so-a0-gf4-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf4-a0.pnvm
│   │   ├── iwlwifi-so-a0-hr-b0-68.ucode
│   │   ├── iwlwifi-so-a0-jf-b0-68.ucode
│   │   ├── iwlwifi-ty-a0-gf-a0-68.ucode
│   │   ├── iwlwifi-ty-a0-gf-a0.pnvm
│   │   ├── iwm-3160-17
│   │   ├── iwm-3168-29
│   │   ├── iwm-7260-17
│   │   ├── iwm-7265-17
│   │   ├── iwm-8000C-36
│   │   ├── iwm-8265-36
│   │   ├── iwm-9000-46
│   │   ├── iwm-9260-46
│   │   ├── iwn-1000
│   │   ├── iwn-105
│   │   ├── iwn-135
│   │   ├── iwn-2000
│   │   ├── iwn-2030
│   │   ├── iwn-4965
│   │   ├── iwn-5000
│   │   ├── iwn-5150
│   │   ├── iwn-6000
│   │   ├── iwn-6005
│   │   ├── iwn-6030
│   │   └── iwn-6050
│   ├── hal_iwm/
│   │   ├── ItlIwm.cpp
│   │   ├── ItlIwm.hpp
│   │   ├── coex.cpp
│   │   ├── ctxt.cpp
│   │   ├── fw.cpp
│   │   ├── hw.cpp
│   │   ├── if_iwmreg.h
│   │   ├── if_iwmvar.h
│   │   ├── io.cpp
│   │   ├── itlhdr.h
│   │   ├── led.cpp
│   │   ├── mac80211.cpp
│   │   ├── nvm.cpp
│   │   ├── phy.cpp
│   │   ├── power.cpp
│   │   ├── rs.cpp
│   │   ├── rs.h
│   │   ├── rx.cpp
│   │   ├── scan.cpp
│   │   ├── tx.cpp
│   │   └── utils.cpp
│   ├── hal_iwn/
│   │   ├── ItlIwn.cpp
│   │   ├── ItlIwn.hpp
│   │   ├── if_iwnreg.h
│   │   └── if_iwnvar.h
│   ├── hal_iwx/
│   │   ├── ItlIwx.cpp
│   │   ├── ItlIwx.hpp
│   │   ├── if_iwxreg.h
│   │   └── if_iwxvar.h
│   ├── itlwm.cpp
│   ├── itlwm.hpp
│   └── pm.cpp
├── itlwm.xcodeproj/
│   ├── project.pbxproj
│   └── xcshareddata/
│       └── xcschemes/
│           ├── AirportItlwm (all).xcscheme
│           └── itlwm.xcscheme
├── iwlwifi-firmware-license
└── scripts/
    ├── fw_gen.sh
    ├── load.sh
    ├── unload.sh
    └── zlib_compress_fw.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/Bug.md
================================================
---
name: Bug report
about: Report a bug
labels: ''
assignees: ''
---

<!---WARNING!!! YOUR ISSUE WILL BE CLOSED AND DELETED IMMEDIATELY IF YOU DID NOT USE THE FOLLOWING TEMPLATE--->

**Have You Read Our Docs**
<!---Yes or No--->

**Are You Reporting A Bug**
<!---Yes or No--->

**Environment**

- Kext Version: 
- WiFi Card Model: 
- PCI Product ID: 
- macOS Version: 

**Description**
<!---A clear and concise description of what the bug is--->

**Bug Report Archive**
<!---Open HeliPort while clicking Option, click "create diagnostic report", then drag and drop the zip file into this window--->
<!---Read this guide if you are using AirportItlwm http://docs.oiw.workers.dev/itlwm/Troubleshooting.html#manually-for-airportitlwm--->

**Kext Download Source**
<!---To help us identify your issue, please tell us where did you download the kext and whether it's custom built--->


================================================
FILE: .github/workflows/main.yml
================================================
name: CD

on:
  push:
    branches: master

env:
  BUILD_OUTPUT: 'build/Build/Products/Debug'

jobs:

  build:
    
    runs-on: macos-latest

    steps:

    - uses: actions/checkout@v2
      with:
        fetch-depth: '5'

    - name: Manage Version
      run: |
        git fetch --prune --unshallow --tags
        GIT_SHA="$(git rev-parse --short HEAD)"
        CUR_TAG="$(git tag -l | grep 'alpha\|beta' | tail -1)"
        eval $(grep -m 1 "MODULE_VERSION =" itlwm.xcodeproj/project.pbxproj | tr -d ';' | tr -d '\t' | tr -d " ")
        echo "SHORT_SHA=$GIT_SHA" >> $GITHUB_ENV
        echo "ITLWM_VER=$MODULE_VERSION" >> $GITHUB_ENV
        if [[ -z $CUR_TAG ]]; then
          echo "OLD_PRE_TAG=NULL" >> $GITHUB_ENV
        else
          echo "OLD_PRE_TAG=$CUR_TAG" >> $GITHUB_ENV
        fi

    - name: Install MacKernelSDK
      run: |
        git clone --depth=1 https://github.com/acidanthera/MacKernelSDK.git

    - name: Build itlwm
      run: |
        xcodebuild -scheme itlwm -configuration Debug -derivedDataPath build GIT_COMMIT=_${SHORT_SHA} | xcpretty && exit ${PIPESTATUS[0]}

    - name: Build AirportItlwm
      run: |
        xcodebuild -scheme "AirportItlwm (all)" -configuration Debug -derivedDataPath build GIT_COMMIT=_${SHORT_SHA} | xcpretty && exit ${PIPESTATUS[0]}

    - name: Pack Artifacts
      run: |
        cd $BUILD_OUTPUT
          zip -r itlwm-v${ITLWM_VER}-DEBUG-alpha-${SHORT_SHA}.zip itlwm.kext
          while read -r tgt ; do
            zip -r AirportItlwm-${tgt// /_}-v${ITLWM_VER}-DEBUG-alpha-${SHORT_SHA}.zip "$tgt"
          done < <(find . -mindepth 1 -maxdepth 1 -type d -not -path "*.kext" | cut -c 3-)
        cd -

    - name: Generate Prerelease Release Notes
      run: |
        echo '### Disclaimer:' >> ReleaseNotes.md
        echo '***This alpha version is for testing only.***' >> ReleaseNotes.md
        echo 'It is not ready for daily use and we do not guarantee its usability.' >> ReleaseNotes.md
        echo 'If you discovered an issue and you do not have debugging skills, please check with the [Gitter Chat Room](https://gitter.im/OpenIntelWireless/itlwm) in advance before opening an Issue.' >> ReleaseNotes.md
        echo '### The latest five updates are:' >> ReleaseNotes.md
        git log -"5" --format="- %H %s" | sed '/^$/d' >> ReleaseNotes.md

    - name: Delete Old Prerelease
      uses: dev-drprasad/delete-tag-and-release@v0.2.1
      with:
        tag_name: ${{ env.OLD_PRE_TAG }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Publish GitHub Release
      if: contains(github.event.head_commit.message, 'Bump version') == false
      uses: ncipollo/release-action@v1.12.0
      with:
        prerelease: true
        bodyFile: ReleaseNotes.md
        artifacts: "${{ env.BUILD_OUTPUT }}/*.zip"
        tag: "v${{ env.ITLWM_VER }}-alpha"
        token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .gitignore
================================================
.DS_Store
DerivedData
build
xcuserdata
project.xcworkspace
FwBinary.cpp
*.pyc
MacKernelSDK


================================================
FILE: AirportItlwm/AirportAWDL.cpp
================================================
//
//  AirportAWDL.cpp
//  AirportItlwm
//
//  Created by qcwap on 2020/9/4.
//  Copyright © 2020 钟先耀. All rights reserved.
//

#include "AirportItlwm.hpp"

#include <net80211/ieee80211_priv.h>
#include <net80211/ieee80211_var.h>

#define INTERFACE_NAME(object) \
 OSDynamicCast(IO80211Interface, object) == nullptr ? (OSDynamicCast(IO80211P2PInterface, object) == nullptr ? "???" : OSDynamicCast(IO80211P2PInterface, object)->getBSDName()) : OSDynamicCast(IO80211Interface, object)->getBSDName()

IOReturn AirportItlwm::
getIE(OSObject *object, struct apple80211_ie_data *data)
{
    XYLog("%s %s Error\n", __FUNCTION__,  INTERFACE_NAME(object));
    return kIOReturnError;
}

IOReturn AirportItlwm::
setIE(OSObject *object, struct apple80211_ie_data *data)
{
    XYLog("%s %s frame_type_flags %x add %d signature_len %d ie_len %d\n", __FUNCTION__, INTERFACE_NAME(object), data->frame_type_flags, data->add, data->signature_len, data->ie_len);
    if (data->frame_type_flags == APPLE80211_IE_FLAG_ASSOC_REQ && data->add && data->ie_len && *(uint8_t*)data->ie == 68) {
        XYLog("%s setCustomAssocIE\n", __FUNCTION__);
        return kIOReturnSuccess;
    }

    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setP2P_SCAN(OSObject *object, struct apple80211_scan_data *data)
{
    XYLog("%s %s ssid=%s bssid=%s channel=%d phy_mode=%d scan_type=%d\n", __FUNCTION__, INTERFACE_NAME(object), data->ssid, ether_sprintf(data->bssid.octet), data->num_channels, data->phy_mode, data->scan_type);

    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setP2P_LISTEN(OSObject *object, struct apple80211_p2p_listen_data *data)
{
    XYLog("%s %s channel=%d pad1=%d flags=%d duration=%d\n", __FUNCTION__, INTERFACE_NAME(object), data->channel, data->pad1, data->flags, data->duration);

    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setP2P_GO_CONF(OSObject *object, struct apple80211_p2p_go_conf_data *data)
{
    XYLog("%s %s auth_upper=%d auth_lower=%d channel=%d bcn_len=%d ssid=%s suppress_beacon=%d\n", __FUNCTION__, INTERFACE_NAME(object), data->auth_upper, data->auth_lower, data->channel, data->bcn_len, data->ssid, data->suppress_beacon);

    return kIOReturnSuccess;
}


================================================
FILE: AirportItlwm/AirportItlwm-Monterey-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
	<key>CFBundleShortVersionString</key>
	<string>$(MODULE_VERSION)</string>
	<key>CFBundleVersion</key>
	<string>$(MODULE_VERSION)</string>
	<key>IOKitPersonalities</key>
	<dict>
		<key>itlwm</key>
		<dict>
			<key>CFBundleIdentifier</key>
			<string>com.zxystd.AirportItlwm</string>
			<key>IOClass</key>
			<string>AirportItlwm</string>
			<key>IOMatchCategory</key>
			<string>IODefaultMatchCategory</string>
			<key>IOPCIMatch</key>
			<string>0x27238086 0x43F08086 0xA0F08086 0x34F08086 0x4DF08086 0x02F08086 0x3DF08086 0x06F08086 0x27208086 0x08b18086 0x08b28086 0x08b38086 0x08b48086 0x095a8086 0x095b8086 0x31658086 0x31668086 0x24f38086 0x24f48086 0x24f58086 0x24f68086 0x24fb8086 0x24fd8086 0x25268086 0x9df08086 0xa3708086 0x31DC8086 0x30DC8086 0x271C8086 0x271B8086 0x42a48086 0x00a08086 0x00a48086 0x02a08086 0x40a48086 0x00608086 0x00648086 0x02608086 0x02648086 0x42298086 0x422b8086 0x422c8086 0x42308086 0x42328086 0x42358086 0x42368086 0x42378086 0x42388086 0x42398086 0x423a8086 0x423b8086 0x423c8086 0x423d8086 0x00828086 0x00838086 0x00848086 0x00858086 0x00878086 0x00898086 0x008a8086 0x008b8086 0x00908086 0x00918086 0x08928086 0x08938086 0x08948086 0x08958086 0x08968086 0x08978086 0x08ae8086 0x08af8086 0x088e8086 0x088f8086 0x08908086 0x08918086 0x08878086 0x08888086 0x27258086 0x27268086 0x7A708086 0x7AF08086 0x51F08086 0x54F08086 0x27298086 0x7E408086 0x7F708086 0x51F18086</string>
			<key>IOProbeScore</key>
			<integer>2000</integer>
			<key>IOProviderClass</key>
			<string>IOPCIDevice</string>
		</dict>
	</dict>
	<key>NSHumanReadableCopyright</key>
	<string>Copyright © 2020 钟先耀. All rights reserved.</string>
	<key>OSBundleLibraries</key>
	<dict>
		<key>com.apple.iokit.IO80211FamilyLegacy</key>
		<string>600.0</string>
		<key>com.apple.iokit.IONetworkingFamily</key>
		<string>3.2</string>
		<key>com.apple.iokit.IOPCIFamily</key>
		<string>2.9</string>
		<key>com.apple.kpi.bsd</key>
		<string>16.7</string>
		<key>com.apple.kpi.iokit</key>
		<string>16.7</string>
		<key>com.apple.kpi.libkern</key>
		<string>16.7</string>
		<key>com.apple.kpi.mach</key>
		<string>16.7</string>
	</dict>
	<key>OSBundleRequired</key>
	<string>Network-Root</string>
</dict>
</plist>


================================================
FILE: AirportItlwm/AirportItlwm-Sonoma-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
	<key>CFBundleShortVersionString</key>
	<string>$(MODULE_VERSION)</string>
	<key>CFBundleVersion</key>
	<string>$(MODULE_VERSION)</string>
	<key>IOKitPersonalities</key>
	<dict>
		<key>NetworkController</key>
		<dict>
			<key>CFBundleIdentifier</key>
			<string>com.zxystd.AirportItlwm</string>
			<key>IOClass</key>
			<string>AirportItlwm</string>
			<key>IOMatchCategory</key>
			<string>WiFiDriver</string>
			<key>IONetworkRootType</key>
			<string>airport</string>
			<key>IOProbeScore</key>
			<integer>70000</integer>
			<key>IOProviderClass</key>
			<string>IOPCIEDeviceWrapper</string>
			<key>IOResourceMatch</key>
			<string>IOBSD</string>
		</dict>
		<key>itlwm</key>
		<dict>
			<key>CFBundleIdentifier</key>
			<string>com.zxystd.AirportItlwm</string>
			<key>IOClass</key>
			<string>IOPCIEDeviceWrapper</string>
			<key>IOPCIMatch</key>
			<string>0x27238086 0x43F08086 0xA0F08086 0x34F08086 0x4DF08086 0x02F08086 0x3DF08086 0x06F08086 0x27208086 0x08b18086 0x08b28086 0x08b38086 0x08b48086 0x095a8086 0x095b8086 0x31658086 0x31668086 0x24f38086 0x24f48086 0x24f58086 0x24f68086 0x24fb8086 0x24fd8086 0x25268086 0x9df08086 0xa3708086 0x31DC8086 0x30DC8086 0x271C8086 0x271B8086 0x42a48086 0x00a08086 0x00a48086 0x02a08086 0x40a48086 0x00608086 0x00648086 0x02608086 0x02648086 0x42298086 0x422b8086 0x422c8086 0x42308086 0x42328086 0x42358086 0x42368086 0x42378086 0x42388086 0x42398086 0x423a8086 0x423b8086 0x423c8086 0x423d8086 0x00828086 0x00838086 0x00848086 0x00858086 0x00878086 0x00898086 0x008a8086 0x008b8086 0x00908086 0x00918086 0x08928086 0x08938086 0x08948086 0x08958086 0x08968086 0x08978086 0x08ae8086 0x08af8086 0x088e8086 0x088f8086 0x08908086 0x08918086 0x08878086 0x08888086 0x27258086 0x27268086 0x7A708086 0x7AF08086 0x51F08086 0x54F08086 0x27298086 0x7E408086 0x7F708086 0x51F18086</string>
			<key>IOProbeScore</key>
			<integer>70000</integer>
			<key>IOProviderClass</key>
			<string>IOPCIDevice</string>
		</dict>
	</dict>
	<key>NSHumanReadableCopyright</key>
	<string>Copyright © 2020 钟先耀. All rights reserved.</string>
	<key>OSBundleLibraries</key>
	<dict>
		<key>com.apple.driver.corecapture</key>
		<string>1.0.0</string>
		<key>com.apple.iokit.IO80211Family</key>
		<string>1.5.0</string>
		<key>com.apple.iokit.IONetworkingFamily</key>
		<string>3.2</string>
		<key>com.apple.iokit.IOPCIFamily</key>
		<string>2.9</string>
		<key>com.apple.iokit.IOSkywalkFamily</key>
		<string>1.0</string>
		<key>com.apple.kpi.bsd</key>
		<string>16.7</string>
		<key>com.apple.kpi.iokit</key>
		<string>16.7</string>
		<key>com.apple.kpi.libkern</key>
		<string>16.7</string>
		<key>com.apple.kpi.mach</key>
		<string>16.7</string>
	</dict>
	<key>OSBundleRequired</key>
	<string>Network-Root</string>
</dict>
</plist>


================================================
FILE: AirportItlwm/AirportItlwm.cpp
================================================
/*
* Copyright (C) 2020  钟先耀
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*/
#include "AirportItlwm.hpp"

#include <crypto/sha1.h>
#include <net80211/ieee80211_priv.h>
#include <net80211/ieee80211_var.h>

#define super IO80211Controller
OSDefineMetaClassAndStructors(AirportItlwm, IO80211Controller);
OSDefineMetaClassAndStructors(CTimeout, OSObject)

IO80211WorkLoop *_fWorkloop;
IOCommandGate *_fCommandGate;

bool AirportItlwm::init(OSDictionary *properties)
{
    bool ret = super::init(properties);
    awdlSyncEnable = true;
    power_state = 0;
    memset(geo_location_cc, 0, sizeof(geo_location_cc));
    return ret;
}

#define  PCI_MSI_FLAGS        2    /* Message Control */
#define  PCI_CAP_ID_MSI        0x05    /* Message Signalled Interrupts */
#define  PCI_MSIX_FLAGS        2    /* Message Control */
#define  PCI_CAP_ID_MSIX    0x11    /* MSI-X */
#define  PCI_MSIX_FLAGS_ENABLE    0x8000    /* MSI-X enable */
#define  PCI_MSI_FLAGS_ENABLE    0x0001    /* MSI feature enabled */

static void pciMsiSetEnable(IOPCIDevice *device, UInt8 msiCap, int enable)
{
    u16 control;
    
    control = device->configRead16(msiCap + PCI_MSI_FLAGS);
    control &= ~PCI_MSI_FLAGS_ENABLE;
    if (enable)
        control |= PCI_MSI_FLAGS_ENABLE;
    device->configWrite16(msiCap + PCI_MSI_FLAGS, control);
}

static void pciMsiXClearAndSet(IOPCIDevice *device, UInt8 msixCap, UInt16 clear, UInt16 set)
{
    u16 ctrl;
    
    ctrl = device->configRead16(msixCap + PCI_MSIX_FLAGS);
    ctrl &= ~clear;
    ctrl |= set;
    device->configWrite16(msixCap + PCI_MSIX_FLAGS, ctrl);
}

IOService* AirportItlwm::probe(IOService *provider, SInt32 *score)
{
    bool isMatch = false;
    super::probe(provider, score);
    UInt8 msiCap;
    UInt8 msixCap;
    IOPCIDevice* device = OSDynamicCast(IOPCIDevice, provider);
    if (!device)
        return NULL;
    if (ItlIwx::iwx_match(device)) {
        isMatch = true;
        fHalService = new ItlIwx;
    }
    if (!isMatch && ItlIwm::iwm_match(device)) {
        isMatch = true;
        fHalService = new ItlIwm;
    }
    if (!isMatch && ItlIwn::iwn_match(device)) {
        isMatch = true;
        fHalService = new ItlIwn;
    }
    if (isMatch) {
        device->findPCICapability(PCI_CAP_ID_MSIX, &msixCap);
        if (msixCap)
            pciMsiXClearAndSet(device, msixCap, PCI_MSIX_FLAGS_ENABLE, 0);
        device->findPCICapability(PCI_CAP_ID_MSI, &msiCap);
        if (msiCap)
            pciMsiSetEnable(device, msiCap, 1);
        if (!msiCap && !msixCap) {
            XYLog("%s No MSI cap\n", __FUNCTION__);
            fHalService->release();
            fHalService = NULL;
            return NULL;
        }
        return this;
    }
    return NULL;
}

bool AirportItlwm::configureInterface(IONetworkInterface *netif)
{
    IONetworkData *nd;
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    
    if (super::configureInterface(netif) == false) {
        XYLog("super failed\n");
        return false;
    }
    
    nd = netif->getParameter(kIONetworkStatsKey);
    if (!nd || !(fpNetStats = (IONetworkStats *)nd->getBuffer())) {
        XYLog("network statistics buffer unavailable?\n");
        return false;
    }
    ifp->netStat = fpNetStats;
    ether_ifattach(ifp, OSDynamicCast(IOEthernetInterface, netif));
    fpNetStats->collisions = 0;
#ifdef __PRIVATE_SPI__
    netif->configureOutputPullModel(fHalService->getDriverInfo()->getTxQueueSize(), 0, 0, IOEthernetInterface::kOutputPacketSchedulingModelNormal, 0);
#endif
    
    return true;
}

IONetworkInterface *AirportItlwm::createInterface()
{
    AirportItlwmInterface *netif = new AirportItlwmInterface;
    if (!netif)
        return NULL;
    if (!netif->init(this, fHalService)) {
        netif->release();
        return NULL;
    }
    return netif;
}

void AirportItlwm::associateSSID(uint8_t *ssid, uint32_t ssid_len, const struct ether_addr &bssid, uint32_t authtype_lower, uint32_t authtype_upper, uint8_t *key, uint32_t key_len, int key_index) 
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    
    ieee80211_disable_rsn(ic);
    ieee80211_disable_wep(ic);
    
    struct ieee80211_wpaparams	 wpa;
    struct ieee80211_nwkey		 nwkey;
    bzero(&wpa, sizeof(wpa));
    bzero(&nwkey, sizeof(nwkey));
    
    memset(ic->ic_des_essid, 0, IEEE80211_NWID_LEN);
    memcpy(ic->ic_des_essid, ssid, ssid_len);
    ic->ic_des_esslen = ssid_len;
    
    bool is_zero = true;
    for (int i = 0; i < IEEE80211_ADDR_LEN; i++)
    is_zero &= bssid.octet[i] == 0;
    
    if (!is_zero) {
        IEEE80211_ADDR_COPY(ic->ic_des_bssid, bssid.octet);
        ic->ic_flags |= IEEE80211_F_DESBSSID;
    }
    else {
        memset(ic->ic_des_bssid, 0, IEEE80211_ADDR_LEN);	
        ic->ic_flags &= ~IEEE80211_F_DESBSSID;
    }

    // AUTHTYPE_WPA3_SAE AUTHTYPE_WPA3_FT_SAE
    // we don't really support WPA3, but we have announced we support WPA3 in card capability function. so we fake it as WPA2 to support some WPA2/WPA3 mix wifi connection.
    if (authtype_upper == APPLE80211_AUTHTYPE_WPA3_SAE || authtype_upper == APPLE80211_AUTHTYPE_WPA3_FT_SAE) {
        wpa.i_protos |= IEEE80211_WPA_PROTO_WPA2;
        authtype_upper |= APPLE80211_AUTHTYPE_WPA2_PSK;// hack
    }
    // AUTHTYPE_WPA3_ENTERPRISE AUTHTYPE_WPA3_FT_ENTERPRISE
    if (authtype_upper == APPLE80211_AUTHTYPE_WPA3_ENTERPRISE || authtype_upper == APPLE80211_AUTHTYPE_WPA3_FT_ENTERPRISE) {
        wpa.i_protos |= IEEE80211_WPA_PROTO_WPA2;
        authtype_upper |= APPLE80211_AUTHTYPE_WPA2;// hack
    }
    
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA | APPLE80211_AUTHTYPE_WPA_PSK | APPLE80211_AUTHTYPE_WPA2 | APPLE80211_AUTHTYPE_WPA2_PSK | APPLE80211_AUTHTYPE_SHA256_PSK | APPLE80211_AUTHTYPE_SHA256_8021X)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_protos = IEEE80211_WPA_PROTO_WPA1 | IEEE80211_WPA_PROTO_WPA2;
    }
    
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA_PSK | APPLE80211_AUTHTYPE_WPA2_PSK | APPLE80211_AUTHTYPE_SHA256_PSK)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_akms |= IEEE80211_WPA_AKM_PSK | IEEE80211_WPA_AKM_SHA256_PSK;
        wpa.i_enabled = 1;
        memcpy(ic->ic_psk, key, sizeof(ic->ic_psk));
        ic->ic_flags |= IEEE80211_F_PSK;
        ieee80211_ioctl_setwpaparms(ic, &wpa);
    }
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA | APPLE80211_AUTHTYPE_WPA2 | APPLE80211_AUTHTYPE_SHA256_8021X)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_akms |= IEEE80211_WPA_AKM_8021X | IEEE80211_WPA_AKM_SHA256_8021X;	
        wpa.i_enabled = 1;
        ieee80211_ioctl_setwpaparms(ic, &wpa);
    }
    
    if (authtype_lower == APPLE80211_AUTHTYPE_SHARED) {
        XYLog("shared key authentication is not supported!\n");
        return;
    }
    
    if (authtype_upper == APPLE80211_AUTHTYPE_NONE && authtype_lower == APPLE80211_AUTHTYPE_OPEN) { // Open or WEP Open System
        if (key_len > 0) {
            XYLog("%s %d\n", __FUNCTION__, __LINE__);
            nwkey.i_wepon = IEEE80211_NWKEY_WEP;
            nwkey.i_defkid = key_index + 1;
            nwkey.i_key[key_index].i_keylen = (int)key_len;
            nwkey.i_key[key_index].i_keydat = key;
            ieee80211_ioctl_setnwkeys(ic, &nwkey);
        }
    }
}

void AirportItlwm::setPTK(const u_int8_t *key, size_t key_len) {
    struct ieee80211com *ic = fHalService->get80211Controller();
    struct ieee80211_node	* ni = ic->ic_bss;
    struct ieee80211_key *k;
    int keylen;
    
    ni->ni_rsn_supp_state = RNSA_SUPP_PTKDONE;
    
    if (ni->ni_rsncipher != IEEE80211_CIPHER_USEGROUP) {
        u_int64_t prsc;
        
        /* check that key length matches that of pairwise cipher */
        keylen = ieee80211_cipher_keylen(ni->ni_rsncipher);
        if (key_len != keylen) {
            XYLog("PTK length mismatch. expected %d, got %zu\n", keylen, key_len);
            return;
        }
        prsc = /*(gtk == NULL) ? LE_READ_6(key->rsc) :*/ 0;
        
        /* map PTK to 802.11 key */
        k = &ni->ni_pairwise_key;
        memset(k, 0, sizeof(*k));
        k->k_cipher = ni->ni_rsncipher;
        k->k_rsc[0] = prsc;
        k->k_len = keylen;
        memcpy(k->k_key, key, k->k_len);
        /* install the PTK */
        if ((*ic->ic_set_key)(ic, ni, k) != 0) {
            XYLog("setting PTK failed\n");
            return;
        }
        else
            XYLog("setting PTK successfully\n");
        ni->ni_flags &= ~IEEE80211_NODE_RSN_NEW_PTK;
        ni->ni_flags &= ~IEEE80211_NODE_TXRXPROT;
        ni->ni_flags |= IEEE80211_NODE_RXPROT;
    } else if (ni->ni_rsncipher != IEEE80211_CIPHER_USEGROUP)
        XYLog("%s: unexpected pairwise key update received from %s\n",
              ic->ic_if.if_xname, ether_sprintf(ni->ni_macaddr));
}

void AirportItlwm::setGTK(const u_int8_t *gtk, size_t key_len, u_int8_t kid, u_int8_t *rsc) {
    struct ieee80211com *ic = fHalService->get80211Controller();
    struct ieee80211_node	* ni = ic->ic_bss;
    struct ieee80211_key *k;
    int keylen;
    
    if (gtk != NULL) {
        /* check that key length matches that of group cipher */
        keylen = ieee80211_cipher_keylen(ni->ni_rsngroupcipher);
        if (key_len != keylen) {
            XYLog("GTK length mismatch. expected %d, got %zu\n", keylen, key_len);
            return;
        }
        /* map GTK to 802.11 key */
        k = &ic->ic_nw_keys[kid];
        if (k->k_cipher == IEEE80211_CIPHER_NONE || k->k_len != keylen || memcmp(k->k_key, gtk, keylen) != 0) {
            memset(k, 0, sizeof(*k));
            k->k_id = kid;    /* 0-3 */
            k->k_cipher = ni->ni_rsngroupcipher;
            k->k_flags = IEEE80211_KEY_GROUP;
            //if (gtk[6] & (1 << 2))
            //  k->k_flags |= IEEE80211_KEY_TX;
            k->k_rsc[0] = LE_READ_6(rsc);
            k->k_len = keylen;
            memcpy(k->k_key, gtk, k->k_len);
            /* install the GTK */
            if ((*ic->ic_set_key)(ic, ni, k) != 0) {
                XYLog("setting GTK failed\n");
                return;
            }
            else
                XYLog("setting GTK successfully\n");
        }
    }
    
    if (true) {
        ni->ni_flags |= IEEE80211_NODE_TXRXPROT;
#ifndef IEEE80211_STA_ONLY
        if (ic->ic_opmode != IEEE80211_M_IBSS ||
            ++ni->ni_key_count == 2)
#endif
        {
            XYLog("marking port %s valid\n",
                  ether_sprintf(ni->ni_macaddr));
            ni->ni_port_valid = 1;
            ieee80211_set_link_state(ic, LINK_STATE_UP);
            ni->ni_assoc_fail = 0;
            if (ic->ic_opmode == IEEE80211_M_STA)
                ic->ic_rsngroupcipher = ni->ni_rsngroupcipher;
        }
    }
}


bool AirportItlwm::
createMediumTables(const IONetworkMedium **primary)
{
    IONetworkMedium    *medium;
    
    OSDictionary *mediumDict = OSDictionary::withCapacity(1);
    if (mediumDict == NULL) {
        XYLog("Cannot allocate OSDictionary\n");
        return false;
    }
    
    medium = IONetworkMedium::medium(0x80, 11000000);
    IONetworkMedium::addMedium(mediumDict, medium);
    medium->release();
    if (primary) {
        *primary = medium;
    }
    
    bool result = publishMediumDictionary(mediumDict);
    if (!result)
        XYLog("Cannot publish medium dictionary!\n");

    mediumDict->release();
    return result;
}

bool AirportItlwm::start(IOService *provider)
{
    int boot_value = 0;
    if (!super::start(provider)) {
        return false;
    }
    if (!serviceMatching("AppleSMC")) {
        super::stop(provider);
        XYLog("No matching AppleSMC dictionary, failing\n");
        return false;
    }
    pciNub = OSDynamicCast(IOPCIDevice, provider);
    if (!pciNub) {
        super::stop(provider);
        return false;
    }
    pciNub->setBusMasterEnable(true);
    pciNub->setIOEnable(true);
    pciNub->setMemoryEnable(true);
    pciNub->configWrite8(0x41, 0);
    if (pciNub->requestPowerDomainState(kIOPMPowerOn,
                                        (IOPowerConnection *) getParentEntry(gIOPowerPlane), IOPMLowestState) != IOPMNoErr) {
        super::stop(provider);
        return false;
    }
    if (initPCIPowerManagment(pciNub) == false) {
        super::stop(pciNub);
        return false;
    }
    if (_fWorkloop == NULL) {
        XYLog("No _fWorkloop!!\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    _fCommandGate = IOCommandGate::commandGate(this, (IOCommandGate::Action)AirportItlwm::tsleepHandler);
    if (_fCommandGate == 0) {
        XYLog("No command gate!!\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    _fWorkloop->addEventSource(_fCommandGate);
    const IONetworkMedium *primaryMedium;
    if (!createMediumTables(&primaryMedium) ||
        !setCurrentMedium(primaryMedium) || !setSelectedMedium(primaryMedium)) {
        XYLog("setup medium fail\n");
        releaseAll();
        return false;
    }
    fHalService->initWithController(this, _fWorkloop, _fCommandGate);
    fHalService->get80211Controller()->ic_event_handler = eventHandler;
    
    if (PE_parse_boot_argn("-novht", &boot_value, sizeof(boot_value)))
        fHalService->get80211Controller()->ic_userflags |= IEEE80211_F_NOVHT;
    if (PE_parse_boot_argn("-noht40", &boot_value, sizeof(boot_value)))
        fHalService->get80211Controller()->ic_userflags |= IEEE80211_F_NOHT40;
    
    if (!fHalService->attach(pciNub)) {
        XYLog("attach fail\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    if (!attachInterface((IONetworkInterface **)&fNetIf, true)) {
        XYLog("attach to interface fail\n");
        fHalService->detach(pciNub);
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    fWatchdogWorkLoop = IOWorkLoop::workLoop();
    if (fWatchdogWorkLoop == NULL) {
        XYLog("init watchdog workloop fail\n");
        fHalService->detach(pciNub);
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    watchdogTimer = IOTimerEventSource::timerEventSource(this, OSMemberFunctionCast(IOTimerEventSource::Action, this, &AirportItlwm::watchdogAction));
    if (!watchdogTimer) {
        XYLog("init watchdog fail\n");
        fHalService->detach(pciNub);
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    fWatchdogWorkLoop->addEventSource(watchdogTimer);
    scanSource = IOTimerEventSource::timerEventSource(this, &fakeScanDone);
    _fWorkloop->addEventSource(scanSource);
    scanSource->enable();
    setLinkStatus(kIONetworkLinkValid);
    if (TAILQ_EMPTY(&fHalService->get80211Controller()->ic_ess))
        fHalService->get80211Controller()->ic_flags |= IEEE80211_F_AUTO_JOIN;
    registerService();
    fNetIf->registerService();
    return true;
}

void AirportItlwm::watchdogAction(IOTimerEventSource *timer)
{
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    (*ifp->if_watchdog)(ifp);
    watchdogTimer->setTimeoutMS(kWatchDogTimerPeriod);
}

void AirportItlwm::fakeScanDone(OSObject *owner, IOTimerEventSource *sender)
{
    AirportItlwm *that = (AirportItlwm *)owner;
    that->getNetworkInterface()->postMessage(APPLE80211_M_SCAN_DONE);
}

const OSString * AirportItlwm::newVendorString() const
{
    return OSString::withCString("Apple");
}

const OSString * AirportItlwm::newModelString() const
{
    return OSString::withCString(fHalService->getDriverInfo()->getFirmwareName());
}

bool AirportItlwm::initPCIPowerManagment(IOPCIDevice *provider)
{
    UInt16 reg16;

    reg16 = provider->configRead16(kIOPCIConfigCommand);

    reg16 |= ( kIOPCICommandBusMaster       |
               kIOPCICommandMemorySpace     |
               kIOPCICommandMemWrInvalidate );

    reg16 &= ~kIOPCICommandIOSpace;  // disable I/O space

    provider->configWrite16( kIOPCIConfigCommand, reg16 );
    provider->findPCICapability(kIOPCIPowerManagementCapability,
                                &pmPCICapPtr);
    if (pmPCICapPtr) {
        UInt16 pciPMCReg = provider->configRead32( pmPCICapPtr ) >> 16;
        if (pciPMCReg & kPCIPMCPMESupportFromD3Cold)
            magicPacketSupported = true;
        provider->configWrite16((pmPCICapPtr + 4), 0x8000 );
        IOSleep(10);
    }
    return true;
}

bool AirportItlwm::createWorkLoop()
{
    _fWorkloop = IO80211WorkLoop::workLoop();
    return _fWorkloop != 0;
}

IOWorkLoop *AirportItlwm::getWorkLoop() const
{
    return _fWorkloop;
}

IOReturn AirportItlwm::selectMedium(const IONetworkMedium *medium)
{
    setSelectedMedium(medium);
    return kIOReturnSuccess;
}

void AirportItlwm::stop(IOService *provider)
{
    XYLog("%s\n", __FUNCTION__);
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    super::stop(provider);
    disableAdapter(fNetIf);
    setLinkStatus(kIONetworkLinkValid);
    fHalService->detach(pciNub);
    ether_ifdetach(ifp);
    detachInterface(fNetIf, true);
    OSSafeReleaseNULL(fNetIf);
    releaseAll();
}

bool AirportItlwm::
setLinkStatus(UInt32 status, const IONetworkMedium * activeMedium, UInt64 speed, OSData * data)
{
    struct _ifnet *ifq = &fHalService->get80211Controller()->ic_ac.ac_if;
    if (status == currentStatus) {
        return true;
    }
    bool ret = super::setLinkStatus(status, activeMedium, speed, data);
    currentStatus = status;
    if (fNetIf) {
        if (status & kIONetworkLinkActive) {
#ifdef __PRIVATE_SPI__
            fNetIf->startOutputThread();
#endif
            getCommandGate()->runAction(setLinkStateGated, (void *)kIO80211NetworkLinkUp, (void *)0);
            fNetIf->setLinkQualityMetric(100);
        } else if (!(status & kIONetworkLinkNoNetworkChange)) {
#ifdef __PRIVATE_SPI__
            fNetIf->stopOutputThread();
            fNetIf->flushOutputQueue();
#endif
            ifq_flush(&ifq->if_snd);
            mq_purge(&fHalService->get80211Controller()->ic_mgtq);
            getCommandGate()->runAction(setLinkStateGated, (void *)kIO80211NetworkLinkDown, (void *)fHalService->get80211Controller()->ic_deauth_reason);
        }
    }
    return ret;
}

IOReturn AirportItlwm::
setLinkStateGated(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3)
{
    AirportItlwm *that = OSDynamicCast(AirportItlwm, target);
    IOReturn ret = that->getNetworkInterface()->setLinkState((IO80211LinkState)(uint64_t)arg0, (unsigned int)(uint64_t)arg1);
    if (that->fAWDLInterface) {
#if __IO80211_TARGET >= __MAC_13_0
        that->fAWDLInterface->setEnabledBySystem(true);
#endif
        that->fAWDLInterface->setLinkState((IO80211LinkState)(uint64_t)arg0, (unsigned int)(uint64_t)arg1);
    }
    return ret;
}

void AirportItlwm::releaseAll()
{
    if (fHalService) {
        fHalService->release();
        fHalService = NULL;
    }
    if (_fWorkloop) {
        if (_fCommandGate) {
//            _fCommandGate->disable();
            _fWorkloop->removeEventSource(_fCommandGate);
            _fCommandGate->release();
            _fCommandGate = NULL;
        }
        if (scanSource) {
            scanSource->cancelTimeout();
            scanSource->disable();
            _fWorkloop->removeEventSource(scanSource);
            scanSource->release();
            scanSource = NULL;
        }
        if (fWatchdogWorkLoop && watchdogTimer) {
            watchdogTimer->cancelTimeout();
            fWatchdogWorkLoop->removeEventSource(watchdogTimer);
            watchdogTimer->release();
            watchdogTimer = NULL;
            fWatchdogWorkLoop->release();
            fWatchdogWorkLoop = NULL;
        }
        _fWorkloop->release();
        _fWorkloop = NULL;
    }
    unregistPM();
}

void AirportItlwm::free()
{
    XYLog("%s\n", __FUNCTION__);
    if (fHalService != NULL) {
        fHalService->release();
        fHalService = NULL;
    }
    if (syncFrameTemplate != NULL && syncFrameTemplateLength > 0) {
        IOFree(syncFrameTemplate, syncFrameTemplateLength);
        syncFrameTemplateLength = 0;
        syncFrameTemplate = NULL;
    }
    if (roamProfile != NULL) {
        IOFree(roamProfile, sizeof(struct apple80211_roam_profile_band_data));
        roamProfile = NULL;
    }
    if (btcProfile != NULL) {
        IOFree(btcProfile, sizeof(struct apple80211_btc_profiles_data));
        btcProfile = NULL;
    }
    super::free();
}

IOReturn AirportItlwm::enable(IONetworkInterface *netif)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    super::enable(netif);
    _fCommandGate->enable();
    if (power_state)
        enableAdapter(netif);
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::disable(IONetworkInterface *netif)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    super::disable(netif);
    setLinkStatus(kIONetworkLinkValid);
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::enableAdapter(IONetworkInterface *netif)
{
    fHalService->enable(netif);
    watchdogTimer->setTimeoutMS(kWatchDogTimerPeriod);
    watchdogTimer->enable();
    return kIOReturnSuccess;
}

void AirportItlwm::disableAdapter(IONetworkInterface *netif)
{
    watchdogTimer->cancelTimeout();
    watchdogTimer->disable();
    fHalService->disable(netif);
}

IOReturn AirportItlwm::getHardwareAddress(IOEthernetAddress *addrP)
{
    if (IEEE80211_ADDR_EQ(etheranyaddr, fHalService->get80211Controller()->ic_myaddr))
        return kIOReturnError;
    else {
        IEEE80211_ADDR_COPY(addrP, fHalService->get80211Controller()->ic_myaddr);
        return kIOReturnSuccess;
    }
}

IOReturn AirportItlwm::setHardwareAddress(const IOEthernetAddress *addrP)
{
    if (!fNetIf || !addrP)
        return kIOReturnError;
    if_setlladdr(&fHalService->get80211Controller()->ic_ac.ac_if, addrP->bytes);
    if (fHalService->get80211Controller()->ic_state > IEEE80211_S_INIT) {
        fHalService->disable(fNetIf);
        fHalService->enable(fNetIf);
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::getHardwareAddressForInterface(
                                               IO80211Interface *netif, IOEthernetAddress *addr)
{
    return getHardwareAddress(addr);
}

#ifdef __PRIVATE_SPI__
IOReturn AirportItlwm::outputStart(IONetworkInterface *interface, IOOptionBits options)
{
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    mbuf_t m = NULL;
    if (ifq_is_oactive(&ifp->if_snd))
        return kIOReturnNoResources;
    while (kIOReturnSuccess == interface->dequeueOutputPackets(1, &m)) {
        if (outputPacket(m, NULL)!= kIOReturnOutputSuccess ||
            ifq_is_oactive(&ifp->if_snd))
            return kIOReturnNoResources;
    }
    return kIOReturnSuccess;
}
#endif

UInt32 AirportItlwm::outputPacket(mbuf_t m, void *param)
{
//    XYLog("%s\n", __FUNCTION__);
    IOReturn ret = kIOReturnOutputSuccess;
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    
    if (fHalService->get80211Controller()->ic_state != IEEE80211_S_RUN || ifp->if_snd.queue == NULL) {
        if (m && mbuf_type(m) != MBUF_TYPE_FREE)
            freePacket(m);
        return kIOReturnOutputDropped;
    }
    if (m == NULL) {
        XYLog("%s m==NULL!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        ret = kIOReturnOutputDropped;
    }
    if (!(mbuf_flags(m) & MBUF_PKTHDR) ){
        XYLog("%s pkthdr is NULL!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        freePacket(m);
        ret = kIOReturnOutputDropped;
    }
    if (mbuf_type(m) == MBUF_TYPE_FREE) {
        XYLog("%s mbuf is FREE!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        ret = kIOReturnOutputDropped;
    }
    if (!ifp->if_snd.queue->lockEnqueue(m)) {
        freePacket(m);
        ret = kIOReturnOutputDropped;
    }
    (*ifp->if_start)(ifp);
    return ret;
}

UInt32 AirportItlwm::getFeatures() const
{
    return fHalService->getDriverInfo()->supportedFeatures();
}

IOReturn AirportItlwm::setPromiscuousMode(IOEnetPromiscuousMode mode)
{
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::setMulticastMode(IOEnetMulticastMode mode)
{
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::setMulticastList(IOEthernetAddress* addr, UInt32 len)
{
    return fHalService->getDriverController()->setMulticastList(addr, len);
}

SInt32 AirportItlwm::monitorModeSetEnabled(
                                    IO80211Interface *interface, bool enabled, UInt32 dlt)
{
    return kIOReturnSuccess;
}

bool AirportItlwm::
useAppleRSNSupplicant(IO80211Interface *interface)
{
#ifdef USE_APPLE_SUPPLICANT
    return true;
#else
    return false;
#endif
}

IOReturn AirportItlwm::getPacketFilters(const OSSymbol *group, UInt32 *filters) const
{
    IOReturn    rtn = kIOReturnSuccess;
    if (group == gIOEthernetWakeOnLANFilterGroup && magicPacketSupported)
        *filters = kIOEthernetWakeOnMagicPacket;
    else if (group == gIONetworkFilterGroup)
        *filters = kIOPacketFilterMulticast | kIOPacketFilterPromiscuous;
    else
        rtn = IOEthernetController::getPacketFilters(group, filters);
    return rtn;
}

IOReturn AirportItlwm::
tsleepHandler(OSObject* owner, void* arg0, void* arg1, void* arg2, void* arg3)
{
    AirportItlwm* dev = OSDynamicCast(AirportItlwm, owner);
    if (dev == 0)
        return kIOReturnError;
    
    if (arg1 == 0) {
        if (_fCommandGate->commandSleep(arg0, THREAD_INTERRUPTIBLE) == THREAD_AWAKENED)
            return kIOReturnSuccess;
        else
            return kIOReturnTimeout;
    } else {
        AbsoluteTime deadline;
        clock_interval_to_deadline((*(int*)arg1), kNanosecondScale, reinterpret_cast<uint64_t*> (&deadline));
        if (_fCommandGate->commandSleep(arg0, deadline, THREAD_INTERRUPTIBLE) == THREAD_AWAKENED)
            return kIOReturnSuccess;
        else
            return kIOReturnTimeout;
    }
}

static IOPMPowerState powerStateArray[kPowerStateCount] =
{
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {1, kIOPMDeviceUsable, kIOPMPowerOn, kIOPMPowerOn, 0, 0, 0, 0, 0, 0, 0, 0}
};

void AirportItlwm::unregistPM()
{
    if (powerOffThreadCall) {
        thread_call_free(powerOffThreadCall);
        powerOffThreadCall = NULL;
    }
    if (powerOnThreadCall) {
        thread_call_free(powerOnThreadCall);
        powerOnThreadCall = NULL;
    }
}

IOReturn AirportItlwm::setPowerState(unsigned long powerStateOrdinal, IOService *policyMaker)
{
    IOReturn result = IOPMAckImplied;
    
    if (pmPowerState == powerStateOrdinal)
        return result;
    switch (powerStateOrdinal) {
        case kPowerStateOff:
            if (powerOffThreadCall) {
                retain();
                if (thread_call_enter(powerOffThreadCall))
                    release();
                result = 5000000;
            }
            break;
        case kPowerStateOn:
            if (powerOnThreadCall) {
                retain();
                if (thread_call_enter(powerOnThreadCall))
                    release();
                result = 5000000;
            }
            break;
            
        default:
            break;
    }
    return result;
}

IOReturn AirportItlwm::setWakeOnMagicPacket(bool active)
{
    magicPacketEnabled = active;
    return kIOReturnSuccess;
}

static void handleSetPowerStateOff(thread_call_param_t param0,
                             thread_call_param_t param1)
{
    AirportItlwm *self = (AirportItlwm *)param0;

    if (param1 == 0)
    {
        self->getCommandGate()->runAction((IOCommandGate::Action)
                                           handleSetPowerStateOff,
                                           (void *) 1);
    }
    else
    {
        self->setPowerStateOff();
        self->release();
    }
}

static void handleSetPowerStateOn(thread_call_param_t param0,
                            thread_call_param_t param1)
{
    AirportItlwm *self = (AirportItlwm *) param0;

    if (param1 == 0)
    {
        self->getCommandGate()->runAction((IOCommandGate::Action)
                                           handleSetPowerStateOn,
                                           (void *) 1);
    }
    else
    {
        self->setPowerStateOn();
        self->release();
    }
}

IOReturn AirportItlwm::registerWithPolicyMaker(IOService *policyMaker)
{
    IOReturn ret;
    
    pmPowerState = kPowerStateOn;
    pmPolicyMaker = policyMaker;
    
    powerOffThreadCall = thread_call_allocate(
                                            (thread_call_func_t)handleSetPowerStateOff,
                                            (thread_call_param_t)this);
    powerOnThreadCall  = thread_call_allocate(
                                            (thread_call_func_t)handleSetPowerStateOn,
                                              (thread_call_param_t)this);
    ret = pmPolicyMaker->registerPowerDriver(this,
                                             powerStateArray,
                                             kPowerStateCount);
    return ret;
}

void AirportItlwm::setPowerStateOff()
{
    XYLog("%s\n", __FUNCTION__);
    pmPowerState = kPowerStateOff;
    disableAdapter(fNetIf);
    pmPolicyMaker->acknowledgeSetPowerState();
}

void AirportItlwm::setPowerStateOn()
{
    XYLog("%s\n", __FUNCTION__);
    pmPowerState = kPowerStateOn;
    pmPolicyMaker->acknowledgeSetPowerState();
}

int AirportItlwm::
outputRaw80211Packet(IO80211Interface *interface, mbuf_t m)
{
    XYLog("%s len=%zu\n", __FUNCTION__, mbuf_len(m));
    freePacket(m);
    return kIOReturnOutputDropped;
}

UInt32 AirportItlwm::
hardwareOutputQueueDepth(IO80211Interface *interface)
{
    return 0;
}

SInt32 AirportItlwm::
performCountryCodeOperation(IO80211Interface *interface, IO80211CountryCodeOp op)
{
    return 0;
}

SInt32 AirportItlwm::
stopDMA()
{
    if (fNetIf)
        disable(fNetIf);
    return 0;
}

SInt32 AirportItlwm::
enableFeature(IO80211FeatureCode code, void *data)
{
    if (code == kIO80211Feature80211n) {
        return 0;
    }
    return 102;
}

int AirportItlwm::
outputActionFrame(OSObject *object, mbuf_t m)
{
    XYLog("%s len=%zu\n", __FUNCTION__, mbuf_len(m));
    mbuf_freem(m);
    return 0;
}

int AirportItlwm::
bpfOutput80211Radio(OSObject *object, mbuf_t m)
{
    XYLog("%s len=%zu\n", __FUNCTION__, mbuf_len(m));
    mbuf_freem(m);
    return 0;
}

SInt32 AirportItlwm::
enableVirtualInterface(IO80211VirtualInterface *interface)
{
    XYLog("%s interface=%s role=%d\n", __FUNCTION__, interface->getBSDName(), interface->getInterfaceRole());
    SInt32 ret = super::enableVirtualInterface(interface);
    if (!ret) {
#if __IO80211_TARGET >= __MAC_13_0
        interface->setEnabledBySystem(true);
#endif
        interface->setLinkState(kIO80211NetworkLinkUp, 0);
        interface->postMessage(APPLE80211_M_LINK_CHANGED);
        return kIOReturnSuccess;
    }
    return ret;
}

SInt32 AirportItlwm::
disableVirtualInterface(IO80211VirtualInterface *interface)
{
    XYLog("%s interface=%s role=%d\n", __FUNCTION__, interface->getBSDName(), interface->getInterfaceRole());
    SInt32 ret = super::disableVirtualInterface(interface);
    if (!ret) {
        interface->setLinkState(kIO80211NetworkLinkDown, 0);
        interface->postMessage(APPLE80211_M_LINK_CHANGED);
        return kIOReturnSuccess;
    }
    return ret;
}

IO80211VirtualInterface *AirportItlwm::
createVirtualInterface(ether_addr *ether, UInt role)
{
    if (role - 1 > 3)
        return super::createVirtualInterface(ether, role);
    IO80211VirtualInterface *inf = new IO80211VirtualInterface;
    if (inf) {
        if (inf->init(this, ether, role, role == APPLE80211_VIF_AWDL ? "awdl" : "p2p"))
            XYLog("%s role=%d succeed\n", __FUNCTION__, role);
        else {
            inf->release();
            return NULL;
        }
    }
    return inf;
}

int AirportItlwm::
bpfOutputPacket(OSObject *object, UInt dltType, mbuf_t m)
{
    XYLog("%s dltType=%d\n", __FUNCTION__, dltType);
    if (dltType == DLT_IEEE802_11_RADIO || dltType == DLT_IEEE802_11)
        return bpfOutput80211Radio(object, m);
    if (dltType == DLT_RAW)
        return outputActionFrame(object, m);
    mbuf_freem(m);
    return 1;
}

void AirportItlwm::
requestPacketTx(void *object, UInt )
{
    UInt32 ret;
    struct TxPacketRequest request;
    if (object == NULL)
        return;
    IO80211VirtualInterface *interface = OSDynamicCast(IO80211VirtualInterface, (OSObject *)object);
    if (interface) {
        memset(&request, 0, sizeof(request));
        if (interface->getInterfaceRole() == APPLE80211_VIF_AWDL) {
//            interface->dequeueTxPackets(&request);
//
//            ret = outputPacket(NULL, interface);
//            if (ret == kIOReturnSuccess) {
//                interface->reportTransmitStatus(NULL, ret, NULL);
//            }
        }
    }
}


================================================
FILE: AirportItlwm/AirportItlwm.hpp
================================================
/*
* Copyright (C) 2020  钟先耀
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*/
#include "Apple80211.h"

#include "IOKit/network/IOGatedOutputQueue.h"
#include <libkern/c++/OSString.h>
#include <IOKit/IOService.h>
#include <IOKit/pci/IOPCIDevice.h>
#include <IOKit/IOLib.h>
#include <libkern/OSKextLib.h>
#include <libkern/c++/OSMetaClass.h>
#include <IOKit/IOFilterInterruptEventSource.h>

#include "ItlIwm.hpp"
#include "ItlIwx.hpp"
#include "ItlIwn.hpp"

#include "AirportItlwmInterface.hpp"

enum
{
    kPowerStateOff = 0,
    kPowerStateOn,
    kPowerStateCount
};

#define kWatchDogTimerPeriod 1000

class AirportItlwm : public IO80211Controller {
    OSDeclareDefaultStructors(AirportItlwm)
#define IOCTL(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCGA80211) { \
ret = get##REQ(interface, (struct DATA_TYPE* )data); \
} else { \
ret = set##REQ(interface, (struct DATA_TYPE* )data); \
}
    
#define IOCTL_GET(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCGA80211) { \
ret = get##REQ(interface, (struct DATA_TYPE* )data); \
}
#define IOCTL_SET(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCSA80211) { \
ret = set##REQ(interface, (struct DATA_TYPE* )data); \
}
#define FUNC_IOCTL(REQ, DATA_TYPE) \
FUNC_IOCTL_GET(REQ, DATA_TYPE) \
FUNC_IOCTL_SET(REQ, DATA_TYPE)
#define FUNC_IOCTL_GET(REQ, DATA_TYPE) \
IOReturn get##REQ(OSObject *object, struct DATA_TYPE *data);
#define FUNC_IOCTL_SET(REQ, DATA_TYPE) \
IOReturn set##REQ(OSObject *object, struct DATA_TYPE *data);
    
public:
    virtual bool init(OSDictionary *properties) override;
    virtual void free() override;
    virtual IOService* probe(IOService* provider, SInt32* score) override;
    virtual bool start(IOService *provider) override;
    virtual void stop(IOService *provider) override;
    virtual IOReturn getHardwareAddress(IOEthernetAddress* addrP) override;
    virtual IOReturn setHardwareAddress(const IOEthernetAddress * addrP) override;
    virtual IOReturn enable(IONetworkInterface *netif) override;
    virtual IOReturn disable(IONetworkInterface *netif) override;
    virtual UInt32 outputPacket(mbuf_t, void * param) override;
    virtual IOReturn setPromiscuousMode(IOEnetPromiscuousMode mode) override;
    virtual IOReturn setMulticastMode(IOEnetMulticastMode mode) override;
    virtual IOReturn setMulticastList(IOEthernetAddress* addr, UInt32 len) override;
    virtual bool configureInterface(IONetworkInterface *netif) override;
    virtual bool createWorkLoop() override;
    virtual IOWorkLoop* getWorkLoop() const override;
    virtual const OSString * newVendorString() const override;
    virtual const OSString * newModelString() const override;
    virtual IONetworkInterface * createInterface() override;
    virtual bool setLinkStatus(
                               UInt32                  status,
                               const IONetworkMedium * activeMedium = 0,
                               UInt64                  speed        = 0,
                               OSData *                data         = 0) override;
    
    static IOReturn setLinkStateGated(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3);
    
#ifdef __PRIVATE_SPI__
    virtual IOReturn outputStart(IONetworkInterface *interface, IOOptionBits options) override;
#endif
    
    void releaseAll();
    void associateSSID(uint8_t *ssid, uint32_t ssid_len, const struct ether_addr &bssid, uint32_t authtype_lower, uint32_t authtype_upper, uint8_t *key, uint32_t key_len, int key_index);
    void setPTK(const u_int8_t *key, size_t key_len);
    void setGTK(const u_int8_t *key, size_t key_len, u_int8_t kid, u_int8_t *rsc);
    void watchdogAction(IOTimerEventSource *timer);
    bool initPCIPowerManagment(IOPCIDevice *provider);
    static IOReturn tsleepHandler(OSObject* owner, void* arg0 = 0, void* arg1 = 0, void* arg2 = 0, void* arg3 = 0);
    static void eventHandler(struct ieee80211com *, int, void *);
    IOReturn enableAdapter(IONetworkInterface *netif);
    void disableAdapter(IONetworkInterface *netif);
    
    //IO80211
    virtual IOReturn getHardwareAddressForInterface(IO80211Interface* netif,
                                            IOEthernetAddress* addr) override;
    virtual SInt32 monitorModeSetEnabled(IO80211Interface* interface, bool enabled,
                                 UInt32 dlt) override;
    virtual SInt32 apple80211Request(unsigned int request_type, int request_number,
                             IO80211Interface* interface, void* data) override;
    //scan
    static void fakeScanDone(OSObject *owner, IOTimerEventSource *sender);
    //authentication
    virtual bool useAppleRSNSupplicant(IO80211Interface *interface) override;
    virtual int outputRaw80211Packet(IO80211Interface *interface, mbuf_t m) override;
    //virtual interface
    virtual SInt32 enableVirtualInterface(IO80211VirtualInterface *interface) override;
    virtual SInt32 disableVirtualInterface(IO80211VirtualInterface *interface) override;
    virtual IO80211VirtualInterface* createVirtualInterface(ether_addr *eth,uint role) override;
    virtual SInt32 apple80211VirtualRequest(uint request_type, int request_number,IO80211VirtualInterface *interface,void *data) override;
    virtual SInt32 stopDMA() override;
    virtual UInt32 hardwareOutputQueueDepth(IO80211Interface* interface) override;
    virtual SInt32 performCountryCodeOperation(IO80211Interface* interface, IO80211CountryCodeOp op) override;
    virtual SInt32 enableFeature(IO80211FeatureCode code, void* data) override;
    virtual void requestPacketTx(void*, UInt) override;
    virtual int bpfOutputPacket(OSObject *,UInt,mbuf_t) override;
    int outputActionFrame(OSObject *, mbuf_t m);
    int bpfOutput80211Radio(OSObject *, mbuf_t m);
    
    
    
    //AirportSTAIOCTL
    FUNC_IOCTL(SSID, apple80211_ssid_data)
    FUNC_IOCTL(AUTH_TYPE, apple80211_authtype_data)
    FUNC_IOCTL(CHANNEL, apple80211_channel_data)
    FUNC_IOCTL(PROTMODE, apple80211_protmode_data)
    FUNC_IOCTL_GET(TXPOWER, apple80211_txpower_data)
    FUNC_IOCTL_GET(RATE, apple80211_rate_data)
    FUNC_IOCTL(BSSID, apple80211_bssid_data)
    FUNC_IOCTL_SET(SCAN_REQ, apple80211_scan_data)
    FUNC_IOCTL_SET(SCAN_REQ_MULTIPLE, apple80211_scan_multiple_data)
    FUNC_IOCTL_GET(SCAN_RESULT, apple80211_scan_result*)
    FUNC_IOCTL_GET(CARD_CAPABILITIES, apple80211_capability_data)
    FUNC_IOCTL_GET(STATE, apple80211_state_data)
    FUNC_IOCTL_GET(PHY_MODE, apple80211_phymode_data)
    FUNC_IOCTL_GET(OP_MODE, apple80211_opmode_data)
    FUNC_IOCTL_GET(RSSI, apple80211_rssi_data)
    FUNC_IOCTL_GET(NOISE, apple80211_noise_data)
    FUNC_IOCTL_GET(INT_MIT, apple80211_intmit_data)
    FUNC_IOCTL(POWER, apple80211_power_data)
    FUNC_IOCTL_SET(ASSOCIATE, apple80211_assoc_data)
    FUNC_IOCTL_GET(ASSOCIATE_RESULT, apple80211_assoc_result_data)
    IOReturn setDISASSOCIATE(OSObject *);
    FUNC_IOCTL_GET(RATE_SET, apple80211_rate_set_data)
    FUNC_IOCTL_GET(MCS_INDEX_SET, apple80211_mcs_index_set_data)
    FUNC_IOCTL_GET(VHT_MCS_INDEX_SET, apple80211_vht_mcs_index_set_data)
    FUNC_IOCTL(MCS_VHT, apple80211_mcs_vht_data)
    FUNC_IOCTL_GET(SUPPORTED_CHANNELS, apple80211_sup_channel_data)
    FUNC_IOCTL_GET(LOCALE, apple80211_locale_data)
    FUNC_IOCTL(DEAUTH, apple80211_deauth_data)
    FUNC_IOCTL_GET(TX_ANTENNA, apple80211_antenna_data)
    FUNC_IOCTL_GET(ANTENNA_DIVERSITY, apple80211_antenna_data)
    FUNC_IOCTL_GET(DRIVER_VERSION, apple80211_version_data)
    FUNC_IOCTL_GET(HARDWARE_VERSION, apple80211_version_data)
    FUNC_IOCTL(RSN_IE, apple80211_rsn_ie_data)
    FUNC_IOCTL_GET(AP_IE_LIST, apple80211_ap_ie_data)
    FUNC_IOCTL_GET(LINK_CHANGED_EVENT_DATA, apple80211_link_changed_event_data)
    FUNC_IOCTL_GET(ASSOCIATION_STATUS, apple80211_assoc_status_data)
    FUNC_IOCTL(COUNTRY_CODE, apple80211_country_code_data)
    FUNC_IOCTL_GET(RADIO_INFO, apple80211_radio_info_data)
    FUNC_IOCTL_GET(MCS, apple80211_mcs_data)
    FUNC_IOCTL_SET(VIRTUAL_IF_CREATE, apple80211_virt_if_create_data)
    FUNC_IOCTL_SET(VIRTUAL_IF_DELETE, apple80211_virt_if_delete_data)
    FUNC_IOCTL_GET(ROAM_THRESH, apple80211_roam_threshold_data)
    FUNC_IOCTL_GET(POWERSAVE, apple80211_powersave_data)
    FUNC_IOCTL_SET(CIPHER_KEY, apple80211_key)
    FUNC_IOCTL_SET(SCANCACHE_CLEAR, apple80211req)
    FUNC_IOCTL(TX_NSS, apple80211_tx_nss_data)
    FUNC_IOCTL_GET(NSS, apple80211_nss_data)
    FUNC_IOCTL_SET(ROAM, apple80211_sta_roam_data);
    
    //AirportVirtualIOCTL
    FUNC_IOCTL(AWDL_PEER_TRAFFIC_REGISTRATION, apple80211_awdl_peer_traffic_registration)
    FUNC_IOCTL(AWDL_ELECTION_METRIC, apple80211_awdl_election_metric)
    FUNC_IOCTL(SYNC_ENABLED, apple80211_awdl_sync_enabled)
    FUNC_IOCTL(SYNC_FRAME_TEMPLATE, apple80211_awdl_sync_frame_template)
    FUNC_IOCTL_GET(AWDL_HT_CAPABILITY, apple80211_ht_capability)
    FUNC_IOCTL_GET(AWDL_VHT_CAPABILITY, apple80211_vht_capability)
    
    //AWDL
    FUNC_IOCTL(AWDL_BSSID, apple80211_awdl_bssid)
    FUNC_IOCTL_GET(CHANNELS_INFO, apple80211_channels_info)
    FUNC_IOCTL(PEER_CACHE_MAXIMUM_SIZE, apple80211_peer_cache_maximum_size)
    FUNC_IOCTL(AWDL_ELECTION_ID, apple80211_awdl_election_id)
    FUNC_IOCTL(AWDL_MASTER_CHANNEL, apple80211_awdl_master_channel)
    FUNC_IOCTL(AWDL_SECONDARY_MASTER_CHANNEL, apple80211_awdl_secondary_master_channel)
    FUNC_IOCTL(AWDL_MIN_RATE, apple80211_awdl_min_rate)
    FUNC_IOCTL(AWDL_ELECTION_RSSI_THRESHOLDS, apple80211_awdl_election_rssi_thresholds)
    FUNC_IOCTL(AWDL_SYNCHRONIZATION_CHANNEL_SEQUENCE, apple80211_awdl_sync_channel_sequence)
    FUNC_IOCTL(AWDL_PRESENCE_MODE, apple80211_awdl_presence_mode)
    FUNC_IOCTL(AWDL_EXTENSION_STATE_MACHINE_PARAMETERS, apple80211_awdl_extension_state_machine_parameter)
    FUNC_IOCTL(AWDL_SYNC_STATE, apple80211_awdl_sync_state)
    FUNC_IOCTL(AWDL_SYNC_PARAMS, apple80211_awdl_sync_params)
    FUNC_IOCTL_GET(AWDL_CAPABILITIES, apple80211_awdl_cap)
    FUNC_IOCTL(AWDL_AF_TX_MODE, apple80211_awdl_af_tx_mode)
    FUNC_IOCTL_SET(AWDL_OOB_AUTO_REQUEST, apple80211_awdl_oob_request)
    FUNC_IOCTL(ROAM_PROFILE, apple80211_roam_profile_band_data)
    FUNC_IOCTL(WOW_PARAMETERS, apple80211_wow_parameter_data)
    FUNC_IOCTL(IE, apple80211_ie_data)
    FUNC_IOCTL_SET(P2P_SCAN, apple80211_scan_data)
    FUNC_IOCTL_SET(P2P_LISTEN, apple80211_p2p_listen_data)
    FUNC_IOCTL_SET(P2P_GO_CONF, apple80211_p2p_go_conf_data)
    FUNC_IOCTL(BTCOEX_PROFILES, apple80211_btc_profiles_data)
    FUNC_IOCTL(BTCOEX_CONFIG, apple80211_btc_config_data)
    FUNC_IOCTL(BTCOEX_OPTIONS, apple80211_btc_options_data)
    FUNC_IOCTL(BTCOEX_MODE, apple80211_btc_mode_data)
    
    
    //-----------------------------------------------------------------------
    // Power management support.
    //-----------------------------------------------------------------------
    virtual IOReturn registerWithPolicyMaker( IOService * policyMaker ) override;
    virtual IOReturn setPowerState( unsigned long powerStateOrdinal,
                                    IOService *   policyMaker) override;
    virtual IOReturn setWakeOnMagicPacket( bool active ) override;
    void setPowerStateOff(void);
    void setPowerStateOn(void);
    void unregistPM();
    
    bool createMediumTables(const IONetworkMedium **primary);
    virtual IOReturn getPacketFilters(const OSSymbol *group, UInt32 *filters) const override;
    virtual IOReturn selectMedium(const IONetworkMedium *medium) override;
    virtual UInt32 getFeatures() const override;
    
public:
    IOInterruptEventSource* fInterrupt;
    IOTimerEventSource *watchdogTimer;
    IOPCIDevice *pciNub;
    IONetworkStats *fpNetStats;
    AirportItlwmInterface *fNetIf;
    IOWorkLoop *fWatchdogWorkLoop;
    ItlHalService *fHalService;
    
    //pm
    thread_call_t powerOnThreadCall;
    thread_call_t powerOffThreadCall;
    UInt32 pmPowerState;
    IOService *pmPolicyMaker;
    UInt8 pmPCICapPtr;
    bool magicPacketEnabled;
    bool magicPacketSupported;
    
    //IO80211
    uint8_t power_state;
    struct ieee80211_node *fNextNodeToSend;
    bool fScanResultWrapping;
    IOTimerEventSource *scanSource;
    
    u_int32_t current_authtype_lower;
    u_int32_t current_authtype_upper;
    UInt64 currentSpeed;
    UInt32 currentStatus;
    bool disassocIsVoluntary;
    char geo_location_cc[3];
    
    IO80211P2PInterface *fP2PDISCInterface;
    IO80211P2PInterface *fP2PGOInterface;
    IO80211P2PInterface *fAWDLInterface;
    
    //AWDL
    uint8_t *syncFrameTemplate;
    uint32_t syncFrameTemplateLength;
    uint8_t awdlBSSID[6];
    uint32_t awdlSyncState;
    uint32_t awdlElectionId;
    uint32_t awdlPresenceMode;
    uint16_t awdlMasterChannel;
    uint16_t awdlSecondaryMasterChannel;
    uint8_t *roamProfile;
    struct apple80211_btc_profiles_data *btcProfile;
    struct apple80211_btc_config_data btcConfig;
    uint32_t btcMode;
    uint32_t btcOptions;
    bool awdlSyncEnable;
};


================================================
FILE: AirportItlwm/AirportItlwmEthernetInterface.cpp
================================================
//
//  AirportItlwmEthernetInterface.cpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//

#include "AirportItlwmEthernetInterface.hpp"

#include <sys/_if_ether.h>
#include <net80211/ieee80211_var.h>

#define super IOEthernetInterface
OSDefineMetaClassAndStructors(AirportItlwmEthernetInterface, IOEthernetInterface);

bool AirportItlwmEthernetInterface::
initWithSkywalkInterfaceAndProvider(IONetworkController *controller, IO80211SkywalkInterface *interface)
{
    bool ret = super::init(controller);
    if (ret)
        this->interface = interface;
    this->isAttach = false;
    return ret;
}

IOReturn AirportItlwmEthernetInterface::
attachToDataLinkLayer( IOOptionBits options, void *parameter )
{
    XYLog("%s\n", __FUNCTION__);
    char infName[IFNAMSIZ];
    IOReturn ret = super::attachToDataLinkLayer(options, parameter);
    if (ret == kIOReturnSuccess && interface) {
        UInt8 builtIn = 0;
        IOEthernetAddress addr;
        interface->setProperty("built-in", OSData::withBytes(&builtIn, sizeof(builtIn)));
        snprintf(infName, sizeof(infName), "%s%u", ifnet_name(getIfnet()), ifnet_unit(getIfnet()));
        interface->setProperty("IOInterfaceName", OSString::withCString(infName));
        interface->setProperty(kIOInterfaceUnit, OSNumber::withNumber(ifnet_unit(getIfnet()), 8));
        interface->setProperty(kIOInterfaceNamePrefix, OSString::withCString(ifnet_name(getIfnet())));
        if (OSDynamicCast(IOEthernetController, getController())->getHardwareAddress(&addr) == kIOReturnSuccess)
            setProperty(kIOMACAddress,  (void *) &addr,
                        kIOEthernetAddressSize);
        interface->registerService();
        interface->prepareBSDInterface(getIfnet(), 0);
//        ret = bpf_attach(getIfnet(), DLT_RAW, 0x48, &AirportItlwmEthernetInterface::bpfOutputPacket, &AirportItlwmEthernetInterface::bpfTap);
    }
    isAttach = true;
    return ret;
}

void AirportItlwmEthernetInterface::
detachFromDataLinkLayer(IOOptionBits options, void *parameter)
{
    super::detachFromDataLinkLayer(options, parameter);
    isAttach = false;
}

/**
 Add another hack to fake that the provider is IOSkywalkNetworkInterface, to avoid skywalkfamily instance cast panic.
 */
IOService *AirportItlwmEthernetInterface::
getProvider() const
{
    return isAttach ? this->interface : super::getProvider();
}

errno_t AirportItlwmEthernetInterface::
bpfOutputPacket(ifnet_t interface, u_int32_t data_link_type, mbuf_t packet)
{
    XYLog("%s data_link_type: %d\n", __FUNCTION__, data_link_type);
    AirportItlwmEthernetInterface *networkInterface = (AirportItlwmEthernetInterface *)ifnet_softc(interface);
    return networkInterface->enqueueOutputPacket(packet);
}

errno_t AirportItlwmEthernetInterface::
bpfTap(ifnet_t interface, u_int32_t data_link_type, bpf_tap_mode direction)
{
    XYLog("%s data_link_type: %d direction: %d\n", __FUNCTION__, data_link_type, direction);
    return 0;
}

bool AirportItlwmEthernetInterface::
setLinkState(IO80211LinkState state)
{
    if (state == kIO80211NetworkLinkUp) {
        ifnet_set_flags(getIfnet(), ifnet_flags(getIfnet()) | (IFF_UP | IFF_RUNNING), (IFF_UP | IFF_RUNNING));
    } else {
        ifnet_set_flags(getIfnet(), ifnet_flags(getIfnet()) & ~(IFF_UP | IFF_RUNNING), 0);
    }
    return true;
}

extern const char* hexdump(uint8_t *buf, size_t len);

UInt32 AirportItlwmEthernetInterface::
inputPacket(mbuf_t packet, UInt32 length, IOOptionBits options, void *param)
{
    ether_header_t *eh;
    size_t len = mbuf_len(packet);
    
    eh = (ether_header_t *)mbuf_data(packet);
    if (len >= sizeof(ether_header_t) && eh->ether_type == htons(ETHERTYPE_PAE)) { // EAPOL packet
        const char* dump = hexdump((uint8_t*)mbuf_data(packet), len);
        XYLog("input EAPOL packet, len: %zu, data: %s\n", len, dump ? dump : "Failed to allocate memory");
        if (dump)
            IOFree((void*)dump, 3 * len + 1);
    }
    return IOEthernetInterface::inputPacket(packet, length, options, param);
}


================================================
FILE: AirportItlwm/AirportItlwmEthernetInterface.hpp
================================================
//
//  AirportItlwmEthernetInterface.hpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//

#ifndef AirportItlwmEthernetInterface_hpp
#define AirportItlwmEthernetInterface_hpp

extern "C" {
#include <net/bpf.h>
}
#include "Airport/Apple80211.h"
#include <IOKit/IOLib.h>
#include <libkern/OSKextLib.h>
#include <sys/kernel_types.h>
#include <IOKit/network/IOEthernetInterface.h>

class AirportItlwmEthernetInterface : public IOEthernetInterface {
    OSDeclareDefaultStructors(AirportItlwmEthernetInterface)
    
public:
    virtual IOReturn attachToDataLinkLayer( IOOptionBits options,
                                            void *       parameter ) override;
    
    virtual void     detachFromDataLinkLayer( IOOptionBits options,
                                              void *       parameter ) override;
    
    virtual bool initWithSkywalkInterfaceAndProvider(IONetworkController *controller, IO80211SkywalkInterface *interface);
    
    virtual bool setLinkState(IO80211LinkState state);
    
    static errno_t bpfOutputPacket(ifnet_t interface, u_int32_t data_link_type,
                                  mbuf_t packet);
    
    static errno_t bpfTap(ifnet_t interface, u_int32_t data_link_type,
                          bpf_tap_mode direction);
    
    virtual UInt32   inputPacket(
                                 mbuf_t          packet,
                                 UInt32          length  = 0,
                                 IOOptionBits    options = 0,
                                 void *          param   = 0 ) override;
    
    virtual IOService * getProvider( void ) const override;
    
private:
    IO80211SkywalkInterface *interface;
    bool isAttach;
};

#endif /* AirportItlwmEthernetInterface_hpp */


================================================
FILE: AirportItlwm/AirportItlwmInterface.cpp
================================================
//
//  AirportItlwmInterface.cpp
//  AirportItlwm
//
//  Created by qcwap on 2020/9/7.
//  Copyright © 2020 钟先耀. All rights reserved.
//

#include "AirportItlwmInterface.hpp"

#define super IO80211Interface
OSDefineMetaClassAndStructors(AirportItlwmInterface, IO80211Interface);

const char* hexdump(uint8_t *buf, size_t len)
{
    ssize_t str_len = len * 3 + 1;
    char *str = (char*)IOMalloc(str_len);
    if (!str)
        return nullptr;
    for (size_t i = 0; i < len; i++)
    snprintf(str + 3 * i, (len - i) * 3, "%02x ", buf[i]);
    str[MAX(str_len - 2, 0)] = 0;
    return str;
}

bool AirportItlwmInterface::
init(IO80211Controller *controller, ItlHalService *halService)
{
    if (!super::init(controller))
        return false;
    this->fHalService = halService;
    return true;
}

UInt32 AirportItlwmInterface::
inputPacket(mbuf_t packet, UInt32 length, IOOptionBits options, void *param)
{
    ether_header_t *eh;
    size_t len = mbuf_len(packet);
    
    eh = (ether_header_t *)mbuf_data(packet);
    if (len >= sizeof(ether_header_t) && eh->ether_type == htons(ETHERTYPE_PAE)) { // EAPOL packet
        const char* dump = hexdump((uint8_t*)mbuf_data(packet), len);
        XYLog("input EAPOL packet, len: %zu, data: %s\n", len, dump ? dump : "Failed to allocate memory");
        if (dump)
            IOFree((void*)dump, 3 * len + 1);
        return IO80211Interface::inputPacket(packet, (UInt32)len, 0, param);
    }
    return IOEthernetInterface::inputPacket(packet, length, options, param);
}


================================================
FILE: AirportItlwm/AirportItlwmInterface.hpp
================================================
//
//  AirportItlwmInterface.hpp
//  AirportItlwm
//
//  Created by qcwap on 2020/9/7.
//  Copyright © 2020 钟先耀. All rights reserved.
//

#ifndef AirportItlwmInterface_hpp
#define AirportItlwmInterface_hpp

#include "Airport/Apple80211.h"
#include <IOKit/IOLib.h>
#include <libkern/OSKextLib.h>
#include <sys/kernel_types.h>
#include <HAL/ItlHalService.hpp>

class AirportItlwmInterface : public IO80211Interface {
    OSDeclareDefaultStructors(AirportItlwmInterface)
    
public:
    virtual UInt32   inputPacket(
                                 mbuf_t          packet,
                                 UInt32          length  = 0,
                                 IOOptionBits    options = 0,
                                 void *          param   = 0 ) override;

    bool init(IO80211Controller *controller, ItlHalService *halService);

private:
    ItlHalService *fHalService;
};

#endif /* AirportItlwmInterface_hpp */


================================================
FILE: AirportItlwm/AirportItlwmSkywalkInterface.cpp
================================================
//
//  AirportItlwmSkywalkInterface.cpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//
#include "AirportItlwmV2.hpp"
#include "AirportItlwmSkywalkInterface.hpp"
#include <sys/CTimeout.hpp>
#include <libkern/c++/OSMetaClass.h>
#include <crypto/sha1.h>
#include <net80211/ieee80211_node.h>
#include <net80211/ieee80211_ioctl.h>
#include <net80211/ieee80211_priv.h>

#define super IO80211InfraProtocol
OSDefineMetaClassAndStructors(AirportItlwmSkywalkInterface, IO80211InfraProtocol);

const char* hexdump(uint8_t *buf, size_t len) {
    ssize_t str_len = len * 3 + 1;
    char *str = (char*)IOMalloc(str_len);
    if (!str)
        return nullptr;
    for (size_t i = 0; i < len; i++)
    snprintf(str + 3 * i, (len - i) * 3, "%02x ", buf[i]);
    str[MAX(str_len - 2, 0)] = 0;
    return str;
}

static int ieeeChanFlag2appleScanFlagVentura(int flags)
{
    int ret = 0;
    if (flags & IEEE80211_CHAN_2GHZ)
        ret |= APPLE80211_C_FLAG_2GHZ;
    if (flags & IEEE80211_CHAN_5GHZ)
        ret |= APPLE80211_C_FLAG_5GHZ;
    ret |= (APPLE80211_C_FLAG_ACTIVE | APPLE80211_C_FLAG_20MHZ);
    return ret;
}

static int ieeeChanFlag2apple(int flags, int bw)
{
    int ret = 0;
    if (flags & IEEE80211_CHAN_2GHZ)
        ret |= APPLE80211_C_FLAG_2GHZ;
    if (flags & IEEE80211_CHAN_5GHZ)
        ret |= APPLE80211_C_FLAG_5GHZ;
    if (!(flags & IEEE80211_CHAN_PASSIVE))
        ret |= APPLE80211_C_FLAG_ACTIVE;
    if (flags & IEEE80211_CHAN_DFS)
        ret |= APPLE80211_C_FLAG_DFS;
    if (bw == -1) {
        if (flags & IEEE80211_CHAN_VHT) {
            if ((flags & IEEE80211_CHAN_VHT160) || (flags & IEEE80211_CHAN_VHT80_80))
                ret |= APPLE80211_C_FLAG_160MHZ;
            if (flags & IEEE80211_CHAN_VHT80)
                ret |= APPLE80211_C_FLAG_80MHZ;
        } else if ((flags & IEEE80211_CHAN_HT40) && (flags & IEEE80211_CHAN_HT)) {
            ret |= APPLE80211_C_FLAG_40MHZ;
            if (flags & IEEE80211_CHAN_HT40U)
                ret |= APPLE80211_C_FLAG_EXT_ABV;
        } else if (flags & IEEE80211_CHAN_HT20)
            ret |= APPLE80211_C_FLAG_20MHZ;
        else if ((flags & IEEE80211_CHAN_CCK) || (flags & IEEE80211_CHAN_OFDM))
            ret |= APPLE80211_C_FLAG_10MHZ;
    } else {
        switch (bw) {
            case IEEE80211_CHAN_WIDTH_80P80:
            case IEEE80211_CHAN_WIDTH_160:
                ret |= APPLE80211_C_FLAG_160MHZ;
                break;
            case IEEE80211_CHAN_WIDTH_80:
                ret |= APPLE80211_C_FLAG_80MHZ;
                break;
            case IEEE80211_CHAN_WIDTH_40:
                ret |= APPLE80211_C_FLAG_40MHZ;
                if (flags & IEEE80211_CHAN_HT40U)
                    ret |= APPLE80211_C_FLAG_EXT_ABV;
                break;
            case IEEE80211_CHAN_WIDTH_20:
                ret |= APPLE80211_C_FLAG_20MHZ;
                break;
            default:
                if (flags & IEEE80211_CHAN_HT20)
                    ret |= APPLE80211_C_FLAG_20MHZ;
                else if ((flags & IEEE80211_CHAN_CCK) || (flags & IEEE80211_CHAN_OFDM))
                    ret |= APPLE80211_C_FLAG_10MHZ;
                break;
        }
    }
    return ret;
}

void AirportItlwmSkywalkInterface::associateSSID(uint8_t *ssid, uint32_t ssid_len, const struct ether_addr &bssid, uint32_t authtype_lower, uint32_t authtype_upper, uint8_t *key, uint32_t key_len, int key_index)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    
    ieee80211_disable_rsn(ic);
    ieee80211_disable_wep(ic);
    
    struct ieee80211_wpaparams     wpa;
    struct ieee80211_nwkey         nwkey;
    bzero(&wpa, sizeof(wpa));
    bzero(&nwkey, sizeof(nwkey));
    
    memset(ic->ic_des_essid, 0, IEEE80211_NWID_LEN);
    memcpy(ic->ic_des_essid, ssid, ssid_len);
    ic->ic_des_esslen = ssid_len;
    
    bool is_zero = true;
    for (int i = 0; i < IEEE80211_ADDR_LEN; i++)
    is_zero &= bssid.octet[i] == 0;
    
    if (!is_zero) {
        IEEE80211_ADDR_COPY(ic->ic_des_bssid, bssid.octet);
        ic->ic_flags |= IEEE80211_F_DESBSSID;
    }
    else {
        memset(ic->ic_des_bssid, 0, IEEE80211_ADDR_LEN);
        ic->ic_flags &= ~IEEE80211_F_DESBSSID;
    }

    // AUTHTYPE_WPA3_SAE AUTHTYPE_WPA3_FT_SAE
    // we don't really support WPA3, but we have announced we support WPA3 in card capability function. so we fake it as WPA2 to support some WPA2/WPA3 mix wifi connection.
    if (authtype_upper == APPLE80211_AUTHTYPE_WPA3_SAE || authtype_upper == APPLE80211_AUTHTYPE_WPA3_FT_SAE) {
        wpa.i_protos |= IEEE80211_WPA_PROTO_WPA2;
        authtype_upper |= APPLE80211_AUTHTYPE_WPA2_PSK;// hack
    }
    // AUTHTYPE_WPA3_ENTERPRISE AUTHTYPE_WPA3_FT_ENTERPRISE
    if (authtype_upper == APPLE80211_AUTHTYPE_WPA3_ENTERPRISE || authtype_upper == APPLE80211_AUTHTYPE_WPA3_FT_ENTERPRISE) {
        wpa.i_protos |= IEEE80211_WPA_PROTO_WPA2;
        authtype_upper |= APPLE80211_AUTHTYPE_WPA2;// hack
    }
    
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA | APPLE80211_AUTHTYPE_WPA_PSK | APPLE80211_AUTHTYPE_WPA2 | APPLE80211_AUTHTYPE_WPA2_PSK | APPLE80211_AUTHTYPE_SHA256_PSK | APPLE80211_AUTHTYPE_SHA256_8021X)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_protos = IEEE80211_WPA_PROTO_WPA1 | IEEE80211_WPA_PROTO_WPA2;
    }
    
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA_PSK | APPLE80211_AUTHTYPE_WPA2_PSK | APPLE80211_AUTHTYPE_SHA256_PSK)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_akms |= IEEE80211_WPA_AKM_PSK | IEEE80211_WPA_AKM_SHA256_PSK;
        wpa.i_enabled = 1;
        memcpy(ic->ic_psk, key, sizeof(ic->ic_psk));
        ic->ic_flags |= IEEE80211_F_PSK;
        ieee80211_ioctl_setwpaparms(ic, &wpa);
    }
    if (authtype_upper & (APPLE80211_AUTHTYPE_WPA | APPLE80211_AUTHTYPE_WPA2 | APPLE80211_AUTHTYPE_SHA256_8021X)) {
        XYLog("%s %d\n", __FUNCTION__, __LINE__);
        wpa.i_akms |= IEEE80211_WPA_AKM_8021X | IEEE80211_WPA_AKM_SHA256_8021X;
        wpa.i_enabled = 1;
        ieee80211_ioctl_setwpaparms(ic, &wpa);
    }
    
    if (authtype_lower == APPLE80211_AUTHTYPE_SHARED) {
        XYLog("shared key authentication is not supported!\n");
        return;
    }
    
    if (authtype_upper == APPLE80211_AUTHTYPE_NONE && authtype_lower == APPLE80211_AUTHTYPE_OPEN) { // Open or WEP Open System
        if (key_len > 0) {
            XYLog("%s %d\n", __FUNCTION__, __LINE__);
            nwkey.i_wepon = IEEE80211_NWKEY_WEP;
            nwkey.i_defkid = key_index + 1;
            nwkey.i_key[key_index].i_keylen = (int)key_len;
            nwkey.i_key[key_index].i_keydat = key;
            ieee80211_ioctl_setnwkeys(ic, &nwkey);
        }
    }
}

void AirportItlwmSkywalkInterface::setPTK(const u_int8_t *key, size_t key_len) {
    struct ieee80211com *ic = fHalService->get80211Controller();
    struct ieee80211_node    * ni = ic->ic_bss;
    struct ieee80211_key *k;
    int keylen;
    
    ni->ni_rsn_supp_state = RNSA_SUPP_PTKDONE;
    
    if (ni->ni_rsncipher != IEEE80211_CIPHER_USEGROUP) {
        u_int64_t prsc;
        
        /* check that key length matches that of pairwise cipher */
        keylen = ieee80211_cipher_keylen(ni->ni_rsncipher);
        if (key_len != keylen) {
            XYLog("PTK length mismatch. expected %d, got %zu\n", keylen, key_len);
            return;
        }
        prsc = /*(gtk == NULL) ? LE_READ_6(key->rsc) :*/ 0;
        
        /* map PTK to 802.11 key */
        k = &ni->ni_pairwise_key;
        memset(k, 0, sizeof(*k));
        k->k_cipher = ni->ni_rsncipher;
        k->k_rsc[0] = prsc;
        k->k_len = keylen;
        memcpy(k->k_key, key, k->k_len);
        /* install the PTK */
        if ((*ic->ic_set_key)(ic, ni, k) != 0) {
            XYLog("setting PTK failed\n");
            return;
        }
        else
            XYLog("setting PTK successfully\n");
        ni->ni_flags &= ~IEEE80211_NODE_RSN_NEW_PTK;
        ni->ni_flags &= ~IEEE80211_NODE_TXRXPROT;
        ni->ni_flags |= IEEE80211_NODE_RXPROT;
    } else if (ni->ni_rsncipher != IEEE80211_CIPHER_USEGROUP)
        XYLog("%s: unexpected pairwise key update received from %s\n",
              ic->ic_if.if_xname, ether_sprintf(ni->ni_macaddr));
}

void AirportItlwmSkywalkInterface::setGTK(const u_int8_t *gtk, size_t key_len, u_int8_t kid, u_int8_t *rsc) {
    struct ieee80211com *ic = fHalService->get80211Controller();
    struct ieee80211_node    * ni = ic->ic_bss;
    struct ieee80211_key *k;
    int keylen;
    
    if (gtk != NULL) {
        /* check that key length matches that of group cipher */
        keylen = ieee80211_cipher_keylen(ni->ni_rsngroupcipher);
        if (key_len != keylen) {
            XYLog("GTK length mismatch. expected %d, got %zu\n", keylen, key_len);
            return;
        }
        /* map GTK to 802.11 key */
        k = &ic->ic_nw_keys[kid];
        if (k->k_cipher == IEEE80211_CIPHER_NONE || k->k_len != keylen || memcmp(k->k_key, gtk, keylen) != 0) {
            memset(k, 0, sizeof(*k));
            k->k_id = kid;    /* 0-3 */
            k->k_cipher = ni->ni_rsngroupcipher;
            k->k_flags = IEEE80211_KEY_GROUP;
            //if (gtk[6] & (1 << 2))
            //  k->k_flags |= IEEE80211_KEY_TX;
            k->k_rsc[0] = LE_READ_6(rsc);
            k->k_len = keylen;
            memcpy(k->k_key, gtk, k->k_len);
            /* install the GTK */
            if ((*ic->ic_set_key)(ic, ni, k) != 0) {
                XYLog("setting GTK failed\n");
                return;
            }
            else
                XYLog("setting GTK successfully\n");
        }
    }
    
    if (true) {
        ni->ni_flags |= IEEE80211_NODE_TXRXPROT;
#ifndef IEEE80211_STA_ONLY
        if (ic->ic_opmode != IEEE80211_M_IBSS ||
            ++ni->ni_key_count == 2)
#endif
        {
            XYLog("marking port %s valid\n",
                  ether_sprintf(ni->ni_macaddr));
            ni->ni_port_valid = 1;
            ieee80211_set_link_state(ic, LINK_STATE_UP);
            ni->ni_assoc_fail = 0;
            if (ic->ic_opmode == IEEE80211_M_STA)
                ic->ic_rsngroupcipher = ni->ni_rsngroupcipher;
        }
    }
}

bool AirportItlwmSkywalkInterface::
init(IOService *provider)
{
    bool ret = IO80211InfraInterface::init();
    if (!ret) {
        XYLog("%s IO80211InfraInterface init failed\n", __PRETTY_FUNCTION__);
        return false;
    }
    instance = OSDynamicCast(AirportItlwm, provider);
    if (!instance)
        return false;
    this->fHalService = instance->fHalService;
    this->scanSource = instance->scanSource;
    return ret;
}

//ifnet_t AirportItlwmSkywalkInterface::
//getBSDInterface()
//{
//    if (instance->bsdInterface)
//        return instance->bsdInterface->getIfnet();
//    return NULL;
//}

IOReturn AirportItlwmSkywalkInterface::
getSSID(struct apple80211_ssid_data *sd)
{
    struct ieee80211com * ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(sd, 0, sizeof(*sd));
        sd->version = APPLE80211_VERSION;
        memcpy(sd->ssid_bytes, ic->ic_des_essid, strlen((const char*)ic->ic_des_essid));
        sd->ssid_len = (uint32_t)strlen((const char*)ic->ic_des_essid);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getAUTH_TYPE(struct apple80211_authtype_data *ad)
{
    ad->version = APPLE80211_VERSION;
    ad->authtype_lower = current_authtype_lower;
    ad->authtype_upper = current_authtype_upper;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setAUTH_TYPE(struct apple80211_authtype_data *ad)
{
    current_authtype_lower = ad->authtype_lower;
    current_authtype_upper = ad->authtype_upper;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setCIPHER_KEY(struct apple80211_key *key)
{
    XYLog("%s\n", __FUNCTION__);
    const char* keydump = hexdump(key->key, key->key_len);
    const char* rscdump = hexdump(key->key_rsc, key->key_rsc_len);
    const char* eadump = hexdump(key->key_ea.octet, APPLE80211_ADDR_LEN);
    static_assert(__offsetof(struct apple80211_key, key_ea) == 92, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, key_rsc_len) == 80, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kck_len) == 100, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kek_len) == 120, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kck_key) == 104, "struct corrupted");
    if (keydump && rscdump && eadump)
        XYLog("Set key request: len=%d cipher_type=%d flags=%d index=%d key=%s rsc_len=%d rsc=%s ea=%s\n",
              key->key_len, key->key_cipher_type, key->key_flags, key->key_index, keydump, key->key_rsc_len, rscdump, eadump);
    else
        XYLog("Set key request, but failed to allocate memory for hexdump\n");
    
    if (keydump)
        IOFree((void*)keydump, 3 * key->key_len + 1);
    if (rscdump)
        IOFree((void*)rscdump, 3 * key->key_rsc_len + 1);
    if (eadump)
        IOFree((void*)eadump, 3 * APPLE80211_ADDR_LEN + 1);
    
    switch (key->key_cipher_type) {
        case APPLE80211_CIPHER_NONE:
            // clear existing key
//            XYLog("Setting NONE key is not supported\n");
            break;
        case APPLE80211_CIPHER_WEP_40:
        case APPLE80211_CIPHER_WEP_104:
            XYLog("Setting WEP key %d is not supported\n", key->key_index);
            break;
        case APPLE80211_CIPHER_TKIP:
        case APPLE80211_CIPHER_AES_OCB:
        case APPLE80211_CIPHER_AES_CCM:
            switch (key->key_flags) {
                case 4: // PTK
                    setPTK(key->key, key->key_len);
                    break;
                case 0: // GTK
                    setGTK(key->key, key->key_len, key->key_index, key->key_rsc);
                    break;
            }
            break;
        case APPLE80211_CIPHER_PMK:
            XYLog("Setting WPA PMK is not supported\n");
            break;
        case APPLE80211_CIPHER_MSK:
            XYLog("Setting MSK\n");
            ieee80211_pmksa_add(fHalService->get80211Controller(), IEEE80211_AKM_8021X,
                                fHalService->get80211Controller()->ic_bss->ni_macaddr, key->key, 0);
            break;
        case APPLE80211_CIPHER_PMKSA:
            XYLog("Setting WPA PMKSA\n");
            ieee80211_pmksa_add(fHalService->get80211Controller(), IEEE80211_AKM_8021X,
                                fHalService->get80211Controller()->ic_bss->ni_macaddr, key->key, 0);
            break;
    }
    //fInterface->postMessage(APPLE80211_M_CIPHER_KEY_CHANGED);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getPHY_MODE(struct apple80211_phymode_data *pd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    
    pd->version = APPLE80211_VERSION;
    pd->phy_mode = APPLE80211_MODE_11A
    | APPLE80211_MODE_11B
    | APPLE80211_MODE_11G
    | APPLE80211_MODE_11N;
    
    if (ic->ic_flags & IEEE80211_F_VHTON)
        pd->phy_mode |= APPLE80211_MODE_11AC;
    
    if (ic->ic_flags & IEEE80211_F_HEON)
        pd->phy_mode |= APPLE80211_MODE_11AX;
    
    switch (fHalService->get80211Controller()->ic_curmode) {
        case IEEE80211_MODE_AUTO:
            pd->active_phy_mode = APPLE80211_MODE_AUTO;
            break;
        case IEEE80211_MODE_11A:
            pd->active_phy_mode = APPLE80211_MODE_11A;
            break;
        case IEEE80211_MODE_11B:
            pd->active_phy_mode = APPLE80211_MODE_11B;
            break;
        case IEEE80211_MODE_11G:
            pd->active_phy_mode = APPLE80211_MODE_11G;
            break;
        case IEEE80211_MODE_11N:
            pd->active_phy_mode = APPLE80211_MODE_11N;
            break;
        case IEEE80211_MODE_11AC:
            pd->active_phy_mode = APPLE80211_MODE_11AC;
            break;
        case IEEE80211_MODE_11AX:
            pd->active_phy_mode = APPLE80211_MODE_11AX;
            break;
            
        default:
            pd->active_phy_mode = APPLE80211_MODE_AUTO;
            break;
    }
    
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getCHANNEL(struct apple80211_channel_data *cd)
{
    struct ieee80211com * ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(cd, 0, sizeof(apple80211_channel_data));
        cd->version = APPLE80211_VERSION;
        cd->channel.version = APPLE80211_VERSION;
        cd->channel.channel = ieee80211_chan2ieee(ic, ic->ic_bss->ni_chan);
        cd->channel.flags = ieeeChanFlag2apple(ic->ic_bss->ni_chan->ic_flags, ic->ic_bss->ni_chw);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getSTATE(struct apple80211_state_data *sd)
{
    memset(sd, 0, sizeof(*sd));
    sd->version = APPLE80211_VERSION;
    sd->state = fHalService->get80211Controller()->ic_state;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getMCS_INDEX_SET(struct apple80211_mcs_index_set_data *ad)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(ad, 0, sizeof(*ad));
        ad->version = APPLE80211_VERSION;
        size_t size = min(ARRAY_SIZE(ic->ic_bss->ni_rxmcs), ARRAY_SIZE(ad->mcs_set_map));
        for (int i = 0; i < size; i++)
            ad->mcs_set_map[i] = ic->ic_bss->ni_rxmcs[i];
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getVHT_MCS_INDEX_SET(struct apple80211_vht_mcs_index_set_data *data)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_bss == NULL || ic->ic_curmode < IEEE80211_MODE_11AC) {
        return kIOReturnError;
    }
    memset(data, 0, sizeof(struct apple80211_vht_mcs_index_set_data));
    data->version = APPLE80211_VERSION;
    data->mcs_map = ic->ic_bss->ni_vht_mcsinfo.tx_mcs_map;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getMCS_VHT(struct apple80211_mcs_vht_data *data)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_bss == NULL || ic->ic_curmode < IEEE80211_MODE_11AC) {
        return kIOReturnError;
    }
    memset(data, 0, sizeof(struct apple80211_mcs_vht_data));
    data->version = APPLE80211_VERSION;
    data->guard_interval = (ieee80211_node_supports_vht_sgi80(ic->ic_bss) || ieee80211_node_supports_vht_sgi160(ic->ic_bss)) ? APPLE80211_GI_SHORT : APPLE80211_GI_LONG;
    data->index = ic->ic_bss->ni_txmcs;
    data->nss = fHalService->getDriverInfo()->getTxNSS();
    switch (ic->ic_bss->ni_chw) {
        case IEEE80211_CHAN_WIDTH_40:
            data->bw = 40;
            break;
        case IEEE80211_CHAN_WIDTH_80:
            data->bw = 80;
            break;
        case IEEE80211_CHAN_WIDTH_80P80:
        case IEEE80211_CHAN_WIDTH_160:
            data->bw = 160;
            break;
            
        default:
            data->bw = 20;
            break;
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getRATE_SET(struct apple80211_rate_set_data *ad)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(ad, 0, sizeof(*ad));
        ad->version = APPLE80211_VERSION;
        ad->num_rates = ic->ic_bss->ni_rates.rs_nrates;
        size_t size = min(ic->ic_bss->ni_rates.rs_nrates, ARRAY_SIZE(ad->rates));
        for (int i=0; i < size; i++) {
            struct apple80211_rate apple_rate = ad->rates[i];
            apple_rate.version = APPLE80211_VERSION;
            apple_rate.rate = ic->ic_bss->ni_rates.rs_rates[i];
            apple_rate.flags = 0;
        }
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getOP_MODE(struct apple80211_opmode_data *od)
{
    od->version = APPLE80211_VERSION;
    od->op_mode = APPLE80211_M_STA;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getTXPOWER(struct apple80211_txpower_data *txd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(txd, 0, sizeof(*txd));
        txd->version = APPLE80211_VERSION;
        txd->txpower = ic->ic_txpower;
        txd->txpower_unit = APPLE80211_UNIT_PERCENT;
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getRATE(struct apple80211_rate_data *rd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_bss == NULL)
        return 6;
    int nss;
    int sgi;
    int index = 0;
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(rd, 0, sizeof(*rd));
        rd->version = APPLE80211_VERSION;
        rd->num_radios = 1;
        sgi = ieee80211_node_supports_sgi(ic->ic_bss);
        if (ic->ic_curmode == IEEE80211_MODE_11AC) {
            if (sgi)
                index += 1;
            nss = fHalService->getDriverInfo()->getTxNSS();
            switch (ic->ic_bss->ni_chw) {
                case IEEE80211_CHAN_WIDTH_40:
                    index += 4;
                    break;
                case IEEE80211_CHAN_WIDTH_80:
                    index += 8;
                    break;
                case IEEE80211_CHAN_WIDTH_80P80:
                case IEEE80211_CHAN_WIDTH_160:
                    index += 12;
                    break;

                default:
                    break;
            }
            index += 2 * (nss - 1);
            const struct ieee80211_vht_rateset *rs = &ieee80211_std_ratesets_11ac[index];
            rd->rate[0] = rs->rates[ic->ic_bss->ni_txmcs % rs->nrates] / 2;
        } else if (ic->ic_curmode == IEEE80211_MODE_11N) {
            int is_40mhz = ic->ic_bss->ni_chw == IEEE80211_CHAN_WIDTH_40;
            if (sgi)
                index += 1;
            if (is_40mhz)
                index += (IEEE80211_HT_RATESET_MIMO4_SGI + 1);
            index += (ic->ic_bss->ni_txmcs / 16);
            nss = ic->ic_bss->ni_txmcs / 8 + 1;
            index += 2 * (nss - 1);
            rd->rate[0] = ieee80211_std_ratesets_11n[index].rates[ic->ic_bss->ni_txmcs % 8] / 2;
        } else
            rd->rate[0] = ic->ic_bss->ni_rates.rs_rates[ic->ic_bss->ni_txrate];
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getBSSID(struct apple80211_bssid_data *bd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(bd, 0, sizeof(*bd));
        bd->version = APPLE80211_VERSION;
        memcpy(bd->bssid.octet, ic->ic_bss->ni_bssid, APPLE80211_ADDR_LEN);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getRSSI(struct apple80211_rssi_data *rd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(rd, 0, sizeof(*rd));
        rd->num_radios = 1;
        rd->rssi_unit = APPLE80211_UNIT_DBM;
        rd->rssi[0] = rd->aggregate_rssi
        = rd->rssi_ext[0]
        = rd->aggregate_rssi_ext
        = -(0 - IWM_MIN_DBM - ic->ic_bss->ni_rssi);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getRSN_IE(struct apple80211_rsn_ie_data *data)
{
#ifdef USE_APPLE_SUPPLICANT
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_bss == NULL || ic->ic_bss->ni_rsnie == NULL) {
        return kIOReturnError;
    }
    data->version = APPLE80211_VERSION;
    if (ic->ic_rsn_ie_override[1] > 0) {
        data->len = 2 + ic->ic_rsn_ie_override[1];
        memcpy(data->ie, ic->ic_rsn_ie_override, data->len);
    }
    else {
        data->len = 2 + ic->ic_bss->ni_rsnie[1];
        memcpy(data->ie, ic->ic_bss->ni_rsnie, data->len);
    }
    return kIOReturnSuccess;
#else
    return kIOReturnUnsupported;
#endif
}

IOReturn AirportItlwmSkywalkInterface::
setRSN_IE(struct apple80211_rsn_ie_data *data)
{
#ifdef USE_APPLE_SUPPLICANT
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (!data)
        return kIOReturnError;
    static_assert(sizeof(ic->ic_rsn_ie_override) == APPLE80211_MAX_RSN_IE_LEN, "Max RSN IE length mismatch");
    memcpy(ic->ic_rsn_ie_override, data->ie, APPLE80211_MAX_RSN_IE_LEN);
    if (ic->ic_state == IEEE80211_S_RUN && ic->ic_bss != nullptr)
        ieee80211_save_ie(data->ie, &ic->ic_bss->ni_rsnie);
    return kIOReturnSuccess;
#else
    return kIOReturnUnsupported;
#endif
}

IOReturn AirportItlwmSkywalkInterface::
getAP_IE_LIST(struct apple80211_ap_ie_data *data)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (!data)
        return kIOReturnError;
    if (ic->ic_bss == NULL || ic->ic_bss->ni_rsnie_tlv == NULL || ic->ic_bss->ni_rsnie_tlv_len == 0 || ic->ic_bss->ni_rsnie_tlv_len > data->len || ic->ic_bss->ni_rsnie_tlv_len > 1024)
        return kIOReturnError;
    data->version = APPLE80211_VERSION;
    data->len = ic->ic_bss->ni_rsnie_tlv_len;
    memcpy(data->ie_data, ic->ic_bss->ni_rsnie_tlv, data->len);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getNOISE(struct apple80211_noise_data *nd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(nd, 0, sizeof(*nd));
        nd->version = APPLE80211_VERSION;
        nd->num_radios = 1;
        nd->noise[0]
        = nd->aggregate_noise = -fHalService->getDriverInfo()->getBSSNoise();
        nd->noise_unit = APPLE80211_UNIT_DBM;
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwmSkywalkInterface::
getPOWERSAVE(struct apple80211_powersave_data *pd)
{
    pd->version = APPLE80211_VERSION;
    pd->powersave_level = APPLE80211_POWERSAVE_MODE_DISABLED;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getNSS(struct apple80211_nss_data *data)
{
    memset(data, 0, sizeof(*data));
    data->version = APPLE80211_VERSION;
    data->nss = fHalService->getDriverInfo()->getTxNSS();
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setASSOCIATE(struct apple80211_assoc_data *ad)
{
    XYLog("%s [%s] mode=%d ad_auth_lower=%d ad_auth_upper=%d rsn_ie_len=%d%s%s%s%s%s%s%s\n", __FUNCTION__, ad->ad_ssid, ad->ad_mode, ad->ad_auth_lower, ad->ad_auth_upper, ad->ad_rsn_ie_len,
          (ad->ad_flags & 2) ? ", Instant Hotspot" : "",
          (ad->ad_flags & 4) ? ", Auto Instant Hotspot" : "",
          (ad->ad_rsn_ie[APPLE80211_MAX_RSN_IE_LEN] & 1) ? ", don't disassociate" : "",
          (ad->ad_rsn_ie[APPLE80211_MAX_RSN_IE_LEN] & 2) ? ", don't blacklist" : "",
          (ad->ad_rsn_ie[APPLE80211_MAX_RSN_IE_LEN] & 4) ? ", closed Network" : "",
          (ad->ad_rsn_ie[APPLE80211_MAX_RSN_IE_LEN] & 8) ? ", 802.1X" : "",
          (ad->ad_rsn_ie[APPLE80211_MAX_RSN_IE_LEN] & 0x20) ? ", force BSSID" : "");
    
    struct apple80211_rsn_ie_data rsn_ie_data;
    struct apple80211_authtype_data auth_type_data;
    struct ieee80211com *ic = fHalService->get80211Controller();

    if (!ad)
        return kIOReturnError;
    
    if (ic->ic_state < IEEE80211_S_SCAN)
        return kIOReturnSuccess;
    
    if (ic->ic_state == IEEE80211_S_ASSOC || ic->ic_state == IEEE80211_S_AUTH)
        return kIOReturnSuccess;

    if (ad->ad_mode != APPLE80211_AP_MODE_IBSS) {
        disassocIsVoluntary = false;
        auth_type_data.version = APPLE80211_VERSION;
        auth_type_data.authtype_upper = ad->ad_auth_upper;
        auth_type_data.authtype_lower = ad->ad_auth_lower;
        setAUTH_TYPE(&auth_type_data);
        rsn_ie_data.version = APPLE80211_VERSION;
        rsn_ie_data.len = ad->ad_rsn_ie[1] + 2;
        memcpy(rsn_ie_data.ie, ad->ad_rsn_ie, rsn_ie_data.len);
        setRSN_IE(&rsn_ie_data);

        associateSSID(ad->ad_ssid, ad->ad_ssid_len, ad->ad_bssid, ad->ad_auth_lower, ad->ad_auth_upper, ad->ad_key.key, ad->ad_key.key_len, ad->ad_key.key_index);
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setDISASSOCIATE(struct apple80211_disassoc_data *ad)
{
    XYLog("%s\n", __FUNCTION__);
    struct ieee80211com *ic = fHalService->get80211Controller();

    if (ic->ic_state < IEEE80211_S_SCAN)
        return kIOReturnSuccess;
    
    if (ic->ic_state > IEEE80211_S_AUTH && ic->ic_bss != NULL)
        IEEE80211_SEND_MGMT(ic, ic->ic_bss, IEEE80211_FC0_SUBTYPE_DEAUTH, IEEE80211_REASON_AUTH_LEAVE);
    
    if (ic->ic_state == IEEE80211_S_ASSOC || ic->ic_state == IEEE80211_S_AUTH)
        return kIOReturnSuccess;
    
    disassocIsVoluntary = true;

    ieee80211_del_ess(ic, nullptr, 0, 1);
    ieee80211_deselect_ess(ic);
#ifdef USE_APPLE_SUPPLICANT
    ic->ic_rsn_ie_override[1] = 0;
#endif
    ic->ic_assoc_status = APPLE80211_STATUS_UNAVAILABLE;
    ic->ic_deauth_reason = APPLE80211_REASON_ASSOC_LEAVING;
    ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getSUPPORTED_CHANNELS(struct apple80211_sup_channel_data *ad)
{
    if (!ad)
        return kIOReturnError;
    ad->version = APPLE80211_VERSION;
    ad->num_channels = 0;
    struct ieee80211com *ic = fHalService->get80211Controller();
    for (int i = 0; i < IEEE80211_CHAN_MAX; i++) {
        if (ic->ic_channels[i].ic_freq != 0) {
            ad->supported_channels[ad->num_channels].channel = ieee80211_chan2ieee(ic, &ic->ic_channels[i]);
            ad->supported_channels[ad->num_channels].flags = ieeeChanFlag2appleScanFlagVentura(ic->ic_channels[i].ic_flags);
            ad->num_channels++;
        }
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getLOCALE(struct apple80211_locale_data *ld)
{
    if (!ld)
        return kIOReturnError;
    ld->version = APPLE80211_VERSION;
    ld->locale  = APPLE80211_LOCALE_FCC;
    
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getDEAUTH(struct apple80211_deauth_data *da)
{
    if (!da)
        return kIOReturnError;
    da->version = APPLE80211_VERSION;
    struct ieee80211com *ic = fHalService->get80211Controller();
    da->deauth_reason = ic->ic_deauth_reason;
//    XYLog("%s, %d\n", __FUNCTION__, da->deauth_reason);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getASSOCIATION_STATUS(struct apple80211_assoc_status_data *hv)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    
    if (!hv)
        return kIOReturnError;
    memset(hv, 0, sizeof(*hv));
    hv->version = APPLE80211_VERSION;
    if (ic->ic_state == IEEE80211_S_RUN)
        hv->status = APPLE80211_STATUS_SUCCESS;
    else
        hv->status = APPLE80211_STATUS_UNAVAILABLE;
//    XYLog("%s, %d\n", __FUNCTION__, hv->status);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setSCANCACHE_CLEAR(void *req)
{
    XYLog("%s\n", __FUNCTION__);
    struct ieee80211com *ic = fHalService->get80211Controller();
    //if doing background or active scan, don't free nodes.
    if ((ic->ic_flags & IEEE80211_F_BGSCAN) || (ic->ic_flags & IEEE80211_F_ASCAN))
        return kIOReturnSuccess;
    ieee80211_free_allnodes(ic, 0);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setDEAUTH(struct apple80211_deauth_data *da)
{
    XYLog("%s\n", __FUNCTION__);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getMCS(struct apple80211_mcs_data* md)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state != IEEE80211_S_RUN ||  ic->ic_bss == NULL || !md)
        return 6;
    md->version = APPLE80211_VERSION;
    md->index = ic->ic_bss->ni_txmcs;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getLINK_CHANGED_EVENT_DATA(struct apple80211_link_changed_event_data *ed)
{
    if (ed == nullptr)
        return 16;
    
    struct ieee80211com *ic = fHalService->get80211Controller();
    
    bzero(ed, sizeof(apple80211_link_changed_event_data));
    ed->isLinkDown = !(instance->currentStatus & kIONetworkLinkActive);
    if (ed->isLinkDown) {
        ed->voluntary = disassocIsVoluntary;
        ed->reason = APPLE80211_LINK_DOWN_REASON_DEAUTH;
    } else
        ed->rssi = -(0 - IWM_MIN_DBM - ic->ic_bss->ni_rssi);
    XYLog("Link %s, reason: %d, voluntary: %d\n", ed->isLinkDown ? "down" : "up", ed->reason, ed->voluntary);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
setSCAN_REQ(struct apple80211_scan_data *sd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
#if 0
    XYLog("%s Type: %u BSS Type: %u PHY Mode: %u Dwell time: %u Rest time: %u Num channels: %u SSID: %s BSSID: %s\n",
          __FUNCTION__,
          sd->scan_type,
          sd->bss_type,
          sd->phy_mode,
          sd->dwell_time,
          sd->rest_time,
          sd->num_channels,
          sd->ssid,
          ether_sprintf(sd->bssid.octet));
#endif
    if (fScanResultWrapping)
        return 22;
    if (ic->ic_state <= IEEE80211_S_INIT)
        return 22;
    if (sd->scan_type == APPLE80211_SCAN_TYPE_FAST || sd->scan_type == APPLE80211_SCAN_TYPE_PASSIVE) {
        if (scanSource) {
            scanSource->setTimeoutMS(100);
            scanSource->enable();
        }
        return kIOReturnSuccess;
    }
    ieee80211_begin_cache_bgscan(&ic->ic_ac.ac_if);
    if (scanSource) {
        scanSource->setTimeoutMS(100);
        scanSource->enable();
    }
    return kIOReturnSuccess;
}

extern OSDictionary *convertScanToDictionary(apple80211_scan_result *a1);

static int convertNodeToScanResult(ItlHalService *fHalService, struct ieee80211_node *fNextNodeToSend, apple80211_scan_result *result)
{
    bzero(result, sizeof(*result));
    result->version = APPLE80211_VERSION;
    if (fNextNodeToSend->ni_rsnie_tlv && fNextNodeToSend->ni_rsnie_tlv_len > 0) {
        result->asr_ie_len = fNextNodeToSend->ni_rsnie_tlv_len;
        memcpy(result->asr_ie_data, fNextNodeToSend->ni_rsnie_tlv, MIN(result->asr_ie_len, sizeof(result->asr_ie_data)));
    } else {
        result->asr_ie_len = 0;
    }
    result->asr_beacon_int = fNextNodeToSend->ni_intval;
    for (int i = 0; i < result->asr_nrates; i++ )
        result->asr_rates[i] = fNextNodeToSend->ni_rates.rs_rates[i];
    result->asr_nrates = fNextNodeToSend->ni_rates.rs_nrates;
    result->asr_age = (uint32_t)(airport_up_time() - fNextNodeToSend->ni_age_ts);
    result->asr_cap = fNextNodeToSend->ni_capinfo;
    result->asr_channel.version = APPLE80211_VERSION;
    result->asr_channel.channel = ieee80211_chan2ieee(fHalService->get80211Controller(), fNextNodeToSend->ni_chan);
    result->asr_channel.flags = ieeeChanFlag2appleScanFlagVentura(fNextNodeToSend->ni_chan->ic_flags);
    result->asr_noise = -fHalService->getDriverInfo()->getBSSNoise();
    result->asr_rssi = -(0 - IWM_MIN_DBM - fNextNodeToSend->ni_rssi);
    memcpy(result->asr_bssid, fNextNodeToSend->ni_bssid, IEEE80211_ADDR_LEN);
    result->asr_ssid_len = fNextNodeToSend->ni_esslen;
    if (result->asr_ssid_len != 0)
        memcpy(&result->asr_ssid, fNextNodeToSend->ni_essid, result->asr_ssid_len);
    return 0;
}

IOReturn AirportItlwmSkywalkInterface::
getCURRENT_NETWORK(apple80211_scan_result *sr)
{
    if (fHalService->get80211Controller()->ic_state != IEEE80211_S_RUN || fHalService->get80211Controller()->ic_bss == NULL)
        return kIOReturnError;
    convertNodeToScanResult(fHalService, fHalService->get80211Controller()->ic_bss, sr);
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getCOLOCATED_NETWORK_SCOPE_ID(apple80211_colocated_network_scope_id *as)
{
    if (!as)
        return kIOReturnBadArgument;
    as->version = APPLE80211_VERSION;
    return kIOReturnSuccess;
}

IOReturn AirportItlwmSkywalkInterface::
getSCAN_RESULT(struct apple80211_scan_result *sr)
{
    if (fNextNodeToSend == NULL) {
        if (fScanResultWrapping) {
            fScanResultWrapping = false;
            return 5;
        } else {
            fNextNodeToSend = RB_MIN(ieee80211_tree, &fHalService->get80211Controller()->ic_tree);
            if (fNextNodeToSend == NULL) {
                return 5;
            }
        }
    }
//    XYLog("%s ni_bssid=%s ni_essid=%s channel=%d flags=%d asr_cap=%d asr_nrates=%d asr_ssid_len=%d asr_ie_len=%d asr_rssi=%d\n", __FUNCTION__, ether_sprintf(fNextNodeToSend->ni_bssid), fNextNodeToSend->ni_essid, ieee80211_chan2ieee(ic, fNextNodeToSend->ni_chan), ieeeChanFlag2apple(fNextNodeToSend->ni_chan->ic_flags, -1), fNextNodeToSend->ni_capinfo, fNextNodeToSend->ni_rates.rs_nrates, fNextNodeToSend->ni_esslen, fNextNodeToSend->ni_rsnie_tlv == NULL ? 0 : fNextNodeToSend->ni_rsnie_tlv_len, fNextNodeToSend->ni_rssi);
    convertNodeToScanResult(fHalService, fNextNodeToSend, sr);
    
    fNextNodeToSend = RB_NEXT(ieee80211_tree, &HalService->get80211Controller()->ic_tree, fNextNodeToSend);
    if (fNextNodeToSend == NULL)
        fScanResultWrapping = true;

    return kIOReturnSuccess;
}


================================================
FILE: AirportItlwm/AirportItlwmSkywalkInterface.hpp
================================================
//
//  AirportItlwmSkywalkInterface.hpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//

#ifndef AirportItlwmSkywalkInterface_hpp
#define AirportItlwmSkywalkInterface_hpp

#include <Airport/Apple80211.h>

class AirportItlwmSkywalkInterface : public IO80211InfraProtocol {
    OSDeclareDefaultStructors(AirportItlwmSkywalkInterface)
    
public:
    virtual bool init(IOService *) override;
//    virtual ifnet_t getBSDInterface(void) override;
    
    void associateSSID(uint8_t *ssid, uint32_t ssid_len, const struct ether_addr &bssid, uint32_t authtype_lower, uint32_t authtype_upper, uint8_t *key, uint32_t key_len, int key_index);
    void setPTK(const u_int8_t *key, size_t key_len);
    void setGTK(const u_int8_t *key, size_t key_len, u_int8_t kid, u_int8_t *rsc);
    
public:
    virtual IOReturn getSSID(apple80211_ssid_data *) override;
    virtual IOReturn getAUTH_TYPE(apple80211_authtype_data *) override;
    virtual IOReturn getCHANNEL(apple80211_channel_data *) override;
    virtual IOReturn getPOWERSAVE(apple80211_powersave_data *) override;
    virtual IOReturn getTXPOWER(apple80211_txpower_data *) override;
    virtual IOReturn getRATE(apple80211_rate_data *) override;
    virtual IOReturn getBSSID(apple80211_bssid_data *) override;
    virtual IOReturn getSCAN_RESULT(apple80211_scan_result *) override;
    virtual IOReturn getSTATE(apple80211_state_data *) override;
    virtual IOReturn getPHY_MODE(apple80211_phymode_data *) override;
    virtual IOReturn getOP_MODE(apple80211_opmode_data *) override;
    virtual IOReturn getRSSI(apple80211_rssi_data *) override;
    virtual IOReturn getNOISE(apple80211_noise_data *) override;
    virtual IOReturn getSUPPORTED_CHANNELS(apple80211_sup_channel_data *) override;
    virtual IOReturn getLOCALE(apple80211_locale_data *) override;
    virtual IOReturn getDEAUTH(apple80211_deauth_data *) override;
    virtual IOReturn getRATE_SET(apple80211_rate_set_data *) override;
    virtual IOReturn getDTIM_INT(apple80211_dtim_int_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSTATION_LIST(apple80211_sta_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRSN_IE(apple80211_rsn_ie_data *) override;
    virtual IOReturn getAP_IE_LIST(apple80211_ap_ie_data *) override;
    virtual IOReturn getSTATS(apple80211_stats_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getASSOCIATION_STATUS(apple80211_assoc_status_data *) override;
    virtual IOReturn getGUARD_INTERVAL(apple80211_guard_interval_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getMCS(apple80211_mcs_data *) override;
    virtual IOReturn getMCS_INDEX_SET(apple80211_mcs_index_set_data *) override;
    virtual IOReturn getWOW_PARAMETERS(apple80211_wow_parameter_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWOW_ENABLED(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getPID_LOCK(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSTA_IE_LIST(apple80211_sta_ie_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSTA_STATS(apple80211_sta_stats_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBT_COEX_FLAGS(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCURRENT_NETWORK(apple80211_scan_result *) override;
    virtual IOReturn getRSSI_BOUNDS(apple80211_rssi_bounds_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getPOWER_DEBUG_INFO(apple80211_power_debug_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHT_CAPABILITY(apple80211_ht_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn getLINK_CHANGED_EVENT_DATA(apple80211_link_changed_event_data *) override;
    virtual IOReturn getEXTENDED_STATS(apple80211_extended_stats *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBEACON_PERIOD(apple80211_beacon_period_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getVHT_MCS_INDEX_SET(apple80211_vht_mcs_index_set_data *) override;
    virtual IOReturn getMCS_VHT(apple80211_mcs_vht_data *) override;
    virtual IOReturn getGAS_RESULTS(apple80211_gas_result_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCHANNELS_INFO(apple80211_channels_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getVHT_CAPABILITY(apple80211_vht_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBGSCAN_CACHE_RESULTS(apple80211_bgscan_cached_network_data_list *) override { return kIOReturnUnsupported; }
    virtual IOReturn getROAM_PROFILE(apple80211_roam_profile_band_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCHIP_COUNTER_STATS(apple80211_chip_stats *) override { return kIOReturnUnsupported; }
    virtual IOReturn getDBG_GUARD_TIME_PARAMS(apple80211_dbg_guard_time_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn getLEAKY_AP_STATS_MODE(apple80211_leaky_ap_setting *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCOUNTRY_CHANNELS(apple80211_country_channel_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getPRIVATE_MAC(apple80211_private_mac_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRANGING_ENABLE(apple80211_ranging_enable_request_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRANGING_START(apple80211_ranging_start_request_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getAWDL_RSDB_CAPS(apple80211_rsdb_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTKO_PARAMS(apple80211_tko_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTKO_DUMP(apple80211_tko_dump *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHW_SUPPORTED_CHANNELS(apple80211_sup_channel_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBTCOEX_PROFILE(apple80211_btcoex_profile *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBTCOEX_PROFILE_ACTIVE(apple80211_btcoex_profile_active_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTRAP_INFO(apple80211_trap_info_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTHERMAL_INDEX(apple80211_thermal_index_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getMAX_NSS_FOR_AP(apple80211_btcoex_max_nss_for_ap_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBTCOEX_2G_CHAIN_DISABLE(apple80211_btcoex_2g_chain_disable *) override { return kIOReturnUnsupported; }
    virtual IOReturn getPOWER_BUDGET(apple80211_power_budget_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getOFFLOAD_TCPKA_ENABLE(apple80211_offload_tcpka_enable_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRANGING_CAPS(apple80211_ranging_capabilities_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSUPPRESS_SCANS(apple80211_suppress_scans_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHOST_AP_MODE_HIDDEN(apple80211_host_ap_mode_hidden_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getLQM_CONFIG(apple80211_lqm_config_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTRAP_CRASHTRACER_MINI_DUMP(apple80211_trap_mini_dump_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHE_CAPABILITY(apple80211_he_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBEACON_INFO(apple80211_beacon_info_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSOFTAP_PARAMS(apple80211_softap_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCHIP_POWER_RANGE(apple80211_chip_power_limit *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSOFTAP_STATS(apple80211_softap_stats *) override { return kIOReturnUnsupported; }
    virtual IOReturn getNSS(apple80211_nss_data *) override;
    virtual IOReturn getHW_ADDR(apple80211_hw_mac_address *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHE_MCS_INDEX_SET(apple80211_he_mcs_index_set_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCHIP_DIAGS(appl80211_chip_diags_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getHP2P_CTRL(apple80211_hp2p_ctrl *) override { return kIOReturnUnsupported; }
    virtual IOReturn getREQUEST_BSS_BLACKLIST(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn getASSOC_READY_STATUS(apple80211_assoc_ready *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTXRX_CHAIN_INFO(apple80211_txrx_chain_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getMIMO_STATUS(apple80211_mimo_status *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCUR_PMK(apple80211_pmk *) override { return kIOReturnUnsupported; }
    virtual IOReturn getDYNSAR_DETAIL(apple80211_dynsar_detail *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRANDOMISATION_STATUS(apple80211_mac_randomisation_status *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCOUNTRY_CHANNELS_INFO(apple80211_channels_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getLQM_SUMMARY(apple80211_lqm_summary *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCOLOCATED_NETWORK_SCOPE_ID(apple80211_colocated_network_scope_id *) override;
    virtual IOReturn getBEACON_SCAN_CACHE_REQ(apple80211_scan_result *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSLOW_WIFI_FEATURE_ENABLED(apple80211_slow_wifi_feature_enabled *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCCA(apple80211_interface_cca_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRX_RATE(apple80211_rate_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getTIMESYNC_INFO(apple80211_timesync_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSENSING_DATA(apple80211_sensing_data_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getCOUNTRY_BAND_SUPPORT(apple80211_country_band_support *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_FW_HOT_CHANNELS(apple80211_fw_hot_channels *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_LOW_LATENCY_INFO(apple80211_low_latency_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_BSS_INFO(apple80211_beacon_msg *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_TRAFFIC_COUNTERS(apple80211_wcl_traffic_counters *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_GET_TX_BLANKING_STATUS(uint *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSSID_TRANSITION_SUPPORT(apple80211_ssid_transition_feature_enabled *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_VALID_CHANNEL_COUNT(unsigned long *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_P2P_STATUS_FOR_SCAN(p2pStatusForScan *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_CHANNELS_INFO(apple80211ChannelInfo *) override { return kIOReturnUnsupported; }
    virtual IOReturn getP2P_STEERING_METRIC(apple80211_p2p_steering_metrics *) override { return kIOReturnUnsupported; }
    virtual IOReturn getRSN_XE(apple80211_rsn_xe_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn getSIB_COEX_STATUS(apple80211_sib_coex_status *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_EXTENDED_BSS_INFO(apple80211_extended_bss_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_LOW_LATENCY_INFO_STATS(apple80211_wcl_low_latency_stats *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWCL_BGSCAN_CACHE_RESULT(apple80211_bgscan_cached_network_data_list *) override { return kIOReturnUnsupported; }
    virtual IOReturn getWIFI_NOISE_PER_ANT(apple80211_noise_per_ant_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn getBLOCKED_BANDS(apple80211_blocked_bands *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSSID(apple80211_ssid_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setAUTH_TYPE(apple80211_authtype_data *) override;
    virtual IOReturn setCIPHER_KEY(apple80211_key *) override;
    virtual IOReturn setCHANNEL(apple80211_channel_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setPOWERSAVE(apple80211_powersave_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setTXPOWER(apple80211_txpower_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRATE(apple80211_rate_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSCAN_REQ(apple80211_scan_data *) override;
    virtual IOReturn setASSOCIATE(apple80211_assoc_data *) override;
    virtual IOReturn setDISASSOCIATE(apple80211_disassoc_data *) override;
    virtual IOReturn setIBSS_MODE(apple80211_network_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setHOST_AP_MODE(apple80211_network_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setAP_MODE(apple80211_apmode_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setDEAUTH(apple80211_deauth_data *) override;
    virtual IOReturn setTX_ANTENNA(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setANTENNA_DIVERSITY(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRSN_IE(apple80211_rsn_ie_data *) override;
    virtual IOReturn setBACKGROUND_SCAN(apple80211_bgscan_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWOW_PARAMETERS(apple80211_wow_parameter_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWOW_ENABLED(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setPID_LOCK(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSTA_AUTHORIZE(apple80211_sta_authorize_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSTA_DISASSOCIATE(apple80211_sta_disassoc_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSTA_DEAUTH(apple80211_sta_disassoc_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRSN_CONF(apple80211_rsn_conf_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setIE(apple80211_ie_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWOW_TEST(apple80211_wow_test_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSCANCACHE_CLEAR(void *) override;
    virtual IOReturn setVIRTUAL_IF_CREATE(apple80211_virt_if_create_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBT_COEX_FLAGS(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setROAM(apple80211_sta_roam_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setHT_CAPABILITY(apple80211_ht_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn setAWDL_FORCED_ROAM_CONFIG(apple80211_awdl_forced_roam_config *) override { return kIOReturnUnsupported; }
    virtual IOReturn setOFFLOAD_ARP(apple80211_offload_arp_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setOFFLOAD_NDP(apple80211_offload_ndp_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setOFFLOAD_SCAN(apple80211_offload_scan_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setGAS_REQ(apple80211_gas_query_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setGAS_START(apple80211_gas_query_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setGAS_SET_PEER(apple80211_gas_peer_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setVHT_CAPABILITY(apple80211_vht_capability *) override { return kIOReturnUnsupported; }
    virtual IOReturn setROAM_PROFILE(apple80211_roam_profile_band_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setAWDL_ENABLE_ROAMING(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setDBG_GUARD_TIME_PARAMS(apple80211_dbg_guard_time_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setLEAKY_AP_STATS_MODE(apple80211_leaky_ap_setting *) override { return kIOReturnUnsupported; }
    virtual IOReturn setPRIVATE_MAC(apple80211_private_mac_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRESET_CHIP(apple80211_reset_command *) override { return kIOReturnUnsupported; }
    virtual IOReturn setCRASH(apple80211_crash_command *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRANGING_ENABLE(apple80211_ranging_enable_request_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRANGING_START(apple80211_ranging_start_request_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRANGING_AUTHENTICATE(apple80211_ranging_authenticate_request_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setTKO_PARAMS(apple80211_tko_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBTCOEX_PROFILE(apple80211_btcoex_profile *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBTCOEX_PROFILE_ACTIVE(apple80211_btcoex_profile_active_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setTHERMAL_INDEX(apple80211_thermal_index_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBTCOEX_2G_CHAIN_DISABLE(apple80211_btcoex_2g_chain_disable *) override { return kIOReturnUnsupported; }
    virtual IOReturn setPOWER_BUDGET(apple80211_power_budget_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setOFFLOAD_TCPKA_ENABLE(apple80211_offload_tcpka_enable_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSUPPRESS_SCANS(apple80211_suppress_scans_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setHOST_AP_MODE_HIDDEN(apple80211_host_ap_mode_hidden_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setLQM_CONFIG(apple80211_lqm_config_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSOFTAP_PARAMS(apple80211_softap_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSOFTAP_TRIGGER_CSA(apple80211_softap_csa_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSOFTAP_WIFI_NETWORK_INFO_IE(apple80211_softap_wifi_network_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBTCOEX_DISABLE_ULOFDMA(uint *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSCAN_CONTROL(apple80211_scan_control_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setUSB_HOST_NOTIFICATION(apple80211_usb_host_notification_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSET_MAC_ADDRESS(apple80211_set_mac_address *) override { return kIOReturnUnsupported; }
    virtual IOReturn setHP2P_CTRL(apple80211_hp2p_ctrl *) override { return kIOReturnUnsupported; }
    virtual IOReturn setABORT_SCAN(apple80211_abort_scan *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSET_PROPERTY(apple80211_set_property_unserialized_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setROAM_CACHE_UPDATE(apple80211_roam_cache_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setPM_MODE(apple80211_pm_mode *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSET_WIFI_ASSERTION_STATE(apple80211_wifi_assertion_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setREASSOCIATE_WITH_CORECAPTURE(apple80211_capture_debug_info_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setLINKDOWN_DEBOUNCE_STATUS(apple80211_linkdown_debounce_status *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSOFTAP_EXTENDED_CAPABILITIES_IE(apple80211_softap_extended_capabilities_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn setREALTIME_QOS_MSCS(apple80211_state_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSENSING_ENABLE(apple80211_sensing_enable_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSENSING_DISABLE(apple80211_sensing_disable_t *) override { return kIOReturnUnsupported; }
    virtual IOReturn setNANPHS_ASSOCIATION(apple80211_nan_link_association_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn setNANPHS_TERMINATED(apple80211_nan_link_association_info *) override { return kIOReturnUnsupported; }
    virtual IOReturn set6G_MODE(apple80211_6G_mode *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_LEAVE_NETWORK(apple80211_leave_network *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_REASSOC(apple80211_reassoc *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_SET_ROAM_LOCK(apple80211_set_roam_lock *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ROAM_PROFILE_CONFIG(apple80211_roam_profile_config *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ROAM_PROFILE_CONFIGV1(apple80211_roam_profile_configV1 *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ROAM_USER_CACHE(apple80211_user_roam_cache *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_SET_MULTI_AP_ENV(apple80211_set_multi_ap_env *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_SCAN_ABORT(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_REAL_TIME_MODE(apple80211_wcl_real_time_mode *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_GARP_MODE(apple80211_wcl_garp_mode *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_JOIN_ABORT(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_TRIGGER_CC(triggerCC *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_SCAN_REQ(apple80211ScanRequest *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ASSOCIATE(apple80211_assoc_candidates *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_PROTECT_IP(apple80211_wcl_protect_ip_mode *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_LINK_UP_DONE(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_SET_SCAN_HOME_AWAY_TIME(scanHomeAndAwayTime *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_VOLUNTARY_NETWORK_DISCONNECT(apple80211_wcl_voluntary_network_disconnect *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_LINK_STATE_UPDATE(apple80211_wcl_update_link_state *) override { return kIOReturnUnsupported; }
    virtual IOReturn setSLOW_WIFI_RECOVERY(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setRSN_XE(apple80211_rsn_xe_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ULOFDMA_STATE(apple80211_wcl_ulofdma_state *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_ACTION_FRAME(apple80211_wcl_action_frame *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_REAL_TIME_POLICY(apple80211_wcl_real_time_policy *) override { return kIOReturnUnsupported; }
    virtual IOReturn setGAS_ABORT(void *) override { return kIOReturnUnsupported; }
    virtual IOReturn setOS_FEATURE_FLAGS(apple80211_feature_flags *) override { return kIOReturnUnsupported; }
    virtual IOReturn setDHCP_RENEWAL_DATA(apple80211_dhcp_renewal_data *) override { return kIOReturnUnsupported; }
    virtual IOReturn setMOVING_NETWORK(apple80211_network_flags *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBATTERY_POWERSAVE_CONFIG(apple80211_battery_ps_config *) override { return kIOReturnUnsupported; }
    virtual IOReturn setMIMO_CONFIG(apple80211_mimo_config *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_CONFIG_BG_MOTIONPROFILE(apple80211_bg_motion_profile *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_CONFIG_BG_NETWORK(apple80211_bg_network *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_CONFIG_BGSCAN(apple80211_bg_scan *) override { return kIOReturnUnsupported; }
    virtual IOReturn setWCL_CONFIG_BG_PARAMS(apple80211_bg_params *) override { return kIOReturnUnsupported; }
    virtual IOReturn setBLOCKED_BANDS(apple80211_blocked_bands *) override { return kIOReturnUnsupported; }
    
private:
    AirportItlwm *instance;
    ItlHalService *fHalService;
    
    //IO80211
    struct ieee80211_node *fNextNodeToSend;
    IOTimerEventSource *scanSource;
    bool fScanResultWrapping;
    
    u_int32_t current_authtype_lower;
    u_int32_t current_authtype_upper;
    bool disassocIsVoluntary;
};


#endif /* AirportItlwmSkywalkInterface_hpp */


================================================
FILE: AirportItlwm/AirportItlwmV2.cpp
================================================
//
//  AirportItlwmV2.cpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//

#include "AirportItlwmV2.hpp"
#include <sys/_netstat.h>
#include <crypto/sha1.h>
#include <net80211/ieee80211_priv.h>
#include <net80211/ieee80211_var.h>

#include "AirportItlwmSkywalkInterface.hpp"
#include "IOPCIEDeviceWrapper.hpp"

#define super IO80211Controller
OSDefineMetaClassAndStructors(AirportItlwm, IO80211Controller);
OSDefineMetaClassAndStructors(CTimeout, OSObject)

IO80211WorkQueue *_fWorkloop;
IOCommandGate *_fCommandGate;

void AirportItlwm::releaseAll()
{
    OSSafeReleaseNULL(driverLogPipe);
    OSSafeReleaseNULL(driverDataPathPipe);
    OSSafeReleaseNULL(driverSnapshotsPipe);
    OSSafeReleaseNULL(driverFaultReporter);
    if (fHalService) {
        fHalService->release();
        fHalService = NULL;
    }
    if (_fWorkloop) {
        if (_fCommandGate) {
//            _fCommandGate->disable();
            _fWorkloop->removeEventSource(_fCommandGate);
            _fCommandGate->release();
            _fCommandGate = NULL;
        }
        if (scanSource) {
            scanSource->cancelTimeout();
            scanSource->disable();
            _fWorkloop->removeEventSource(scanSource);
            scanSource->release();
            scanSource = NULL;
        }
        if (fWatchdogWorkLoop && watchdogTimer) {
            watchdogTimer->cancelTimeout();
            fWatchdogWorkLoop->removeEventSource(watchdogTimer);
            watchdogTimer->release();
            watchdogTimer = NULL;
            fWatchdogWorkLoop->release();
            fWatchdogWorkLoop = NULL;
        }
        _fWorkloop->release();
        _fWorkloop = NULL;
    }
    unregistPM();
}

void AirportItlwm::
eventHandler(struct ieee80211com *ic, int msgCode, void *data)
{
    AirportItlwm *that = OSDynamicCast(AirportItlwm, ic->ic_ac.ac_if.controller);
    IO80211SkywalkInterface *interface = that->fNetIf;
    if (!interface)
        return;
    switch (msgCode) {
        case IEEE80211_EVT_COUNTRY_CODE_UPDATE:
            interface->postMessage(APPLE80211_M_COUNTRY_CODE_CHANGED, NULL, 0, 0);
            break;
        case IEEE80211_EVT_STA_ASSOC_DONE:
            interface->postMessage(APPLE80211_M_ASSOC_DONE, NULL, 0, 0);
            break;
        case IEEE80211_EVT_STA_DEAUTH:
            interface->postMessage(APPLE80211_M_DEAUTH_RECEIVED, NULL, 0, 0);
            break;
        default:
            break;
    }
}

void AirportItlwm::watchdogAction(IOTimerEventSource *timer)
{
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    (*ifp->if_watchdog)(ifp);
    watchdogTimer->setTimeoutMS(kWatchDogTimerPeriod);
}

void AirportItlwm::fakeScanDone(OSObject *owner, IOTimerEventSource *sender)
{
    UInt32 msg = 0;
    AirportItlwm *that = (AirportItlwm *)owner;
    that->fNetIf->postMessage(APPLE80211_M_SCAN_DONE, &msg, 4, 0);
}

bool AirportItlwm::init(OSDictionary *properties)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    bool ret = super::init(properties);
    awdlSyncEnable = true;
    power_state = 0;
    memset(geo_location_cc, 0, sizeof(geo_location_cc));
    return ret;
}

IOService* AirportItlwm::probe(IOService *provider, SInt32 *score)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    IOPCIEDeviceWrapper *wrapper = OSDynamicCast(IOPCIEDeviceWrapper, provider);
    if (!wrapper) {
        XYLog("%s Not a IOPCIEDeviceWrapper instance\n", __FUNCTION__);
        return NULL;
    }
    pciNub = wrapper->pciNub;
    fHalService = wrapper->fHalService;
    if (!pciNub || !fHalService) {
        XYLog("%s Not a valid IOPCIEDeviceWrapper instance\n", __FUNCTION__);
        return NULL;
    }
    return super::probe(provider, score);
}

#define LOWER32(x)  ((uint64_t)(x) & 0xffffffff)
#define HIGHER32(x) ((uint64_t)(x) >> 32)

bool AirportItlwm::
initCCLogs()
{
    CCPipeOptions driverLogOptions = { 0 };
    driverLogOptions.pipe_type = 0;
    driverLogOptions.log_data_type = 1;
    driverLogOptions.pipe_size = 0x200000;
    driverLogOptions.min_log_size_notify = 0xccccc;
    driverLogOptions.notify_threshold = 1000;
    strlcpy(driverLogOptions.file_name, "Itlwm_Logs", sizeof(driverLogOptions.file_name));
    snprintf(driverLogOptions.name, sizeof(driverLogOptions.name), "wlan%d", 0);
    strlcpy(driverLogOptions.directory_name, "WiFi", sizeof(driverLogOptions.directory_name));
    driverLogOptions.pad9 = 0x1000000;
    driverLogOptions.pad10 = 2;
    driverLogOptions.file_options = 0;
    driverLogOptions.log_policy = 0;
    driverLogPipe = CCPipe::withOwnerNameCapacity(this, "com.zxystd.AirportItlwm", "DriverLogs", &driverLogOptions);
    XYLog("%s driverLogPipeRet %d\n", __FUNCTION__, driverLogPipe != NULL);
    
    memset(&driverLogOptions, 0, sizeof(driverLogOptions));
    driverLogOptions.pipe_type = 0;
    driverLogOptions.log_data_type = 0;
    driverLogOptions.pipe_size = 0x200000;
    driverLogOptions.min_log_size_notify = 0xccccc;
    driverLogOptions.notify_threshold = 1000;
    strlcpy(driverLogOptions.file_name, "AppleBCMWLAN_Datapath", sizeof(driverLogOptions.file_name));
    strlcpy(driverLogOptions.directory_name, "WiFi", sizeof(driverLogOptions.directory_name));
    driverLogOptions.pad9 = HIGHER32(0x202800000);
    driverLogOptions.pad10 = LOWER32(0x202800000);
    driverLogOptions.file_options = 0;
    driverLogOptions.log_policy = 0;
    driverDataPathPipe = CCPipe::withOwnerNameCapacity(this, "com.zxystd.AirportItlwm", "DatapathEvents", &driverLogOptions);
    XYLog("%s driverDataPathPipeRet %d\n", __FUNCTION__, driverDataPathPipe != NULL);
    
    memset(&driverLogOptions, 0, sizeof(driverLogOptions));
    driverLogOptions.pipe_type = 0x200000001;
    driverLogOptions.log_data_type = 2;
    strlcpy(driverLogOptions.file_name, "StateSnapshots", sizeof(driverLogOptions.file_name));
    strlcpy(driverLogOptions.name, "0", sizeof(driverLogOptions.name));
    strlcpy(driverLogOptions.directory_name, "WiFi", sizeof(driverLogOptions.directory_name));
    driverLogOptions.pipe_size = 128;
    driverSnapshotsPipe = CCPipe::withOwnerNameCapacity(this, "com.zxystd.AirportItlwm", "StateSnapshots", &driverLogOptions);
    XYLog("%s driverSnapshotsPipeRet %d\n", __FUNCTION__, driverSnapshotsPipe != NULL);
    
    CCStreamOptions faultReportOptions = { 0 };
    faultReportOptions.stream_type = 1;
    faultReportOptions.console_level = 0xFFFFFFFFFFFFFFFF;
    driverFaultReporter = CCStream::withPipeAndName(driverSnapshotsPipe, "FaultReporter", &faultReportOptions);
    XYLog("%s driverFaultReporterRet %d\n", __FUNCTION__, driverFaultReporter != NULL);
    return driverLogPipe && driverDataPathPipe && driverSnapshotsPipe && driverFaultReporter;
}

bool AirportItlwm::start(IOService *provider)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    struct IOSkywalkEthernetInterface::RegistrationInfo registInfo;
    int boot_value = 0;
    
    UInt8 builtIn = 0;
    setProperty("built-in", OSData::withBytes(&builtIn, sizeof(builtIn)));
    setProperty("DriverKitDriver", kOSBooleanFalse);
    if (!super::start(provider)) {
        return false;
    }
    pciNub->setBusMasterEnable(true);
    pciNub->setIOEnable(true);
    pciNub->setMemoryEnable(true);
    pciNub->configWrite8(0x41, 0);
    if (pciNub->requestPowerDomainState(kIOPMPowerOn,
                                        (IOPowerConnection *) getParentEntry(gIOPowerPlane), IOPMLowestState) != IOPMNoErr) {
        super::stop(provider);
        return false;
    }
    if (initPCIPowerManagment(pciNub) == false) {
        super::stop(pciNub);
        return false;
    }
    if (_fWorkloop == NULL) {
        XYLog("No _fWorkloop!!\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    _fCommandGate = IOCommandGate::commandGate(this, (IOCommandGate::Action)AirportItlwm::tsleepHandler);
    if (_fCommandGate == 0) {
        XYLog("No command gate!!\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    _fWorkloop->addEventSource(_fCommandGate);
    const IONetworkMedium *primaryMedium;
    if (!createMediumTables(&primaryMedium) ||
        !setCurrentMedium(primaryMedium) || !setSelectedMedium(primaryMedium)) {
        XYLog("setup medium fail\n");
        releaseAll();
        return false;
    }
    fHalService->initWithController(this, _fWorkloop, _fCommandGate);
    fHalService->get80211Controller()->ic_event_handler = eventHandler;
    
    if (PE_parse_boot_argn("-novht", &boot_value, sizeof(boot_value)))
        fHalService->get80211Controller()->ic_userflags |= IEEE80211_F_NOVHT;
    if (PE_parse_boot_argn("-noht40", &boot_value, sizeof(boot_value)))
        fHalService->get80211Controller()->ic_userflags |= IEEE80211_F_NOHT40;
    
    if (!fHalService->attach(pciNub)) {
        XYLog("attach fail\n");
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    fWatchdogWorkLoop = IOWorkLoop::workLoop();
    if (fWatchdogWorkLoop == NULL) {
        XYLog("init watchdog workloop fail\n");
        fHalService->detach(pciNub);
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    watchdogTimer = IOTimerEventSource::timerEventSource(this, OSMemberFunctionCast(IOTimerEventSource::Action, this, &AirportItlwm::watchdogAction));
    if (!watchdogTimer) {
        XYLog("init watchdog fail\n");
        fHalService->detach(pciNub);
        super::stop(pciNub);
        releaseAll();
        return false;
    }
    fWatchdogWorkLoop->addEventSource(watchdogTimer);
    scanSource = IOTimerEventSource::timerEventSource(this, &fakeScanDone);
    _fWorkloop->addEventSource(scanSource);
    scanSource->enable();

    fNetIf = new AirportItlwmSkywalkInterface;
    if (!fNetIf->init(this)) {
        XYLog("Skywalk interface init fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    fNetIf->setInterfaceRole(1);
    fNetIf->setInterfaceId(1);
    
    if (!initCCLogs()) {
        XYLog("CCLog init fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    if (!fNetIf->attach(this)) {
        XYLog("attach to service fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    if (!attachInterface(fNetIf, this)) {
        XYLog("attach to interface fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    if (!IONetworkController::attachInterface((IONetworkInterface **)&bsdInterface, true)) {
        XYLog("attach to IONetworkController interface fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    memset(&registInfo, 0, sizeof(registInfo));
    if (!fNetIf->initRegistrationInfo(&registInfo, 1, sizeof(registInfo))) {
        XYLog("initRegistrationInfo fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    if (!fNetIf->initRegistrationInfo(&registInfo, 1, sizeof(registInfo))) {
        XYLog("initRegistrationInfo fail\n");
        super::stop(provider);
        releaseAll();
        return false;
    }
    fNetIf->mExpansionData->fRegistrationInfo = (struct IOSkywalkNetworkInterface::RegistrationInfo *)IOMalloc(sizeof(struct IOSkywalkNetworkInterface::RegistrationInfo));
    fNetIf->mExpansionData2->fRegistrationInfo = (struct IOSkywalkEthernetInterface::RegistrationInfo *)IOMalloc(sizeof(struct IOSkywalkEthernetInterface::RegistrationInfo));
    memcpy(fNetIf->mExpansionData->fRegistrationInfo, &registInfo, sizeof(registInfo));
    memcpy(fNetIf->mExpansionData2->fRegistrationInfo, &registInfo, sizeof(registInfo));
    if (fNetIf->getInterfaceRole() == 1)
        fNetIf->deferBSDAttach(true);
    fNetIf->start(this);
    
    setLinkStatus(kIONetworkLinkValid);
    if (TAILQ_EMPTY(&fHalService->get80211Controller()->ic_ess))
        fHalService->get80211Controller()->ic_flags |= IEEE80211_F_AUTO_JOIN;
    registerService();
    return true;
}

void AirportItlwm::stop(IOService *provider)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);XYLog("%s\n", __PRETTY_FUNCTION__);
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    super::stop(provider);
    disableAdapter(bsdInterface);
    setLinkStatus(kIONetworkLinkValid);
    fHalService->detach(pciNub);
    ether_ifdetach(ifp);
    detachInterface(fNetIf, true);
    OSSafeReleaseNULL(fNetIf);
    releaseAll();
}

void AirportItlwm::free()
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    if (fHalService != NULL) {
        fHalService->release();
        fHalService = NULL;
    }
    if (syncFrameTemplate != NULL && syncFrameTemplateLength > 0) {
        IOFree(syncFrameTemplate, syncFrameTemplateLength);
        syncFrameTemplateLength = 0;
        syncFrameTemplate = NULL;
    }
    if (roamProfile != NULL) {
        IOFree(roamProfile, sizeof(struct apple80211_roam_profile_band_data));
        roamProfile = NULL;
    }
    if (btcProfile != NULL) {
        IOFree(btcProfile, sizeof(struct apple80211_btc_profiles_data));
        btcProfile = NULL;
    }
    super::free();
}

bool AirportItlwm::createWorkQueue()
{
    XYLog("%s %d\n", __FUNCTION__, _fWorkloop != 0);
    return _fWorkloop != 0;
}

IO80211WorkQueue *AirportItlwm::getWorkQueue()
{
    return _fWorkloop;
}

void *AirportItlwm::getFaultReporterFromDriver()
{
    return driverFaultReporter;
}

IOReturn AirportItlwm::enable(IO80211SkywalkInterface *netif)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    super::enable(netif);
    _fCommandGate->enable();
    if (power_state)
        enableAdapter(bsdInterface);
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::disable(IO80211SkywalkInterface *netif)
{
    XYLog("%s\n", __PRETTY_FUNCTION__);
    super::disable(netif);
    setLinkStatus(kIONetworkLinkValid);
    return kIOReturnSuccess;
}

bool AirportItlwm::configureInterface(IONetworkInterface *netif)
{
    IONetworkData *nd;
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    
    if (super::configureInterface(netif) == false) {
        XYLog("super failed\n");
        return false;
    }
    
    nd = netif->getParameter(kIONetworkStatsKey);
    if (!nd || !(fpNetStats = (IONetworkStats *)nd->getBuffer())) {
        XYLog("network statistics buffer unavailable?\n");
        return false;
    }
    ifp->netStat = fpNetStats;
    ether_ifattach(ifp, OSDynamicCast(IOEthernetInterface, netif));
    fpNetStats->collisions = 0;
#ifdef __PRIVATE_SPI__
    netif->configureOutputPullModel(fHalService->getDriverInfo()->getTxQueueSize(), 0, 0, IOEthernetInterface::kOutputPacketSchedulingModelNormal, 0);
#endif
    
    return true;
}

IONetworkInterface *AirportItlwm::createInterface()
{
    AirportItlwmEthernetInterface *netif = new AirportItlwmEthernetInterface;
    if (!netif)
        return NULL;
    if (!netif->initWithSkywalkInterfaceAndProvider(this, fNetIf)) {
        netif->release();
        return NULL;
    }
    return netif;
}

bool AirportItlwm::createMediumTables(const IONetworkMedium **primary)
{
    IONetworkMedium    *medium;

    OSDictionary *mediumDict = OSDictionary::withCapacity(2);
    if (mediumDict == NULL) {
        XYLog("Cannot allocate OSDictionary\n");
        return false;
    }
    
    medium = IONetworkMedium::medium(kIOMediumIEEE80211, 54000000);
    IONetworkMedium::addMedium(mediumDict, medium);
    medium->release();
    if (primary) {
        *primary = medium;
    }
    medium = IONetworkMedium::medium(kIOMediumIEEE80211None, 0);
    IONetworkMedium::addMedium(mediumDict, medium);
    medium->release();
    
    bool result = publishMediumDictionary(mediumDict);
    if (!result) {
        XYLog("Cannot publish medium dictionary!\n");
    }

    mediumDict->release();
    return result;
}

IOReturn AirportItlwm::selectMedium(const IONetworkMedium *medium) {
    setSelectedMedium(medium);
    return kIOReturnSuccess;
}

bool AirportItlwm::
setLinkStatus(UInt32 status, const IONetworkMedium * activeMedium, UInt64 speed, OSData * data)
{
    struct _ifnet *ifq = &fHalService->get80211Controller()->ic_ac.ac_if;
    if (status == currentStatus) {
        return true;
    }
    bool ret = super::setLinkStatus(status, activeMedium, speed, data);
    currentStatus = status;
    if (fNetIf) {
        if (status & kIONetworkLinkActive) {
#ifdef __PRIVATE_SPI__
            bsdInterface->startOutputThread();
#endif
            getCommandGate()->runAction(setLinkStateGated, (void *)kIO80211NetworkLinkUp, (void *)0);
//            fNetIf->setLinkQualityMetric(100);
        } else if (!(status & kIONetworkLinkNoNetworkChange)) {
#ifdef __PRIVATE_SPI__
            bsdInterface->stopOutputThread();
            bsdInterface->flushOutputQueue();
#endif
            ifq_flush(&ifq->if_snd);
            mq_purge(&fHalService->get80211Controller()->ic_mgtq);
            getCommandGate()->runAction(setLinkStateGated, (void *)kIO80211NetworkLinkDown, (void *)fHalService->get80211Controller()->ic_deauth_reason);
        }
    }
    return ret;
}

IOReturn AirportItlwm::
setLinkStateGated(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3)
{
    AirportItlwm *that = OSDynamicCast(AirportItlwm, target);
    IOReturn ret = that->fNetIf->setLinkState((IO80211LinkState)(uint64_t)arg0, (unsigned int)(uint64_t)arg1);
    that->fNetIf->setRunningState((IO80211LinkState)(uint64_t)arg0 == kIO80211NetworkLinkUp);
    that->fNetIf->postMessage(APPLE80211_M_LINK_CHANGED, NULL, 0, false);
    that->fNetIf->postMessage(APPLE80211_M_BSSID_CHANGED, NULL, 0, false);
    that->fNetIf->postMessage(APPLE80211_M_SSID_CHANGED, NULL, 0, false);
    if ((IO80211LinkState)(uint64_t)arg0 == kIO80211NetworkLinkUp) {
        that->fNetIf->reportLinkStatus(3, 0x80);
    } else {
        that->fNetIf->reportLinkStatus(1, 0);
    }
    that->bsdInterface->setLinkState((IO80211LinkState)(uint64_t)arg0);
    return ret;
}

#ifdef __PRIVATE_SPI__
IOReturn AirportItlwm::outputStart(IONetworkInterface *interface, IOOptionBits options)
{
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    mbuf_t m = NULL;
    if (ifq_is_oactive(&ifp->if_snd))
        return kIOReturnNoResources;
    while (kIOReturnSuccess == interface->dequeueOutputPackets(1, &m)) {
        if (outputPacket(m, NULL)!= kIOReturnOutputSuccess ||
            ifq_is_oactive(&ifp->if_snd))
            return kIOReturnNoResources;
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::networkInterfaceNotification(
                    IONetworkInterface * interface,
                    uint32_t              type,
                    void *                  argument )
{
    XYLog("%s\n", __FUNCTION__);
    return kIOReturnSuccess;
}
#endif

extern const char* hexdump(uint8_t *buf, size_t len);

UInt32 AirportItlwm::outputPacket(mbuf_t m, void *param)
{
//    XYLog("%s\n", __FUNCTION__);
    IOReturn ret = kIOReturnOutputSuccess;
    struct _ifnet *ifp = &fHalService->get80211Controller()->ic_ac.ac_if;
    
    if (fHalService->get80211Controller()->ic_state != IEEE80211_S_RUN || ifp->if_snd.queue == NULL) {
        if (m && mbuf_type(m) != MBUF_TYPE_FREE)
            freePacket(m);
        return kIOReturnOutputDropped;
    }
    if (m == NULL) {
        XYLog("%s m==NULL!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        ret = kIOReturnOutputDropped;
    }
    if (!(mbuf_flags(m) & MBUF_PKTHDR) ){
        XYLog("%s pkthdr is NULL!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        freePacket(m);
        ret = kIOReturnOutputDropped;
    }
    if (mbuf_type(m) == MBUF_TYPE_FREE) {
        XYLog("%s mbuf is FREE!!\n", __FUNCTION__);
        ifp->netStat->outputErrors++;
        ret = kIOReturnOutputDropped;
    }
    size_t len = mbuf_len(m);
    ether_header_t *eh = (ether_header_t *)mbuf_data(m);
    if (len >= sizeof(ether_header_t) && eh->ether_type == htons(ETHERTYPE_PAE)) { // EAPOL packet
        const char* dump = hexdump((uint8_t*)mbuf_data(m), len);
        XYLog("output EAPOL packet, len: %zu, data: %s\n", len, dump ? dump : "Failed to allocate memory");
        if (dump)
            IOFree((void*)dump, 3 * len + 1);
    }
    if (!ifp->if_snd.queue->lockEnqueue(m)) {
        freePacket(m);
        ret = kIOReturnOutputDropped;
    }
    (*ifp->if_start)(ifp);
    return ret;
}

const OSString * AirportItlwm::newVendorString() const
{
    return OSString::withCString("Apple");
}

const OSString * AirportItlwm::newModelString() const
{
    return OSString::withCString(fHalService->getDriverInfo()->getFirmwareName());
}

IOReturn AirportItlwm::getHardwareAddress(IOEthernetAddress *addrP)
{
    if (IEEE80211_ADDR_EQ(etheranyaddr, fHalService->get80211Controller()->ic_myaddr))
        return kIOReturnError;
    else {
        IEEE80211_ADDR_COPY(addrP, fHalService->get80211Controller()->ic_myaddr);
        return kIOReturnSuccess;
    }
}

IOReturn AirportItlwm::setHardwareAddress(const void *addrP, UInt32 addrBytes)
{
    if (!fNetIf || !addrP)
        return kIOReturnError;
    if_setlladdr(&fHalService->get80211Controller()->ic_ac.ac_if, (const UInt8 *)addrP);
    if (fHalService->get80211Controller()->ic_state > IEEE80211_S_INIT) {
        fHalService->disable(bsdInterface);
        fHalService->enable(bsdInterface);
    }
    return kIOReturnSuccess;
}

UInt32 AirportItlwm::getFeatures() const
{
    return fHalService->getDriverInfo()->supportedFeatures();
}

IOReturn AirportItlwm::setPromiscuousMode(IOEnetPromiscuousMode mode)
{
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::setMulticastMode(IOEnetMulticastMode mode)
{
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::setMulticastList(IOEthernetAddress* addr, UInt32 len)
{
    return fHalService->getDriverController()->setMulticastList(addr, len);
}

IOReturn AirportItlwm::getPacketFilters(const OSSymbol *group, UInt32 *filters) const
{
    IOReturn    rtn = kIOReturnSuccess;
    if (group == gIOEthernetWakeOnLANFilterGroup && magicPacketSupported)
        *filters = kIOEthernetWakeOnMagicPacket;
    else if (group == gIONetworkFilterGroup)
        *filters = kIOPacketFilterMulticast | kIOPacketFilterPromiscuous;
    else
        rtn = IOEthernetController::getPacketFilters(group, filters);
    return rtn;
}

SInt32 AirportItlwm::
enableFeature(IO80211FeatureCode code, void *data)
{
    if (code == kIO80211Feature80211n) {
        return 0;
    }
    return 102;
}

bool AirportItlwm::getLogPipes(CCPipe**logPipe, CCPipe**eventPipe, CCPipe**snapshotsPipe)
{
    bool ret = false;
    if (logPipe) {
        *logPipe = driverLogPipe;
        ret = true;
    }
    if (eventPipe) {
        *eventPipe = driverDataPathPipe;
        ret = true;
    }
    if (snapshotsPipe) {
        *snapshotsPipe = driverSnapshotsPipe;
        ret = true;
    }
    return ret;
}

#define APPLE80211_CAPA_AWDL_FEATURE_AUTO_UNLOCK    0x00000004
#define APPLE80211_CAPA_AWDL_FEATURE_WOW            0x00000080

IOReturn AirportItlwm::
getCARD_CAPABILITIES(OSObject *object,
                                     struct apple80211_capability_data *cd)
{
    uint32_t caps = fHalService->get80211Controller()->ic_caps;
    memset(cd, 0, sizeof(struct apple80211_capability_data));
    
    if (caps & IEEE80211_C_WEP)
        cd->capabilities[0] |= 1 << APPLE80211_CAP_WEP;
    if (caps & IEEE80211_C_RSN)
        cd->capabilities[0] |= 1 << APPLE80211_CAP_TKIP | 1 << APPLE80211_CAP_AES_CCM;
    // Disable not implemented capabilities
    // if (caps & IEEE80211_C_PMGT)
    //     cd->capabilities[0] |= 1 << APPLE80211_CAP_PMGT;
    // if (caps & IEEE80211_C_IBSS)
    //     cd->capabilities[0] |= 1 << APPLE80211_CAP_IBSS;
    // if (caps & IEEE80211_C_HOSTAP)
    //     cd->capabilities[0] |= 1 << APPLE80211_CAP_HOSTAP;
    // AES not enabled, like on Apple cards
    
    if (caps & IEEE80211_C_SHSLOT)
        cd->capabilities[1] |= 1 << (APPLE80211_CAP_SHSLOT - 8);
    if (caps & IEEE80211_C_SHPREAMBLE)
        cd->capabilities[1] |= 1 << (APPLE80211_CAP_SHPREAMBLE - 8);
    if (caps & IEEE80211_C_RSN)
        cd->capabilities[1] |= 1 << (APPLE80211_CAP_WPA1 - 8) | 1 << (APPLE80211_CAP_WPA2 - 8) | 1 << (APPLE80211_CAP_TKIPMIC - 8);
    // Disable not implemented capabilities
    // if (caps & IEEE80211_C_TXPMGT)
    //     cd->capabilities[1] |= 1 << (APPLE80211_CAP_TXPMGT - 8);
    // if (caps & IEEE80211_C_MONITOR)
    //     cd->capabilities[1] |= 1 << (APPLE80211_CAP_MONITOR - 8);
    // WPA not enabled, like on Apple cards

    cd->version = APPLE80211_VERSION;
    cd->capabilities[2] = 0xFF; // BURST, WME, SHORT_GI_40MHZ, SHORT_GI_20MHZ, WOW, TSN, ?, ?
    cd->capabilities[3] = 0x2B;
    cd->capabilities[5] = 0x40;
    cd->capabilities[6] = (
//                           1 |    //MFP capable
                           0x8 |
                           0x4 |
                           0x80
                           );
    *(uint16_t *)&cd->capabilities[8] = 0x201;
//
//    cd->capabilities[2] |= 0x10;
//    cd->capabilities[5] |= 0x1;
//
//    cd->capabilities[2] |= 0x2;
//
//    cd->capabilities[3] |= 0x20;
//
//    cd->capabilities[0] |= 0x80;
//
//    cd->capabilities[3] |= 0x80;
//    cd->capabilities[4] |= 0x4;
//
//    cd->capabilities[4] |= 0x1;
//    cd->capabilities[3] |= 0x1;
//    cd->capabilities[6] |= 0x8;
//
//    cd->capabilities[3] |= 3;
//    cd->capabilities[4] |= 2;
//    cd->capabilities[6] |= 0x10;
//    cd->capabilities[5] |= 0x20;
//    cd->capabilities[5] |= 0x80;
//
//    if (cd->capabilities[6] & 0x20) {
//        cd->capabilities[2] |= 8;
//    }
//    cd->capabilities[5] |= 8;
//    cd->capabilities[8] |= 2;
//
//    cd->capabilities[11] |= (2 | 4 | 8 | 0x10 | 0x20 | 0x40 | 0x80);
    
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getDRIVER_VERSION(OSObject *object,
                                  struct apple80211_version_data *hv)
{
    if (!hv)
        return kIOReturnError;
    hv->version = APPLE80211_VERSION;
    snprintf(hv->string, sizeof(hv->string), "itlwm: %s%s fw: %s", ITLWM_VERSION, GIT_COMMIT, fHalService->getDriverInfo()->getFirmwareVersion());
    hv->string_len = strlen(hv->string);
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getHARDWARE_VERSION(OSObject *object,
                                    struct apple80211_version_data *hv)
{
    if (!hv)
        return kIOReturnError;
    hv->version = APPLE80211_VERSION;
    strncpy(hv->string, fHalService->getDriverInfo()->getFirmwareVersion(), sizeof(hv->string));
    hv->string_len = strlen(fHalService->getDriverInfo()->getFirmwareVersion());
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getCOUNTRY_CODE(OSObject *object,
                                struct apple80211_country_code_data *cd)
{
    char user_override_cc[3];
    const char *cc_fw = fHalService->getDriverInfo()->getFirmwareCountryCode();
    
    if (!cd)
        return kIOReturnError;
    cd->version = APPLE80211_VERSION;
    memset(user_override_cc, 0, sizeof(user_override_cc));
    PE_parse_boot_argn("itlwm_cc", user_override_cc, 3);
    /* user_override_cc > firmware_cc > geo_location_cc */
    strncpy((char*)cd->cc, user_override_cc[0] ? user_override_cc : ((cc_fw[0] == 'Z' && cc_fw[1] == 'Z' && geo_location_cc[0]) ? geo_location_cc : cc_fw), sizeof(cd->cc));
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setCOUNTRY_CODE(OSObject *object, struct apple80211_country_code_data *data)
{
    XYLog("%s cc=%s\n", __FUNCTION__, data->cc);
    if (data && data->cc[0] != 120 && data->cc[0] != 88) {
        memcpy(geo_location_cc, data->cc, sizeof(geo_location_cc));
        fNetIf->postMessage(APPLE80211_M_COUNTRY_CODE_CHANGED, NULL, 0, 0);
    }
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getPOWER(OSObject *object,
                         struct apple80211_power_data *pd)
{
    if (!pd)
        return kIOReturnError;
    pd->version = APPLE80211_VERSION;
    pd->num_radios = 4;
    pd->power_state[0] = power_state;
    pd->power_state[1] = power_state;
    pd->power_state[2] = power_state;
    pd->power_state[3] = power_state;
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setPOWER(OSObject *object,
                         struct apple80211_power_data *pd)
{
    if (!pd)
        return kIOReturnError;
    IOLog("itlwm: setPOWER: num_radios[%d]  power_state(0:%u  1:%u  2:%u  3:%u)\n", pd->num_radios, pd->power_state[0], pd->power_state[1], pd->power_state[2], pd->power_state[3]);
    if (pd->num_radios > 0) {
        bool isRunning = (fHalService->get80211Controller()->ic_ac.ac_if.if_flags & (IFF_UP | IFF_RUNNING)) != 0;
        if (pd->power_state[0] == 0) {
            changePowerStateToPriv(1);
            if (isRunning) {
                net80211_ifstats(fHalService->get80211Controller());
                disableAdapter(bsdInterface);
            }
        } else {
            changePowerStateToPriv(2);
            if (!isRunning)
                enableAdapter(bsdInterface);
        }
        power_state = (pd->power_state[0]);
    }
    
    return kIOReturnSuccess;
}

SInt32 AirportItlwm::apple80211_ioctl(IO80211SkywalkInterface *interface,unsigned long cmd,void *data, bool b1, bool b2)
{
    if (!ml_at_interrupt_context())
        XYLog("%s cmd: %s b1: %d b2: %d\n", __FUNCTION__, convertApple80211IOCTLToString((unsigned int)cmd), b1, b2);
    return super::apple80211_ioctl(interface, cmd, data, b1, b2);
}

SInt32 AirportItlwm::apple80211SkywalkRequest(UInt request,int cmd,IO80211SkywalkInterface *interface,void *data)
{
    if (!ml_at_interrupt_context())
        XYLog("%s 1 cmd: %s request: %d\n", __FUNCTION__, convertApple80211IOCTLToString(cmd), request);
    return kIOReturnUnsupported;
}

SInt32 AirportItlwm::apple80211SkywalkRequest(UInt request,int cmd,IO80211SkywalkInterface *interface,void *data,void *)
{
    if (!ml_at_interrupt_context())
        XYLog("%s 2 cmd: %s request: %d\n", __FUNCTION__, convertApple80211IOCTLToString(cmd), request);
    return kIOReturnUnsupported;
}

IOReturn AirportItlwm::enableAdapter(IONetworkInterface *netif)
{
    fHalService->enable(netif);
    watchdogTimer->setTimeoutMS(kWatchDogTimerPeriod);
    watchdogTimer->enable();
    return kIOReturnSuccess;
}

void AirportItlwm::disableAdapter(IONetworkInterface *netif)
{
    watchdogTimer->cancelTimeout();
    watchdogTimer->disable();
    fHalService->disable(netif);
}

IOReturn AirportItlwm::
tsleepHandler(OSObject* owner, void* arg0, void* arg1, void* arg2, void* arg3)
{
    AirportItlwm* dev = OSDynamicCast(AirportItlwm, owner);
    if (dev == 0)
        return kIOReturnError;
    
    if (arg1 == 0) {
        if (_fCommandGate->commandSleep(arg0, THREAD_INTERRUPTIBLE) == THREAD_AWAKENED)
            return kIOReturnSuccess;
        else
            return kIOReturnTimeout;
    } else {
        AbsoluteTime deadline;
        clock_interval_to_deadline((*(int*)arg1), kNanosecondScale, reinterpret_cast<uint64_t*> (&deadline));
        if (_fCommandGate->commandSleep(arg0, deadline, THREAD_INTERRUPTIBLE) == THREAD_AWAKENED)
            return kIOReturnSuccess;
        else
            return kIOReturnTimeout;
    }
}

bool AirportItlwm::initPCIPowerManagment(IOPCIDevice *provider)
{
    UInt16 reg16;

    reg16 = provider->configRead16(kIOPCIConfigCommand);

    reg16 |= ( kIOPCICommandBusMaster       |
               kIOPCICommandMemorySpace     |
               kIOPCICommandMemWrInvalidate );

    reg16 &= ~kIOPCICommandIOSpace;  // disable I/O space

    provider->configWrite16( kIOPCIConfigCommand, reg16 );
    provider->findPCICapability(kIOPCIPowerManagementCapability,
                                &pmPCICapPtr);
    if (pmPCICapPtr) {
        UInt16 pciPMCReg = provider->configRead32( pmPCICapPtr ) >> 16;
        if (pciPMCReg & kPCIPMCPMESupportFromD3Cold)
            magicPacketSupported = true;
        provider->configWrite16((pmPCICapPtr + 4), 0x8000 );
        IOSleep(10);
    }
    return true;
}

static IOPMPowerState powerStateArray[kPowerStateCount] =
{
    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {1, kIOPMDeviceUsable, kIOPMPowerOn, kIOPMPowerOn, 0, 0, 0, 0, 0, 0, 0, 0}
};

void AirportItlwm::unregistPM()
{
    if (powerOffThreadCall) {
        thread_call_free(powerOffThreadCall);
        powerOffThreadCall = NULL;
    }
    if (powerOnThreadCall) {
        thread_call_free(powerOnThreadCall);
        powerOnThreadCall = NULL;
    }
}

IOReturn AirportItlwm::setPowerState(unsigned long powerStateOrdinal, IOService *policyMaker)
{
    IOReturn result = IOPMAckImplied;
    
    if (pmPowerState == powerStateOrdinal)
        return result;
    switch (powerStateOrdinal) {
        case kPowerStateOff:
            if (powerOffThreadCall) {
                retain();
                if (thread_call_enter(powerOffThreadCall))
                    release();
                result = 5000000;
            }
            break;
        case kPowerStateOn:
            if (powerOnThreadCall) {
                retain();
                if (thread_call_enter(powerOnThreadCall))
                    release();
                result = 5000000;
            }
            break;
            
        default:
            break;
    }
    return result;
}

IOReturn AirportItlwm::setWakeOnMagicPacket(bool active)
{
    magicPacketEnabled = active;
    return kIOReturnSuccess;
}

static void handleSetPowerStateOff(thread_call_param_t param0,
                             thread_call_param_t param1)
{
    AirportItlwm *self = (AirportItlwm *)param0;

    if (param1 == 0)
    {
        self->getCommandGate()->runAction((IOCommandGate::Action)
                                           handleSetPowerStateOff,
                                           (void *) 1);
    }
    else
    {
        self->setPowerStateOff();
        self->release();
    }
}

static void handleSetPowerStateOn(thread_call_param_t param0,
                            thread_call_param_t param1)
{
    AirportItlwm *self = (AirportItlwm *) param0;

    if (param1 == 0)
    {
        self->getCommandGate()->runAction((IOCommandGate::Action)
                                           handleSetPowerStateOn,
                                           (void *) 1);
    }
    else
    {
        self->setPowerStateOn();
        self->release();
    }
}

IOReturn AirportItlwm::registerWithPolicyMaker(IOService *policyMaker)
{
    IOReturn ret;
    
    pmPowerState = kPowerStateOn;
    pmPolicyMaker = policyMaker;
    
    powerOffThreadCall = thread_call_allocate(
                                            (thread_call_func_t)handleSetPowerStateOff,
                                            (thread_call_param_t)this);
    powerOnThreadCall  = thread_call_allocate(
                                            (thread_call_func_t)handleSetPowerStateOn,
                                              (thread_call_param_t)this);
    ret = pmPolicyMaker->registerPowerDriver(this,
                                             powerStateArray,
                                             kPowerStateCount);
    return ret;
}

void AirportItlwm::setPowerStateOff()
{
    XYLog("%s\n", __FUNCTION__);
    pmPowerState = kPowerStateOff;
    disableAdapter(bsdInterface);
    pmPolicyMaker->acknowledgeSetPowerState();
}

void AirportItlwm::setPowerStateOn()
{
    XYLog("%s\n", __FUNCTION__);
    pmPowerState = kPowerStateOn;
    pmPolicyMaker->acknowledgeSetPowerState();
}


================================================
FILE: AirportItlwm/AirportItlwmV2.hpp
================================================
//
//  AirportItlwmV2.hpp
//  AirportItlwm-Sonoma
//
//  Created by qcwap on 2023/6/27.
//  Copyright © 2023 钟先耀. All rights reserved.
//

#ifndef AirportItlwmV2_hpp
#define AirportItlwmV2_hpp

#include "Apple80211.h"

#include "IOKit/network/IOGatedOutputQueue.h"
#include <libkern/c++/OSString.h>
#include <IOKit/IOService.h>
#include <IOKit/pci/IOPCIDevice.h>
#include <IOKit/IOLib.h>
#include <libkern/OSKextLib.h>
#include <libkern/c++/OSMetaClass.h>
#include <IOKit/IOFilterInterruptEventSource.h>

#include "ItlIwm.hpp"
#include "ItlIwx.hpp"
#include "ItlIwn.hpp"

#include "AirportItlwmEthernetInterface.hpp"

enum
{
    kPowerStateOff = 0,
    kPowerStateOn,
    kPowerStateCount
};

#define kWatchDogTimerPeriod 1000

extern "C" {
const char *convertApple80211IOCTLToString(signed int cmd);
}

class AirportItlwm : public IO80211Controller {
    OSDeclareDefaultStructors(AirportItlwm)
#define IOCTL(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCGA80211) { \
ret = get##REQ(interface, (struct DATA_TYPE* )data); \
} else { \
ret = set##REQ(interface, (struct DATA_TYPE* )data); \
}
    
#define IOCTL_GET(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCGA80211) { \
ret = get##REQ(interface, (struct DATA_TYPE* )data); \
}
#define IOCTL_SET(REQ_TYPE, REQ, DATA_TYPE) \
if (REQ_TYPE == SIOCSA80211) { \
ret = set##REQ(interface, (struct DATA_TYPE* )data); \
}
#define FUNC_IOCTL(REQ, DATA_TYPE) \
FUNC_IOCTL_GET(REQ, DATA_TYPE) \
FUNC_IOCTL_SET(REQ, DATA_TYPE)
#define FUNC_IOCTL_GET(REQ, DATA_TYPE) \
IOReturn get##REQ(OSObject *object, struct DATA_TYPE *data);
#define FUNC_IOCTL_SET(REQ, DATA_TYPE) \
IOReturn set##REQ(OSObject *object, struct DATA_TYPE *data);
    
public:
    virtual bool init(OSDictionary *properties) override;
    virtual void free() override;
    virtual IOService* probe(IOService* provider, SInt32* score) override;
    virtual bool start(IOService *provider) override;
    virtual void stop(IOService *provider) override;
    virtual IOReturn enable(IO80211SkywalkInterface *netif) override;
    virtual IOReturn disable(IO80211SkywalkInterface *netif) override;
    virtual IOReturn setHardwareAddress(const void *addr, UInt32 addrBytes) override;
    virtual IOReturn getHardwareAddress(IOEthernetAddress* addrP) override;
    virtual IOReturn getPacketFilters(const OSSymbol *group, UInt32 *filters) const override;
    virtual IOReturn setPromiscuousMode(IOEnetPromiscuousMode mode) override;
    virtual IOReturn setMulticastMode(IOEnetMulticastMode mode) override;
    virtual IOReturn setMulticastList(IOEthernetAddress* addr, UInt32 len) override;
    virtual UInt32 getFeatures() const override;
    virtual const OSString * newVendorString() const override;
    virtual const OSString * newModelString() const override;
    virtual IOReturn selectMedium(const IONetworkMedium *medium) override;
    virtual bool createWorkQueue() override;
    virtual IONetworkInterface * createInterface() override;
    virtual bool configureInterface(IONetworkInterface *netif) override;
    virtual UInt32 outputPacket(mbuf_t, void * param) override;
#ifdef __PRIVATE_SPI__
    virtual IOReturn outputStart(IONetworkInterface *interface, IOOptionBits options) override;
    virtual IOReturn networkInterfaceNotification(
                        IONetworkInterface * interface,
                        uint32_t              type,
                        void *                  argument ) override;
#endif
    virtual bool setLinkStatus(
                               UInt32                  status,
                               const IONetworkMedium * activeMedium = 0,
                               UInt64                  speed        = 0,
                               OSData *                data         = 0) override;
    static IOReturn setLinkStateGated(OSObject *target, void *arg0, void *arg1, void *arg2, void *arg3);
    
    static IOReturn tsleepHandler(OSObject* owner, void* arg0 = 0, void* arg1 = 0, void* arg2 = 0, void* arg3 = 0);
    static void eventHandler(struct ieee80211com *, int, void *);
    IOReturn enableAdapter(IONetworkInterface *netif);
    void disableAdapter(IONetworkInterface *netif);
    bool initCCLogs();
    
    virtual IO80211WorkQueue *getWorkQueue() override;
    virtual bool requiresExplicitMBufRelease() override {
        return false;
    }
    virtual bool flowIdSupported() override {
        return false;
    }
    virtual SInt32 monitorModeSetEnabled(bool, UInt) override {
        return kIOReturnSuccess;
    }
    virtual IOReturn requestQueueSizeAndTimeout(unsigned short *queue, unsigned short *timeout) override {
        XYLog("%s\n", __FUNCTION__);
        return kIOReturnSuccess;
    }
    
    virtual bool getLogPipes(CCPipe**, CCPipe**, CCPipe**) override;
    
    virtual void *getFaultReporterFromDriver() override;
    
    virtual SInt32 apple80211_ioctl(IO80211SkywalkInterface *,unsigned long,void *, bool, bool) override;
    virtual SInt32 apple80211SkywalkRequest(UInt,int,IO80211SkywalkInterface *,void *) override;
    virtual SInt32 apple80211SkywalkRequest(UInt,int,IO80211SkywalkInterface *,void *,void *) override;

    bool createMediumTables(const IONetworkMedium **primary);
    void releaseAll();
    void watchdogAction(IOTimerEventSource *timer);
    
    virtual SInt32 enableFeature(IO80211FeatureCode, void*) override;
    virtual bool isCommandProhibited(int command) override {
//        if (!ml_at_interrupt_context())
//            XYLog("%s %s\n", __FUNCTION__, convertApple80211IOCTLToString(command));
        return false;
    };
    virtual SInt32 handleCardSpecific(IO80211SkywalkInterface *,unsigned long,void *,bool) override {
        XYLog("%s\n", __FUNCTION__);
        return 0;
    };
    virtual IOReturn getDRIVER_VERSION(IO80211SkywalkInterface *interface,apple80211_version_data *data) override {
        XYLog("%s\n", __FUNCTION__);
        return getDRIVER_VERSION((OSObject *)interface, data);
    };
    virtual IOReturn getHARDWARE_VERSION(IO80211SkywalkInterface *interface,apple80211_version_data *data) override {
        XYLog("%s\n", __FUNCTION__);
        return getHARDWARE_VERSION((OSObject *)interface, data);
    };
    virtual IOReturn getCARD_CAPABILITIES(IO80211SkywalkInterface *interface,apple80211_capability_data *data) override {
//        XYLog("%s\n", __FUNCTION__);
        return getCARD_CAPABILITIES((OSObject *)interface, data);
    }
    virtual IOReturn getPOWER(IO80211SkywalkInterface *interface,apple80211_power_data *data) override {
//        XYLog("%s\n", __FUNCTION__);
        return getPOWER((OSObject *)interface, data);
    }
    virtual IOReturn setPOWER(IO80211SkywalkInterface *interface,apple80211_power_data *data) override {
//        XYLog("%s\n", __FUNCTION__);
        return setPOWER((OSObject *)interface, data);
    }
    virtual IOReturn getCOUNTRY_CODE(IO80211SkywalkInterface *interface,apple80211_country_code_data *data) override {
//        XYLog("%s\n", __FUNCTION__);
        return getCOUNTRY_CODE((OSObject *)interface, data);
    }
    virtual IOReturn setCOUNTRY_CODE(IO80211SkywalkInterface *interface,apple80211_country_code_data *data) override {
//        XYLog("%s\n", __FUNCTION__);
        return setCOUNTRY_CODE((OSObject *)interface, data);
    }
    virtual IOReturn setGET_DEBUG_INFO(IO80211SkywalkInterface *interface,apple80211_debug_command *data) override {
        XYLog("%s\n", __FUNCTION__);
        return kIOReturnSuccess;
    }
    
    //scan
    static void fakeScanDone(OSObject *owner, IOTimerEventSource *sender);
    
    //-----------------------------------------------------------------------
    // Power management support.
    //-----------------------------------------------------------------------
    virtual IOReturn registerWithPolicyMaker( IOService * policyMaker ) override;
    virtual IOReturn setPowerState( unsigned long powerStateOrdinal,
                                    IOService *   policyMaker) override;
    virtual IOReturn setWakeOnMagicPacket( bool active ) override;
    void setPowerStateOff(void);
    void setPowerStateOn(void);
    void unregistPM();
    bool initPCIPowerManagment(IOPCIDevice *provider);

    FUNC_IOCTL_GET(CARD_CAPABILITIES, apple80211_capability_data)
    FUNC_IOCTL(POWER, apple80211_power_data)
    FUNC_IOCTL_GET(DRIVER_VERSION, apple80211_version_data)
    FUNC_IOCTL_GET(HARDWARE_VERSION, apple80211_version_data)
    FUNC_IOCTL(COUNTRY_CODE, apple80211_country_code_data)
    
public:
    IOInterruptEventSource* fInterrupt;
    IOTimerEventSource *watchdogTimer;
    IOPCIDevice *pciNub;
    IONetworkStats *fpNetStats;
    AirportItlwmEthernetInterface *bsdInterface;
    IO80211SkywalkInterface *fNetIf;
    IOWorkLoop *fWatchdogWorkLoop;
    ItlHalService *fHalService;
    
    //IO80211
    uint8_t power_state;
    struct ieee80211_node *fNextNodeToSend;
    bool fScanResultWrapping;
    IOTimerEventSource *scanSource;
    
    u_int32_t current_authtype_lower;
    u_int32_t current_authtype_upper;
    UInt64 currentSpeed;
    UInt32 currentStatus;
    bool disassocIsVoluntary;
    char geo_location_cc[3];
    
    //pm
    thread_call_t powerOnThreadCall;
    thread_call_t powerOffThreadCall;
    UInt32 pmPowerState;
    IOService *pmPolicyMaker;
    UInt8 pmPCICapPtr;
    bool magicPacketEnabled;
    bool magicPacketSupported;
    
    //AWDL
    uint8_t *syncFrameTemplate;
    uint32_t syncFrameTemplateLength;
    uint8_t awdlBSSID[6];
    uint32_t awdlSyncState;
    uint32_t awdlElectionId;
    uint32_t awdlPresenceMode;
    uint16_t awdlMasterChannel;
    uint16_t awdlSecondaryMasterChannel;
    uint8_t *roamProfile;
    struct apple80211_btc_profiles_data *btcProfile;
    struct apple80211_btc_config_data btcConfig;
    uint32_t btcMode;
    uint32_t btcOptions;
    bool awdlSyncEnable;
    
    CCPipe *driverLogPipe;
    CCPipe *driverDataPathPipe;
    CCPipe *driverSnapshotsPipe;
    
    CCStream *driverFaultReporter;
};

#endif /* AirportItlwmV2_hpp */


================================================
FILE: AirportItlwm/AirportSTAIOCTL.cpp
================================================
//
//  AirportSTAIOCTL.cpp
//  AirportItlwm
//
//  Created by qcwap on 2020/9/4.
//  Copyright © 2020 钟先耀. All rights reserved.
//

#include "AirportItlwm.hpp"
#include <sys/_netstat.h>

extern IOCommandGate *_fCommandGate;

const char* hexdump(uint8_t *buf, size_t len);

SInt32 AirportItlwm::apple80211Request(unsigned int request_type,
                                       int request_number,
                                       IO80211Interface *interface,
                                       void *data)
{
    if (request_type != SIOCGA80211 && request_type != SIOCSA80211)
        return kIOReturnError;
    IOReturn ret = kIOReturnError;
    
    switch (request_number) {
        case APPLE80211_IOC_SSID:  // 1
            IOCTL(request_type, SSID, apple80211_ssid_data);
            break;
        case APPLE80211_IOC_AUTH_TYPE:  // 2
            IOCTL(request_type, AUTH_TYPE, apple80211_authtype_data);
            break;
        case APPLE80211_IOC_CHANNEL:  // 4
            IOCTL(request_type, CHANNEL, apple80211_channel_data);
            break;
        case APPLE80211_IOC_PROTMODE:
            IOCTL(request_type, PROTMODE, apple80211_protmode_data);
            break;
        case APPLE80211_IOC_TXPOWER:  // 7
            IOCTL_GET(request_type, TXPOWER, apple80211_txpower_data);
            break;
        case APPLE80211_IOC_RATE:  // 8
            IOCTL_GET(request_type, RATE, apple80211_rate_data);
            break;
        case APPLE80211_IOC_BSSID:  // 9
            IOCTL(request_type, BSSID, apple80211_bssid_data);
            break;
        case APPLE80211_IOC_SCAN_REQ:  // 10
            IOCTL_SET(request_type, SCAN_REQ, apple80211_scan_data);
            break;
        case APPLE80211_IOC_SCAN_REQ_MULTIPLE:
            IOCTL_SET(request_type, SCAN_REQ_MULTIPLE, apple80211_scan_multiple_data);
            break;
        case APPLE80211_IOC_SCAN_RESULT:  // 11
            IOCTL_GET(request_type, SCAN_RESULT, apple80211_scan_result*);
            break;
        case APPLE80211_IOC_CARD_CAPABILITIES:  // 12
            IOCTL_GET(request_type, CARD_CAPABILITIES, apple80211_capability_data);
            break;
        case APPLE80211_IOC_STATE:  // 13
            IOCTL_GET(request_type, STATE, apple80211_state_data);
            break;
        case APPLE80211_IOC_PHY_MODE:  // 14
            IOCTL_GET(request_type, PHY_MODE, apple80211_phymode_data);
            break;
        case APPLE80211_IOC_OP_MODE:  // 15
            IOCTL_GET(request_type, OP_MODE, apple80211_opmode_data);
            break;
        case APPLE80211_IOC_RSSI:  // 16
            IOCTL_GET(request_type, RSSI, apple80211_rssi_data);
            break;
        case APPLE80211_IOC_NOISE:  // 17
            IOCTL_GET(request_type, NOISE, apple80211_noise_data);
            break;
        case APPLE80211_IOC_INT_MIT:  // 18
            IOCTL_GET(request_type, INT_MIT, apple80211_intmit_data);
            break;
        case APPLE80211_IOC_POWER:  // 19
            IOCTL(request_type, POWER, apple80211_power_data);
            break;
        case APPLE80211_IOC_ASSOCIATE:  // 20
            IOCTL_SET(request_type, ASSOCIATE, apple80211_assoc_data);
            break;
        case APPLE80211_IOC_ASSOCIATE_RESULT: // 21
            IOCTL_GET(request_type, ASSOCIATE_RESULT, apple80211_assoc_result_data);
            break;
        case APPLE80211_IOC_DISASSOCIATE: // 22
            if (request_type == SIOCSA80211)
                setDISASSOCIATE(interface);
            break;
        case APPLE80211_IOC_RATE_SET:
            IOCTL_GET(request_type, RATE_SET, apple80211_rate_set_data);
            break;
        case APPLE80211_IOC_MCS_INDEX_SET:
            IOCTL_GET(request_type, MCS_INDEX_SET, apple80211_mcs_index_set_data);
            break;
        case APPLE80211_IOC_VHT_MCS_INDEX_SET:
            IOCTL_GET(request_type, VHT_MCS_INDEX_SET, apple80211_vht_mcs_index_set_data);
            break;
        case APPLE80211_IOC_MCS_VHT:
            IOCTL(request_type, MCS_VHT, apple80211_mcs_vht_data);
            break;
        case APPLE80211_IOC_SUPPORTED_CHANNELS:  // 27
        case APPLE80211_IOC_HW_SUPPORTED_CHANNELS:
            IOCTL_GET(request_type, SUPPORTED_CHANNELS, apple80211_sup_channel_data);
            break;
        case APPLE80211_IOC_LOCALE:  // 28
            IOCTL_GET(request_type, LOCALE, apple80211_locale_data);
            break;
        case APPLE80211_IOC_DEAUTH:
            IOCTL(request_type, DEAUTH, apple80211_deauth_data);
            break;
        case APPLE80211_IOC_TX_ANTENNA:  // 37
            IOCTL_GET(request_type, TX_ANTENNA, apple80211_antenna_data);
            break;
        case APPLE80211_IOC_ANTENNA_DIVERSITY:  // 39
            IOCTL_GET(request_type, ANTENNA_DIVERSITY, apple80211_antenna_data);
            break;
        case APPLE80211_IOC_DRIVER_VERSION:  // 43
            IOCTL_GET(request_type, DRIVER_VERSION, apple80211_version_data);
            break;
        case APPLE80211_IOC_HARDWARE_VERSION:  // 44
            IOCTL_GET(request_type, HARDWARE_VERSION, apple80211_version_data);
            break;
        case APPLE80211_IOC_RSN_IE: // 46
            IOCTL(request_type, RSN_IE, apple80211_rsn_ie_data);
            break;
        case APPLE80211_IOC_AP_IE_LIST: // 48
            if (request_type != SIOCGA80211)
                return kIOReturnError;
            IOCTL_GET(request_type, AP_IE_LIST, apple80211_ap_ie_data);
            break;
        case APPLE80211_IOC_ASSOCIATION_STATUS:  // 50
            IOCTL_GET(request_type, ASSOCIATION_STATUS, apple80211_assoc_status_data);
            break;
        case APPLE80211_IOC_COUNTRY_CODE:  // 51
            IOCTL(request_type, COUNTRY_CODE, apple80211_country_code_data);
            break;
        case APPLE80211_IOC_RADIO_INFO:
            IOCTL_GET(request_type, RADIO_INFO, apple80211_radio_info_data);
            break;
        case APPLE80211_IOC_MCS:  // 57
            IOCTL_GET(request_type, MCS, apple80211_mcs_data);
            break;
        case APPLE80211_IOC_VIRTUAL_IF_CREATE: // 94
            IOCTL_SET(request_type, VIRTUAL_IF_CREATE, apple80211_virt_if_create_data);
            break;
        case APPLE80211_IOC_VIRTUAL_IF_DELETE:
            IOCTL_SET(request_type, VIRTUAL_IF_DELETE, apple80211_virt_if_delete_data);
            break;
        case APPLE80211_IOC_ROAM_THRESH:
            IOCTL_GET(request_type, ROAM_THRESH, apple80211_roam_threshold_data);
            break;
        case APPLE80211_IOC_LINK_CHANGED_EVENT_DATA:
            IOCTL_GET(request_type, LINK_CHANGED_EVENT_DATA, apple80211_link_changed_event_data);
            break;
        case APPLE80211_IOC_POWERSAVE:
            IOCTL_GET(request_type, POWERSAVE, apple80211_powersave_data);
            break;
        case APPLE80211_IOC_CIPHER_KEY:
            IOCTL_SET(request_type, CIPHER_KEY, apple80211_key);
            break;
        case APPLE80211_IOC_SCANCACHE_CLEAR:
            IOCTL_SET(request_type, SCANCACHE_CLEAR, apple80211req);
            break;
        case APPLE80211_IOC_TX_NSS:
            IOCTL(request_type, TX_NSS, apple80211_tx_nss_data);
            break;
        case APPLE80211_IOC_NSS:
            IOCTL_GET(request_type, NSS, apple80211_nss_data);
            break;
        case APPLE80211_IOC_ROAM:
            IOCTL_SET(request_type, ROAM, apple80211_sta_roam_data);
            break;
        case APPLE80211_IOC_ROAM_PROFILE:
            IOCTL(request_type, ROAM_PROFILE, apple80211_roam_profile_band_data);
            break;
        case APPLE80211_IOC_WOW_PARAMETERS:
            IOCTL(request_type, WOW_PARAMETERS, apple80211_wow_parameter_data);
            break;
        case APPLE80211_IOC_IE:
            IOCTL(request_type, IE, apple80211_ie_data);
            break;
        case APPLE80211_IOC_P2P_LISTEN:
            IOCTL_SET(request_type, P2P_LISTEN, apple80211_p2p_listen_data);
            break;
        case APPLE80211_IOC_P2P_SCAN:
            IOCTL_SET(request_type, P2P_SCAN, apple80211_scan_data);
            break;
        case APPLE80211_IOC_P2P_GO_CONF:
            IOCTL_SET(request_type, P2P_GO_CONF, apple80211_p2p_go_conf_data);
            break;
        case APPLE80211_IOC_BTCOEX_PROFILES:
            IOCTL(request_type, BTCOEX_PROFILES, apple80211_btc_profiles_data);
            break;
        case APPLE80211_IOC_BTCOEX_CONFIG:
            IOCTL(request_type, BTCOEX_CONFIG, apple80211_btc_config_data);
            break;
        case APPLE80211_IOC_BTCOEX_OPTIONS:
            IOCTL(request_type, BTCOEX_OPTIONS, apple80211_btc_options_data);
            break;
        case APPLE80211_IOC_BTCOEX_MODE:
            IOCTL(request_type, BTCOEX_MODE, apple80211_btc_mode_data);
            break;
        default:
        unhandled:
            if (!ml_at_interrupt_context()) {
                XYLog("%s Unhandled IOCTL %s (%d) %s\n", __FUNCTION__, IOCTL_NAMES[request_number >= ARRAY_SIZE(IOCTL_NAMES) ? 0: request_number],
                      request_number, request_type == SIOCGA80211 ? "get" : (request_type == SIOCSA80211 ? "set" : "other"));
            }
            break;
    }
    
    return ret;
}

IOReturn AirportItlwm::
getSSID(OSObject *object,
                        struct apple80211_ssid_data *sd)
{
    struct ieee80211com * ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(sd, 0, sizeof(*sd));
        sd->version = APPLE80211_VERSION;
        memcpy(sd->ssid_bytes, ic->ic_des_essid, strlen((const char*)ic->ic_des_essid));
        sd->ssid_len = (uint32_t)strlen((const char*)ic->ic_des_essid);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwm::
setSSID(OSObject *object, struct apple80211_ssid_data *sd)
{
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getAUTH_TYPE(OSObject *object, struct apple80211_authtype_data *ad)
{
    ad->version = APPLE80211_VERSION;
    ad->authtype_lower = current_authtype_lower;
    ad->authtype_upper = current_authtype_upper;
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setAUTH_TYPE(OSObject *object, struct apple80211_authtype_data *ad)
{
    current_authtype_lower = ad->authtype_lower;
    current_authtype_upper = ad->authtype_upper;
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setCIPHER_KEY(OSObject *object, struct apple80211_key *key)
{
    XYLog("%s\n", __FUNCTION__);
    const char* keydump = hexdump(key->key, key->key_len);
    const char* rscdump = hexdump(key->key_rsc, key->key_rsc_len);
    const char* eadump = hexdump(key->key_ea.octet, APPLE80211_ADDR_LEN);
    static_assert(__offsetof(struct apple80211_key, key_ea) == 92, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, key_rsc_len) == 80, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kck_len) == 100, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kek_len) == 120, "struct corrupted");
    static_assert(__offsetof(struct apple80211_key, wowl_kck_key) == 104, "struct corrupted");
    if (keydump && rscdump && eadump)
        XYLog("Set key request: len=%d cipher_type=%d flags=%d index=%d key=%s rsc_len=%d rsc=%s ea=%s\n",
              key->key_len, key->key_cipher_type, key->key_flags, key->key_index, keydump, key->key_rsc_len, rscdump, eadump);
    else
        XYLog("Set key request, but failed to allocate memory for hexdump\n");
    
    if (keydump)
        IOFree((void*)keydump, 3 * key->key_len + 1);
    if (rscdump)
        IOFree((void*)rscdump, 3 * key->key_rsc_len + 1);
    if (eadump)
        IOFree((void*)eadump, 3 * APPLE80211_ADDR_LEN + 1);
    
    switch (key->key_cipher_type) {
        case APPLE80211_CIPHER_NONE:
            // clear existing key
//            XYLog("Setting NONE key is not supported\n");
            break;
        case APPLE80211_CIPHER_WEP_40:
        case APPLE80211_CIPHER_WEP_104:
            XYLog("Setting WEP key %d is not supported\n", key->key_index);
            break;
        case APPLE80211_CIPHER_TKIP:
        case APPLE80211_CIPHER_AES_OCB:
        case APPLE80211_CIPHER_AES_CCM:
            switch (key->key_flags) {
                case 4: // PTK
                    setPTK(key->key, key->key_len);
                    getNetworkInterface()->postMessage(APPLE80211_M_RSN_HANDSHAKE_DONE);
                    break;
                case 0: // GTK
                    setGTK(key->key, key->key_len, key->key_index, key->key_rsc);
                    getNetworkInterface()->postMessage(APPLE80211_M_RSN_HANDSHAKE_DONE);
                    break;
            }
            break;
        case APPLE80211_CIPHER_PMK:
            XYLog("Setting WPA PMK is not supported\n");
            break;
        case APPLE80211_CIPHER_PMKSA:
            XYLog("Setting WPA PMKSA is not supported\n");
            break;
    }
    //fInterface->postMessage(APPLE80211_M_CIPHER_KEY_CHANGED);
    return kIOReturnSuccess;
}

// From Ventura, airport/wifiagent seems that they don't like to accept extra channel flags in the scan result list,
// if not, the exact behavior is that the wifi list on the control center/menu bar will not refresh after system boot.
#if __IO80211_TARGET >= __MAC_13_0
static int ieeeChanFlag2appleScanFlagVentura(int flags)
{
    int ret = 0;
    if (flags & IEEE80211_CHAN_2GHZ)
        ret |= APPLE80211_C_FLAG_2GHZ;
    if (flags & IEEE80211_CHAN_5GHZ)
        ret |= APPLE80211_C_FLAG_5GHZ;
    ret |= (APPLE80211_C_FLAG_ACTIVE | APPLE80211_C_FLAG_20MHZ);
    return ret;
}
#endif

static int ieeeChanFlag2apple(int flags, int bw)
{
    int ret = 0;
    if (flags & IEEE80211_CHAN_2GHZ)
        ret |= APPLE80211_C_FLAG_2GHZ;
    if (flags & IEEE80211_CHAN_5GHZ)
        ret |= APPLE80211_C_FLAG_5GHZ;
    if (!(flags & IEEE80211_CHAN_PASSIVE))
        ret |= APPLE80211_C_FLAG_ACTIVE;
    if (flags & IEEE80211_CHAN_DFS)
        ret |= APPLE80211_C_FLAG_DFS;
    if (bw == -1) {
        if (flags & IEEE80211_CHAN_VHT) {
            if ((flags & IEEE80211_CHAN_VHT160) || (flags & IEEE80211_CHAN_VHT80_80))
                ret |= APPLE80211_C_FLAG_160MHZ;
            if (flags & IEEE80211_CHAN_VHT80)
                ret |= APPLE80211_C_FLAG_80MHZ;
        } else if ((flags & IEEE80211_CHAN_HT40) && (flags & IEEE80211_CHAN_HT)) {
            ret |= APPLE80211_C_FLAG_40MHZ;
            if (flags & IEEE80211_CHAN_HT40U)
                ret |= APPLE80211_C_FLAG_EXT_ABV;
        } else if (flags & IEEE80211_CHAN_HT20)
            ret |= APPLE80211_C_FLAG_20MHZ;
        else if ((flags & IEEE80211_CHAN_CCK) || (flags & IEEE80211_CHAN_OFDM))
            ret |= APPLE80211_C_FLAG_10MHZ;
    } else {
        switch (bw) {
            case IEEE80211_CHAN_WIDTH_80P80:
            case IEEE80211_CHAN_WIDTH_160:
                ret |= APPLE80211_C_FLAG_160MHZ;
                break;
            case IEEE80211_CHAN_WIDTH_80:
                ret |= APPLE80211_C_FLAG_80MHZ;
                break;
            case IEEE80211_CHAN_WIDTH_40:
                ret |= APPLE80211_C_FLAG_40MHZ;
                if (flags & IEEE80211_CHAN_HT40U)
                    ret |= APPLE80211_C_FLAG_EXT_ABV;
                break;
            case IEEE80211_CHAN_WIDTH_20:
                ret |= APPLE80211_C_FLAG_20MHZ;
                break;
            default:
                if (flags & IEEE80211_CHAN_HT20)
                    ret |= APPLE80211_C_FLAG_20MHZ;
                else if ((flags & IEEE80211_CHAN_CCK) || (flags & IEEE80211_CHAN_OFDM))
                    ret |= APPLE80211_C_FLAG_10MHZ;
                break;
        }
    }
    return ret;
}

IOReturn AirportItlwm::
getCHANNEL(OSObject *object,
                           struct apple80211_channel_data *cd)
{
    struct ieee80211com * ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(cd, 0, sizeof(apple80211_channel_data));
        cd->version = APPLE80211_VERSION;
        cd->channel.version = APPLE80211_VERSION;
        cd->channel.channel = ieee80211_chan2ieee(ic, ic->ic_bss->ni_chan);
        cd->channel.flags = ieeeChanFlag2apple(ic->ic_bss->ni_chan->ic_flags, ic->ic_bss->ni_chw);
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwm::
setCHANNEL(OSObject *object, struct apple80211_channel_data *data)
{
    XYLog("%s channel=%d\n", __FUNCTION__, data->channel.channel);
    return kIOReturnError;
}

IOReturn AirportItlwm::
getPROTMODE(OSObject *object, struct apple80211_protmode_data *pd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(pd, 0, sizeof(*pd));
        pd->version = APPLE80211_VERSION;
        pd->threshold = 0;
        pd->protmode = 0;
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwm::
setPROTMODE(OSObject *object, struct apple80211_protmode_data *pd)
{
    return kIOReturnError;
}

IOReturn AirportItlwm::
getTXPOWER(OSObject *object,
                           struct apple80211_txpower_data *txd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(txd, 0, sizeof(*txd));
        txd->version = APPLE80211_VERSION;
        txd->txpower = ic->ic_txpower;
        txd->txpower_unit = APPLE80211_UNIT_PERCENT;
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwm::
getTX_NSS(OSObject *object, struct apple80211_tx_nss_data *data)
{
    memset(data, 0, sizeof(*data));
    data->version = APPLE80211_VERSION;
    data->nss = fHalService->getDriverInfo()->getTxNSS();
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getNSS(OSObject *object, struct apple80211_nss_data *data)
{
    memset(data, 0, sizeof(*data));
    data->version = APPLE80211_VERSION;
    data->nss = fHalService->getDriverInfo()->getTxNSS();
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setTX_NSS(OSObject *object, struct apple80211_tx_nss_data *data)
{
    return kIOReturnError;
}

IOReturn AirportItlwm::
setROAM(OSObject *object, struct apple80211_sta_roam_data *data)
{
    XYLog("%s rcc_channels=%d unk=%d target_channel=%d target_bssid=%s\n", __FUNCTION__, data->rcc_channels, data->unk1, data->taget_channel, ether_sprintf(data->target_bssid));
    return kIOReturnError;
}

IOReturn AirportItlwm::
getRATE(OSObject *object, struct apple80211_rate_data *rd)
{
    struct ieee80211com *ic = fHalService->get80211Controller();
    if (ic->ic_bss == NULL)
        return 6;
    int nss;
    int sgi;
    int index = 0;
    if (ic->ic_state == IEEE80211_S_RUN) {
        memset(rd, 0, sizeof(*rd));
        rd->version = APPLE80211_VERSION;
        rd->num_radios = 1;
        sgi = ieee80211_node_supports_sgi(ic->ic_bss);
        if (ic->ic_curmode == IEEE80211_MODE_11AC) {
            if (sgi)
                index += 1;
            nss = fHalService->getDriverInfo()->getTxNSS();
            switch (ic->ic_bss->ni_chw) {
                case IEEE80211_CHAN_WIDTH_40:
                    index += 4;
                    break;
                case IEEE80211_CHAN_WIDTH_80:
                    index += 8;
                    break;
                case IEEE80211_CHAN_WIDTH_80P80:
                case IEEE80211_CHAN_WIDTH_160:
                    index += 12;
                    break;

                default:
                    break;
            }
            index += 2 * (nss - 1);
            const struct ieee80211_vht_rateset *rs = &ieee80211_std_ratesets_11ac[index];
            rd->rate[0] = rs->rates[ic->ic_bss->ni_txmcs % rs->nrates] / 2;
        } else if (ic->ic_curmode == IEEE80211_MODE_11N) {
            int is_40mhz = ic->ic_bss->ni_chw == IEEE80211_CHAN_WIDTH_40;
            if (sgi)
                index += 1;
            if (is_40mhz)
                index += (IEEE80211_HT_RATESET_MIMO4_SGI + 1);
            index += (ic->ic_bss->ni_txmcs / 16);
            nss = ic->ic_bss->ni_txmcs / 8 + 1;
            index += 2 * (nss - 1);
            rd->rate[0] = ieee80211_std_ratesets_11n[index].rates[ic->ic_bss->ni_txmcs % 8] / 2;
        } else
            rd->rate[0] = ic->ic_bss->ni_rates.rs_rates[ic->ic_bss->ni_txrate];
        return kIOReturnSuccess;
    }
    return 6;
}

IOReturn AirportItlwm::
getROAM_PROFILE(OSObject *object, struct apple80211_roam_profile_band_data *data)
{
    if (roamProfile == NULL) {
        XYLog("%s no roam profile, return error\n", __FUNCTION__);
        return kIOReturnError;
    }
    memcpy(data, roamProfile, sizeof(struct apple80211_roam_profile_band_data));
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setROAM_PROFILE(OSObject *object, struct apple80211_roam_profile_band_data *data)
{
    XYLog("%s cnt=%d flags=%d\n", __FUNCTION__, data->profile_cnt, data->flags);
#if 0
    for (int i = 0; i < data->profile_cnt; i++) {
        struct apple80211_roam_profile *bd = &data->profiles[i];
        XYLog("%s %d ROAM_PROF_BACKOFF_MULTIPLIER: %d, ROAM_PROF_FULLSCAN_PERIOD: %d, ROAM_PROF_INIT_SCAN_PERIOD: %d, ROAM_PROF_MAX_SCAN_PERIOD: %d, ROAM_PROF_NFSCAN: %d, ROAM_PROF_ROAM_DELTA: %d, ROAM_PROF_ROAM_FLAGS:%d, ROAM_PROF_ROAM_TRIGGER: %d, ROAM_PROF_RSSI_BOOST_DELTA: %d, ROAM_PROF_RSSI_BOOST_THRESH: %d, ROAM_PROF_RSSI_LOWER: %d\n", __FUNCTION__, i, bd->backoff_multiplier, bd->full_scan_period, bd->init_scan_period, bd->max_scan_period, bd->nfscan, bd->delta, bd->flags, bd->trigger, bd->rssi_boost_delta, bd->rssi_boost_thresh, bd->rssi_lower);
    }
#endif
    if (roamProfile != NULL)
        IOFree(roamProfile, sizeof(struct apple80211_roam_profile_band_data));
    roamProfile = (uint8_t *)IOMalloc(sizeof(struct apple80211_roam_profile_band_data));
    memcpy(roamProfile, data, sizeof(struct apple80211_roam_profile_band_data));
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getBTCOEX_CONFIG(OSObject *object, struct apple80211_btc_config_data *data)
{
    if (!data)
        return kIOReturnError;
    memcpy(data, &btcConfig, sizeof(struct apple80211_btc_config_data));
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
setBTCOEX_CONFIG(OSObject *object, struct apple80211_btc_config_data *data)
{
    if (!data)
        return kIOReturnError;
    XYLog("%s Setting BTCoex Config: enable_2G:%d, profile_2g:%d, enable_5G:%d, profile_5G:%d\n", __FUNCTION__, data->enable_2G, data->profile_2g, data->enable_5G, data->profile_5G);
    memcpy(&btcConfig, data, sizeof(struct apple80211_btc_config_data));
    return kIOReturnSuccess;
}

IOReturn AirportItlwm::
getBTCOEX_MODE(OSObject
Download .txt
gitextract_w4xojz7w/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   └── Bug.md
│   └── workflows/
│       └── main.yml
├── .gitignore
├── AirportItlwm/
│   ├── AirportAWDL.cpp
│   ├── AirportItlwm-Monterey-Info.plist
│   ├── AirportItlwm-Sonoma-Info.plist
│   ├── AirportItlwm.cpp
│   ├── AirportItlwm.hpp
│   ├── AirportItlwmEthernetInterface.cpp
│   ├── AirportItlwmEthernetInterface.hpp
│   ├── AirportItlwmInterface.cpp
│   ├── AirportItlwmInterface.hpp
│   ├── AirportItlwmSkywalkInterface.cpp
│   ├── AirportItlwmSkywalkInterface.hpp
│   ├── AirportItlwmV2.cpp
│   ├── AirportItlwmV2.hpp
│   ├── AirportSTAIOCTL.cpp
│   ├── AirportVirtualIOCTL.cpp
│   ├── IOPCIEDeviceWrapper.cpp
│   ├── IOPCIEDeviceWrapper.hpp
│   └── Info.plist
├── LICENSE
├── README.md
├── include/
│   ├── Airport/
│   │   ├── Apple80211.h
│   │   ├── CCDataPipe.h
│   │   ├── CCLogPipe.h
│   │   ├── CCLogStream.h
│   │   ├── CCPipe.h
│   │   ├── CCStream.h
│   │   ├── IO80211Controller.h
│   │   ├── IO80211ControllerV2.h
│   │   ├── IO80211InfraInterface.h
│   │   ├── IO80211InfraProtocol.h
│   │   ├── IO80211Interface.h
│   │   ├── IO80211P2PInterface.h
│   │   ├── IO80211SkywalkInterface.h
│   │   ├── IO80211VirtualInterface.h
│   │   ├── IO80211WorkLoop.h
│   │   ├── IO80211WorkQueue.h
│   │   ├── IOSkywalkEthernetInterface.h
│   │   ├── IOSkywalkInterface.h
│   │   ├── IOSkywalkLegacyEthernetInterface.h
│   │   ├── IOSkywalkLogicalLink.h
│   │   ├── IOSkywalkNetworkInterface.h
│   │   ├── IOSkywalkNetworkPacket.h
│   │   ├── IOSkywalkPacketBufferPool.h
│   │   ├── apple80211_ioctl.h
│   │   ├── apple80211_var.h
│   │   ├── apple80211_wps.h
│   │   ├── apple_private_spi.h
│   │   └── debug.h
│   ├── ClientKit/
│   │   ├── Common.h
│   │   └── IoctlId.h
│   ├── FwData.h
│   └── HAL/
│       ├── ItlDriverController.hpp
│       ├── ItlDriverInfo.hpp
│       ├── ItlHalService.cpp
│       └── ItlHalService.hpp
├── itl80211/
│   ├── Info.plist
│   ├── compat.cpp
│   ├── compat.h
│   ├── linux/
│   │   ├── bitfield.h
│   │   ├── kernel.h
│   │   ├── random.h
│   │   └── types.h
│   ├── openbsd/
│   │   ├── crypto/
│   │   │   ├── aes.c
│   │   │   ├── aes.h
│   │   │   ├── arc4.c
│   │   │   ├── arc4.h
│   │   │   ├── blf.c
│   │   │   ├── blf.h
│   │   │   ├── cast.c
│   │   │   ├── cast.h
│   │   │   ├── castsb.h
│   │   │   ├── chacha_private.h
│   │   │   ├── chachapoly.c
│   │   │   ├── chachapoly.h
│   │   │   ├── cmac.c
│   │   │   ├── cmac.h
│   │   │   ├── cryptodev.h
│   │   │   ├── des_locl.h
│   │   │   ├── ecb3_enc.c
│   │   │   ├── ecb_enc.c
│   │   │   ├── gmac.c
│   │   │   ├── gmac.h
│   │   │   ├── hmac.c
│   │   │   ├── hmac.h
│   │   │   ├── idgen.c
│   │   │   ├── idgen.h
│   │   │   ├── key_wrap.c
│   │   │   ├── key_wrap.h
│   │   │   ├── md5.c
│   │   │   ├── md5.h
│   │   │   ├── michael.c
│   │   │   ├── michael.h
│   │   │   ├── podd.h
│   │   │   ├── poly1305.c
│   │   │   ├── poly1305.h
│   │   │   ├── rijndael.c
│   │   │   ├── rijndael.h
│   │   │   ├── rmd160.c
│   │   │   ├── rmd160.h
│   │   │   ├── set_key.c
│   │   │   ├── sha1-pbkdf2.c
│   │   │   ├── sha1.c
│   │   │   ├── sha1.h
│   │   │   ├── sha2.c
│   │   │   ├── sha2.h
│   │   │   ├── sk.h
│   │   │   └── spr.h
│   │   ├── net80211/
│   │   │   ├── CTimeout.cpp
│   │   │   ├── _string.c
│   │   │   ├── ieee80211.c
│   │   │   ├── ieee80211.h
│   │   │   ├── ieee80211_amrr.c
│   │   │   ├── ieee80211_amrr.h
│   │   │   ├── ieee80211_crypto.c
│   │   │   ├── ieee80211_crypto.h
│   │   │   ├── ieee80211_crypto_bip.c
│   │   │   ├── ieee80211_crypto_ccmp.c
│   │   │   ├── ieee80211_crypto_tkip.c
│   │   │   ├── ieee80211_crypto_wep.c
│   │   │   ├── ieee80211_input.c
│   │   │   ├── ieee80211_ioctl.c
│   │   │   ├── ieee80211_ioctl.h
│   │   │   ├── ieee80211_mira.c
│   │   │   ├── ieee80211_mira.h
│   │   │   ├── ieee80211_node.c
│   │   │   ├── ieee80211_node.h
│   │   │   ├── ieee80211_output.c
│   │   │   ├── ieee80211_pae_input.c
│   │   │   ├── ieee80211_pae_output.c
│   │   │   ├── ieee80211_priv.h
│   │   │   ├── ieee80211_proto.c
│   │   │   ├── ieee80211_proto.h
│   │   │   ├── ieee80211_ra.c
│   │   │   ├── ieee80211_ra.h
│   │   │   ├── ieee80211_radiotap.h
│   │   │   ├── ieee80211_regdomain.c
│   │   │   ├── ieee80211_regdomain.h
│   │   │   ├── ieee80211_rssadapt.c
│   │   │   ├── ieee80211_rssadapt.h
│   │   │   ├── ieee80211_var.h
│   │   │   └── timeout.c
│   │   └── sys/
│   │       ├── CTimeout.hpp
│   │       ├── _arc4random.h
│   │       ├── _buf.h
│   │       ├── _clock.h
│   │       ├── _if_ether.h
│   │       ├── _if_media.h
│   │       ├── _ifq.cpp
│   │       ├── _ifq.h
│   │       ├── _malloc.h
│   │       ├── _mbuf.cpp
│   │       ├── _mbuf.h
│   │       ├── _netstat.h
│   │       ├── _null.h
│   │       ├── _task.cpp
│   │       ├── _task.h
│   │       ├── arp.c
│   │       ├── arp.h
│   │       ├── endian.h
│   │       ├── pcireg.h
│   │       ├── timeout.h
│   │       └── tree.h
│   ├── zutil.c
│   └── zutil.h
├── itlwm/
│   ├── Info.plist
│   ├── ItlNetworkUserClient.cpp
│   ├── ItlNetworkUserClient.hpp
│   ├── PrivateSPI.pch
│   ├── firmware/
│   │   ├── iwlwifi-Qu-b0-hr-b0-68.ucode
│   │   ├── iwlwifi-Qu-b0-jf-b0-68.ucode
│   │   ├── iwlwifi-Qu-c0-hr-b0-68.ucode
│   │   ├── iwlwifi-Qu-c0-jf-b0-68.ucode
│   │   ├── iwlwifi-QuZ-a0-hr-b0-68.ucode
│   │   ├── iwlwifi-QuZ-a0-jf-b0-68.ucode
│   │   ├── iwlwifi-cc-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf-a0.pnvm
│   │   ├── iwlwifi-so-a0-gf4-a0-68.ucode
│   │   ├── iwlwifi-so-a0-gf4-a0.pnvm
│   │   ├── iwlwifi-so-a0-hr-b0-68.ucode
│   │   ├── iwlwifi-so-a0-jf-b0-68.ucode
│   │   ├── iwlwifi-ty-a0-gf-a0-68.ucode
│   │   ├── iwlwifi-ty-a0-gf-a0.pnvm
│   │   ├── iwm-3160-17
│   │   ├── iwm-3168-29
│   │   ├── iwm-7260-17
│   │   ├── iwm-7265-17
│   │   ├── iwm-8000C-36
│   │   ├── iwm-8265-36
│   │   ├── iwm-9000-46
│   │   ├── iwm-9260-46
│   │   ├── iwn-1000
│   │   ├── iwn-105
│   │   ├── iwn-135
│   │   ├── iwn-2000
│   │   ├── iwn-2030
│   │   ├── iwn-4965
│   │   ├── iwn-5000
│   │   ├── iwn-5150
│   │   ├── iwn-6000
│   │   ├── iwn-6005
│   │   ├── iwn-6030
│   │   └── iwn-6050
│   ├── hal_iwm/
│   │   ├── ItlIwm.cpp
│   │   ├── ItlIwm.hpp
│   │   ├── coex.cpp
│   │   ├── ctxt.cpp
│   │   ├── fw.cpp
│   │   ├── hw.cpp
│   │   ├── if_iwmreg.h
│   │   ├── if_iwmvar.h
│   │   ├── io.cpp
│   │   ├── itlhdr.h
│   │   ├── led.cpp
│   │   ├── mac80211.cpp
│   │   ├── nvm.cpp
│   │   ├── phy.cpp
│   │   ├── power.cpp
│   │   ├── rs.cpp
│   │   ├── rs.h
│   │   ├── rx.cpp
│   │   ├── scan.cpp
│   │   ├── tx.cpp
│   │   └── utils.cpp
│   ├── hal_iwn/
│   │   ├── ItlIwn.cpp
│   │   ├── ItlIwn.hpp
│   │   ├── if_iwnreg.h
│   │   └── if_iwnvar.h
│   ├── hal_iwx/
│   │   ├── ItlIwx.cpp
│   │   ├── ItlIwx.hpp
│   │   ├── if_iwxreg.h
│   │   └── if_iwxvar.h
│   ├── itlwm.cpp
│   ├── itlwm.hpp
│   └── pm.cpp
├── itlwm.xcodeproj/
│   ├── project.pbxproj
│   └── xcshareddata/
│       └── xcschemes/
│           ├── AirportItlwm (all).xcscheme
│           └── itlwm.xcscheme
├── iwlwifi-firmware-license
└── scripts/
    ├── fw_gen.sh
    ├── load.sh
    ├── unload.sh
    └── zlib_compress_fw.py
Download .txt
Showing preview only (436K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7025 symbols across 179 files)

FILE: AirportItlwm/AirportAWDL.cpp
  function IOReturn (line 17) | IOReturn AirportItlwm::
  function IOReturn (line 24) | IOReturn AirportItlwm::
  function IOReturn (line 36) | IOReturn AirportItlwm::
  function IOReturn (line 44) | IOReturn AirportItlwm::
  function IOReturn (line 52) | IOReturn AirportItlwm::

FILE: AirportItlwm/AirportItlwm.cpp
  function pciMsiSetEnable (line 43) | static void pciMsiSetEnable(IOPCIDevice *device, UInt8 msiCap, int enable)
  function pciMsiXClearAndSet (line 54) | static void pciMsiXClearAndSet(IOPCIDevice *device, UInt8 msixCap, UInt1...
  function IOService (line 64) | IOService* AirportItlwm::probe(IOService *provider, SInt32 *score)
  type _ifnet (line 106) | struct _ifnet
  function IONetworkInterface (line 128) | IONetworkInterface *AirportItlwm::createInterface()
  type ether_addr (line 140) | struct ether_addr
  type ieee80211com (line 142) | struct ieee80211com
  type ieee80211_wpaparams (line 147) | struct ieee80211_wpaparams
  type ieee80211_nwkey (line 148) | struct ieee80211_nwkey
  type ieee80211com (line 219) | struct ieee80211com
  type ieee80211_node (line 220) | struct ieee80211_node
  type ieee80211_key (line 221) | struct ieee80211_key
  type ieee80211com (line 260) | struct ieee80211com
  type ieee80211_node (line 261) | struct ieee80211_node
  type ieee80211_key (line 262) | struct ieee80211_key
  type _ifnet (line 440) | struct _ifnet
  function OSString (line 451) | const OSString * AirportItlwm::newVendorString() const
  function OSString (line 456) | const OSString * AirportItlwm::newModelString() const
  function IOWorkLoop (line 492) | IOWorkLoop *AirportItlwm::getWorkLoop() const
  function IOReturn (line 497) | IOReturn AirportItlwm::selectMedium(const IONetworkMedium *medium)
  type _ifnet (line 506) | struct _ifnet
  type _ifnet (line 520) | struct _ifnet
  function IOReturn (line 546) | IOReturn AirportItlwm::
  type apple80211_roam_profile_band_data (line 607) | struct apple80211_roam_profile_band_data
  type apple80211_btc_profiles_data (line 611) | struct apple80211_btc_profiles_data
  function IOReturn (line 617) | IOReturn AirportItlwm::enable(IONetworkInterface *netif)
  function IOReturn (line 627) | IOReturn AirportItlwm::disable(IONetworkInterface *netif)
  function IOReturn (line 635) | IOReturn AirportItlwm::enableAdapter(IONetworkInterface *netif)
  function IOReturn (line 650) | IOReturn AirportItlwm::getHardwareAddress(IOEthernetAddress *addrP)
  function IOReturn (line 660) | IOReturn AirportItlwm::setHardwareAddress(const IOEthernetAddress *addrP)
  function IOReturn (line 672) | IOReturn AirportItlwm::getHardwareAddressForInterface(
  function IOReturn (line 679) | IOReturn AirportItlwm::outputStart(IONetworkInterface *interface, IOOpti...
  function UInt32 (line 694) | UInt32 AirportItlwm::outputPacket(mbuf_t m, void *param)
  function UInt32 (line 729) | UInt32 AirportItlwm::getFeatures() const
  function IOReturn (line 734) | IOReturn AirportItlwm::setPromiscuousMode(IOEnetPromiscuousMode mode)
  function IOReturn (line 739) | IOReturn AirportItlwm::setMulticastMode(IOEnetMulticastMode mode)
  function IOReturn (line 744) | IOReturn AirportItlwm::setMulticastList(IOEthernetAddress* addr, UInt32 ...
  function SInt32 (line 749) | SInt32 AirportItlwm::monitorModeSetEnabled(
  function IOReturn (line 765) | IOReturn AirportItlwm::getPacketFilters(const OSSymbol *group, UInt32 *f...
  function IOReturn (line 777) | IOReturn AirportItlwm::
  function IOReturn (line 817) | IOReturn AirportItlwm::setPowerState(unsigned long powerStateOrdinal, IO...
  function IOReturn (line 847) | IOReturn AirportItlwm::setWakeOnMagicPacket(bool active)
  function handleSetPowerStateOff (line 853) | static void handleSetPowerStateOff(thread_call_param_t param0,
  function handleSetPowerStateOn (line 871) | static void handleSetPowerStateOn(thread_call_param_t param0,
  function IOReturn (line 889) | IOReturn AirportItlwm::registerWithPolicyMaker(IOService *policyMaker)
  function UInt32 (line 931) | UInt32 AirportItlwm::
  function SInt32 (line 937) | SInt32 AirportItlwm::
  function SInt32 (line 943) | SInt32 AirportItlwm::
  function SInt32 (line 951) | SInt32 AirportItlwm::
  function SInt32 (line 976) | SInt32 AirportItlwm::
  function SInt32 (line 992) | SInt32 AirportItlwm::
  function IO80211VirtualInterface (line 1005) | IO80211VirtualInterface *AirportItlwm::
  type TxPacketRequest (line 1038) | struct TxPacketRequest

FILE: AirportItlwm/AirportItlwm.hpp
  class AirportItlwm (line 40) | class AirportItlwm : public IO80211Controller {
    type ether_addr (line 98) | struct ether_addr
    type ieee80211com (line 104) | struct ieee80211com
    type ieee80211_node (line 259) | struct ieee80211_node
    type apple80211_btc_profiles_data (line 284) | struct apple80211_btc_profiles_data
    type apple80211_btc_config_data (line 285) | struct apple80211_btc_config_data

FILE: AirportItlwm/AirportItlwmEthernetInterface.cpp
  function IOReturn (line 27) | IOReturn AirportItlwmEthernetInterface::
  function IOService (line 62) | IOService *AirportItlwmEthernetInterface::
  function errno_t (line 68) | errno_t AirportItlwmEthernetInterface::
  function errno_t (line 76) | errno_t AirportItlwmEthernetInterface::
  function UInt32 (line 96) | UInt32 AirportItlwmEthernetInterface::

FILE: AirportItlwm/AirportItlwmEthernetInterface.hpp
  class AirportItlwmEthernetInterface (line 21) | class AirportItlwmEthernetInterface : public IOEthernetInterface {

FILE: AirportItlwm/AirportItlwmInterface.cpp
  function UInt32 (line 35) | UInt32 AirportItlwmInterface::

FILE: AirportItlwm/AirportItlwmInterface.hpp
  class AirportItlwmInterface (line 18) | class AirportItlwmInterface : public IO80211Interface {

FILE: AirportItlwm/AirportItlwmSkywalkInterface.cpp
  function ieeeChanFlag2appleScanFlagVentura (line 31) | static int ieeeChanFlag2appleScanFlagVentura(int flags)
  function ieeeChanFlag2apple (line 42) | static int ieeeChanFlag2apple(int flags, int bw)
  type ether_addr (line 95) | struct ether_addr
  type ieee80211com (line 97) | struct ieee80211com
  type ieee80211_wpaparams (line 102) | struct ieee80211_wpaparams
  type ieee80211_nwkey (line 103) | struct ieee80211_nwkey
  type ieee80211com (line 174) | struct ieee80211com
  type ieee80211_node (line 175) | struct ieee80211_node
  type ieee80211_key (line 176) | struct ieee80211_key
  type ieee80211com (line 215) | struct ieee80211com
  type ieee80211_node (line 216) | struct ieee80211_node
  type ieee80211_key (line 217) | struct ieee80211_key
  function IOReturn (line 291) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 305) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 314) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 322) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 386) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 434) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 449) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 458) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 473) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 486) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 517) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 537) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 545) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 559) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 612) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 625) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 642) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 665) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 682) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 696) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 712) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 720) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 729) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 770) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 798) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 816) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 827) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 839) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 856) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 868) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 875) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 886) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 905) | IOReturn AirportItlwmSkywalkInterface::
  function convertNodeToScanResult (line 942) | static int convertNodeToScanResult(ItlHalService *fHalService, struct ie...
  function IOReturn (line 970) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 979) | IOReturn AirportItlwmSkywalkInterface::
  function IOReturn (line 988) | IOReturn AirportItlwmSkywalkInterface::

FILE: AirportItlwm/AirportItlwmSkywalkInterface.hpp
  class AirportItlwmSkywalkInterface (line 14) | class AirportItlwmSkywalkInterface : public IO80211InfraProtocol {
    type ether_addr (line 21) | struct ether_addr
    method IOReturn (line 43) | virtual IOReturn getDTIM_INT(apple80211_dtim_int_data *) override { re...
    method IOReturn (line 44) | virtual IOReturn getSTATION_LIST(apple80211_sta_data *) override { ret...
    method IOReturn (line 47) | virtual IOReturn getSTATS(apple80211_stats_data *) override { return k...
    method IOReturn (line 49) | virtual IOReturn getGUARD_INTERVAL(apple80211_guard_interval_data *) o...
    method IOReturn (line 52) | virtual IOReturn getWOW_PARAMETERS(apple80211_wow_parameter_data *) ov...
    method IOReturn (line 53) | virtual IOReturn getWOW_ENABLED(apple80211_state_data *) override { re...
    method IOReturn (line 54) | virtual IOReturn getPID_LOCK(apple80211_state_data *) override { retur...
    method IOReturn (line 55) | virtual IOReturn getSTA_IE_LIST(apple80211_sta_ie_data *) override { r...
    method IOReturn (line 56) | virtual IOReturn getSTA_STATS(apple80211_sta_stats_data *) override { ...
    method IOReturn (line 57) | virtual IOReturn getBT_COEX_FLAGS(apple80211_state_data *) override { ...
    method IOReturn (line 59) | virtual IOReturn getRSSI_BOUNDS(apple80211_rssi_bounds_data *) overrid...
    method IOReturn (line 60) | virtual IOReturn getPOWER_DEBUG_INFO(apple80211_power_debug_info *) ov...
    method IOReturn (line 61) | virtual IOReturn getHT_CAPABILITY(apple80211_ht_capability *) override...
    method IOReturn (line 63) | virtual IOReturn getEXTENDED_STATS(apple80211_extended_stats *) overri...
    method IOReturn (line 64) | virtual IOReturn getBEACON_PERIOD(apple80211_beacon_period_data *) ove...
    method IOReturn (line 67) | virtual IOReturn getGAS_RESULTS(apple80211_gas_result_t *) override { ...
    method IOReturn (line 68) | virtual IOReturn getCHANNELS_INFO(apple80211_channels_info *) override...
    method IOReturn (line 69) | virtual IOReturn getVHT_CAPABILITY(apple80211_vht_capability *) overri...
    method IOReturn (line 70) | virtual IOReturn getBGSCAN_CACHE_RESULTS(apple80211_bgscan_cached_netw...
    method IOReturn (line 71) | virtual IOReturn getROAM_PROFILE(apple80211_roam_profile_band_data *) ...
    method IOReturn (line 72) | virtual IOReturn getCHIP_COUNTER_STATS(apple80211_chip_stats *) overri...
    method IOReturn (line 73) | virtual IOReturn getDBG_GUARD_TIME_PARAMS(apple80211_dbg_guard_time_pa...
    method IOReturn (line 74) | virtual IOReturn getLEAKY_AP_STATS_MODE(apple80211_leaky_ap_setting *)...
    method IOReturn (line 75) | virtual IOReturn getCOUNTRY_CHANNELS(apple80211_country_channel_data *...
    method IOReturn (line 76) | virtual IOReturn getPRIVATE_MAC(apple80211_private_mac_data *) overrid...
    method IOReturn (line 77) | virtual IOReturn getRANGING_ENABLE(apple80211_ranging_enable_request_t...
    method IOReturn (line 78) | virtual IOReturn getRANGING_START(apple80211_ranging_start_request_t *...
    method IOReturn (line 79) | virtual IOReturn getAWDL_RSDB_CAPS(apple80211_rsdb_capability *) overr...
    method IOReturn (line 80) | virtual IOReturn getTKO_PARAMS(apple80211_tko_params *) override { ret...
    method IOReturn (line 81) | virtual IOReturn getTKO_DUMP(apple80211_tko_dump *) override { return ...
    method IOReturn (line 82) | virtual IOReturn getHW_SUPPORTED_CHANNELS(apple80211_sup_channel_data ...
    method IOReturn (line 83) | virtual IOReturn getBTCOEX_PROFILE(apple80211_btcoex_profile *) overri...
    method IOReturn (line 84) | virtual IOReturn getBTCOEX_PROFILE_ACTIVE(apple80211_btcoex_profile_ac...
    method IOReturn (line 85) | virtual IOReturn getTRAP_INFO(apple80211_trap_info_data *) override { ...
    method IOReturn (line 86) | virtual IOReturn getTHERMAL_INDEX(apple80211_thermal_index_t *) overri...
    method IOReturn (line 87) | virtual IOReturn getMAX_NSS_FOR_AP(apple80211_btcoex_max_nss_for_ap_da...
    method IOReturn (line 88) | virtual IOReturn getBTCOEX_2G_CHAIN_DISABLE(apple80211_btcoex_2g_chain...
    method IOReturn (line 89) | virtual IOReturn getPOWER_BUDGET(apple80211_power_budget_t *) override...
    method IOReturn (line 90) | virtual IOReturn getOFFLOAD_TCPKA_ENABLE(apple80211_offload_tcpka_enab...
    method IOReturn (line 91) | virtual IOReturn getRANGING_CAPS(apple80211_ranging_capabilities_t *) ...
    method IOReturn (line 92) | virtual IOReturn getSUPPRESS_SCANS(apple80211_suppress_scans_t *) over...
    method IOReturn (line 93) | virtual IOReturn getHOST_AP_MODE_HIDDEN(apple80211_host_ap_mode_hidden...
    method IOReturn (line 94) | virtual IOReturn getLQM_CONFIG(apple80211_lqm_config_t *) override { r...
    method IOReturn (line 95) | virtual IOReturn getTRAP_CRASHTRACER_MINI_DUMP(apple80211_trap_mini_du...
    method IOReturn (line 96) | virtual IOReturn getHE_CAPABILITY(apple80211_he_capability *) override...
    method IOReturn (line 97) | virtual IOReturn getBEACON_INFO(apple80211_beacon_info_t *) override {...
    method IOReturn (line 98) | virtual IOReturn getSOFTAP_PARAMS(apple80211_softap_params *) override...
    method IOReturn (line 99) | virtual IOReturn getCHIP_POWER_RANGE(apple80211_chip_power_limit *) ov...
    method IOReturn (line 100) | virtual IOReturn getSOFTAP_STATS(apple80211_softap_stats *) override {...
    method IOReturn (line 102) | virtual IOReturn getHW_ADDR(apple80211_hw_mac_address *) override { re...
    method IOReturn (line 103) | virtual IOReturn getHE_MCS_INDEX_SET(apple80211_he_mcs_index_set_data ...
    method IOReturn (line 104) | virtual IOReturn getCHIP_DIAGS(appl80211_chip_diags_data *) override {...
    method IOReturn (line 105) | virtual IOReturn getHP2P_CTRL(apple80211_hp2p_ctrl *) override { retur...
    method IOReturn (line 106) | virtual IOReturn getREQUEST_BSS_BLACKLIST(void *) override { return kI...
    method IOReturn (line 107) | virtual IOReturn getASSOC_READY_STATUS(apple80211_assoc_ready *) overr...
    method IOReturn (line 108) | virtual IOReturn getTXRX_CHAIN_INFO(apple80211_txrx_chain_info *) over...
    method IOReturn (line 109) | virtual IOReturn getMIMO_STATUS(apple80211_mimo_status *) override { r...
    method IOReturn (line 110) | virtual IOReturn getCUR_PMK(apple80211_pmk *) override { return kIORet...
    method IOReturn (line 111) | virtual IOReturn getDYNSAR_DETAIL(apple80211_dynsar_detail *) override...
    method IOReturn (line 112) | virtual IOReturn getRANDOMISATION_STATUS(apple80211_mac_randomisation_...
    method IOReturn (line 113) | virtual IOReturn getCOUNTRY_CHANNELS_INFO(apple80211_channels_info *) ...
    method IOReturn (line 114) | virtual IOReturn getLQM_SUMMARY(apple80211_lqm_summary *) override { r...
    method IOReturn (line 116) | virtual IOReturn getBEACON_SCAN_CACHE_REQ(apple80211_scan_result *) ov...
    method IOReturn (line 117) | virtual IOReturn getSLOW_WIFI_FEATURE_ENABLED(apple80211_slow_wifi_fea...
    method IOReturn (line 118) | virtual IOReturn getCCA(apple80211_interface_cca_data *) override { re...
    method IOReturn (line 119) | virtual IOReturn getRX_RATE(apple80211_rate_data *) override { return ...
    method IOReturn (line 120) | virtual IOReturn getTIMESYNC_INFO(apple80211_timesync_info *) override...
    method IOReturn (line 121) | virtual IOReturn getSENSING_DATA(apple80211_sensing_data_t *) override...
    method IOReturn (line 122) | virtual IOReturn getCOUNTRY_BAND_SUPPORT(apple80211_country_band_suppo...
    method IOReturn (line 123) | virtual IOReturn getWCL_FW_HOT_CHANNELS(apple80211_fw_hot_channels *) ...
    method IOReturn (line 124) | virtual IOReturn getWCL_LOW_LATENCY_INFO(apple80211_low_latency_info *...
    method IOReturn (line 125) | virtual IOReturn getWCL_BSS_INFO(apple80211_beacon_msg *) override { r...
    method IOReturn (line 126) | virtual IOReturn getWCL_TRAFFIC_COUNTERS(apple80211_wcl_traffic_counte...
    method IOReturn (line 127) | virtual IOReturn getWCL_GET_TX_BLANKING_STATUS(uint *) override { retu...
    method IOReturn (line 128) | virtual IOReturn getSSID_TRANSITION_SUPPORT(apple80211_ssid_transition...
    method IOReturn (line 129) | virtual IOReturn getWCL_VALID_CHANNEL_COUNT(unsigned long *) override ...
    method IOReturn (line 130) | virtual IOReturn getWCL_P2P_STATUS_FOR_SCAN(p2pStatusForScan *) overri...
    method IOReturn (line 131) | virtual IOReturn getWCL_CHANNELS_INFO(apple80211ChannelInfo *) overrid...
    method IOReturn (line 132) | virtual IOReturn getP2P_STEERING_METRIC(apple80211_p2p_steering_metric...
    method IOReturn (line 133) | virtual IOReturn getRSN_XE(apple80211_rsn_xe_data *) override { return...
    method IOReturn (line 134) | virtual IOReturn getSIB_COEX_STATUS(apple80211_sib_coex_status *) over...
    method IOReturn (line 135) | virtual IOReturn getWCL_EXTENDED_BSS_INFO(apple80211_extended_bss_info...
    method IOReturn (line 136) | virtual IOReturn getWCL_LOW_LATENCY_INFO_STATS(apple80211_wcl_low_late...
    method IOReturn (line 137) | virtual IOReturn getWCL_BGSCAN_CACHE_RESULT(apple80211_bgscan_cached_n...
    method IOReturn (line 138) | virtual IOReturn getWIFI_NOISE_PER_ANT(apple80211_noise_per_ant_t *) o...
    method IOReturn (line 139) | virtual IOReturn getBLOCKED_BANDS(apple80211_blocked_bands *) override...
    method IOReturn (line 140) | virtual IOReturn setSSID(apple80211_ssid_data *) override { return kIO...
    method IOReturn (line 143) | virtual IOReturn setCHANNEL(apple80211_channel_data *) override { retu...
    method IOReturn (line 144) | virtual IOReturn setPOWERSAVE(apple80211_powersave_data *) override { ...
    method IOReturn (line 145) | virtual IOReturn setTXPOWER(apple80211_txpower_data *) override { retu...
    method IOReturn (line 146) | virtual IOReturn setRATE(apple80211_rate_data *) override { return kIO...
    method IOReturn (line 150) | virtual IOReturn setIBSS_MODE(apple80211_network_data *) override { re...
    method IOReturn (line 151) | virtual IOReturn setHOST_AP_MODE(apple80211_network_data *) override {...
    method IOReturn (line 152) | virtual IOReturn setAP_MODE(apple80211_apmode_data *) override { retur...
    method IOReturn (line 154) | virtual IOReturn setTX_ANTENNA(void *) override { return kIOReturnUnsu...
    method IOReturn (line 155) | virtual IOReturn setANTENNA_DIVERSITY(void *) override { return kIORet...
    method IOReturn (line 157) | virtual IOReturn setBACKGROUND_SCAN(apple80211_bgscan_data *) override...
    method IOReturn (line 158) | virtual IOReturn setWOW_PARAMETERS(apple80211_wow_parameter_data *) ov...
    method IOReturn (line 159) | virtual IOReturn setWOW_ENABLED(apple80211_state_data *) override { re...
    method IOReturn (line 160) | virtual IOReturn setPID_LOCK(apple80211_state_data *) override { retur...
    method IOReturn (line 161) | virtual IOReturn setSTA_AUTHORIZE(apple80211_sta_authorize_data *) ove...
    method IOReturn (line 162) | virtual IOReturn setSTA_DISASSOCIATE(apple80211_sta_disassoc_data *) o...
    method IOReturn (line 163) | virtual IOReturn setSTA_DEAUTH(apple80211_sta_disassoc_data *) overrid...
    method IOReturn (line 164) | virtual IOReturn setRSN_CONF(apple80211_rsn_conf_data *) override { re...
    method IOReturn (line 165) | virtual IOReturn setIE(apple80211_ie_data *) override { return kIORetu...
    method IOReturn (line 166) | virtual IOReturn setWOW_TEST(apple80211_wow_test_data *) override { re...
    method IOReturn (line 168) | virtual IOReturn setVIRTUAL_IF_CREATE(apple80211_virt_if_create_data *...
    method IOReturn (line 169) | virtual IOReturn setBT_COEX_FLAGS(apple80211_state_data *) override { ...
    method IOReturn (line 170) | virtual IOReturn setROAM(apple80211_sta_roam_data *) override { return...
    method IOReturn (line 171) | virtual IOReturn setHT_CAPABILITY(apple80211_ht_capability *) override...
    method IOReturn (line 172) | virtual IOReturn setAWDL_FORCED_ROAM_CONFIG(apple80211_awdl_forced_roa...
    method IOReturn (line 173) | virtual IOReturn setOFFLOAD_ARP(apple80211_offload_arp_data *) overrid...
    method IOReturn (line 174) | virtual IOReturn setOFFLOAD_NDP(apple80211_offload_ndp_data *) overrid...
    method IOReturn (line 175) | virtual IOReturn setOFFLOAD_SCAN(apple80211_offload_scan_data *) overr...
    method IOReturn (line 176) | virtual IOReturn setGAS_REQ(apple80211_gas_query_t *) override { retur...
    method IOReturn (line 177) | virtual IOReturn setGAS_START(apple80211_gas_query_t *) override { ret...
    method IOReturn (line 178) | virtual IOReturn setGAS_SET_PEER(apple80211_gas_peer_t *) override { r...
    method IOReturn (line 179) | virtual IOReturn setVHT_CAPABILITY(apple80211_vht_capability *) overri...
    method IOReturn (line 180) | virtual IOReturn setROAM_PROFILE(apple80211_roam_profile_band_data *) ...
    method IOReturn (line 181) | virtual IOReturn setAWDL_ENABLE_ROAMING(void *) override { return kIOR...
    method IOReturn (line 182) | virtual IOReturn setDBG_GUARD_TIME_PARAMS(apple80211_dbg_guard_time_pa...
    method IOReturn (line 183) | virtual IOReturn setLEAKY_AP_STATS_MODE(apple80211_leaky_ap_setting *)...
    method IOReturn (line 184) | virtual IOReturn setPRIVATE_MAC(apple80211_private_mac_data *) overrid...
    method IOReturn (line 185) | virtual IOReturn setRESET_CHIP(apple80211_reset_command *) override { ...
    method IOReturn (line 186) | virtual IOReturn setCRASH(apple80211_crash_command *) override { retur...
    method IOReturn (line 187) | virtual IOReturn setRANGING_ENABLE(apple80211_ranging_enable_request_t...
    method IOReturn (line 188) | virtual IOReturn setRANGING_START(apple80211_ranging_start_request_t *...
    method IOReturn (line 189) | virtual IOReturn setRANGING_AUTHENTICATE(apple80211_ranging_authentica...
    method IOReturn (line 190) | virtual IOReturn setTKO_PARAMS(apple80211_tko_params *) override { ret...
    method IOReturn (line 191) | virtual IOReturn setBTCOEX_PROFILE(apple80211_btcoex_profile *) overri...
    method IOReturn (line 192) | virtual IOReturn setBTCOEX_PROFILE_ACTIVE(apple80211_btcoex_profile_ac...
    method IOReturn (line 193) | virtual IOReturn setTHERMAL_INDEX(apple80211_thermal_index_t *) overri...
    method IOReturn (line 194) | virtual IOReturn setBTCOEX_2G_CHAIN_DISABLE(apple80211_btcoex_2g_chain...
    method IOReturn (line 195) | virtual IOReturn setPOWER_BUDGET(apple80211_power_budget_t *) override...
    method IOReturn (line 196) | virtual IOReturn setOFFLOAD_TCPKA_ENABLE(apple80211_offload_tcpka_enab...
    method IOReturn (line 197) | virtual IOReturn setSUPPRESS_SCANS(apple80211_suppress_scans_t *) over...
    method IOReturn (line 198) | virtual IOReturn setHOST_AP_MODE_HIDDEN(apple80211_host_ap_mode_hidden...
    method IOReturn (line 199) | virtual IOReturn setLQM_CONFIG(apple80211_lqm_config_t *) override { r...
    method IOReturn (line 200) | virtual IOReturn setSOFTAP_PARAMS(apple80211_softap_params *) override...
    method IOReturn (line 201) | virtual IOReturn setSOFTAP_TRIGGER_CSA(apple80211_softap_csa_params *)...
    method IOReturn (line 202) | virtual IOReturn setSOFTAP_WIFI_NETWORK_INFO_IE(apple80211_softap_wifi...
    method IOReturn (line 203) | virtual IOReturn setBTCOEX_DISABLE_ULOFDMA(uint *) override { return k...
    method IOReturn (line 204) | virtual IOReturn setSCAN_CONTROL(apple80211_scan_control_params *) ove...
    method IOReturn (line 205) | virtual IOReturn setUSB_HOST_NOTIFICATION(apple80211_usb_host_notifica...
    method IOReturn (line 206) | virtual IOReturn setSET_MAC_ADDRESS(apple80211_set_mac_address *) over...
    method IOReturn (line 207) | virtual IOReturn setHP2P_CTRL(apple80211_hp2p_ctrl *) override { retur...
    method IOReturn (line 208) | virtual IOReturn setABORT_SCAN(apple80211_abort_scan *) override { ret...
    method IOReturn (line 209) | virtual IOReturn setSET_PROPERTY(apple80211_set_property_unserialized_...
    method IOReturn (line 210) | virtual IOReturn setROAM_CACHE_UPDATE(apple80211_roam_cache_data *) ov...
    method IOReturn (line 211) | virtual IOReturn setPM_MODE(apple80211_pm_mode *) override { return kI...
    method IOReturn (line 212) | virtual IOReturn setSET_WIFI_ASSERTION_STATE(apple80211_wifi_assertion...
    method IOReturn (line 213) | virtual IOReturn setREASSOCIATE_WITH_CORECAPTURE(apple80211_capture_de...
    method IOReturn (line 214) | virtual IOReturn setLINKDOWN_DEBOUNCE_STATUS(apple80211_linkdown_debou...
    method IOReturn (line 215) | virtual IOReturn setSOFTAP_EXTENDED_CAPABILITIES_IE(apple80211_softap_...
    method IOReturn (line 216) | virtual IOReturn setREALTIME_QOS_MSCS(apple80211_state_data *) overrid...
    method IOReturn (line 217) | virtual IOReturn setSENSING_ENABLE(apple80211_sensing_enable_t *) over...
    method IOReturn (line 218) | virtual IOReturn setSENSING_DISABLE(apple80211_sensing_disable_t *) ov...
    method IOReturn (line 219) | virtual IOReturn setNANPHS_ASSOCIATION(apple80211_nan_link_association...
    method IOReturn (line 220) | virtual IOReturn setNANPHS_TERMINATED(apple80211_nan_link_association_...
    method IOReturn (line 221) | virtual IOReturn set6G_MODE(apple80211_6G_mode *) override { return kI...
    method IOReturn (line 222) | virtual IOReturn setWCL_LEAVE_NETWORK(apple80211_leave_network *) over...
    method IOReturn (line 223) | virtual IOReturn setWCL_REASSOC(apple80211_reassoc *) override { retur...
    method IOReturn (line 224) | virtual IOReturn setWCL_SET_ROAM_LOCK(apple80211_set_roam_lock *) over...
    method IOReturn (line 225) | virtual IOReturn setWCL_ROAM_PROFILE_CONFIG(apple80211_roam_profile_co...
    method IOReturn (line 226) | virtual IOReturn setWCL_ROAM_PROFILE_CONFIGV1(apple80211_roam_profile_...
    method IOReturn (line 227) | virtual IOReturn setWCL_ROAM_USER_CACHE(apple80211_user_roam_cache *) ...
    method IOReturn (line 228) | virtual IOReturn setWCL_SET_MULTI_AP_ENV(apple80211_set_multi_ap_env *...
    method IOReturn (line 229) | virtual IOReturn setWCL_SCAN_ABORT(void *) override { return kIOReturn...
    method IOReturn (line 230) | virtual IOReturn setWCL_REAL_TIME_MODE(apple80211_wcl_real_time_mode *...
    method IOReturn (line 231) | virtual IOReturn setWCL_GARP_MODE(apple80211_wcl_garp_mode *) override...
    method IOReturn (line 232) | virtual IOReturn setWCL_JOIN_ABORT(void *) override { return kIOReturn...
    method IOReturn (line 233) | virtual IOReturn setWCL_TRIGGER_CC(triggerCC *) override { return kIOR...
    method IOReturn (line 234) | virtual IOReturn setWCL_SCAN_REQ(apple80211ScanRequest *) override { r...
    method IOReturn (line 235) | virtual IOReturn setWCL_ASSOCIATE(apple80211_assoc_candidates *) overr...
    method IOReturn (line 236) | virtual IOReturn setWCL_PROTECT_IP(apple80211_wcl_protect_ip_mode *) o...
    method IOReturn (line 237) | virtual IOReturn setWCL_LINK_UP_DONE(void *) override { return kIORetu...
    method IOReturn (line 238) | virtual IOReturn setWCL_SET_SCAN_HOME_AWAY_TIME(scanHomeAndAwayTime *)...
    method IOReturn (line 239) | virtual IOReturn setWCL_VOLUNTARY_NETWORK_DISCONNECT(apple80211_wcl_vo...
    method IOReturn (line 240) | virtual IOReturn setWCL_LINK_STATE_UPDATE(apple80211_wcl_update_link_s...
    method IOReturn (line 241) | virtual IOReturn setSLOW_WIFI_RECOVERY(void *) override { return kIORe...
    method IOReturn (line 242) | virtual IOReturn setRSN_XE(apple80211_rsn_xe_data *) override { return...
    method IOReturn (line 243) | virtual IOReturn setWCL_ULOFDMA_STATE(apple80211_wcl_ulofdma_state *) ...
    method IOReturn (line 244) | virtual IOReturn setWCL_ACTION_FRAME(apple80211_wcl_action_frame *) ov...
    method IOReturn (line 245) | virtual IOReturn setWCL_REAL_TIME_POLICY(apple80211_wcl_real_time_poli...
    method IOReturn (line 246) | virtual IOReturn setGAS_ABORT(void *) override { return kIOReturnUnsup...
    method IOReturn (line 247) | virtual IOReturn setOS_FEATURE_FLAGS(apple80211_feature_flags *) overr...
    method IOReturn (line 248) | virtual IOReturn setDHCP_RENEWAL_DATA(apple80211_dhcp_renewal_data *) ...
    method IOReturn (line 249) | virtual IOReturn setMOVING_NETWORK(apple80211_network_flags *) overrid...
    method IOReturn (line 250) | virtual IOReturn setBATTERY_POWERSAVE_CONFIG(apple80211_battery_ps_con...
    method IOReturn (line 251) | virtual IOReturn setMIMO_CONFIG(apple80211_mimo_config *) override { r...
    method IOReturn (line 252) | virtual IOReturn setWCL_CONFIG_BG_MOTIONPROFILE(apple80211_bg_motion_p...
    method IOReturn (line 253) | virtual IOReturn setWCL_CONFIG_BG_NETWORK(apple80211_bg_network *) ove...
    method IOReturn (line 254) | virtual IOReturn setWCL_CONFIG_BGSCAN(apple80211_bg_scan *) override {...
    method IOReturn (line 255) | virtual IOReturn setWCL_CONFIG_BG_PARAMS(apple80211_bg_params *) overr...
    method IOReturn (line 256) | virtual IOReturn setBLOCKED_BANDS(apple80211_blocked_bands *) override...
    type ieee80211_node (line 263) | struct ieee80211_node

FILE: AirportItlwm/AirportItlwmV2.cpp
  type ieee80211com (line 64) | struct ieee80211com
  type _ifnet (line 87) | struct _ifnet
  function IOService (line 109) | IOService* AirportItlwm::probe(IOService *provider, SInt32 *score)
  type IOSkywalkEthernetInterface::RegistrationInfo (line 184) | struct IOSkywalkEthernetInterface::RegistrationInfo
  type IOSkywalkNetworkInterface::RegistrationInfo (line 309) | struct IOSkywalkNetworkInterface::RegistrationInfo
  type IOSkywalkNetworkInterface::RegistrationInfo (line 309) | struct IOSkywalkNetworkInterface::RegistrationInfo
  type IOSkywalkEthernetInterface::RegistrationInfo (line 310) | struct IOSkywalkEthernetInterface::RegistrationInfo
  type IOSkywalkEthernetInterface::RegistrationInfo (line 310) | struct IOSkywalkEthernetInterface::RegistrationInfo
  type _ifnet (line 327) | struct _ifnet
  type apple80211_roam_profile_band_data (line 351) | struct apple80211_roam_profile_band_data
  type apple80211_btc_profiles_data (line 355) | struct apple80211_btc_profiles_data
  function IO80211WorkQueue (line 367) | IO80211WorkQueue *AirportItlwm::getWorkQueue()
  function IOReturn (line 377) | IOReturn AirportItlwm::enable(IO80211SkywalkInterface *netif)
  function IOReturn (line 387) | IOReturn AirportItlwm::disable(IO80211SkywalkInterface *netif)
  type _ifnet (line 398) | struct _ifnet
  function IONetworkInterface (line 420) | IONetworkInterface *AirportItlwm::createInterface()
  function IOReturn (line 461) | IOReturn AirportItlwm::selectMedium(const IONetworkMedium *medium) {
  type _ifnet (line 469) | struct _ifnet
  function IOReturn (line 495) | IOReturn AirportItlwm::
  function IOReturn (line 514) | IOReturn AirportItlwm::outputStart(IONetworkInterface *interface, IOOpti...
  function IOReturn (line 528) | IOReturn AirportItlwm::networkInterfaceNotification(
  function UInt32 (line 540) | UInt32 AirportItlwm::outputPacket(mbuf_t m, void *param)
  function OSString (line 583) | const OSString * AirportItlwm::newVendorString() const
  function OSString (line 588) | const OSString * AirportItlwm::newModelString() const
  function IOReturn (line 593) | IOReturn AirportItlwm::getHardwareAddress(IOEthernetAddress *addrP)
  function IOReturn (line 603) | IOReturn AirportItlwm::setHardwareAddress(const void *addrP, UInt32 addr...
  function UInt32 (line 615) | UInt32 AirportItlwm::getFeatures() const
  function IOReturn (line 620) | IOReturn AirportItlwm::setPromiscuousMode(IOEnetPromiscuousMode mode)
  function IOReturn (line 625) | IOReturn AirportItlwm::setMulticastMode(IOEnetMulticastMode mode)
  function IOReturn (line 630) | IOReturn AirportItlwm::setMulticastList(IOEthernetAddress* addr, UInt32 ...
  function IOReturn (line 635) | IOReturn AirportItlwm::getPacketFilters(const OSSymbol *group, UInt32 *f...
  function SInt32 (line 647) | SInt32 AirportItlwm::
  function IOReturn (line 677) | IOReturn AirportItlwm::
  function IOReturn (line 755) | IOReturn AirportItlwm::
  function IOReturn (line 767) | IOReturn AirportItlwm::
  function IOReturn (line 779) | IOReturn AirportItlwm::
  function IOReturn (line 796) | IOReturn AirportItlwm::
  function IOReturn (line 807) | IOReturn AirportItlwm::
  function IOReturn (line 822) | IOReturn AirportItlwm::
  function SInt32 (line 848) | SInt32 AirportItlwm::apple80211_ioctl(IO80211SkywalkInterface *interface...
  function SInt32 (line 855) | SInt32 AirportItlwm::apple80211SkywalkRequest(UInt request,int cmd,IO802...
  function SInt32 (line 862) | SInt32 AirportItlwm::apple80211SkywalkRequest(UInt request,int cmd,IO802...
  function IOReturn (line 869) | IOReturn AirportItlwm::enableAdapter(IONetworkInterface *netif)
  function IOReturn (line 884) | IOReturn AirportItlwm::
  function IOReturn (line 949) | IOReturn AirportItlwm::setPowerState(unsigned long powerStateOrdinal, IO...
  function IOReturn (line 979) | IOReturn AirportItlwm::setWakeOnMagicPacket(bool active)
  function handleSetPowerStateOff (line 985) | static void handleSetPowerStateOff(thread_call_param_t param0,
  function handleSetPowerStateOn (line 1003) | static void handleSetPowerStateOn(thread_call_param_t param0,
  function IOReturn (line 1021) | IOReturn AirportItlwm::registerWithPolicyMaker(IOService *policyMaker)

FILE: AirportItlwm/AirportItlwmV2.hpp
  class AirportItlwm (line 42) | class AirportItlwm : public IO80211Controller {
    type ieee80211com (line 104) | struct ieee80211com
    method requiresExplicitMBufRelease (line 110) | virtual bool requiresExplicitMBufRelease() override {
    method flowIdSupported (line 113) | virtual bool flowIdSupported() override {
    method SInt32 (line 116) | virtual SInt32 monitorModeSetEnabled(bool, UInt) override {
    method IOReturn (line 119) | virtual IOReturn requestQueueSizeAndTimeout(unsigned short *queue, uns...
    method isCommandProhibited (line 137) | virtual bool isCommandProhibited(int command) override {
    method SInt32 (line 142) | virtual SInt32 handleCardSpecific(IO80211SkywalkInterface *,unsigned l...
    method IOReturn (line 146) | virtual IOReturn getDRIVER_VERSION(IO80211SkywalkInterface *interface,...
    method IOReturn (line 150) | virtual IOReturn getHARDWARE_VERSION(IO80211SkywalkInterface *interfac...
    method IOReturn (line 154) | virtual IOReturn getCARD_CAPABILITIES(IO80211SkywalkInterface *interfa...
    method IOReturn (line 158) | virtual IOReturn getPOWER(IO80211SkywalkInterface *interface,apple8021...
    method IOReturn (line 162) | virtual IOReturn setPOWER(IO80211SkywalkInterface *interface,apple8021...
    method IOReturn (line 166) | virtual IOReturn getCOUNTRY_CODE(IO80211SkywalkInterface *interface,ap...
    method IOReturn (line 170) | virtual IOReturn setCOUNTRY_CODE(IO80211SkywalkInterface *interface,ap...
    method IOReturn (line 174) | virtual IOReturn setGET_DEBUG_INFO(IO80211SkywalkInterface *interface,...
    type ieee80211_node (line 212) | struct ieee80211_node
    type apple80211_btc_profiles_data (line 242) | struct apple80211_btc_profiles_data
    type apple80211_btc_config_data (line 243) | struct apple80211_btc_config_data

FILE: AirportItlwm/AirportSTAIOCTL.cpp
  function SInt32 (line 16) | SInt32 AirportItlwm::apple80211Request(unsigned int request_type,
  function IOReturn (line 216) | IOReturn AirportItlwm::
  function IOReturn (line 231) | IOReturn AirportItlwm::
  function IOReturn (line 237) | IOReturn AirportItlwm::
  function IOReturn (line 246) | IOReturn AirportItlwm::
  function IOReturn (line 254) | IOReturn AirportItlwm::
  function ieeeChanFlag2appleScanFlagVentura (line 316) | static int ieeeChanFlag2appleScanFlagVentura(int flags)
  function ieeeChanFlag2apple (line 328) | static int ieeeChanFlag2apple(int flags, int bw)
  function IOReturn (line 381) | IOReturn AirportItlwm::
  function IOReturn (line 397) | IOReturn AirportItlwm::
  function IOReturn (line 404) | IOReturn AirportItlwm::
  function IOReturn (line 418) | IOReturn AirportItlwm::
  function IOReturn (line 424) | IOReturn AirportItlwm::
  function IOReturn (line 439) | IOReturn AirportItlwm::
  function IOReturn (line 448) | IOReturn AirportItlwm::
  function IOReturn (line 457) | IOReturn AirportItlwm::
  function IOReturn (line 463) | IOReturn AirportItlwm::
  function IOReturn (line 470) | IOReturn AirportItlwm::
  function IOReturn (line 523) | IOReturn AirportItlwm::
  function IOReturn (line 534) | IOReturn AirportItlwm::
  function IOReturn (line 551) | IOReturn AirportItlwm::
  function IOReturn (line 560) | IOReturn AirportItlwm::
  function IOReturn (line 570) | IOReturn AirportItlwm::
  function IOReturn (line 580) | IOReturn AirportItlwm::
  function IOReturn (line 590) | IOReturn AirportItlwm::
  function IOReturn (line 600) | IOReturn AirportItlwm::
  function IOReturn (line 610) | IOReturn AirportItlwm::
  function IOReturn (line 619) | IOReturn AirportItlwm::
  function IOReturn (line 632) | IOReturn AirportItlwm::
  function IOReturn (line 638) | IOReturn AirportItlwm::
  function IOReturn (line 645) | IOReturn AirportItlwm::
  function IOReturn (line 659) | IOReturn AirportItlwm::
  function IOReturn (line 666) | IOReturn AirportItlwm::
  function IOReturn (line 718) | IOReturn AirportItlwm::
  function IOReturn (line 728) | IOReturn AirportItlwm::
  function IOReturn (line 743) | IOReturn AirportItlwm::
  function IOReturn (line 756) | IOReturn AirportItlwm::
  function IOReturn (line 787) | IOReturn AirportItlwm::
  function IOReturn (line 794) | IOReturn AirportItlwm::
  function IOReturn (line 814) | IOReturn AirportItlwm::
  function IOReturn (line 863) | IOReturn AirportItlwm::
  function IOReturn (line 872) | IOReturn AirportItlwm::
  function IOReturn (line 890) | IOReturn AirportItlwm::
  function IOReturn (line 913) | IOReturn AirportItlwm::
  function IOReturn (line 930) | IOReturn AirportItlwm::
  function IOReturn (line 948) | IOReturn AirportItlwm::
  function IOReturn (line 965) | IOReturn AirportItlwm::
  function IOReturn (line 975) | IOReturn AirportItlwm::
  function IOReturn (line 990) | IOReturn AirportItlwm::
  function IOReturn (line 998) | IOReturn AirportItlwm::
  function IOReturn (line 1024) | IOReturn AirportItlwm::
  function IOReturn (line 1066) | IOReturn AirportItlwm::
  function IOReturn (line 1080) | IOReturn AirportItlwm::setDISASSOCIATE(OSObject *object)
  function IOReturn (line 1107) | IOReturn AirportItlwm::
  function IOReturn (line 1130) | IOReturn AirportItlwm::
  function IOReturn (line 1142) | IOReturn AirportItlwm::
  function IOReturn (line 1155) | IOReturn AirportItlwm::
  function IOReturn (line 1172) | IOReturn AirportItlwm::
  function IOReturn (line 1184) | IOReturn AirportItlwm::
  type ieee80211com (line 1193) | struct ieee80211com
  function IOReturn (line 1218) | IOReturn AirportItlwm::
  function IOReturn (line 1231) | IOReturn AirportItlwm::
  function IOReturn (line 1243) | IOReturn AirportItlwm::
  function IOReturn (line 1255) | IOReturn AirportItlwm::
  function IOReturn (line 1267) | IOReturn AirportItlwm::
  function IOReturn (line 1284) | IOReturn AirportItlwm::
  function IOReturn (line 1295) | IOReturn AirportItlwm::
  function IOReturn (line 1306) | IOReturn AirportItlwm::
  function IOReturn (line 1316) | IOReturn AirportItlwm::
  function IOReturn (line 1326) | IOReturn AirportItlwm::
  function IOReturn (line 1362) | IOReturn AirportItlwm::
  function IOReturn (line 1393) | IOReturn AirportItlwm::
  function IOReturn (line 1453) | IOReturn AirportItlwm::
  function IOReturn (line 1501) | IOReturn AirportItlwm::
  function IOReturn (line 1514) | IOReturn AirportItlwm::

FILE: AirportItlwm/AirportVirtualIOCTL.cpp
  function SInt32 (line 12) | SInt32 AirportItlwm::
  function IOReturn (line 151) | IOReturn AirportItlwm::
  function IOReturn (line 172) | IOReturn AirportItlwm::
  function IOReturn (line 181) | IOReturn AirportItlwm::
  function IOReturn (line 188) | IOReturn AirportItlwm::
  function IOReturn (line 195) | IOReturn AirportItlwm::
  function IOReturn (line 205) | IOReturn AirportItlwm::
  function IOReturn (line 213) | IOReturn AirportItlwm::
  function IOReturn (line 225) | IOReturn AirportItlwm::
  function IOReturn (line 243) | IOReturn AirportItlwm::
  function IOReturn (line 253) | IOReturn AirportItlwm::
  function IOReturn (line 263) | IOReturn AirportItlwm::
  function IOReturn (line 272) | IOReturn AirportItlwm::
  function IOReturn (line 280) | IOReturn AirportItlwm::
  function IOReturn (line 302) | IOReturn AirportItlwm::
  function IOReturn (line 311) | IOReturn AirportItlwm::
  function IOReturn (line 319) | IOReturn AirportItlwm::
  function IOReturn (line 328) | IOReturn AirportItlwm::
  function IOReturn (line 336) | IOReturn AirportItlwm::
  function IOReturn (line 344) | IOReturn AirportItlwm::
  function IOReturn (line 352) | IOReturn AirportItlwm::
  function IOReturn (line 361) | IOReturn AirportItlwm::
  function IOReturn (line 369) | IOReturn AirportItlwm::
  function IOReturn (line 377) | IOReturn AirportItlwm::
  function IOReturn (line 386) | IOReturn AirportItlwm::
  function IOReturn (line 393) | IOReturn AirportItlwm::
  function IOReturn (line 401) | IOReturn AirportItlwm::
  function dumpAWDLChannelSeqs (line 411) | static void dumpAWDLChannelSeqs(struct apple80211_awdl_sync_channel_sequ...
  function IOReturn (line 426) | IOReturn AirportItlwm::
  function IOReturn (line 436) | IOReturn AirportItlwm::
  function IOReturn (line 445) | IOReturn AirportItlwm::
  function IOReturn (line 453) | IOReturn AirportItlwm::
  function IOReturn (line 462) | IOReturn AirportItlwm::
  function IOReturn (line 470) | IOReturn AirportItlwm::
  function IOReturn (line 479) | IOReturn AirportItlwm::
  function IOReturn (line 487) | IOReturn AirportItlwm::
  function IOReturn (line 496) | IOReturn AirportItlwm::
  function IOReturn (line 503) | IOReturn AirportItlwm::
  function IOReturn (line 512) | IOReturn AirportItlwm::
  function IOReturn (line 521) | IOReturn AirportItlwm::
  function IOReturn (line 529) | IOReturn AirportItlwm::

FILE: AirportItlwm/IOPCIEDeviceWrapper.cpp
  function pciMsiSetEnable (line 32) | static void pciMsiSetEnable(IOPCIDevice *device, UInt8 msiCap, int enable)
  function pciMsiXClearAndSet (line 43) | static void pciMsiXClearAndSet(IOPCIDevice *device, UInt8 msixCap, UInt1...
  function IOWorkLoop (line 55) | IOWorkLoop *IOPCIEDeviceWrapper::getWorkLoop() const
  function IOService (line 60) | IOService* IOPCIEDeviceWrapper::
  function IOReturn (line 129) | IOReturn IOPCIEDeviceWrapper::

FILE: AirportItlwm/IOPCIEDeviceWrapper.hpp
  class IOPCIEDeviceWrapper (line 19) | class IOPCIEDeviceWrapper : public IOService {

FILE: include/Airport/CCDataPipe.h
  function class (line 17) | class CCDataPipe : public CCPipe {

FILE: include/Airport/CCLogPipe.h
  type CCLogPolicy (line 16) | typedef int CCLogPolicy;
  type CCLogState (line 17) | typedef int CCLogState;
  function class (line 20) | class CCLogPipe : public CCPipe {

FILE: include/Airport/CCLogStream.h
  type CCStreamLogLevel (line 15) | enum CCStreamLogLevel
  function class (line 20) | class CCLogStream : public CCStream {

FILE: include/Airport/CCPipe.h
  type CCPipeOptions (line 16) | struct CCPipeOptions {
  function class (line 45) | class CCPipe : public IOService {

FILE: include/Airport/CCStream.h
  type CCStreamOptions (line 15) | struct CCStreamOptions {
  function class (line 21) | class CCStream : public IOService {

FILE: include/Airport/IO80211Controller.h
  type IO80211CountryCodeOp (line 49) | enum IO80211CountryCodeOp
  type IO80211CountryCodeOp (line 54) | typedef enum IO80211CountryCodeOp IO80211CountryCodeOp;
  type IO80211SystemPowerState (line 56) | enum IO80211SystemPowerState
  type IO80211SystemPowerState (line 62) | typedef enum IO80211SystemPowerState IO80211SystemPowerState;
  type IO80211FeatureCode (line 64) | enum IO80211FeatureCode
  type IO80211FeatureCode (line 68) | typedef enum IO80211FeatureCode IO80211FeatureCode;
  type CCStreamLogLevel (line 73) | enum CCStreamLogLevel
  type scanSource (line 78) | enum scanSource
  type joinStatus (line 83) | enum joinStatus
  type apple80211_hostap_state (line 109) | struct apple80211_hostap_state
  type apple80211_awdl_sync_channel_sequence (line 111) | struct apple80211_awdl_sync_channel_sequence
  type ieee80211_ht_capability_ie (line 112) | struct ieee80211_ht_capability_ie
  type apple80211_channel_switch_announcement (line 113) | struct apple80211_channel_switch_announcement
  type apple80211_beacon_period_data (line 114) | struct apple80211_beacon_period_data
  type apple80211_power_debug_sub_info (line 115) | struct apple80211_power_debug_sub_info
  type apple80211_stat_report (line 116) | struct apple80211_stat_report
  type apple80211_frame_counters (line 117) | struct apple80211_frame_counters
  type apple80211_leaky_ap_event (line 118) | struct apple80211_leaky_ap_event
  type apple80211_chip_stats (line 119) | struct apple80211_chip_stats
  type apple80211_extended_stats (line 120) | struct apple80211_extended_stats
  type apple80211_ampdu_stat_report (line 121) | struct apple80211_ampdu_stat_report
  type apple80211_btCoex_report (line 122) | struct apple80211_btCoex_report
  type apple80211_cca_report (line 123) | struct apple80211_cca_report
  type apple80211_lteCoex_report (line 125) | struct apple80211_lteCoex_report
  type IOReturn (line 130) | typedef IOReturn (*IOCTL_FUNC)(IO80211Controller*, IO80211Interface*, IO...
  function class (line 134) | class IO80211Controller : public IOEthernetController {

FILE: include/Airport/IO80211ControllerV2.h
  type IO80211CountryCodeOp (line 58) | enum IO80211CountryCodeOp
  type IO80211CountryCodeOp (line 63) | typedef enum IO80211CountryCodeOp IO80211CountryCodeOp;
  type IO80211SystemPowerState (line 65) | enum IO80211SystemPowerState
  type IO80211SystemPowerState (line 71) | typedef enum IO80211SystemPowerState IO80211SystemPowerState;
  type IO80211FeatureCode (line 73) | enum IO80211FeatureCode
  type IO80211FeatureCode (line 77) | typedef enum IO80211FeatureCode IO80211FeatureCode;
  type scanSource (line 83) | enum scanSource
  type joinStatus (line 88) | enum joinStatus
  type apple80211_hostap_state (line 111) | struct apple80211_hostap_state
  type apple80211_awdl_sync_channel_sequence (line 113) | struct apple80211_awdl_sync_channel_sequence
  type ieee80211_ht_capability_ie (line 114) | struct ieee80211_ht_capability_ie
  type apple80211_channel_switch_announcement (line 115) | struct apple80211_channel_switch_announcement
  type apple80211_beacon_period_data (line 116) | struct apple80211_beacon_period_data
  type apple80211_power_debug_sub_info (line 117) | struct apple80211_power_debug_sub_info
  type apple80211_stat_report (line 118) | struct apple80211_stat_report
  type apple80211_frame_counters (line 119) | struct apple80211_frame_counters
  type apple80211_leaky_ap_event (line 120) | struct apple80211_leaky_ap_event
  type apple80211_chip_stats (line 121) | struct apple80211_chip_stats
  type apple80211_extended_stats (line 122) | struct apple80211_extended_stats
  type apple80211_ampdu_stat_report (line 123) | struct apple80211_ampdu_stat_report
  type apple80211_btCoex_report (line 124) | struct apple80211_btCoex_report
  type apple80211_cca_report (line 125) | struct apple80211_cca_report
  type apple80211_lteCoex_report (line 127) | struct apple80211_lteCoex_report
  type IOReturn (line 132) | typedef IOReturn (*IOCTL_FUNC)(IO80211Controller*, IO80211Interface*, IO...
  function class (line 138) | class IO80211Controller : public IOEthernetController {

FILE: include/Airport/IO80211InfraInterface.h
  type apple80211_wcl_advisory_info (line 12) | struct apple80211_wcl_advisory_info
  type apple80211_wcl_tx_rx_latency (line 13) | struct apple80211_wcl_tx_rx_latency
  function class (line 15) | class IO80211InfraInterface : public IO80211SkywalkInterface {

FILE: include/Airport/IO80211InfraProtocol.h
  type apple80211_sta_ie_data (line 16) | struct apple80211_sta_ie_data
  type apple80211_sta_stats_data (line 17) | struct apple80211_sta_stats_data
  type apple80211_rssi_bounds_data (line 18) | struct apple80211_rssi_bounds_data
  type apple80211_rate_set_data (line 19) | struct apple80211_rate_set_data
  type apple80211_power_debug_info (line 20) | struct apple80211_power_debug_info
  type apple80211_bgscan_cached_network_data_list (line 21) | struct apple80211_bgscan_cached_network_data_list
  type apple80211_private_mac_data (line 22) | struct apple80211_private_mac_data
  type apple80211_dbg_guard_time_params (line 23) | struct apple80211_dbg_guard_time_params
  type apple80211_ranging_enable_request_t (line 24) | struct apple80211_ranging_enable_request_t
  type apple80211_gas_result_t (line 25) | struct apple80211_gas_result_t
  type apple80211_ranging_start_request_t (line 26) | struct apple80211_ranging_start_request_t
  type apple80211_leaky_ap_setting (line 27) | struct apple80211_leaky_ap_setting
  type apple80211_rsdb_capability (line 28) | struct apple80211_rsdb_capability
  type apple80211_tko_params (line 29) | struct apple80211_tko_params
  type apple80211_tko_dump (line 30) | struct apple80211_tko_dump
  type apple80211_thermal_index_t (line 31) | struct apple80211_thermal_index_t
  type apple80211_btcoex_max_nss_for_ap_data (line 32) | struct apple80211_btcoex_max_nss_for_ap_data
  type apple80211_btcoex_2g_chain_disable (line 33) | struct apple80211_btcoex_2g_chain_disable
  type apple80211_power_budget_t (line 34) | struct apple80211_power_budget_t
  type apple80211_ranging_capabilities_t (line 35) | struct apple80211_ranging_capabilities_t
  type apple80211_suppress_scans_t (line 36) | struct apple80211_suppress_scans_t
  type apple80211_host_ap_mode_hidden_t (line 37) | struct apple80211_host_ap_mode_hidden_t
  type apple80211_lqm_config_t (line 38) | struct apple80211_lqm_config_t
  type apple80211_trap_mini_dump_data (line 39) | struct apple80211_trap_mini_dump_data
  type apple80211_beacon_info_t (line 40) | struct apple80211_beacon_info_t
  type apple80211_softap_params (line 41) | struct apple80211_softap_params
  type apple80211_chip_power_limit (line 42) | struct apple80211_chip_power_limit
  type apple80211_softap_stats (line 43) | struct apple80211_softap_stats
  type apple80211_nss_data (line 44) | struct apple80211_nss_data
  type apple80211_hw_mac_address (line 45) | struct apple80211_hw_mac_address
  type apple80211_he_mcs_index_set_data (line 46) | struct apple80211_he_mcs_index_set_data
  type appl80211_chip_diags_data (line 47) | struct appl80211_chip_diags_data
  type apple80211_hp2p_ctrl (line 48) | struct apple80211_hp2p_ctrl
  type apple80211_assoc_ready (line 49) | struct apple80211_assoc_ready
  type apple80211_txrx_chain_info (line 50) | struct apple80211_txrx_chain_info
  type apple80211_mimo_status (line 51) | struct apple80211_mimo_status
  type apple80211_dynsar_detail (line 52) | struct apple80211_dynsar_detail
  type apple80211_mac_randomisation_status (line 53) | struct apple80211_mac_randomisation_status
  type apple80211_colocated_network_scope_id (line 54) | struct apple80211_colocated_network_scope_id
  type apple80211_slow_wifi_feature_enabled (line 60) | struct apple80211_slow_wifi_feature_enabled
  type apple80211_interface_cca_data (line 61) | struct apple80211_interface_cca_data
  type apple80211_timesync_info (line 62) | struct apple80211_timesync_info
  type apple80211_sensing_data_t (line 63) | struct apple80211_sensing_data_t
  type apple80211_country_band_support (line 64) | struct apple80211_country_band_support
  type apple80211_fw_hot_channels (line 65) | struct apple80211_fw_hot_channels
  type apple80211_low_latency_info (line 66) | struct apple80211_low_latency_info
  type apple80211_beacon_msg (line 67) | struct apple80211_beacon_msg
  type apple80211_wcl_traffic_counters (line 68) | struct apple80211_wcl_traffic_counters
  type apple80211_ssid_transition_feature_enabled (line 69) | struct apple80211_ssid_transition_feature_enabled
  type p2pStatusForScan (line 70) | typedef enum {
  type apple80211ChannelInfo (line 73) | struct apple80211ChannelInfo
  type apple80211_p2p_steering_metrics (line 74) | struct apple80211_p2p_steering_metrics
  type apple80211_rsn_xe_data (line 75) | struct apple80211_rsn_xe_data
  type apple80211_sib_coex_status (line 76) | struct apple80211_sib_coex_status
  type apple80211_extended_bss_info (line 77) | struct apple80211_extended_bss_info
  type apple80211_wcl_low_latency_stats (line 78) | struct apple80211_wcl_low_latency_stats
  type apple80211_noise_per_ant_t (line 79) | struct apple80211_noise_per_ant_t
  type apple80211_blocked_bands (line 80) | struct apple80211_blocked_bands
  type apple80211_disassoc_data (line 81) | struct apple80211_disassoc_data
  type apple80211_bgscan_data (line 82) | struct apple80211_bgscan_data
  type apple80211_sta_authorize_data (line 83) | struct apple80211_sta_authorize_data
  type apple80211_sta_disassoc_data (line 84) | struct apple80211_sta_disassoc_data
  type apple80211_rsn_conf_data (line 85) | struct apple80211_rsn_conf_data
  type apple80211_country_channel_data (line 86) | struct apple80211_country_channel_data
  type apple80211_awdl_forced_roam_config (line 87) | struct apple80211_awdl_forced_roam_config
  type apple80211_offload_arp_data (line 88) | struct apple80211_offload_arp_data
  type apple80211_offload_ndp_data (line 89) | struct apple80211_offload_ndp_data
  type apple80211_offload_scan_data (line 90) | struct apple80211_offload_scan_data
  type apple80211_gas_query_t (line 91) | struct apple80211_gas_query_t
  type apple80211_gas_peer_t (line 92) | struct apple80211_gas_peer_t
  type apple80211_btcoex_profile (line 93) | struct apple80211_btcoex_profile
  type apple80211_btcoex_profile_active_data (line 94) | struct apple80211_btcoex_profile_active_data
  type apple80211_trap_info_data (line 95) | struct apple80211_trap_info_data
  type apple80211_he_capability (line 96) | struct apple80211_he_capability
  type apple80211_pmk (line 97) | struct apple80211_pmk
  type apple80211_wow_test_data (line 98) | struct apple80211_wow_test_data
  type apple80211_reset_command (line 99) | struct apple80211_reset_command
  type apple80211_crash_command (line 100) | struct apple80211_crash_command
  type apple80211_ranging_authenticate_request_t (line 101) | struct apple80211_ranging_authenticate_request_t
  type apple80211_softap_csa_params (line 102) | struct apple80211_softap_csa_params
  type apple80211_softap_wifi_network_info (line 103) | struct apple80211_softap_wifi_network_info
  type apple80211_scan_control_params (line 104) | struct apple80211_scan_control_params
  type apple80211_usb_host_notification_data (line 105) | struct apple80211_usb_host_notification_data
  type apple80211_set_mac_address (line 106) | struct apple80211_set_mac_address
  type apple80211_abort_scan (line 107) | struct apple80211_abort_scan
  type apple80211_set_property_unserialized_data (line 108) | struct apple80211_set_property_unserialized_data
  type apple80211_roam_cache_data (line 109) | struct apple80211_roam_cache_data
  type apple80211_pm_mode (line 110) | struct apple80211_pm_mode
  type apple80211_wifi_assertion_data (line 111) | struct apple80211_wifi_assertion_data
  type apple80211_capture_debug_info_t (line 112) | struct apple80211_capture_debug_info_t
  type apple80211_linkdown_debounce_status (line 113) | struct apple80211_linkdown_debounce_status
  type apple80211_softap_extended_capabilities_info (line 114) | struct apple80211_softap_extended_capabilities_info
  type apple80211_sensing_enable_t (line 115) | struct apple80211_sensing_enable_t
  type apple80211_sensing_disable_t (line 116) | struct apple80211_sensing_disable_t
  type apple80211_nan_link_association_info (line 117) | struct apple80211_nan_link_association_info
  type apple80211_6G_mode (line 118) | struct apple80211_6G_mode
  type apple80211_leave_network (line 119) | struct apple80211_leave_network
  type apple80211_reassoc (line 120) | struct apple80211_reassoc
  type apple80211_set_roam_lock (line 121) | struct apple80211_set_roam_lock
  type apple80211_roam_profile_config (line 122) | struct apple80211_roam_profile_config
  type apple80211_roam_profile_configV1 (line 123) | struct apple80211_roam_profile_configV1
  type apple80211_user_roam_cache (line 124) | struct apple80211_user_roam_cache
  type apple80211_set_multi_ap_env (line 125) | struct apple80211_set_multi_ap_env
  type apple80211_wcl_real_time_mode (line 126) | struct apple80211_wcl_real_time_mode
  type apple80211_wcl_garp_mode (line 127) | struct apple80211_wcl_garp_mode
  type triggerCC (line 128) | struct triggerCC
  type apple80211ScanRequest (line 129) | struct apple80211ScanRequest
  type apple80211_assoc_candidates (line 130) | struct apple80211_assoc_candidates
  type apple80211_wcl_protect_ip_mode (line 131) | struct apple80211_wcl_protect_ip_mode
  type scanHomeAndAwayTime (line 132) | struct scanHomeAndAwayTime
  type apple80211_wcl_voluntary_network_disconnect (line 133) | struct apple80211_wcl_voluntary_network_disconnect
  type apple80211_wcl_update_link_state (line 134) | struct apple80211_wcl_update_link_state
  type apple80211_wcl_ulofdma_state (line 135) | struct apple80211_wcl_ulofdma_state
  type apple80211_wcl_action_frame (line 136) | struct apple80211_wcl_action_frame
  type apple80211_wcl_real_time_policy (line 137) | struct apple80211_wcl_real_time_policy
  type apple80211_feature_flags (line 138) | struct apple80211_feature_flags
  type apple80211_dhcp_renewal_data (line 139) | struct apple80211_dhcp_renewal_data
  type apple80211_network_flags (line 140) | struct apple80211_network_flags
  type apple80211_battery_ps_config (line 141) | struct apple80211_battery_ps_config
  type apple80211_mimo_config (line 142) | struct apple80211_mimo_config
  type apple80211_bg_motion_profile (line 143) | struct apple80211_bg_motion_profile
  type apple80211_bg_network (line 144) | struct apple80211_bg_network
  type apple80211_bg_scan (line 145) | struct apple80211_bg_scan
  type apple80211_bg_params (line 146) | struct apple80211_bg_params
  type UInt (line 147) | typedef UInt apple80211_offload_tcpka_enable_t;
  function class (line 149) | class IO80211InfraProtocol : public IO80211InfraInterface {

FILE: include/Airport/IO80211Interface.h
  type UInt (line 25) | typedef UInt kIO80211InterfaceType;
  type UInt64 (line 32) | typedef UInt64 IO80211FlowQueueHash;
  type apple80211_debug_command (line 44) | struct apple80211_debug_command
  type apple80211_txstats (line 45) | struct apple80211_txstats
  type apple80211_chip_counters_tx (line 46) | struct apple80211_chip_counters_tx
  type apple80211_chip_error_counters_tx (line 47) | struct apple80211_chip_error_counters_tx
  type apple80211_chip_counters_rx (line 48) | struct apple80211_chip_counters_rx
  type apple80211_ManagementInformationBasedot11_counters (line 49) | struct apple80211_ManagementInformationBasedot11_counters
  type apple80211_leaky_ap_stats (line 50) | struct apple80211_leaky_ap_stats
  type apple80211_leaky_ap_ssid_metrics (line 51) | struct apple80211_leaky_ap_ssid_metrics
  type apple80211_interface_availability (line 52) | struct apple80211_interface_availability
  type apple80211_pmk_cache_data (line 53) | struct apple80211_pmk_cache_data
  type apple80211_ap_cmp_data (line 54) | struct apple80211_ap_cmp_data
  type TxPacketRequest (line 56) | struct TxPacketRequest {
  type TxPacketRequest (line 70) | struct TxPacketRequest
  type AWSRequest (line 72) | struct AWSRequest
  type packet_info_tx (line 73) | struct packet_info_tx
  type userPrintCtx (line 74) | struct userPrintCtx
  type apple80211_postMessage_tlv_types (line 76) | typedef int apple80211_postMessage_tlv_types;
  function class (line 78) | class IO80211Interface : public IOEthernetInterface

FILE: include/Airport/IO80211P2PInterface.h
  function class (line 6) | class IO80211P2PInterface : public IO80211VirtualInterface {

FILE: include/Airport/IO80211SkywalkInterface.h
  type UInt64 (line 24) | typedef UInt64 IO80211FlowQueueHash;
  type apple80211_wme_ac (line 28) | struct apple80211_wme_ac
  type apple80211_interface_availability (line 29) | struct apple80211_interface_availability
  type apple80211_cca_report (line 30) | struct apple80211_cca_report
  type apple80211_stat_report (line 31) | struct apple80211_stat_report
  type apple80211_chip_counters_tx (line 32) | struct apple80211_chip_counters_tx
  type apple80211_chip_counters_rx (line 33) | struct apple80211_chip_counters_rx
  type apple80211_chip_error_counters_tx (line 34) | struct apple80211_chip_error_counters_tx
  type apple80211_ManagementInformationBasedot11_counters (line 35) | struct apple80211_ManagementInformationBasedot11_counters
  type apple80211_lteCoex_report (line 36) | struct apple80211_lteCoex_report
  type apple80211_frame_counters (line 37) | struct apple80211_frame_counters
  type userPrintCtx (line 38) | struct userPrintCtx
  type apple80211_lqm_summary (line 39) | struct apple80211_lqm_summary
  type apple80211_infra_specific_stats (line 40) | struct apple80211_infra_specific_stats
  type TxPacketRequest (line 42) | struct TxPacketRequest {
  type TxPacketRequest (line 56) | struct TxPacketRequest
  function class (line 58) | class IO80211SkywalkInterface : public IOSkywalkEthernetInterface {

FILE: include/Airport/IO80211VirtualInterface.h
  type UInt64 (line 7) | typedef UInt64 IO80211FlowQueueHash;
  type UInt (line 8) | typedef UInt kIO80211InterfaceType;
  type TxPacketRequest (line 12) | struct TxPacketRequest
  type ifmediareq (line 13) | struct ifmediareq
  type realTimeServiceId (line 14) | struct realTimeServiceId
  type apple80211_awdl_app_specific_info (line 15) | struct apple80211_awdl_app_specific_info
  type apple80211_awdl_statistics (line 16) | struct apple80211_awdl_statistics
  type apple80211_lowlatency_peer_statistics_evevt (line 17) | struct apple80211_lowlatency_peer_statistics_evevt
  type apple80211_p2p_airplay_statistics (line 18) | struct apple80211_p2p_airplay_statistics
  type apple80211_awdl_sidecar_statistics (line 19) | struct apple80211_awdl_sidecar_statistics
  function class (line 21) | class IO80211VirtualInterface : public IOService {

FILE: include/Airport/IO80211WorkLoop.h
  function class (line 21) | class IO80211WorkLoop : public IOWorkLoop

FILE: include/Airport/IO80211WorkQueue.h
  function class (line 13) | class IO80211WorkQueue : public IOWorkLoop

FILE: include/Airport/IOSkywalkEthernetInterface.h
  type nicproxy_limits_info_s (line 6) | struct nicproxy_limits_info_s
  type nicproxy_info_s (line 7) | struct nicproxy_info_s
  function RegistrationInfo (line 10) | OSDeclareAbstractStructors( IOSkywalkEthernetInterface )
  type ExpansionData (line 67) | struct ExpansionData

FILE: include/Airport/IOSkywalkLegacyEthernetInterface.h
  function class (line 15) | class IOSkywalkLegacyEthernetInterface : public IOEthernetInterface {

FILE: include/Airport/IOSkywalkNetworkInterface.h
  type UInt (line 16) | typedef UInt if_link_status;
  function class (line 21) | class IOSkywalkNetworkInterface : public IOSkywalkInterface {

FILE: include/Airport/IOSkywalkNetworkPacket.h
  function class (line 17) | class IOSkywalkNetworkPacket : public IOService {

FILE: include/Airport/IOSkywalkPacketBufferPool.h
  function class (line 21) | class IOSkywalkPacketBufferPool : public OSObject {

FILE: include/Airport/apple80211_ioctl.h
  type apple80211req (line 39) | struct apple80211req
  type apple80211_ssid_data (line 378) | struct apple80211_ssid_data
  type apple80211_virt_if_create_data (line 385) | struct apple80211_virt_if_create_data {
  type apple80211_virt_if_delete_data (line 393) | struct apple80211_virt_if_delete_data {
  type apple80211_ht_capability (line 398) | struct apple80211_ht_capability {
  type apple80211_vht_capability (line 410) | struct apple80211_vht_capability {
  type apple80211_channel_data (line 421) | struct apple80211_channel_data
  type apple80211_bssid_data (line 427) | struct apple80211_bssid_data
  type apple80211_capability_data (line 434) | struct apple80211_capability_data
  type apple80211_capability_data (line 440) | struct apple80211_capability_data
  type apple80211_state_data (line 447) | struct apple80211_state_data
  type apple80211_rssi_data (line 453) | struct apple80211_rssi_data
  type apple80211_power_data (line 464) | struct apple80211_power_data
  type apple80211_assoc_result_data (line 471) | struct apple80211_assoc_result_data
  type apple80211_assoc_status_data (line 477) | struct apple80211_assoc_status_data
  type apple80211_rate_data (line 483) | struct apple80211_rate_data
  type apple80211_status_dev_data (line 490) | struct apple80211_status_dev_data
  type apple80211_powersave_data (line 496) | struct apple80211_powersave_data
  type apple80211_protmode_data (line 502) | struct apple80211_protmode_data
  type apple80211_txpower_data (line 509) | struct apple80211_txpower_data
  type apple80211_phymode_data (line 516) | struct apple80211_phymode_data
  type apple80211_opmode_data (line 523) | struct apple80211_opmode_data
  type apple80211_noise_data (line 529) | struct apple80211_noise_data
  type apple80211_intmit_data (line 540) | struct apple80211_intmit_data
  type apple80211_authtype_data (line 546) | struct apple80211_authtype_data
  type apple80211_sup_channel_data (line 553) | struct apple80211_sup_channel_data
  type apple80211_roam_threshold_data (line 561) | struct apple80211_roam_threshold_data
  type apple80211_locale_data (line 567) | struct apple80211_locale_data
  type apple80211_scan_data (line 573) | struct apple80211_scan_data
  type apple80211_scan_multiple_data (line 588) | struct apple80211_scan_multiple_data
  type apple80211_scan_multiple_data (line 605) | struct apple80211_scan_multiple_data
  type apple80211_link_changed_event_data (line 607) | struct apple80211_link_changed_event_data
  type apple80211_apmode_data (line 618) | struct apple80211_apmode_data
  type apple80211_assoc_data (line 624) | struct apple80211_assoc_data
  type apple80211_deauth_data (line 644) | struct apple80211_deauth_data
  type apple80211_countermeasures_data (line 651) | struct apple80211_countermeasures_data
  type apple80211_frag_threshold_data (line 657) | struct apple80211_frag_threshold_data
  type apple80211_rate_set_data (line 663) | struct apple80211_rate_set_data
  type apple80211_short_slot_data (line 670) | struct apple80211_short_slot_data
  type apple80211_retry_limit_data (line 676) | struct apple80211_retry_limit_data
  type apple80211_antenna_data (line 682) | struct apple80211_antenna_data
  type apple80211_dtim_int_data (line 689) | struct apple80211_dtim_int_data
  type apple80211_sta_data (line 695) | struct apple80211_sta_data
  type apple80211_version_data (line 702) | struct apple80211_version_data
  type apple80211_rom_data (line 709) | struct apple80211_rom_data
  type apple80211_rand_data (line 716) | struct apple80211_rand_data
  type apple80211_rsn_ie_data (line 722) | struct apple80211_rsn_ie_data
  type apple80211_ap_ie_data (line 729) | struct apple80211_ap_ie_data
  type apple80211_stats_data (line 740) | struct apple80211_stats_data
  type apple80211_country_code_data (line 749) | struct apple80211_country_code_data
  type apple80211_last_rx_pkt_data (line 755) | struct apple80211_last_rx_pkt_data
  type apple80211_radio_info_data (line 764) | struct apple80211_radio_info_data
  type apple80211_guard_interval_data (line 770) | struct apple80211_guard_interval_data
  type apple80211_mcs_data (line 776) | struct apple80211_mcs_data
  type apple80211_rifs_data (line 782) | struct apple80211_rifs_data
  type apple80211_ldpc_data (line 788) | struct apple80211_ldpc_data
  type apple80211_msdu_data (line 794) | struct apple80211_msdu_data
  type apple80211_mpdu_data (line 800) | struct apple80211_mpdu_data
  type apple80211_block_ack_data (line 807) | struct apple80211_block_ack_data
  type apple80211_pls_data (line 816) | struct apple80211_pls_data
  type apple80211_psmp_data (line 822) | struct apple80211_psmp_data
  type apple80211_physubmode_data (line 828) | struct apple80211_physubmode_data
  type apple80211_mcs_index_set_data (line 836) | struct apple80211_mcs_index_set_data
  type apple80211_vht_mcs_index_set_data (line 842) | struct apple80211_vht_mcs_index_set_data
  type apple80211_mcs_vht_data (line 848) | struct apple80211_mcs_vht_data
  type apple80211_wow_parameter_data (line 857) | struct apple80211_wow_parameter_data
  type apple80211_40mhz_intolerant_data (line 866) | struct apple80211_40mhz_intolerant_data
  type apple80211_tx_nss_data (line 872) | struct apple80211_tx_nss_data
  type apple80211_nss_data (line 878) | struct apple80211_nss_data
  type apple80211_awdl_peer_traffic_registration (line 884) | struct apple80211_awdl_peer_traffic_registration
  type apple80211_awdl_election_metric (line 893) | struct apple80211_awdl_election_metric
  type apple80211_awdl_sync_enabled (line 899) | struct apple80211_awdl_sync_enabled
  type apple80211_awdl_sync_frame_template (line 906) | struct apple80211_awdl_sync_frame_template
  type apple80211_awdl_bssid (line 913) | struct apple80211_awdl_bssid {
  type apple80211_awdl_channel (line 919) | struct apple80211_awdl_channel {
  type apple80211_channels_info (line 932) | struct apple80211_channels_info {
  type apple80211_channels_info (line 949) | struct apple80211_channels_info
  type apple80211_channels_info (line 950) | struct apple80211_channels_info
  type apple80211_channels_info (line 951) | struct apple80211_channels_info
  type apple80211_channels_info (line 952) | struct apple80211_channels_info
  type apple80211_channels_info (line 953) | struct apple80211_channels_info
  type apple80211_channels_info (line 954) | struct apple80211_channels_info
  type apple80211_channels_info (line 955) | struct apple80211_channels_info
  type apple80211_peer_cache_maximum_size (line 957) | struct apple80211_peer_cache_maximum_size {
  type apple80211_awdl_election_id (line 962) | struct apple80211_awdl_election_id {
  type apple80211_awdl_master_channel (line 967) | struct apple80211_awdl_master_channel {
  type apple80211_awdl_secondary_master_channel (line 972) | struct apple80211_awdl_secondary_master_channel {
  type apple80211_awdl_min_rate (line 977) | struct apple80211_awdl_min_rate {
  type apple80211_awdl_election_rssi_thresholds (line 982) | struct apple80211_awdl_election_rssi_thresholds {
  type apple80211_channel_sequence (line 989) | struct apple80211_channel_sequence {
  type apple80211_awdl_sync_channel_sequence (line 994) | struct apple80211_awdl_sync_channel_sequence {
  type apple80211_awdl_sync_channel_sequence (line 1008) | struct apple80211_awdl_sync_channel_sequence
  type apple80211_awdl_presence_mode (line 1010) | struct apple80211_awdl_presence_mode {
  type apple80211_awdl_extension_state_machine_parameter (line 1015) | struct apple80211_awdl_extension_state_machine_parameter {
  type apple80211_awdl_sync_state (line 1023) | struct apple80211_awdl_sync_state {
  type apple80211_awdl_sync_params (line 1028) | struct apple80211_awdl_sync_params {
  type apple80211_awdl_cap (line 1036) | struct apple80211_awdl_cap {
  type apple80211_awdl_af_tx_mode (line 1041) | struct apple80211_awdl_af_tx_mode {
  type apple80211_awdl_oob_request (line 1048) | struct apple80211_awdl_oob_request {
  type apple80211_roam_profile (line 1309) | struct apple80211_roam_profile {
  type apple80211_roam_profile_band_data (line 1323) | struct apple80211_roam_profile_band_data {
  type apple80211_roam_profile_band_data (line 1330) | struct apple80211_roam_profile_band_data
  type apple80211_ie_data (line 1332) | struct apple80211_ie_data {
  type apple80211_p2p_listen_data (line 1342) | struct apple80211_p2p_listen_data {
  type apple80211_p2p_go_conf_data (line 1350) | struct apple80211_p2p_go_conf_data {
  type apple80211_sta_roam_data (line 1362) | struct apple80211_sta_roam_data {
  type apple80211_btc_profiles_data (line 1370) | struct apple80211_btc_profiles_data {
  type apple80211_btc_config_data (line 1376) | struct apple80211_btc_config_data {
  type apple80211_btc_mode_data (line 1384) | struct apple80211_btc_mode_data {
  type apple80211_btc_options_data (line 1389) | struct apple80211_btc_options_data {
  type apple80211_driver_available_data (line 1394) | struct apple80211_driver_available_data {
  type apple80211_driver_available_data (line 1402) | struct apple80211_driver_available_data

FILE: include/Airport/apple80211_var.h
  type apple80211_phymode (line 56) | enum apple80211_phymode {
  type apple80211_physubmode (line 69) | enum apple80211_physubmode {
  type apple80211_opmode (line 80) | enum apple80211_opmode {
  type apple80211_apmode (line 89) | enum apple80211_apmode    {
  type apple80211_state (line 96) | enum apple80211_state {
  type apple80211_protmode (line 104) | enum apple80211_protmode {
  type apple80211_cipher_type (line 112) | enum apple80211_cipher_type {
  type apple80211_cipher_key_type (line 128) | enum apple80211_cipher_key_type
  type apple80211_authtype_lower (line 136) | enum apple80211_authtype_lower
  type apple80211_authtype_upper (line 145) | enum apple80211_authtype_upper
  type apple80211_associate_result (line 168) | enum apple80211_associate_result
  type apple80211_link_down_reason (line 196) | enum apple80211_link_down_reason
  type apple80211_unit (line 204) | enum apple80211_unit
  type apple80211_power_state (line 211) | enum apple80211_power_state
  type apple80211_locale (line 219) | enum apple80211_locale
  type apple80211_scan_type (line 231) | enum apple80211_scan_type
  type apple80211_int_mit (line 240) | enum apple80211_int_mit {
  type apple80211_channel_flag (line 245) | enum apple80211_channel_flag
  type apple80211_rate_flag (line 264) | enum apple80211_rate_flag
  type apple80211_short_slot_mode (line 271) | enum apple80211_short_slot_mode
  type apple80211_powersave_mode (line 278) | enum apple80211_powersave_mode
  type apple80211_debug_flag (line 302) | enum apple80211_debug_flag
  type apple80211_guard_interval (line 311) | enum apple80211_guard_interval
  type apple80211_key (line 325) | struct apple80211_key
  type apple80211_channel (line 344) | struct apple80211_channel
  type apple80211_rate (line 351) | struct apple80211_rate
  type apple80211_scan_result (line 465) | struct apple80211_scan_result
  type apple80211_network_data (line 499) | struct apple80211_network_data
  type apple80211_station (line 516) | struct apple80211_station
  type apple80211_wow_pattern (line 525) | struct apple80211_wow_pattern
  type apple80211_wake_condition (line 531) | enum apple80211_wake_condition
  type apple80211_card_capability (line 543) | enum apple80211_card_capability
  type apple80211_virtual_interface_type (line 570) | enum apple80211_virtual_interface_type
  type apple80211_ie_type (line 585) | enum apple80211_ie_type
  type apple80211_assoc_flags (line 594) | enum apple80211_assoc_flags {
  type IO80211LinkState (line 598) | enum IO80211LinkState
  type IO80211LinkState (line 604) | typedef enum IO80211LinkState IO80211LinkState;
  type apple80211_status_msg_hdr (line 608) | struct apple80211_status_msg_hdr

FILE: include/Airport/apple80211_wps.h
  type wps_eap_hdr (line 52) | struct wps_eap_hdr
  type wps_msg_elem_hdr (line 78) | struct wps_msg_elem_hdr
  type wps_dev_type (line 86) | struct wps_dev_type
  type wps_msg_nack (line 199) | struct wps_msg_nack
  type wps_msg_ack (line 208) | struct wps_msg_ack
  type wps_msg_done (line 216) | struct wps_msg_done
  type wps_identity_msg (line 223) | struct wps_identity_msg
  type WPSSupplicantState (line 481) | enum WPSSupplicantState
  type WPSSupplicantState (line 515) | typedef enum WPSSupplicantState WPSSupplicantState;

FILE: include/Airport/apple_private_spi.h
  type IOMbufServiceClass (line 47) | enum IOMbufServiceClass {
  type packet_info_tag (line 62) | struct packet_info_tag {
  type apple80211_debug_command (line 66) | struct apple80211_debug_command {
  type ifnet_init_eparams (line 70) | struct ifnet_init_eparams {

FILE: include/ClientKit/Common.h
  type ioctl_driver_info (line 27) | struct ioctl_driver_info {
  type itl_phy_mode (line 34) | enum itl_phy_mode {
  type ioctl_sta_info (line 43) | struct ioctl_sta_info {
  type ioctl_power (line 57) | struct ioctl_power {
  type itl_80211_state (line 63) | enum itl_80211_state {
  type ioctl_state (line 71) | struct ioctl_state {
  type ioctl_nw_id (line 76) | struct ioctl_nw_id {
  type ioctl_nw_bssid (line 82) | struct ioctl_nw_bssid {
  type ioctl_wpa_key (line 87) | struct ioctl_wpa_key {
  type ioctl_associate (line 93) | struct ioctl_associate {
  type ioctl_disassociate (line 99) | struct ioctl_disassociate {
  type ioctl_join (line 104) | struct ioctl_join {
  type ioctl_scan (line 110) | struct ioctl_scan {
  type ioctl_scan_result (line 114) | struct ioctl_scan_result {
  type ioctl_tx_power (line 118) | struct ioctl_tx_power {
  type itl80211_cipher (line 125) | enum itl80211_cipher {
  type itl80211_wpa_proto (line 135) | enum itl80211_wpa_proto {
  type itl80211_proto (line 140) | enum itl80211_proto {
  type itl80211_akm (line 149) | enum itl80211_akm {
  type ioctl_network_info (line 157) | struct ioctl_network_info {

FILE: include/ClientKit/IoctlId.h
  type IOCTL_IDS (line 18) | enum IOCTL_IDS {

FILE: include/FwData.h
  type FwDesc (line 23) | struct FwDesc {
  type FwDesc (line 33) | struct FwDesc
  function OSData (line 36) | static inline OSData *getFWDescByName(const char* name) {
  function uncompressFirmware (line 46) | static inline bool uncompressFirmware(unsigned char *dest, uint *destLen...

FILE: include/HAL/ItlDriverController.hpp
  class ItlDriverController (line 18) | class ItlDriverController {

FILE: include/HAL/ItlDriverInfo.hpp
  class ItlDriverInfo (line 18) | class ItlDriverInfo {

FILE: include/HAL/ItlHalService.cpp
  function IOEthernetController (line 36) | IOEthernetController *ItlHalService::
  function IOCommandGate (line 42) | IOCommandGate *ItlHalService::
  function IOWorkLoop (line 48) | IOWorkLoop *ItlHalService::
  type timespec (line 65) | struct timespec
  type timespec (line 67) | struct timespec

FILE: include/HAL/ItlHalService.hpp
  class ItlHalService (line 32) | class ItlHalService : public OSObject {
    type ieee80211com (line 45) | struct ieee80211com

FILE: itl80211/compat.cpp
  function pci_get_capability (line 28) | int pci_get_capability(pci_chipset_tag_t chipsettag, pcitag_t pcitag, in...
  function pcireg_t (line 41) | pcireg_t pci_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg) {
  function pci_conf_write (line 45) | void pci_conf_write(pci_chipset_tag_t pc, pcitag_t tag, int reg, pcireg_...
  function pcireg_t (line 49) | pcireg_t pci_mapreg_type(pci_chipset_tag_t pc, pcitag_t tag, int reg) {
  function pci_mapreg_map (line 53) | int pci_mapreg_map(const struct pci_attach_args *pa, int reg, pcireg_t t...
  function pci_intr_map_msix (line 72) | int
  function pci_intr_map_msi (line 90) | int pci_intr_map_msi(struct pci_attach_args *paa, pci_intr_handle_t *ih) {
  function pci_intr_map (line 106) | int pci_intr_map(struct pci_attach_args *paa, pci_intr_handle_t *ih) {
  function interruptTrampoline (line 111) | void interruptTrampoline(OSObject *ih, IOInterruptEventSource *, int cou...
  function pci_intr_disestablish (line 131) | void pci_intr_disestablish(pci_chipset_tag_t pc, void *ih) {
  function bus_space_read_8 (line 151) | uint64_t bus_space_read_8(bus_space_tag_t space, bus_space_handle_t hand...
  function bus_space_write_8 (line 155) | void bus_space_write_8(bus_space_tag_t space, bus_space_handle_t handle,...
  function bus_space_read_4 (line 159) | uint32_t bus_space_read_4(bus_space_tag_t space, bus_space_handle_t hand...
  function bus_space_write_1 (line 163) | void bus_space_write_1(bus_space_tag_t space, bus_space_handle_t handle,...
  function bus_space_write_4 (line 167) | void bus_space_write_4(bus_space_tag_t space, bus_space_handle_t handle,...
  function bus_space_barrier (line 171) | void bus_space_barrier(bus_space_tag_t space, bus_space_handle_t handle,...
  function bus_dmamap_create (line 175) | int bus_dmamap_create(bus_dma_tag_t tag, bus_size_t size, int nsegments,...
  function IOBufferMemoryDescriptor (line 187) | IOBufferMemoryDescriptor* alloc_dma_memory(size_t size, mach_vm_address_...
  function bus_dmamem_alloc (line 238) | int bus_dmamem_alloc(bus_dma_tag_t tag, bus_size_t size, bus_size_t alig...
  function bus_dmamem_map (line 249) | int bus_dmamem_map(bus_dma_tag_t tag, bus_dma_segment_t *segs, int nsegs...
  function bus_addr_t (line 257) | bus_addr_t bus_dmamap_get_paddr(bus_dma_segment_t seg) {
  function bus_dmamap_sync (line 264) | void bus_dmamap_sync(bus_dma_tag_t tag, bus_dmamap_t dmam, bus_addr_t of...
  function bus_dmamem_unmap (line 268) | void bus_dmamem_unmap(bus_dma_segment_t seg) {
  function bus_dmamem_free (line 274) | void bus_dmamem_free(bus_dma_tag_t tag, bus_dma_segment_t *segs, int nse...
  function bus_dmamap_destroy (line 283) | void bus_dmamap_destroy(bus_dma_tag_t tag, bus_dmamap_t dmam) {
  function bus_dmamap_load (line 293) | int bus_dmamap_load(bus_dmamap_t map, mbuf_t mb) {

FILE: itl80211/compat.h
  function USEC_TO_TIMEVAL (line 45) | static inline void
  function NSEC_TO_TIMEVAL (line 52) | static inline void
  function TIMEVAL_TO_NSEC (line 59) | static inline uint64_t
  function NSEC_TO_TIMESPEC (line 72) | static inline void
  function SEC_TO_NSEC (line 79) | static inline uint64_t
  function MSEC_TO_NSEC (line 87) | static inline uint64_t
  function USEC_TO_NSEC (line 95) | static inline uint64_t
  function TIMESPEC_TO_NSEC (line 103) | static inline uint64_t
  function flsl (line 118) | static inline int
  function _fls (line 133) | static inline int
  type bus_dma_tag_t (line 152) | typedef int				bus_dma_tag_t;
  type IOBufferMemoryDescriptor (line 153) | typedef IOBufferMemoryDescriptor*	bus_dma_segment_t;
  type caddr_t (line 154) | typedef caddr_t				bus_space_handle_t;
  type pci_chipset_tag_t (line 155) | typedef int				pci_chipset_tag_t;
  type mach_vm_address_t (line 156) | typedef mach_vm_address_t		bus_addr_t;
  type u_int32_t (line 157) | typedef u_int32_t			bus_size_t;
  type IOMemoryMap (line 158) | typedef IOMemoryMap*			bus_space_tag_t;
  type IOPCIDevice (line 159) | typedef IOPCIDevice*			pcitag_t;
  type pcireg_t (line 160) | typedef uint32_t			pcireg_t;
  function class (line 162) | class pci_intr_handle : public OSObject {
  type pci_intr_handle (line 171) | typedef pci_intr_handle* pci_intr_handle_t;
  type device (line 183) | struct device {
  type workq_task (line 189) | struct workq_task {
  type pci_attach_args (line 193) | struct pci_attach_args {
  type bus_dmamap (line 200) | struct bus_dmamap {
  type bus_dmamap (line 205) | struct bus_dmamap
  type pci_matchid (line 214) | struct pci_matchid {
  function pci_matchbyid (line 224) | static inline int
  function pci_match (line 237) | static inline int
  type pci_attach_args (line 269) | struct pci_attach_args
  type pci_attach_args (line 271) | struct pci_attach_args
  type pci_attach_args (line 272) | struct pci_attach_args
  type pci_attach_args (line 273) | struct pci_attach_args

FILE: itl80211/linux/bitfield.h
  function find_first_zero_bit (line 48) | static inline int
  function find_next_zero_bit (line 66) | static inline int
  function find_first_bit (line 83) | static inline int
  function find_next_bit (line 101) | static inline int
  function find_last_bit (line 118) | static inline int
  function UInt64 (line 149) | static inline UInt64 OSBitwiseAtomic64(unsigned long and_mask, unsigned ...
  function OSBitAndAtomic64 (line 162) | static inline unsigned long OSBitAndAtomic64(unsigned long mask, unsigne...
  function OSBitOrAtomic64 (line 167) | static inline unsigned long OSBitOrAtomic64(unsigned long mask, unsigned...
  function set_bit (line 172) | static inline void set_bit(int nr, volatile unsigned long *addr)
  function clear_bit (line 179) | static inline void clear_bit(int nr, volatile unsigned long *addr)
  function test_and_set_bit (line 186) | static inline int test_and_set_bit(int nr, volatile unsigned long *addr)
  function test_and_clear_bit (line 198) | static inline int test_and_clear_bit(int nr, volatile unsigned long *addr)
  function test_bit (line 210) | static inline int
  function linux_fls (line 216) | static inline int linux_fls(int x)

FILE: itl80211/linux/kernel.h
  function PTR_ERR (line 66) | static inline long PTR_ERR(const void *ptr)
  function IS_ERR (line 72) | static inline long IS_ERR(const void *ptr)
  function fls64 (line 77) | static inline int fls64(UInt64 x)
  function __get_order (line 109) | static inline
  function is_power_of_2 (line 200) | static inline __attribute__((const))
  function atomic_dec_and_test (line 244) | static inline int atomic_dec_and_test(volatile SInt32 * addr)
  function atomic_inc_and_test (line 249) | static inline int atomic_inc_and_test(volatile SInt32 * addr)

FILE: itl80211/linux/random.h
  function get_random_bytes (line 28) | static inline void get_random_bytes(void *buf, int nbytes)

FILE: itl80211/linux/types.h
  type UInt8 (line 119) | typedef UInt8  u8;
  type UInt16 (line 120) | typedef UInt16 u16;
  type UInt32 (line 121) | typedef UInt32 u32;
  type UInt64 (line 122) | typedef UInt64 u64;
  type u8 (line 124) | typedef u8 __u8;
  type u16 (line 125) | typedef u16 __u16;
  type u32 (line 126) | typedef u32 __u32;
  type u64 (line 127) | typedef u64 __u64;
  type SInt16 (line 129) | typedef  SInt16 __be16;
  type SInt32 (line 130) | typedef  SInt32 __be32;
  type SInt64 (line 131) | typedef  SInt64 __be64;
  type SInt16 (line 132) | typedef  SInt16 __le16;
  type SInt32 (line 133) | typedef  SInt32 __le32;
  type SInt64 (line 134) | typedef  SInt64 __le64;
  type SInt8 (line 136) | typedef SInt8  s8;
  type SInt16 (line 137) | typedef SInt16 s16;
  type SInt32 (line 138) | typedef SInt32 s32;
  type SInt64 (line 139) | typedef SInt64 s64;
  type s8 (line 141) | typedef s8  __s8;
  type s16 (line 142) | typedef s16 __s16;
  type s32 (line 143) | typedef s32 __s32;
  type s64 (line 144) | typedef s64 __s64;
  type UInt16 (line 146) | typedef UInt16 __sum16;
  type u64 (line 148) | typedef u64 dma_addr_t;
  function __u16 (line 186) | static inline __u16 __be16_to_cpup(const __be16 *p)
  function __u32 (line 191) | static inline __u32 __be32_to_cpup(const __be32 *p)
  function __be32 (line 196) | static inline __be32 __cpu_to_be32p(const __u32 *p)
  function __u64 (line 201) | static inline __u64 __be64_to_cpup(const __be64 *p)
  function __be64 (line 206) | static inline __be64 __cpu_to_be64p(const __u64 *p)
  function __u32 (line 211) | static inline __u32 __le32_to_cpup(const __le32 *p)
  function __u16 (line 216) | static inline __u16 __le16_to_cpup(const __le16 *p)
  function u32 (line 224) | static inline u32 get_unaligned_le32(const void *p)
  function u32 (line 229) | static inline u32 get_unaligned_le16(const void *p)
  function put_unaligned_le32 (line 234) | static inline void put_unaligned_le32(u32 val, void *p)
  function hweight8 (line 239) | static inline unsigned int hweight8(unsigned int w)
  function hweight16 (line 246) | static inline unsigned int hweight16(unsigned int w)
  function hweight32 (line 254) | static inline unsigned int hweight32(unsigned int w)
  function hweight64 (line 263) | static inline unsigned long hweight64(uint64_t w)
  function field_multiplier (line 273) | static inline uint64_t field_multiplier(uint64_t field)
  function field_mask (line 278) | static inline uint64_t field_mask(uint64_t field)

FILE: itl80211/openbsd/crypto/aes.c
  function enc32le (line 33) | static inline void
  function dec32le (line 44) | static inline uint32_t
  function aes_ct_bitslice_Sbox (line 93) | static void
  function aes_ct_ortho (line 277) | static void
  function sub_word (line 308) | static inline uint32_t
  function aes_keysched_base (line 332) | static unsigned
  function aes_ct_keysched (line 382) | unsigned
  function aes_ct_skey_expand (line 414) | void
  function add_round_key (line 432) | static inline void
  function shift_rows (line 445) | static inline void
  function rotr16 (line 461) | static inline uint32_t
  function mix_columns (line 467) | static inline void
  function aes_ct_bitslice_encrypt (line 505) | void
  function aes_ct_bitslice_invSbox (line 526) | void
  function inv_shift_rows (line 586) | static inline void
  function inv_mix_columns (line 602) | static void
  function aes_ct_bitslice_decrypt (line 640) | void
  function AES_Setkey (line 659) | int
  function AES_Encrypt_ECB (line 669) | void
  function AES_Decrypt_ECB (line 712) | void
  function AES_Encrypt (line 755) | void
  function AES_Decrypt (line 761) | void
  function AES_KeySetup_Encrypt (line 767) | int
  function redgf256 (line 793) | static inline uint32_t
  function mul9 (line 805) | static inline uint32_t
  function mulb (line 814) | static inline uint32_t
  function muld (line 823) | static inline uint32_t
  function mule (line 832) | static inline uint32_t
  function AES_KeySetup_Decrypt (line 838) | int

FILE: itl80211/openbsd/crypto/aes.h
  type AES_CTX (line 33) | typedef struct aes_ctx {

FILE: itl80211/openbsd/crypto/arc4.c
  function rc4_keysetup (line 29) | void
  function rc4_crypt (line 46) | void
  function rc4_getbytes (line 61) | void
  function rc4_skip (line 75) | void

FILE: itl80211/openbsd/crypto/arc4.h
  type rc4_ctx (line 21) | struct rc4_ctx {
  type rc4_ctx (line 26) | struct rc4_ctx
  type rc4_ctx (line 28) | struct rc4_ctx
  type rc4_ctx (line 31) | struct rc4_ctx
  type rc4_ctx (line 33) | struct rc4_ctx

FILE: itl80211/openbsd/crypto/blf.c
  function Blowfish_encipher (line 64) | void
  function Blowfish_decipher (line 89) | void
  function Blowfish_initstate (line 114) | void
  function u_int32_t (line 394) | u_int32_t
  function Blowfish_expand0state (line 415) | void
  function Blowfish_expandstate (line 452) | void
  function blf_key (line 494) | void
  function blf_enc (line 504) | void
  function blf_dec (line 517) | void
  function blf_ecb_encrypt (line 530) | void
  function blf_ecb_decrypt (line 556) | void
  function blf_cbc_encrypt (line 582) | void
  function blf_cbc_decrypt (line 611) | void

FILE: itl80211/openbsd/crypto/blf.h
  type blf_ctx (line 50) | typedef struct BlowfishContext {

FILE: itl80211/openbsd/crypto/cast.c
  function cast_encrypt (line 41) | void
  function cast_decrypt (line 87) | void
  function cast_setkey (line 133) | void

FILE: itl80211/openbsd/crypto/cast.h
  type cast_key (line 13) | typedef struct {

FILE: itl80211/openbsd/crypto/chacha_private.h
  type u8 (line 7) | typedef unsigned char u8;
  type u32 (line 8) | typedef unsigned int u32;
  type chacha_ctx (line 10) | typedef struct
  function chacha_keysetup (line 52) | static void
  function chacha_ivsetup (line 77) | static void
  function chacha_encrypt_bytes (line 86) | static void

FILE: itl80211/openbsd/crypto/chachapoly.c
  function chacha20_setkey (line 24) | int
  function chacha20_reinit (line 40) | void
  function chacha20_crypt (line 48) | void
  function Chacha20_Poly1305_Init (line 57) | void
  function Chacha20_Poly1305_Setkey (line 65) | void
  function Chacha20_Poly1305_Reinit (line 76) | void
  function Chacha20_Poly1305_Update (line 88) | int
  function Chacha20_Poly1305_Final (line 105) | void

FILE: itl80211/openbsd/crypto/chachapoly.h
  type chacha20_ctx (line 26) | struct chacha20_ctx {
  type poly1305_ctx (line 40) | struct poly1305_ctx {
  type CHACHA20_POLY1305_CTX (line 48) | typedef struct {

FILE: itl80211/openbsd/crypto/cmac.c
  function AES_CMAC_Init (line 43) | void
  function AES_CMAC_SetKey (line 50) | void
  function AES_CMAC_Update (line 56) | void
  function AES_CMAC_Final (line 83) | void

FILE: itl80211/openbsd/crypto/cmac.h
  type AES_CMAC_CTX (line 25) | typedef struct _AES_CMAC_CTX {

FILE: itl80211/openbsd/crypto/cryptodev.h
  type cryptoini (line 114) | struct cryptoini {
  type cryptodesc (line 129) | struct cryptodesc {
  type cryptop (line 152) | struct cryptop {
  type cryptocap (line 197) | struct cryptocap {
  type cryptoini (line 220) | struct cryptoini
  type cryptop (line 222) | struct cryptop
  type cryptoini (line 224) | struct cryptoini
  type cryptop (line 225) | struct cryptop
  type cryptop (line 228) | struct cryptop
  type cryptop (line 229) | struct cryptop
  type uio (line 231) | struct uio
  type uio (line 232) | struct uio
  type uio (line 233) | struct uio
  type uio (line 234) | struct uio
  type cryptop (line 237) | struct	cryptop
  type cryptop (line 238) | struct cryptop

FILE: itl80211/openbsd/crypto/des_locl.h
  type des_ks_struct (line 57) | struct des_ks_struct

FILE: itl80211/openbsd/crypto/ecb3_enc.c
  function des_ecb3_encrypt (line 52) | void

FILE: itl80211/openbsd/crypto/ecb_enc.c
  function des_encrypt2 (line 53) | void

FILE: itl80211/openbsd/crypto/gmac.c
  function ghash_gfmul (line 39) | void
  function ghash_update_mi (line 76) | void
  function AES_GMAC_Init (line 102) | void
  function AES_GMAC_Setkey (line 113) | void
  function AES_GMAC_Reinit (line 125) | void
  function AES_GMAC_Update (line 134) | int
  function AES_GMAC_Final (line 156) | void

FILE: itl80211/openbsd/crypto/gmac.h
  type GHASH_CTX (line 27) | typedef struct _GHASH_CTX {
  type AES_GMAC_CTX (line 33) | typedef struct _AES_GMAC_CTX {

FILE: itl80211/openbsd/crypto/hmac.c
  function HMAC_MD5_Init (line 32) | void
  function HMAC_MD5_Update (line 59) | void
  function HMAC_MD5_Final (line 65) | void
  function HMAC_SHA1_Init (line 86) | void
  function HMAC_SHA1_Update (line 113) | void
  function HMAC_SHA1_Final (line 119) | void
  function HMAC_SHA256_Init (line 140) | void
  function HMAC_SHA256_Update (line 167) | void
  function HMAC_SHA256_Final (line 173) | void

FILE: itl80211/openbsd/crypto/hmac.h
  type HMAC_MD5_CTX (line 25) | typedef struct _HMAC_MD5_CTX {
  type HMAC_SHA1_CTX (line 31) | typedef struct _HMAC_SHA1_CTX {
  type HMAC_SHA256_CTX (line 37) | typedef struct _HMAC_SHA256_CTX {

FILE: itl80211/openbsd/crypto/idgen.c
  function u_int16_t (line 68) | static u_int16_t
  function u_int32_t (line 85) | static u_int32_t
  function idgen32_rekey (line 106) | static void
  function idgen32_init (line 116) | void
  function u_int32_t (line 124) | u_int32_t

FILE: itl80211/openbsd/crypto/idgen.h
  type idgen32_ctx (line 23) | struct idgen32_ctx {
  type idgen32_ctx (line 31) | struct idgen32_ctx
  type idgen32_ctx (line 32) | struct idgen32_ctx

FILE: itl80211/openbsd/crypto/key_wrap.c
  function aes_key_wrap_set_key (line 33) | void
  function aes_key_wrap_set_key_wrap_only (line 39) | void
  function aes_key_wrap (line 46) | void
  function aes_key_unwrap (line 79) | int

FILE: itl80211/openbsd/crypto/key_wrap.h
  type aes_key_wrap_ctx (line 24) | typedef struct _aes_key_wrap_ctx {

FILE: itl80211/openbsd/crypto/md5.c
  function MD5Init (line 50) | void
  function MD5Update (line 64) | void
  function MD5Final (line 103) | void
  function MD5Transform (line 144) | void

FILE: itl80211/openbsd/crypto/md5.h
  type MD5_CTX (line 21) | typedef struct MD5Context {

FILE: itl80211/openbsd/crypto/michael.c
  function michael_init (line 56) | void
  function michael_update (line 62) | void
  function michael_final (line 79) | void
  function michael_key (line 91) | void

FILE: itl80211/openbsd/crypto/michael.h
  type MICHAEL_CTX (line 26) | typedef struct michael_context {

FILE: itl80211/openbsd/crypto/poly1305.c
  function U8TO32 (line 18) | static unsigned long
  function U32TO8 (line 28) | static void
  function poly1305_init (line 37) | void
  function poly1305_blocks (line 64) | static void
  function poly1305_update (line 157) | void
  function poly1305_finish (line 194) | void

FILE: itl80211/openbsd/crypto/poly1305.h
  type poly1305_state (line 13) | typedef struct poly1305_state {

FILE: itl80211/openbsd/crypto/rijndael.c
  function rijndaelKeySetupEnc (line 625) | int
  function rijndaelKeySetupDec (line 712) | int
  function rijndaelEncrypt (line 755) | void
  function rijndaelDecrypt (line 939) | static void
  function rijndael_set_key_enc_only (line 1124) | int
  function rijndael_set_key (line 1140) | int
  function rijndael_decrypt (line 1157) | void
  function rijndael_encrypt (line 1163) | void

FILE: itl80211/openbsd/crypto/rijndael.h
  type u8 (line 36) | typedef unsigned char	u8;
  type u16 (line 37) | typedef unsigned short	u16;
  type u32 (line 38) | typedef unsigned int	u32;
  type rijndael_ctx (line 41) | typedef struct {

FILE: itl80211/openbsd/crypto/rmd160.c
  function RMD160Init (line 92) | void
  function RMD160Update (line 103) | void
  function RMD160Final (line 130) | void
  function RMD160Transform (line 156) | void

FILE: itl80211/openbsd/crypto/rmd160.h
  type RMD160_CTX (line 32) | typedef struct RMD160Context {

FILE: itl80211/openbsd/crypto/set_key.c
  function check_parity (line 65) | static int
  function des_is_weak_key (line 107) | int
  function des_set_key (line 139) | int

FILE: itl80211/openbsd/crypto/sha1-pbkdf2.c
  function openssl_hmac_vector (line 12) | static int openssl_hmac_vector(const u8 *key,
  function hmac_sha1_vector (line 32) | int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
  function hmac_sha1 (line 40) | int hmac_sha1(const u8 *key, size_t key_len, const u8 *data, size_t data...
  function pbkdf2_sha1_f (line 46) | static int pbkdf2_sha1_f(const char *passphrase, const u8 *ssid,
  function pbkdf2_sha1 (line 104) | int pbkdf2_sha1(const char *passphrase, const u8 *ssid, size_t ssid_len,

FILE: itl80211/openbsd/crypto/sha1.c
  function SHA1Transform (line 49) | void
  function SHA1Init (line 108) | void
  function SHA1Update (line 123) | void
  function SHA1Final (line 147) | void

FILE: itl80211/openbsd/crypto/sha1.h
  type SHA1_CTX (line 19) | typedef struct {

FILE: itl80211/openbsd/crypto/sha2.c
  function SHA256Init (line 257) | void
  function SHA256Transform (line 292) | void
  function SHA256Transform (line 350) | void
  function SHA256Update (line 426) | void
  function SHA256Final (line 473) | void
  function SHA512Init (line 533) | void
  function SHA512Transform (line 571) | void
  function SHA512Transform (line 628) | void
  function SHA512Update (line 706) | void
  function SHA512Last (line 753) | void
  function SHA512Final (line 798) | void
  function SHA384Init (line 822) | void
  function SHA384Update (line 831) | void
  function SHA384Final (line 837) | void

FILE: itl80211/openbsd/crypto/sha2.h
  type SHA2_CTX (line 54) | typedef struct _SHA2_CTX {

FILE: itl80211/openbsd/net80211/CTimeout.cpp
  function IOReturn (line 41) | IOReturn CTimeout::timeout_add_msec(OSObject *target, void *arg0, void *...
  function IOReturn (line 64) | IOReturn CTimeout::timeout_del(OSObject *target, void *arg0, void *arg1,...
  function IOReturn (line 79) | IOReturn CTimeout::timeout_free(OSObject *target, void *arg0, void *arg1...
  function IOReturn (line 99) | IOReturn CTimeout::timeout_set(OSObject *target, void *arg0, void *arg1,...
  function IOReturn (line 116) | IOReturn CTimeout::timeout_pending(OSObject *target, void *arg0, void *a...

FILE: itl80211/openbsd/net80211/_string.c
  function timingsafe_bcmp (line 30) | int timingsafe_bcmp(const void *b1, const void *b2, size_t n)

FILE: itl80211/openbsd/net80211/ieee80211.c
  function _stop (line 78) | int _stop(struct kmod_info*, void*) {
  function _start (line 82) | int _start(struct kmod_info*, void*) {
  type ieee80211com (line 90) | struct ieee80211com
  type ieee80211com (line 91) | struct ieee80211com
  type ieee80211_phymode (line 91) | enum ieee80211_phymode
  type ieee80211com (line 92) | struct ieee80211com
  function ieee80211_begin_bgscan (line 94) | void
  function ieee80211_begin_cache_bgscan (line 130) | void
  function ieee80211_bgscan_timeout (line 158) | void
  function ieee80211_channel_init (line 166) | void
  function ieee80211_ifattach (line 217) | void
  function ieee80211_ifdetach (line 265) | void
  function u_int (line 294) | u_int
  function u_int (line 320) | u_int
  function u_int (line 336) | u_int
  function ieee80211_configure_ampdu_tx (line 359) | void
  function ieee80211_media_init (line 380) | void
  function ieee80211_findrate (line 580) | int
  function ieee80211_media_change (line 597) | int
  function ieee80211_media_status (line 820) | void
  function ieee80211_watchdog (line 896) | void
  type ieee80211_rateset (line 931) | struct ieee80211_rateset
  type ieee80211_rateset (line 934) | struct ieee80211_rateset
  type ieee80211_rateset (line 937) | struct ieee80211_rateset
  type ieee80211_ht_rateset (line 940) | struct ieee80211_ht_rateset
  type ieee80211_vht_rateset (line 990) | struct ieee80211_vht_rateset
  type ieee80211_he_rateset (line 1040) | struct ieee80211_he_rateset
  function ieee80211_setbasicrates (line 1073) | void
  function ieee80211_min_basic_rate (line 1105) | int
  function ieee80211_max_basic_rate (line 1130) | int
  function ieee80211_setmode (line 1156) | int
  function ieee80211_next_mode (line 1243) | enum ieee80211_phymode
  function ieee80211_chan2mode (line 1317) | enum ieee80211_phymode
  function ieee80211_mcs2media (line 1361) | uint64_t
  function ieee80211_media2mcs (line 1397) | int
  function ieee80211_rate2media (line 1424) | uint64_t
  function ieee80211_media2rate (line 1489) | int
  function u_int8_t (line 1525) | u_int8_t
  function u_int8_t (line 1560) | u_int8_t

FILE: itl80211/openbsd/net80211/ieee80211.h
  type ieee80211_frame (line 59) | struct ieee80211_frame {
  type ieee80211_qosframe (line 68) | struct ieee80211_qosframe {
  type ieee80211_htframe (line 78) | struct ieee80211_htframe {		/* 11n */
  type ieee80211_frame_addr4 (line 89) | struct ieee80211_frame_addr4 {
  type ieee80211_qosframe_addr4 (line 99) | struct ieee80211_qosframe_addr4 {
  type ieee80211_htframe_addr4 (line 110) | struct ieee80211_htframe_addr4 {	/* 11n */
  type ieee80211_chan_width (line 143) | enum ieee80211_chan_width {
  type ieee80211_frame_min (line 267) | struct ieee80211_frame_min {
  type ieee80211_frame_rts (line 275) | struct ieee80211_frame_rts {
  type ieee80211_frame_cts (line 283) | struct ieee80211_frame_cts {
  type ieee80211_frame_ack (line 290) | struct ieee80211_frame_ack {
  type ieee80211_frame_pspoll (line 297) | struct ieee80211_frame_pspoll {
  type ieee80211_frame_cfend (line 305) | struct ieee80211_frame_cfend {		/* NB: also CF-End+CF-Ack */
  function ieee80211_has_seq (line 314) | static __inline int
  function ieee80211_has_addr4 (line 321) | static __inline int
  function ieee80211_has_qos (line 328) | static __inline int
  function ieee80211_has_htc (line 336) | static __inline int
  function u_int16_t (line 345) | static __inline u_int16_t
  function ieee80211_is_ctl (line 358) | static __inline int
  function ieee80211_is_data (line 365) | static __inline int
  function ieee80211_is_mgmt (line 372) | static __inline int
  function ieee80211_is_data_qos (line 379) | static __inline int
  function ieee80211_is_qos_nullfunc (line 390) | static __inline int
  function ieee80211_has_order (line 397) | static __inline int
  type ieee80211_eid_ext (line 625) | enum ieee80211_eid_ext {
  type ieee80211_edca_ac (line 927) | enum ieee80211_edca_ac {
  type ieee80211_ie_htcap (line 972) | struct ieee80211_ie_htcap {
  type ieee80211_eapol_key (line 1181) | struct ieee80211_eapol_key {
  type ieee80211_ptk (line 1230) | struct ieee80211_ptk {
  type ieee80211_htprot (line 1256) | enum ieee80211_htprot {
  type ieee80211_vht_mcs_info (line 1292) | struct ieee80211_vht_mcs_info {
  type ieee80211_ie_vhtcap (line 1307) | struct ieee80211_ie_vhtcap {
  type ieee80211_ie_vht_operation (line 1321) | struct ieee80211_ie_vht_operation {
  type ieee80211_ie_vht_txpwrenv (line 1439) | struct ieee80211_ie_vht_txpwrenv {
  type ieee80211_extcap_ie (line 1502) | struct ieee80211_extcap_ie {
  type ieee80211_quiet_ie (line 1510) | struct ieee80211_quiet_ie {
  type ieee80211_csa_ie (line 1522) | struct ieee80211_csa_ie {
  type ieee80211_vht_operation (line 1540) | struct ieee80211_vht_operation {
  type ieee80211_he_cap_elem (line 1555) | struct ieee80211_he_cap_elem {
  type ieee80211_he_mcs_support (line 1576) | enum ieee80211_he_mcs_support {
  type ieee80211_he_mcs_nss_supp (line 1602) | struct ieee80211_he_mcs_nss_supp {
  type ieee80211_he_operation (line 1617) | struct ieee80211_he_operation {
  type ieee80211_he_spr (line 1630) | struct ieee80211_he_spr {
  type ieee80211_he_mu_edca_param_ac_rec (line 1642) | struct ieee80211_he_mu_edca_param_ac_rec {
  type ieee80211_mu_edca_param_set (line 1654) | struct ieee80211_mu_edca_param_set {
  type ieee80211_he_highest_mcs_supported_subfield_enc (line 1909) | enum ieee80211_he_highest_mcs_supported_subfield_enc {
  function ieee80211_he_mcs_nss_size (line 1918) | static inline uint8_t
  function ieee80211_he_ppe_size (line 1962) | static inline uint8_t
  type ieee80211_he_6ghz_oper (line 1994) | struct ieee80211_he_6ghz_oper {
  function ieee80211_he_oper_size (line 2016) | static inline uint8_t
  type ieee80211_he_6ghz_oper (line 2049) | struct ieee80211_he_6ghz_oper
  type ieee80211_he_operation (line 2050) | struct ieee80211_he_operation
  type ieee80211_he_6ghz_oper (line 2067) | struct ieee80211_he_6ghz_oper
  function ieee80211_he_spr_size (line 2085) | static inline uint8_t
  type ieee80211_wme_info (line 2172) | struct ieee80211_wme_info {
  function airport_up_time (line 2183) | static inline uint64_t airport_up_time()

FILE: itl80211/openbsd/net80211/ieee80211_amrr.c
  function is_min_rate (line 57) | static inline int
  function is_max_rate (line 63) | static inline int
  function increase_rate (line 69) | static inline void
  function decrease_rate (line 75) | static inline void
  function ieee80211_amrr_node_init (line 81) | void
  function ieee80211_amrr_choose (line 94) | void

FILE: itl80211/openbsd/net80211/ieee80211_amrr.h
  type ieee80211_amrr (line 47) | struct ieee80211_amrr {
  type ieee80211_amrr_node (line 58) | struct ieee80211_amrr_node {
  type ieee80211_amrr (line 66) | struct ieee80211_amrr
  type ieee80211_amrr_node (line 67) | struct ieee80211_amrr_node
  type ieee80211_amrr (line 68) | struct ieee80211_amrr
  type ieee80211_node (line 68) | struct ieee80211_node
  type ieee80211_amrr_node (line 69) | struct ieee80211_amrr_node

FILE: itl80211/openbsd/net80211/ieee80211_crypto.c
  type ieee80211_akm (line 66) | enum ieee80211_akm
  function ieee80211_crypto_attach (line 69) | void
  function ieee80211_crypto_detach (line 90) | void
  function ieee80211_crypto_clear_groupkeys (line 116) | void
  function ieee80211_cipher_keylen (line 132) | int
  function ieee80211_set_key (line 151) | int
  function ieee80211_delete_key (line 184) | void
  type ieee80211_key (line 209) | struct ieee80211_key
  type ieee80211com (line 210) | struct ieee80211com
  type ieee80211_frame (line 210) | struct ieee80211_frame
  type ieee80211_node (line 211) | struct ieee80211_node
  type ieee80211_key (line 229) | struct ieee80211_key
  type ieee80211com (line 230) | struct ieee80211com
  type ieee80211_node (line 231) | struct ieee80211_node
  type ieee80211_key (line 233) | struct ieee80211_key
  type ieee80211_frame (line 234) | struct ieee80211_frame
  function mbuf_t (line 273) | mbuf_t
  function mbuf_t (line 306) | mbuf_t
  function ieee80211_prf (line 344) | void
  function ieee80211_kdf (line 373) | void
  function ieee80211_derive_ptk (line 405) | void
  function ieee80211_pmkid_sha1 (line 430) | static void
  function ieee80211_pmkid_sha256 (line 446) | static void
  function ieee80211_derive_pmkid (line 465) | void
  type ANY_CTX (line 475) | typedef union _ANY_CTX {
  function ieee80211_eapol_key_mic (line 486) | void
  function ieee80211_eapol_key_check_mic (line 522) | int
  function ieee80211_eapol_key_encrypt (line 541) | void
  function ieee80211_eapol_key_decrypt (line 600) | int
  type ieee80211_pmk (line 643) | struct ieee80211_pmk
  type ieee80211com (line 644) | struct ieee80211com
  type ieee80211_akm (line 644) | enum ieee80211_akm
  type ieee80211_pmk (line 647) | struct ieee80211_pmk
  type ieee80211_pmk (line 657) | struct ieee80211_pmk
  type ieee80211_pmk (line 681) | struct ieee80211_pmk
  type ieee80211com (line 682) | struct ieee80211com
  type ieee80211_node (line 682) | struct ieee80211_node
  type ieee80211_pmk (line 685) | struct ieee80211_pmk

FILE: itl80211/openbsd/net80211/ieee80211_crypto.h
  type ieee80211_cipher (line 44) | enum ieee80211_cipher {
  type ieee80211_akm (line 57) | enum ieee80211_akm {
  function ieee80211_is_8021x_akm (line 87) | static __inline int
  function ieee80211_is_sha256_akm (line 94) | static __inline int
  type ieee80211_key (line 101) | struct ieee80211_key {
  type ieee80211_pmk (line 123) | struct ieee80211_pmk {
  type ieee80211com (line 136) | struct	ieee80211com
  type ieee80211_node (line 137) | struct	ieee80211_node
  type _ifnet (line 139) | struct _ifnet
  type _ifnet (line 140) | struct _ifnet
  type ieee80211com (line 142) | struct ieee80211com
  type ieee80211_key (line 143) | struct	ieee80211_key
  type ieee80211com (line 143) | struct ieee80211com
  type ieee80211_frame (line 144) | struct ieee80211_frame
  type ieee80211_node (line 144) | struct ieee80211_node
  type ieee80211_key (line 145) | struct	ieee80211_key
  type ieee80211com (line 145) | struct ieee80211com
  type ieee80211_node (line 146) | struct ieee80211_node
  type ieee80211com (line 147) | struct ieee80211com
  type ieee80211_key (line 148) | struct ieee80211_key
  type ieee80211com (line 149) | struct ieee80211com
  type ieee80211_node (line 150) | struct ieee80211_node
  type ieee80211com (line 152) | struct ieee80211com
  type ieee80211_node (line 152) | struct ieee80211_node
  type ieee80211_key (line 153) | struct ieee80211_key
  type ieee80211com (line 154) | struct ieee80211com
  type ieee80211_node (line 154) | struct ieee80211_node
  type ieee80211_key (line 155) | struct ieee80211_key
  type ieee80211_eapol_key (line 157) | struct ieee80211_eapol_key
  type ieee80211_eapol_key (line 159) | struct ieee80211_eapol_key
  type ieee80211com (line 162) | struct ieee80211com
  type ieee80211_eapol_key (line 163) | struct ieee80211_eapol_key
  type ieee80211_eapol_key (line 165) | struct ieee80211_eapol_key
  type ieee80211_pmk (line 168) | struct	ieee80211_pmk
  type ieee80211com (line 168) | struct ieee80211com
  type ieee80211_akm (line 169) | enum ieee80211_akm
  type ieee80211_pmk (line 170) | struct	ieee80211_pmk
  type ieee80211com (line 170) | struct ieee80211com
  type ieee80211_node (line 171) | struct ieee80211_node
  type ieee80211_akm (line 172) | enum ieee80211_akm
  type ieee80211_ptk (line 174) | struct ieee80211_ptk
  type ieee80211_cipher (line 175) | enum ieee80211_cipher
  type ieee80211com (line 177) | struct ieee80211com
  type ieee80211_key (line 177) | struct ieee80211_key
  type ieee80211com (line 178) | struct ieee80211com
  type ieee80211_key (line 179) | struct ieee80211_key
  type ieee80211com (line 180) | struct ieee80211com
  type ieee80211_key (line 181) | struct ieee80211_key
  type ieee80211com (line 182) | struct ieee80211com
  type ieee80211_key (line 183) | struct ieee80211_key
  type ieee80211com (line 185) | struct ieee80211com
  type ieee80211_key (line 185) | struct ieee80211_key
  type ieee80211com (line 186) | struct ieee80211com
  type ieee80211_key (line 187) | struct ieee80211_key
  type ieee80211com (line 188) | struct ieee80211com
  type ieee80211_key (line 189) | struct ieee80211_key
  type ieee80211_key (line 191) | struct ieee80211_key
  type ieee80211com (line 192) | struct ieee80211com
  type ieee80211_key (line 193) | struct ieee80211_key
  type ieee80211com (line 196) | struct ieee80211com
  type ieee80211com (line 201) | struct ieee80211com
  type ieee80211_key (line 201) | struct ieee80211_key
  type ieee80211com (line 202) | struct ieee80211com
  type ieee80211_key (line 203) | struct ieee80211_key
  type ieee80211com (line 204) | struct ieee80211com
  type ieee80211_key (line 205) | struct ieee80211_key
  type ieee80211_key (line 207) | struct ieee80211_key
  type ieee80211com (line 208) | struct ieee80211com
  type ieee80211_key (line 209) | struct ieee80211_key
  type ieee80211com (line 211) | struct ieee80211com
  type ieee80211_key (line 211) | struct ieee80211_key
  type ieee80211com (line 212) | struct ieee80211com
  type ieee80211_key (line 213) | struct ieee80211_key
  type ieee80211com (line 214) | struct ieee80211com
  type ieee80211_key (line 215) | struct ieee80211_key
  type ieee80211com (line 216) | struct ieee80211com
  type ieee80211_key (line 217) | struct ieee80211_key

FILE: itl80211/openbsd/net80211/ieee80211_crypto_bip.c
  type ieee80211_bip_ctx (line 60) | struct ieee80211_bip_ctx {
  function ieee80211_bip_set_key (line 68) | int
  function ieee80211_bip_delete_key (line 81) | void
  type ieee80211_bip_frame (line 92) | struct ieee80211_bip_frame {
  function mbuf_t (line 99) | mbuf_t
  function mbuf_t (line 167) | mbuf_t

FILE: itl80211/openbsd/net80211/ieee80211_crypto_ccmp.c
  type ieee80211_ccmp_ctx (line 58) | struct ieee80211_ccmp_ctx {
  function ieee80211_ccmp_set_key (line 66) | int
  function ieee80211_ccmp_delete_key (line 79) | void
  function ieee80211_ccmp_phase1 (line 93) | static void
  function mbuf_t (line 178) | mbuf_t
  function ieee80211_ccmp_get_pn (line 322) | int
  function mbuf_t (line 361) | mbuf_t

FILE: itl80211/openbsd/net80211/ieee80211_crypto_tkip.c
  type u_int8_t (line 60) | typedef u_int8_t  byte;
  type u_int16_t (line 61) | typedef u_int16_t u16b;
  type u_int32_t (line 62) | typedef u_int32_t u32b;
  type ieee80211_tkip_ctx (line 68) | struct ieee80211_tkip_ctx {
  function ieee80211_tkip_set_key (line 82) | int
  function ieee80211_tkip_delete_key (line 115) | void
  type ieee80211_tkip_frame (line 126) | struct ieee80211_tkip_frame {
  function ieee80211_tkip_mic (line 139) | void
  function mbuf_t (line 205) | mbuf_t
  function ieee80211_tkip_get_tsc (line 347) | int
  function mbuf_t (line 383) | mbuf_t
  function ieee80211_tkip_deauth (line 545) | static void
  function ieee80211_michael_mic_failure_timeout (line 560) | void
  function ieee80211_michael_mic_failure (line 574) | void
  function Phase1 (line 732) | static void
  function Phase2 (line 776) | static void

FILE: itl80211/openbsd/net80211/ieee80211_crypto_wep.c
  type ieee80211_wep_ctx (line 59) | struct ieee80211_wep_ctx {
  function ieee80211_wep_set_key (line 68) | int
  function ieee80211_wep_delete_key (line 80) | void
  function mbuf_t (line 94) | mbuf_t
  function mbuf_t (line 219) | mbuf_t

FILE: itl80211/openbsd/net80211/ieee80211_input.c
  type ieee80211com (line 71) | struct ieee80211com
  type ieee80211_node (line 72) | struct ieee80211_node
  type ieee80211_rxinfo (line 73) | struct ieee80211_rxinfo
  type ieee80211com (line 74) | struct ieee80211com
  type ieee80211com (line 76) | struct ieee80211com
  type ieee80211_node (line 77) | struct ieee80211_node
  type ieee80211_rxinfo (line 77) | struct ieee80211_rxinfo
  type mbuf_list (line 78) | struct mbuf_list
  type ieee80211com (line 79) | struct ieee80211com
  type ieee80211_node (line 79) | struct ieee80211_node
  type ieee80211_rx_ba (line 80) | struct ieee80211_rx_ba
  type mbuf_list (line 80) | struct mbuf_list
  type ieee80211_rx_ba (line 81) | struct ieee80211_rx_ba
  type ieee80211com (line 83) | struct ieee80211com
  type ieee80211_node (line 84) | struct ieee80211_node
  type mbuf_list (line 84) | struct mbuf_list
  type ieee80211com (line 85) | struct ieee80211com
  type ieee80211_node (line 86) | struct ieee80211_node
  type mbuf_list (line 86) | struct mbuf_list
  type ieee80211com (line 88) | struct ieee80211com
  type ieee80211_node (line 89) | struct ieee80211_node
  type mbuf_list (line 89) | struct mbuf_list
  type ieee80211com (line 90) | struct ieee80211com
  type ieee80211_node (line 91) | struct ieee80211_node
  type ieee80211com (line 92) | struct ieee80211com
  type ieee80211_node (line 93) | struct ieee80211_node
  type mbuf_list (line 93) | struct mbuf_list
  type ieee80211com (line 94) | struct ieee80211com
  type ieee80211_node (line 95) | struct ieee80211_node
  type mbuf_list (line 95) | struct mbuf_list
  type ieee80211com (line 96) | struct ieee80211com
  type ieee80211com (line 98) | struct ieee80211com
  type ieee80211com (line 99) | struct ieee80211com
  type ieee80211_cipher (line 100) | enum    ieee80211_cipher
  type ieee80211_akm (line 101) | enum    ieee80211_akm
  type ieee80211com (line 102) | struct ieee80211com
  type ieee80211_rsnparams (line 103) | struct ieee80211_rsnparams
  type ieee80211com (line 105) | struct ieee80211com
  type ieee80211_node (line 106) | struct ieee80211_node
  type ieee80211_rxinfo (line 106) | struct ieee80211_rxinfo
  type ieee80211com (line 108) | struct ieee80211com
  type ieee80211_node (line 109) | struct ieee80211_node
  type ieee80211_rxinfo (line 109) | struct ieee80211_rxinfo
  type ieee80211com (line 111) | struct ieee80211com
  type ieee80211_node (line 112) | struct ieee80211_node
  type ieee80211_rxinfo (line 112) | struct ieee80211_rxinfo
  type ieee80211com (line 114) | struct ieee80211com
  type ieee80211_node (line 115) | struct ieee80211_node
  type ieee80211_rxinfo (line 115) | struct ieee80211_rxinfo
  type ieee80211com (line 117) | struct ieee80211com
  type ieee80211_node (line 118) | struct ieee80211_node
  type ieee80211com (line 119) | struct ieee80211com
  type ieee80211_node (line 120) | struct ieee80211_node
  type ieee80211com (line 121) | struct ieee80211com
  type ieee80211_node (line 122) | struct ieee80211_node
  type ieee80211com (line 123) | struct ieee80211com
  type ieee80211_node (line 124) | struct ieee80211_node
  type ieee80211com (line 125) | struct ieee80211com
  type ieee80211_node (line 126) | struct ieee80211_node
  type ieee80211com (line 127) | struct ieee80211com
  type ieee80211_node (line 128) | struct ieee80211_node
  type ieee80211com (line 129) | struct ieee80211com
  type ieee80211_node (line 130) | struct ieee80211_node
  type ieee80211com (line 132) | struct ieee80211com
  type ieee80211_node (line 133) | struct ieee80211_node
  type ieee80211com (line 135) | struct ieee80211com
  type ieee80211_node (line 136) | struct ieee80211_node
  type ieee80211com (line 138) | struct ieee80211com
  type ieee80211_node (line 139) | struct ieee80211_node
  type ieee80211com (line 141) | struct ieee80211com
  type ieee80211_node (line 142) | struct ieee80211_node
  type ieee80211com (line 143) | struct ieee80211com
  type ieee80211_node (line 143) | struct ieee80211_node
  function u_int (line 150) | u_int
  function mbuf_t (line 168) | mbuf_t
  function ieee80211_inputm (line 279) | void
  function ieee80211_input (line 722) | void
  function mbuf_t (line 737) | mbuf_t
  function ieee80211_defrag_timeout (line 810) | void
  function ieee80211_input_ba (line 828) | void
  function ieee80211_input_ba_seq (line 918) | void
  function ieee80211_input_ba_flush (line 952) | void
  function ieee80211_input_ba_gap_skip (line 988) | int
  function ieee80211_input_ba_gap_timeout (line 1005) | void
  function ieee80211_ba_move_window (line 1033) | void
  function ieee80211_enqueue_data (line 1064) | void
  function ieee80211_decap (line 1151) | void
  function ieee80211_amsdu_decap_validate (line 1212) | int
  function ieee80211_amsdu_decap (line 1259) | void
  function ieee80211_parse_edca_params_body (line 1353) | int
  function ieee80211_parse_edca_params (line 1389) | int
  function ieee80211_parse_wmm_params (line 1399) | int
  function ieee80211_parse_rsn_cipher (line 1409) | enum ieee80211_cipher
  function ieee80211_parse_rsn_akm (line 1445) | enum ieee80211_akm
  function ieee80211_parse_rsn_body (line 1474) | int
  function ieee80211_parse_rsn (line 1579) | int
  function ieee80211_parse_wpa (line 1590) | int
  function ieee80211_save_ie (line 1604) | int
  function ieee80211_save_ie_tlv (line 1624) | int
  type ieee80211com (line 1658) | struct ieee80211com
  type ieee80211_node (line 1659) | struct ieee80211_node
  type ieee80211_rxinfo (line 1659) | struct ieee80211_rxinfo
  type ieee80211_node (line 1661) | struct ieee80211_node
  type ieee80211_frame (line 1662) | struct ieee80211_frame
  type ieee80211_ie_vhtcap (line 1827) | struct ieee80211_ie_vhtcap
  type ieee80211_ie_vhtcap (line 1828) | struct ieee80211_ie_vhtcap
  type ieee80211_ie_vht_operation (line 1831) | struct ieee80211_ie_vht_operation
  type ieee80211_ie_vht_operation (line 1832) | struct ieee80211_ie_vht_operation
  type ieee80211_htprot (line 1935) | enum ieee80211_htprot
  type ieee80211_htprot (line 1937) | enum ieee80211_htprot
  type ieee80211_htprot (line 1939) | enum ieee80211_htprot
  type ieee80211_rsnparams (line 2025) | struct ieee80211_rsnparams
  type ieee80211_cipher (line 2034) | enum ieee80211_cipher
  type ieee80211_cipher (line 2035) | enum ieee80211_cipher
  function ieee80211_recv_probe_req (line 2144) | void
  function ieee80211_recv_auth (line 2240) | void
  function ieee80211_recv_assoc_req (line 2295) | void
  function ieee80211_recv_assoc_resp (line 2632) | void
  function ieee80211_recv_deauth (line 2853) | void
  function ieee80211_recv_disassoc (line 2919) | void
  function ieee80211_recv_addba_req (line 2979) | void
  function ieee80211_addba_req_accept (line 3111) | void
  function ieee80211_addba_req_refuse (line 3129) | void
  function ieee80211_recv_addba_resp (line 3154) | void
  function ieee80211_addba_resp_accept (line 3231) | void
  function ieee80211_addba_resp_refuse (line 3251) | void
  function ieee80211_recv_delba (line 3268) | void
  function ieee80211_recv_sa_query_req (line 3342) | void
  function ieee80211_recv_sa_query_resp (line 3379) | void
  function ieee80211_recv_action (line 3415) | void
  function ieee80211_recv_mgmt (line 3461) | void
  function ieee80211_recv_pspoll (line 3515) | void
  function ieee80211_recv_bar (line 3568) | void
  function ieee80211_bar_tid (line 3621) | void

FILE: itl80211/openbsd/net80211/ieee80211_ioctl.c
  type ieee80211com (line 67) | struct ieee80211com
  type ieee80211_node (line 68) | struct ieee80211_node
  type ieee80211_nodereq (line 68) | struct ieee80211_nodereq
  type ieee80211com (line 69) | struct ieee80211com
  type ieee80211_nodereq (line 70) | struct ieee80211_nodereq
  type ieee80211_node (line 70) | struct ieee80211_node
  function kernel_copyin (line 72) | static int kernel_copyin(const user_addr_t dest, void *src, size_t len)
  function kernel_copyout (line 78) | static int kernel_copyout(void *src, const user_addr_t dest, size_t len)
  function ieee80211_node2req (line 84) | void
  function ieee80211_req2node (line 179) | void
  function ieee80211_disable_wep (line 207) | void
  function ieee80211_disable_rsn (line 222) | void
  function ieee80211_ioctl_setnwkeys (line 234) | int
  function ieee80211_ioctl_getnwkeys (line 293) | static int
  function ieee80211_ioctl_setwpaparms (line 316) | int
  function ieee80211_ioctl_getwpaparms (line 387) | int
  function ieee80211_ess_getwpaparms (line 431) | void
  function ieee80211_ioctl (line 473) | int

FILE: itl80211/openbsd/net80211/ieee80211_ioctl.h
  type ieee80211_stats (line 54) | struct ieee80211_stats {
  type ieee80211_nwid (line 133) | struct ieee80211_nwid {
  type ieee80211_nwkey (line 142) | struct ieee80211_nwkey {
  type ieee80211_power (line 161) | struct ieee80211_power {
  type ieee80211chanreq (line 174) | struct ieee80211chanreq {
  type ieee80211_channel (line 183) | struct ieee80211_channel {
  type ieee80211_chanreq_all (line 201) | struct ieee80211_chanreq_all {
  type ieee80211_bssid (line 215) | struct ieee80211_bssid {
  type ieee80211_txpower (line 224) | struct ieee80211_txpower {
  type ieee80211_wpapsk (line 236) | struct ieee80211_wpapsk {
  type ieee80211_wpaparams (line 261) | struct ieee80211_wpaparams {
  type ieee80211_keyavail (line 273) | struct ieee80211_keyavail {
  type ieee80211_keyrun (line 280) | struct ieee80211_keyrun {
  type ieee80211_join (line 298) | struct ieee80211_join {
  type ieee80211_joinreq_all (line 308) | struct ieee80211_joinreq_all {
  type ieee80211_nodereq (line 327) | struct ieee80211_nodereq {
  type ieee80211_nodereq_all (line 412) | struct ieee80211_nodereq_all {
  type ieee80211_flags (line 435) | struct ieee80211_flags {
  type ieee80211com (line 453) | struct ieee80211com
  type ieee80211_nwkey (line 454) | struct ieee80211_nwkey
  type ieee80211com (line 457) | struct ieee80211com
  type ieee80211_wpaparams (line 458) | struct ieee80211_wpaparams
  type ieee80211com (line 461) | struct ieee80211com
  type ieee80211_wpaparams (line 462) | struct ieee80211_wpaparams
  type ieee80211_ess (line 465) | struct ieee80211_ess
  type ieee80211_wpaparams (line 466) | struct ieee80211_wpaparams

FILE: itl80211/openbsd/net80211/ieee80211_mira.c
  type ieee80211_ht_rateset (line 51) | struct ieee80211_ht_rateset
  type ieee80211com (line 55) | struct ieee80211com
  type ieee80211_node (line 57) | struct ieee80211_node
  type ieee80211_node (line 58) | struct ieee80211_node
  type ieee80211_mira_node (line 59) | struct ieee80211_mira_node
  type ieee80211com (line 60) | struct ieee80211com
  type ieee80211_node (line 60) | struct ieee80211_node
  type ieee80211_mira_node (line 61) | struct ieee80211_mira_node
  type ieee80211com (line 62) | struct ieee80211com
  type ieee80211_node (line 62) | struct ieee80211_node
  type ieee80211_mira_node (line 63) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 64) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 65) | struct ieee80211_mira_node
  type ieee80211_node (line 66) | struct ieee80211_node
  type ieee80211_mira_node (line 67) | struct ieee80211_mira_node
  type ieee80211_node (line 68) | struct ieee80211_node
  type ieee80211_ht_rateset (line 69) | struct ieee80211_ht_rateset
  type ieee80211_mira_node (line 70) | struct ieee80211_mira_node
  type ieee80211_node (line 70) | struct ieee80211_node
  type ieee80211_mira_node (line 71) | struct ieee80211_mira_node
  type ieee80211_ht_rateset (line 72) | struct ieee80211_ht_rateset
  type ieee80211_mira_node (line 73) | struct ieee80211_mira_node
  type ieee80211_node (line 74) | struct ieee80211_node
  type ieee80211_ht_rateset (line 74) | struct ieee80211_ht_rateset
  type ieee80211_mira_node (line 75) | struct ieee80211_mira_node
  type ieee80211_node (line 76) | struct ieee80211_node
  type ieee80211_mira_node (line 77) | struct ieee80211_mira_node
  type ieee80211_node (line 78) | struct ieee80211_node
  type ieee80211_mira_node (line 79) | struct ieee80211_mira_node
  type ieee80211_node (line 80) | struct ieee80211_node
  type ieee80211_mira_node (line 81) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 83) | struct ieee80211_mira_node
  type ieee80211_node (line 83) | struct ieee80211_node
  type ieee80211_mira_node (line 84) | struct ieee80211_mira_node
  type ieee80211_node (line 85) | struct ieee80211_node
  type ieee80211_mira_node (line 87) | struct ieee80211_mira_node
  type ieee80211_node (line 87) | struct ieee80211_node
  type ieee80211_mira_node (line 88) | struct ieee80211_mira_node
  type ieee80211_node (line 89) | struct ieee80211_node
  type ieee80211_mira_goodput_stats (line 91) | struct ieee80211_mira_goodput_stats
  type ieee80211_mira_node (line 92) | struct ieee80211_mira_node
  type ieee80211_node (line 93) | struct ieee80211_node
  type ieee80211_mira_node (line 94) | struct ieee80211_mira_node
  type ieee80211_node (line 95) | struct ieee80211_node
  type ieee80211_mira_node (line 96) | struct ieee80211_mira_node
  type ieee80211_node (line 97) | struct ieee80211_node
  type ieee80211com (line 98) | struct ieee80211com
  type ieee80211com (line 99) | struct ieee80211com
  type ieee80211_node (line 100) | struct ieee80211_node
  type ieee80211_mira_node (line 101) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 102) | struct ieee80211_mira_node
  type ieee80211com (line 103) | struct ieee80211com
  type ieee80211_node (line 103) | struct ieee80211_node
  type ieee80211_mira_node (line 104) | struct ieee80211_mira_node
  function mira_fixedp_split (line 129) | void
  function mira_print_driver_stats (line 158) | void
  type ieee80211_ht_rateset (line 170) | struct ieee80211_ht_rateset
  type ieee80211_ht_rateset (line 173) | struct ieee80211_ht_rateset
  function ieee80211_mira_probe_timeout_up (line 203) | void
  function ieee80211_mira_probe_timeout_down (line 215) | void
  function ieee80211_mira_get_txrate (line 231) | uint64_t
  function ieee80211_mira_legacy_txtime (line 247) | uint16_t
  function ieee80211_mira_ht_txtime (line 268) | uint32_t
  function ieee80211_mira_best_basic_rate (line 309) | int
  function ieee80211_mira_ack_rate (line 332) | int
  function ieee80211_mira_toverhead (line 351) | uint64_t
  function ieee80211_mira_update_stats (line 412) | void
  function ieee80211_mira_reset_goodput_stats (line 503) | void
  function ieee80211_mira_reset_driver_stats (line 516) | void
  function ieee80211_mira_next_lower_intra_rate (line 547) | int
  function ieee80211_mira_next_intra_rate (line 572) | int
  type ieee80211_ht_rateset (line 597) | struct ieee80211_ht_rateset
  type ieee80211_mira_node (line 598) | struct ieee80211_mira_node
  type ieee80211_node (line 599) | struct ieee80211_node
  type ieee80211_ht_rateset (line 601) | struct ieee80211_ht_rateset
  function ieee80211_mira_best_mcs_in_rateset (line 641) | int
  function ieee80211_mira_probe_next_rateset (line 662) | void
  function ieee80211_mira_next_mcs (line 720) | int
  function ieee80211_mira_prev_mcs (line 736) | int
  function ieee80211_mira_probe_valid (line 752) | int
  function ieee80211_mira_probe_done (line 764) | void
  function ieee80211_mira_intra_mode_ra_finished (line 788) | int
  function ieee80211_mira_trigger_next_rateset (line 860) | void
  function ieee80211_mira_inter_mode_ra_finished (line 874) | int
  function ieee80211_mira_best_rate (line 881) | int
  function ieee80211_mira_update_probe_interval (line 916) | void
  function ieee80211_mira_schedule_probe_timers (line 934) | void
  function ieee80211_mira_check_probe_timers (line 965) | int
  function ieee80211_mira_probe_next_rate (line 1012) | void
  function ieee80211_mira_valid_tx_mcs (line 1021) | int
  function ieee80211_mira_valid_rates (line 1036) | uint32_t
  function ieee80211_mira_mcs_below (line 1053) | uint32_t
  function ieee80211_mira_set_rts_threshold (line 1096) | void
  function ieee80211_mira_get_rts_threshold (line 1133) | int
  function ieee80211_mira_reset_collision_stats (line 1161) | void
  function ieee80211_mira_choose (line 1169) | void
  function ieee80211_mira_node_init (line 1267) | void
  function ieee80211_mira_cancel_timeouts (line 1283) | void
  function ieee80211_mira_node_free (line 1292) | void
  function ieee80211_mira_is_probing (line 1303) | int
  function ieee80211_mira_get_best_mcs (line 1309) | int

FILE: itl80211/openbsd/net80211/ieee80211_mira.h
  type ieee80211_mira_goodput_stats (line 47) | struct ieee80211_mira_goodput_stats {
  type ieee80211_mira_node (line 64) | struct ieee80211_mira_node {
  type ieee80211_mira_node (line 114) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 117) | struct ieee80211_mira_node
  type ieee80211com (line 118) | struct ieee80211com
  type ieee80211_node (line 118) | struct ieee80211_node
  type ieee80211_mira_node (line 121) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 124) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 127) | struct ieee80211_mira_node
  type ieee80211com (line 128) | struct ieee80211com
  type ieee80211_node (line 128) | struct ieee80211_node
  type ieee80211_mira_node (line 129) | struct ieee80211_mira_node
  type ieee80211_mira_node (line 130) | struct ieee80211_mira_node

FILE: itl80211/openbsd/net80211/ieee80211_node.c
  type ieee80211_node (line 72) | struct ieee80211_node
  type ieee80211com (line 72) | struct ieee80211com
  type ieee80211com (line 73) | struct ieee80211com
  type ieee80211_node (line 73) | struct ieee80211_node
  type ieee80211com (line 74) | struct ieee80211com
  type ieee80211_node (line 74) | struct ieee80211_node
  type ieee80211_node (line 75) | struct ieee80211_node
  type ieee80211com (line 76) | struct ieee80211com
  type ieee80211com (line 77) | struct ieee80211com
  type ieee80211_node (line 78) | struct ieee80211_node
  type ieee80211com (line 79) | struct ieee80211com
  type ieee80211_node (line 80) | struct ieee80211_node
  type ieee80211com (line 81) | struct ieee80211com
  type ieee80211_node (line 81) | struct ieee80211_node
  type ieee80211_node (line 82) | struct ieee80211_node
  type ieee80211_node (line 83) | struct ieee80211_node
  type ieee80211com (line 84) | struct ieee80211com
  type ieee80211_node (line 84) | struct ieee80211_node
  type ieee80211_node (line 86) | struct ieee80211_node
  type ieee80211com (line 86) | struct ieee80211com
  type ieee80211com (line 87) | struct ieee80211com
  type ieee80211_node (line 87) | struct ieee80211_node
  type ieee80211_node (line 88) | struct ieee80211_node
  type ieee80211com (line 93) | struct ieee80211com
  type ieee80211_node (line 93) | struct ieee80211_node
  type ieee80211com (line 95) | struct ieee80211com
  type ieee80211_node (line 95) | struct ieee80211_node
  type ieee80211com (line 96) | struct ieee80211com
  type ieee80211_node (line 96) | struct ieee80211_node
  type ieee80211com (line 97) | struct ieee80211com
  type ieee80211_node (line 97) | struct ieee80211_node
  type ieee80211com (line 98) | struct ieee80211com
  type ieee80211_node (line 98) | struct ieee80211_node
  type ieee80211com (line 99) | struct ieee80211com
  type ieee80211_node (line 99) | struct ieee80211_node
  type ieee80211com (line 100) | struct ieee80211com
  type ieee80211_node (line 100) | struct ieee80211_node
  type ieee80211com (line 101) | struct ieee80211com
  type ieee80211_node (line 101) | struct ieee80211_node
  type ieee80211com (line 105) | struct ieee80211com
  function ieee80211_inact_timeout (line 108) | void
  function ieee80211_node_cache_timeout (line 129) | void
  function ieee80211_print_ess (line 142) | void
  function ieee80211_print_ess_list (line 183) | void
  type ieee80211_ess (line 195) | struct ieee80211_ess
  type ieee80211com (line 196) | struct ieee80211com
  type ieee80211_ess (line 198) | struct ieee80211_ess
  function ieee80211_del_ess (line 209) | void
  function ieee80211_ess_setnwkeys (line 233) | static int
  function ieee80211_ess_setwpaparms (line 277) | static int
  function ieee80211_ess_clear_wep (line 349) | static void
  function ieee80211_ess_clear_wpa (line 362) | static void
  function ieee80211_add_ess (line 373) | int
  function ieee80211_ess_adjust_rssi (line 443) | uint8_t
  function ieee80211_ess_calculate_score (line 466) | int
  function ieee80211_ess_is_better (line 520) | int
  function ieee80211_match_ess (line 548) | int
  function ieee80211_switch_ess (line 591) | void
  function ieee80211_set_ess (line 664) | void
  function ieee80211_deselect_ess (line 703) | void
  function ieee80211_node_attach (line 712) | void
  type ieee80211_node (line 760) | struct ieee80211_node
  type ieee80211com (line 761) | struct ieee80211com
  type ieee80211_node (line 763) | struct ieee80211_node
  function ieee80211_node_lateattach (line 772) | void
  function ieee80211_node_detach (line 789) | void
  function ieee80211_reset_scan (line 823) | void
  function ieee80211_node_raise_inact (line 842) | void
  function ieee80211_begin_scan (line 852) | void
  function ieee80211_next_scan (line 901) | void
  function ieee80211_create_ibss (line 934) | void
  function ieee80211_match_bss (line 1051) | int
  type ieee80211_node_switch_bss_arg (line 1183) | struct ieee80211_node_switch_bss_arg {
  function ieee80211_node_switch_bss (line 1189) | void
  function ieee80211_node_join_bss (line 1232) | void
  type ieee80211_node (line 1319) | struct ieee80211_node
  type ieee80211com (line 1320) | struct ieee80211com
  type ieee80211_node (line 1321) | struct ieee80211_node
  type ieee80211_node (line 1324) | struct ieee80211_node
  function ieee80211_end_scan (line 1395) | void
  function ieee80211_choose_rsnparams (line 1577) | void
  function ieee80211_get_rate (line 1630) | int
  type ieee80211_node (line 1648) | struct ieee80211_node
  type ieee80211com (line 1649) | struct ieee80211com
  type ieee80211_node (line 1651) | struct ieee80211_node
  type ieee80211_node (line 1651) | struct ieee80211_node
  function ieee80211_node_cleanup (line 1654) | void
  function ieee80211_node_free (line 1682) | void
  function ieee80211_node_copy (line 1689) | void
  function u_int8_t (line 1709) | u_int8_t
  function ieee80211_node_checkrssi (line 1716) | int
  function ieee80211_node_set_timeouts (line 1738) | void
  function ieee80211_setup_node (line 1760) | void
  type ieee80211_node (line 1786) | struct ieee80211_node
  type ieee80211com (line 1787) | struct ieee80211com
  type ieee80211_node (line 1789) | struct ieee80211_node
  type ieee80211_node (line 1797) | struct ieee80211_node
  type ieee80211com (line 1798) | struct ieee80211com
  type ieee80211_node (line 1801) | struct ieee80211_node
  type ieee80211_node (line 1814) | struct ieee80211_node
  type ieee80211com (line 1815) | struct ieee80211com
  type ieee80211_node (line 1817) | struct ieee80211_node
  type ieee80211_node (line 1841) | struct ieee80211_node
  type ieee80211com (line 1842) | struct ieee80211com
  type ieee80211_node (line 1845) | struct ieee80211_node
  function ieee80211_needs_rxnode (line 1914) | static __inline int
  type ieee80211_node (line 1982) | struct ieee80211_node
  type ieee80211com (line 1983) | struct ieee80211com
  type ieee80211_frame (line 1984) | struct ieee80211_frame
  type ieee80211_node (line 1987) | struct ieee80211_node
  function ieee80211_ba_del (line 2022) | void
  function ieee80211_ba_free (line 2053) | void ieee80211_ba_free(struct ieee80211_node *ni)
  function ieee80211_free_node (line 2074) | void
  function ieee80211_release_node (line 2105) | void
  function ieee80211_free_allnodes (line 2127) | void
  function ieee80211_clean_cached (line 2152) | void
  function ieee80211_clean_sta_bss_node (line 2168) | void
  function ieee80211_clean_nodes (line 2201) | void
  function ieee80211_clean_inactive_nodes (line 2334) | void
  function ieee80211_iterate_nodes (line 2358) | void
  function ieee80211_setup_htcaps (line 2375) | void
  function ieee80211_clear_htcaps (line 2423) | void
  function ieee80211_setup_htop (line 2444) | int
  function ieee80211_setup_vhtopmode (line 2471) | void
  function ieee80211_setup_vhtcaps (line 2492) | void
  function ieee80211_clear_vhtcaps (line 2777) | void
  function ieee80211_setup_hecaps (line 2789) | void
  function ieee80211_setup_heop (line 2821) | int
  function ieee80211_setup_rates (line 2839) | int
  function ieee80211_node_trigger_addba_req (line 2867) | void
  function ieee80211_node_addba_request (line 2877) | void
  function ieee80211_node_addba_request_ac_be_to (line 2886) | void
  function ieee80211_node_addba_request_ac_bk_to (line 2893) | void
  function ieee80211_node_addba_request_ac_vi_to (line 2900) | void
  function ieee80211_node_addba_request_ac_vo_to (line 2907) | void
  function ieee80211_iserp_sta (line 2918) | int
  function ieee80211_needs_auth (line 2946) | void
  function ieee80211_node_join_ht (line 2959) | void
  function ieee80211_node_join_rsn (line 2976) | void
  function ieee80211_count_longslotsta (line 3012) | void
  function ieee80211_count_nonerpsta (line 3024) | void
  function ieee80211_count_pssta (line 3036) | void
  function ieee80211_count_rekeysta (line 3048) | void
  function ieee80211_node_join_11g (line 3063) | void
  function ieee80211_node_join (line 3106) | void
  function ieee80211_node_leave_vht (line 3172) | void
  function ieee80211_node_leave_ht (line 3181) | void
  function ieee80211_node_leave_rsn (line 3207) | void
  function ieee80211_node_leave_11g (line 3237) | void
  function ieee80211_node_leave (line 3283) | void
  function ieee80211_do_slow_print (line 3338) | static int
  function ieee80211_ibss_merge (line 3367) | int
  function ieee80211_set_tim (line 3440) | void
  function ieee80211_notify_dtim (line 3453) | void
  function ieee80211_node_cmp (line 3481) | int
  function ieee80211_ess_cmp (line 3491) | int

FILE: itl80211/openbsd/net80211/ieee80211_node.h
  type ieee80211_rateset (line 61) | struct ieee80211_rateset {
  type ieee80211_rateset (line 66) | struct ieee80211_rateset
  type ieee80211_rateset (line 67) | struct ieee80211_rateset
  type ieee80211_rateset (line 68) | struct ieee80211_rateset
  type ieee80211_ht_rateset (line 95) | struct ieee80211_ht_rateset {
  type ieee80211_ht_rateset (line 113) | struct ieee80211_ht_rateset
  type ieee80211_vht_rateset (line 140) | struct ieee80211_vht_rateset {
  type ieee80211_vht_rateset (line 150) | struct ieee80211_vht_rateset
  type ieee80211_he_rateset (line 168) | struct ieee80211_he_rateset {
  type ieee80211_he_rateset (line 176) | struct ieee80211_he_rateset
  type ieee80211_node_state (line 178) | enum ieee80211_node_state {
  type ieee80211_node_psstate (line 195) | enum ieee80211_node_psstate {
  type ieee80211_rxinfo (line 234) | struct ieee80211_rxinfo {
  type ieee80211_tx_ba (line 246) | struct ieee80211_tx_ba {
  type ieee80211_ba_buf (line 272) | struct ieee80211_ba_buf {
  type ieee80211_rx_ba (line 277) | struct ieee80211_rx_ba {
  type ieee80211_node (line 313) | struct ieee80211_node {
  type ieee80211_ess_rbt (line 506) | struct ieee80211_ess_rbt {
  function ieee80211_node_incref (line 517) | static inline void
  function u_int (line 527) | static inline u_int
  type ieee80211_node (line 539) | struct ieee80211_node
  type ieee80211_node (line 540) | struct ieee80211_node
  function ieee80211_unref_node (line 546) | static inline void
  function ieee80211_node_supports_ht (line 558) | static inline int
  function ieee80211_node_supports_vht (line 565) | static inline int
  function ieee80211_node_supports_ht_sgi20 (line 572) | static inline int
  function ieee80211_node_supports_ht_sgi40 (line 580) | static inline int
  function ieee80211_node_supports_ht_chan40 (line 588) | static inline int
  function ieee80211_node_supports_vht_sgi80 (line 596) | static inline int
  function ieee80211_node_supports_vht_sgi160 (line 603) | static inline int
  function ieee80211_node_supports_sgi (line 610) | static inline int
  type ieee80211com (line 643) | struct ieee80211com
  type ieee80211_node (line 645) | struct ieee80211_node
  type _ifnet (line 647) | struct _ifnet
  type _ifnet (line 648) | struct _ifnet
  type _ifnet (line 649) | struct _ifnet
  type _ifnet (line 651) | struct _ifnet
  type _ifnet (line 652) | struct _ifnet
  type _ifnet (line 653) | struct _ifnet
  type _ifnet (line 654) | struct _ifnet
  type ieee80211_node (line 655) | struct ieee80211_node
  type ieee80211com (line 655) | struct ieee80211com
  type ieee80211_node (line 657) | struct ieee80211_node
  type ieee80211com (line 657) | struct ieee80211com
  type ieee80211_node (line 659) | struct ieee80211_node
  type ieee80211com (line 659) | struct ieee80211com
  type ieee80211_node (line 661) | struct ieee80211_node
  type ieee80211_node (line 662) | struct ieee80211_node
  type ieee80211_node (line 663) | struct ieee80211_node
  type ieee80211com (line 663) | struct ieee80211com
  type ieee80211_frame (line 664) | struct ieee80211_frame
  type ieee80211_node (line 665) | struct ieee80211_node
  type ieee80211com (line 665) | struct ieee80211com
  type ieee80211com (line 667) | struct ieee80211com
  type ieee80211_node (line 668) | struct ieee80211_node
  type ieee80211com (line 669) | struct ieee80211com
  type ieee80211_node (line 669) | struct ieee80211_node
  type ieee80211com (line 670) | struct ieee80211com
  type ieee80211com (line 671) | struct ieee80211com
  type ieee80211com (line 673) | struct ieee80211com
  type ieee80211com (line 674) | struct ieee80211com
  type ieee80211com (line 675) | struct ieee80211com
  type ieee80211_node (line 676) | struct ieee80211_node
  type ieee80211_node (line 678) | struct ieee80211_node
  type ieee80211_node (line 679) | struct ieee80211_node
  type ieee80211com (line 681) | struct ieee80211com
  type ieee80211_node (line 681) | struct ieee80211_node
  type ieee80211_node (line 682) | struct ieee80211_node
  type ieee80211_node (line 683) | struct ieee80211_node
  type ieee80211_node (line 684) | struct ieee80211_node
  type ieee80211_node (line 686) | struct ieee80211_node
  type ieee80211com (line 688) | struct ieee80211com
  type ieee80211_node (line 689) | struct ieee80211_node
  type ieee80211_node (line 690) | struct ieee80211_node
  type ieee80211_node (line 691) | struct ieee80211_node
  type ieee80211_node (line 692) | struct ieee80211_node
  type ieee80211_node (line 693) | struct ieee80211_node
  type ieee80211_node (line 694) | struct ieee80211_node
  type ieee80211_node (line 695) | struct ieee80211_node
  type ieee80211com (line 696) | struct ieee80211com
  type ieee80211_node (line 697) | struct ieee80211_node
  type ieee80211com (line 698) | struct ieee80211com
  type ieee80211_node (line 699) | struct ieee80211_node
  type ieee80211com (line 700) | struct ieee80211com
  type ieee80211_node (line 700) | struct ieee80211_node
  type ieee80211_node (line 701) | struct ieee80211_node
  type ieee80211com (line 701) | struct ieee80211com
  type ieee80211_node (line 702) | struct ieee80211_node
  type ieee80211com (line 703) | struct ieee80211com
  type ieee80211_node (line 703) | struct ieee80211_node
  type ieee80211com (line 704) | struct ieee80211com
  type ieee80211_channel (line 705) | struct ieee80211_channel
  type ieee80211com (line 706) | struct ieee80211com
  type ieee80211com (line 707) | struct ieee80211com
  type ieee80211com (line 708) | struct ieee80211com
  type ieee80211_node (line 708) | struct ieee80211_node
  type ieee80211_node (line 710) | struct ieee80211_node
  type ieee80211_node (line 711) | struct ieee80211_node
  type ieee80211_ess_rbt (line 712) | struct ieee80211_ess_rbt
  type ieee80211_ess_rbt (line 713) | struct ieee80211_ess_rbt

FILE: itl80211/openbsd/net80211/ieee80211_output.c
  type _ifnet (line 77) | struct _ifnet
  type ieee80211_node (line 77) | struct ieee80211_node
  type ieee80211com (line 79) | struct ieee80211com
  type ieee80211_node (line 80) | struct ieee80211_node
  type ieee80211com (line 81) | struct ieee80211com
  type ieee80211_node (line 82) | struct ieee80211_node
  type ieee80211com (line 84) | struct ieee80211com
  type ieee80211_node (line 85) | struct ieee80211_node
  type ieee80211com (line 87) | struct ieee80211com
  type ieee80211_node (line 88) | struct ieee80211_node
  type ieee80211com (line 90) | struct ieee80211com
  type ieee80211_node (line 91) | struct ieee80211_node
  type ieee80211com (line 92) | struct ieee80211com
  type ieee80211_node (line 93) | struct ieee80211_node
  type ieee80211com (line 94) | struct ieee80211com
  type ieee80211_node (line 95) | struct ieee80211_node
  type ieee80211com (line 97) | struct ieee80211com
  type ieee80211_node (line 98) | struct ieee80211_node
  type ieee80211com (line 100) | struct ieee80211com
  type ieee80211_node (line 101) | struct ieee80211_node
  type ieee80211com (line 102) | struct ieee80211com
  type ieee80211_node (line 103) | struct ieee80211_node
  type ieee80211com (line 104) | struct ieee80211com
  type ieee80211_node (line 105) | struct ieee80211_node
  type ieee80211com (line 106) | struct ieee80211com
  type ieee80211_node (line 107) | struct ieee80211_node
  type ieee80211com (line 108) | struct ieee80211com
  type ieee80211com (line 110) | struct ieee80211com
  type ieee80211com (line 112) | struct ieee80211com
  type ieee80211_node (line 113) | struct ieee80211_node
  type ieee80211com (line 114) | struct ieee80211com
  type ieee80211_node (line 115) | struct ieee80211_node
  function ieee80211_output (line 123) | int
  type ieee80211_frame (line 173) | struct ieee80211_frame
  function ieee80211_mgmt_output (line 191) | int
  type ieee80211_edca_ac_params (line 311) | struct ieee80211_edca_ac_params
  type ieee80211_edca_ac_params (line 346) | struct ieee80211_edca_ac_params
  function ieee80211_up_to_ac (line 385) | enum ieee80211_edca_ac
  function ieee80211_classify (line 438) | int
  function ieee80211_can_use_ampdu (line 489) | int
  function ieee80211_tx_compressed_bar (line 509) | void
  function mbuf_t (line 536) | mbuf_t
  function u_int8_t (line 740) | u_int8_t *
  function u_int8_t (line 772) | u_int8_t *
  function u_int8_t (line 784) | u_int8_t *
  function u_int8_t (line 800) | u_int8_t *
  function u_int8_t (line 813) | u_int8_t *
  function u_int8_t (line 850) | u_int8_t *
  function u_int8_t (line 862) | u_int8_t *
  function u_int8_t (line 890) | u_int8_t *
  function u_int8_t (line 928) | u_int8_t *
  type ieee80211com (line 945) | struct ieee80211com
  type ieee80211_wme_info (line 947) | struct ieee80211_wme_info
  type ieee80211_wme_info (line 949) | struct ieee80211_wme_info
  type ieee80211com (line 965) | struct ieee80211com
  type ieee80211_edca_ac_params (line 967) | struct ieee80211_edca_ac_params
  type ieee80211_edca_ac_params (line 982) | struct ieee80211_edca_ac_params
  function u_int8_t (line 998) | u_int8_t *
  function u_int8_t (line 1120) | u_int8_t *
  function u_int8_t (line 1139) | u_int8_t *
  function u_int8_t (line 1159) | u_int8_t *
  type ieee80211com (line 1174) | struct ieee80211com
  type ieee80211_node (line 1174) | struct ieee80211_node
  type ieee80211com (line 1226) | struct ieee80211com
  type ieee80211_ie_htcap (line 1229) | struct ieee80211_ie_htcap
  type ieee80211com (line 1246) | struct ieee80211com
  type ieee80211_ie_vhtcap (line 1249) | struct ieee80211_ie_vhtcap
  type ieee80211com (line 1261) | struct ieee80211com
  function u_int8_t (line 1317) | u_int8_t *
  function u_int8_t (line 1335) | u_int8_t *
  function mbuf_t (line 1346) | mbuf_t
  function mbuf_t (line 1375) | mbuf_t
  function mbuf_t (line 1427) | mbuf_t
  function mbuf_t (line 1496) | mbuf_t
  function mbuf_t (line 1522) | mbuf_t
  function mbuf_t (line 1552) | mbuf_t
  function mbuf_t (line 1656) | mbuf_t
  function mbuf_t (line 1711) | mbuf_t
  function mbuf_t (line 1738) | mbuf_t
  function ieee80211_output_ba_move_window (line 1766) | void
  function ieee80211_output_ba_move_window_to_first_unacked (line 1788) | void
  function ieee80211_output_ba_record_ack (line 1810) | void
  function mbuf_t (line 1838) | mbuf_t
  function mbuf_t (line 1881) | mbuf_t
  function mbuf_t (line 1915) | mbuf_t
  function mbuf_t (line 1938) | mbuf_t
  function ieee80211_send_mgmt (line 1979) | int
  function mbuf_t (line 2088) | mbuf_t
  function mbuf_t (line 2117) | mbuf_t
  function mbuf_t (line 2144) | mbuf_t
  function mbuf_t (line 2206) | mbuf_t
  function ieee80211_pwrsave (line 2294) | int

FILE: itl80211/openbsd/net80211/ieee80211_pae_input.c
  type ieee80211com (line 57) | struct ieee80211com
  type ieee80211_eapol_key (line 58) | struct ieee80211_eapol_key
  type ieee80211_node (line 58) | struct ieee80211_node
  type ieee80211com (line 60) | struct ieee80211com
  type ieee80211_eapol_key (line 61) | struct ieee80211_eapol_key
  type ieee80211_node (line 61) | struct ieee80211_node
  type ieee80211_key (line 64) | struct ieee80211_key
  type ieee80211com (line 66) | struct ieee80211com
  type ieee80211_eapol_key (line 67) | struct ieee80211_eapol_key
  type ieee80211_node (line 67) | struct ieee80211_node
  type ieee80211com (line 69) | struct ieee80211com
  type ieee80211_eapol_key (line 70) | struct ieee80211_eapol_key
  type ieee80211_node (line 70) | struct ieee80211_node
  type ieee80211com (line 71) | struct ieee80211com
  type ieee80211_eapol_key (line 72) | struct ieee80211_eapol_key
  type ieee80211_node (line 72) | struct ieee80211_node
  type ieee80211com (line 74) | struct ieee80211com
  type ieee80211_eapol_key (line 75) | struct ieee80211_eapol_key
  type ieee80211_node (line 75) | struct ieee80211_node
  type ieee80211com (line 76) | struct ieee80211com
  type ieee80211_eapol_key (line 77) | struct ieee80211_eapol_key
  type ieee80211_node (line 77) | struct ieee80211_node
  type ieee80211com (line 79) | struct ieee80211com
  type ieee80211_eapol_key (line 80) | struct ieee80211_eapol_key
  type ieee80211_node (line 80) | struct ieee80211_node
  type ieee80211com (line 81) | struct ieee80211com
  type ieee80211_eapol_key (line 82) | struct ieee80211_eapol_key
  type ieee80211_node (line 82) | struct ieee80211_node
  function ieee80211_eapol_key_input (line 89) | void
  function ieee80211_recv_4way_msg1 (line 201) | void
  function ieee80211_recv_4way_msg2 (line 298) | void
  function ieee80211_must_update_group_key (line 366) | int
  function ieee80211_recv_4way_msg3 (line 378) | void
  function ieee80211_recv_4way_msg4 (line 711) | void
  function ieee80211_recv_4way_msg2or4 (line 784) | void
  function ieee80211_recv_rsn_group_msg1 (line 832) | void
  function ieee80211_recv_wpa_group_msg1 (line 999) | void
  function ieee80211_recv_group_msg2 (line 1106) | void
  function ieee80211_recv_eapol_key_req (line 1160) | void

FILE: itl80211/openbsd/net80211/ieee80211_pae_output.c
  type ieee80211com (line 59) | struct ieee80211com
  type ieee80211_node (line 60) | struct ieee80211_node
  type ieee80211_ptk (line 60) | struct ieee80211_ptk
  type ieee80211_node (line 62) | struct ieee80211_node
  type ieee80211_key (line 63) | struct ieee80211_key
  type ieee80211_key (line 66) | struct ieee80211_key
  function ieee80211_send_eapol_key (line 74) | int
  function ieee80211_eapol_timeout (line 155) | void
  function u_int8_t (line 189) | u_int8_t *
  function u_int8_t (line 215) | u_int8_t *
  function u_int8_t (line 229) | u_int8_t *
  function mbuf_t (line 245) | mbuf_t
  function ieee80211_send_4way_msg1 (line 275) | int
  function ieee80211_send_4way_msg2 (line 334) | int
  function ieee80211_send_4way_msg3 (line 389) | int
  function ieee80211_send_4way_msg4 (line 470) | int
  function ieee80211_send_group_msg1 (line 517) | int
  function ieee80211_send_group_msg2 (line 599) | int
  function ieee80211_send_eapol_key_req (line 645) | int

FILE: itl80211/openbsd/net80211/ieee80211_priv.h
  type ieee80211_rsnparams (line 78) | struct ieee80211_rsnparams {

FILE: itl80211/openbsd/net80211/ieee80211_proto.c
  type ieee80211com (line 95) | struct ieee80211com
  type ieee80211com (line 96) | struct ieee80211com
  type ieee80211_state (line 96) | enum ieee80211_state
  function ieee80211_proto_attach (line 98) | void
  function ieee80211_proto_detach (line 122) | void
  function ieee80211_print_essid (line 132) | void
  function ieee80211_dump_pkt (line 159) | void
  function ieee80211_fix_rate (line 220) | int
  function ieee80211_reset_erp (line 327) | void
  function ieee80211_set_shortslottime (line 358) | void
  function ieee80211_keyrun (line 375) | int
  function ieee80211_node_gtk_rekey (line 430) | static void
  function ieee80211_setkeys (line 449) | void
  function ieee80211_setkeysdone (line 487) | void
  function ieee80211_gtk_rekey_timeout (line 520) | void
  function ieee80211_sa_query_timeout (line 534) | void
  function ieee80211_sa_query_request (line 554) | void
  function ieee80211_ht_negotiate_chw (line 574) | void
  function ieee80211_ht_negotiate (line 603) | void
  function ieee80211_vht_negotiate (line 670) | void
  function ieee80211_he_negotiate (line 823) | void
  function ieee80211_sta_set_rx_nss (line 950) | void
  function ieee80211_tx_ba_timeout (line 1024) | void
  function ieee80211_rx_ba_timeout (line 1057) | void
  function ieee80211_addba_request (line 1080) | int
  function ieee80211_delba_request (line 1131) | void
  function ieee80211_auth_open_confirm (line 1177) | void
  function ieee80211_try_another_bss (line 1194) | void
  function ieee80211_auth_open (line 1236) | void
  function ieee80211_set_beacon_miss_threshold (line 1338) | void
  function ieee80211_stop_ampdu_tx (line 1361) | void
  function ieee80211_check_wpa_supplicant_failure (line 1376) | void
  type ieee80211com (line 1404) | struct ieee80211com
  type ieee80211_state (line 1404) | enum ieee80211_state
  type _ifnet (line 1407) | struct _ifnet
  type ieee80211_node (line 1408) | struct ieee80211_node
  type ieee80211_state (line 1409) | enum ieee80211_state
  type ieee80211_akm (line 1687) | enum ieee80211_akm
  function ieee80211_set_link_state (line 1713) | void

FILE: itl80211/openbsd/net80211/ieee80211_proto.h
  type ieee80211_state (line 53) | enum ieee80211_state {
  type _ifnet (line 73) | struct _ifnet
  type _ifnet (line 74) | struct _ifnet
  type ieee80211_node (line 76) | struct ieee80211_node
  type ieee80211_rxinfo (line 77) | struct ieee80211_rxinfo
  type ieee80211_rsnparams (line 78) | struct ieee80211_rsnparams
  type ieee80211com (line 79) | struct ieee80211com
  type ieee80211_frame (line 80) | struct ieee80211_frame
  type ieee80211com (line 81) | struct ieee80211com
  type _ifnet (line 82) | struct _ifnet
  type ieee80211_node (line 83) | struct ieee80211_node
  type ieee80211_rxinfo (line 83) | struct ieee80211_rxinfo
  type mbuf_list (line 84) | struct mbuf_list
  type _ifnet (line 85) | struct _ifnet
  type ieee80211_node (line 86) | struct ieee80211_node
  type ieee80211_rxinfo (line 86) | struct ieee80211_rxinfo
  type _ifnet (line 87) | struct _ifnet
  type sockaddr (line 87) | struct sockaddr
  type rtentry (line 88) | struct rtentry
  type ieee80211com (line 89) | struct ieee80211com
  type ieee80211_node (line 90) | struct ieee80211_node
  type ieee80211_rxinfo (line 90) | struct ieee80211_rxinfo
  type ieee80211com (line 91) | struct ieee80211com
  type ieee80211_node (line 91) | struct ieee80211_node
  type ieee80211com (line 93) | struct ieee80211com
  type ieee80211_node (line 94) | struct ieee80211_node
  type ieee80211com (line 95) | struct ieee80211com
  type ieee80211_node (line 96) | struct ieee80211_node
  type _ifnet (line 97) | struct _ifnet
  type ieee80211_node (line 98) | struct ieee80211_node
  type ieee80211com (line 99) | struct ieee80211com
  type ieee80211_frame (line 100) | struct ieee80211_frame
  type ieee80211com (line 101) | struct ieee80211com
  type ieee80211com (line 103) | struct ieee80211com
  type ieee80211_node (line 104) | struct ieee80211_node
  type ieee80211com (line 105) | struct ieee80211com
  type ieee80211_node (line 106) | struct ieee80211_node
  type ieee80211com (line 110) | struct ieee80211com
  type ieee80211_node (line 111) | struct ieee80211_node
  type ieee80211com (line 112) | struct ieee80211com
  type ieee80211_node (line 113) | struct ieee80211_node
  type ieee80211_ptk (line 114) | struct ieee80211_ptk
  type ieee80211com (line 115) | struct ieee80211com
  type ieee80211_node (line 116) | struct ieee80211_node
  type ieee80211com (line 117) | struct ieee80211com
  type ieee80211_node (line 118) | struct ieee80211_node
  type ieee80211com (line 119) | struct ieee80211com
  type ieee80211_node (line 120) | struct ieee80211_node
  type ieee80211com (line 121) | struct ieee80211com
  type ieee80211_node (line 122) | struct ieee80211_node
  type ieee80211_key (line 122) | struct ieee80211_key
  type ieee80211com (line 123) | struct ieee80211com
  type ieee80211_node (line 124) | struct ieee80211_node
  type ieee80211com (line 125) | struct ieee80211com
  type ieee80211_node (line 126) | struct ieee80211_node
  type ieee80211_edca_ac (line 132) | enum ieee80211_edca_ac
  type ieee80211com (line 132) | struct ieee80211com
  type ieee80211com (line 133) | struct ieee80211com
  type ieee80211_node (line 134) | struct ieee80211_node
  type ieee80211_rateset (line 137) | struct ieee80211_rateset
  type ieee80211com (line 138) | struct ieee80211com
  type ieee80211_node (line 139) | struct ieee80211_node
  type ieee80211com (line 140) | struct ieee80211com
  type ieee80211_node (line 141) | struct ieee80211_node
  type ieee80211com (line 142) | struct ieee80211com
  type ieee80211_node (line 144) | struct ieee80211_node
  type ieee80211com (line 145) | struct ieee80211com
  type ieee80211com (line 146) | struct ieee80211com
  type ieee80211com (line 148) | struct ieee80211com
  type ieee80211com (line 149) | struct ieee80211com
  type ieee80211_node (line 150) | struct ieee80211_node
  type ieee80211com (line 151) | struct ieee80211com
  type ieee80211_node (line 152) | struct ieee80211_node
  type ieee80211_rateset (line 154) | struct ieee80211_rateset
  type ieee80211com (line 155) | struct ieee80211com
  type ieee80211com (line 156) | struct ieee80211com
  type ieee80211com (line 158) | struct ieee80211com
  type ieee80211com (line 159) | struct ieee80211com
  type ieee80211com (line 160) | struct ieee80211com
  type ieee80211_rsnparams (line 161) | struct ieee80211_rsnparams
  type ieee80211com (line 162) | struct ieee80211com
  type ieee80211_rsnparams (line 163) | struct ieee80211_rsnparams
  type ieee80211com (line 168) | struct ieee80211com
  type ieee80211_node (line 169) | struct ieee80211_node
  type ieee80211com (line 170) | struct ieee80211com
  type ieee80211com (line 171) | struct ieee80211com
  type ieee80211com (line 172) | struct ieee80211com
  type ieee80211_node (line 173) | struct ieee80211_node
  type ieee80211com (line 174) | struct ieee80211com
  type ieee80211_frame (line 175) | struct ieee80211_frame
  type ieee80211_node (line 175) | struct ieee80211_node
  type ieee80211_rxinfo (line 176) | struct ieee80211_rxinfo
  type ieee80211com (line 177) | struct ieee80211com
  type ieee80211_node (line 178) | struct ieee80211_node
  type ieee80211com (line 180) | struct ieee80211com
  type ieee80211com (line 181) | struct ieee80211com
  type ieee80211com (line 182) | struct ieee80211com
  type ieee80211com (line 184) | struct ieee80211com
  type ieee80211_node (line 185) | struct ieee80211_node
  type ieee80211com (line 186) | struct ieee80211com
  type ieee80211_node (line 187) | struct ieee80211_node
  type ieee80211com (line 188) | struct ieee80211com
  type ieee80211_node (line 189) | struct ieee80211_node
  type ieee80211com (line 190) | struct ieee80211com
  type ieee80211_node (line 191) | struct ieee80211_node
  type ieee80211com (line 192) | struct ieee80211com
  type ieee80211_node (line 193) | struct ieee80211_node
  type ieee80211com (line 194) | struct ieee80211com
  type ieee80211_node (line 194) | struct ieee80211_node
  type ieee80211com (line 197) | struct ieee80211com
  type ieee80211_node (line 198) | struct ieee80211_node
  type ieee80211com (line 199) | struct ieee80211com
  type ieee80211_node (line 200) | struct ieee80211_node
  type ieee80211com (line 201) | struct ieee80211com
  type ieee80211_node (line 202) | struct ieee80211_node
  type ieee80211com (line 203) | struct ieee80211com
  type ieee80211_node (line 204) | struct ieee80211_node
  type ieee80211com (line 205) | struct ieee80211com
  type ieee80211_node (line 206) | struct ieee80211_node
  type ieee80211com (line 207) | struct ieee80211com
  type ieee80211_node (line 208) | struct ieee80211_node
  type ieee80211com (line 209) | struct ieee80211com
  type ieee80211_node (line 210) | struct ieee80211_node
  type ieee80211com (line 212) | struct ieee80211com
  type ieee80211_node (line 212) | struct ieee80211_node
  type ieee80211com (line 213) | struct ieee80211com
  type ieee80211_node (line 214) | struct ieee80211_node

FILE: itl80211/openbsd/net80211/ieee80211_ra.c
  type ieee80211_ra_node (line 45) | struct ieee80211_ra_node
  type ieee80211com (line 45) | struct ieee80211com
  type ieee80211_node (line 46) | struct ieee80211_node
  type ieee80211_ra_rate (line 47) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 48) | struct ieee80211_ra_node
  type ieee80211com (line 48) | struct ieee80211com
  type ieee80211_node (line 48) | struct ieee80211_node
  type ieee80211_ra_node (line 49) | struct ieee80211_ra_node
  type ieee80211_ra_rate (line 50) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 51) | struct ieee80211_ra_node
  type ieee80211com (line 51) | struct ieee80211com
  type ieee80211_node (line 52) | struct ieee80211_node
  type ieee80211_ra_rate (line 52) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 53) | struct ieee80211_ra_node
  type ieee80211com (line 53) | struct ieee80211com
  type ieee80211_node (line 54) | struct ieee80211_node
  type ieee80211_ra_node (line 55) | struct ieee80211_ra_node
  type ieee80211_ra_node (line 57) | struct ieee80211_ra_node
  type ieee80211com (line 57) | struct ieee80211com
  type ieee80211_node (line 57) | struct ieee80211_node
  type ieee80211_ra_node (line 58) | struct ieee80211_ra_node
  type ieee80211com (line 58) | struct ieee80211com
  type ieee80211_node (line 59) | struct ieee80211_node
  type ieee80211_ra_node (line 61) | struct ieee80211_ra_node
  type ieee80211_node (line 61) | struct ieee80211_node
  type ieee80211_ra_node (line 62) | struct ieee80211_ra_node
  type ieee80211_node (line 63) | struct ieee80211_node
  type ieee80211_ra_node (line 64) | struct ieee80211_ra_node
  type ieee80211com (line 64) | struct ieee80211com
  type ieee80211_node (line 65) | struct ieee80211_node
  type ieee80211_node (line 66) | struct ieee80211_node
  type ieee80211com (line 67) | struct ieee80211com
  type ieee80211_node (line 68) | struct ieee80211_node
  type ieee80211_ra_goodput_stats (line 69) | struct ieee80211_ra_goodput_stats
  function ra_fixedp_split (line 94) | void
  function is_ht (line 124) | static int is_ht(struct ieee80211_node *ni)
  function is_vht (line 129) | static int is_vht(struct ieee80211_node *ni)
  function is_he (line 134) | static int is_he(struct ieee80211_node *ni)
  function support_nss (line 139) | static int support_nss(struct ieee80211_node *ni)
  function build_rateset (line 161) | static void build_rateset(struct ieee80211_ra_node *rn, enum ieee80211_p...
  type ieee80211_ra_rate (line 257) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 258) | struct ieee80211_ra_node
  type ieee80211com (line 258) | struct ieee80211com
  type ieee80211_node (line 258) | struct ieee80211_node
  type ieee80211_ra_rate (line 262) | struct ieee80211_ra_rate
  type ieee80211_ra_rate (line 268) | struct ieee80211_ra_rate
  function ieee80211_ra_use_ht_sgi (line 281) | int
  function ieee80211_ra_get_txrate (line 298) | uint64_t
  function ieee80211_ra_next_lower_intra_rate (line 320) | int
  function ieee80211_ra_next_intra_rate (line 344) | int
  type ieee80211_ra_rate (line 368) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 369) | struct ieee80211_ra_node
  type ieee80211com (line 369) | struct ieee80211com
  type ieee80211_node (line 370) | struct ieee80211_node
  type ieee80211_ra_rate (line 372) | struct ieee80211_ra_rate
  function ieee80211_ra_best_mcs_in_rateset (line 417) | int
  function ieee80211_ra_probe_next_rateset (line 438) | void
  function ieee80211_ra_next_mcs (line 494) | int
  function ieee80211_ra_probe_clear (line 510) | void
  function ieee80211_ra_probe_valid (line 520) | int
  function ieee80211_ra_probe_done (line 535) | void
  function ieee80211_ra_intra_mode_ra_finished (line 544) | int
  function ieee80211_ra_trigger_next_rateset (line 612) | void
  function ieee80211_ra_inter_mode_ra_finished (line 626) | int
  function ieee80211_ra_best_rate (line 633) | int
  function ieee80211_ra_probe_next_rate (line 667) | void
  function ieee80211_ra_valid_tx_mcs (line 676) | int
  function ieee80211_ra_vht_highest_rx_mcs (line 698) | int
  function ieee80211_ra_valid_rx_mcs (line 710) | int
  function ieee80211_ra_valid_rates (line 729) | uint32_t
  function ieee80211_ra_add_stats_ht (line 748) | void
  function ieee80211_ra_choose (line 809) | void
  function ieee80211_ra_node_init (line 907) | void

FILE: itl80211/openbsd/net80211/ieee80211_ra.h
  type ieee80211_ra_goodput_stats (line 40) | struct ieee80211_ra_goodput_stats {
  type ieee80211_ra_rate (line 52) | struct ieee80211_ra_rate {
  type ieee80211_ra_node (line 69) | struct ieee80211_ra_node {
  type ieee80211com (line 101) | struct ieee80211com
  type ieee80211_ra_node (line 101) | struct ieee80211_ra_node
  type ieee80211_node (line 101) | struct ieee80211_node
  type ieee80211_ra_node (line 109) | struct ieee80211_ra_node
  type ieee80211com (line 110) | struct ieee80211com
  type ieee80211_node (line 110) | struct ieee80211_node
  type ieee80211_ra_node (line 114) | struct ieee80211_ra_node
  type ieee80211com (line 115) | struct ieee80211com
  type ieee80211_node (line 115) | struct ieee80211_node
  type ieee80211_ra_rate (line 118) | struct ieee80211_ra_rate
  type ieee80211_ra_node (line 118) | struct ieee80211_ra_node
  type ieee80211com (line 118) | struct ieee80211com
  type ieee80211_node (line 119) | struct ieee80211_node
  type ieee80211_node (line 121) | struct ieee80211_node

FILE: itl80211/openbsd/net80211/ieee80211_radiotap.h
  type ieee80211_radiotap_header (line 67) | struct ieee80211_radiotap_header {
  type ieee80211_radiotap_type (line 177) | enum ieee80211_radiotap_type {

FILE: itl80211/openbsd/net80211/ieee80211_regdomain.c
  type ieee80211_regdomainname (line 59) | struct ieee80211_regdomainname
  type ieee80211_regdomainmap (line 62) | struct ieee80211_regdomainmap
  type ieee80211_countryname (line 65) | struct ieee80211_countryname
  function ieee80211_regdomain_compare_cn (line 94) | int
  function ieee80211_regdomain_compare_rn (line 101) | int
  function u_int16_t (line 108) | u_int16_t
  function u_int32_t (line 121) | u_int32_t
  function u_int32_t (line 166) | u_int32_t
  function u_int32_t (line 187) | u_int32_t

FILE: itl80211/openbsd/net80211/ieee80211_regdomain.h
  type u_int32_t (line 35) | typedef u_int32_t ieee80211_regdomain_t;
  type ieee80211_regdomain (line 37) | enum ieee80211_regdomain {
  type ieee80211_regdomainname (line 117) | struct ieee80211_regdomainname {
  type ieee80211_regdomainmap (line 199) | struct ieee80211_regdomainmap {
  type ieee80211_countrycode (line 257) | enum ieee80211_countrycode {
  type ieee80211_countryname (line 376) | struct ieee80211_countryname {
  type ieee80211_ctl (line 501) | enum ieee80211_ctl {
  type ieee80211_regchannel (line 516) | struct ieee80211_regchannel {

FILE: itl80211/openbsd/net80211/ieee80211_rssadapt.c
  type timeval (line 67) | struct timeval
  type ieee80211_rssadapt_expavgctl (line 85) | struct ieee80211_rssadapt_expavgctl
  function ieee80211_rssadapt_choose (line 94) | int
  function ieee80211_rssadapt_updatestats (line 148) | void
  function ieee80211_rssadapt_input (line 165) | void
  function ieee80211_rssadapt_lower_rate (line 187) | void
  function ieee80211_rssadapt_raise_rate (line 227) | void

FILE: itl80211/openbsd/net80211/ieee80211_rssadapt.h
  type ieee80211_rssadapt_expavgctl (line 63) | struct ieee80211_rssadapt_expavgctl {
  type ieee80211_rssadapt (line 75) | struct ieee80211_rssadapt {
  type ieee80211_rssdesc (line 92) | struct ieee80211_rssdesc {
  type ieee80211_rssadapt (line 101) | struct ieee80211_rssadapt
  type ieee80211com (line 102) | struct ieee80211com
  type ieee80211_node (line 103) | struct ieee80211_node
  type ieee80211_rssadapt (line 103) | struct ieee80211_rssadapt
  type ieee80211com (line 104) | struct ieee80211com
  type ieee80211_node (line 105) | struct ieee80211_node
  type ieee80211_rssadapt (line 105) | struct ieee80211_rssadapt
  type ieee80211_rssdesc (line 106) | struct ieee80211_rssdesc
  type ieee80211com (line 107) | struct ieee80211com
  type ieee80211_rssadapt (line 108) | struct ieee80211_rssadapt
  type ieee80211_rssdesc (line 108) | struct ieee80211_rssdesc
  type ieee80211_rssadapt (line 109) | struct ieee80211_rssadapt
  type ieee80211_rateset (line 110) | struct ieee80211_rateset
  type ieee80211_frame (line 110) | struct ieee80211_frame

FILE: itl80211/openbsd/net80211/ieee80211_var.h
  type kmod_info (line 92) | struct kmod_info
  type kmod_info (line 94) | struct kmod_info
  function ppsratecheck (line 101) | static int
  function ratecheck (line 155) | static int
  function u_int32_t (line 178) | static u_int32_t ether_crc32_le_update(u_int32_t crc, const u_int8_t *bu...
  function array_sprintf (line 204) | static void array_sprintf(char *output, uint8_t output_size, const uint8...
  type ieee80211_phytype (line 240) | enum ieee80211_phytype {
  type ieee80211_phymode (line 248) | enum ieee80211_phymode {
  type ieee80211_opmode (line 259) | enum ieee80211_opmode {
  type ieee80211_protmode (line 272) | enum ieee80211_protmode {
  type ieee80211_channel (line 281) | struct ieee80211_channel {
  type ieee80211_edca_ac_params (line 366) | struct ieee80211_edca_ac_params {
  type ieee80211_edca_ac_params (line 376) | struct ieee80211_edca_ac_params
  type ieee80211_edca_ac_params (line 378) | struct ieee80211_edca_ac_params
  type ieee80211_defrag (line 385) | struct ieee80211_defrag {
  type ieee80211com (line 403) | struct ieee80211com {
  type ieee80211_ess (line 576) | struct ieee80211_ess {
  type _ifnet (line 666) | struct _ifnet
  type _ifnet (line 667) | struct _ifnet
  type _ifnet (line 668) | struct _ifnet
  type _ifnet (line 669) | struct _ifnet
  type _ifnet (line 670) | struct _ifnet
  type _ifnet (line 671) | struct _ifnet
  type ifmediareq (line 671) | struct ifmediareq
  type _ifnet (line 672) | struct _ifnet
  type ieee80211com (line 673) | struct ieee80211com
  type _ifnet (line 674) | struct _ifnet
  type ieee80211com (line 675) | struct ieee80211com
  type ieee80211_node (line 675) | struct ieee80211_node
  type ieee80211com (line 676) | struct ieee80211com
  type ieee80211_phymode (line 677) | enum ieee80211_phymode
  type ieee80211com (line 679) | struct ieee80211com
  type ieee80211_phymode (line 680) | enum ieee80211_phymode
  type ieee80211_phymode (line 682) | enum ieee80211_phymode
  type ieee80211_phymode (line 683) | enum ieee80211_phymode
  type ieee80211com (line 685) | struct ieee80211com
  type ieee80211_channel (line 686) | struct ieee80211_channel
  type ieee80211com (line 688) | struct ieee80211com
  type ieee80211com (line 689) | struct ieee80211com
  type ieee80211com (line 690) | struct ieee80211com
  type ieee80211_phymode (line 690) | enum ieee80211_phymode
  type ieee80211_phymode (line 691) | enum ieee80211_phymode
  type _ifnet (line 691) | struct _ifnet
  type ieee80211_phymode (line 692) | enum ieee80211_phymode
  type ieee80211com (line 692) | struct ieee80211com
  type ieee80211_channel (line 693) | struct ieee80211_channel
  type ieee80211com (line 694) | struct ieee80211com
  type ieee80211com (line 695) | struct ieee80211com
  type ieee80211com (line 696) | struct ieee80211com
  type ieee80211_join (line 696) | struct ieee80211_join
  type ieee80211com (line 697) | struct ieee80211com
  type ieee80211com (line 698) | struct ieee80211com
  type ieee80211_ess (line 698) | struct ieee80211_ess
  type ieee80211_node (line 699) | struct ieee80211_node
  type ieee80211com (line 700) | struct ieee80211com
  type ieee80211_ess (line 701) | struct ieee80211_ess
  type ieee80211com (line 701) | struct ieee80211com
  type _ifnet (line 702) | struct _ifnet

FILE: itl80211/openbsd/net80211/timeout.c
  function splnet (line 32) | int splnet()
  function splx (line 37) | void splx(int s)
  function timeout_set (line 41) | void timeout_set(CTimeout **t, void (*fn)(void *), void *arg)
  function timeout_add_msec (line 46) | int timeout_add_msec(CTimeout **to, int msecs)
  function timeout_add_sec (line 51) | int timeout_add_sec(CTimeout **to, int secs)
  function timeout_add_usec (line 56) | int timeout_add_usec(CTimeout **to, int usecs)
  function timeout_del (line 61) | int timeout_del(CTimeout **to)
  function timeout_free (line 67) | int timeout_free(CTimeout **to)
  function timeout_pending (line 72) | int timeout_pending(CTimeout **to)
  function timeout_initialized (line 77) | int timeout_initialized(CTimeout **to)

FILE: itl80211/openbsd/sys/CTimeout.hpp
  class CTimeout (line 29) | class CTimeout : public OSObject {

FILE: itl80211/openbsd/sys/_arc4random.h
  function u_int32_t (line 38) | static inline u_int32_t arc4random()
  function arc4random_buf (line 45) | static inline void arc4random_buf(void *buf, size_t n)
  function u_int32_t (line 50) | static inline u_int32_t arc4random_uniform(u_int32_t upper_bound)

FILE: itl80211/openbsd/sys/_if_ether.h
  type if_status_description (line 106) | struct if_status_description {
  type ether_multi (line 153) | struct ether_multi {
  type _ifnet (line 160) | struct _ifnet {                /* and the entries */
  type arpcom (line 249) | struct  arpcom {
  function if_setlladdr (line 266) | static inline int
  function if_attach (line 273) | static inline int
  function if_detach (line 280) | static inline int
  function ether_ifattach (line 287) | static inline int
  function ether_ifdetach (line 293) | static inline void

FILE: itl80211/openbsd/sys/_if_media.h
  type ifmediareq (line 80) | struct ifmediareq {
  type _ifnet (line 93) | struct _ifnet
  type _ifnet (line 94) | struct _ifnet
  type ifmediareq (line 94) | struct ifmediareq
  type ifmedia_entry (line 99) | struct ifmedia_entry {
  type ifmedia (line 110) | struct ifmedia {
  function ifmedia_init (line 121) | static inline void ifmedia_init(struct ifmedia *ifm, uint64_t dontcare_m...
  function ifmedia_add (line 474) | static inline void
  type ifmedia_baudrate (line 825) | struct ifmedia_baudrate {
  function ifmedia_delete_instance (line 1008) | static inline void ifmedia_delete_instance(struct ifmedia *ifm, uint64_t...
  type ifmedia_entry (line 1025) | struct ifmedia_entry
  type ifmedia (line 1026) | struct ifmedia
  type ifmedia_entry (line 1028) | struct ifmedia_entry
  function ifmedia_set (line 1051) | static inline void ifmedia_set(struct ifmedia *ifm, uint64_t target)

FILE: itl80211/openbsd/sys/_ifq.cpp
  function ifq_init (line 11) | void ifq_init(struct _ifqueue *ifq, struct _ifnet *ifp, unsigned int max...
  function ifq_destroy (line 20) | void ifq_destroy(struct _ifqueue *ifq)
  function ifq_flush (line 28) | void ifq_flush(struct _ifqueue *ifq)
  function ifq_empty (line 34) | bool ifq_empty(struct _ifqueue *ifq)
  function ifq_len (line 39) | uint32_t ifq_len(struct _ifqueue *ifq)
  function ifq_set_maxlen (line 44) | void ifq_set_maxlen(struct _ifqueue *ifq, uint32_t maxLen)
  function ifq_set_oactive (line 49) | void ifq_set_oactive(struct _ifqueue *ifq)
  function ifq_is_oactive (line 54) | unsigned int ifq_is_oactive(struct _ifqueue *ifq)
  function ifq_clr_oactive (line 59) | void ifq_clr_oactive(struct _ifqueue *ifq)
  function mbuf_t (line 64) | mbuf_t ifq_dequeue(struct _ifqueue *ifq)
  function ifq_enqueue (line 69) | int ifq_enqueue(struct _ifqueue *ifq, mbuf_t m)

FILE: itl80211/openbsd/sys/_ifq.h
  type _ifqueue (line 27) | struct _ifqueue {
  type _ifqueue (line 32) | struct _ifqueue
  type _ifnet (line 32) | struct _ifnet
  type _ifqueue (line 34) | struct _ifqueue
  type _ifqueue (line 36) | struct _ifqueue
  type _ifqueue (line 38) | struct _ifqueue
  type _ifqueue (line 40) | struct _ifqueue
  type _ifqueue (line 42) | struct _ifqueue
  type _ifqueue (line 44) | struct _ifqueue
  type _ifqueue (line 46) | struct _ifqueue
  type _ifqueue (line 48) | struct _ifqueue
  type _ifqueue (line 50) | struct _ifqueue
  type _ifqueue (line 52) | struct _ifqueue

FILE: itl80211/openbsd/sys/_malloc.h
  function free (line 40) | static inline void

FILE: itl80211/openbsd/sys/_mbuf.cpp
  type network_header (line 30) | struct network_header {
  function IOReturn (line 34) | static IOReturn _if_input(OSObject *target, void *arg0, void *arg1, void...
  function if_input (line 63) | int if_input(struct _ifnet *ifq, struct mbuf_list *ml)

FILE: itl80211/openbsd/sys/_mbuf.h
  type mbuf_list (line 92) | struct mbuf_list {
  type mbuf_queue (line 98) | struct mbuf_queue {
  function ml_init (line 114) | static inline void
  function ml_enqueue (line 121) | static inline void
  function ml_enlist (line 135) | static inline void
  function mbuf_t (line 150) | static inline mbuf_t
  function mbuf_t (line 168) | static inline mbuf_t
  function ml_purge (line 180) | static inline unsigned int
  function mq_init (line 201) | static inline void
  function mq_enqueue (line 209) | static inline int
  function mbuf_t (line 232) | static inline mbuf_t
  function mq_enlist (line 244) | static inline int
  function mq_delist (line 268) | static inline void
  function mbuf_t (line 277) | static inline mbuf_t
  function mq_purge (line 289) | static inline unsigned int
  function m_cat (line 309) | static inline void
  function m_defrag (line 336) | static inline int
  function m_dup_pkthdr (line 392) | static inline int
  function mbuf_t (line 398) | static inline mbuf_t
  type _ifnet (line 442) | struct _ifnet
  type mbuf_list (line 442) | struct mbuf_list
  function if_enqueue (line 444) | static inline int if_enqueue(struct _ifnet *ifq, mbuf_t m)

FILE: itl80211/openbsd/sys/_netstat.h
  function net80211_ifstats (line 23) | static inline void

FILE: itl80211/openbsd/sys/_task.cpp
  type ETQ_STATE (line 29) | enum ETQ_STATE {
  type taskq (line 35) | struct taskq {
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  type taskq (line 49) | struct taskq
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  type taskq (line 58) | struct taskq
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  function taskq_next_work (line 60) | int
  function taskq_thread (line 91) | void
  function taskq_create_thread (line 133) | void taskq_create_thread(void *arg)
  function taskq_init (line 191) | void
  type taskq (line 201) | struct taskq
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  type taskq (line 205) | struct taskq
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  type taskq (line 207) | struct taskq
    type ETQ_STATE (line 36) | enum ETQ_STATE
    type task_list (line 44) | struct task_list
  function taskq_destroy (line 228) | void
  function task_set (line 266) | void
  function task_add (line 275) | int
  function task_del (line 304) | int

FILE: itl80211/openbsd/sys/_task.h
  type task (line 30) | struct task {
  type taskq (line 49) | struct taskq
  type taskq (line 52) | struct taskq
  type taskq (line 53) | struct taskq
  type taskq (line 54) | struct taskq
  type taskq (line 56) | struct taskq
  type task (line 56) | struct task
  type task (line 58) | struct task
  type taskq (line 59) | struct taskq
  type task (line 59) | struct task
  type taskq (line 60) | struct taskq
  type task (line 60) | struct task

FILE: itl80211/openbsd/sys/arp.c
  type hnamemem (line 55) | struct hnamemem {
  type enamemem (line 61) | struct enamemem {
  type hnamemem (line 71) | struct hnamemem
  type enamemem (line 72) | struct enamemem
  type hnamemem (line 74) | struct hnamemem
  type hnamemem (line 77) | struct hnamemem
  type hnamemem (line 78) | struct hnamemem
  type hnamemem (line 83) | struct hnamemem
  type hnamemem (line 149) | struct hnamemem
  type ether_addr (line 198) | struct ether_addr
  type enamemem (line 210) | struct enamemem
  type enamemem (line 214) | struct enamemem
  type enamemem (line 231) | struct enamemem
  type enamemem (line 239) | struct enamemem
  type ether_addr (line 240) | struct ether_addr
  function debug_print_arp (line 252) | void

FILE: itl80211/openbsd/sys/endian.h
  function __uint16_t (line 63) | static __inline __uint16_t
  function __uint32_t (line 69) | static __inline __uint32_t
  function __uint64_t (line 75) | static __inline __uint64_t
  function be16dec (line 259) | static __inline uint16_t
  function be32dec (line 267) | static __inline uint32_t
  function be64dec (line 275) | static __inline uint64_t
  function le16dec (line 283) | static __inline uint16_t
  function le32dec (line 291) | static __inline uint32_t
  function le64dec (line 299) | static __inline uint64_t
  function be16enc (line 307) | static __inline void
  function be32enc (line 316) | static __inline void
  function be64enc (line 327) | static __inline void
  function le16enc (line 336) | static __inline void
  function le32enc (line 345) | static __inline void
  function le64enc (line 356) | static __inline void

FILE: itl80211/openbsd/sys/pcireg.h
  type u_int16_t (line 53) | typedef u_int16_t pci_vendor_id_t;
  type u_int16_t (line 54) | typedef u_int16_t pci_product_id_t;
  type u_int8_t (line 113) | typedef u_int8_t pci_class_t;
  type u_int8_t (line 114) | typedef u_int8_t pci_subclass_t;
  type u_int8_t (line 115) | typedef u_int8_t pci_interface_t;
  type u_int8_t (line 116) | typedef u_int8_t pci_revision_t;
  type u_int8_t (line 651) | typedef u_int8_t pci_intr_pin_t;
  type u_int8_t (line 652) | typedef u_int8_t pci_intr_line_t;
  type pci_vpd_smallres (line 684) | struct pci_vpd_smallres {
  type pci_vpd_largeres (line 689) | struct pci_vpd_largeres {
  type pci_vpd (line 710) | struct pci_vpd {

FILE: itl80211/openbsd/sys/tree.h
  type type (line 74) | struct type
  function __unused (line 123) | static __unused __inline struct type *					\
  function __unused (line 134) | static __unused __inline struct type *					\
  function __unused (line 148) | static __unused __inline struct type *					\
  function _SPLAY_MINMAX (line 242) | void name##_SPLAY_MINMAX(struct name *head, int __comp) \
  type type (line 310) | struct type
  type type (line 311) | struct type
  type name (line 591) | struct name
  type type (line 593) | struct type
  type type (line 594) | struct type
  type name (line 622) | struct name
  type type (line 624) | struct type
  type name (line 640) | struct name
  type type (line 642) | struct type
  type type (line 643) | struct type
  type type (line 661) | struct type
  type type (line 683) | struct type
  type name (line 704) | struct name
  type type (line 706) | struct type
  type type (line 707) | struct type
  type rb_type (line 767) | struct rb_type {
  type rb_tree (line 773) | struct rb_tree {
  type rb_entry (line 777) | struct rb_entry {
  function _rb_init (line 791) | static inline void
  function _rb_empty (line 797) | static inline int
  type rb_type (line 803) | struct rb_type
  type rb_tree (line 803) | struct rb_tree
  type rb_type (line 804) | struct rb_type
  type rb_tree (line 804) | struct rb_tree
  type rb_type (line 805) | struct rb_type
  type rb_tree (line 805) | struct rb_tree
  type rb_type (line 806) | struct rb_type
  type rb_tree (line 806) | struct rb_tree
  type rb_type (line 807) | struct rb_type
  type rb_tree (line 807) | struct rb_tree
  type rb_type (line 808) | struct rb_type
  type rb_tree (line 808) | struct rb_tree
  type rb_type (line 809) | struct rb_type
  type rb_tree (line 809) | struct rb_tree
  type rb_type (line 810) | struct rb_type
  type rb_type (line 811) | struct rb_type
  type rb_type (line 812) | struct rb_type
  type rb_type (line 813) | struct rb_type
  type rb_type (line 814) | struct rb_type
  type rb_type (line 815) | struct rb_type
  type rb_type (line 816) | struct rb_type
  type rb_type (line 817) | struct rb_type
  type rb_type (line 818) | struct rb_type
  type rb_type (line 819) | struct rb_type

FILE: itl80211/zutil.c
  type z_mem (line 11) | typedef struct z_mem
  function zcfree (line 34) | void zcfree(void *opaque, void *ptr)

FILE: itlwm/ItlNetworkUserClient.cpp
  function IOReturn (line 59) | IOReturn ItlNetworkUserClient::clientClose()
  function IOReturn (line 67) | IOReturn ItlNetworkUserClient::clientDied()
  function IOReturn (line 79) | IOReturn ItlNetworkUserClient::externalMethod(uint32_t selector, IOExter...
  function IOReturn (line 94) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 107) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 198) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 218) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 232) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 273) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 315) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 321) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 330) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 347) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 356) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 364) | IOReturn ItlNetworkUserClient::
  function IOReturn (line 403) | IOReturn ItlNetworkUserClient::

FILE: itlwm/ItlNetworkUserClient.hpp
  class ItlNetworkUserClient (line 27) | class ItlNetworkUserClient : public IOUserClient {
    type _ifnet (line 61) | struct _ifnet

FILE: itlwm/hal_iwm/ItlIwm.cpp
  type _ifnet (line 23) | struct _ifnet
  type iwm_softc (line 24) | struct iwm_softc
  function IOReturn (line 91) | IOReturn ItlIwm::
  function IOReturn (line 106) | IOReturn ItlIwm::
  type ieee80211com (line 119) | struct ieee80211com
  function ItlDriverInfo (line 125) | ItlDriverInfo *ItlIwm::
  function ItlDriverController (line 131) | ItlDriverController *ItlIwm::
  function IOReturn (line 143) | IOReturn ItlIwm::
  function UInt32 (line 189) | UInt32 ItlIwm::

FILE: itlwm/hal_iwm/ItlIwm.hpp
  class ItlIwm (line 36) | class ItlIwm : public ItlHalService, ItlDriverInfo, ItlDriverController {
    type ieee80211com (line 46) | struct ieee80211com
    type _ifnet (line 53) | struct _ifnet
    type iwm_softc (line 54) | struct iwm_softc
    type iwm_softc (line 84) | struct iwm_softc
    type iwm_softc (line 87) | struct iwm_softc
    type iwm_softc (line 88) | struct iwm_softc
    type iwm_softc (line 89) | struct iwm_softc
    type iwm_softc (line 90) | struct iwm_softc
    type ieee80211_node (line 90) | struct ieee80211_node
    type ieee80211_frame (line 91) | struct ieee80211_frame
    type iwm_softc (line 94) | struct iwm_softc
    type iwm_scan_channel_cfg_umac (line 95) | struct iwm_scan_channel_cfg_umac
    type iwm_softc (line 98) | struct iwm_softc
    type ieee80211_node (line 98) | struct ieee80211_node
    type iwm_softc (line 99) | struct iwm_softc
    type ieee80211_frame (line 99) | struct ieee80211_frame
    type iwm_softc (line 100) | struct iwm_softc
    type iwm_softc (line 101) | struct iwm_softc
    type ieee80211_node (line 101) | struct ieee80211_node
    type iwm_softc (line 102) | struct iwm_softc
    type iwm_softc (line 103) | struct iwm_softc
    type iwm_softc (line 105) | struct iwm_softc
    type iwm_softc (line 106) | struct iwm_softc
    type iwm_softc (line 107) | struct iwm_softc
    type iwm_ucode_type (line 107) | enum iwm_ucode_type
    type iwm_softc (line 109) | struct iwm_softc
    type iwm_fw_info (line 110) | struct iwm_fw_info
    type iwm_softc (line 111) | struct iwm_softc
    type iwm_ucode_type (line 111) | enum iwm_ucode_type
    type iwm_softc (line 112) | struct iwm_softc
    type iwm_softc (line 113) | struct iwm_softc
    type iwm_softc (line 114) | struct iwm_softc
    type iwm_softc (line 115) | struct iwm_softc
    type iwm_softc (line 116) | struct iwm_softc
    type iwm_softc (line 117) | struct iwm_softc
    type iwm_softc (line 118) | struct iwm_softc
    type iwm_softc (line 119) | struct iwm_softc
    type iwm_softc (line 120) | struct iwm_softc
    type iwm_softc (line 121) | struct iwm_softc
    type iwm_softc (line 122) | struct iwm_softc
    type iwm_softc (line 123) | struct iwm_softc
    type iwm_softc (line 124) | struct iwm_softc
    type iwm_softc (line 126) | struct iwm_softc
    type iwm_softc (line 127) | struct iwm_softc
    type iwm_dma_info (line 128) | struct iwm_dma_info
    type iwm_dma_info (line 129) | struct iwm_dma_info
    type iwm_softc (line 130) | struct iwm_softc
    type iwm_rx_ring (line 130) | struct iwm_rx_ring
    type iwm_softc (line 131) | struct iwm_softc
    type iwm_softc (line 132) | struct iwm_softc
    type iwm_rx_ring (line 132) | struct iwm_rx_ring
    type iwm_softc (line 133) | struct iwm_softc
    type iwm_rx_ring (line 133) | struct iwm_rx_ring
    type iwm_softc (line 134) | struct iwm_softc
    type iwm_tx_ring (line 134) | struct iwm_tx_ring
    type iwm_softc (line 135) | struct iwm_softc
    type iwm_tx_ring (line 135) | struct iwm_tx_ring
    type iwm_softc (line 136) | struct iwm_softc
    type iwm_tx_ring (line 136) | struct iwm_tx_ring
    type iwm_softc (line 137) | struct iwm_softc
    type iwm_softc (line 138) | struct iwm_softc
    type iwm_softc (line 139) | struct iwm_softc
    type iwm_softc (line 140) | struct iwm_softc
    type iwm_softc (line 141) | struct iwm_softc
    type iwm_softc (line 142) | struct iwm_softc
    type iwm_softc (line 143) | struct iwm_softc
    type iwm_softc (line 144) | struct iwm_softc
    type iwm_softc (line 145) | struct iwm_softc
    type iwm_softc (line 146) | struct iwm_softc
    type iwm_softc (line 147) | struct iwm_softc
    type iwm_softc (line 148) | struct iwm_softc
    type iwm_softc (line 149) | struct iwm_softc
    type iwm_softc (line 150) | struct iwm_softc
    type iwm_softc (line 151) | struct iwm_softc
    type iwm_softc (line 152) | struct iwm_softc
    type iwm_softc (line 153) | struct iwm_softc
    type iwm_softc (line 154) | struct iwm_softc
    type iwm_softc (line 155) | struct iwm_softc
    type iwm_softc (line 156) | struct iwm_softc
    type iwm_softc (line 157) | struct iwm_softc
    type iwm_softc (line 158) | struct iwm_softc
    type iwm_softc (line 159) | struct iwm_softc
    type iwm_softc (line 160) | struct iwm_softc
    type iwm_softc (line 161) | struct iwm_softc
    type iwm_softc (line 162) | struct iwm_softc
    type iwm_softc (line 163) | struct iwm_softc
    type iwm_softc (line 164) | struct iwm_softc
    type iwm_softc (line 165) | struct iwm_softc
    type iwm_softc (line 166) | struct iwm_softc
    type iwm_phy_db_entry (line 167) | struct iwm_phy_db_entry
    type iwm_softc (line 167) | struct iwm_softc
    type iwm_softc (line 169) | struct iwm_softc
    type iwm_calib_res_notif_phy_db (line 170) | struct iwm_calib_res_notif_phy_db
    type iwm_softc (line 174) | struct iwm_softc
    type iwm_softc (line 175) | struct iwm_softc
    type iwm_softc (line 177) | struct iwm_softc
    type iwm_softc (line 178) | struct iwm_softc
    type iwm_softc (line 180) | struct iwm_softc
    type iwm_time_event_cmd_v2 (line 181) | struct iwm_time_event_cmd_v2
    type iwm_time_event_cmd_v1 (line 182) | struct iwm_time_event_cmd_v1
    type iwm_softc (line 183) | struct iwm_softc
    type iwm_time_event_cmd (line 184) | struct iwm_time_event_cmd
    type iwm_softc (line 185) | struct iwm_softc
    type iwm_node (line 185) | struct iwm_node
    type iwm_softc (line 187) | struct iwm_softc
    type iwm_node (line 187) | struct iwm_node
    type iwm_softc (line 188) | struct iwm_softc
    type iwm_softc (line 190) | struct iwm_softc
    type iwm_softc (line 192) | struct iwm_softc
    type iwm_softc (line 194) | struct iwm_softc
    type iwm_softc (line 195) | struct iwm_softc
    type iwm_softc (line 196) | struct iwm_softc
    type ieee80211com (line 199) | struct ieee80211com
    type ieee80211com (line 200) | struct ieee80211com
    type ieee80211com (line 201) | struct ieee80211com
    type ieee80211com (line 202) | struct ieee80211com
    type iwm_reorder_buffer (line 203) | struct iwm_reorder_buffer
    type iwm_softc (line 205) | struct iwm_softc
    type iwm_rxba_data (line 205) | struct iwm_rxba_data
    type ieee80211com (line 206) | struct ieee80211com
    type ieee80211_node (line 206) | struct ieee80211_node
    type ieee80211com (line 208) | struct ieee80211com
    type ieee80211_node (line 208) | struct ieee80211_node
    type iwm_softc (line 213) | struct iwm_softc
    type ieee80211_node (line 213) | struct ieee80211_node
    type ieee80211com (line 215) | struct ieee80211com
    type ieee80211_node (line 215) | struct ieee80211_node
    type ieee80211com (line 217) | struct ieee80211com
    type ieee80211_node (line 217) | struct ieee80211_node
    type ieee80211com (line 219) | struct ieee80211com
    type iwm_softc (line 220) | struct iwm_softc
    type ieee80211_node (line 220) | struct ieee80211_node
    type iwm_softc (line 224) | struct iwm_softc
    type iwm_softc (line 228) | struct iwm_softc
    type iwm_nvm_data (line 228) | struct iwm_nvm_data
    type iwm_softc (line 230) | struct iwm_softc
    type iwm_nvm_section (line 230) | struct iwm_nvm_section
    type iwm_softc (line 231) | struct iwm_softc
    type iwm_softc (line 232) | struct iwm_softc
    type iwm_softc (line 234) | struct iwm_softc
    type iwm_softc (line 236) | struct iwm_softc
    type iwm_ucode_type (line 236) | enum iwm_ucode_type
    type iwm_softc (line 237) | struct iwm_softc
    type iwm_fw_sects (line 237) | struct iwm_fw_sects
    type iwm_softc (line 239) | struct iwm_softc
    type iwm_ucode_type (line 239) | enum iwm_ucode_type
    type iwm_softc (line 240) | struct iwm_softc
    type iwm_ucode_type (line 240) | enum iwm_ucode_type
    type iwm_softc (line 241) | struct iwm_softc
    type iwm_ucode_type (line 241) | enum iwm_ucode_type
    type iwm_softc (line 242) | struct iwm_softc
    type iwm_softc (line 243) | struct iwm_softc
    type iwm_softc (line 244) | struct iwm_softc
    type iwm_ucode_type (line 244) | enum iwm_ucode_type
    type iwm_softc (line 245) | struct iwm_softc
    type iwm_softc (line 246) | struct iwm_softc
    type iwm_softc (line 247) | struct iwm_softc
    type iwm_softc (line 248) | struct iwm_softc
    type iwm_softc (line 249) | struct iwm_softc
   
Condensed preview — 246 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,655K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/Bug.md",
    "chars": 880,
    "preview": "---\nname: Bug report\nabout: Report a bug\nlabels: ''\nassignees: ''\n---\n\n<!---WARNING!!! YOUR ISSUE WILL BE CLOSED AND DEL"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 2894,
    "preview": "name: CD\n\non:\n  push:\n    branches: master\n\nenv:\n  BUILD_OUTPUT: 'build/Build/Products/Debug'\n\njobs:\n\n  build:\n    \n    "
  },
  {
    "path": ".gitignore",
    "chars": 91,
    "preview": ".DS_Store\nDerivedData\nbuild\nxcuserdata\nproject.xcworkspace\nFwBinary.cpp\n*.pyc\nMacKernelSDK\n"
  },
  {
    "path": "AirportItlwm/AirportAWDL.cpp",
    "chars": 2190,
    "preview": "//\n//  AirportAWDL.cpp\n//  AirportItlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All rights reserv"
  },
  {
    "path": "AirportItlwm/AirportItlwm-Monterey-Info.plist",
    "chars": 2807,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "AirportItlwm/AirportItlwm-Sonoma-Info.plist",
    "chars": 3355,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "AirportItlwm/AirportItlwm.cpp",
    "chars": 33182,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "AirportItlwm/AirportItlwm.hpp",
    "chars": 13349,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "AirportItlwm/AirportItlwmEthernetInterface.cpp",
    "chars": 4074,
    "preview": "//\n//  AirportItlwmEthernetInterface.cpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2"
  },
  {
    "path": "AirportItlwm/AirportItlwmEthernetInterface.hpp",
    "chars": 1813,
    "preview": "//\n//  AirportItlwmEthernetInterface.hpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2"
  },
  {
    "path": "AirportItlwm/AirportItlwmInterface.cpp",
    "chars": 1520,
    "preview": "//\n//  AirportItlwmInterface.cpp\n//  AirportItlwm\n//\n//  Created by qcwap on 2020/9/7.\n//  Copyright © 2020 钟先耀. All rig"
  },
  {
    "path": "AirportItlwm/AirportItlwmInterface.hpp",
    "chars": 928,
    "preview": "//\n//  AirportItlwmInterface.hpp\n//  AirportItlwm\n//\n//  Created by qcwap on 2020/9/7.\n//  Copyright © 2020 钟先耀. All rig"
  },
  {
    "path": "AirportItlwm/AirportItlwmSkywalkInterface.cpp",
    "chars": 37076,
    "preview": "//\n//  AirportItlwmSkywalkInterface.cpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 20"
  },
  {
    "path": "AirportItlwm/AirportItlwmSkywalkInterface.hpp",
    "chars": 25456,
    "preview": "//\n//  AirportItlwmSkywalkInterface.hpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 20"
  },
  {
    "path": "AirportItlwm/AirportItlwmV2.cpp",
    "chars": 35426,
    "preview": "//\n//  AirportItlwmV2.cpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2023 钟先耀. All ri"
  },
  {
    "path": "AirportItlwm/AirportItlwmV2.hpp",
    "chars": 10005,
    "preview": "//\n//  AirportItlwmV2.hpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2023 钟先耀. All ri"
  },
  {
    "path": "AirportItlwm/AirportSTAIOCTL.cpp",
    "chars": 56089,
    "preview": "//\n//  AirportSTAIOCTL.cpp\n//  AirportItlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All rights re"
  },
  {
    "path": "AirportItlwm/AirportVirtualIOCTL.cpp",
    "chars": 19084,
    "preview": "//\n//  AirportVirtualIOCTL.cpp\n//  AirportItlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All right"
  },
  {
    "path": "AirportItlwm/IOPCIEDeviceWrapper.cpp",
    "chars": 3634,
    "preview": "//\n//  IOPCIEDeviceWrapper.cpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2023 钟先耀. A"
  },
  {
    "path": "AirportItlwm/IOPCIEDeviceWrapper.hpp",
    "chars": 967,
    "preview": "//\n//  IOPCIEDeviceWrapper.hpp\n//  AirportItlwm-Sonoma\n//\n//  Created by qcwap on 2023/6/27.\n//  Copyright © 2023 钟先耀. A"
  },
  {
    "path": "AirportItlwm/Info.plist",
    "chars": 2807,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "LICENSE",
    "chars": 18092,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
  },
  {
    "path": "README.md",
    "chars": 3078,
    "preview": "# itlwm\n\n**An Intel Wi-Fi Adapter Kernel Extension for macOS, based on the OpenBSD Project.**\n\n## Documentation\n\nWe high"
  },
  {
    "path": "include/Airport/Apple80211.h",
    "chars": 712,
    "preview": "//\n//  Apple80211.h\n//  itlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n\n#i"
  },
  {
    "path": "include/Airport/CCDataPipe.h",
    "chars": 3528,
    "preview": "//\n//  CCDataPipe.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#"
  },
  {
    "path": "include/Airport/CCLogPipe.h",
    "chars": 5739,
    "preview": "//\n//  CCLogPipe.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#i"
  },
  {
    "path": "include/Airport/CCLogStream.h",
    "chars": 1767,
    "preview": "//\n//  CCLogStream.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n"
  },
  {
    "path": "include/Airport/CCPipe.h",
    "chars": 3836,
    "preview": "//\n//  CCPipe.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#ifnd"
  },
  {
    "path": "include/Airport/CCStream.h",
    "chars": 1144,
    "preview": "//\n//  CCStream.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#if"
  },
  {
    "path": "include/Airport/IO80211Controller.h",
    "chars": 15982,
    "preview": "//\n//  IO80211Controller.h\n//  IO80211Family\n//\n\n#ifndef _IO80211CONTROLLER_H\n#define _IO80211CONTROLLER_H\n\n#if defined("
  },
  {
    "path": "include/Airport/IO80211ControllerV2.h",
    "chars": 10199,
    "preview": "//\n//  IOSkywalkInterface.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/7.\n//  Copyright © 2023 钟先耀. All rights reserved"
  },
  {
    "path": "include/Airport/IO80211InfraInterface.h",
    "chars": 5287,
    "preview": "//\n//  IO80211InfraInterface.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/12.\n//  Copyright © 2023 钟先耀. All rights rese"
  },
  {
    "path": "include/Airport/IO80211InfraProtocol.h",
    "chars": 21953,
    "preview": "//\n//  IO80211InfraProtocol.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/14.\n//  Copyright © 2023 钟先耀. All rights reser"
  },
  {
    "path": "include/Airport/IO80211Interface.h",
    "chars": 12250,
    "preview": "#ifndef _IO80211INTERFACE_H\n#define _IO80211INTERFACE_H\n\n/*\n * Kernel\n */\n#if defined(KERNEL) && defined(__cplusplus)\n\n#"
  },
  {
    "path": "include/Airport/IO80211P2PInterface.h",
    "chars": 6359,
    "preview": "#ifndef IO80211P2PInterface_h\n#define IO80211P2PInterface_h\n\n#include \"IO80211VirtualInterface.h\"\n\nclass IO80211P2PInter"
  },
  {
    "path": "include/Airport/IO80211SkywalkInterface.h",
    "chars": 9006,
    "preview": "//\n//  IO80211SkywalkInterface.h\n//  IO80211Family\n//\n//  Created by 钟先耀 on 2019/10/18.\n//  Copyright © 2019 钟先耀. All ri"
  },
  {
    "path": "include/Airport/IO80211VirtualInterface.h",
    "chars": 11948,
    "preview": "#ifndef IO80211VirtualInterface_h\n#define IO80211VirtualInterface_h\n\n#include \"IO80211Interface.h\"\n#include \"apple_priva"
  },
  {
    "path": "include/Airport/IO80211WorkLoop.h",
    "chars": 975,
    "preview": "/*\n *  IO80211WorkLoop.h\n *  IO80211Family\n *\n *  Created by Pete on 5/31/06.\n *  Copyright 2006 Apple Computer, Inc. Al"
  },
  {
    "path": "include/Airport/IO80211WorkQueue.h",
    "chars": 981,
    "preview": "\n#ifndef _IO80211WORKQUEUE_H\n#define _IO80211WORKQUEUE_H\n\n#include <Availability.h>\n#include <IOKit/IOWorkLoop.h>\n\n// Th"
  },
  {
    "path": "include/Airport/IOSkywalkEthernetInterface.h",
    "chars": 4055,
    "preview": "#ifndef IOSkywalkEthernetInterface_h\n#define IOSkywalkEthernetInterface_h\n\n#include \"IOSkywalkNetworkInterface.h\"\n\nstruc"
  },
  {
    "path": "include/Airport/IOSkywalkInterface.h",
    "chars": 2223,
    "preview": "//\n//  IOSkywalkInterface.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/7.\n//  Copyright © 2023 钟先耀. All rights reserved"
  },
  {
    "path": "include/Airport/IOSkywalkLegacyEthernetInterface.h",
    "chars": 1600,
    "preview": "//\n//  IOSkywalkLegacyEthernetInterface.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/19.\n//  Copyright © 2023 钟先耀. All "
  },
  {
    "path": "include/Airport/IOSkywalkLogicalLink.h",
    "chars": 359,
    "preview": "//\n//  IOSkywalkLogicalLink.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/12.\n//  Copyright © 2023 钟先耀. All rights reser"
  },
  {
    "path": "include/Airport/IOSkywalkNetworkInterface.h",
    "chars": 4391,
    "preview": "//\n//  IOSkywalkNetworkInterface.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/7.\n//  Copyright © 2023 钟先耀. All rights r"
  },
  {
    "path": "include/Airport/IOSkywalkNetworkPacket.h",
    "chars": 1914,
    "preview": "//\n//  IOSkywalkNetworkPacket.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/13.\n//  Copyright © 2023 钟先耀. All rights res"
  },
  {
    "path": "include/Airport/IOSkywalkPacketBufferPool.h",
    "chars": 2265,
    "preview": "//\n//  IOSkywalkPacketBufferPool.h\n//  itlwm\n//\n//  Created by qcwap on 2023/6/15.\n//  Copyright © 2023 钟先耀. All rights "
  },
  {
    "path": "include/Airport/apple80211_ioctl.h",
    "chars": 48100,
    "preview": "/*\n * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.\n *\n * @APPLE_LICENSE_HEADER_START@\n *\n * The contents"
  },
  {
    "path": "include/Airport/apple80211_var.h",
    "chars": 29912,
    "preview": "/*\n * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.\n *\n * @APPLE_LICENSE_HEADER_START@\n *\n * The contents"
  },
  {
    "path": "include/Airport/apple80211_wps.h",
    "chars": 22660,
    "preview": "//\n//  wps_eap.h\n//  IO80211Family\n//\n//  Created by Pete on 6/20/06.\n//  Copyright 2006 Apple Computer, Inc. All rights"
  },
  {
    "path": "include/Airport/apple_private_spi.h",
    "chars": 2645,
    "preview": "/*\n* Copyright (c) 1998-2016 Apple Inc. All rights reserved.\n*\n* @APPLE_OSREFERENCE_LICENSE_HEADER_START@\n*\n* This file "
  },
  {
    "path": "include/Airport/debug.h",
    "chars": 6617,
    "preview": "//\n//  debug.h\n//  Black80211_HighSierra\n//\n//  Created by Roman Peshkov on 05/07/2018.\n//  Copyright © 2018 Roman Peshk"
  },
  {
    "path": "include/ClientKit/Common.h",
    "chars": 4228,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/ClientKit/IoctlId.h",
    "chars": 967,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/FwData.h",
    "chars": 1856,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/HAL/ItlDriverController.hpp",
    "chars": 800,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/HAL/ItlDriverInfo.hpp",
    "chars": 1025,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/HAL/ItlHalService.cpp",
    "chars": 2681,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "include/HAL/ItlHalService.hpp",
    "chars": 2201,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/Info.plist",
    "chars": 904,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "itl80211/compat.cpp",
    "chars": 8293,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/compat.h",
    "chars": 8803,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/linux/bitfield.h",
    "chars": 6015,
    "preview": "//\n//  bitfield.h\n//  AppleIntelWifiAdapter\n//\n//  Created by qcwap on 2020/1/5.\n//  Copyright © 2020 钟先耀. All rights re"
  },
  {
    "path": "itl80211/linux/kernel.h",
    "chars": 6939,
    "preview": "/* SPDX-License-Identifier: GPL-2.0 */\n\n#ifndef kernel_h\n#define kernel_h\n\n#include <linux/types.h>\n\n#include <sys/errno"
  },
  {
    "path": "itl80211/linux/random.h",
    "chars": 840,
    "preview": "//\n//  random.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/22.\n//  Copyright © 2020 钟先耀. All rights reser"
  },
  {
    "path": "itl80211/linux/types.h",
    "chars": 9434,
    "preview": "//\n//  types.h\n//  AppleIntelWifiAdapter\n//\n//  Created by qcwap on 2020/1/5.\n//  Copyright © 2020 钟先耀. All rights reser"
  },
  {
    "path": "itl80211/openbsd/crypto/aes.c",
    "chars": 20460,
    "preview": "/*\n * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>\n *\n * Modified for OpenBSD by Thomas Pornin and Mike Belopuhov"
  },
  {
    "path": "itl80211/openbsd/crypto/aes.h",
    "chars": 1816,
    "preview": "/*\n * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>\n * Copyright (c) 2016 Mike Belopuhov\n *\n * Permission is hereb"
  },
  {
    "path": "itl80211/openbsd/crypto/arc4.c",
    "chars": 2322,
    "preview": "/*\t$OpenBSD: arc4.c,v 1.3 2007/09/11 12:07:05 djm Exp $\t*/\n/*\n * Copyright (c) 2003 Markus Friedl <markus@openbsd.org>\n "
  },
  {
    "path": "itl80211/openbsd/crypto/arc4.h",
    "chars": 1381,
    "preview": "/*\t$OpenBSD: arc4.h,v 1.3 2007/09/11 12:07:05 djm Exp $\t*/\n/*\n * Copyright (c) 2003 Markus Friedl <markus@openbsd.org>\n "
  },
  {
    "path": "itl80211/openbsd/crypto/blf.c",
    "chars": 22574,
    "preview": "/*\t$OpenBSD: blf.c,v 1.7 2007/11/26 09:28:34 martynas Exp $\t*/\n\n/*\n * Blowfish block cipher for OpenBSD\n * Copyright 199"
  },
  {
    "path": "itl80211/openbsd/crypto/blf.h",
    "chars": 3386,
    "preview": "/*\t$OpenBSD: blf.h,v 1.6 2007/02/21 19:25:40 grunk Exp $\t*/\n\n/*\n * Blowfish - a fast block cipher designed by Bruce Schn"
  },
  {
    "path": "itl80211/openbsd/crypto/cast.c",
    "chars": 8198,
    "preview": "/*      $OpenBSD: cast.c,v 1.4 2012/04/25 04:12:27 matthew Exp $       */\n\n/*\n *\tCAST-128 in C\n *\tWritten by Steve Reid "
  },
  {
    "path": "itl80211/openbsd/crypto/cast.h",
    "chars": 624,
    "preview": "/*      $OpenBSD: cast.h,v 1.2 2002/03/14 01:26:51 millert Exp $       */\n\n/*\n *\tCAST-128 in C\n *\tWritten by Steve Reid "
  },
  {
    "path": "itl80211/openbsd/crypto/castsb.h",
    "chars": 25664,
    "preview": "/*      $OpenBSD: castsb.h,v 1.1 2000/02/28 23:13:04 deraadt Exp $       */\n/*\n *\tCAST-128 in C\n *\tWritten by Steve Reid"
  },
  {
    "path": "itl80211/openbsd/crypto/chacha_private.h",
    "chars": 5422,
    "preview": "/*\nchacha-merged.c version 20080118\nD. J. Bernstein\nPublic domain.\n*/\n\ntypedef unsigned char u8;\ntypedef unsigned int u3"
  },
  {
    "path": "itl80211/openbsd/crypto/chachapoly.c",
    "chars": 3295,
    "preview": "/*\n * Copyright (c) 2015 Mike Belopuhov\n *\n * Permission to use, copy, modify, and distribute this software for any\n * p"
  },
  {
    "path": "itl80211/openbsd/crypto/chachapoly.h",
    "chars": 1957,
    "preview": "/*\n * Copyright (c) 2015 Mike Belopuhov\n *\n * Permission to use, copy, modify, and distribute this software for any\n * p"
  },
  {
    "path": "itl80211/openbsd/crypto/cmac.c",
    "chars": 2906,
    "preview": "/*\t$OpenBSD: cmac.c,v 1.3 2017/05/02 17:07:06 mikeb Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.bergami"
  },
  {
    "path": "itl80211/openbsd/crypto/cmac.h",
    "chars": 1506,
    "preview": "/*\t$OpenBSD: cmac.h,v 1.3 2017/05/02 17:07:06 mikeb Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.bergami"
  },
  {
    "path": "itl80211/openbsd/crypto/cryptodev.h",
    "chars": 8564,
    "preview": "/*\t$OpenBSD: cryptodev.h,v 1.71 2017/08/10 18:57:20 tedu Exp $\t*/\n\n/*\n * The author of this code is Angelos D. Keromytis"
  },
  {
    "path": "itl80211/openbsd/crypto/des_locl.h",
    "chars": 5901,
    "preview": "/*\t$OpenBSD: des_locl.h,v 1.7 2015/12/10 21:00:51 naddy Exp $\t*/\n\n/* lib/des/des_locl.h */\n/* Copyright (C) 1995 Eric Yo"
  },
  {
    "path": "itl80211/openbsd/crypto/ecb3_enc.c",
    "chars": 3135,
    "preview": "/*\t$OpenBSD: ecb3_enc.c,v 1.3 2013/11/18 18:49:53 brad Exp $\t*/\n\n/* lib/des/ecb3_enc.c */\n/* Copyright (C) 1995 Eric You"
  },
  {
    "path": "itl80211/openbsd/crypto/ecb_enc.c",
    "chars": 3904,
    "preview": "/*\t$OpenBSD: ecb_enc.c,v 1.6 2015/12/10 21:00:51 naddy Exp $\t*/\n\n/* lib/des/ecb_enc.c */\n/* Copyright (C) 1995 Eric Youn"
  },
  {
    "path": "itl80211/openbsd/crypto/gmac.c",
    "chars": 4411,
    "preview": "/*\t$OpenBSD: gmac.c,v 1.10 2017/05/02 11:44:32 mikeb Exp $\t*/\n\n/*\n * Copyright (c) 2010 Mike Belopuhov\n *\n * Permission "
  },
  {
    "path": "itl80211/openbsd/crypto/gmac.h",
    "chars": 1632,
    "preview": "/*\t$OpenBSD: gmac.h,v 1.6 2017/05/02 11:44:32 mikeb Exp $\t*/\n\n/*\n * Copyright (c) 2010 Mike Belopuhov\n *\n * Permission t"
  },
  {
    "path": "itl80211/openbsd/crypto/hmac.c",
    "chars": 4836,
    "preview": "/*\t$OpenBSD: hmac.c,v 1.4 2016/09/19 18:09:40 tedu Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.bergamin"
  },
  {
    "path": "itl80211/openbsd/crypto/hmac.h",
    "chars": 2438,
    "preview": "/*\t$OpenBSD: hmac.h,v 1.3 2012/12/05 23:20:15 deraadt Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.berga"
  },
  {
    "path": "itl80211/openbsd/crypto/idgen.c",
    "chars": 4450,
    "preview": "/*\n * Copyright (c) 2008 Damien Miller <djm@mindrot.org>\n *\n * Permission to use, copy, modify, and distribute this soft"
  },
  {
    "path": "itl80211/openbsd/crypto/idgen.h",
    "chars": 1217,
    "preview": "/*\t$OpenBSD: idgen.h,v 1.3 2013/06/05 05:45:54 djm Exp $\t*/\n/*\n * Copyright (c) 2008 Damien Miller <djm@mindrot.org>\n *\n"
  },
  {
    "path": "itl80211/openbsd/crypto/key_wrap.c",
    "chars": 2994,
    "preview": "/*\t$OpenBSD: key_wrap.c,v 1.5 2017/05/02 17:07:06 mikeb Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.ber"
  },
  {
    "path": "itl80211/openbsd/crypto/key_wrap.h",
    "chars": 1434,
    "preview": "/*\t$OpenBSD: key_wrap.h,v 1.3 2017/05/02 17:07:06 mikeb Exp $\t*/\n\n/*-\n * Copyright (c) 2008 Damien Bergamini <damien.ber"
  },
  {
    "path": "itl80211/openbsd/crypto/md5.c",
    "chars": 7922,
    "preview": "/*\t$OpenBSD: md5.c,v 1.4 2014/12/28 10:04:35 tedu Exp $\t*/\n\n/*\n * This code implements the MD5 message-digest algorithm."
  },
  {
    "path": "itl80211/openbsd/crypto/md5.h",
    "chars": 1267,
    "preview": "/*\t$OpenBSD: md5.h,v 1.3 2014/11/16 17:39:09 tedu Exp $\t*/\n\n/*\n * This code implements the MD5 message-digest algorithm."
  },
  {
    "path": "itl80211/openbsd/crypto/michael.c",
    "chars": 2929,
    "preview": "/*\t$OpenBSD: michael.c,v 1.2 2008/07/21 19:52:45 damien Exp $\t*/\n\n/*\n * Copyright (c) 2005, 2006 Reyk Floeter <reyk@open"
  },
  {
    "path": "itl80211/openbsd/crypto/michael.h",
    "chars": 1648,
    "preview": "/*\t$OpenBSD: michael.h,v 1.2 2012/12/05 23:20:15 deraadt Exp $\t*/\n\n/*\n * Copyright (c) 2005, 2006 Reyk Floeter <reyk@ope"
  },
  {
    "path": "itl80211/openbsd/crypto/podd.h",
    "chars": 3655,
    "preview": "/*\t$OpenBSD: podd.h,v 1.1 2000/02/28 23:13:05 deraadt Exp $\t*/\n\n/* lib/des/podd.h */\n/* Copyright (C) 1995 Eric Young (e"
  },
  {
    "path": "itl80211/openbsd/crypto/poly1305.c",
    "chars": 6950,
    "preview": "/*\n * Public Domain poly1305 from Andrew Moon\n * Based on poly1305-donna.c, poly1305-donna-32.h and poly1305-donna.h fro"
  },
  {
    "path": "itl80211/openbsd/crypto/poly1305.h",
    "chars": 696,
    "preview": "/*\n * Public Domain poly1305 from Andrew Moon\n *\n * poly1305 implementation using 32 bit * 32 bit = 64 bit multiplicatio"
  },
  {
    "path": "itl80211/openbsd/crypto/rijndael.c",
    "chars": 53636,
    "preview": "/*\t$OpenBSD: rijndael.c,v 1.20 2014/11/17 12:27:47 mikeb Exp $ */\n\n/**\n * rijndael-alg-fst.c\n *\n * @version 3.0 (Decembe"
  },
  {
    "path": "itl80211/openbsd/crypto/rijndael.h",
    "chars": 2293,
    "preview": "/*\t$OpenBSD: rijndael.h,v 1.13 2008/06/09 07:49:45 djm Exp $ */\n\n/**\n * rijndael-alg-fst.h\n *\n * @version 3.0 (December "
  },
  {
    "path": "itl80211/openbsd/crypto/rmd160.c",
    "chars": 11132,
    "preview": "/*\t$OpenBSD: rmd160.c,v 1.5 2011/01/11 15:42:05 deraadt Exp $\t*/\n/*\n * Copyright (c) 2001 Markus Friedl.  All rights res"
  },
  {
    "path": "itl80211/openbsd/crypto/rmd160.h",
    "chars": 2229,
    "preview": "/*\t$OpenBSD: rmd160.h,v 1.5 2009/07/05 19:33:46 millert Exp $\t*/\n/*\n * Copyright (c) 2001 Markus Friedl.  All rights res"
  },
  {
    "path": "itl80211/openbsd/crypto/set_key.c",
    "chars": 7321,
    "preview": "/*\t$OpenBSD: set_key.c,v 1.4 2015/12/10 21:00:51 naddy Exp $\t*/\n\n/* lib/des/set_key.c */\n/* Copyright (C) 1995 Eric Youn"
  },
  {
    "path": "itl80211/openbsd/crypto/sha1-pbkdf2.c",
    "chars": 3260,
    "preview": "/*\n * SHA1-based key derivation function (PBKDF2) for IEEE 802.11i\n * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>\n "
  },
  {
    "path": "itl80211/openbsd/crypto/sha1.c",
    "chars": 5817,
    "preview": "/*\t$OpenBSD: sha1.c,v 1.11 2014/12/28 10:04:35 tedu Exp $\t*/\n\n/*\n * SHA-1 in C\n * By Steve Reid <steve@edmweb.com>\n * 10"
  },
  {
    "path": "itl80211/openbsd/crypto/sha1.h",
    "chars": 1046,
    "preview": "/*\t$OpenBSD: sha1.h,v 1.6 2014/11/16 17:39:09 tedu Exp $\t*/\n\n/*\n * SHA-1 in C\n * By Steve Reid <steve@edmweb.com>\n * 100"
  },
  {
    "path": "itl80211/openbsd/crypto/sha2.c",
    "chars": 24770,
    "preview": "/*\t$OpenBSD: sha2.c,v 1.18 2015/03/14 03:38:46 jsg Exp $\t*/\n\n/*\n * FILE:\tsha2.c\n * AUTHOR:\tAaron D. Gifford <me@aarongif"
  },
  {
    "path": "itl80211/openbsd/crypto/sha2.h",
    "chars": 3330,
    "preview": "/*\t$OpenBSD: sha2.h,v 1.5 2014/11/16 17:39:09 tedu Exp $\t*/\n\n/*\n * FILE:\tsha2.h\n * AUTHOR:\tAaron D. Gifford <me@aarongif"
  },
  {
    "path": "itl80211/openbsd/crypto/sk.h",
    "chars": 9380,
    "preview": "/*\t$OpenBSD: sk.h,v 1.2 2002/10/27 13:24:26 miod Exp $\t*/\n\n/* lib/des/sk.h */\n/* Copyright (C) 1995 Eric Young (eay@minc"
  },
  {
    "path": "itl80211/openbsd/crypto/spr.h",
    "chars": 9418,
    "preview": "/*\t$OpenBSD: spr.h,v 1.2 2002/10/27 13:24:26 miod Exp $\t*/\n\n/* lib/des/spr.h */\n/* Copyright (C) 1995 Eric Young (eay@mi"
  },
  {
    "path": "itl80211/openbsd/net80211/CTimeout.cpp",
    "chars": 3453,
    "preview": "//\n//  CTimeout.cpp\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/30.\n//  Copyright © 2020 钟先耀. All rights r"
  },
  {
    "path": "itl80211/openbsd/net80211/_string.c",
    "chars": 1041,
    "preview": "//\n//  _string.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/30.\n//  Copyright © 2020 钟先耀. All rights rese"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211.c",
    "chars": 54730,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211.h",
    "chars": 81857,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_amrr.c",
    "chars": 4338,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_amrr.h",
    "chars": 2429,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto.c",
    "chars": 21027,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto.h",
    "chars": 7645,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto_bip.c",
    "chars": 7089,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto_ccmp.c",
    "chars": 14547,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto_tkip.c",
    "chars": 27371,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_crypto_wep.c",
    "chars": 9409,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_input.c",
    "chars": 129104,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_ioctl.c",
    "chars": 29909,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_ioctl.h",
    "chars": 17138,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_mira.c",
    "chars": 46731,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_mira.h",
    "chars": 4950,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_node.c",
    "chars": 116924,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_node.h",
    "chars": 24769,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_output.c",
    "chars": 69285,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_pae_input.c",
    "chars": 42327,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_pae_output.c",
    "chars": 22443,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_priv.h",
    "chars": 4875,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_proto.c",
    "chars": 51670,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_proto.h",
    "chars": 10495,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_ra.c",
    "chars": 30953,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_ra.h",
    "chars": 4575,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_radiotap.h",
    "chars": 8977,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_regdomain.c",
    "chars": 5607,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_regdomain.h",
    "chars": 33402,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_rssadapt.c",
    "chars": 8991,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_rssadapt.h",
    "chars": 4648,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/ieee80211_var.h",
    "chars": 26682,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/net80211/timeout.c",
    "chars": 1955,
    "preview": "//\n//  timeout.cpp\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/30.\n//  Copyright © 2020 钟先耀. All rights re"
  },
  {
    "path": "itl80211/openbsd/sys/CTimeout.hpp",
    "chars": 1670,
    "preview": "//\n//  CTimeout.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/30.\n//  Copyright © 2020 钟先耀. All rights res"
  },
  {
    "path": "itl80211/openbsd/sys/_arc4random.h",
    "chars": 1777,
    "preview": "//\n//  _arc4random.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/22.\n//  Copyright © 2020 钟先耀. All rights "
  },
  {
    "path": "itl80211/openbsd/sys/_buf.h",
    "chars": 851,
    "preview": "//\n//  _buf.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/25.\n//  Copyright © 2020 钟先耀. All rights reserve"
  },
  {
    "path": "itl80211/openbsd/sys/_clock.h",
    "chars": 778,
    "preview": "/*\n* Copyright (C) 2021  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itl80211/openbsd/sys/_if_ether.h",
    "chars": 11828,
    "preview": "//\n//  _if_ether.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/22.\n//  Copyright © 2020 钟先耀. All rights re"
  },
  {
    "path": "itl80211/openbsd/sys/_if_media.h",
    "chars": 53291,
    "preview": "/*    $OpenBSD: if_media.h,v 1.41 2018/02/04 10:06:51 stsp Exp $    */\n/*    $NetBSD: if_media.h,v 1.22 2000/02/17 21:53"
  },
  {
    "path": "itl80211/openbsd/sys/_ifq.cpp",
    "chars": 1286,
    "preview": "//\n//  _ifq.cpp\n//  itlwm\n//\n//  Created by zxystd on 2022/8/13.\n//  Copyright © 2022 钟先耀. All rights reserved.\n//\n\n#inc"
  },
  {
    "path": "itl80211/openbsd/sys/_ifq.h",
    "chars": 1367,
    "preview": "//\n//  _ifq.h\n//  itlwm\n//\n//  Created by qcwap on 2020/3/1.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n/*\n* Copy"
  },
  {
    "path": "itl80211/openbsd/sys/_malloc.h",
    "chars": 1282,
    "preview": "//\n//  _malloc.h\n//  itlwm\n//\n//  Created by qcwap on 2020/7/24.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n/*\n* "
  },
  {
    "path": "itl80211/openbsd/sys/_mbuf.cpp",
    "chars": 1911,
    "preview": "//\n//  _mbuf.cpp\n//  itlwm\n//\n//  Created by qcwap on 2020/6/14.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n/*\n* "
  },
  {
    "path": "itl80211/openbsd/sys/_mbuf.h",
    "chars": 11499,
    "preview": "//\n//  mbuf.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/22.\n//  Copyright © 2020 钟先耀. All rights reserve"
  },
  {
    "path": "itl80211/openbsd/sys/_netstat.h",
    "chars": 6029,
    "preview": "//\n//  _netstat.h\n//  itlwm\n//\n//  Created by qcwap on 2021/4/22.\n//  Copyright © 2021 钟先耀. All rights reserved.\n//\n\n#if"
  },
  {
    "path": "itl80211/openbsd/sys/_null.h",
    "chars": 333,
    "preview": "/*\t$OpenBSD: _null.h,v 1.2 2016/09/09 22:07:58 millert Exp $\t*/\n\n/*\n * Written by Todd C. Miller, September 9, 2016\n * P"
  },
  {
    "path": "itl80211/openbsd/sys/_task.cpp",
    "chars": 8778,
    "preview": "//\n//  _task.cpp\n//  itlwm\n//\n//  Created by qcwap on 2020/3/1.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n\n/*\n* "
  },
  {
    "path": "itl80211/openbsd/sys/_task.h",
    "chars": 1651,
    "preview": "//\n//  _task.h\n//  itlwm\n//\n//  Created by qcwap on 2020/3/1.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n/*\n* Cop"
  },
  {
    "path": "itl80211/openbsd/sys/arp.c",
    "chars": 7794,
    "preview": "//\n//  arp.c\n//  itlwm\n//\n//  Created by zxystd on 2023/7/1.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#include"
  },
  {
    "path": "itl80211/openbsd/sys/arp.h",
    "chars": 237,
    "preview": "//\n//  arp.h\n//  itlwm\n//\n//  Created by zxystd on 2023/7/1.\n//  Copyright © 2023 钟先耀. All rights reserved.\n//\n\n#ifndef "
  },
  {
    "path": "itl80211/openbsd/sys/endian.h",
    "chars": 9763,
    "preview": "//\n//  endian.h\n//  AppleIntelWifiAdapter\n//\n//  Created by 钟先耀 on 2020/1/22.\n//  Copyright © 2020 钟先耀. All rights reser"
  },
  {
    "path": "itl80211/openbsd/sys/pcireg.h",
    "chars": 23390,
    "preview": "/*\t$OpenBSD: pcireg.h,v 1.57 2019/05/30 21:44:21 kettenis Exp $\t*/\n/*\t$NetBSD: pcireg.h,v 1.26 2000/05/10 16:58:42 thorp"
  },
  {
    "path": "itl80211/openbsd/sys/timeout.h",
    "chars": 2725,
    "preview": "\n/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the te"
  },
  {
    "path": "itl80211/openbsd/sys/tree.h",
    "chars": 33898,
    "preview": "/*\t$OpenBSD: tree.h,v 1.29 2017/07/30 19:27:20 deraadt Exp $\t*/\n/*\n * Copyright 2002 Niels Provos <provos@citi.umich.edu"
  },
  {
    "path": "itl80211/zutil.c",
    "chars": 717,
    "preview": "//\n//  zutil.c\n//  itlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n\n#includ"
  },
  {
    "path": "itl80211/zutil.h",
    "chars": 327,
    "preview": "//\n//  zutil.h\n//  itlwm\n//\n//  Created by qcwap on 2020/9/4.\n//  Copyright © 2020 钟先耀. All rights reserved.\n//\n\n#ifndef"
  },
  {
    "path": "itlwm/Info.plist",
    "chars": 2531,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "itlwm/ItlNetworkUserClient.cpp",
    "chars": 14185,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/ItlNetworkUserClient.hpp",
    "chars": 2875,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/PrivateSPI.pch",
    "chars": 364,
    "preview": "#include <libkern/libkern.h>\n#include <IOKit/IOTypes.h>\n#include <machine/types.h>\n#ifdef __PRIVATE_SPI__\ntypedef u_int3"
  },
  {
    "path": "itlwm/hal_iwm/ItlIwm.cpp",
    "chars": 5300,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/ItlIwm.hpp",
    "chars": 23722,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/coex.cpp",
    "chars": 4106,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/ctxt.cpp",
    "chars": 11500,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/fw.cpp",
    "chars": 39809,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/hw.cpp",
    "chars": 32542,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/if_iwmreg.h",
    "chars": 256734,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/if_iwmvar.h",
    "chars": 21481,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/io.cpp",
    "chars": 11596,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/itlhdr.h",
    "chars": 7409,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/led.cpp",
    "chars": 6620,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/mac80211.cpp",
    "chars": 177464,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/nvm.cpp",
    "chars": 16484,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/phy.cpp",
    "chars": 26021,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/power.cpp",
    "chars": 18463,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itlwm/hal_iwm/rs.cpp",
    "chars": 120269,
    "preview": "//\n//  rs.cpp\n//  itlwm\n//\n//  Created by zxystd on 2021/8/27.\n//  Copyright © 2021 钟先耀. All rights reserved.\n//\n\n#inclu"
  },
  {
    "path": "itlwm/hal_iwm/rs.h",
    "chars": 55511,
    "preview": "//\n//  rs.hpp\n//  itlwm\n//\n//  Created by zxystd on 2021/8/27.\n//  Copyright © 2021 钟先耀. All rights reserved.\n//\n\n#ifnde"
  },
  {
    "path": "itlwm/hal_iwm/rx.cpp",
    "chars": 50091,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/scan.cpp",
    "chars": 35791,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/tx.cpp",
    "chars": 26567,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwm/utils.cpp",
    "chars": 6133,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwn/ItlIwn.cpp",
    "chars": 244225,
    "preview": "/*\n * Copyright (C) 2020  pigworlds\n *\n * This program is free software; you can redistribute it and/or modify\n * it und"
  },
  {
    "path": "itlwm/hal_iwn/ItlIwn.hpp",
    "chars": 15733,
    "preview": "/*\n * Copyright (C) 2020  pigworlds\n *\n * This program is free software; you can redistribute it and/or modify\n * it und"
  },
  {
    "path": "itlwm/hal_iwn/if_iwnreg.h",
    "chars": 73474,
    "preview": "/*\n * Copyright (C) 2020  pigworlds\n *\n * This program is free software; you can redistribute it and/or modify\n * it und"
  },
  {
    "path": "itlwm/hal_iwn/if_iwnvar.h",
    "chars": 10825,
    "preview": "/*\n * Copyright (C) 2020  pigworlds\n *\n * This program is free software; you can redistribute it and/or modify\n * it und"
  },
  {
    "path": "itlwm/hal_iwx/ItlIwx.cpp",
    "chars": 458641,
    "preview": "/*\n * Copyright (C) 2020  钟先耀\n *\n * This program is free software; you can redistribute it and/or modify\n * it under the"
  },
  {
    "path": "itlwm/hal_iwx/ItlIwx.hpp",
    "chars": 25078,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwx/if_iwxreg.h",
    "chars": 300387,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  },
  {
    "path": "itlwm/hal_iwx/if_iwxvar.h",
    "chars": 23128,
    "preview": "/*\n* Copyright (C) 2020  钟先耀\n*\n* This program is free software; you can redistribute it and/or modify\n* it under the ter"
  }
]

// ... and 46 more files (download for full content)

About this extraction

This page contains the full source code of the OpenIntelWireless/itlwm GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 246 files (4.3 MB), approximately 1.1M tokens, and a symbol index with 7025 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!