Source code of Windows XP (NT5)
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.

193 lines
3.5 KiB

  1. //============================================================================
  2. // Copyright (c) 1995, Microsoft Corporation
  3. //
  4. // File: table.h
  5. //
  6. // History:
  7. // Abolade Gbadegesin August 31, 1995 Created
  8. //
  9. // Interface table and stats tables declarations
  10. //============================================================================
  11. #ifndef _TABLE_H_
  12. #define _TABLE_H_
  13. #define GETMODE_EXACT 0
  14. #define GETMODE_FIRST 1
  15. #define GETMODE_NEXT 2
  16. //
  17. // TYPE DEFINITIONS FOR INTERFACE MANAGEMENT
  18. //
  19. //
  20. // struct: IF_TABLE_ENTRY
  21. //
  22. // declares the components of an interface table entry
  23. //
  24. typedef struct _IF_TABLE_ENTRY {
  25. LIST_ENTRY ITE_LinkByAddress;
  26. LIST_ENTRY ITE_LinkByIndex;
  27. LIST_ENTRY ITE_HTLinkByIndex;
  28. DWORD ITE_Index;
  29. DWORD ITE_Flags;
  30. IPBOOTP_IF_STATS ITE_Stats;
  31. PIPBOOTP_IF_CONFIG ITE_Config;
  32. PIPBOOTP_IF_BINDING ITE_Binding;
  33. SOCKET *ITE_Sockets;
  34. } IF_TABLE_ENTRY, *PIF_TABLE_ENTRY;
  35. #define ITEFLAG_BOUND ((DWORD)0x00000001)
  36. #define ITEFLAG_ENABLED ((DWORD)0x00000002)
  37. //
  38. // macros and definitions used by interface tables
  39. //
  40. #define IF_HASHTABLE_SIZE 29
  41. #define IF_HASHVALUE(i) \
  42. (((i) + ((i) >> 8) + ((i) >> 16) + ((i) >> 24)) % IF_HASHTABLE_SIZE)
  43. #define IF_IS_BOUND(i) \
  44. ((i)->ITE_Flags & ITEFLAG_BOUND)
  45. #define IF_IS_ENABLED(i) \
  46. ((i)->ITE_Flags & ITEFLAG_ENABLED)
  47. #define IF_IS_ACTIVE(i) \
  48. (IF_IS_BOUND(i) && IF_IS_ENABLED(i))
  49. #define IF_IS_UNBOUND(i) !IF_IS_BOUND(i)
  50. #define IF_IS_DISABLED(i) !IF_IS_ENABLED(i)
  51. #define IF_IS_INACTIVE(i) !IF_IS_ACTIVE(i)
  52. //
  53. // struct: IF_TABLE
  54. //
  55. // declares the structure of an interface table. consists of a hash-table
  56. // of IF_TABLE_ENTRY structures hashed on interface index, and a list
  57. // of all activated interfaces ordered by IP address
  58. //
  59. typedef struct _IF_TABLE {
  60. DWORD IT_Created;
  61. LIST_ENTRY IT_ListByAddress;
  62. LIST_ENTRY IT_ListByIndex;
  63. LIST_ENTRY IT_HashTableByIndex[IF_HASHTABLE_SIZE];
  64. READ_WRITE_LOCK IT_RWL;
  65. } IF_TABLE, *PIF_TABLE;
  66. #define IF_TABLE_CREATED(pTable) ((pTable)->IT_Created == 0x12345678)
  67. DWORD
  68. CreateIfTable(
  69. PIF_TABLE pTable
  70. );
  71. DWORD
  72. DeleteIfTable(
  73. PIF_TABLE pTable
  74. );
  75. DWORD
  76. CreateIfEntry(
  77. PIF_TABLE pTable,
  78. DWORD dwIndex,
  79. PVOID pConfig
  80. );
  81. DWORD
  82. DeleteIfEntry(
  83. PIF_TABLE pTable,
  84. DWORD dwIndex
  85. );
  86. DWORD
  87. ValidateIfConfig(
  88. PIPBOOTP_IF_CONFIG pic
  89. );
  90. DWORD
  91. CreateIfSocket(
  92. PIF_TABLE_ENTRY pITE
  93. );
  94. DWORD
  95. DeleteIfSocket(
  96. PIF_TABLE_ENTRY pITE
  97. );
  98. DWORD
  99. BindIfEntry(
  100. PIF_TABLE pTable,
  101. DWORD dwIndex,
  102. PIP_ADAPTER_BINDING_INFO pBinding
  103. );
  104. DWORD
  105. UnBindIfEntry(
  106. PIF_TABLE pTable,
  107. DWORD dwIndex
  108. );
  109. DWORD
  110. EnableIfEntry(
  111. PIF_TABLE pTable,
  112. DWORD dwIndex
  113. );
  114. DWORD
  115. DisableIfEntry(
  116. PIF_TABLE pTable,
  117. DWORD dwIndex
  118. );
  119. DWORD
  120. ConfigureIfEntry(
  121. PIF_TABLE pTable,
  122. DWORD dwIndex,
  123. PVOID pConfig
  124. );
  125. PIF_TABLE_ENTRY
  126. GetIfByIndex(
  127. PIF_TABLE pTable,
  128. DWORD dwIndex
  129. );
  130. PIF_TABLE_ENTRY
  131. GetIfByAddress(
  132. PIF_TABLE pTable,
  133. DWORD dwAddress,
  134. PDWORD pdwAddrIndex
  135. );
  136. PIF_TABLE_ENTRY
  137. GetIfByListIndex(
  138. PIF_TABLE pTable,
  139. DWORD dwIndex,
  140. DWORD dwGetMode,
  141. PDWORD pdwErr
  142. );
  143. DWORD
  144. InsertIfByAddress(
  145. PIF_TABLE pTable,
  146. PIF_TABLE_ENTRY pITE
  147. );
  148. #endif