Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//============================================================================
// Copyright (c) 1995, Microsoft Corporation
//
// File: table.h
//
// History:
// Abolade Gbadegesin August 31, 1995 Created
//
// Interface table and stats tables declarations
//============================================================================
#ifndef _TABLE_H_
#define _TABLE_H_
#define GETMODE_EXACT 0
#define GETMODE_FIRST 1
#define GETMODE_NEXT 2
//
// TYPE DEFINITIONS FOR INTERFACE MANAGEMENT
//
//
// struct: IF_TABLE_ENTRY
//
// declares the components of an interface table entry
//
typedef struct _IF_TABLE_ENTRY {
LIST_ENTRY ITE_LinkByAddress; LIST_ENTRY ITE_LinkByIndex; LIST_ENTRY ITE_HTLinkByIndex; DWORD ITE_Index; DWORD ITE_Flags; IPBOOTP_IF_STATS ITE_Stats; PIPBOOTP_IF_CONFIG ITE_Config; PIPBOOTP_IF_BINDING ITE_Binding; SOCKET *ITE_Sockets;
} IF_TABLE_ENTRY, *PIF_TABLE_ENTRY;
#define ITEFLAG_BOUND ((DWORD)0x00000001)
#define ITEFLAG_ENABLED ((DWORD)0x00000002)
//
// macros and definitions used by interface tables
//
#define IF_HASHTABLE_SIZE 29
#define IF_HASHVALUE(i) \
(((i) + ((i) >> 8) + ((i) >> 16) + ((i) >> 24)) % IF_HASHTABLE_SIZE)
#define IF_IS_BOUND(i) \
((i)->ITE_Flags & ITEFLAG_BOUND) #define IF_IS_ENABLED(i) \
((i)->ITE_Flags & ITEFLAG_ENABLED) #define IF_IS_ACTIVE(i) \
(IF_IS_BOUND(i) && IF_IS_ENABLED(i))
#define IF_IS_UNBOUND(i) !IF_IS_BOUND(i)
#define IF_IS_DISABLED(i) !IF_IS_ENABLED(i)
#define IF_IS_INACTIVE(i) !IF_IS_ACTIVE(i)
//
// struct: IF_TABLE
//
// declares the structure of an interface table. consists of a hash-table
// of IF_TABLE_ENTRY structures hashed on interface index, and a list
// of all activated interfaces ordered by IP address
//
typedef struct _IF_TABLE {
DWORD IT_Created; LIST_ENTRY IT_ListByAddress; LIST_ENTRY IT_ListByIndex; LIST_ENTRY IT_HashTableByIndex[IF_HASHTABLE_SIZE]; READ_WRITE_LOCK IT_RWL;
} IF_TABLE, *PIF_TABLE;
#define IF_TABLE_CREATED(pTable) ((pTable)->IT_Created == 0x12345678)
DWORD CreateIfTable( PIF_TABLE pTable );
DWORD DeleteIfTable( PIF_TABLE pTable );
DWORD CreateIfEntry( PIF_TABLE pTable, DWORD dwIndex, PVOID pConfig );
DWORD DeleteIfEntry( PIF_TABLE pTable, DWORD dwIndex );
DWORD ValidateIfConfig( PIPBOOTP_IF_CONFIG pic );
DWORD CreateIfSocket( PIF_TABLE_ENTRY pITE );
DWORD DeleteIfSocket( PIF_TABLE_ENTRY pITE );
DWORD BindIfEntry( PIF_TABLE pTable, DWORD dwIndex, PIP_ADAPTER_BINDING_INFO pBinding );
DWORD UnBindIfEntry( PIF_TABLE pTable, DWORD dwIndex );
DWORD EnableIfEntry( PIF_TABLE pTable, DWORD dwIndex );
DWORD DisableIfEntry( PIF_TABLE pTable, DWORD dwIndex );
DWORD ConfigureIfEntry( PIF_TABLE pTable, DWORD dwIndex, PVOID pConfig );
PIF_TABLE_ENTRY GetIfByIndex( PIF_TABLE pTable, DWORD dwIndex );
PIF_TABLE_ENTRY GetIfByAddress( PIF_TABLE pTable, DWORD dwAddress, PDWORD pdwAddrIndex );
PIF_TABLE_ENTRY GetIfByListIndex( PIF_TABLE pTable, DWORD dwIndex, DWORD dwGetMode, PDWORD pdwErr ); DWORD InsertIfByAddress( PIF_TABLE pTable, PIF_TABLE_ENTRY pITE );
#endif
|