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.

1778 lines
33 KiB

  1. /*++
  2. Copyright (c) 1989-1993 Microsoft Corporation
  3. Module Name:
  4. ipxprocs.h
  5. Abstract:
  6. This module contains definitions specific to the
  7. IPX module of the ISN transport.
  8. Author:
  9. Adam Barr (adamba) 2-September-1993
  10. Environment:
  11. Kernel mode
  12. Revision History:
  13. Sanjay Anand (SanjayAn) 3-Oct-1995
  14. Changes to support transfer of buffer ownership to transports - tagged [CH]
  15. 1. Added new functions - IpxReceivePacket, IpxReceiveIndicationCommon
  16. Sanjay Anand (SanjayAn) 27-Oct-1995
  17. Changes to support Plug and Play
  18. --*/
  19. //
  20. // MACROS.
  21. //
  22. //
  23. // Debugging aids
  24. //
  25. //
  26. // VOID
  27. // PANIC(
  28. // IN PSZ Message
  29. // );
  30. //
  31. #if DBG
  32. #define PANIC(Msg) \
  33. CTEPrint ((Msg))
  34. #else
  35. #define PANIC(Msg)
  36. #endif
  37. //
  38. // These are define to allow CTEPrints that disappear when
  39. // DBG is 0.
  40. //
  41. #if STEFAN_DBG
  42. // #if DBG
  43. #define IpxPrint0(fmt) DbgPrint(fmt)
  44. #define IpxPrint1(fmt,v0) DbgPrint(fmt,v0)
  45. #define IpxPrint2(fmt,v0,v1) DbgPrint(fmt,v0,v1)
  46. #define IpxPrint3(fmt,v0,v1,v2) DbgPrint(fmt,v0,v1,v2)
  47. #define IpxPrint4(fmt,v0,v1,v2,v3) DbgPrint(fmt,v0,v1,v2,v3)
  48. #define IpxPrint5(fmt,v0,v1,v2,v3,v4) DbgPrint(fmt,v0,v1,v2,v3,v4)
  49. #define IpxPrint6(fmt,v0,v1,v2,v3,v4,v5) DbgPrint(fmt,v0,v1,v2,v3,v4,v5)
  50. #else
  51. #define IpxPrint0(fmt)
  52. #define IpxPrint1(fmt,v0)
  53. #define IpxPrint2(fmt,v0,v1)
  54. #define IpxPrint3(fmt,v0,v1,v2)
  55. #define IpxPrint4(fmt,v0,v1,v2,v3)
  56. #define IpxPrint5(fmt,v0,v1,v2,v3,v4)
  57. #define IpxPrint6(fmt,v0,v1,v2,v3,v4,v5)
  58. #endif
  59. //
  60. // Routines to log packets to a buffer.
  61. //
  62. #if DBG
  63. #define IPX_PACKET_LOG 1
  64. #endif
  65. #ifdef IPX_PACKET_LOG
  66. //
  67. // The size of this is 64 bytes for easy display.
  68. //
  69. typedef struct _IPX_PACKET_LOG_ENTRY {
  70. UCHAR SendReceive;
  71. UCHAR TimeStamp[5]; // low 5 digits of tick count.
  72. UCHAR DestMac[6];
  73. UCHAR SrcMac[6];
  74. UCHAR Length[2];
  75. IPX_HEADER IpxHeader;
  76. UCHAR Data[14];
  77. } IPX_PACKET_LOG_ENTRY, *PIPX_PACKET_LOG_ENTRY;
  78. #define IPX_PACKET_LOG_LENGTH 128
  79. extern ULONG IpxPacketLogDebug;
  80. extern USHORT IpxPacketLogSocket;
  81. EXTERNAL_LOCK(IpxPacketLogLock);
  82. extern IPX_PACKET_LOG_ENTRY IpxPacketLog[IPX_PACKET_LOG_LENGTH];
  83. extern PIPX_PACKET_LOG_ENTRY IpxPacketLogLoc;
  84. extern PIPX_PACKET_LOG_ENTRY IpxPacketLogEnd;
  85. //
  86. // Bit fields in IpxPacketLogDebug
  87. //
  88. #define IPX_PACKET_LOG_RCV_RIP 0x0001 // All RIP packets
  89. #define IPX_PACKET_LOG_RCV_SPX 0x0002 // All SPX packets
  90. #define IPX_PACKET_LOG_RCV_NB 0x0004 // All Netbios packets
  91. #define IPX_PACKET_LOG_RCV_OTHER 0x0008 // All TDI client packets
  92. #define IPX_PACKET_LOG_RCV_SOCKET 0x0010 // All packets to IpxPacketLogSocket
  93. #define IPX_PACKET_LOG_RCV_ALL 0x0020 // All packets (even non-IPX)
  94. #define IPX_PACKET_LOG_SEND_RIP 0x0001 // All RIP packets
  95. #define IPX_PACKET_LOG_SEND_SPX 0x0002 // All SPX packets
  96. #define IPX_PACKET_LOG_SEND_NB 0x0004 // All Netbios packets
  97. #define IPX_PACKET_LOG_SEND_OTHER 0x0008 // All TDI client packets
  98. #define IPX_PACKET_LOG_SEND_SOCKET 0x0010 // All packets from IpxPacketLogSocket
  99. VOID
  100. IpxLogPacket(
  101. IN BOOLEAN Send,
  102. IN PUCHAR DestMac,
  103. IN PUCHAR SrcMac,
  104. IN USHORT Length,
  105. IN PVOID IpxHeader,
  106. IN PVOID Data
  107. );
  108. #define PACKET_LOG(_Bit) (IpxPacketLogDebug & (_Bit))
  109. #else // IPX_PACKET_LOG
  110. #define IpxLogPacket(_MacHeader,_Length,_IpxHeader,_Data)
  111. #define PACKET_LOG(_Bit) 0
  112. #endif // IPX_PACKET_LOG
  113. //
  114. // In load-only PnP, references are not needed on adapters. This should be changed
  115. // to actually take the reference post 4.0.
  116. //
  117. // Revisit Post 4.0 - Keep the actual instructions around for ease of activation later.
  118. //
  119. #define IpxReferenceAdapter(_adapter)
  120. // InterlockedIncrement(&(_adapter)->ReferenceCount)
  121. #define IpxDereferenceAdapter(_adapter)
  122. /*
  123. if (InterlockedDecrement(&(_adapter)->ReferenceCount) == 0) {\
  124. IpxCloseNdis(_adapter); \
  125. IpxDestroyAdapter(_adapter);\
  126. }\
  127. */
  128. //
  129. // In load-only PnP case, we dont need the references on bindings. All such references
  130. // have been changed to this macro.
  131. //
  132. #define IpxReferenceBinding1(_Binding, _Type)
  133. #define IpxDereferenceBinding1(_Binding, _Type)
  134. #if DBG
  135. #define IpxReferenceBinding(_Binding, _Type) \
  136. (VOID)IPX_ADD_ULONG ( \
  137. &(_Binding)->RefTypes[_Type], \
  138. 1, \
  139. &IpxGlobalInterlock); \
  140. IpxRefBinding (_Binding)
  141. #define IpxDereferenceBinding(_Binding, _Type) \
  142. (VOID)IPX_ADD_ULONG ( \
  143. &(_Binding)->RefTypes[_Type], \
  144. (ULONG)-1, \
  145. &IpxGlobalInterlock); \
  146. IpxDerefBinding (_Binding)
  147. #define IpxReferenceDevice(_Device, _Type) \
  148. (VOID)IPX_ADD_ULONG ( \
  149. &(_Device)->RefTypes[_Type], \
  150. 1, \
  151. &IpxGlobalInterlock); \
  152. IpxRefDevice (_Device)
  153. #define IpxDereferenceDevice(_Device, _Type) \
  154. (VOID)IPX_ADD_ULONG ( \
  155. &(_Device)->RefTypes[_Type], \
  156. (ULONG)-1, \
  157. &IpxGlobalInterlock); \
  158. CTEAssert ((_Device)->RefTypes[_Type] >= 0); \
  159. IpxDerefDevice (_Device)
  160. #define IpxReferenceAdapter1(_Adapter, _Type) \
  161. (VOID)IPX_ADD_ULONG ( \
  162. &(_Adapter)->RefTypes[_Type], \
  163. 1, \
  164. &IpxGlobalInterlock); \
  165. IpxRefAdapter (_Adapter)
  166. #define IpxDereferenceAdapter1(_Adapter, _Type) \
  167. (VOID)IPX_ADD_ULONG ( \
  168. &(_Adapter)->RefTypes[_Type], \
  169. (ULONG)-1, \
  170. &IpxGlobalInterlock); \
  171. ASSERT((_Adapter)->RefTypes[_Type] >= 0); \
  172. IpxDerefAdapter (_Adapter)
  173. #define IpxReferenceAddress(_Address, _Type) \
  174. (VOID)IPX_ADD_ULONG ( \
  175. &(_Address)->RefTypes[_Type], \
  176. 1, \
  177. &IpxGlobalInterlock); \
  178. IpxRefAddress (_Address)
  179. #define IpxReferenceAddressLock(_Address, _Type) \
  180. (VOID)IPX_ADD_ULONG ( \
  181. &(_Address)->RefTypes[_Type], \
  182. 1, \
  183. &IpxGlobalInterlock); \
  184. IpxRefAddressLock (_Address)
  185. #define IpxDereferenceAddress(_Address, _Type) \
  186. (VOID)IPX_ADD_ULONG ( \
  187. &(_Address)->RefTypes[_Type], \
  188. (ULONG)-1, \
  189. &IpxGlobalInterlock); \
  190. IpxDerefAddress (_Address)
  191. #define IpxDereferenceAddressSync(_Address, _Type) \
  192. (VOID)IPX_ADD_ULONG ( \
  193. &(_Address)->RefTypes[_Type], \
  194. (ULONG)-1, \
  195. &IpxGlobalInterlock); \
  196. IpxDerefAddressSync (_Address)
  197. #define IpxReferenceAddressFile(_AddressFile, _Type) \
  198. (VOID)IPX_ADD_ULONG ( \
  199. &(_AddressFile)->RefTypes[_Type], \
  200. 1, \
  201. &IpxGlobalInterlock); \
  202. IpxRefAddressFile (_AddressFile)
  203. #define IpxReferenceAddressFileLock(_AddressFile, _Type) \
  204. (VOID)IPX_ADD_ULONG ( \
  205. &(_AddressFile)->RefTypes[_Type], \
  206. 1, \
  207. &IpxGlobalInterlock); \
  208. IpxRefAddressFileLock (_AddressFile)
  209. #define IpxReferenceAddressFileSync(_AddressFile, _Type) \
  210. (VOID)IPX_ADD_ULONG ( \
  211. &(_AddressFile)->RefTypes[_Type], \
  212. 1, \
  213. &IpxGlobalInterlock); \
  214. IpxRefAddressFileSync (_AddressFile)
  215. #define IpxDereferenceAddressFile(_AddressFile, _Type) \
  216. (VOID)IPX_ADD_ULONG ( \
  217. &(_AddressFile)->RefTypes[_Type], \
  218. (ULONG)-1, \
  219. &IpxGlobalInterlock); \
  220. IpxDerefAddressFile (_AddressFile)
  221. #define IpxDereferenceAddressFileSync(_AddressFile, _Type) \
  222. (VOID)IPX_ADD_ULONG ( \
  223. &(_AddressFile)->RefTypes[_Type], \
  224. (ULONG)-1, \
  225. &IpxGlobalInterlock); \
  226. IpxDerefAddressFileSync (_AddressFile)
  227. #define IpxTransferReferenceAddressFile(_AddressFile, _OldType, _NewType) \
  228. (VOID)IPX_ADD_ULONG ( \
  229. &(_AddressFile)->RefTypes[_NewType], \
  230. 1, \
  231. &IpxGlobalInterlock); \
  232. (VOID)IPX_ADD_ULONG ( \
  233. &(_AddressFile)->RefTypes[_OldType], \
  234. (ULONG)-1, \
  235. &IpxGlobalInterlock);
  236. #define IpxReferenceRt(_Rt, _Type) \
  237. (VOID)IPX_ADD_ULONG ( \
  238. &(_Rt)->RefTypes[_Type], \
  239. 1, \
  240. &IpxGlobalInterlock); \
  241. IpxRefRt (_Rt)
  242. #define IpxDereferenceRt(_Rt, _Type) \
  243. (VOID)IPX_ADD_ULONG ( \
  244. &(_Rt)->RefTypes[_Type], \
  245. (ULONG)-1, \
  246. &IpxGlobalInterlock); \
  247. IpxDerefRt (_Rt)
  248. #else // DBG
  249. #define IpxReferenceBinding(_Binding, _Type) \
  250. InterlockedIncrement(&(_Binding)->ReferenceCount)
  251. #define IpxDereferenceBinding(_Binding, _Type) \
  252. IpxDerefBinding (_Binding)
  253. #define IpxReferenceDevice(_Device, _Type) \
  254. InterlockedIncrement(&(_Device)->ReferenceCount)
  255. #define IpxDereferenceDevice(_Device, _Type) \
  256. IpxDerefDevice (_Device)
  257. #define IpxReferenceAdapter1(_Adapter, _Type) \
  258. InterlockedIncrement(&(_Adapter)->ReferenceCount)
  259. #define IpxDereferenceAdapter1(_Adapter, _Type) \
  260. IpxDerefAdapter (_Adapter)
  261. #define IpxReferenceAddress(_Address, _Type) \
  262. InterlockedIncrement(&(_Address)->ReferenceCount)
  263. #define IpxReferenceAddressLock(_Address, _Type) \
  264. InterlockedIncrement(&(_Address)->ReferenceCount)
  265. #define IpxDereferenceAddress(_Address, _Type) \
  266. IpxDerefAddress (_Address)
  267. #define IpxDereferenceAddressSync(_Address, _Type) \
  268. IpxDerefAddressSync (_Address)
  269. #define IpxReferenceAddressFile(_AddressFile, _Type) \
  270. InterlockedIncrement(&(_AddressFile)->ReferenceCount)
  271. #define IpxReferenceAddressFileLock(_AddressFile, _Type) \
  272. InterlockedIncrement(&(_AddressFile)->ReferenceCount)
  273. #define IpxReferenceAddressFileSync(_AddressFile, _Type) \
  274. (VOID)IPX_ADD_ULONG( \
  275. &(_AddressFile)->ReferenceCount, \
  276. 1, \
  277. (_AddressFile)->AddressLock)
  278. #define IpxDereferenceAddressFile(_AddressFile, _Type) \
  279. if (InterlockedDecrement(&(_AddressFile)->ReferenceCount) == 0) { \
  280. IpxDestroyAddressFile (_AddressFile); \
  281. }
  282. #define IpxDereferenceAddressFileSync(_AddressFile, _Type) \
  283. if (InterlockedDecrement(&(_AddressFile)->ReferenceCount) == 0) { \
  284. IpxDestroyAddressFile (_AddressFile); \
  285. }
  286. #define IpxTransferReferenceAddressFile(_AddressFile, _OldType, _NewType)
  287. #define IpxReferenceRt(_Rt, _Type) \
  288. InterlockedIncrement(&(_Rt)->ReferenceCount)
  289. #define IpxDereferenceRt(_Rt, _Type) \
  290. IpxDerefRt (_Rt)
  291. #endif // DBG
  292. #if DBG
  293. #define IpxAllocateMemory(_BytesNeeded,_Tag,_Description) \
  294. IpxpAllocateTaggedMemory(_BytesNeeded,_Tag,_Description)
  295. #define IpxFreeMemory(_Memory,_BytesAllocated,_Tag,_Description) \
  296. IpxpFreeTaggedMemory(_Memory,_BytesAllocated,_Tag,_Description)
  297. #else // DBG
  298. #if TRACK
  299. PVOID
  300. IpxAllocateMemoryTrack(
  301. IN ULONG BytesNeeded,
  302. IN ULONG Tag,
  303. IN ULONG ModLine
  304. );
  305. VOID
  306. IpxFreeMemoryTrack(
  307. IN PVOID Memory
  308. );
  309. #define IpxAllocateMemory(_BytesNeeded,_Tag,_Description) \
  310. IpxAllocateMemoryTrack(_BytesNeeded,_Tag,MODULE+__LINE__)
  311. #define IpxFreeMemory(_Memory,_BytesAllocated,_Tag,_Description) \
  312. IpxFreeMemoryTrack(_Memory)
  313. #else
  314. #define IpxAllocateMemory(_BytesNeeded,_Tag,_Description) \
  315. IpxpAllocateMemory(_BytesNeeded,_Tag,(BOOLEAN)((_Tag) != MEMORY_CONFIG))
  316. #define IpxFreeMemory(_Memory,_BytesAllocated,_Tag,_Description) \
  317. IpxpFreeMemory(_Memory,_BytesAllocated,(BOOLEAN)((_Tag) != MEMORY_CONFIG))
  318. #endif // TRACK
  319. #endif // DBG
  320. //
  321. // This routine compares two node addresses.
  322. //
  323. #define IPX_NODE_EQUAL(_A,_B) \
  324. ((*(UNALIGNED ULONG *)((PUCHAR)(_A)) == *(UNALIGNED ULONG *)((PUCHAR)(_B))) && \
  325. (*(UNALIGNED USHORT *)(((PUCHAR)(_A))+4) == *(UNALIGNED USHORT *)(((PUCHAR)(_B))+4)))
  326. //
  327. // This routine checks if an address is the broadcast address.
  328. //
  329. #define IPX_NODE_BROADCAST(_A) \
  330. ((*(UNALIGNED ULONG *)((PUCHAR)(_A)) == 0xffffffff) && \
  331. (*(UNALIGNED USHORT *)(((PUCHAR)(_A))+4) == 0xffff))
  332. //
  333. // This routine does an ordered compare of two node addresses. It
  334. // can handle the first address having the source-routing bit on.
  335. //
  336. #define IPX_NODE_COMPARE(_A,_B,_R) \
  337. if ((*(_R) = (*(UNALIGNED SHORT *)(((PUCHAR)(_A))+4) - *(UNALIGNED SHORT *)(((PUCHAR)(_B))+4))) == 0) { \
  338. *(_R) = ((*(UNALIGNED LONG *)((PUCHAR)(_A)) & 0xffffff7f) - *(UNALIGNED LONG *)((PUCHAR)(_B))); \
  339. }
  340. //
  341. // Routines in action.c
  342. //
  343. NTSTATUS
  344. IpxTdiAction(
  345. IN PDEVICE Device,
  346. IN PREQUEST Request
  347. );
  348. VOID
  349. IpxCancelAction(
  350. IN PDEVICE_OBJECT DeviceObject,
  351. IN PIRP Irp
  352. );
  353. VOID
  354. IpxAbortLineChanges(
  355. IN PVOID ControlChannelContext
  356. );
  357. VOID
  358. IpxAbortNtfChanges(
  359. IN PVOID ControlChannelContext
  360. );
  361. NTSTATUS
  362. IpxIndicateLineUp(
  363. IN PDEVICE Device,
  364. IN USHORT NicId,
  365. IN ULONG Network,
  366. IN UCHAR LocalNode[6],
  367. IN UCHAR RemoteNode[6]
  368. );
  369. //
  370. // Routines in adapter.c
  371. //
  372. VOID
  373. IpxRefBinding(
  374. IN PBINDING Binding
  375. );
  376. VOID
  377. IpxDerefBinding(
  378. IN PBINDING Binding
  379. );
  380. NTSTATUS
  381. IpxCreateAdapter(
  382. IN PDEVICE Device,
  383. IN PUNICODE_STRING AdapterName,
  384. IN OUT PADAPTER *AdapterPtr
  385. );
  386. VOID
  387. IpxDestroyAdapter(
  388. IN PADAPTER Adapter
  389. );
  390. NTSTATUS
  391. IpxCreateBinding(
  392. IN PDEVICE Device,
  393. IN PBINDING_CONFIG ConfigBinding OPTIONAL,
  394. IN ULONG NetworkNumberIndex,
  395. IN PWCHAR AdapterName,
  396. IN OUT PBINDING *BindingPtr
  397. );
  398. VOID
  399. IpxDestroyBinding(
  400. IN PBINDING Binding
  401. );
  402. VOID
  403. IpxAllocateBindingPool(
  404. IN PDEVICE Device
  405. );
  406. PSINGLE_LIST_ENTRY
  407. IpxPopBinding(
  408. PDEVICE Device
  409. );
  410. //
  411. // [FW] New functions added for Forwarder support
  412. //
  413. #ifdef SUNDOWN
  414. NTSTATUS
  415. IpxOpenAdapter(
  416. IN NIC_HANDLE AdapterIndex,
  417. IN ULONG_PTR FwdAdapterContext,
  418. OUT PNIC_HANDLE IpxAdapterContext
  419. );
  420. #else
  421. NTSTATUS
  422. IpxOpenAdapter(
  423. IN NIC_HANDLE AdapterIndex,
  424. IN ULONG FwdAdapterContext,
  425. OUT PNIC_HANDLE IpxAdapterContext
  426. );
  427. #endif
  428. NTSTATUS
  429. IpxCloseAdapter(
  430. IN NIC_HANDLE IpxAdapterContext
  431. );
  432. //
  433. // Routines in address.c
  434. //
  435. TDI_ADDRESS_IPX UNALIGNED *
  436. IpxParseTdiAddress(
  437. IN TRANSPORT_ADDRESS UNALIGNED * TransportAddress
  438. );
  439. BOOLEAN
  440. IpxValidateTdiAddress(
  441. IN TRANSPORT_ADDRESS UNALIGNED * TransportAddress,
  442. IN ULONG TransportAddressLength
  443. );
  444. #if DBG
  445. VOID
  446. IpxBuildTdiAddress(
  447. IN PVOID AddressBuffer,
  448. IN ULONG Network,
  449. IN UCHAR Node[6],
  450. IN USHORT Socket
  451. );
  452. #else
  453. #define IpxBuildTdiAddress(_AddressBuffer,_Network,_Node,_Socket) { \
  454. TA_IPX_ADDRESS UNALIGNED * _IpxAddress = (TA_IPX_ADDRESS UNALIGNED *)(_AddressBuffer); \
  455. _IpxAddress->TAAddressCount = 1; \
  456. _IpxAddress->Address[0].AddressLength = sizeof(TDI_ADDRESS_IPX); \
  457. _IpxAddress->Address[0].AddressType = TDI_ADDRESS_TYPE_IPX; \
  458. _IpxAddress->Address[0].Address[0].NetworkAddress = (_Network); \
  459. _IpxAddress->Address[0].Address[0].Socket = (_Socket); \
  460. RtlCopyMemory(_IpxAddress->Address[0].Address[0].NodeAddress, (_Node), 6); \
  461. }
  462. #endif
  463. NTSTATUS
  464. IpxOpenAddress(
  465. IN PDEVICE Device,
  466. IN PREQUEST Request
  467. );
  468. NTSTATUS
  469. IpxOpenAddressM(
  470. IN PDEVICE Device,
  471. IN PREQUEST Request,
  472. IN ULONG Index
  473. );
  474. USHORT
  475. IpxAssignSocket(
  476. IN PDEVICE Device
  477. );
  478. PADDRESS
  479. IpxCreateAddress(
  480. IN PDEVICE Device,
  481. IN USHORT Socket
  482. );
  483. NTSTATUS
  484. IpxVerifyAddressFile(
  485. IN PADDRESS_FILE AddressFile
  486. );
  487. VOID
  488. IpxDestroyAddress(
  489. IN PVOID Parameter
  490. );
  491. #if DBG
  492. VOID
  493. IpxRefAddress(
  494. IN PADDRESS Address
  495. );
  496. VOID
  497. IpxRefAddressLock(
  498. IN PADDRESS Address
  499. );
  500. #endif
  501. VOID
  502. IpxDerefAddress(
  503. IN PADDRESS Address
  504. );
  505. VOID
  506. IpxDerefAddressSync(
  507. IN PADDRESS Address
  508. );
  509. PADDRESS_FILE
  510. IpxCreateAddressFile(
  511. IN PDEVICE Device
  512. );
  513. NTSTATUS
  514. IpxDestroyAddressFile(
  515. IN PADDRESS_FILE AddressFile
  516. );
  517. #if DBG
  518. VOID
  519. IpxRefAddressFile(
  520. IN PADDRESS_FILE AddressFile
  521. );
  522. VOID
  523. IpxRefAddressFileLock(
  524. IN PADDRESS_FILE AddressFile
  525. );
  526. VOID
  527. IpxRefAddressFileSync(
  528. IN PADDRESS_FILE AddressFile
  529. );
  530. VOID
  531. IpxDerefAddressFile(
  532. IN PADDRESS_FILE AddressFile
  533. );
  534. VOID
  535. IpxDerefAddressFileSync(
  536. IN PADDRESS_FILE AddressFile
  537. );
  538. #endif
  539. PADDRESS
  540. IpxLookupAddress(
  541. IN PDEVICE Device,
  542. IN USHORT Socket
  543. );
  544. NTSTATUS
  545. IpxStopAddressFile(
  546. IN PADDRESS_FILE AddressFile
  547. );
  548. NTSTATUS
  549. IpxCloseAddressFile(
  550. IN PDEVICE Device,
  551. IN PREQUEST Request
  552. );
  553. //
  554. // Routines in device.c
  555. //
  556. VOID
  557. IpxRefDevice(
  558. IN PDEVICE Device
  559. );
  560. VOID
  561. IpxDerefDevice(
  562. IN PDEVICE Device
  563. );
  564. VOID
  565. IpxRefAdapter(
  566. IN PADAPTER Adapter
  567. );
  568. VOID
  569. IpxDerefAdapter(
  570. IN PADAPTER Adapter
  571. );
  572. NTSTATUS
  573. IpxCreateDevice(
  574. IN PDRIVER_OBJECT DriverObject,
  575. IN PUNICODE_STRING DeviceName,
  576. IN ULONG SegmentCount,
  577. IN OUT PDEVICE *DevicePtr
  578. );
  579. VOID
  580. IpxDestroyDevice(
  581. IN PDEVICE Device
  582. );
  583. //
  584. // Routines in driver.c
  585. //
  586. VOID
  587. IpxPnPUpdateDevice(
  588. IN PDEVICE Device
  589. );
  590. BOOLEAN
  591. IpxIsAddressLocal(
  592. IN TDI_ADDRESS_IPX UNALIGNED * SourceAddress
  593. );
  594. PVOID
  595. IpxpAllocateMemory(
  596. IN ULONG BytesNeeded,
  597. IN ULONG Tag,
  598. IN BOOLEAN ChargeDevice
  599. );
  600. VOID
  601. IpxpFreeMemory(
  602. IN PVOID Memory,
  603. IN ULONG BytesAllocated,
  604. IN BOOLEAN ChargeDevice
  605. );
  606. #if DBG
  607. PVOID
  608. IpxpAllocateTaggedMemory(
  609. IN ULONG BytesNeeded,
  610. IN ULONG Tag,
  611. IN PUCHAR Description
  612. );
  613. VOID
  614. IpxpFreeTaggedMemory(
  615. IN PVOID Memory,
  616. IN ULONG BytesAllocated,
  617. IN ULONG Tag,
  618. IN PUCHAR Description
  619. );
  620. #endif
  621. VOID
  622. IpxWriteResourceErrorLog(
  623. IN PDEVICE_OBJECT DeviceObject,
  624. IN NTSTATUS ErrorCode,
  625. IN ULONG BytesNeeded,
  626. IN ULONG UniqueErrorValue
  627. );
  628. VOID
  629. IpxWriteGeneralErrorLog(
  630. IN PDEVICE_OBJECT DeviceObject,
  631. IN NTSTATUS ErrorCode,
  632. IN ULONG UniqueErrorValue,
  633. IN NTSTATUS FinalStatus,
  634. IN PWSTR SecondString,
  635. IN ULONG DumpDataCount,
  636. IN ULONG DumpData[]
  637. );
  638. VOID
  639. IpxWriteOidErrorLog(
  640. IN PDEVICE_OBJECT DeviceObject,
  641. IN NTSTATUS ErrorCode,
  642. IN NTSTATUS FinalStatus,
  643. IN PWSTR AdapterString,
  644. IN ULONG OidValue
  645. );
  646. ULONG
  647. IpxResolveAutoDetect(
  648. IN PDEVICE Device,
  649. IN ULONG ValidBindings,
  650. IN CTELockHandle *LockHandle1,
  651. IN PUNICODE_STRING RegistryPath,
  652. IN PADAPTER Adapter
  653. );
  654. VOID
  655. IpxResolveBindingSets(
  656. IN PDEVICE Device,
  657. IN ULONG ValidBindings
  658. );
  659. NTSTATUS
  660. IpxBindToAdapter(
  661. IN PDEVICE Device,
  662. IN PBINDING_CONFIG ConfigAdapter,
  663. IN PADAPTER *AdapterPtr,
  664. IN ULONG FrameTypeIndex
  665. );
  666. NTSTATUS
  667. IpxUnBindFromAdapter(
  668. IN PBINDING Binding
  669. );
  670. VOID
  671. IpxPnPUpdateBindingArray(
  672. IN PDEVICE Device,
  673. IN PADAPTER Adapter,
  674. IN PBINDING_CONFIG ConfigBinding
  675. );
  676. VOID
  677. IpxPnPToLoad();
  678. NTSTATUS
  679. IpxPnPReallocateBindingArray(
  680. IN PDEVICE Device,
  681. IN ULONG Size
  682. );
  683. //
  684. // Routines in event.c
  685. //
  686. NTSTATUS
  687. IpxTdiSetEventHandler(
  688. IN PREQUEST Request
  689. );
  690. //
  691. // Routines in ind.c
  692. //
  693. //
  694. // [CH] Added these two functions
  695. //
  696. INT
  697. IpxReceivePacket (
  698. IN NDIS_HANDLE ProtocolBindingContext,
  699. IN PNDIS_PACKET Packet
  700. );
  701. NDIS_STATUS
  702. IpxReceiveIndicationCommon(
  703. IN NDIS_HANDLE BindingContext,
  704. IN NDIS_HANDLE ReceiveContext,
  705. IN PVOID HeaderBuffer,
  706. IN UINT HeaderBufferSize,
  707. IN PVOID LookaheadBuffer,
  708. IN UINT LookaheadBufferSize,
  709. IN UINT PacketSize,
  710. IN PMDL pMdl,
  711. IN PINT pTdiClientCount
  712. );
  713. NDIS_STATUS
  714. IpxReceiveIndication(
  715. IN NDIS_HANDLE BindingContext,
  716. IN NDIS_HANDLE ReceiveContext,
  717. IN PVOID HeaderBuffer,
  718. IN UINT HeaderBufferSize,
  719. IN PVOID LookaheadBuffer,
  720. IN UINT LookaheadBufferSize,
  721. IN UINT PacketSize
  722. );
  723. VOID
  724. IpxReceiveComplete(
  725. IN NDIS_HANDLE BindingContext
  726. );
  727. NTSTATUS
  728. IpxUpdateBindingNetwork(
  729. IN PDEVICE Device,
  730. IN PBINDING Binding,
  731. IN ULONG Network
  732. );
  733. BOOLEAN
  734. IpxNewVirtualNetwork(
  735. IN PDEVICE Device,
  736. IN BOOLEAN NewVirtualNetwork
  737. );
  738. //
  739. // Routines in internal.c
  740. //
  741. NTSTATUS
  742. IpxInternalBind(
  743. IN PDEVICE Device,
  744. IN PIRP Irp
  745. );
  746. NTSTATUS
  747. IpxInternalUnbind(
  748. IN PDEVICE Device,
  749. IN UINT Identifier
  750. );
  751. VOID
  752. IpxInternalFindRoute(
  753. IN PIPX_FIND_ROUTE_REQUEST FindRouteRequest
  754. );
  755. NTSTATUS
  756. IpxInternalQuery(
  757. IN ULONG InternalQueryType,
  758. IN PNIC_HANDLE NicHandle OPTIONAL,
  759. IN OUT PVOID Buffer,
  760. IN ULONG BufferLength,
  761. OUT PULONG BufferLengthNeeded OPTIONAL
  762. );
  763. VOID
  764. IpxPnPCompletionHandler(
  765. IN PNET_PNP_EVENT NetPnPEvent,
  766. IN NTSTATUS Status
  767. );
  768. VOID
  769. IpxInternalIncrementWanInactivity(
  770. #ifdef _PNP_LATER
  771. IN NIC_HANDLE NicHandle
  772. #else
  773. IN USHORT NicId
  774. #endif
  775. );
  776. ULONG
  777. IpxInternalQueryWanInactivity(
  778. #ifdef _PNP_LATER
  779. IN NIC_HANDLE NicHandle
  780. #else
  781. IN USHORT NicId
  782. #endif
  783. );
  784. VOID
  785. IpxPnPIsnIndicate(
  786. IN PVOID Param
  787. );
  788. //
  789. // Routines in ndis.c
  790. //
  791. NTSTATUS
  792. IpxRegisterProtocol(
  793. IN PNDIS_STRING NameString
  794. );
  795. VOID
  796. IpxDeregisterProtocol(
  797. VOID
  798. );
  799. NTSTATUS
  800. IpxInitializeNdis(
  801. IN PADAPTER Adapter,
  802. IN PBINDING_CONFIG ConfigBinding
  803. );
  804. VOID
  805. IpxAddBroadcast(
  806. IN PDEVICE Device
  807. );
  808. VOID
  809. IpxRemoveBroadcast(
  810. IN PDEVICE Device
  811. );
  812. VOID
  813. IpxBroadcastOperation(
  814. IN PVOID Parameter
  815. );
  816. BOOLEAN
  817. IpxIsAddressLocal(
  818. IN TDI_ADDRESS_IPX UNALIGNED * SourceAddress
  819. );
  820. VOID
  821. IpxCloseNdis(
  822. IN PADAPTER Adapter
  823. );
  824. VOID
  825. IpxOpenAdapterComplete(
  826. IN NDIS_HANDLE BindingContext,
  827. IN NDIS_STATUS NdisStatus,
  828. IN NDIS_STATUS OpenErrorStatus
  829. );
  830. VOID
  831. IpxCloseAdapterComplete(
  832. IN NDIS_HANDLE BindingContext,
  833. IN NDIS_STATUS NdisStatus
  834. );
  835. VOID
  836. IpxResetComplete(
  837. IN NDIS_HANDLE BindingContext,
  838. IN NDIS_STATUS NdisStatus
  839. );
  840. VOID
  841. IpxRequestComplete(
  842. IN NDIS_HANDLE BindingContext,
  843. IN PNDIS_REQUEST NdisRequest,
  844. IN NDIS_STATUS NdisStatus
  845. );
  846. VOID
  847. IpxStatus(
  848. IN NDIS_HANDLE NdisBindingContext,
  849. IN NDIS_STATUS NdisStatus,
  850. IN PVOID StatusBuffer,
  851. IN UINT StatusBufferSize
  852. );
  853. VOID
  854. IpxStatusComplete(
  855. IN NDIS_HANDLE NdisBindingContext
  856. );
  857. VOID
  858. IpxBindAdapter(
  859. OUT PNDIS_STATUS Status,
  860. IN NDIS_HANDLE BindContext,
  861. IN PNDIS_STRING DeviceName,
  862. IN PVOID SystemSpecific1,
  863. IN PVOID SystemSpecific2
  864. );
  865. VOID
  866. IpxNdisUnload(
  867. VOID
  868. );
  869. //
  870. // Internal to IPX.
  871. // Create a loopback binding (adapter) in DriverEntry.
  872. // It will stick around for ever.
  873. //
  874. NTSTATUS
  875. IpxBindLoopbackAdapter(
  876. );
  877. VOID
  878. IpxUnbindAdapter(
  879. OUT PNDIS_STATUS Status,
  880. IN NDIS_HANDLE ProtocolBindingContext,
  881. IN NDIS_HANDLE UnbindContext
  882. );
  883. /*
  884. VOID
  885. IpxTranslate(
  886. OUT PNDIS_STATUS Status,
  887. IN NDIS_HANDLE ProtocolBindingContext,
  888. OUT PNET_PNP_ID IdList,
  889. IN ULONG IdListLength,
  890. OUT PULONG BytesReturned
  891. );
  892. */
  893. NDIS_STATUS
  894. IpxPnPEventHandler(
  895. IN NDIS_HANDLE ProtocolBindingContext,
  896. IN PNET_PNP_EVENT NetPnPEvent
  897. );
  898. //
  899. // Routines in mac.c
  900. //
  901. VOID
  902. MacInitializeBindingInfo(
  903. IN struct _BINDING * Binding,
  904. IN struct _ADAPTER * Adapter
  905. );
  906. VOID
  907. MacInitializeMacInfo(
  908. IN NDIS_MEDIUM MacType,
  909. OUT PNDIS_INFORMATION MacInfo
  910. );
  911. VOID
  912. MacMapFrameType(
  913. IN NDIS_MEDIUM MacType,
  914. IN ULONG FrameType,
  915. OUT ULONG * MappedFrameType
  916. );
  917. VOID
  918. MacReturnMaxDataSize(
  919. IN PNDIS_INFORMATION MacInfo,
  920. IN PUCHAR SourceRouting,
  921. IN UINT SourceRoutingLength,
  922. IN UINT DeviceMaxFrameSize,
  923. OUT PUINT MaxFrameSize
  924. );
  925. NDIS_STATUS
  926. IpxSendFramePreFwd(
  927. IN PIPX_LOCAL_TARGET LocalTarget,
  928. IN PNDIS_PACKET Packet,
  929. IN ULONG PacketLength,
  930. IN ULONG IncludedHeaderLength
  931. );
  932. NDIS_STATUS
  933. IpxSendFrame(
  934. IN PIPX_LOCAL_TARGET LocalTarget,
  935. IN PNDIS_PACKET Packet,
  936. IN ULONG PacketLength,
  937. IN ULONG IncludedHeaderLength
  938. );
  939. NDIS_STATUS
  940. IpxSendFrame802_3802_3(
  941. IN PADAPTER Adapter,
  942. IN PIPX_LOCAL_TARGET LocalTarget,
  943. IN PNDIS_PACKET Packet,
  944. IN ULONG PacketLength,
  945. IN ULONG IncludedHeaderLength
  946. );
  947. NDIS_STATUS
  948. IpxSendFrame802_3802_2(
  949. IN PADAPTER Adapter,
  950. IN PIPX_LOCAL_TARGET LocalTarget,
  951. IN PNDIS_PACKET Packet,
  952. IN ULONG PacketLength,
  953. IN ULONG IncludedHeaderLength
  954. );
  955. NDIS_STATUS
  956. IpxSendFrame802_3EthernetII(
  957. IN PADAPTER Adapter,
  958. IN PIPX_LOCAL_TARGET LocalTarget,
  959. IN PNDIS_PACKET Packet,
  960. IN ULONG PacketLength,
  961. IN ULONG IncludedHeaderLength
  962. );
  963. NDIS_STATUS
  964. IpxSendFrame802_3Snap(
  965. IN PADAPTER Adapter,
  966. IN PIPX_LOCAL_TARGET LocalTarget,
  967. IN PNDIS_PACKET Packet,
  968. IN ULONG PacketLength,
  969. IN ULONG IncludedHeaderLength
  970. );
  971. NDIS_STATUS
  972. IpxSendFrame802_5802_2(
  973. IN PADAPTER Adapter,
  974. IN PIPX_LOCAL_TARGET LocalTarget,
  975. IN PNDIS_PACKET Packet,
  976. IN ULONG PacketLength,
  977. IN ULONG IncludedHeaderLength
  978. );
  979. NDIS_STATUS
  980. IpxSendFrame802_5Snap(
  981. IN PADAPTER Adapter,
  982. IN PIPX_LOCAL_TARGET LocalTarget,
  983. IN PNDIS_PACKET Packet,
  984. IN ULONG PacketLength,
  985. IN ULONG IncludedHeaderLength
  986. );
  987. NDIS_STATUS
  988. IpxSendFrameFddi802_3(
  989. IN PADAPTER Adapter,
  990. IN PIPX_LOCAL_TARGET LocalTarget,
  991. IN PNDIS_PACKET Packet,
  992. IN ULONG PacketLength,
  993. IN ULONG IncludedHeaderLength
  994. );
  995. NDIS_STATUS
  996. IpxSendFrameFddi802_2(
  997. IN PADAPTER Adapter,
  998. IN PIPX_LOCAL_TARGET LocalTarget,
  999. IN PNDIS_PACKET Packet,
  1000. IN ULONG PacketLength,
  1001. IN ULONG IncludedHeaderLength
  1002. );
  1003. NDIS_STATUS
  1004. IpxSendFrameFddiSnap(
  1005. IN PADAPTER Adapter,
  1006. IN PIPX_LOCAL_TARGET LocalTarget,
  1007. IN PNDIS_PACKET Packet,
  1008. IN ULONG PacketLength,
  1009. IN ULONG IncludedHeaderLength
  1010. );
  1011. NDIS_STATUS
  1012. IpxSendFrameArcnet878_2(
  1013. IN PADAPTER Adapter,
  1014. IN PIPX_LOCAL_TARGET LocalTarget,
  1015. IN PNDIS_PACKET Packet,
  1016. IN ULONG PacketLength,
  1017. IN ULONG IncludedHeaderLength
  1018. );
  1019. NDIS_STATUS
  1020. IpxSendFrameWanEthernetII(
  1021. IN PADAPTER Adapter,
  1022. IN PIPX_LOCAL_TARGET LocalTarget,
  1023. IN PNDIS_PACKET Packet,
  1024. IN ULONG PacketLength,
  1025. IN ULONG IncludedHeaderLength
  1026. );
  1027. VOID
  1028. MacUpdateSourceRouting(
  1029. IN ULONG Database,
  1030. IN PADAPTER Adapter,
  1031. IN PUCHAR MacHeader,
  1032. IN ULONG MacHeaderLength
  1033. );
  1034. VOID
  1035. MacLookupSourceRouting(
  1036. IN ULONG Database,
  1037. IN PBINDING Binding,
  1038. IN UCHAR NextRouter[6],
  1039. IN OUT UCHAR SourceRouting[18],
  1040. OUT PULONG SourceRoutingLength
  1041. );
  1042. VOID
  1043. MacSourceRoutingTimeout(
  1044. CTEEvent * Event,
  1045. PVOID Context
  1046. );
  1047. VOID
  1048. MacSourceRoutingRemove(
  1049. IN PBINDING Binding,
  1050. IN UCHAR MacAddress[6]
  1051. );
  1052. VOID
  1053. MacSourceRoutingClear(
  1054. IN PBINDING Binding
  1055. );
  1056. //
  1057. // Routines in packet.c
  1058. //
  1059. NTSTATUS
  1060. IpxInitializeSendPacket(
  1061. IN PDEVICE Device,
  1062. IN PIPX_SEND_PACKET Packet,
  1063. IN PUCHAR Header
  1064. );
  1065. #if BACK_FILL
  1066. NTSTATUS
  1067. IpxInitializeBackFillPacket(
  1068. IN PDEVICE Device,
  1069. IN PIPX_SEND_PACKET Packet,
  1070. IN PUCHAR Header
  1071. );
  1072. #endif
  1073. NTSTATUS
  1074. IpxInitializeReceivePacket(
  1075. IN PDEVICE Device,
  1076. IN PIPX_RECEIVE_PACKET Packet
  1077. );
  1078. NTSTATUS
  1079. NbiInitializeReceiveBuffer(
  1080. IN PADAPTER Adapter,
  1081. IN PIPX_RECEIVE_BUFFER ReceiveBuffer,
  1082. IN PUCHAR DataBuffer,
  1083. IN ULONG DataBufferLength
  1084. );
  1085. NTSTATUS
  1086. IpxInitializePaddingBuffer(
  1087. IN PDEVICE Device,
  1088. IN PIPX_PADDING_BUFFER PaddingBuffer,
  1089. IN ULONG DataBufferLength
  1090. );
  1091. VOID
  1092. IpxDeinitializeSendPacket(
  1093. IN PDEVICE Device,
  1094. IN PIPX_SEND_PACKET Packet
  1095. );
  1096. #if BACK_FILL
  1097. VOID
  1098. IpxDeinitializeBackFillPacket(
  1099. IN PDEVICE Device,
  1100. IN PIPX_SEND_PACKET Packet
  1101. );
  1102. #endif
  1103. VOID
  1104. IpxDeinitializeReceivePacket(
  1105. IN PDEVICE Device,
  1106. IN PIPX_RECEIVE_PACKET Packet
  1107. );
  1108. VOID
  1109. IpxDeinitializeReceiveBuffer(
  1110. IN PADAPTER Adapter,
  1111. IN PIPX_RECEIVE_BUFFER ReceiveBuffer,
  1112. IN ULONG DataBufferLength
  1113. );
  1114. VOID
  1115. IpxDeinitializePaddingBuffer(
  1116. IN PDEVICE Device,
  1117. IN PIPX_PADDING_BUFFER PaddingBuffer,
  1118. IN ULONG DataBufferLength
  1119. );
  1120. VOID
  1121. IpxAllocateSendPool(
  1122. IN PDEVICE Device
  1123. );
  1124. #if BACK_FILL
  1125. VOID
  1126. IpxAllocateBackFillPool(
  1127. IN PDEVICE Device
  1128. );
  1129. #endif
  1130. VOID
  1131. IpxAllocateReceivePool(
  1132. IN PDEVICE Device
  1133. );
  1134. VOID
  1135. IpxAllocateReceiveBufferPool(
  1136. IN PADAPTER Adapter
  1137. );
  1138. PSINGLE_LIST_ENTRY
  1139. IpxPopSendPacket(
  1140. IN PDEVICE Device
  1141. );
  1142. #if BACK_FILL
  1143. PSINGLE_LIST_ENTRY
  1144. IpxPopBackFillPacket(
  1145. IN PDEVICE Device
  1146. );
  1147. #endif
  1148. PSINGLE_LIST_ENTRY
  1149. IpxPopReceivePacket(
  1150. IN PDEVICE Device
  1151. );
  1152. PSINGLE_LIST_ENTRY
  1153. IpxPopReceiveBuffer(
  1154. IN PADAPTER Adapter
  1155. );
  1156. PIPX_PADDING_BUFFER
  1157. IpxAllocatePaddingBuffer(
  1158. IN PDEVICE Device
  1159. );
  1160. VOID
  1161. IpxFreePaddingBuffer(
  1162. IN PDEVICE Device
  1163. );
  1164. //
  1165. // Routines in query.c
  1166. //
  1167. NTSTATUS
  1168. IpxTdiQueryInformation(
  1169. IN PDEVICE Device,
  1170. IN PREQUEST Request
  1171. );
  1172. NTSTATUS
  1173. IpxTdiSetInformation(
  1174. IN PDEVICE Device,
  1175. IN PREQUEST Request
  1176. );
  1177. //
  1178. // Routines in receive.c
  1179. //
  1180. VOID
  1181. IpxTransferDataComplete(
  1182. IN NDIS_HANDLE BindingContext,
  1183. IN PNDIS_PACKET NdisPacket,
  1184. IN NDIS_STATUS NdisStatus,
  1185. IN UINT BytesTransferred
  1186. );
  1187. VOID
  1188. IpxTransferData(
  1189. OUT PNDIS_STATUS Status,
  1190. IN NDIS_HANDLE NdisBindingHandle,
  1191. IN NDIS_HANDLE MacReceiveContext,
  1192. IN UINT ByteOffset,
  1193. IN UINT BytesToTransfer,
  1194. IN OUT PNDIS_PACKET Packet,
  1195. OUT PUINT BytesTransferred
  1196. );
  1197. NTSTATUS
  1198. IpxTdiReceiveDatagram(
  1199. IN PREQUEST Request
  1200. );
  1201. VOID
  1202. IpxCancelReceiveDatagram(
  1203. IN PDEVICE_OBJECT DeviceObject,
  1204. IN PIRP Irp
  1205. );
  1206. //
  1207. // Routines in rip.c
  1208. //
  1209. NTSTATUS
  1210. RipGetLocalTarget(
  1211. IN ULONG Segment,
  1212. IN TDI_ADDRESS_IPX UNALIGNED * RemoteAddress,
  1213. IN UCHAR Type,
  1214. OUT PIPX_LOCAL_TARGET LocalTarget,
  1215. OUT USHORT Counts[2] OPTIONAL
  1216. );
  1217. NTSTATUS
  1218. RipQueueRequest(
  1219. IN ULONG Network,
  1220. IN USHORT Operation
  1221. );
  1222. VOID
  1223. RipSendResponse(
  1224. IN PBINDING Binding,
  1225. IN TDI_ADDRESS_IPX UNALIGNED * RemoteAddress,
  1226. IN PIPX_LOCAL_TARGET LocalTarget
  1227. );
  1228. VOID
  1229. RipShortTimeout(
  1230. CTEEvent * Event,
  1231. PVOID Context
  1232. );
  1233. VOID
  1234. RipLongTimeout(
  1235. CTEEvent * Event,
  1236. PVOID Context
  1237. );
  1238. VOID
  1239. RipCleanupPacket(
  1240. IN PDEVICE Device,
  1241. IN PIPX_SEND_RESERVED RipReserved
  1242. );
  1243. VOID
  1244. RipProcessResponse(
  1245. IN PDEVICE Device,
  1246. IN PIPX_LOCAL_TARGET LocalTarget,
  1247. IN RIP_PACKET UNALIGNED * RipPacket
  1248. );
  1249. VOID
  1250. RipHandleRoutePending(
  1251. IN PDEVICE Device,
  1252. IN UCHAR Network[4],
  1253. IN CTELockHandle LockHandle,
  1254. IN BOOLEAN Success,
  1255. IN OPTIONAL PIPX_LOCAL_TARGET LocalTarget,
  1256. IN OPTIONAL USHORT HopCount,
  1257. IN OPTIONAL USHORT TickCount
  1258. );
  1259. NTSTATUS
  1260. RipInsertLocalNetwork(
  1261. IN ULONG Network,
  1262. IN USHORT NicId,
  1263. IN NDIS_HANDLE NdisBindingContext,
  1264. IN USHORT Count
  1265. );
  1266. VOID
  1267. RipAdjustForBindingChange(
  1268. IN USHORT NicId,
  1269. IN USHORT NewNicId,
  1270. IN IPX_BINDING_CHANGE_TYPE ChangeType
  1271. );
  1272. UINT
  1273. RipGetSegment(
  1274. IN UCHAR Network[4]
  1275. );
  1276. PIPX_ROUTE_ENTRY
  1277. RipGetRoute(
  1278. IN UINT Segment,
  1279. IN UCHAR Network[4]
  1280. );
  1281. BOOLEAN
  1282. RipAddRoute(
  1283. IN UINT Segment,
  1284. IN PIPX_ROUTE_ENTRY RouteEntry
  1285. );
  1286. BOOLEAN
  1287. RipDeleteRoute(
  1288. IN UINT Segment,
  1289. IN PIPX_ROUTE_ENTRY RouteEntry
  1290. );
  1291. PIPX_ROUTE_ENTRY
  1292. RipGetFirstRoute(
  1293. IN UINT Segment
  1294. );
  1295. PIPX_ROUTE_ENTRY
  1296. RipGetNextRoute(
  1297. IN UINT Segment
  1298. );
  1299. VOID
  1300. RipDropRemoteEntries(
  1301. VOID
  1302. );
  1303. //
  1304. // Routines in send.c
  1305. //
  1306. VOID
  1307. IpxSendComplete(
  1308. IN NDIS_HANDLE ProtocolBindingContext,
  1309. IN PNDIS_PACKET NdisPacket,
  1310. IN NDIS_STATUS NdisStatus
  1311. );
  1312. NTSTATUS
  1313. IpxTdiSendDatagram(
  1314. IN PDEVICE_OBJECT DeviceObject,
  1315. IN PREQUEST Request
  1316. );
  1317. //
  1318. // Routines in rt.c
  1319. //
  1320. NTSTATUS
  1321. GetNewNics(
  1322. PDEVICE,
  1323. PREQUEST,
  1324. BOOLEAN,
  1325. PNWLINK_ACTION,
  1326. UINT,
  1327. BOOLEAN OldIrp
  1328. );
  1329. NTSTATUS
  1330. OpenRtAddress(
  1331. IN PDEVICE Device,
  1332. IN PIRP Request
  1333. );
  1334. NTSTATUS
  1335. CloseRtAddress(
  1336. IN PDEVICE pDevice,
  1337. IN PIRP pIrp
  1338. );
  1339. NTSTATUS
  1340. CleanupRtAddress(
  1341. IN PDEVICE pDevice,
  1342. IN PIRP pIrp
  1343. );
  1344. NTSTATUS
  1345. SendIrpFromRt (
  1346. IN PDEVICE pDevice,
  1347. IN PIRP pIrp
  1348. );
  1349. NTSTATUS
  1350. RcvIrpFromRt (
  1351. IN PDEVICE pDevice,
  1352. IN PIRP pIrp
  1353. );
  1354. NTSTATUS
  1355. PassDgToRt (
  1356. IN PDEVICE pDevice,
  1357. IN PIPX_DATAGRAM_OPTIONS2 pContext,
  1358. IN ULONG Index,
  1359. IN VOID UNALIGNED *pDgrm,
  1360. IN ULONG uNumBytes
  1361. );
  1362. NTSTATUS
  1363. NTCheckSetCancelRoutine(
  1364. IN PIRP pIrp,
  1365. IN PVOID CancelRoutine,
  1366. IN PDEVICE pDevice
  1367. );
  1368. VOID
  1369. NTIoComplete(
  1370. IN PIRP pIrp,
  1371. IN NTSTATUS Status,
  1372. IN ULONG SentLength);
  1373. VOID
  1374. IpxRefRt(
  1375. PRT_INFO pRt);
  1376. VOID
  1377. IpxDerefRt(
  1378. PRT_INFO pRt);
  1379. VOID
  1380. IpxDestroyRt(
  1381. PRT_INFO pRt);
  1382. #if DBG
  1383. VOID
  1384. IpxConstructHeader(
  1385. IN PUCHAR Header,
  1386. IN USHORT PacketLength,
  1387. IN UCHAR PacketType,
  1388. IN TDI_ADDRESS_IPX UNALIGNED * RemoteAddress,
  1389. IN PTDI_ADDRESS_IPX LocalAddress
  1390. );
  1391. #else
  1392. #define IpxConstructHeader(_Header,_PacketLength,_PacketType,_RemoteAddress,_LocalAddress) { \
  1393. PIPX_HEADER _IpxHeader = (PIPX_HEADER)(_Header); \
  1394. _IpxHeader->CheckSum = 0xffff; \
  1395. _IpxHeader->PacketLength[0] = (UCHAR)((_PacketLength) / 256); \
  1396. _IpxHeader->PacketLength[1] = (UCHAR)((_PacketLength) % 256); \
  1397. _IpxHeader->TransportControl = 0; \
  1398. _IpxHeader->PacketType = (_PacketType); \
  1399. RtlCopyMemory(_IpxHeader->DestinationNetwork, (PVOID)(_RemoteAddress), 12); \
  1400. RtlCopyMemory(_IpxHeader->SourceNetwork, (_LocalAddress), 12); \
  1401. }
  1402. #endif
  1403. //
  1404. // Routines in loopback.c
  1405. //
  1406. VOID
  1407. IpxDoLoopback(
  1408. IN CTEEvent *Event,
  1409. IN PVOID Context
  1410. );
  1411. VOID
  1412. IpxInitLoopback();
  1413. VOID
  1414. IpxLoopbackEnque(
  1415. IN PNDIS_PACKET Packet,
  1416. IN PVOID Context
  1417. );
  1418. //
  1419. // [FW] InternalSendCompletion from Forwarder
  1420. //
  1421. // [FW] Added length here
  1422. VOID
  1423. IpxInternalSendComplete(
  1424. IN PIPX_LOCAL_TARGET LocalTarget,
  1425. IN PNDIS_PACKET Packet,
  1426. IN ULONG PacketLength,
  1427. IN NTSTATUS Status
  1428. );
  1429. NDIS_STATUS
  1430. IpxSubmitNdisRequest(
  1431. IN PADAPTER Adapter,
  1432. IN PNDIS_REQUEST NdisRequest,
  1433. IN PNDIS_STRING AdapterString
  1434. );
  1435. VOID
  1436. IpxDelayedSubmitNdisRequest(
  1437. IN PVOID Param
  1438. );
  1439. UINT
  1440. IpxGetChainedMDLLength(
  1441. PNDIS_BUFFER pMDL
  1442. );
  1443. BOOLEAN
  1444. IpxHasInformedNbLoopback();
  1445. VOID
  1446. IpxInformNbLoopback();