220 lines
6.6 KiB
C
220 lines
6.6 KiB
C
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
private\inc\ddipinip.h
|
|
|
|
Abstract:
|
|
|
|
Public IOCTLS and related structures for the IP in IP encapsulation
|
|
driver
|
|
See documentation for more details
|
|
|
|
Author:
|
|
|
|
Amritansh Raghav
|
|
|
|
Revision History:
|
|
|
|
AmritanR Created
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef __DDIPINIP_H__
|
|
#define __DDIPINIP_H__
|
|
|
|
#ifndef ANY_SIZE
|
|
#define ANY_SIZE 1
|
|
#endif
|
|
|
|
#define IPINIP_SERVICE_NAME "IPINIP"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Device Name - this string is the name of the device. It is the name //
|
|
// that should be passed to NtCreateFile when accessing the device. //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define DD_IPINIP_DEVICE_NAME L"\\Device\\IPINIP"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Win32 Name - This is the (Unicode and NonUnicode) name exposed by Win32 //
|
|
// subsystem for the device. It is the name that should be passed to //
|
|
// CreateFile(Ex) when opening the device. //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define IPINIP_NAME L"\\\\.\\IPINIP"
|
|
#define IPINIP_NAME_NUC "\\\\.\\IPINIP"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// IOCTL code definitions and related structures //
|
|
// All the IOCTLs are synchronous //
|
|
// All need administrator privilege //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define FSCTL_IPINIP_BASE FILE_DEVICE_NETWORK
|
|
|
|
#define _IPINIP_CTL_CODE(function, method, access) \
|
|
CTL_CODE(FSCTL_IPINIP_BASE, function, method, access)
|
|
|
|
#define MIN_IPINIP_CODE 0
|
|
|
|
#define CREATE_TUNNEL_CODE (MIN_IPINIP_CODE)
|
|
#define DELETE_TUNNEL_CODE (CREATE_TUNNEL_CODE + 1)
|
|
#define SET_TUNNEL_INFO_CODE (DELETE_TUNNEL_CODE + 1)
|
|
#define GET_TUNNEL_TABLE_CODE (SET_TUNNEL_INFO_CODE + 1)
|
|
#define IPINIP_NOTIFICATION_CODE (GET_TUNNEL_TABLE_CODE + 1)
|
|
|
|
#define MAX_IPINIP_CODE (IPINIP_NOTIFICATION_CODE)
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// The IOCTL used to create a tunnel //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#define IOCTL_IPINIP_CREATE_TUNNEL \
|
|
_IPINIP_CTL_CODE(CREATE_TUNNEL_CODE,METHOD_BUFFERED,FILE_WRITE_ACCESS)
|
|
|
|
typedef struct _IPINIP_CREATE_TUNNEL
|
|
{
|
|
//
|
|
// The index of the created tunnel
|
|
//
|
|
|
|
OUT DWORD dwIfIndex;
|
|
|
|
//
|
|
// Name of the interface (must be a guid)
|
|
//
|
|
|
|
IN GUID Guid;
|
|
}IPINIP_CREATE_TUNNEL, *PIPINIP_CREATE_TUNNEL;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// The IOCTL used to delete a tunnel //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#define IOCTL_IPINIP_DELETE_TUNNEL \
|
|
_IPINIP_CTL_CODE(DELETE_TUNNEL_CODE,METHOD_BUFFERED,FILE_WRITE_ACCESS)
|
|
|
|
typedef struct _IPINIP_DELETE_TUNNEL
|
|
{
|
|
//
|
|
// The index of the tunnel to remove
|
|
//
|
|
|
|
IN DWORD dwIfIndex;
|
|
|
|
}IPINIP_DELETE_TUNNEL, *PIPINIP_DELETE_TUNNEL;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// The IOCTL used to set up a tunnel //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define IOCTL_IPINIP_SET_TUNNEL_INFO \
|
|
_IPINIP_CTL_CODE(SET_TUNNEL_INFO_CODE,METHOD_BUFFERED,FILE_WRITE_ACCESS)
|
|
|
|
typedef struct _IPINIP_SET_TUNNEL_INFO
|
|
{
|
|
//
|
|
// Index as returned by the create call
|
|
//
|
|
|
|
IN DWORD dwIfIndex;
|
|
|
|
//
|
|
// The state the tunnel goes to after the set
|
|
//
|
|
|
|
OUT DWORD dwOperationalState;
|
|
|
|
//
|
|
// Configuration
|
|
//
|
|
|
|
IN DWORD dwRemoteAddress;
|
|
IN DWORD dwLocalAddress;
|
|
IN BYTE byTtl;
|
|
}IPINIP_SET_TUNNEL_INFO, *PIPINIP_SET_TUNNEL_INFO;
|
|
|
|
|
|
#define IOCTL_IPINIP_GET_TUNNEL_TABLE \
|
|
_IPINIP_CTL_CODE(GET_TUNNEL_TABLE_CODE,METHOD_BUFFERED,FILE_WRITE_ACCESS)
|
|
|
|
|
|
typedef struct _TUNNEL_INFO
|
|
{
|
|
OUT DWORD dwIfIndex;
|
|
OUT DWORD dwRemoteAddress;
|
|
OUT DWORD dwLocalAddress;
|
|
OUT DWORD fMapped;
|
|
OUT BYTE byTtl;
|
|
}TUNNEL_INFO, *PTUNNEL_INFO;
|
|
|
|
typedef struct _IPINIP_TUNNEL_TABLE
|
|
{
|
|
OUT ULONG ulNumTunnels;
|
|
OUT TUNNEL_INFO rgTable[ANY_SIZE];
|
|
}IPINIP_TUNNEL_TABLE, *PIPINIP_TUNNEL_TABLE;
|
|
|
|
#define SIZEOF_BASIC_TUNNEL_TABLE \
|
|
(ULONG)(FIELD_OFFSET(IPINIP_TUNNEL_TABLE, rgTable[0]))
|
|
|
|
#define SIZEOF_TUNNEL_TABLE(X) \
|
|
SIZEOF_BASIC_TUNNEL_TABLE + ((X) * sizeof(TUNNEL_INFO))
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// The asynchronous IOCTL used to receive state change notifications //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#define IOCTL_IPINIP_NOTIFICATION \
|
|
_IPINIP_CTL_CODE(IPINIP_NOTIFICATION_CODE,METHOD_BUFFERED,FILE_WRITE_ACCESS)
|
|
|
|
typedef enum _IPINIP_EVENT
|
|
{
|
|
IE_INTERFACE_UP = 0,
|
|
IE_INTERFACE_DOWN = 1,
|
|
|
|
}IPINIP_EVENT, *PIPINIP_EVENT;
|
|
|
|
typedef enum _IPINIP_SUB_EVENT
|
|
{
|
|
ISE_ICMP_TTL_TOO_LOW = 0,
|
|
ISE_DEST_UNREACHABLE = 1,
|
|
|
|
}IPINIP_SUB_EVENT, *PIPINIP_SUB_EVENT;
|
|
|
|
typedef struct _IPINIP_NOTIFICATION
|
|
{
|
|
IPINIP_EVENT ieEvent;
|
|
|
|
IPINIP_SUB_EVENT iseSubEvent;
|
|
|
|
DWORD dwIfIndex;
|
|
|
|
}IPINIP_NOTIFICATION, *PIPINIP_NOTIFICATION;
|
|
|
|
#endif // __DDIPINIP_H__
|