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.

285 lines
6.0 KiB

  1. /*++
  2. Copyright (c) 1995 Microsoft Corporation
  3. Module Name:
  4. nb.c
  5. Abstract:
  6. IPX Router Console Monitoring and Configuration tool.
  7. NB Command dispatcher.
  8. Author:
  9. V Raman 1/5/1998
  10. --*/
  11. #include "precomp.h"
  12. #pragma hdrstop
  13. FN_HANDLE_CMD HandleIpxNbAddName;
  14. FN_HANDLE_CMD HandleIpxNbDelName;
  15. FN_HANDLE_CMD HandleIpxNbShowName;
  16. FN_HANDLE_CMD HandleIpxNbSetInterface;
  17. FN_HANDLE_CMD HandleIpxNbShowInterface;
  18. //
  19. // Table of add, delete, set and show commands for IPXNB
  20. //
  21. //
  22. // The commands are prefix-matched with the command-line, in sequential
  23. // order. So a command like 'ADD INTERFACE FILTER' must come before
  24. // the command 'ADD INTERFACE' in the table.
  25. //
  26. CMD_ENTRY g_IpxNbAddCmdTable[] =
  27. {
  28. CREATE_CMD_ENTRY( IPXNB_ADD_NAME, HandleIpxNbAddName )
  29. };
  30. CMD_ENTRY g_IpxNbDelCmdTable[] =
  31. {
  32. CREATE_CMD_ENTRY( IPXNB_DEL_NAME, HandleIpxNbDelName )
  33. };
  34. CMD_ENTRY g_IpxNbSetCmdTable[] =
  35. {
  36. CREATE_CMD_ENTRY( IPXNB_SET_INTERFACE, HandleIpxNbSetInterface )
  37. };
  38. CMD_ENTRY g_IpxNbShowCmdTable[] =
  39. {
  40. CREATE_CMD_ENTRY( IPXNB_SHOW_NAME, HandleIpxNbShowName ),
  41. CREATE_CMD_ENTRY( IPXNB_SHOW_INTERFACE, HandleIpxNbShowInterface )
  42. };
  43. //
  44. // Command groups
  45. //
  46. CMD_GROUP_ENTRY g_IpxNbCmdGroups[] =
  47. {
  48. CREATE_CMD_GROUP_ENTRY( GROUP_ADD, g_IpxNbAddCmdTable ),
  49. CREATE_CMD_GROUP_ENTRY( GROUP_DELETE, g_IpxNbDelCmdTable ),
  50. CREATE_CMD_GROUP_ENTRY( GROUP_SET, g_IpxNbSetCmdTable ),
  51. CREATE_CMD_GROUP_ENTRY( GROUP_SHOW, g_IpxNbShowCmdTable )
  52. };
  53. ULONG g_ulIpxNbNumGroups =
  54. sizeof( g_IpxNbCmdGroups ) / sizeof( CMD_GROUP_ENTRY );
  55. //
  56. // functions to handle top level functions
  57. //
  58. DWORD
  59. HandleIpxNbDump(
  60. IN LPCWSTR pwszMachine,
  61. IN OUT LPWSTR *ppwcArguments,
  62. IN DWORD dwCurrentIndex,
  63. IN DWORD dwArgCount,
  64. IN DWORD dwFlags,
  65. IN LPCVOID pvData,
  66. OUT BOOL *pbDone
  67. )
  68. {
  69. DWORD dwErr, dwRead = 0, dwTot = 0, i;
  70. PMPR_INTERFACE_0 IfList;
  71. WCHAR IfDisplayName[ MAX_INTERFACE_NAME_LEN + 1 ];
  72. PWCHAR argv[1];
  73. DWORD dwSize = sizeof(IfDisplayName);
  74. DisplayIPXMessage (g_hModule, MSG_IPX_NB_DUMP_HEADER);
  75. DisplayMessageT( DMP_IPX_NB_HEADER );
  76. //
  77. // enumerate interfaces
  78. //
  79. if ( g_hMprAdmin )
  80. {
  81. dwErr = MprAdminInterfaceEnum(
  82. g_hMprAdmin, 0, (unsigned char **)&IfList, MAXULONG, &dwRead,
  83. &dwTot,NULL
  84. );
  85. }
  86. else
  87. {
  88. dwErr = MprConfigInterfaceEnum(
  89. g_hMprConfig, 0, (unsigned char **)&IfList, MAXULONG, &dwRead,
  90. &dwTot,NULL
  91. );
  92. }
  93. if ( dwErr != NO_ERROR )
  94. {
  95. return dwErr;
  96. }
  97. //
  98. // enumerate interface settings on each interface
  99. //
  100. for ( i = 0; i < dwRead; i++ )
  101. {
  102. dwErr = IpmontrGetFriendlyNameFromIfName(
  103. IfList[i].wszInterfaceName, IfDisplayName, &dwSize
  104. );
  105. if ( dwErr == NO_ERROR )
  106. {
  107. argv[0] = IfDisplayName;
  108. ShowNbIf( 1, argv, (HANDLE)-1 );
  109. ShowNbName( 1, argv, (HANDLE)-1 );
  110. }
  111. }
  112. DisplayMessageT( DMP_IPX_NB_FOOTER );
  113. DisplayIPXMessage (g_hModule, MSG_IPX_NB_DUMP_FOOTER);
  114. if ( g_hMprAdmin )
  115. {
  116. MprAdminBufferFree( IfList );
  117. }
  118. else
  119. {
  120. MprConfigBufferFree( IfList );
  121. }
  122. return NO_ERROR;
  123. }
  124. //
  125. // Functions to handle IPX NB Filter add/del/set/show
  126. //
  127. DWORD
  128. HandleIpxNbAddName(
  129. IN LPCWSTR pwszMachine,
  130. IN OUT LPWSTR *ppwcArguments,
  131. IN DWORD dwCurrentIndex,
  132. IN DWORD dwArgCount,
  133. IN DWORD dwFlags,
  134. IN LPCVOID pvData,
  135. OUT BOOL *pbDone
  136. )
  137. {
  138. return CreateNbName(
  139. dwArgCount - dwCurrentIndex, ppwcArguments + dwCurrentIndex
  140. );
  141. }
  142. DWORD
  143. HandleIpxNbDelName(
  144. IN LPCWSTR pwszMachine,
  145. IN OUT LPWSTR *ppwcArguments,
  146. IN DWORD dwCurrentIndex,
  147. IN DWORD dwArgCount,
  148. IN DWORD dwFlags,
  149. IN LPCVOID pvData,
  150. OUT BOOL *pbDone
  151. )
  152. {
  153. return DeleteNbName(
  154. dwArgCount - dwCurrentIndex, ppwcArguments + dwCurrentIndex
  155. );
  156. }
  157. DWORD
  158. HandleIpxNbSetInterface(
  159. IN LPCWSTR pwszMachine,
  160. IN OUT LPWSTR *ppwcArguments,
  161. IN DWORD dwCurrentIndex,
  162. IN DWORD dwArgCount,
  163. IN DWORD dwFlags,
  164. IN LPCVOID pvData,
  165. OUT BOOL *pbDone
  166. )
  167. {
  168. return SetNbIf(
  169. dwArgCount - dwCurrentIndex, ppwcArguments + dwCurrentIndex
  170. );
  171. }
  172. DWORD
  173. HandleIpxNbShowInterface(
  174. IN LPCWSTR pwszMachine,
  175. IN OUT LPWSTR *ppwcArguments,
  176. IN DWORD dwCurrentIndex,
  177. IN DWORD dwArgCount,
  178. IN DWORD dwFlags,
  179. IN LPCVOID pvData,
  180. OUT BOOL *pbDone
  181. )
  182. {
  183. return ShowNbIf(
  184. dwArgCount - dwCurrentIndex, ppwcArguments + dwCurrentIndex, NULL
  185. );
  186. }
  187. DWORD
  188. HandleIpxNbShowName(
  189. IN LPCWSTR pwszMachine,
  190. IN OUT LPWSTR *ppwcArguments,
  191. IN DWORD dwCurrentIndex,
  192. IN DWORD dwArgCount,
  193. IN DWORD dwFlags,
  194. IN LPCVOID pvData,
  195. OUT BOOL *pbDone
  196. )
  197. {
  198. return ShowNbName(
  199. dwArgCount - dwCurrentIndex, ppwcArguments + dwCurrentIndex, NULL
  200. );
  201. }
  202. DWORD
  203. IpxNbDump(
  204. IN LPCWSTR pwszRouter,
  205. IN OUT LPWSTR *ppwcArguments,
  206. IN DWORD dwArgCount,
  207. IN LPCVOID pvData
  208. )
  209. {
  210. ConnectToRouter(pwszRouter);
  211. //g_hMIBServer = (MIB_SERVER_HANDLE)pvData;
  212. return HandleIpxNbDump(pwszRouter, ppwcArguments, 1, dwArgCount, 0,
  213. pvData, NULL );
  214. }