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.

323 lines
7.5 KiB

  1. /********************************************************************/
  2. /** Copyright(c) 1995 Microsoft Corporation. **/
  3. /********************************************************************/
  4. //***
  5. //
  6. // Filename: dimif.h
  7. //
  8. // Description: Contains definitions of data structures and contstants used
  9. // by components that interface with DIM. (DDM)
  10. //
  11. // History: May 11,1995 NarenG Created original version.
  12. //
  13. #ifndef _DIMIF_
  14. #define _DIMIF_
  15. #define NUM_IF_BUCKETS 31 // # of buckets in the interface hash
  16. // table
  17. //
  18. // Debug trace component values
  19. //
  20. #define TRACE_DIM (0x00010000|TRACE_USE_MASK|TRACE_USE_MSEC)
  21. #define TRACE_FSM (0x00020000|TRACE_USE_MASK|TRACE_USE_MSEC)
  22. #define TRACE_MESSAGES (0x00040000|TRACE_USE_MASK|TRACE_USE_MSEC)
  23. #define TRACE_NETBIOS (0x00080000|TRACE_USE_MASK|TRACE_USE_MSEC)
  24. #define TRACE_STACK (0x00100000|TRACE_USE_MASK|TRACE_USE_MSEC)
  25. #define TRACE_SECURITY (0x00200000|TRACE_USE_MASK|TRACE_USE_MSEC)
  26. #define TRACE_TIMER (0x00400000|TRACE_USE_MASK|TRACE_USE_MSEC)
  27. //
  28. // This represents a router manager in the DIM
  29. //
  30. typedef struct _ROUTER_MANAGER_OBJECT
  31. {
  32. BOOL fIsRunning;
  33. LPVOID pDefaultClientInterface;
  34. DWORD dwDefaultClientInterfaceSize;
  35. HMODULE hModule;
  36. DIM_ROUTER_INTERFACE DdmRouterIf;
  37. } ROUTER_MANAGER_OBJECT, *PROUTER_MANAGER_OBJECT;
  38. //
  39. // Various states that an router interface can have.
  40. //
  41. typedef enum ROUTER_INTERFACE_STATE
  42. {
  43. RISTATE_DISCONNECTED,
  44. RISTATE_CONNECTING,
  45. RISTATE_CONNECTED
  46. } ROUTER_INTERFACE_STATE;
  47. //
  48. // State flags for each Transport Interface
  49. //
  50. #define RITRANSPORT_CONNECTED 0x00000001
  51. #define RITRANSPORT_ENABLED 0x00000002
  52. //
  53. // This represents an interface for a certain transport
  54. //
  55. typedef struct _ROUTER_INTERFACE_TRANSPORT
  56. {
  57. HANDLE hInterface;
  58. DWORD fState;
  59. } ROUTER_INTERFACE_TRANSPORT, *PROUTER_INTERFACE_TRANSPORT;
  60. //
  61. // This represents a WAN/LAN interface in the DIM.
  62. //
  63. #define IFFLAG_LOCALLY_INITIATED 0x00000001
  64. #define IFFLAG_PERSISTENT 0x00000002
  65. #define IFFLAG_ENABLED 0x00000004
  66. #define IFFLAG_OUT_OF_RESOURCES 0x00000008
  67. #define IFFLAG_DISCONNECT_INITIATED 0x00000010
  68. #define IFFLAG_CONNECTION_FAILURE 0x00000020
  69. #define IFFLAG_DIALOUT_HOURS_RESTRICTION 0x00000040
  70. #define IFFLAG_NO_MEDIA_SENSE 0x00000080
  71. #define IFFLAG_NO_DEVICE 0x00000100
  72. #define IFFLAG_DIALMODE_DIALASNEEDED 0x00000200
  73. #define IFFLAG_DIALMODE_DIALALL 0x00000400
  74. typedef struct _ROUTER_INTERFACE_OBJECT
  75. {
  76. struct _ROUTER_INTERFACE_OBJECT * pNext;
  77. HANDLE hDIMInterface; // Handle to this interface
  78. ROUTER_INTERFACE_STATE State;
  79. ROUTER_INTERFACE_TYPE IfType;
  80. HCONN hConnection;
  81. HRASCONN hRasConn;
  82. DWORD fMediaUsed;
  83. DWORD fFlags;
  84. DWORD dwNumSubEntries;
  85. DWORD dwNumSubEntriesCounter;
  86. DWORD dwNumOfReConnectAttempts;
  87. DWORD dwNumOfReConnectAttemptsCounter;
  88. DWORD dwSecondsBetweenReConnectAttempts;
  89. DWORD dwReachableAfterSecondsMin;
  90. DWORD dwReachableAfterSecondsMax;
  91. DWORD dwReachableAfterSeconds;
  92. HANDLE hEventNotifyCaller;
  93. LPWSTR lpwsInterfaceName;
  94. DWORD dwLastError;
  95. LPWSTR lpwsDialoutHoursRestriction;
  96. PPP_INTERFACE_INFO PppInterfaceInfo;
  97. ROUTER_INTERFACE_TRANSPORT Transport[1]; // Array of Transports
  98. } ROUTER_INTERFACE_OBJECT, *PROUTER_INTERFACE_OBJECT;
  99. //
  100. // This represents the hash table of Router Interface Objects
  101. //
  102. typedef struct _ROUTER_INTERFACE_TABLE
  103. {
  104. DWORD dwNumTotalInterfaces;
  105. DWORD dwNumLanInterfaces;
  106. DWORD dwNumWanInterfaces;
  107. DWORD dwNumClientInterfaces;
  108. ROUTER_INTERFACE_OBJECT * IfBucket[NUM_IF_BUCKETS]; // Array of buckets
  109. CRITICAL_SECTION CriticalSection; // Mutual exclusion
  110. // around this table
  111. } ROUTER_INTERFACE_TABLE, *PROUTER_INTERFACE_TABLE;
  112. //
  113. // Router identity attribute structure definition.
  114. //
  115. typedef struct _ROUTER_IDENTITY_ATTRIBUTE_
  116. {
  117. DWORD dwVendorId;
  118. DWORD dwType;
  119. DWORD dwValue;
  120. } ROUTER_IDENTITY_ATTRIBUTE, *PROUTER_IDENTITY_ATTRIBUTE;
  121. //
  122. // Interface Object manipulation functions
  123. //
  124. ROUTER_INTERFACE_OBJECT *
  125. IfObjectAllocateAndInit(
  126. IN LPWSTR lpwstrName,
  127. IN ROUTER_INTERFACE_STATE State,
  128. IN ROUTER_INTERFACE_TYPE IfType,
  129. IN HCONN hConnection,
  130. IN BOOL fEnabled,
  131. IN DWORD dwReachableAfterSecondsMin,
  132. IN DWORD dwReachableAfterSecondsMax,
  133. IN LPWSTR lpwsDialoutHours
  134. );
  135. DWORD
  136. IfObjectInsertInTable(
  137. IN ROUTER_INTERFACE_OBJECT * pIfObject
  138. );
  139. ROUTER_INTERFACE_OBJECT *
  140. IfObjectGetPointer(
  141. IN HANDLE hDIMInterface
  142. );
  143. ROUTER_INTERFACE_OBJECT *
  144. IfObjectGetPointerByName(
  145. IN LPWSTR lpwstrName,
  146. IN BOOL fIncludeClientInterfaces
  147. );
  148. DWORD
  149. IfObjectHashIfHandleToBucket(
  150. IN HANDLE hDIMInterface
  151. );
  152. VOID
  153. IfObjectRemove(
  154. IN HANDLE hDIMInterface
  155. );
  156. BOOL
  157. IfObjectDoesLanInterfaceExist(
  158. VOID
  159. );
  160. VOID
  161. IfObjectFree(
  162. IN ROUTER_INTERFACE_OBJECT * pIfObject
  163. );
  164. VOID
  165. IfObjectWANDeviceInstalled(
  166. IN BOOL fWANDeviceInstalled
  167. );
  168. VOID
  169. IfObjectNotifyOfReachabilityChange(
  170. IN ROUTER_INTERFACE_OBJECT * pIfObject,
  171. IN BOOL fReachable,
  172. IN UNREACHABILITY_REASON dwReason
  173. );
  174. BOOL
  175. IfObjectIsLANDeviceActive(
  176. IN LPWSTR lpwsInterfaceName,
  177. OUT LPDWORD lpdwInactiveReason
  178. );
  179. VOID
  180. IfObjectNotifyOfMediaSenseChange(
  181. VOID
  182. );
  183. VOID
  184. IfObjectDeleteInterfaceFromTransport(
  185. IN ROUTER_INTERFACE_OBJECT * pIfObject,
  186. IN DWORD dwPid
  187. );
  188. //
  189. // Router identity object function prototypes
  190. //
  191. DWORD
  192. RouterIdentityObjectOpen(
  193. IN LPWSTR lpwszRouterName,
  194. IN DWORD dwRouterType,
  195. OUT HANDLE * phObjectRouterIdentity
  196. );
  197. VOID
  198. RouterIdentityObjectClose(
  199. IN HANDLE hObjectRouterIdentity
  200. );
  201. BOOL
  202. RouterIdentityObjectIsValueSet(
  203. IN HANDLE hRouterIdentityAttributes,
  204. IN DWORD dwVendorId,
  205. IN DWORD dwType,
  206. IN DWORD dwValue
  207. );
  208. DWORD
  209. RouterIdentityObjectGetValue(
  210. IN HANDLE hRouterIdentityAttributes,
  211. IN DWORD dwValueIndex,
  212. IN DWORD * lpdwVendorId,
  213. IN DWORD * lpdwType,
  214. IN DWORD * lpdwValue
  215. );
  216. DWORD
  217. RouterIdentityObjectAddRemoveValue(
  218. IN HANDLE hRouterIdentityObject,
  219. IN DWORD dwVendorId,
  220. IN DWORD dwType,
  221. IN DWORD dwValue,
  222. IN BOOL fAdd
  223. );
  224. VOID
  225. RouterIdentityObjectFreeAttributes(
  226. IN HANDLE hRouterIdentityAttributes
  227. );
  228. DWORD
  229. RouterIdentityObjectSetAttributes(
  230. IN HANDLE hRouterIdentityObject
  231. );
  232. VOID
  233. RouterIdentityObjectUpdateAttributes(
  234. IN PVOID pParameter,
  235. IN BOOLEAN fTimedOut
  236. );
  237. VOID
  238. RouterIdentityObjectUpdateDDMAttributes(
  239. VOID
  240. );
  241. #endif