windows-nt/Source/XPSP1/NT/net/1394/inc/a13ioctl.h
2020-09-26 16:20:57 +08:00

724 lines
19 KiB
C

/*++
Copyright (c) 1998-1999 Microsoft Corporation
Module Name:
ioctl.h
Abstract:
This file contains the ioctl declarations for ARP1394, the IEEE1394 ARP module.
Environment:
Kernel mode
Revision History:
11/20/1998 JosephJ Created
04/10/1999 JosephJ Defined structures to get/set info.
--*/
#ifndef _ARP1394_IOCTL_
#define _ARP1394_IOCTL_
#define ARP_CLIENT_DOS_DEVICE_NAME L"\\\\.\\ARP1394"
#define ARP_IOCTL_CLIENT_OPERATION CTL_CODE(FILE_DEVICE_NETWORK, 100, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Current version. To rev the version, increment the 2nd number in the
// expression. The 1st number is a random 32-bit number.
//
#define ARP1394_IOCTL_VERSION (0x1ac86e68+3)
// Common header.
//
typedef struct
{
// Set version to ARP1394_IOCTL_VERSION
//
ULONG Version;
// IP address (in network byte order) of interface this request applies to.
// (All-zeros == use default).
//
ULONG IfIpAddress;
// Operation code. Each operation code is associated with
// a structure relevant to the operation.
//
enum
{
// Display all ARP entries
// Associated struct: ARP1394_IOCTL_GET_ARPCACHE
//
ARP1394_IOCTL_OP_GET_ARPCACHE,
// Add a static arp entry.
// Associated struct: ARP1394_IOCTL_ADD_ARP_ENTRY
//
ARP1394_IOCTL_OP_ADD_STATIC_ENTRY,
// Delete a static arp entry.
// Associated struct: ARP1394_IOCTL_DEL_ARP_ENTRY
//
ARP1394_IOCTL_OP_DEL_STATIC_ENTRY,
// Purge all DYNAMIC arp cache entries.
//
ARP1394_IOCTL_OP_PURGE_ARPCACHE,
// Get packet statistics.
// Associated struct: ARP1394_IOCTL_GET_PACKET_STATS
//
ARP1394_IOCTL_OP_GET_PACKET_STATS,
// Get task statistics.
// Associated struct: ARP1394_IOCTL_GET_TASK_STATS
//
ARP1394_IOCTL_OP_GET_TASK_STATS,
// Get arp table statistics.
// Associated struct: ARP1394_IOCTL_GET_ARPCACHE_STATS
//
ARP1394_IOCTL_OP_GET_ARPCACHE_STATS,
// Get call statistics.
// Associated struct: ARP1394_IOCTL_GET_CALL_STATS
//
ARP1394_IOCTL_OP_GET_CALL_STATS,
// Reset statistics collection.
//
ARP1394_IOCTL_OP_RESET_STATS,
// Reinit the interface (deactivate and then activate it).
//
ARP1394_IOCTL_OP_REINIT_INTERFACE,
// Send a packet
//
ARP1394_IOCTL_OP_SEND_PACKET,
// Receive a packet
//
ARP1394_IOCTL_OP_RECV_PACKET,
// Get bus information
//
ARP1394_IOCTL_OP_GET_NICINFO,
// Get MCAP-related information
//
ARP1394_IOCTL_OP_GET_MCAPINFO,
//
// FOLLOWING ARE FOR ETHERNET EMULATION. THESE SHOULD NOT BE
// SUPPORTED FROM USER MODE. HOWEVER FOR TESTING PURPOSES THEY ARE
// CURRENTLY SUPPORED FROM USER MODE
//
// This is a dummy op identifying the beginning of the ethernet-related
// Ops.
//
ARP1394_IOCTL_OP_ETHERNET_FIRST = 0x100,
// Start ethernet emulation on the specified adapter. We must not
// currently be bound to this adapter.
//
ARP1394_IOCTL_OP_ETHERNET_START_EMULATION =
ARP1394_IOCTL_OP_ETHERNET_FIRST,
// Stop ethernet emulation on the specified adapter. We must be
// currently using this adapter in ethernet mode.
//
ARP1394_IOCTL_OP_ETHERNET_STOP_EMULATION,
// Start listening on this ethernet multicast address.
//
ARP1394_IOCTL_OP_ETHERNET_ADD_MULTICAST_ADDRESS,
// Stop listening on this ethernet multicast address.
//
ARP1394_IOCTL_OP_ETHERNET_DEL_MULTICAST_ADDRESS,
// Start listening on this ethernet multicast address.
//
ARP1394_IOCTL_OP_ETHERNET_ENABLE_PROMISCUOUS_MODE,
// Stop listening on this ethernet multicast address.
//
ARP1394_IOCTL_OP_ETHERNET_DISABLE_PROMISCUOUS_MODE,
// This is a dummy op identifying the beginning of the ethernet-related
// Ops.
//
ARP1394_IOCTL_OP_ETHERNET_LAST =
ARP1394_IOCTL_OP_ETHERNET_DISABLE_PROMISCUOUS_MODE,
// This is an ioctl that returns, the Node, Euid, and Dummy Mac address
// for the Bus
ARP1394_IOCTL_OP_GET_EUID_NODE_MAC_TABLE
} Op;
} ARP1394_IOCTL_HEADER, *PARP1394_IOCTL_HEADER;
typedef struct
{
UINT64 UniqueID;
ULONG Off_Low;
USHORT Off_High;
} ARP1394_IOCTL_HW_ADDRESS, *PARP1394_IOCTL_HW_ADDRESS;
typedef struct
{
ARP1394_IOCTL_HW_ADDRESS HwAddress;
ULONG IpAddress;
}
ARP1394_ARP_ENTRY, *PARP1394_ARP_ENTRY;
// Structure used to get items from the arp table.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_ARPCACHE
//
ARP1394_IOCTL_HEADER Hdr;
// Local HW Address (64-bit UniqueID and FIFO offset, if any).
//
ARP1394_IOCTL_HW_ADDRESS LocalHwAddress;
// Total entries currently in the arp table.
//
UINT NumEntriesInArpCache;
// Total number of entries avilable in THIS structure.
//
UINT NumEntriesAvailable;
// Number of entries filled out in this structure.
//
UINT NumEntriesUsed;
// Zero-based index of the first entry in the structure in the
// arp table.
//
UINT Index;
// Space for NumEntriesAvailable arp table entries.
//
ARP1394_ARP_ENTRY Entries[1];
} ARP1394_IOCTL_GET_ARPCACHE, *PARP1394_IOCTL_GET_ARPCACHE;
// Structure used to add a single static arp entry.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_ADD_STATIC_ENTRY
//
ARP1394_IOCTL_HEADER Hdr;
// Destination HW Address.
//
ARP1394_IOCTL_HW_ADDRESS HwAddress;
// Destination IP Address in network byte order
//
ULONG IpAddress;
} ARP1394_IOCTL_ADD_ARP_ENTRY, *PARP1394_IOCTL_ADD_ARP_ENTRY;
// Structure used to delete a single static arp entry.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_ADD_STATIC_ENTRY
//
ARP1394_IOCTL_HEADER Hdr;
// Destination IP Address in network byte order.
//
ULONG IpAddress;
} ARP1394_IOCTL_DEL_ARP_ENTRY, *PARP1394_IOCTL_DEL_ARP_ENTRY;
// Structure used to purge all DYNAMIC arp entries from the arp
// cache.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_PURGE_ARPCACHE
//
ARP1394_IOCTL_HEADER Hdr;
} ARP1394_IOCTL_PURGE_ARPCACHE, *PARP1394_IOCTL_PURGE_ARPCACHE;
// Enumeration of packet size slots
//
enum
{
ARP1394_PKTSIZE_128, // <= 128 bytes
ARP1394_PKTSIZE_256, // 129 ... 256 bytes
ARP1394_PKTSIZE_1K, // 257 ... 1K bytes
ARP1394_PKTSIZE_2K, // 1K+1 .. .2K bytes
ARP1394_PKTSIZE_G2K, // > 2K bytes
ARP1394_NUM_PKTSIZE_SLOTS
};
// Enumeration of packet send/recv time slots
//
enum
{
// ARP1394_PKTTIME_1US, // <= 1 microsecond
// ARP1394_PKTTIME_100US, // 1+ ... 100 microsecond
ARP1394_PKTTIME_100US, // <= 100 microsecond
ARP1394_PKTTIME_1MS, // 0.1+ ... 1 millisecond
ARP1394_PKTTIME_10MS, // 1+ ... 10 milliseconds
ARP1394_PKTTIME_100MS, // 10+ ...100 milliseconds
ARP1394_PKTTIME_G100MS, // > 100 milliseconds
// ARP1394_PKTTIME_G10MS, // > 10 milliseconds
ARP1394_NUM_PKTTIME_SLOTS
};
// Enumeration of task time slots
//
enum
{
ARP1394_TASKTIME_1MS, // <= 1 millisecond
ARP1394_TASKTIME_100MS, // 1+ ... 100 milliseconds
ARP1394_TASKTIME_1S, // 0.1+ ... 1 second
ARP1394_TASKTIME_10S, // 1+ ... 10 seconds
ARP1394_TASKTIME_G10S, // > 10 seconds
ARP1394_NUM_TASKTIME_SLOTS
};
// Keeps track of the packet counts for each combination of packet-size-slot
// and packet-time-slot.
//
typedef struct
{
// Count of successful packets
//
UINT GoodCounts[ARP1394_NUM_PKTSIZE_SLOTS][ARP1394_NUM_PKTTIME_SLOTS];
// Count of unsuccessful packets
//
UINT BadCounts [ARP1394_NUM_PKTSIZE_SLOTS][ARP1394_NUM_PKTTIME_SLOTS];
} ARP1394_PACKET_COUNTS, *PARP1394_PACKET_COUNTS;
// Structure used to get packet stats.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_PACKET_STATS
//
ARP1394_IOCTL_HEADER Hdr;
// Duration of stats collection, in seconds.
//
UINT StatsDuration;
//
// Some send stats
//
UINT TotSends;
UINT FastSends;
UINT MediumSends;
UINT SlowSends;
UINT BackFills;
UINT HeaderBufUses;
UINT HeaderBufCacheHits;
//
// Some recv stats
//
UINT TotRecvs;
UINT NoCopyRecvs;
UINT CopyRecvs;
UINT ResourceRecvs;
//
// Packet counts
//
ARP1394_PACKET_COUNTS SendFifoCounts;
ARP1394_PACKET_COUNTS RecvFifoCounts;
ARP1394_PACKET_COUNTS SendChannelCounts;
ARP1394_PACKET_COUNTS RecvChannelCounts;
} ARP1394_IOCTL_GET_PACKET_STATS, *PARP1394_IOCTL_GET_PACKET_STATS;
// Structure used to get task stats.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_TASK_STATS
//
ARP1394_IOCTL_HEADER Hdr;
// Duration of stats collection, in seconds.
//
UINT StatsDuration;
UINT TotalTasks;
UINT CurrentTasks;
UINT TimeCounts[ARP1394_NUM_TASKTIME_SLOTS];
} ARP1394_IOCTL_GET_TASK_STATS, *PARP1394_IOCTL_GET_TASK_STATS;
// Structure used to get arp table stats.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_ARPCACHE_STATS
//
ARP1394_IOCTL_HEADER Hdr;
// Duration of stats collection, in seconds.
//
UINT StatsDuration;
UINT TotalQueries;
UINT SuccessfulQueries;
UINT FailedQueries;
UINT TotalResponses;
UINT TotalLookups;
UINT TraverseRatio;
} ARP1394_IOCTL_GET_ARPCACHE_STATS, *PARP1394_IOCTL_GET_ARPCACHE_STATS;
// Structure used to get call stats.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_CALL_STATS
//
ARP1394_IOCTL_HEADER Hdr;
// Duration of stats collection, in seconds.
//
UINT StatsDuration;
//
// FIFO-related call stats.
//
UINT TotalSendFifoMakeCalls;
UINT SuccessfulSendFifoMakeCalls;
UINT FailedSendFifoMakeCalls;
UINT IncomingClosesOnSendFifos;
//
// Channel-related call stats.
//
UINT TotalChannelMakeCalls;
UINT SuccessfulChannelMakeCalls;
UINT FailedChannelMakeCalls;
UINT IncomingClosesOnChannels;
} ARP1394_IOCTL_GET_CALL_STATS, *PARP1394_IOCTL_GET_CALL_STATS;
// Structure used to reset statistics.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_RESET_STATS
//
ARP1394_IOCTL_HEADER Hdr;
} ARP1394_IOCTL_RESET_STATS, *PARP1394_IOCTL_RESET_STATS;
// Structure used to re-init the interface.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_REINIT_INTERFACE
//
ARP1394_IOCTL_HEADER Hdr;
} ARP1394_IOCTL_REINIT_INTERFACE, *PARP1394_IOCTL_REINIT_INTERFACE;
#if 0
//
// the structure for returning basic information about the miniport.
//
typedef struct
{
UINT64 UniqueID; // This node's 64-bit Unique ID.
ULONG BusGeneration; // 1394 Bus generation ID.
USHORT NodeAddress; // Local nodeID for the current bus
// generation.
USHORT Reserved; // Padding.
UINT MaxRecvBlockSize; // Maximum size, in bytes, of blocks
// that can be read.
UINT MaxRecvSpeed; // Max speed which can be accepted
// -- minimum
// of the max local link speed and
// the max local PHY speed.
} ARP1394_IOCTL_LOCAL_NODE_INFO, *PARP1394_IOCTL_LOCAL_NODE_INFO;
//
// the structure for returning basic information about a remote node.
//
typedef struct
{
UINT64 UniqueID; // This node's 64-bit Unique ID.
USHORT NodeAddress; // Local nodeID for the current bus
// generation.
USHORT Reserved; // Padding.
UINT MaxRecvBlockSize; // Maximum size, in bytes, of blocks
// that can be read.
UINT MaxRecvSpeed; // Max speed which can be accepted
// -- minimum
// of the max local link speed and
// the max local PHY speed.
UINT MaxSpeedBetweenNodes;// Max speed which can be accepted
UINT Flags; // One or more ARP1394_IOCTL_REMOTEFLAGS_* consts
#define ARP1394_IOCTL_REMOTEFLAGS_ACTIVE (0x1<<0)
#define ARP1394_IOCTL_REMOTEFLAGS_LOADING (0x1<<1)
#define ARP1394_IOCTL_REMOTEFLAGS_UNLOADING (0x1<<2)
#if 0 // later
//
// Following numbers are since the last bus reset.
//
UINT NumFifoPktsSent;
UINT NumFifoPktsReceived;
UINT NumChannelPktsReceived;
UINT NumFifoSendFailures;
UINT NumFifoReceiveDiscards;
UINT NumChannelPktsReceived;
UINT64 NumFifoBytesSent;
UINT64 NumChannelBytesSent;
UINT64 NumFifoBytesReceived;
UINT64 NumChannelBytesReceived;
#endif // 0
} ARP1394_IOCTL_REMOTE_NODE_INFO, *PARP1394_IOCTL_REMOTE_NODE_INFO;
typedef struct
{
UINT NumPacketsSent;
UINT NumPacketsReceived;
#if 0 // later
UINT NumSendFailures;
UINT NumReceiveDiscards;
UINT64 NumBytesSent;
UINT64 NumBytesReceived;
#endif // 0
} ARP1394_IOCTL_CHANNEL_INFO, *PARP1394_IOCTL_CHANNEL_INFO;
#endif // 0
#define ARP1394_IOCTL_MAX_BUSINFO_NODES 64
#define ARP1394_IOCTL_MAX_BUSINFO_CHANNELS 64
#define ARP1394_IOCTL_MAX_PACKET_SIZE 1000
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_NICINFO
//
ARP1394_IOCTL_HEADER Hdr;
// NIC information (defined in nic1394.h)
//
NIC1394_NICINFO Info;
#if 0
UINT Version;
UINT ChannelMapLow; // LSB bit == channel 0
UINT ChannelMapHigh; // MSB bit == channel 63
UINT NumBusResets;
UINT SecondsSinceLastBusReset;
UINT NumRemoteNodes;
ARP1394_IOCTL_LOCAL_NODE_INFO LocalNodeInfo;
ARP1394_IOCTL_REMOTE_NODE_INFO RemoteNodeInfo[ARP1394_IOCTL_MAX_BUSINFO_NODES];
ARP1394_IOCTL_CHANNEL_INFO ChannelInfo[ARP1394_IOCTL_MAX_BUSINFO_CHANNELS];
#endif
} ARP1394_IOCTL_NICINFO, *PARP1394_IOCTL_NICINFO;
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_SEND_PACKET
//
ARP1394_IOCTL_HEADER Hdr;
UINT PacketSize;
UCHAR Data[ARP1394_IOCTL_MAX_PACKET_SIZE];
} ARP1394_IOCTL_SEND_PACKET, *PARP1394_IOCTL_SEND_PACKET;
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_RECV_PACKET
//
ARP1394_IOCTL_HEADER Hdr;
UINT PacketSize;
UCHAR Data[ARP1394_IOCTL_MAX_PACKET_SIZE];
} ARP1394_IOCTL_RECV_PACKET, *PARP1394_IOCTL_RECV_PACKET;
typedef struct
{
// Channel number.
//
UINT Channel;
// IP multicast group address bound to this channel.
//
ULONG GroupAddress;
// Absolute time at which this information was updated,
// in seconds.
//
UINT UpdateTime;
// Absolute time at which this mapping will expire.
// In seconds.
//
UINT ExpieryTime;
UINT SpeedCode;
// Status
//
UINT Flags; // One of the ARP1394_IOCTL_MCIFLAGS_*
#define ARP1394_IOCTL_MCIFLAGS_ALLOCATED 0x1
// NodeID of owner of this channel.
//
UINT NodeId;
} ARP1394_IOCTL_MCAP_CHANNEL_INFO;
// Structure used to get MCAP-related info.
//
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_MCAPINFO
//
ARP1394_IOCTL_HEADER Hdr;
// Number of entries filled out in this structure.
//
UINT NumEntries;
// Space for NumEntriesAvailable arp table entries.
//
ARP1394_IOCTL_MCAP_CHANNEL_INFO
Entries[ARP1394_IOCTL_MAX_BUSINFO_CHANNELS];
} ARP1394_IOCTL_GET_MCAPINFO, *PARP1394_IOCTL_GET_MCAPINFO;
typedef struct
{
// Hdr.Op must be set to one of
// ARP1394_IOCTL_OP_ETHERNET_START_EMULATION
// ARP1394_IOCTL_OP_ETHERNET_STOP_EMULATION
// ARP1394_IOCTL_OP_ETHERNET_ADD_MULTICAST_ADDRESS
// ARP1394_IOCTL_OP_ETHERNET_DEL_MULTICAST_ADDRESS
// ARP1394_IOCTL_OP_ETHERNET_ENABLE_PROMISCUOUS_MODE
// ARP1394_IOCTL_OP_ETHERNET_DISABLE_PROMISCUOUS_MODE
//
ARP1394_IOCTL_HEADER Hdr;
// Null-terminated NDIS Adapter name
//
#define ARP1394_MAX_ADAPTER_NAME_LENGTH 128
WCHAR AdapterName[ARP1394_MAX_ADAPTER_NAME_LENGTH+1];
// Flags. Reserved for future use.
//
UINT Flags;
// Ethernet MAC address. Usage as follows:
//
// ARP1394_IOCTL_OP_ETHERNET_ADD_MULTICAST_ADDRESS: Multicast address
// ARP1394_IOCTL_OP_ETHERNET_DEL_MULTICAST_ADDRESS: Multicast address
//
// Unused for other operations.
//
UCHAR MacAddress[6];
} ARP1394_IOCTL_ETHERNET_NOTIFICATION, *PARP1394_IOCTL_ETHERNET_NOTIFICATION;
typedef struct
{
// Hdr.Op must be set to ARP1394_IOCTL_OP_GET_EUID_NODE_MAC_TABLE
//
ARP1394_IOCTL_HEADER Hdr;
//
//This contains the Topology
EUID_TOPOLOGY Map;
} ARP1394_IOCTL_EUID_NODE_MAC_INFO, *PARP1394_IOCTL_EUID_NODE_MAC_INFO;
typedef union
{
ARP1394_IOCTL_HEADER Hdr;
ARP1394_IOCTL_GET_ARPCACHE GetArpCache;
ARP1394_IOCTL_ADD_ARP_ENTRY AddArpEntry;
ARP1394_IOCTL_DEL_ARP_ENTRY DelArpEntry;
ARP1394_IOCTL_PURGE_ARPCACHE PurgeArpCache;
ARP1394_IOCTL_GET_PACKET_STATS GetPktStats;
ARP1394_IOCTL_GET_TASK_STATS GetTaskStats;
ARP1394_IOCTL_GET_ARPCACHE_STATS GetArpStats;
ARP1394_IOCTL_GET_CALL_STATS GetCallStats;
ARP1394_IOCTL_RESET_STATS ResetStats;
ARP1394_IOCTL_REINIT_INTERFACE ReinitInterface;
ARP1394_IOCTL_NICINFO IoctlNicInfo;
ARP1394_IOCTL_SEND_PACKET SendPacket;
ARP1394_IOCTL_RECV_PACKET RecvPacket;
ARP1394_IOCTL_ETHERNET_NOTIFICATION EthernetNotification;
ARP1394_IOCTL_EUID_NODE_MAC_INFO EuidNodeMacInfo;
} ARP1394_IOCTL_COMMAND, *PARP1394_IOCTL_COMMAND;
#endif // _ARP1394_IOCTL_