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.
801 lines
23 KiB
801 lines
23 KiB
/*++
|
|
|
|
Copyright (c) 1999-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ipdump.c
|
|
|
|
Abstract:
|
|
|
|
Contains all IP structure dumping functions.
|
|
|
|
Author:
|
|
|
|
Scott Holden (sholden) 24-Apr-1999
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "tcpipxp.h"
|
|
|
|
BOOL
|
|
DumpARPInterface(
|
|
ARPInterface *pAi,
|
|
ULONG_PTR AiAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
BOOL fStatus = TRUE;
|
|
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(ARPInterface, AiAddr);
|
|
|
|
Print_LL(pAi, ai_linkage);
|
|
Print_ptr(pAi, ai_context);
|
|
#if FFP_SUPPORT
|
|
Print_ptr(pAi, ai_driver);
|
|
#endif
|
|
Print_ptr(pAi, ai_handle);
|
|
Print_enum(pAi, ai_media, NdisMediumsEnum);
|
|
Print_ptr(pAi, ai_ppool);
|
|
Print_CTELock(pAi, ai_lock);
|
|
Print_CTELock(pAi, ai_ARPTblLock);
|
|
Print_ptr(pAi, ai_ARPTbl);
|
|
Print_addr(pAi, ai_ipaddr, ARPInterface, AiAddr);
|
|
Print_ptr(pAi, ai_parpaddr);
|
|
Print_IPAddr(pAi, ai_bcast);
|
|
Print_uint(pAi, ai_inoctets);
|
|
Print_uint(pAi, ai_inpcount[0]);
|
|
Print_uint(pAi, ai_inpcount[1]);
|
|
Print_uint(pAi, ai_inpcount[2]);
|
|
Print_uint(pAi, ai_outoctets);
|
|
Print_uint(pAi, ai_outpcount[0]);
|
|
Print_uint(pAi, ai_outpcount[1]);
|
|
Print_uint(pAi, ai_qlen);
|
|
Print_hwaddr(pAi, ai_addr);
|
|
Print_uchar(pAi, ai_operstatus);
|
|
Print_uchar(pAi, ai_addrlen);
|
|
Print_ucharhex(pAi, ai_bcastmask);
|
|
Print_ucharhex(pAi, ai_bcastval);
|
|
Print_uchar(pAi, ai_bcastoff);
|
|
Print_uchar(pAi, ai_hdrsize);
|
|
Print_uchar(pAi, ai_snapsize);
|
|
Print_uint(pAi, ai_pfilter);
|
|
Print_uint(pAi, ai_count);
|
|
Print_uint(pAi, ai_parpcount);
|
|
Print_CTETimer(pAi, ai_timer);
|
|
Print_BOOLEAN(pAi, ai_timerstarted);
|
|
Print_BOOLEAN(pAi, ai_stoptimer);
|
|
Print_addr(pAi, ai_timerblock, ARPInterface, AiAddr);
|
|
Print_addr(pAi, ai_block, ARPInterface, AiAddr);
|
|
Print_ushort(pAi, ai_mtu);
|
|
Print_uchar(pAi, ai_adminstate);
|
|
Print_uchar(pAi, ai_mediastatus);
|
|
Print_uint(pAi, ai_speed);
|
|
Print_uint(pAi, ai_lastchange);
|
|
Print_uint(pAi, ai_indiscards);
|
|
Print_uint(pAi, ai_inerrors);
|
|
Print_uint(pAi, ai_uknprotos);
|
|
Print_uint(pAi, ai_outdiscards);
|
|
Print_uint(pAi, ai_outerrors);
|
|
Print_uint(pAi, ai_desclen);
|
|
Print_uint(pAi, ai_index);
|
|
Print_uint(pAi, ai_atinst);
|
|
Print_uint(pAi, ai_ifinst);
|
|
Print_ptr(pAi, ai_desc);
|
|
Print_ptr(pAi, ai_mcast);
|
|
Print_uint(pAi, ai_mcastcnt);
|
|
Print_uint(pAi, ai_ipaddrcnt);
|
|
Print_uint(pAi, ai_telladdrchng);
|
|
Print_ULONG(pAi, ai_mediatype);
|
|
Print_uint(pAi, ai_promiscuous);
|
|
#if FFP_SUPPORT
|
|
Print_ulong(pAi, ai_ffpversion);
|
|
Print_uint(pAi, ai_ffplastflush);
|
|
#endif
|
|
Print_uint(pAi, ai_OffloadFlags);
|
|
Print_addr(pAi, ai_TcpLargeSend, ARPInterface, AiAddr);
|
|
Print_ulong(pAi, ai_wakeupcap.Flags);
|
|
Print_ulong(pAi, ai_wakeupcap.WakeUpCapabilities.MinMagicPacketWakeUp);
|
|
Print_ulong(pAi, ai_wakeupcap.WakeUpCapabilities.MinPatternWakeUp);
|
|
Print_ulong(pAi, ai_wakeupcap.WakeUpCapabilities.MinLinkChangeWakeUp);
|
|
Print_NDIS_STRING(pAi, ai_devicename);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else if (verb == VERB_MED) {
|
|
PrintStartNamedStruct(ARPInterface, AiAddr);
|
|
|
|
Print_ptr(pAi, ai_context);
|
|
Print_ptr(pAi, ai_handle);
|
|
Print_enum(pAi, ai_media, NdisMediumsEnum);
|
|
Print_ptr(pAi, ai_ARPTbl);
|
|
Print_uint(pAi, ai_qlen);
|
|
Print_uchar(pAi, ai_operstatus);
|
|
Print_uchar(pAi, ai_hdrsize);
|
|
Print_uchar(pAi, ai_snapsize);
|
|
Print_ushort(pAi, ai_mtu);
|
|
Print_uint(pAi, ai_speed);
|
|
Print_ptr(pAi, ai_desc);
|
|
Print_uint(pAi, ai_OffloadFlags);
|
|
Print_addr(pAi, ai_TcpLargeSend, ARPInterface, AiAddr);
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("ARPInterface %08lx NDIS %x ai_context %x ARPTbl %x" ENDL,
|
|
AiAddr, pAi->ai_handle, pAi->ai_context, pAi->ai_ARPTbl);
|
|
}
|
|
|
|
return (fStatus);
|
|
}
|
|
|
|
BOOL
|
|
DumpNetTableEntry(
|
|
NetTableEntry *pNte,
|
|
ULONG_PTR NteAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
BOOL fStatus = TRUE;
|
|
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(NetTableEntry, NteAddr);
|
|
|
|
Print_ptr(pNte, nte_next);
|
|
Print_IPAddr(pNte, nte_addr);
|
|
Print_IPMask(pNte, nte_mask);
|
|
Print_ptr(pNte, nte_if);
|
|
Print_ptr(pNte, nte_ifnext);
|
|
Print_flags(pNte, nte_flags, FlagsNTE);
|
|
Print_ushort(pNte, nte_context);
|
|
Print_ulong(pNte, nte_instance);
|
|
Print_ptr(pNte, nte_pnpcontext);
|
|
Print_CTELock(pNte, nte_lock);
|
|
Print_ptr(pNte, nte_ralist);
|
|
Print_ptr(pNte, nte_echolist);
|
|
Print_CTETimer(pNte, nte_timer);
|
|
Print_addr(pNte, nte_timerblock, NetTableEntry, NteAddr);
|
|
Print_ushort(pNte, nte_mss);
|
|
Print_ushort(pNte, nte_icmpseq);
|
|
Print_ptr(pNte, nte_igmplist);
|
|
Print_ptr(pNte, nte_addrhandle);
|
|
Print_IPAddr(pNte, nte_rtrdiscaddr);
|
|
Print_uchar(pNte, nte_rtrdiscstate);
|
|
Print_uchar(pNte, nte_rtrdisccount);
|
|
Print_uchar(pNte, nte_rtrdiscovery);
|
|
Print_uchar(pNte, nte_deleting);
|
|
Print_ptr(pNte, nte_rtrlist);
|
|
Print_uint(pNte, nte_igmpcount);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else if (verb == VERB_MED)
|
|
{
|
|
PrintStartNamedStruct(NetTableEntry, NteAddr);
|
|
Print_ptr(pNte, nte_next);
|
|
Print_IPAddr(pNte, nte_addr);
|
|
Print_ptr(pNte, nte_if);
|
|
Print_ptr(pNte, nte_ifnext);
|
|
Print_flags(pNte, nte_flags, FlagsNTE);
|
|
Print_ushort(pNte, nte_context);
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("NTE %08lx ", NteAddr);
|
|
printx("ipaddr: ");
|
|
DumpIPAddr(pNte->nte_addr);
|
|
printx("context: %d ", pNte->nte_context);
|
|
printx("(");
|
|
DumpFlags(pNte->nte_flags, FlagsNTE);
|
|
printx(")");
|
|
printx(ENDL);
|
|
}
|
|
|
|
return (fStatus);
|
|
}
|
|
|
|
BOOL
|
|
DumpPacketContext(
|
|
PacketContext *pPc,
|
|
ULONG_PTR PcAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX ||
|
|
verb == VERB_MED)
|
|
{
|
|
PrintStartNamedStruct(PacketContext, PcAddr);
|
|
|
|
Print_ptr(pPc, pc_common.pc_link);
|
|
Print_uchar(pPc, pc_common.pc_owner);
|
|
Print_uchar(pPc, pc_common.pc_flags);
|
|
Print_ptr(pPc, pc_common.pc_IpsecCtx);
|
|
Print_ptr(pPc, pc_br);
|
|
Print_ptr(pPc, pc_pi);
|
|
Print_ptr(pPc, pc_if);
|
|
Print_ptr(pPc, pc_hdrincl);
|
|
Print_ptr(pPc, pc_firewall);
|
|
Print_ptr(pPc, pc_firewall2);
|
|
Print_ptr(pPc, pc_iflink);
|
|
Print_uchar(pPc, pc_ipsec_flags);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("PacketContext %08lx" ENDL, PcAddr);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpIPInfo(
|
|
IPInfo *pIpi,
|
|
ULONG_PTR IpiAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX ||
|
|
verb == VERB_MED)
|
|
{
|
|
PrintStartNamedStruct(IPInfo, IpiAddr);
|
|
|
|
Print_uint(pIpi, ipi_version);
|
|
Print_uint(pIpi, ipi_hsize);
|
|
Print_PtrSymbol(pIpi, ipi_xmit);
|
|
Print_PtrSymbol(pIpi, ipi_protreg);
|
|
Print_PtrSymbol(pIpi, ipi_openrce);
|
|
Print_PtrSymbol(pIpi, ipi_closerce);
|
|
Print_PtrSymbol(pIpi, ipi_getaddrtype);
|
|
Print_PtrSymbol(pIpi, ipi_getlocalmtu);
|
|
Print_PtrSymbol(pIpi, ipi_getpinfo);
|
|
Print_PtrSymbol(pIpi, ipi_checkroute);
|
|
Print_PtrSymbol(pIpi, ipi_initopts);
|
|
Print_PtrSymbol(pIpi, ipi_updateopts);
|
|
Print_PtrSymbol(pIpi, ipi_copyopts);
|
|
Print_PtrSymbol(pIpi, ipi_freeopts);
|
|
Print_PtrSymbol(pIpi, ipi_qinfo);
|
|
Print_PtrSymbol(pIpi, ipi_setinfo);
|
|
Print_PtrSymbol(pIpi, ipi_getelist);
|
|
Print_PtrSymbol(pIpi, ipi_setmcastaddr);
|
|
Print_PtrSymbol(pIpi, ipi_invalidsrc);
|
|
Print_PtrSymbol(pIpi, ipi_isdhcpinterface);
|
|
Print_PtrSymbol(pIpi, ipi_setndisrequest);
|
|
Print_PtrSymbol(pIpi, ipi_largexmit);
|
|
Print_PtrSymbol(pIpi, ipi_absorbrtralert);
|
|
Print_PtrSymbol(pIpi, ipi_isvalidindex);
|
|
Print_PtrSymbol(pIpi, ipi_getifindexfromnte);
|
|
Print_PtrSymbol(pIpi, ipi_isrtralertpacket);
|
|
Print_PtrSymbol(pIpi, ipi_getifindexfromaddr);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("IPInfo %08lx" ENDL, IpiAddr);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpRouteCacheEntry(
|
|
RouteCacheEntry *pRce,
|
|
ULONG_PTR RceAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(RouteCacheEntry, RceAddr);
|
|
|
|
Print_ptr(pRce, rce_next);
|
|
Print_ptr(pRce, rce_rte);
|
|
Print_IPAddr(pRce, rce_dest);
|
|
Print_IPAddr(pRce, rce_src);
|
|
Print_flags(pRce, rce_flags, FlagsRCE);
|
|
Print_uchar(pRce, rce_dtype);
|
|
Print_ushort(pRce, rce_cnt1);
|
|
Print_uint(pRce, rce_usecnt);
|
|
Print_uchar(pRce, rce_context[0]);
|
|
Print_uchar(pRce, rce_context[1]);
|
|
Print_CTELock(pRce, rce_lock);
|
|
Print_uint(pRce, rce_OffloadFlags);
|
|
Print_addr(pRce, rce_TcpLargeSend, RouteCacheEntry, RceAddr);
|
|
Print_uint(pRce, rce_TcpWindowSize);
|
|
Print_uint(pRce, rce_TcpInitialRTT);
|
|
Print_uint(pRce, rce_TcpDelAckTicks);
|
|
Print_uint(pRce, rce_cnt);
|
|
Print_uint(pRce, rce_mediatype);
|
|
Print_uint(pRce, rce_mediaspeed);
|
|
Print_uint(pRce, rce_newmtu);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("RouteCacheEntry %08lx dest: ", RceAddr);
|
|
DumpIPAddr(pRce->rce_dest);
|
|
printx("src: ");
|
|
DumpIPAddr(pRce->rce_src);
|
|
printx("flags ");
|
|
DumpFlags(pRce->rce_flags, FlagsRCE);
|
|
printx(ENDL);
|
|
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpARPTableEntry(
|
|
ARPTableEntry *pAte,
|
|
ULONG_PTR AteAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(ARPTableEntry, AteAddr);
|
|
|
|
Print_ptr(pAte, ate_next);
|
|
Print_ulong(pAte, ate_valid);
|
|
Print_IPAddr(pAte, ate_dest);
|
|
Print_ptr(pAte, ate_packet);
|
|
Print_ptr(pAte, ate_rce);
|
|
Print_CTELock(pAte, ate_lock);
|
|
Print_uint(pAte, ate_useticks);
|
|
Print_uchar(pAte, ate_addrlength);
|
|
Print_enum(pAte, ate_state, AteState);
|
|
Print_ulong(pAte, ate_userarp);
|
|
Print_ptr(pAte, ate_resolveonly);
|
|
Print_addr(pAte, ate_addr, ARPTableEntry, AteAddr);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("ARPTableEntry %08lx ipaddr ", AteAddr);
|
|
DumpIPAddr(pAte->ate_dest);
|
|
printx("rce %x state: ", pAte->ate_rce);
|
|
DumpEnum(pAte->ate_state, AteState);
|
|
printx(ENDL);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpARPIPAddr(
|
|
ARPIPAddr *pAia,
|
|
ULONG_PTR AiaAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(ARPIPAddr, AiaAddr);
|
|
|
|
Print_ptr(pAia, aia_next);
|
|
Print_uint(pAia, aia_age);
|
|
Print_IPAddr(pAia, aia_addr);
|
|
Print_IPMask(pAia, aia_mask);
|
|
Print_ptr(pAia, aia_context);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("ARPIPAddr %08lx ", AiaAddr);
|
|
DumpIPAddr(pAia->aia_addr);
|
|
DumpIPAddr(pAia->aia_mask);
|
|
printx(ENDL);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpRouteTableEntry(
|
|
RouteTableEntry *pRte,
|
|
ULONG_PTR RteAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(RouteTableEntry, RteAddr);
|
|
|
|
Print_ptr(pRte, rte_next);
|
|
Print_IPAddr(pRte, rte_dest);
|
|
Print_IPMask(pRte, rte_mask);
|
|
Print_IPAddr(pRte, rte_addr);
|
|
Print_uint(pRte, rte_priority);
|
|
Print_uint(pRte, rte_metric);
|
|
Print_uint(pRte, rte_mtu);
|
|
Print_ptr(pRte, rte_if);
|
|
Print_ptr(pRte, rte_rcelist);
|
|
Print_ushort(pRte, rte_type);
|
|
Print_flags(pRte, rte_flags, FlagsRTE);
|
|
Print_uint(pRte, rte_admintype);
|
|
Print_uint(pRte, rte_proto);
|
|
Print_uint(pRte, rte_valid);
|
|
Print_uint(pRte, rte_mtuchange);
|
|
Print_ptr(pRte, rte_context);
|
|
Print_ptr(pRte, rte_arpcontext[0]);
|
|
Print_ptr(pRte, rte_arpcontext[1]);
|
|
Print_ptr(pRte, rte_todg);
|
|
Print_ptr(pRte, rte_fromdg);
|
|
Print_uint(pRte, rte_rces);
|
|
Print_ptr(pRte, rte_link);
|
|
Print_ptr(pRte, rte_nextlinkrte);
|
|
Print_uint(pRte, rte_refcnt);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("RouteTableEntry %08lx dest ", RteAddr);
|
|
|
|
DumpIPAddr(pRte->rte_dest);
|
|
printx("mask ");
|
|
DumpIPAddr(pRte->rte_mask);
|
|
printx("flags ");
|
|
DumpFlags(pRte->rte_flags, FlagsRTE);
|
|
printx(ENDL);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpLinkEntry(
|
|
LinkEntry *pLink,
|
|
ULONG_PTR LinkAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
if (verb == VERB_MAX ||
|
|
verb == VERB_MED)
|
|
{
|
|
PrintStartNamedStruct(LinkEntry, LinkAddr);
|
|
|
|
Print_ptr(pLink, link_next);
|
|
Print_IPAddr(pLink, link_NextHop);
|
|
Print_ptr(pLink, link_if);
|
|
Print_ptr(pLink, link_arpctxt);
|
|
Print_ptr(pLink, link_rte);
|
|
Print_uint(pLink, link_Action);
|
|
Print_uint(pLink, link_mtu);
|
|
Print_long(pLink, link_refcount);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("LinkEntry %08lx NextHop ", LinkAddr);
|
|
DumpIPAddr(pLink->link_NextHop);
|
|
printx("if %x rte %x" ENDL, pLink->link_if, pLink->link_rte);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpInterface(
|
|
Interface *pIf,
|
|
ULONG_PTR IfAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
uint i;
|
|
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(Interface, IfAddr);
|
|
|
|
Print_ptr(pIf, if_next);
|
|
Print_ptr(pIf, if_lcontext);
|
|
Print_PtrSymbol(pIf, if_xmit);
|
|
Print_PtrSymbol(pIf, if_transfer);
|
|
Print_PtrSymbol(pIf, if_returnpkt);
|
|
Print_PtrSymbol(pIf, if_close);
|
|
Print_PtrSymbol(pIf, if_addaddr);
|
|
Print_PtrSymbol(pIf, if_deladdr);
|
|
Print_PtrSymbol(pIf, if_invalidate);
|
|
Print_PtrSymbol(pIf, if_open);
|
|
Print_PtrSymbol(pIf, if_qinfo);
|
|
Print_PtrSymbol(pIf, if_setinfo);
|
|
Print_PtrSymbol(pIf, if_getelist);
|
|
Print_PtrSymbol(pIf, if_dondisreq);
|
|
Print_PtrSymbol(pIf, if_dowakeupptrn);
|
|
Print_PtrSymbol(pIf, if_pnpcomplete);
|
|
Print_PtrSymbol(pIf, if_setndisrequest);
|
|
Print_PtrSymbol(pIf, if_arpresolveip);
|
|
Print_PtrSymbol(pIf, if_arpflushate);
|
|
Print_PtrSymbol(pIf, if_arpflushallate);
|
|
Print_uint(pIf, if_numgws);
|
|
for (i = 0; i < MAX_DEFAULT_GWS; i++)
|
|
{
|
|
Print_IPAddr(pIf, if_gw[i]);
|
|
Print_uint(pIf, if_gwmetric[i]);
|
|
}
|
|
Print_uint(pIf, if_metric);
|
|
Print_uint(pIf, if_rtrdiscovery);
|
|
Print_ptr(pIf, if_tdpacket);
|
|
Print_uint(pIf, if_index);
|
|
Print_ULONG(pIf, if_mediatype);
|
|
Print_uchar(pIf, if_accesstype);
|
|
Print_uchar(pIf, if_conntype);
|
|
Print_uchar(pIf, if_mcastttl);
|
|
Print_uchar(pIf, if_mcastflags);
|
|
Print_uint(pIf, if_ntecount);
|
|
Print_ptr(pIf, if_nte);
|
|
Print_IPAddr(pIf, if_bcast);
|
|
Print_uint(pIf, if_mtu);
|
|
Print_uint(pIf, if_speed);
|
|
Print_flags(pIf, if_flags, FlagsIF);
|
|
Print_uint(pIf, if_addrlen);
|
|
Print_ptr(pIf, if_addr);
|
|
Print_uint(pIf, IgmpVersion);
|
|
Print_uint(pIf, IgmpVer1Timeout);
|
|
Print_uint(pIf, if_refcount);
|
|
Print_ptr(pIf, if_block);
|
|
Print_ptr(pIf, if_pnpcontext);
|
|
Print_ptr(pIf, if_tdibindhandle);
|
|
Print_uinthex(pIf, if_llipflags);
|
|
Print_NDIS_STRING(pIf, if_configname);
|
|
Print_NDIS_STRING(pIf, if_name);
|
|
Print_NDIS_STRING(pIf, if_devname);
|
|
Print_ptr(pIf, if_ipsecsniffercontext);
|
|
Print_CTELock(pIf, if_lock);
|
|
#if FFP_SUPPORT
|
|
Print_ulong(pIf, if_ffpversion);
|
|
Print_ptr(pIf, if_ffpdriver);
|
|
#endif
|
|
Print_uinthex(pIf, if_OffloadFlags);
|
|
Print_uint(pIf, if_MaxOffLoadSize);
|
|
Print_uint(pIf, if_MaxSegments);
|
|
Print_addr(pIf, if_TcpLargeSend, Interface, IfAddr);
|
|
Print_uint(pIf, if_TcpWindowSize);
|
|
Print_uint(pIf, if_TcpInitialRTT);
|
|
Print_uint(pIf, if_TcpDelAckTicks);
|
|
Print_uint(pIf, if_promiscuousmode);
|
|
Print_uint(pIf, if_GetGPCHandle);
|
|
Print_uint(pIf, if_GetTOS);
|
|
Print_uint(pIf, if_InitInProgress);
|
|
Print_ptr(pIf, if_link);
|
|
Print_PtrSymbol(pIf, if_closelink);
|
|
Print_uint(pIf, if_mediastatus);
|
|
Print_uint(pIf, if_iftype);
|
|
Print_uint(pIf, if_pnpcap);
|
|
Print_ptr(pIf, if_dampnext);
|
|
Print_int(pIf, if_damptimer)
|
|
Print_uchar(pIf, if_absorbfwdpkts);
|
|
Print_BOOLEAN(pIf, if_resetInProgress);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else if (verb == VERB_MED)
|
|
{
|
|
PrintStartNamedStruct(Interface, IfAddr);
|
|
|
|
Print_ptr(pIf, if_next);
|
|
Print_ptr(pIf, if_lcontext);
|
|
Print_uint(pIf, if_numgws);
|
|
for (i = 0; i < MAX_DEFAULT_GWS; i++)
|
|
{
|
|
Print_IPAddr(pIf, if_gw[i]);
|
|
Print_uint(pIf, if_gwmetric[i]);
|
|
}
|
|
Print_uint(pIf, if_metric);
|
|
Print_uint(pIf, if_rtrdiscovery);
|
|
Print_NDIS_STRING(pIf, if_devname);
|
|
Print_flags(pIf, if_flags, FlagsIF);
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("Interface %08lx lcontext %x nte %x ",
|
|
IfAddr, pIf->if_lcontext, pIf->if_nte);
|
|
printx("(");
|
|
DumpFlags(pIf->if_flags, FlagsIF);
|
|
printx(")");
|
|
printx(" %s", pIf->if_mediastatus ? "CONNECTED" : "DISCONNECTED");
|
|
printx(ENDL);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpIPHeader(
|
|
IPHeader *pIph,
|
|
ULONG_PTR IphAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
PrintStartNamedStruct(IPHeader, IphAddr);
|
|
|
|
Print_uchar(pIph, iph_verlen);
|
|
Print_uchar(pIph, iph_tos);
|
|
Print_ushorthton(pIph, iph_length);
|
|
Print_ushorthton(pIph, iph_id);
|
|
Print_ushorthton(pIph, iph_offset);
|
|
Print_uchar(pIph, iph_ttl);
|
|
Print_uchar(pIph, iph_protocol);
|
|
Print_ushorthton(pIph, iph_xsum);
|
|
Print_IPAddr(pIph, iph_src);
|
|
Print_IPAddr(pIph, iph_dest);
|
|
|
|
PrintEndStruct();
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpICMPHeader(
|
|
ICMPHeader *pIch,
|
|
ULONG_PTR IchAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
PrintStartNamedStruct(ICMPHeader, IchAddr);
|
|
|
|
Print_uchar(pIch, ich_type);
|
|
Print_uchar(pIch, ich_code);
|
|
Print_ushort(pIch, ich_xsum);
|
|
Print_ulong(pIch, ich_param);
|
|
|
|
PrintEndStruct();
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpARPHeader(
|
|
ARPHeader *pAh,
|
|
ULONG_PTR AhAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
PrintStartNamedStruct(ARPHeader, AhAddr);
|
|
|
|
Print_ushorthton(pAh, ah_hw);
|
|
Print_ushorthton(pAh, ah_pro);
|
|
Print_uchar(pAh, ah_hlen);
|
|
Print_uchar(pAh, ah_plen);
|
|
Print_ushorthton(pAh, ah_opcode);
|
|
Print_hwaddr(pAh, ah_shaddr);
|
|
Print_IPAddr(pAh, ah_spaddr);
|
|
Print_hwaddr(pAh, ah_dhaddr);
|
|
Print_IPAddr(pAh, ah_dpaddr);
|
|
|
|
PrintEndStruct();
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpIPOptInfo(
|
|
IPOptInfo *pIoi,
|
|
ULONG_PTR pAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
// Only support one verbosity level: max. This is only used by other
|
|
// dump routines.
|
|
|
|
PrintStartNamedStruct(IPOptInfo, pAddr);
|
|
|
|
Print_ptr(pIoi, ioi_options);
|
|
Print_IPAddr(pIoi, ioi_addr);
|
|
Print_uchar(pIoi, ioi_optlength);
|
|
Print_uchar(pIoi, ioi_ttl);
|
|
Print_uchar(pIoi, ioi_tos);
|
|
Print_uchar(pIoi, ioi_flags);
|
|
Print_uchar(pIoi, ioi_hdrincl);
|
|
Print_int(pIoi, ioi_GPCHandle);
|
|
Print_uint(pIoi, ioi_uni);
|
|
Print_uint(pIoi, ioi_TcpChksum);
|
|
Print_uint(pIoi, ioi_UdpChksum);
|
|
Print_uchar(pIoi, ioi_limitbcasts);
|
|
Print_uint(pIoi, ioi_ucastif);
|
|
Print_uint(pIoi, ioi_mcastif);
|
|
|
|
PrintEndStruct();
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
|
|
BOOL
|
|
DumpLLIPBindInfo(
|
|
LLIPBindInfo *pLip,
|
|
ULONG_PTR LipAddr,
|
|
VERB verb
|
|
)
|
|
{
|
|
uint i;
|
|
|
|
if (verb == VERB_MAX)
|
|
{
|
|
PrintStartNamedStruct(LLIPBindInfo, LipAddr);
|
|
|
|
Print_ptr(pLip, lip_context);
|
|
Print_uint(pLip, lip_mss);
|
|
Print_uint(pLip, lip_speed);
|
|
Print_uint(pLip, lip_index);
|
|
Print_uint(pLip, lip_txspace);
|
|
Print_PtrSymbol(pLip, lip_transmit);
|
|
Print_PtrSymbol(pLip, lip_transfer);
|
|
Print_PtrSymbol(pLip, lip_returnPkt);
|
|
Print_PtrSymbol(pLip, lip_close);
|
|
Print_PtrSymbol(pLip, lip_addaddr);
|
|
Print_PtrSymbol(pLip, lip_deladdr);
|
|
Print_PtrSymbol(pLip, lip_invalidate);
|
|
Print_PtrSymbol(pLip, lip_open);
|
|
Print_PtrSymbol(pLip, lip_qinfo);
|
|
Print_PtrSymbol(pLip, lip_setinfo);
|
|
Print_PtrSymbol(pLip, lip_getelist);
|
|
Print_PtrSymbol(pLip, lip_dondisreq);
|
|
Print_flags(pLip, lip_flags, FlagsLLIPBindInfo);
|
|
Print_uint(pLip, lip_OffloadFlags);
|
|
Print_uint(pLip, lip_ffpversion);
|
|
Print_ULONG_PTR(pLip, lip_ffpdriver);
|
|
Print_PtrSymbol(pLip, lip_setndisrequest);
|
|
Print_PtrSymbol(pLip, lip_dowakeupptrn);
|
|
Print_PtrSymbol(pLip, lip_pnpcomplete);
|
|
Print_PtrSymbol(pLip, lip_arpresolveip);
|
|
Print_uint(pLip, lip_MaxOffLoadSize);
|
|
Print_uint(pLip, lip_MaxSegments);
|
|
Print_PtrSymbol(pLip, lip_arpflushate);
|
|
Print_PtrSymbol(pLip, lip_arpflushallate);
|
|
Print_PtrSymbol(pLip, lip_closelink);
|
|
Print_uint(pLip, lip_pnpcap);
|
|
|
|
PrintEndStruct();
|
|
}
|
|
else
|
|
{
|
|
printx("LLIPBindInfo %08lx context %x mss %d speed %d index %" ENDL,
|
|
LipAddr, pLip->lip_context,
|
|
pLip->lip_mss, pLip->lip_speed,
|
|
pLip->lip_index);
|
|
}
|
|
|
|
return (TRUE);
|
|
}
|
|
|
|
BOOL
|
|
DumpNDIS_PACKET(
|
|
PNDIS_PACKET pPacket,
|
|
ULONG_PTR PacketAddr,
|
|
VERB Verb
|
|
)
|
|
{
|
|
|
|
PrintStartNamedStruct(NDIS_PACKET, PacketAddr);
|
|
|
|
Print_uint(pPacket, Private.PhysicalCount);
|
|
Print_uint(pPacket, Private.TotalLength);
|
|
Print_ptr(pPacket, Private.Head);
|
|
Print_ptr(pPacket, Private.Tail);
|
|
Print_ptr(pPacket, Private.Pool);
|
|
Print_uint(pPacket, Private.Count);
|
|
Print_ULONGhex(pPacket, Private.Flags);
|
|
Print_BOOLEAN(pPacket, Private.ValidCounts);
|
|
Print_ucharhex(pPacket, Private.NdisPacketFlags);
|
|
Print_USHORT(pPacket, Private.NdisPacketOobOffset);
|
|
|
|
PrintEndStruct();
|
|
return (TRUE);
|
|
}
|
|
|