/*
 * tdiinfo.h
 *
 * TDI set and query information interface
 *
 * This file is part of the w32api package.
 *
 * Contributors:
 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __TDIINFO_H
#define __TDIINFO_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct TDIEntityID {
  ULONG  tei_entity;
  ULONG  tei_instance;
} TDIEntityID;

#define	MAX_TDI_ENTITIES				4096
#define	INVALID_ENTITY_INSTANCE				-1
#define	GENERIC_ENTITY					0
#define	ENTITY_LIST_ID					0
#define	ENTITY_TYPE_ID					1

#define	AT_ENTITY					0x280
#define	CL_NL_ENTITY					0x301
#define	CL_TL_ENTITY					0x401
#define	CO_NL_ENTITY					0x300
#define	CO_TL_ENTITY					0x400
#define	ER_ENTITY					0x380
#define	IF_ENTITY					0x200

#define	AT_ARP						0x280
#define	AT_NULL						0x282
#define	CL_TL_NBF					0x401
#define	CL_TL_UDP					0x403
#define	CL_NL_IPX					0x301
#define	CL_NL_IP					0x303
#define	CO_TL_NBF					0x400
#define	CO_TL_SPX					0x402
#define	CO_TL_TCP					0x404
#define	CO_TL_SPP					0x406
#define	ER_ICMP						0x380
#define	IF_GENERIC					0x200
#define	IF_MIB						0x202

/* TDIObjectID.toi_class constants */
#define	INFO_CLASS_GENERIC				0x100
#define	INFO_CLASS_PROTOCOL				0x200
#define	INFO_CLASS_IMPLEMENTATION			0x300

/* TDIObjectID.toi_type constants */
#define	INFO_TYPE_PROVIDER				0x100
#define	INFO_TYPE_ADDRESS_OBJECT			0x200
#define	INFO_TYPE_CONNECTION				0x300

typedef struct _TDIObjectID {
	TDIEntityID  toi_entity;
	ULONG  toi_class;
	ULONG  toi_type;
	ULONG  toi_id;
} TDIObjectID;

#define	CONTEXT_SIZE					16

typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX {
  TDIObjectID  ID;
  ULONG_PTR  Context[CONTEXT_SIZE / sizeof(ULONG_PTR)];
} TCP_REQUEST_QUERY_INFORMATION_EX, *PTCP_REQUEST_QUERY_INFORMATION_EX;

#if defined(_WIN64)
typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX32 {
  TDIObjectID  ID;
  ULONG32  Context[CONTEXT_SIZE / sizeof(ULONG32)];
} TCP_REQUEST_QUERY_INFORMATION_EX32, *PTCP_REQUEST_QUERY_INFORMATION_EX32;
#endif /* _WIN64 */

typedef struct _TCP_REQUEST_SET_INFORMATION_EX {
  TDIObjectID  ID;
  unsigned int BufferSize;
  unsigned char Buffer[1];
} TCP_REQUEST_SET_INFORMATION_EX, *PTCP_REQUEST_SET_INFORMATION_EX;

#ifdef __cplusplus
}
#endif

#endif /* __TDIINFO_H */
