blob: 67eb7241606d8fdd7c50f962df5e9908de2b11b1 [file] [log] [blame]
/*
* Copyright (c) 2016, The OpenThread Authors.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _IOCONTROL_H
#define _IOCONTROL_H
//
// Function prototype for general Io Control functions
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_IOCTL_FUNC(
_In_reads_bytes_(InBufferLength)
PVOID InBuffer,
_In_ ULONG InBufferLength,
_Out_writes_bytes_(*OutBufferLength)
PVOID OutBuffer,
_Inout_ PULONG OutBufferLength
);
//
// General Io Control Functions
//
// Handles queries for the current list of Thread interfaces
OTLWF_IOCTL_FUNC otLwfIoCtlEnumerateInterfaces;
// Handles queries for the details of a specific Thread interface
OTLWF_IOCTL_FUNC otLwfIoCtlQueryInterface;
// Handles IOTCLs for OpenThread control
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
otLwfIoCtlOpenThreadControl(
_In_ PIRP Irp
);
// Handles Irp for IOTCLs for OpenThread control on the OpenThread thread
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID
otLwfCompleteOpenThreadIrp(
_In_ PMS_FILTER pFilter,
_In_ PIRP Irp
);
// Helper for converting IoCtl to string
const char*
IoCtlString(
ULONG IoControlCode
);
//
// Function prototype for OpenThread Io Control functions
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_OT_IOCTL_FUNC(
_In_ PMS_FILTER pFilter,
_In_reads_bytes_(InBufferLength)
PUCHAR InBuffer,
_In_ ULONG InBufferLength,
_Out_writes_bytes_(*OutBufferLength)
PVOID OutBuffer,
_Inout_ PULONG OutBufferLength
);
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_TUN_IOCTL_FUNC(
_In_ PMS_FILTER pFilter,
_In_ PIRP Irp,
_In_reads_bytes_(InBufferLength)
PUCHAR InBuffer,
_In_ ULONG InBufferLength,
_In_ ULONG OutBufferLength
);
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
(SPINEL_IRP_CMD_HANDLER)(
_In_ spinel_prop_key_t Key,
_In_reads_bytes_(DataLength) const uint8_t* Data,
_In_ spinel_size_t DataLength,
_Out_writes_bytes_(*OutBufferLength)
PVOID OutBuffer,
_Inout_ PULONG OutBufferLength
);
#define DECL_IOCTL_FUNC(X) \
OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X
#define DECL_IOCTL_FUNC_WITH_TUN(X) \
OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X; \
OTLWF_TUN_IOCTL_FUNC otLwfTunIoCtl_##X
#define DECL_IOCTL_FUNC_WITH_TUN2(X) \
OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X; \
OTLWF_TUN_IOCTL_FUNC otLwfTunIoCtl_##X; \
SPINEL_IRP_CMD_HANDLER otLwfTunIoCtl_##X##_Handler
#define REF_IOCTL_FUNC(X) otLwfIoCtl_##X , NULL
#define REF_IOCTL_FUNC_WITH_TUN(X) otLwfIoCtl_##X , otLwfTunIoCtl_##X
DECL_IOCTL_FUNC_WITH_TUN2(otInterface);
DECL_IOCTL_FUNC_WITH_TUN2(otThread);
DECL_IOCTL_FUNC_WITH_TUN2(otActiveScan);
DECL_IOCTL_FUNC(otDiscover);
DECL_IOCTL_FUNC_WITH_TUN2(otChannel);
DECL_IOCTL_FUNC_WITH_TUN2(otChildTimeout);
DECL_IOCTL_FUNC_WITH_TUN2(otExtendedAddress);
DECL_IOCTL_FUNC_WITH_TUN2(otExtendedPanId);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderRloc);
DECL_IOCTL_FUNC_WITH_TUN2(otLinkMode);
DECL_IOCTL_FUNC_WITH_TUN2(otMasterKey);
DECL_IOCTL_FUNC_WITH_TUN2(otMeshLocalEid);
DECL_IOCTL_FUNC_WITH_TUN2(otMeshLocalPrefix);
//DECL_IOCTL_FUNC(otNetworkDataLeader);
//DECL_IOCTL_FUNC(otNetworkDataLocal);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkName);
DECL_IOCTL_FUNC_WITH_TUN2(otPanId);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterRollEnabled);
DECL_IOCTL_FUNC_WITH_TUN2(otShortAddress);
DECL_IOCTL_FUNC(otActiveDataset);
DECL_IOCTL_FUNC(otPendingDataset);
DECL_IOCTL_FUNC_WITH_TUN2(otLocalLeaderWeight);
DECL_IOCTL_FUNC_WITH_TUN(otAddBorderRouter);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveBorderRouter);
DECL_IOCTL_FUNC_WITH_TUN(otAddExternalRoute);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveExternalRoute);
DECL_IOCTL_FUNC(otSendServerData);
DECL_IOCTL_FUNC_WITH_TUN2(otContextIdReuseDelay);
DECL_IOCTL_FUNC_WITH_TUN2(otKeySequenceCounter);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkIdTimeout);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterUpgradeThreshold);
DECL_IOCTL_FUNC_WITH_TUN(otReleaseRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otMacWhitelistEnabled);
DECL_IOCTL_FUNC_WITH_TUN(otAddMacWhitelist);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveMacWhitelist);
DECL_IOCTL_FUNC(otMacWhitelistEntry);
DECL_IOCTL_FUNC_WITH_TUN(otClearMacWhitelist);
DECL_IOCTL_FUNC_WITH_TUN2(otDeviceRole);
DECL_IOCTL_FUNC(otChildInfoById);
DECL_IOCTL_FUNC(otChildInfoByIndex);
DECL_IOCTL_FUNC(otEidCacheEntry);
DECL_IOCTL_FUNC(otLeaderData);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderWeight);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkDataVersion);
DECL_IOCTL_FUNC_WITH_TUN2(otPartitionId);
DECL_IOCTL_FUNC_WITH_TUN2(otRloc16);
DECL_IOCTL_FUNC(otRouterIdSequence);
DECL_IOCTL_FUNC(otRouterInfo);
DECL_IOCTL_FUNC_WITH_TUN2(otStableNetworkDataVersion);
DECL_IOCTL_FUNC(otMacBlacklistEnabled);
DECL_IOCTL_FUNC(otAddMacBlacklist);
DECL_IOCTL_FUNC(otRemoveMacBlacklist);
DECL_IOCTL_FUNC(otMacBlacklistEntry);
DECL_IOCTL_FUNC(otClearMacBlacklist);
DECL_IOCTL_FUNC(otMaxTransmitPower);
DECL_IOCTL_FUNC(otNextOnMeshPrefix);
DECL_IOCTL_FUNC(otPollPeriod);
DECL_IOCTL_FUNC(otLocalLeaderPartitionId);
DECL_IOCTL_FUNC(otAssignLinkQuality);
DECL_IOCTL_FUNC_WITH_TUN(otPlatformReset);
DECL_IOCTL_FUNC_WITH_TUN2(otParentInfo);
DECL_IOCTL_FUNC(otSingleton);
DECL_IOCTL_FUNC(otMacCounters);
DECL_IOCTL_FUNC_WITH_TUN2(otMaxChildren);
DECL_IOCTL_FUNC(otCommissionerStart);
DECL_IOCTL_FUNC(otCommissionerStop);
DECL_IOCTL_FUNC(otJoinerStart);
DECL_IOCTL_FUNC(otJoinerStop);
DECL_IOCTL_FUNC(otFactoryAssignedIeeeEui64);
DECL_IOCTL_FUNC(otHashMacAddress);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterDowngradeThreshold);
DECL_IOCTL_FUNC(otCommissionerPanIdQuery);
DECL_IOCTL_FUNC(otCommissionerEnergyScan);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterSelectionJitter);
DECL_IOCTL_FUNC(otJoinerUdpPort);
DECL_IOCTL_FUNC(otSendDiagnosticGet);
DECL_IOCTL_FUNC(otSendDiagnosticReset);
DECL_IOCTL_FUNC(otCommissionerAddJoiner);
DECL_IOCTL_FUNC(otCommissionerRemoveJoiner);
DECL_IOCTL_FUNC(otCommissionerProvisioningUrl);
DECL_IOCTL_FUNC(otCommissionerAnnounceBegin);
DECL_IOCTL_FUNC_WITH_TUN2(otEnergyScan);
DECL_IOCTL_FUNC(otSendActiveGet);
DECL_IOCTL_FUNC(otSendActiveSet);
DECL_IOCTL_FUNC(otSendPendingGet);
DECL_IOCTL_FUNC(otSendPendingSet);
DECL_IOCTL_FUNC(otSendMgmtCommissionerGet);
DECL_IOCTL_FUNC(otSendMgmtCommissionerSet);
DECL_IOCTL_FUNC_WITH_TUN2(otKeySwitchGuardtime);
DECL_IOCTL_FUNC(otFactoryReset);
DECL_IOCTL_FUNC(otThreadAutoStart);
DECL_IOCTL_FUNC(otThreadPreferredRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otPSKc);
DECL_IOCTL_FUNC(otParentPriority);
#endif // _IOCONTROL_H