|
|
/*++
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_
|