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.

1582 lines
30 KiB

  1. /*++
  2. Copyright (c) 1998 Microsoft Corporation
  3. Module Name:
  4. aac.c - DbgExtension Structure information specific to ATMARPC.SYS
  5. Abstract:
  6. Revision History:
  7. Who When What
  8. -------- -------- ----------------------------------------------
  9. josephj 03-30-98 Created
  10. Notes:
  11. --*/
  12. #include "precomp.h"
  13. enum
  14. {
  15. typeid_NULL,
  16. typeid_ATMARP_GLOBALS,
  17. typeid_ATMARP_ADAPTER,
  18. typeid_ATMARP_INTERFACE,
  19. typeid_ATMARP_ATM_ENTRY,
  20. typeid_ATMARP_IP_ENTRY,
  21. typeid_ATMARP_VC
  22. };
  23. extern TYPE_INFO *g_rgTypes[];
  24. //
  25. // STRUCTURES CONCERNING TYPE "ATMARP_ADAPTER"
  26. //
  27. STRUCT_FIELD_INFO rgfi_ATMARP_ADAPTER[] =
  28. {
  29. #if DBG
  30. {
  31. "aaa_sig",
  32. FIELD_OFFSET(ATMARP_ADAPTER, aaa_sig),
  33. FIELD_SIZE(ATMARP_ADAPTER, aaa_sig)
  34. },
  35. #endif
  36. {
  37. "pNextAdapter",
  38. FIELD_OFFSET(ATMARP_ADAPTER, pNextAdapter),
  39. FIELD_SIZE(ATMARP_ADAPTER, pNextAdapter)
  40. },
  41. {
  42. "pInterfaceList",
  43. FIELD_OFFSET(ATMARP_ADAPTER, pInterfaceList),
  44. FIELD_SIZE(ATMARP_ADAPTER, pInterfaceList)
  45. },
  46. {
  47. "InterfaceCount",
  48. FIELD_OFFSET(ATMARP_ADAPTER, InterfaceCount),
  49. FIELD_SIZE(ATMARP_ADAPTER, InterfaceCount)
  50. },
  51. {
  52. "NdisAdapterHandle",
  53. FIELD_OFFSET(ATMARP_ADAPTER, NdisAdapterHandle),
  54. FIELD_SIZE(ATMARP_ADAPTER, NdisAdapterHandle)
  55. },
  56. {
  57. "BindContext",
  58. FIELD_OFFSET(ATMARP_ADAPTER, BindContext),
  59. FIELD_SIZE(ATMARP_ADAPTER, BindContext)
  60. },
  61. {
  62. "SystemSpecific1",
  63. FIELD_OFFSET(ATMARP_ADAPTER, SystemSpecific1),
  64. FIELD_SIZE(ATMARP_ADAPTER, SystemSpecific1)
  65. },
  66. {
  67. "SystemSpecific2",
  68. FIELD_OFFSET(ATMARP_ADAPTER, SystemSpecific2),
  69. FIELD_SIZE(ATMARP_ADAPTER, SystemSpecific2)
  70. },
  71. #if OBSOLETE
  72. {
  73. "AdapterConfigHandle",
  74. FIELD_OFFSET(ATMARP_ADAPTER, AdapterConfigHandle),
  75. FIELD_SIZE(ATMARP_ADAPTER, AdapterConfigHandle)
  76. },
  77. #endif // OBSOLETE
  78. {
  79. "IPConfigString",
  80. FIELD_OFFSET(ATMARP_ADAPTER, IPConfigString),
  81. FIELD_SIZE(ATMARP_ADAPTER, IPConfigString)
  82. },
  83. {
  84. "UnbindContext",
  85. FIELD_OFFSET(ATMARP_ADAPTER, UnbindContext),
  86. FIELD_SIZE(ATMARP_ADAPTER, UnbindContext)
  87. },
  88. {
  89. "Medium",
  90. FIELD_OFFSET(ATMARP_ADAPTER, Medium),
  91. FIELD_SIZE(ATMARP_ADAPTER, Medium)
  92. },
  93. {
  94. "Flags",
  95. FIELD_OFFSET(ATMARP_ADAPTER, Flags),
  96. FIELD_SIZE(ATMARP_ADAPTER, Flags)
  97. },
  98. {
  99. "LineRate",
  100. FIELD_OFFSET(ATMARP_ADAPTER, LineRate),
  101. FIELD_SIZE(ATMARP_ADAPTER, LineRate)
  102. },
  103. {
  104. "MaxPacketSize",
  105. FIELD_OFFSET(ATMARP_ADAPTER, MaxPacketSize),
  106. FIELD_SIZE(ATMARP_ADAPTER, MaxPacketSize)
  107. },
  108. {
  109. "MacAddress",
  110. FIELD_OFFSET(ATMARP_ADAPTER, MacAddress),
  111. FIELD_SIZE(ATMARP_ADAPTER, MacAddress)
  112. },
  113. {
  114. "DescrLength",
  115. FIELD_OFFSET(ATMARP_ADAPTER, DescrLength),
  116. FIELD_SIZE(ATMARP_ADAPTER, DescrLength)
  117. },
  118. {
  119. "pDescrString",
  120. FIELD_OFFSET(ATMARP_ADAPTER, pDescrString),
  121. FIELD_SIZE(ATMARP_ADAPTER, pDescrString)
  122. },
  123. {
  124. "DeviceName",
  125. FIELD_OFFSET(ATMARP_ADAPTER, DeviceName),
  126. FIELD_SIZE(ATMARP_ADAPTER, DeviceName)
  127. },
  128. {
  129. "ConfigString",
  130. FIELD_OFFSET(ATMARP_ADAPTER, ConfigString),
  131. FIELD_SIZE(ATMARP_ADAPTER, ConfigString)
  132. },
  133. {
  134. "Block",
  135. FIELD_OFFSET(ATMARP_ADAPTER, Block),
  136. FIELD_SIZE(ATMARP_ADAPTER, Block)
  137. },
  138. {
  139. NULL
  140. }
  141. };
  142. TYPE_INFO type_ATMARP_ADAPTER = {
  143. "ATMARP_ADAPTER",
  144. "a",
  145. typeid_ATMARP_ADAPTER,
  146. fTYPEINFO_ISLIST, // Flags
  147. sizeof(ATMARP_ADAPTER),
  148. rgfi_ATMARP_ADAPTER,
  149. FIELD_OFFSET(ATMARP_ADAPTER, pNextAdapter) // offset to next pointer.
  150. };
  151. //
  152. // STRUCTURES CONCERNING TYPE "ATMARP_GLOBALS"
  153. //
  154. STRUCT_FIELD_INFO rgfi_ATMARP_GLOBALS[] =
  155. {
  156. #if DBG
  157. {
  158. "aag_sig",
  159. FIELD_OFFSET(ATMARP_GLOBALS, aag_sig),
  160. FIELD_SIZE(ATMARP_GLOBALS, aag_sig)
  161. },
  162. #endif // DBG
  163. {
  164. "Lock",
  165. FIELD_OFFSET(ATMARP_GLOBALS, Lock),
  166. FIELD_SIZE(ATMARP_GLOBALS, Lock)
  167. },
  168. {
  169. "ProtocolHandle",
  170. FIELD_OFFSET(ATMARP_GLOBALS, ProtocolHandle),
  171. FIELD_SIZE(ATMARP_GLOBALS, ProtocolHandle)
  172. },
  173. {
  174. "pDriverObject",
  175. FIELD_OFFSET(ATMARP_GLOBALS, pDriverObject),
  176. FIELD_SIZE(ATMARP_GLOBALS, pDriverObject)
  177. },
  178. {
  179. "pDeviceObject",
  180. FIELD_OFFSET(ATMARP_GLOBALS, pDeviceObject),
  181. FIELD_SIZE(ATMARP_GLOBALS, pDeviceObject)
  182. },
  183. {
  184. "pAdapterList",
  185. FIELD_OFFSET(ATMARP_GLOBALS, pAdapterList),
  186. FIELD_SIZE(ATMARP_GLOBALS, pAdapterList)
  187. },
  188. {
  189. "AdapterCount",
  190. FIELD_OFFSET(ATMARP_GLOBALS, AdapterCount),
  191. FIELD_SIZE(ATMARP_GLOBALS, AdapterCount)
  192. },
  193. {
  194. "bUnloading",
  195. FIELD_OFFSET(ATMARP_GLOBALS, bUnloading),
  196. FIELD_SIZE(ATMARP_GLOBALS, bUnloading)
  197. },
  198. #ifdef NEWARP
  199. {
  200. "ARPRegisterHandle",
  201. FIELD_OFFSET(ATMARP_GLOBALS, ARPRegisterHandle),
  202. FIELD_SIZE(ATMARP_GLOBALS, ARPRegisterHandle)
  203. },
  204. {
  205. "pIPAddInterfaceRtn",
  206. FIELD_OFFSET(ATMARP_GLOBALS, pIPAddInterfaceRtn),
  207. FIELD_SIZE(ATMARP_GLOBALS, pIPAddInterfaceRtn)
  208. },
  209. {
  210. "pIPDelInterfaceRtn",
  211. FIELD_OFFSET(ATMARP_GLOBALS, pIPDelInterfaceRtn),
  212. FIELD_SIZE(ATMARP_GLOBALS, pIPDelInterfaceRtn)
  213. },
  214. {
  215. "pIPBindCompleteRtn",
  216. FIELD_OFFSET(ATMARP_GLOBALS, pIPBindCompleteRtn),
  217. FIELD_SIZE(ATMARP_GLOBALS, pIPBindCompleteRtn)
  218. },
  219. #else
  220. #error "unimplemented"
  221. #endif // NEWARP
  222. {
  223. "Block",
  224. FIELD_OFFSET(ATMARP_GLOBALS, Block),
  225. FIELD_SIZE(ATMARP_GLOBALS, Block)
  226. },
  227. #ifdef GPC
  228. #if DBG
  229. {
  230. "aaq_sig",
  231. FIELD_OFFSET(ATMARP_GLOBALS, aaq_sig),
  232. FIELD_SIZE(ATMARP_GLOBALS, aaq_sig)
  233. },
  234. #endif
  235. {
  236. "pFlowInfoList",
  237. FIELD_OFFSET(ATMARP_GLOBALS, pFlowInfoList),
  238. FIELD_SIZE(ATMARP_GLOBALS, pFlowInfoList)
  239. },
  240. {
  241. "GpcClientHandle",
  242. FIELD_OFFSET(ATMARP_GLOBALS, GpcClientHandle),
  243. FIELD_SIZE(ATMARP_GLOBALS, GpcClientHandle)
  244. },
  245. {
  246. "bGpcInitialized",
  247. FIELD_OFFSET(ATMARP_GLOBALS, bGpcInitialized),
  248. FIELD_SIZE(ATMARP_GLOBALS, bGpcInitialized)
  249. },
  250. {
  251. "GpcCalls",
  252. FIELD_OFFSET(ATMARP_GLOBALS, GpcCalls),
  253. FIELD_SIZE(ATMARP_GLOBALS, GpcCalls)
  254. },
  255. #endif // GPC
  256. {
  257. NULL
  258. }
  259. };
  260. TYPE_INFO type_ATMARP_GLOBALS = {
  261. "ATMARP_GLOBALS",
  262. "aag",
  263. typeid_ATMARP_GLOBALS,
  264. 0,
  265. sizeof(ATMARP_GLOBALS),
  266. rgfi_ATMARP_GLOBALS
  267. };
  268. //
  269. // STRUCTURES CONCERNING TYPE "ATMARP_INTERFACE"
  270. //
  271. STRUCT_FIELD_INFO rgfi_ATMARP_INTERFACE[] =
  272. {
  273. #if DBG
  274. {
  275. "aai_sig",
  276. FIELD_OFFSET(ATMARP_INTERFACE, aai_sig),
  277. FIELD_SIZE(ATMARP_INTERFACE, aai_sig)
  278. },
  279. #endif
  280. // struct _ATMARP_INTERFACE * pNextInterface; // in list of ATMARP interfaces
  281. {
  282. "pNextInterface",
  283. FIELD_OFFSET(ATMARP_INTERFACE, pNextInterface),
  284. FIELD_SIZE(ATMARP_INTERFACE, pNextInterface)
  285. },
  286. // ULONG RefCount; // References to this interface
  287. {
  288. "RefCount",
  289. FIELD_OFFSET(ATMARP_INTERFACE, RefCount),
  290. FIELD_SIZE(ATMARP_INTERFACE, RefCount)
  291. },
  292. // ULONG AdminState; // Desired state of this interface
  293. {
  294. "AdminState",
  295. FIELD_OFFSET(ATMARP_INTERFACE, AdminState),
  296. FIELD_SIZE(ATMARP_INTERFACE, AdminState)
  297. },
  298. // ULONG State; // (Actual) State of this interface
  299. {
  300. "State",
  301. FIELD_OFFSET(ATMARP_INTERFACE, State),
  302. FIELD_SIZE(ATMARP_INTERFACE, State)
  303. },
  304. #if (RECONFIG)
  305. //enum... ReconfigState;
  306. {
  307. "ReconfigState",
  308. FIELD_OFFSET(ATMARP_INTERFACE, ReconfigState),
  309. FIELD_SIZE(ATMARP_INTERFACE, ReconfigState)
  310. },
  311. #endif // RECONFIG
  312. // ULONG Flags; // Misc state information
  313. {
  314. "Flags",
  315. FIELD_OFFSET(ATMARP_INTERFACE, Flags),
  316. FIELD_SIZE(ATMARP_INTERFACE, Flags)
  317. },
  318. #if DBG
  319. // ULONG aaim_sig; // Signature to help debugging
  320. {
  321. "aaim_sig",
  322. FIELD_OFFSET(ATMARP_INTERFACE, aaim_sig),
  323. FIELD_SIZE(ATMARP_INTERFACE, aaim_sig)
  324. },
  325. #endif
  326. // struct _ATMARP_INTERFACE * pAdapter; // Pointer to Adapter info
  327. {
  328. "pAdapter",
  329. FIELD_OFFSET(ATMARP_INTERFACE, pAdapter),
  330. FIELD_SIZE(ATMARP_INTERFACE, pAdapter)
  331. },
  332. #if 0
  333. // PCO_SAP pSap; // SAP info for this interface
  334. {
  335. "pSap",
  336. FIELD_OFFSET(ATMARP_INTERFACE, pSap),
  337. FIELD_SIZE(ATMARP_INTERFACE, pSap)
  338. },
  339. #endif // 0
  340. // ATMARP_SAP SapList; // Each SAP registered with CallMgr
  341. {
  342. "SapList",
  343. FIELD_OFFSET(ATMARP_INTERFACE, SapList),
  344. FIELD_SIZE(ATMARP_INTERFACE, SapList)
  345. },
  346. // ATMARP_HEADER_POOL HeaderPool[AA_HEADER_TYPE_MAX];
  347. {
  348. "HeaderPool",
  349. FIELD_OFFSET(ATMARP_INTERFACE, HeaderPool),
  350. FIELD_SIZE(ATMARP_INTERFACE, HeaderPool)
  351. },
  352. //
  353. // ----- IP/ARP interface related ----
  354. //
  355. #if DBG
  356. //ULONG aaia_sig; // Signature to help debugging
  357. {
  358. "aaia_sig",
  359. FIELD_OFFSET(ATMARP_INTERFACE, aaia_sig),
  360. FIELD_SIZE(ATMARP_INTERFACE, aaia_sig)
  361. },
  362. #endif
  363. // PVOID IPContext; // Use in calls to IP
  364. {
  365. "IPContext",
  366. FIELD_OFFSET(ATMARP_INTERFACE, IPContext),
  367. FIELD_SIZE(ATMARP_INTERFACE, IPContext)
  368. },
  369. // IP_ADDRESS_ENTRY LocalIPAddress; // List of local IP addresses. There
  370. {
  371. "LocalIPAddress",
  372. FIELD_OFFSET(ATMARP_INTERFACE, LocalIPAddress),
  373. FIELD_SIZE(ATMARP_INTERFACE, LocalIPAddress)
  374. },
  375. // should be atleast one.
  376. //NDIS_STRING IPConfigString; // Config info for IP for this LIS
  377. {
  378. "IPConfigString",
  379. FIELD_OFFSET(ATMARP_INTERFACE, IPConfigString),
  380. FIELD_SIZE(ATMARP_INTERFACE, IPConfigString)
  381. },
  382. //
  383. // ----- IP/ATM operation related ----
  384. //
  385. #if DBG
  386. // ULONG aait_sig; // Signature to help debugging
  387. {
  388. "aait_sig",
  389. FIELD_OFFSET(ATMARP_INTERFACE, aait_sig),
  390. FIELD_SIZE(ATMARP_INTERFACE, aait_sig)
  391. },
  392. #endif
  393. // PATMARP_IP_ENTRY * pArpTable; // The ARP table
  394. {
  395. "pArpTable",
  396. FIELD_OFFSET(ATMARP_INTERFACE, pArpTable),
  397. FIELD_SIZE(ATMARP_INTERFACE, pArpTable)
  398. },
  399. // ULONG NumOfArpEntries; // Entries in the above
  400. {
  401. "NumOfArpEntries",
  402. FIELD_OFFSET(ATMARP_INTERFACE, NumOfArpEntries),
  403. FIELD_SIZE(ATMARP_INTERFACE, NumOfArpEntries)
  404. },
  405. // ATMARP_SERVER_LIST ArpServerList; // List of ARP servers
  406. {
  407. "ArpServerList",
  408. FIELD_OFFSET(ATMARP_INTERFACE, ArpServerList),
  409. FIELD_SIZE(ATMARP_INTERFACE, ArpServerList)
  410. },
  411. // PATMARP_SERVER_ENTRY pCurrentServer; // ARP server in use
  412. {
  413. "pCurrentServer",
  414. FIELD_OFFSET(ATMARP_INTERFACE, pCurrentServer),
  415. FIELD_SIZE(ATMARP_INTERFACE, pCurrentServer)
  416. },
  417. // PATMARP_ATM_ENTRY pAtmEntryList; // List of all ATM Entries
  418. {
  419. "pAtmEntryList",
  420. FIELD_OFFSET(ATMARP_INTERFACE, pAtmEntryList),
  421. FIELD_SIZE(ATMARP_INTERFACE, pAtmEntryList)
  422. },
  423. // ULONG AtmInterfaceUp; // The ATM interface is considered
  424. {
  425. "AtmInterfaceUp",
  426. FIELD_OFFSET(ATMARP_INTERFACE, AtmInterfaceUp),
  427. FIELD_SIZE(ATMARP_INTERFACE, AtmInterfaceUp)
  428. },
  429. // "up" after ILMI addr regn is over
  430. // ATM_ADDRESS LocalAtmAddress; // Our ATM (HW) Address
  431. {
  432. "LocalAtmAddress",
  433. FIELD_OFFSET(ATMARP_INTERFACE, LocalAtmAddress),
  434. FIELD_SIZE(ATMARP_INTERFACE, LocalAtmAddress)
  435. },
  436. // ATMARP_TIMER_LIST TimerList[AAT_CLASS_MAX];
  437. {
  438. "TimerList",
  439. FIELD_OFFSET(ATMARP_INTERFACE, TimerList),
  440. FIELD_SIZE(ATMARP_INTERFACE, TimerList)
  441. },
  442. #ifdef IPMCAST
  443. //
  444. // ---- IP Multicast over ATM stuff ----
  445. //
  446. #if DBG
  447. //ULONG aaic_sig; // Signature for debugging
  448. {
  449. "aaic_sig",
  450. FIELD_OFFSET(ATMARP_INTERFACE, aaic_sig),
  451. FIELD_SIZE(ATMARP_INTERFACE, aaic_sig)
  452. },
  453. #endif // DBG
  454. // ULONG IpMcState; // State of IP Multicast/ATM
  455. {
  456. "IpMcState",
  457. FIELD_OFFSET(ATMARP_INTERFACE, IpMcState),
  458. FIELD_SIZE(ATMARP_INTERFACE, IpMcState)
  459. },
  460. // PATMARP_IPMC_JOIN_ENTRY pJoinList; // List of MC groups we have Joined
  461. {
  462. "pJoinList",
  463. FIELD_OFFSET(ATMARP_INTERFACE, pJoinList),
  464. FIELD_SIZE(ATMARP_INTERFACE, pJoinList)
  465. },
  466. // PATMARP_IP_ENTRY pMcSendList; // Sorted list of MC groups we send to
  467. {
  468. "pMcSendList",
  469. FIELD_OFFSET(ATMARP_INTERFACE, pMcSendList),
  470. FIELD_SIZE(ATMARP_INTERFACE, pMcSendList)
  471. },
  472. // ATMARP_SERVER_LIST MARSList; // List of MARS (servers)
  473. {
  474. "MARSList",
  475. FIELD_OFFSET(ATMARP_INTERFACE, MARSList),
  476. FIELD_SIZE(ATMARP_INTERFACE, MARSList)
  477. },
  478. // PATMARP_SERVER_ENTRY pCurrentMARS; // MARS in use
  479. {
  480. "pCurrentMARS",
  481. FIELD_OFFSET(ATMARP_INTERFACE, pCurrentMARS),
  482. FIELD_SIZE(ATMARP_INTERFACE, pCurrentMARS)
  483. },
  484. #endif // IPMCAST
  485. // PAA_GET_PACKET_SPEC_FUNC pGetPacketSpecFunc; // Routine to extract packet specs
  486. {
  487. "pGetPacketSpecFunc",
  488. FIELD_OFFSET(ATMARP_INTERFACE, pGetPacketSpecFunc),
  489. FIELD_SIZE(ATMARP_INTERFACE, pGetPacketSpecFunc)
  490. },
  491. // PATMARP_FLOW_INFO pFlowInfoList; // List of configured flows
  492. {
  493. "pFlowInfoList",
  494. FIELD_OFFSET(ATMARP_INTERFACE, pFlowInfoList),
  495. FIELD_SIZE(ATMARP_INTERFACE, pFlowInfoList)
  496. },
  497. #ifdef DHCP_OVER_ATM
  498. // BOOLEAN DhcpEnabled;
  499. {
  500. "DhcpEnabled",
  501. FIELD_OFFSET(ATMARP_INTERFACE, DhcpEnabled),
  502. FIELD_SIZE(ATMARP_INTERFACE, DhcpEnabled)
  503. },
  504. // ATM_ADDRESS DhcpServerAddress;
  505. {
  506. "DhcpServerAddress",
  507. FIELD_OFFSET(ATMARP_INTERFACE, DhcpServerAddress),
  508. FIELD_SIZE(ATMARP_INTERFACE, DhcpServerAddress)
  509. },
  510. // PATMARP_ATM_ENTRY pDhcpServerAtmEntry;
  511. {
  512. "pDhcpServerAtmEntry",
  513. FIELD_OFFSET(ATMARP_INTERFACE, pDhcpServerAtmEntry),
  514. FIELD_SIZE(ATMARP_INTERFACE, pDhcpServerAtmEntry)
  515. },
  516. #endif // DHCP_OVER_ATM
  517. //
  518. // ---- WMI Information ---
  519. //
  520. #if ATMARP_WMI
  521. #if DBG
  522. // ULONG aaiw_sig; // Signature to help debugging
  523. {
  524. "aaiw_sig",
  525. FIELD_OFFSET(ATMARP_INTERFACE, aaiw_sig),
  526. FIELD_SIZE(ATMARP_INTERFACE, aaiw_sig)
  527. },
  528. #endif
  529. // struct _ATMARP_IF_WMI_INFO *pIfWmiInfo;
  530. {
  531. "pIfWmiInfo",
  532. FIELD_OFFSET(ATMARP_INTERFACE, pIfWmiInfo),
  533. FIELD_SIZE(ATMARP_INTERFACE, pIfWmiInfo)
  534. },
  535. #endif // ATMARP_WMI
  536. {
  537. NULL
  538. }
  539. };
  540. TYPE_INFO type_ATMARP_INTERFACE = {
  541. "ATMARP_INTERFACE",
  542. "i",
  543. typeid_ATMARP_INTERFACE,
  544. fTYPEINFO_ISLIST,
  545. sizeof(ATMARP_INTERFACE),
  546. rgfi_ATMARP_INTERFACE,
  547. FIELD_OFFSET(ATMARP_INTERFACE, pNextInterface) // offset to next pointer.
  548. };
  549. //
  550. // STRUCTURES CONCERNING TYPE "ATMARP_ATM_ENTRY"
  551. //
  552. BITFIELD_INFO rgAtmEntryFlagsInfo[] =
  553. {
  554. {
  555. "IDLE",
  556. AA_ATM_ENTRY_STATE_MASK,
  557. AA_ATM_ENTRY_IDLE
  558. },
  559. {
  560. "ACTIVE",
  561. AA_ATM_ENTRY_STATE_MASK,
  562. AA_ATM_ENTRY_ACTIVE
  563. },
  564. {
  565. "CLOSING",
  566. AA_ATM_ENTRY_STATE_MASK,
  567. AA_ATM_ENTRY_CLOSING
  568. },
  569. {
  570. "UCAST",
  571. AA_ATM_ENTRY_TYPE_MASK,
  572. AA_ATM_ENTRY_TYPE_UCAST
  573. },
  574. {
  575. "NUCAST",
  576. AA_ATM_ENTRY_TYPE_MASK,
  577. AA_ATM_ENTRY_TYPE_NUCAST
  578. },
  579. {
  580. NULL
  581. }
  582. };
  583. TYPE_INFO type_ATMARP_ATM_ENTRY_FLAGS = {
  584. "",
  585. "",
  586. typeid_NULL,
  587. fTYPEINFO_ISBITFIELD,
  588. sizeof(ULONG),
  589. NULL,
  590. 0,
  591. rgAtmEntryFlagsInfo
  592. };
  593. STRUCT_FIELD_INFO rgfi_ATMARP_ATM_ENTRY[] =
  594. {
  595. #if DBG
  596. {
  597. "aae_sig",
  598. FIELD_OFFSET(ATMARP_ATM_ENTRY, aae_sig),
  599. FIELD_SIZE(ATMARP_ATM_ENTRY, aae_sig)
  600. },
  601. #endif
  602. // struct _ATMARP_ATM_ENTRY * pNext;
  603. {
  604. "pNext",
  605. FIELD_OFFSET(ATMARP_ATM_ENTRY, pNext),
  606. FIELD_SIZE(ATMARP_ATM_ENTRY, pNext)
  607. },
  608. // ULONG RefCount; // References
  609. {
  610. "RefCount",
  611. FIELD_OFFSET(ATMARP_ATM_ENTRY, RefCount),
  612. FIELD_SIZE(ATMARP_ATM_ENTRY, RefCount)
  613. },
  614. // ULONG Flags; // Desired state of this interface
  615. {
  616. "Flags",
  617. FIELD_OFFSET(ATMARP_ATM_ENTRY, Flags),
  618. FIELD_SIZE(ATMARP_ATM_ENTRY, Flags),
  619. 0, // flags
  620. &type_ATMARP_ATM_ENTRY_FLAGS
  621. },
  622. #if 0
  623. // ULONG Lock;
  624. {
  625. "Lock",
  626. FIELD_OFFSET(ATMARP_ATM_ENTRY, Lock),
  627. FIELD_SIZE(ATMARP_ATM_ENTRY, Lock)
  628. },
  629. #endif
  630. // struct _ATMARP_INTERFACE * pInterface; // Back pointer
  631. {
  632. "pInterface",
  633. FIELD_OFFSET(ATMARP_ATM_ENTRY, pInterface),
  634. FIELD_SIZE(ATMARP_ATM_ENTRY, pInterface)
  635. },
  636. // struct _ATMARP_VC * pVcList; // List of VCs to this ATM
  637. {
  638. "pVcList",
  639. FIELD_OFFSET(ATMARP_ATM_ENTRY, pVcList),
  640. FIELD_SIZE(ATMARP_ATM_ENTRY, pVcList)
  641. },
  642. // struct _ATMARP_VC * pBestEffortVc; // One of the Best Effort VCs here
  643. {
  644. "pBestEffortVc",
  645. FIELD_OFFSET(ATMARP_ATM_ENTRY, pBestEffortVc),
  646. FIELD_SIZE(ATMARP_ATM_ENTRY, pBestEffortVc)
  647. },
  648. // struct _ATMARP_IP_ENTRY * pIpEntryList; // List of IP entries that
  649. {
  650. "pIpEntryList",
  651. FIELD_OFFSET(ATMARP_ATM_ENTRY, pIpEntryList),
  652. FIELD_SIZE(ATMARP_ATM_ENTRY, pIpEntryList)
  653. },
  654. // ATM_ADDRESS ATMAddress; // "ATM Number" in the RFC
  655. {
  656. "ATMAddress",
  657. FIELD_OFFSET(ATMARP_ATM_ENTRY, ATMAddress),
  658. FIELD_SIZE(ATMARP_ATM_ENTRY, ATMAddress)
  659. },
  660. #if 0
  661. // ATM_ADDRESS ATMSubAddress;
  662. {
  663. "ATMSubAddress",
  664. FIELD_OFFSET(ATMARP_ATM_ENTRY, ATMSubAddress),
  665. FIELD_SIZE(ATMARP_ATM_ENTRY, ATMSubAddress)
  666. },
  667. #endif // 0
  668. #ifdef IPMCAST
  669. // struct _ATMARP_IPMC_ATM_INFO * pMcAtmInfo; // Additional info for multicast
  670. {
  671. "pMcAtmInfo",
  672. FIELD_OFFSET(ATMARP_ATM_ENTRY, pMcAtmInfo),
  673. FIELD_SIZE(ATMARP_ATM_ENTRY, pMcAtmInfo)
  674. },
  675. #endif // IPMCAST
  676. #if DBG
  677. //UCHAR Refs[AE_REFTYPE_COUNT];
  678. {
  679. "Refs",
  680. FIELD_OFFSET(ATMARP_ATM_ENTRY, Refs),
  681. FIELD_SIZE(ATMARP_ATM_ENTRY, Refs)
  682. },
  683. #endif //DBG
  684. {
  685. NULL
  686. }
  687. };
  688. TYPE_INFO type_ATMARP_ATM_ENTRY = {
  689. "ATMARP_ATM_ENTRY",
  690. "ae",
  691. typeid_ATMARP_ATM_ENTRY,
  692. fTYPEINFO_ISLIST,
  693. sizeof(ATMARP_ATM_ENTRY),
  694. rgfi_ATMARP_ATM_ENTRY,
  695. FIELD_OFFSET(ATMARP_ATM_ENTRY, pNext) // offset to next pointer.
  696. };
  697. //
  698. // STRUCTURES CONCERNING TYPE "ATMARP_IP_ENTRY"
  699. //
  700. BITFIELD_INFO rgIpEntryFlagsInfo[] =
  701. {
  702. {
  703. "IDLE",
  704. AA_IP_ENTRY_STATE_MASK,
  705. AA_IP_ENTRY_IDLE
  706. },
  707. {
  708. "ARPING",
  709. AA_IP_ENTRY_STATE_MASK,
  710. AA_IP_ENTRY_ARPING
  711. },
  712. {
  713. "INARPING",
  714. AA_IP_ENTRY_STATE_MASK,
  715. AA_IP_ENTRY_INARPING
  716. },
  717. {
  718. "RESOLVED",
  719. AA_IP_ENTRY_STATE_MASK,
  720. AA_IP_ENTRY_RESOLVED
  721. },
  722. {
  723. "COMM_ERROR",
  724. AA_IP_ENTRY_STATE_MASK,
  725. AA_IP_ENTRY_COMM_ERROR
  726. },
  727. {
  728. "ABORTING",
  729. AA_IP_ENTRY_STATE_MASK,
  730. AA_IP_ENTRY_ABORTING
  731. },
  732. {
  733. "AGED_OUT",
  734. AA_IP_ENTRY_STATE_MASK,
  735. AA_IP_ENTRY_AGED_OUT
  736. },
  737. {
  738. "SEEN_NAK",
  739. AA_IP_ENTRY_STATE_MASK,
  740. AA_IP_ENTRY_SEEN_NAK
  741. },
  742. #ifdef IPMCAST
  743. #define MC AA_IP_ENTRY_ADDR_TYPE_NUCAST
  744. //
  745. // We use this to only dump other multicast-related fields
  746. // if this field is set.
  747. {
  748. "MC_NO_REVALIDATION",
  749. MC|AA_IP_ENTRY_MC_VALIDATE_MASK,
  750. MC|AA_IP_ENTRY_MC_NO_REVALIDATION
  751. },
  752. {
  753. "MC_REVALIDATE",
  754. MC|AA_IP_ENTRY_MC_VALIDATE_MASK,
  755. MC|AA_IP_ENTRY_MC_REVALIDATE
  756. },
  757. {
  758. "MC_REVALIDATING",
  759. MC|AA_IP_ENTRY_MC_VALIDATE_MASK,
  760. MC|AA_IP_ENTRY_MC_REVALIDATING
  761. },
  762. {
  763. "MC_IDLE",
  764. MC|AA_IP_ENTRY_MC_RESOLVE_MASK,
  765. MC|AA_IP_ENTRY_MC_IDLE
  766. },
  767. {
  768. "MC_AWAIT_MULTI",
  769. MC|AA_IP_ENTRY_MC_RESOLVE_MASK,
  770. MC|AA_IP_ENTRY_MC_AWAIT_MULTI
  771. },
  772. {
  773. "MC_DISCARDING_MULTI",
  774. MC|AA_IP_ENTRY_MC_RESOLVE_MASK,
  775. MC|AA_IP_ENTRY_MC_DISCARDING_MULTI
  776. },
  777. {
  778. "MC_RESOLVED",
  779. MC|AA_IP_ENTRY_MC_RESOLVE_MASK,
  780. MC|AA_IP_ENTRY_MC_RESOLVED
  781. },
  782. {
  783. "UCAST",
  784. AA_IP_ENTRY_ADDR_TYPE_MASK,
  785. AA_IP_ENTRY_ADDR_TYPE_UCAST
  786. },
  787. {
  788. "NUCAST",
  789. AA_IP_ENTRY_ADDR_TYPE_MASK,
  790. AA_IP_ENTRY_ADDR_TYPE_NUCAST
  791. },
  792. #endif // IPMCAST
  793. {
  794. "STATIC",
  795. AA_IP_ENTRY_TYPE_MASK,
  796. AA_IP_ENTRY_IS_STATIC
  797. },
  798. {
  799. NULL
  800. }
  801. };
  802. TYPE_INFO type_ATMARP_IP_ENTRY_FLAGS = {
  803. "",
  804. "",
  805. typeid_NULL,
  806. fTYPEINFO_ISBITFIELD,
  807. sizeof(ULONG),
  808. NULL,
  809. 0,
  810. rgIpEntryFlagsInfo
  811. };
  812. STRUCT_FIELD_INFO rgfi_ATMARP_IP_ENTRY[] =
  813. {
  814. #if DBG
  815. {
  816. "aip_sig",
  817. FIELD_OFFSET(ATMARP_IP_ENTRY, aip_sig),
  818. FIELD_SIZE(ATMARP_IP_ENTRY, aip_sig)
  819. },
  820. #endif
  821. // IP_ADDRESS IPAddress; // IP Address
  822. {
  823. "IPAddress",
  824. FIELD_OFFSET(ATMARP_IP_ENTRY, IPAddress),
  825. FIELD_SIZE(ATMARP_IP_ENTRY, IPAddress)
  826. },
  827. // struct _ATMARP_IP_ENTRY * pNextEntry;
  828. {
  829. "pNextEntry",
  830. FIELD_OFFSET(ATMARP_IP_ENTRY, pNextEntry),
  831. FIELD_SIZE(ATMARP_IP_ENTRY, pNextEntry)
  832. },
  833. // struct _ATMARP_IP_ENTRY * pNextToAtm; // List of entries pointing to
  834. {
  835. "pNextToAtm",
  836. FIELD_OFFSET(ATMARP_IP_ENTRY, pNextToAtm),
  837. FIELD_SIZE(ATMARP_IP_ENTRY, pNextToAtm)
  838. },
  839. // ULONG Flags; // Desired state of this interface
  840. {
  841. "Flags",
  842. FIELD_OFFSET(ATMARP_IP_ENTRY, Flags),
  843. FIELD_SIZE(ATMARP_IP_ENTRY, Flags),
  844. 0, // flags
  845. &type_ATMARP_IP_ENTRY_FLAGS
  846. },
  847. // ULONG RefCount; // References
  848. {
  849. "RefCount",
  850. FIELD_OFFSET(ATMARP_IP_ENTRY, RefCount),
  851. FIELD_SIZE(ATMARP_IP_ENTRY, RefCount)
  852. },
  853. #if 0
  854. // ULONG Lock;
  855. {
  856. "Lock",
  857. FIELD_OFFSET(ATMARP_IP_ENTRY, Lock),
  858. FIELD_SIZE(ATMARP_IP_ENTRY, Lock)
  859. },
  860. #endif
  861. // struct _ATMARP_INTERFACE * pInterface; // Back pointer
  862. {
  863. "pInterface",
  864. FIELD_OFFSET(ATMARP_IP_ENTRY, pInterface),
  865. FIELD_SIZE(ATMARP_IP_ENTRY, pInterface)
  866. },
  867. // PATMARP_ATM_ENTRY pAtmEntry; // Pointer to all ATM info
  868. {
  869. "pAtmEntry",
  870. FIELD_OFFSET(ATMARP_IP_ENTRY, pAtmEntry),
  871. FIELD_SIZE(ATMARP_IP_ENTRY, pAtmEntry)
  872. },
  873. #ifdef IPMCAST
  874. // struct _ATMARP_IP_ENTRY * pNextMcEntry; // Next "higher" Multicast IP Entry
  875. {
  876. "pNextMcEntry",
  877. FIELD_OFFSET(ATMARP_IP_ENTRY, pNextMcEntry),
  878. FIELD_SIZE(ATMARP_IP_ENTRY, pNextMcEntry)
  879. },
  880. // USHORT NextMultiSeq; // Sequence Number expected
  881. {
  882. "NextMultiSeq",
  883. FIELD_OFFSET(ATMARP_IP_ENTRY, NextMultiSeq),
  884. FIELD_SIZE(ATMARP_IP_ENTRY, NextMultiSeq)
  885. },
  886. // in the next MULTI
  887. #if 0
  888. USHORT Filler;
  889. #endif // 0
  890. #endif // IPMCAST
  891. // ATMARP_TIMER Timer; // Timers are: (all exclusive)
  892. {
  893. "Timer",
  894. FIELD_OFFSET(ATMARP_IP_ENTRY, Timer),
  895. FIELD_SIZE(ATMARP_IP_ENTRY, Timer)
  896. },
  897. // ULONG RetriesLeft;
  898. {
  899. "RetriesLeft",
  900. FIELD_OFFSET(ATMARP_IP_ENTRY, RetriesLeft),
  901. FIELD_SIZE(ATMARP_IP_ENTRY, RetriesLeft)
  902. },
  903. // PNDIS_PACKET PacketList; // List of packets waiting to be sent
  904. {
  905. "PacketList",
  906. FIELD_OFFSET(ATMARP_IP_ENTRY, PacketList),
  907. FIELD_SIZE(ATMARP_IP_ENTRY, PacketList)
  908. },
  909. // RouteCacheEntry * pRCEList; // List of Route Cache Entries
  910. {
  911. "pRCEList",
  912. FIELD_OFFSET(ATMARP_IP_ENTRY, pRCEList),
  913. FIELD_SIZE(ATMARP_IP_ENTRY, pRCEList)
  914. },
  915. #if 0
  916. #ifdef CUBDD
  917. SINGLE_LIST_ENTRY PendingIrpList; // List of IRP's waiting for
  918. // this IP address to be resolved.
  919. #endif // CUBDD
  920. #endif// 0
  921. #if DBG
  922. //UCHAR Refs[IE_REFTYPE_COUNT];
  923. {
  924. "Refs",
  925. FIELD_OFFSET(ATMARP_IP_ENTRY, Refs),
  926. FIELD_SIZE(ATMARP_IP_ENTRY, Refs)
  927. },
  928. #endif //DBG
  929. {
  930. NULL
  931. }
  932. };
  933. TYPE_INFO type_ATMARP_IP_ENTRY = {
  934. "ATMARP_IP_ENTRY",
  935. "ip",
  936. typeid_ATMARP_IP_ENTRY,
  937. fTYPEINFO_ISLIST,
  938. sizeof(ATMARP_IP_ENTRY),
  939. rgfi_ATMARP_IP_ENTRY,
  940. FIELD_OFFSET(ATMARP_IP_ENTRY, pNextToAtm) // offset to next pointer.
  941. };
  942. //
  943. // STRUCTURES CONCERNING TYPE "ATMARP_VC"
  944. //
  945. STRUCT_FIELD_INFO rgfi_ATMARP_VC[] =
  946. {
  947. #if DBG
  948. {
  949. "avc_sig",
  950. FIELD_OFFSET(ATMARP_VC, avc_sig),
  951. FIELD_SIZE(ATMARP_VC, avc_sig)
  952. },
  953. #endif
  954. // struct _ATMARP_VC * pNextVc;
  955. {
  956. "pNextVc",
  957. FIELD_OFFSET(ATMARP_VC, pNextVc),
  958. FIELD_SIZE(ATMARP_VC, pNextVc)
  959. },
  960. // ULONG RefCount; // References
  961. {
  962. "RefCount",
  963. FIELD_OFFSET(ATMARP_VC, RefCount),
  964. FIELD_SIZE(ATMARP_VC, RefCount)
  965. },
  966. #if 0
  967. // ULONG Lock;
  968. {
  969. "Lock",
  970. FIELD_OFFSET(ATMARP_VC, Lock),
  971. FIELD_SIZE(ATMARP_VC, Lock)
  972. },
  973. #endif
  974. // ULONG Flags; // Desired state of this interface
  975. {
  976. "Flags",
  977. FIELD_OFFSET(ATMARP_VC, Flags),
  978. FIELD_SIZE(ATMARP_VC, Flags)
  979. },
  980. // NDIS_HANDLE NdisVcHandle; // For NDIS calls
  981. {
  982. "NdisVcHandle",
  983. FIELD_OFFSET(ATMARP_VC, NdisVcHandle),
  984. FIELD_SIZE(ATMARP_VC, NdisVcHandle)
  985. },
  986. // struct _ATMARP_INTERFACE * pInterface; // Back pointer
  987. {
  988. "pInterface",
  989. FIELD_OFFSET(ATMARP_VC, pInterface),
  990. FIELD_SIZE(ATMARP_VC, pInterface)
  991. },
  992. // PATMARP_ATM_ENTRY pAtmEntry; // Pointer to all ATM info
  993. {
  994. "pAtmEntry",
  995. FIELD_OFFSET(ATMARP_VC, pAtmEntry),
  996. FIELD_SIZE(ATMARP_VC, pAtmEntry)
  997. },
  998. // PNDIS_PACKET PacketList; // List of packets waiting to be sent
  999. {
  1000. "PacketList",
  1001. FIELD_OFFSET(ATMARP_VC, PacketList),
  1002. FIELD_SIZE(ATMARP_VC, PacketList)
  1003. },
  1004. // ATMARP_TIMER Timer; // Timers are: (all exclusive)
  1005. {
  1006. "Timer",
  1007. FIELD_OFFSET(ATMARP_VC, Timer),
  1008. FIELD_SIZE(ATMARP_VC, Timer)
  1009. },
  1010. // ULONG RetriesLeft;
  1011. {
  1012. "RetriesLeft",
  1013. FIELD_OFFSET(ATMARP_VC, RetriesLeft),
  1014. FIELD_SIZE(ATMARP_VC, RetriesLeft)
  1015. },
  1016. #ifdef GPC
  1017. // PVOID FlowHandle; // Points to Flow Info struct
  1018. {
  1019. "FlowHandle",
  1020. FIELD_OFFSET(ATMARP_VC, FlowHandle),
  1021. FIELD_SIZE(ATMARP_VC, FlowHandle)
  1022. },
  1023. #endif // GPC
  1024. // ATMARP_FILTER_SPEC FilterSpec; // Filter Spec (Protocol, port)
  1025. {
  1026. "FilterSpec",
  1027. FIELD_OFFSET(ATMARP_VC, FilterSpec),
  1028. FIELD_SIZE(ATMARP_VC, FilterSpec)
  1029. },
  1030. // ATMARP_FLOW_SPEC FlowSpec; // Flow Spec (QoS etc) for this conn
  1031. {
  1032. "FlowSpec",
  1033. FIELD_OFFSET(ATMARP_VC, FlowSpec),
  1034. FIELD_SIZE(ATMARP_VC, FlowSpec)
  1035. },
  1036. {
  1037. NULL
  1038. }
  1039. };
  1040. TYPE_INFO type_ATMARP_VC = {
  1041. "ATMARP_VC",
  1042. "vc",
  1043. typeid_ATMARP_VC,
  1044. fTYPEINFO_ISLIST,
  1045. sizeof(ATMARP_VC),
  1046. rgfi_ATMARP_VC,
  1047. FIELD_OFFSET(ATMARP_VC, pNextVc) // offset to next pointer.
  1048. };
  1049. TYPE_INFO *g_rgAAC_Types[] =
  1050. {
  1051. &type_ATMARP_GLOBALS,
  1052. &type_ATMARP_ADAPTER,
  1053. &type_ATMARP_INTERFACE,
  1054. &type_ATMARP_ATM_ENTRY,
  1055. &type_ATMARP_IP_ENTRY,
  1056. &type_ATMARP_VC,
  1057. NULL
  1058. };
  1059. #if 0
  1060. typedef struct
  1061. {
  1062. const char *szName; // of variable.
  1063. const char *szShortName;
  1064. TYPE_INFO *pBaseType; // could be null (unspecified).
  1065. UINT uFlags;
  1066. UINT cbSize;
  1067. UINT_PTR uAddr; // Address in debuggee's address space.
  1068. } GLOBALVAR_INFO;
  1069. #endif
  1070. GLOBALVAR_INFO g_rgAAC_Globals[] =
  1071. {
  1072. {
  1073. "AtmArpGlobalInfo",
  1074. "aag",
  1075. &type_ATMARP_GLOBALS,
  1076. 0,
  1077. sizeof(AtmArpGlobalInfo),
  1078. 0
  1079. },
  1080. {
  1081. "AtmArpProtocolCharacteristics",
  1082. "pc",
  1083. NULL,
  1084. 0,
  1085. sizeof(AtmArpProtocolCharacteristics),
  1086. 0
  1087. },
  1088. {
  1089. "AtmArpClientCharacteristics",
  1090. "cc",
  1091. NULL,
  1092. 0,
  1093. sizeof(AtmArpClientCharacteristics),
  1094. 0
  1095. },
  1096. {
  1097. NULL
  1098. }
  1099. };
  1100. UINT_PTR
  1101. AAC_ResolveAddress(
  1102. TYPE_INFO *pType
  1103. );
  1104. NAMESPACE AAC_NameSpace = {
  1105. g_rgAAC_Types,
  1106. g_rgAAC_Globals,
  1107. AAC_ResolveAddress
  1108. };
  1109. void
  1110. AAC_CmdHandler(
  1111. DBGCOMMAND *pCmd
  1112. );
  1113. void
  1114. do_aac(PCSTR args)
  1115. {
  1116. DBGCOMMAND *pCmd = Parse(args, &AAC_NameSpace);
  1117. if (pCmd)
  1118. {
  1119. //DumpCommand(pCmd);
  1120. DoCommand(pCmd, AAC_CmdHandler);
  1121. FreeCommand(pCmd);
  1122. pCmd = NULL;
  1123. }
  1124. return;
  1125. }
  1126. void
  1127. do_help(PCSTR args)
  1128. {
  1129. return;
  1130. }
  1131. void
  1132. AAC_CmdHandler(
  1133. DBGCOMMAND *pCmd
  1134. )
  1135. {
  1136. MyDbgPrintf("Handler called \n");
  1137. }
  1138. UINT_PTR
  1139. AAC_ResolveAddress(
  1140. TYPE_INFO *pType
  1141. )
  1142. {
  1143. UINT_PTR uAddr = 0;
  1144. UINT uOffset = 0;
  1145. BOOL fRet = FALSE;
  1146. UINT_PTR uParentAddress = 0;
  1147. static UINT_PTR uAddr_AtmArpGlobalInfo;
  1148. //
  1149. // If this type has a parent (container) type, we will use the containing
  1150. // type's cached address if its available, else we'll resolve the
  1151. // containers type. The root types are globals -- we do an
  1152. // expression evaluation for them.
  1153. //
  1154. switch(pType->uTypeID)
  1155. {
  1156. case typeid_ATMARP_GLOBALS:
  1157. if (!uAddr_AtmArpGlobalInfo)
  1158. {
  1159. uAddr_AtmArpGlobalInfo =
  1160. dbgextGetExpression("atmarpc!AtmArpGlobalInfo");
  1161. pType->uCachedAddress = uAddr_AtmArpGlobalInfo;
  1162. }
  1163. uAddr = uAddr_AtmArpGlobalInfo;
  1164. if (uAddr)
  1165. {
  1166. fRet = TRUE;
  1167. }
  1168. break;
  1169. case typeid_ATMARP_ADAPTER:
  1170. //
  1171. //
  1172. //
  1173. uParentAddress = type_ATMARP_GLOBALS.uCachedAddress;
  1174. if (!uParentAddress)
  1175. {
  1176. uParentAddress = AAC_ResolveAddress(&type_ATMARP_GLOBALS);
  1177. }
  1178. if (uParentAddress)
  1179. {
  1180. uOffset = FIELD_OFFSET(ATMARP_GLOBALS, pAdapterList);
  1181. fRet = dbgextReadUINT_PTR(
  1182. uParentAddress+uOffset,
  1183. &uAddr,
  1184. "ATMARP_GLOBALS::pAdapterList"
  1185. );
  1186. #if 0
  1187. MyDbgPrintf(
  1188. "fRet = %lu; uParentOff=0x%lx uAddr=0x%lx[0x%lx]\n",
  1189. fRet,
  1190. uParentAddress+uOffset,
  1191. uAddr,
  1192. *(UINT_PTR*)(uParentAddress+uOffset)
  1193. );
  1194. #endif // 0
  1195. }
  1196. break;
  1197. case typeid_ATMARP_INTERFACE:
  1198. //
  1199. //
  1200. //
  1201. uParentAddress = type_ATMARP_ADAPTER.uCachedAddress;
  1202. if (!uParentAddress)
  1203. {
  1204. uParentAddress = AAC_ResolveAddress(&type_ATMARP_ADAPTER);
  1205. }
  1206. if (uParentAddress)
  1207. {
  1208. uOffset = FIELD_OFFSET(ATMARP_ADAPTER, pInterfaceList);
  1209. fRet = dbgextReadUINT_PTR(
  1210. uParentAddress + uOffset,
  1211. &uAddr,
  1212. "ATMARP_ADAPTER::pInterfaceList"
  1213. );
  1214. #if 0
  1215. MyDbgPrintf(
  1216. "fRet = %lu; uParentOff=0x%lx uAddr=0x%lx[0x%lx]\n",
  1217. fRet,
  1218. uParentAddress+uOffset,
  1219. uAddr,
  1220. *(UINT_PTR*)(uParentAddress+uOffset)
  1221. );
  1222. #endif // 0
  1223. }
  1224. break;
  1225. case typeid_ATMARP_ATM_ENTRY:
  1226. //
  1227. //
  1228. //
  1229. uParentAddress = type_ATMARP_INTERFACE.uCachedAddress;
  1230. if (!uParentAddress)
  1231. {
  1232. uParentAddress = AAC_ResolveAddress(&type_ATMARP_INTERFACE);
  1233. }
  1234. if (uParentAddress)
  1235. {
  1236. uOffset = FIELD_OFFSET(ATMARP_INTERFACE, pAtmEntryList);
  1237. fRet = dbgextReadUINT_PTR(
  1238. uParentAddress + uOffset,
  1239. &uAddr,
  1240. "ATMARP_INTERFACE::pAtmEntryList"
  1241. );
  1242. #if 0
  1243. MyDbgPrintf(
  1244. "fRet = %lu; uParentOff=0x%lx uAddr=0x%lx[0x%lx]\n",
  1245. fRet,
  1246. uParentAddress+uOffset,
  1247. uAddr,
  1248. *(UINT_PTR*)(uParentAddress+uOffset)
  1249. );
  1250. #endif // 0
  1251. }
  1252. break;
  1253. case typeid_ATMARP_IP_ENTRY:
  1254. //
  1255. //
  1256. //
  1257. uParentAddress = type_ATMARP_ATM_ENTRY.uCachedAddress;
  1258. if (!uParentAddress)
  1259. {
  1260. uParentAddress = AAC_ResolveAddress(&type_ATMARP_ATM_ENTRY);
  1261. }
  1262. if (uParentAddress)
  1263. {
  1264. uOffset = FIELD_OFFSET(ATMARP_ATM_ENTRY, pIpEntryList);
  1265. fRet = dbgextReadUINT_PTR(
  1266. uParentAddress + uOffset,
  1267. &uAddr,
  1268. "ATMARP_ATM_ENTRY::pIpEntryList"
  1269. );
  1270. #if 0
  1271. MyDbgPrintf(
  1272. "fRet = %lu; uParentOff=0x%lx uAddr=0x%lx[0x%lx]\n",
  1273. fRet,
  1274. uParentAddress+uOffset,
  1275. uAddr,
  1276. *(UINT_PTR*)(uParentAddress+uOffset)
  1277. );
  1278. #endif // 0
  1279. }
  1280. break;
  1281. case typeid_ATMARP_VC:
  1282. //
  1283. //
  1284. //
  1285. uParentAddress = type_ATMARP_ATM_ENTRY.uCachedAddress;
  1286. if (!uParentAddress)
  1287. {
  1288. uParentAddress = AAC_ResolveAddress(&type_ATMARP_ATM_ENTRY);
  1289. }
  1290. if (uParentAddress)
  1291. {
  1292. uOffset = FIELD_OFFSET(ATMARP_ATM_ENTRY, pVcList);
  1293. fRet = dbgextReadUINT_PTR(
  1294. uParentAddress + uOffset,
  1295. &uAddr,
  1296. "ATMARP_ATM_ENTRY::pVcList"
  1297. );
  1298. #if 0
  1299. MyDbgPrintf(
  1300. "fRet = %lu; uParentOff=0x%lx uAddr=0x%lx[0x%lx]\n",
  1301. fRet,
  1302. uParentAddress+uOffset,
  1303. uAddr,
  1304. *(UINT_PTR*)(uParentAddress+uOffset)
  1305. );
  1306. #endif // 0
  1307. }
  1308. break;
  1309. default:
  1310. MYASSERT(FALSE);
  1311. break;
  1312. }
  1313. if (!fRet)
  1314. {
  1315. uAddr = 0;
  1316. }
  1317. MyDbgPrintf("ResolveAddress[%s] returns 0x%08lx\n", pType->szName, uAddr);
  1318. return uAddr;
  1319. }