Something went wrong. Try again.
Reactos
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277#ifndef _NETIODEF_#define _NETIODEF_
#pragma once
#ifdef __cplusplusextern "C" {#endif
#include "ws2def.h"#include "ws2ipdef.h"#include "mswsockdef.h"#include "mstcpip.h"#include "nldef.h"
#include "ifdef.h"
#ifndef ASSERT#define ASSERT(x) ((void)0)#define NETIODEF_DEFINED_ASSERT#endif
#ifndef NETIO_INLINE#if DBG#define NETIO_INLINE __inline#else#define NETIO_INLINE __forceinline#endif#endif
#define IS_POWER_OF_TWO(x) (((x) != 0) && (((x) & ((x) - 1)) == 0))#define IS_VALID_IPV4_MASK(x) ((x.S_un.S_addr == (ULONG)-1) || IS_POWER_OF_TWO(~RtlUlongByteSwap(x.S_un.S_addr)+1))
#ifndef BYTE_ORDER
#define _LITTLE_ENDIAN 1234#define _BIG_ENDIAN 4321#define _PDP_ENDIAN 3412
#if defined(i286) || defined(i386) || defined(_AMD64_) || defined(_IA64_)#define BYTE_ORDER _LITTLE_ENDIAN#endif
#endif /* BYTE_ORDER */
typedef UINT8 HANDLE8, *PHANDLE8;typedef UINT16 HANDLE16, *PHANDLE16;typedef UINT32 HANDLE32, *PHANDLE32;typedef UINT64 HANDLE64, *PHANDLE64;
#define MAKE_DD_DEVICE_NAME(x) (L"\\Device\\" x)#define MAKE_WIN_DEVICE_NAME(x) (L"\\\\.\\" x)
#define DL_ADDRESS_LENGTH_MAXIMUM IF_MAX_PHYS_ADDRESS_LENGTH#define DL_HEADER_LENGTH_MAXIMUM 64#define DL_ETHERNET_HEADER_LENGTH_MAXIMUM (sizeof(ETHERNET_HEADER) + sizeof(SNAP_HEADER))#define DL_TUNNEL_HEADER_LENGTH_MAXIMUM max(sizeof(IPV4_HEADER), sizeof(IPV6_HEADER))
#define EUI48_BROADCAST_INIT {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
#define SNAP_DSAP 0xaa#define SNAP_SSAP 0xaa#define SNAP_CONTROL 0x03#define SNAP_OUI 0x00
#define SNAP_TYPE_ARP ETHERNET_TYPE_ARP#define SNAP_TYPE_IPV4 ETHERNET_TYPE_IPV4#define SNAP_TYPE_IPV6 ETHERNET_TYPE_IPV6
#define ETH_LENGTH_OF_HEADER 14#define ETH_LENGTH_OF_VLAN_HEADER 4#define ETH_LENGTH_OF_SNAP_HEADER 8
#define ETHERNET_TYPE_MINIMUM 0x0600#define ETHERNET_TYPE_IPV4 0x0800#define ETHERNET_TYPE_ARP 0x0806#define ETHERNET_TYPE_IPV6 0x86dd#define ETHERNET_TYPE_802_1Q 0x8100
#define TOKENRING_ACCESSCONTROL 0x10#define TOKENRING_FRAMECONTROL 0x40
#define SOURCEROUTE_RD_MAXIMUM 8#define SOURCEROUTE_SIZE_MAXIMUM (sizeof(SOURCEROUTE_HEADER) + 2 * SOURCEROUTE_RD_MAXIMUM)
#define SOURCEROUTE_UNSPECIFIED_INIT {{sizeof(SOURCEROUTE_HEADER), TokenRingSpanningTreeExplorer}, {0}}
#define TOKENRING_MTU_DEFAULT 1500#define TOKENRING_SOURCEROUTE_INDICATOR 0x80
#define FDDI_FRAMECODE 0x57#define FDDI_MTU 4352
#define ARCNET_BROADCAST_MASK 0xff#define ARCNET_BROADCAST_VALUE 0x00#define ARCNET_PROTOCOL_ARP 0xd5#define ARCNET_PROTOCOL_IPV4 0xd4#define ARCNET_PROTOCOL_IPV6 0xc4
#define ip4_hdr _IPV4_HEADER#define ip4_ver_hlen VersionAndHeaderLength#define ip4_ver Version#define ip4_hlen HeaderLength#define ip4_tos TypeOfService#define ip4_len TotalLength#define ip4_id Identification#define ip4_flags_offset FlagsAndOffset#define ip4_flags Flags#define ip4_offset FragmentOffset#define ip4_ttl TimeToLive#define ip4_protocol Protocol#define ip4_xsum HeaderChecksum#define ip4_src SourceAddress#define ip4_dest DestinationAddress
#define IP_VER_MASK 0xF0#define IPV4_VERSION 4#define IPV4_DEFAULT_VERHLEN ((IPV4_VERSION << 4) | (sizeof(IPV4_HEADER) / sizeof(UINT32)))#define IPV4_TOS_MASK 0xFC
#define MAX_IPV4_PACKET 65535#define MAX_IPV4_PAYLOAD (MAX_IPV4_PACKET - sizeof(IPV4_HEADER))
#define MAX_IPV4_HLEN 60
#define IPV4_MINIMUM_MTU 576#define IPV4_MINIMUM_ULMTU (IPV4_MINIMUM_MTU - sizeof(IPV4_HEADER))
#define MAX_IP_OPTIONS_LENGTH ((0xF * sizeof(UINT32)) - sizeof(IPV4_HEADER))#define SIZEOF_IP_OPT_ROUTING_HEADER 3#define SIZEOF_IP_OPT_TIMESTAMP_HEADER 4#define SIZEOF_IP_OPT_SECURITY 11#define SIZEOF_IP_OPT_STREAMIDENTIFIER 4#define SIZEOF_IP_OPT_ROUTERALERT 4#define IP4_OFF_MASK 0xff1f
#define icmp4_hdr _ICMPV4_MESSAGE#define icmp4_type Header.Type#define icmp4_code Header.Code#define icmp4_cksum Header.Checksum#define icmp4_un_data32 Data32#define icmp4_un_data16 Data16#define icmp4_un_data8 Data8#define icmp4_dataun Data#define icmp4_data32 icmp4_dataun.icmp4_un_data32#define icmp4_data16 icmp4_dataun.icmp4_un_data16#define icmp4_data8 icmp4_dataun.icmp4_un_data8#define icmp4_pptr icmp4_data32[0]#define icmp4_mtu icmp4_data32[0]#define icmp4_id icmp4_data16[0]#define icmp4_seq icmp4_data16[1]#define icmp4_maxdelay icmp4_data16[0]
#define RsType RsHeader.icmp4_type#define RsCode RsHeader.icmp4_code#define RsCksum RsHeader.icmp4_cksum#define RsReserved RsHeader.icmp4_data32[0]
#define RaType RaHeader.icmp4_type#define RaCode RaHeader.icmp4_code#define RaCksum RaHeader.icmp4_cksum#define RaNumAddr RaHeader.icmp4_data8[0]#define RaAddrEntrySize RaHeader.icmp4_data8[1]#define RaAddrLifetime RaHeader.icmp4_data16[1]
#define ICMPV4_INVALID_PREFERENCE_LEVEL 0x80000000
#define icmp4_ts_type Header.icmp4_type#define icmp4_ts_code Header.icmp4_code#define icmp4_ts_cksum Header.icmp4_cksum#define icmp4_ts_id Header.icmp4_id#define icmp4_ts_seq Header.icmp4_seq#define icmp4_ts_originate OriginateTimestamp#define icmp4_ts_receive ReceiveTimestamp#define icmp4_ts_transmit TransmitTimestamp
#define IGMP_QUERY_TYPE 0x11#define IGMP_VERSION1_REPORT_TYPE 0x12#define IGMP_VERSION2_REPORT_TYPE 0x16#define IGMP_LEAVE_GROUP_TYPE 0x17#define IGMP_VERSION3_REPORT_TYPE 0x22
#define ip6_hdr _IPV6_HEADER#define ip6_flow VersionClassFlow#define ip6_plen PayloadLength#define ip6_nxt NextHeader#define ip6_hops HopLimit#define ip6_hlim HopLimit#define ip6_src SourceAddress#define ip6_dst DestinationAddress
#define IP_VER_MASK 0xF0#define IPV6_VERSION 0x60
#define IPV6_TRAFFIC_CLASS_MASK 0x0000C00F#define IPV6_ECN_MASK 0x00003000#define IPV6_FLOW_LABEL_MASK 0xFFFF0F00#define MAX_IPV6_PAYLOAD 65535#define MAX_IPV6_PACKET (MAX_IPV6_PAYLOAD + sizeof(IPV6_HEADER))
#define IPV6_ECN_SHIFT 12
#define IPV6_MINIMUM_MTU 1280#define IPV6_MINIMUM_ULMTU (IPV6_MINIMUM_MTU - sizeof(IPV6_HEADER))
#define IPV6_TRAFFIC_CLASS(VersionClassFlow) \ ((UCHAR)((((VersionClassFlow) & IPV6_TRAFFIC_CLASS_MASK) >> 12) + \ (((VersionClassFlow) & IPV6_TRAFFIC_CLASS_MASK) << 4)))
#define ip6_frag _IPV6_FRAGMENT_HEADER#define ip6f_nxt NextHeader#define ip6f_reserved Reserved#define ip6f_offlg OffsetAndFlags#define ip6f_ident Id
#define IP6F_OFF_MASK 0xf8ff#define IP6F_RESERVED_MASK 0x0600#define IP6F_MORE_FRAG 0x0100
#define EXT_LEN_UNIT 8
#define IPV6_EXTENSION_HEADER_LENGTH(Blocks) ((Blocks + 1) * EXT_LEN_UNIT)#define MAX_IPV6_EXTENSION_HEADER_LENGTH IPV6_EXTENSION_HEADER_LENGTH(0xFF)#define IPV6_EXTENSION_HEADER_BLOCKS(Length) ((Length / EXT_LEN_UNIT) - 1)#define IP_AUTHENTICATION_HEADER_LENGTH(Blocks) ((Blocks + 2) * 4)#define IP_AUTHENTICATION_HEADER_BLOCKS(Length) (((Length + sizeof(AUTHENTICATION_HEADER)) / 4) - 2)
#define IPV6_ROUTER_ALERT_LENGTH IPV6_EXTENSION_HEADER_LENGTH(0)
#define ip6_hbh _IPV6_EXTENSION_HEADER#define ip6h_nxt NextHeader#define ip6h_len Length#define ip6_dest _IPV6_EXTENSION_HEADER#define ip6d_nxt NextHeader#define ip6d_len Length
#define IP6OPT_TYPE(Type) ((Type) & 0xc0)#define IP6OPT_TYPE_SKIP 0x00#define IP6OPT_TYPE_DISCARD 0x40#define IP6OPT_TYPE_FORCEICMP 0x80#define IP6OPT_TYPE_ICMP 0xc0
#define IP6OPT_MUTABLE 0x20#define IP6OPT_ISMUTABLE(Type) (((Type) & IP6OPT_MUTABLE) != 0)
#define ip6_opt_jumbo _IPV6_OPTION_JUMBOGRAM#define ip6oj_type Header.Type#define ip6oj_len Header.DataLength#define ip6oj_jumbo_len JumbogramLength
#define ip6_opt_router _IPV6_OPTION_ROUTER_ALERT#define ip6or_type Header.Type#define ip6or_len Header.DataLength#define ip6or_value Value
#define SIZEOF_IPV6_ROUTERALERT IPV6_EXTENSION_HEADER_LENGTH(0)
#define ip6_rthdr _IPV6_ROUTING_HEADER#define ip6r_nxt NextHeader#define ip6r_len Length#define ip6r_type RoutingType#define ip6r_segleft SegmentsLeft
#define icmp6_hdr _ICMPV6_MESSAGE#define icmp6_type Header.Type#define icmp6_code Header.Code#define icmp6_cksum Header.Checksum#define icmp6_un_data32 Data32#define icmp6_un_data16 Data16#define icmp6_un_data8 Data8#define icmp6_dataun Data
#define icmp6_data32 icmp6_dataun.icmp6_un_data32#define icmp6_data16 icmp6_dataun.icmp6_un_data16#define icmp6_data8 icmp6_dataun.icmp6_un_data8#define icmp6_pptr icmp6_data32[0]#define icmp6_mtu icmp6_data32[0]#define icmp6_id icmp6_data16[0]#define icmp6_seq icmp6_data16[1]#define icmp6_maxdelay icmp6_data16[0]
#define ICMP6_INFOMSG_MASK 0x80
#define ICMP6_DST_UNREACH_NOROUTE 0#define ICMP6_DST_UNREACH_ADMIN 1#define ICMP6_DST_UNREACH_BEYONDSCOPE 2#define ICMP6_DST_UNREACH_ADDR 3#define ICMP6_DST_UNREACH_NOPORT 4
#define ICMP6_TIME_EXCEED_TRANSIT 0#define ICMP6_TIME_EXCEED_REASSEMBLY 1
#define ICMP6_PARAMPROB_HEADER 0#define ICMP6_PARAMPROB_NEXTHEADER 1#define ICMP6_PARAMPROB_OPTION 2
#define ICMPV6_ECHO_REQUEST_FLAG_REVERSE 0x1
#define nd_rs_type nd_rs_hdr.icmp6_type#define nd_rs_code nd_rs_hdr.icmp6_code#define nd_rs_cksum nd_rs_hdr.icmp6_cksum#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0]
#define nd_ra_type nd_ra_hdr.icmp6_type#define nd_ra_code nd_ra_hdr.icmp6_code#define nd_ra_cksum nd_ra_hdr.icmp6_cksum#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0]#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1]#define ND_RA_FLAG_MANAGED 0x80#define ND_RA_FLAG_OTHER 0x40#define ND_RA_FLAG_HOME_AGENT 0x20#define ND_RA_FLAG_PREFERENCE 0x18#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1]
#define nd_ns_type nd_ns_hdr.icmp6_type#define nd_ns_code nd_ns_hdr.icmp6_code#define nd_ns_cksum nd_ns_hdr.icmp6_cksum#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0]
#define nd_na_type nd_na_hdr.icmp6_type#define nd_na_code nd_na_hdr.icmp6_code#define nd_na_cksum nd_na_hdr.icmp6_cksum#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0]
#if (BYTE_ORDER == _BIG_ENDIAN)#define ND_NA_FLAG_ROUTER 0x80000000#define ND_NA_FLAG_SOLICITED 0x40000000#define ND_NA_FLAG_OVERRIDE 0x20000000#else#define ND_NA_FLAG_ROUTER 0x00000080#define ND_NA_FLAG_SOLICITED 0x00000040#define ND_NA_FLAG_OVERRIDE 0x00000020#endif /* (BYTE_ORDER == _BIG_ENDIAN) */
#define nd_rd_type nd_rd_hdr.icmp6_type#define nd_rd_code nd_rd_hdr.icmp6_code#define nd_rd_cksum nd_rd_hdr.icmp6_cksum#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0]
#define ND_OPT_PI_FLAG_ONLINK 0x80#define ND_OPT_PI_FLAG_AUTO 0x40#define ND_OPT_PI_FLAG_ROUTER_ADDR 0x20#define ND_OPT_PI_FLAG_SITE_PREFIX 0x10#define ND_OPT_PI_FLAG_ROUTE 0x01
#define ND_OPT_RI_FLAG_PREFERENCE 0x18
#define TH_MAX_LEN (0x0F << 2)#define TH_FIN 0x01#define TH_SYN 0x02#define TH_RST 0x04#define TH_PSH 0x08#define TH_ACK 0x10#define TH_URG 0x20#define TH_ECE 0x40#define TH_CWR 0x80#define TH_ALL (TH_FIN | TH_SYN | TH_RST | TH_PSH | TH_ACK | TH_URG | TH_ECE | TH_CWR)#define TH_SYN_ALL (TH_FIN | TH_SYN | TH_RST | TH_ACK)
#define TH_OPT_EOL 0x00#define TH_OPT_NOP 0x01#define TH_OPT_MSS 0x02#define TH_OPT_WS 0x03#define TH_OPT_SACK_PERMITTED 0x04#define TH_OPT_SACK 0x05#define TH_OPT_TS 0x08
#define DL_SIZEOF_TUNNEL_ADDRESS(AddressBytes) (FIELD_OFFSET(DL_TUNNEL_ADDRESS, IpAddress) + (AddressBytes))#define DL_SIZEOF_IPV4_TUNNEL_ADDRESS DL_SIZEOF_TUNNEL_ADDRESS(sizeof(IN_ADDR))#define DL_SIZEOF_IPV6_TUNNEL_ADDRESS DL_SIZEOF_TUNNEL_ADDRESS(sizeof(IN6_ADDR))
#define FL_PACKET_TYPE_FLAGS (NDIS_PACKET_TYPE_ALL_MULTICAST | NDIS_PACKET_TYPE_PROMISCUOUS)
#define mld_type IcmpHeader.Type#define mld_checksum IcmpHeader.Checksum
#ifndef _DEFINE_DL_ADDRESS_TYPE_#define _DEFINE_DL_ADDRESS_TYPE_typedef enum { DlUnicast, DlMulticast, DlBroadcast} DL_ADDRESS_TYPE, *PDL_ADDRESS_TYPE;#endif
union _DL_OUI { UINT8 Byte[3]; struct { UINT8 Group:1; UINT8 Local:1; };};typedef union _DL_OUI DL_OUI, *PDL_OUI;
union _DL_EI48 { UINT8 Byte[3];};typedef union _DL_EI48 DL_EI48, *PDL_EI48;
union _DL_EUI48 { UINT8 Byte[6]; struct { DL_OUI Oui; DL_EI48 Ei48; };};typedef union _DL_EUI48 DL_EUI48, *PDL_EUI48;
C_ASSERT(DL_ADDRESS_LENGTH_MAXIMUM >= sizeof(DL_EUI48));
extern CONST DL_EUI48 eui48_broadcast;
union _DL_EI64 { UINT8 Byte[5];};typedef union _DL_EI64 DL_EI64, *PDL_EI64;
union _DL_EUI64 { UINT8 Byte[8]; UINT64 Value; struct { DL_OUI Oui; union { DL_EI64 Ei64; struct { UINT8 Type; UINT8 Tse; DL_EI48 Ei48; }; }; };};typedef union _DL_EUI64 DL_EUI64, *PDL_EUI64;
typedef struct _SNAP_HEADER { UINT8 Dsap; UINT8 Ssap; UINT8 Control; UINT8 Oui[3]; UINT16 Type;} SNAP_HEADER, *PSNAP_HEADER;
typedef struct _ETHERNET_HEADER { DL_EUI48 Destination; DL_EUI48 Source; union { UINT16 Type; UINT16 Length; };} ETHERNET_HEADER, *PETHERNET_HEADER;
C_ASSERT(ETH_LENGTH_OF_HEADER == sizeof(ETHERNET_HEADER));C_ASSERT(ETH_LENGTH_OF_SNAP_HEADER == sizeof(SNAP_HEADER));
typedef struct _VLAN_TAG { union { UINT16 Tag; struct { UINT16 VID:12; UINT16 CFI:1; UINT16 User_Priority:3; }; }; UINT16 Type;} VLAN_TAG;
C_ASSERT(ETH_LENGTH_OF_VLAN_HEADER == sizeof(VLAN_TAG));
NETIO_INLINEDL_ADDRESS_TYPEEthernetAddressType( _In_reads_(sizeof(DL_EUI48)) CONST UCHAR *Address){ if (((PDL_EUI48) Address)->Oui.Group) { if (RtlEqualMemory(Address, &eui48_broadcast, sizeof(DL_EUI48))) { return DlBroadcast; } return DlMulticast; } else { return DlUnicast; }}
typedef struct _TOKENRING_HEADER { UINT8 AcccessControl; UINT8 FrameControl; DL_EUI48 Destination; DL_EUI48 Source;} TOKENRING_HEADER, *PTOKENRING_HEADER;
typedef struct _SOURCEROUTE_HEADER { union { struct { UINT8 Length:5; UINT8 BroadcastIndicator:3; }; UINT8 Bil; }; union { struct { UINT8 Direction:1; UINT8 LargestFrame:4; UINT8 Reserved:3; }; UINT8 Dlf; }; UINT16 Rd[0];} SOURCEROUTE_HEADER, *PSOURCEROUTE_HEADER;
typedef enum { TokenRingSpecificallyRoutedFrame = 0, TokenRingAllRoutesExplorer = 4, TokenRingSpanningTreeExplorer = 6,} TOKENRING_BROADCAST_INDICATOR, *PTOKENRING_BROADCAST_INDICATOR;
extern CONST SOURCEROUTE_HEADER sourceroute_unspecified;
C_ASSERT((sizeof(TOKENRING_HEADER) + sizeof(SNAP_HEADER) + SOURCEROUTE_SIZE_MAXIMUM) < DL_HEADER_LENGTH_MAXIMUM);
__inlineBOOLEANTokenRingGetSourceRouteIndicator( _In_ CONST UNALIGNED DL_EUI48 *Source){ return ((Source->Byte[0] & TOKENRING_SOURCEROUTE_INDICATOR) != 0);}
__inlineVOIDTokenRingSetSourceRouteIndicator( _Out_ UNALIGNED DL_EUI48 *Source){ Source->Byte[0] |= TOKENRING_SOURCEROUTE_INDICATOR;}
__inlineVOIDTokenRingResetSourceRouteIndicator( _Out_ UNALIGNED DL_EUI48 *Source){ Source->Byte[0] &= ~TOKENRING_SOURCEROUTE_INDICATOR;}
NETIO_INLINEDL_ADDRESS_TYPETokenRingAddressType( _In_ CONST UCHAR *Address){ if (TokenRingGetSourceRouteIndicator((PDL_EUI48) Address)) { if (RtlEqualMemory(Address, &eui48_broadcast, sizeof(DL_EUI48))) { return DlBroadcast; } return DlMulticast; } else { return DlUnicast; }}
typedef struct _FDDI_HEADER { UINT8 FrameCode; DL_EUI48 Destination; DL_EUI48 Source;} FDDI_HEADER, *PFDDI_HEADER;
typedef struct _ARCNET_HEADER { UINT8 Source; UINT8 Destination; UINT8 Protocol;} ARCNET_HEADER, *PARCNET_HEADER;
typedef struct _ICMP_HEADER { UINT8 Type; UINT8 Code; UINT16 Checksum;} ICMP_HEADER, *PICMP_HEADER;
typedef struct _ICMP_MESSAGE { ICMP_HEADER Header; union { UINT32 Data32[1]; UINT16 Data16[2]; UINT8 Data8[4]; } Data;} ICMP_MESSAGE, *PICMP_MESSAGE;
typedef ICMP_HEADER ICMPV6_HEADER, *PICMPV6_HEADER;typedef ICMP_MESSAGE ICMPV6_MESSAGE, *PICMPV6_MESSAGE;
typedef struct _IPV4_HEADER { union { UINT8 VersionAndHeaderLength; struct { UINT8 HeaderLength:4; UINT8 Version:4; }; }; union { UINT8 TypeOfServiceAndEcnField; struct { UINT8 EcnField:2; UINT8 TypeOfService:6; }; }; UINT16 TotalLength; UINT16 Identification; union { UINT16 FlagsAndOffset; struct { UINT16 DontUse1:5; UINT16 MoreFragments:1; UINT16 DontFragment:1; UINT16 Reserved:1; UINT16 DontUse2:8; }; }; UINT8 TimeToLive; UINT8 Protocol; UINT16 HeaderChecksum; IN_ADDR SourceAddress; IN_ADDR DestinationAddress;} IPV4_HEADER, *PIPV4_HEADER;
C_ASSERT(sizeof(IPV4_HEADER) == 20);
__inlineUCHARIp4HeaderLengthInBytes( _In_ CONST UNALIGNED IPV4_HEADER *Header){ return (Header->HeaderLength << 2);}
#if defined(_NTDDK_) || defined(_NTRTL_)__inlineUINT16Ip4FragmentOffset( _In_ CONST UNALIGNED IPV4_HEADER *Header){ return RtlUshortByteSwap(Header->FlagsAndOffset & IP4_OFF_MASK) << 3;}#endif
typedef struct _IPV4_OPTION_HEADER { union { UINT8 OptionType; struct { UINT8 OptionNumber:5; UINT8 OptionClass:2; UINT8 CopiedFlag:1; }; }; UINT8 OptionLength;} IPV4_OPTION_HEADER, *PIPV4_OPTION_HEADER;
C_ASSERT(sizeof(IPV4_OPTION_HEADER) == 2);
#if !defined(IP_EXPORT_INCLUDED)typedef enum { IP_OPT_EOL = 0x00, IP_OPT_NOP = 0x01, IP_OPT_SECURITY = 0x82, IP_OPT_LSRR = 0x83, IP_OPT_TS = 0x44, IP_OPT_RR = 0x07, IP_OPT_SSRR = 0x89, IP_OPT_SID = 0x88, IP_OPT_ROUTER_ALERT = 0x94, IP_OPT_MULTIDEST = 0x95,} IPV4_OPTION_TYPE;#elsetypedef ULONG IPV4_OPTION_TYPE;#endif
typedef struct _IPV4_TIMESTAMP_OPTION {#ifdef __cplusplus IPV4_OPTION_HEADER OptionHeader;#else IPV4_OPTION_HEADER;#endif UINT8 Pointer; union { UINT8 FlagsOverflow; struct { UINT8 Flags:4; UINT8 Overflow:4; }; };} IPV4_TIMESTAMP_OPTION, *PIPV4_TIMESTAMP_OPTION;
typedef enum { IP_OPTION_TIMESTAMP_ONLY = 0, IP_OPTION_TIMESTAMP_ADDRESS = 1, IP_OPTION_TIMESTAMP_SPECIFIC_ADDRESS = 3} IP_OPTION_TIMESTAMP_FLAGS;
typedef struct _IPV4_ROUTING_HEADER {#ifdef __cplusplus IPV4_OPTION_HEADER OptionHeader;#else IPV4_OPTION_HEADER;#endif UINT8 Pointer;} IPV4_ROUTING_HEADER, UNALIGNED *PIPV4_ROUTING_HEADER;
typedef ICMP_HEADER ICMPV4_HEADER, *PICMPV4_HEADER;typedef ICMP_MESSAGE ICMPV4_MESSAGE, *PICMPV4_MESSAGE;
typedef enum { ICMP4_UNREACH_NET = 0, ICMP4_UNREACH_HOST = 1, ICMP4_UNREACH_PROTOCOL = 2, ICMP4_UNREACH_PORT = 3, ICMP4_UNREACH_FRAG_NEEDED = 4, ICMP4_UNREACH_SOURCEROUTE_FAILED = 5, ICMP4_UNREACH_NET_UNKNOWN = 6, ICMP4_UNREACH_HOST_UNKNOWN = 7, ICMP4_UNREACH_ISOLATED = 8, ICMP4_UNREACH_NET_ADMIN = 9, ICMP4_UNREACH_HOST_ADMIN = 10, ICMP4_UNREACH_NET_TOS = 11, ICMP4_UNREACH_HOST_TOS = 12, ICMP4_UNREACH_ADMIN = 13,} ICMP4_UNREACH_CODE, *PICMP4_UNREACH_CODE;
typedef enum { ICMP4_TIME_EXCEED_TRANSIT = 0, ICMP4_TIME_EXCEED_REASSEMBLY = 1,} ICMP4_TIME_EXCEED_CODE, *PICMP4_TIME_EXCEED_CODE;
typedef struct _ICMPV4_ROUTER_SOLICIT { ICMPV4_MESSAGE RsHeader;} ICMPV4_ROUTER_SOLICIT, *PICMPV4_ROUTER_SOLICIT;
typedef struct _ICMPV4_ROUTER_ADVERT_HEADER { ICMPV4_MESSAGE RaHeader;} ICMPV4_ROUTER_ADVERT_HEADER, *PICMPV4_ROUTER_ADVERT_HEADER;
typedef struct _ICMPV4_ROUTER_ADVERT_ENTRY { IN_ADDR RouterAdvertAddr; LONG PreferenceLevel;} ICMPV4_ROUTER_ADVERT_ENTRY, *PICMPV4_ROUTER_ADVERT_ENTRY;
typedef struct _ICMPV4_TIMESTAMP_MESSAGE { ICMPV4_MESSAGE Header; UINT32 OriginateTimestamp; UINT32 ReceiveTimestamp; UINT32 TransmitTimestamp;} ICMPV4_TIMESTAMP_MESSAGE, *PICMPV4_TIMESTAMP_MESSAGE;
typedef struct _ICMPV4_ADDRESS_MASK_MESSAGE { ICMPV4_MESSAGE Header; UINT32 AddressMask;} ICMPV4_ADDRESS_MASK_MESSAGE, *PICMPV4_ADDRESS_MASK_MESSAGE;
typedef struct _ARP_HEADER { USHORT HardwareAddressSpace; USHORT ProtocolAddressSpace; UCHAR HardwareAddressLength; UCHAR ProtocolAddressLength; USHORT Opcode; UCHAR SenderHardwareAddress[0];} ARP_HEADER, *PARP_HEADER;
typedef enum { ARP_REQUEST = 1, ARP_RESPONSE = 2} ARP_OPCODE;
typedef enum { ARP_HW_ENET = 1, ARP_HW_802 = 6} ARP_HARDWARE_TYPE;
typedef struct _IGMP_HEADER { union { struct { UINT8 Type:4; UINT8 Version:4; }; UINT8 VersionType; }; union { UINT8 Reserved; UINT8 MaxRespTime; UINT8 Code; }; UINT16 Checksum; IN_ADDR MulticastAddress;} IGMP_HEADER, *PIGMP_HEADER;
typedef enum { IGMP_MAX_RESP_CODE_TYPE_NORMAL = 0, IGMP_MAX_RESP_CODE_TYPE_FLOAT} IGMP_MAX_RESP_CODE_TYPE;
typedef struct _IGMPV3_QUERY_HEADER { UINT8 Type; union { UINT8 MaxRespCode; struct { UINT8 MaxRespCodeMantissa:4; UINT8 MaxRespCodeExponent:3; UINT8 MaxRespCodeType:1; }; }; UINT16 Checksum; IN_ADDR MulticastAddress; UINT8 QuerierRobustnessVariable:3; UINT8 SuppressRouterSideProcessing:1; UINT8 Reserved:4; union { UINT8 QueriersQueryInterfaceCode; struct { UINT8 QQCMantissa:4; UINT8 QQCExponent:3; UINT8 QQCType:1; }; }; UINT16 SourceCount;} IGMPV3_QUERY_HEADER, *PIGMPV3_QUERY_HEADER;
typedef struct _IGMPV3_REPORT_RECORD_HEADER { UINT8 Type; UINT8 AuxillaryDataLength; UINT16 SourceCount; IN_ADDR MulticastAddress;} IGMPV3_REPORT_RECORD_HEADER, *PIGMPV3_REPORT_RECORD_HEADER;
typedef struct _IGMPV3_REPORT_HEADER_ { UINT8 Type; UINT8 Reserved; UINT16 Checksum; UINT16 Reserved2; UINT16 RecordCount;} IGMPV3_REPORT_HEADER, *PIGMPV3_REPORT_HEADER;
typedef struct _IPV6_HEADER { UINT32 VersionClassFlow; UINT16 PayloadLength; UINT8 NextHeader; UINT8 HopLimit; IN6_ADDR SourceAddress; IN6_ADDR DestinationAddress;} IPV6_HEADER, *PIPV6_HEADER;
typedef struct _IPV6_FRAGMENT_HEADER { UINT8 NextHeader; UINT8 Reserved; union { struct { UINT16 DontUse1:8; UINT16 MoreFragments:1; UINT16 ReservedBits:2; UINT16 DontUse2:5; }; UINT16 OffsetAndFlags; }; UINT32 Id;} IPV6_FRAGMENT_HEADER, *PIPV6_FRAGMENT_HEADER;
C_ASSERT(sizeof(IPV6_FRAGMENT_HEADER) == 8);
#if defined(_NTDDK_) || defined(_NTRTL_)__inlineUINT16Ip6FragmentOffset( _In_ CONST UNALIGNED IPV6_FRAGMENT_HEADER *Header){ return RtlUshortByteSwap(Header->OffsetAndFlags & IP6F_OFF_MASK);}#endif
typedef struct _IPV6_EXTENSION_HEADER { UINT8 NextHeader; UINT8 Length;} IPV6_EXTENSION_HEADER, *PIPV6_EXTENSION_HEADER;
typedef struct _IPV6_OPTION_HEADER { UINT8 Type; UINT8 DataLength;} IPV6_OPTION_HEADER, *PIPV6_OPTION_HEADER;
typedef enum { IP6OPT_PAD1 = 0x00, IP6OPT_PADN = 0x01, IP6OPT_TUNNEL_LIMIT = 0x04, IP6OPT_ROUTER_ALERT = 0x05, IP6OPT_JUMBO = 0xc2, IP6OPT_NSAP_ADDR = 0xc3,} IPV6_OPTION_TYPE, *PIPV6_OPTION_TYPE;
typedef struct _IPV6_OPTION_JUMBOGRAM { IPV6_OPTION_HEADER Header; UINT8 JumbogramLength[4];} IPV6_OPTION_JUMBOGRAM, *PIPV6_OPTION_JUMBOGRAM;
typedef struct _IPV6_OPTION_ROUTER_ALERT { IPV6_OPTION_HEADER Header; UINT8 Value[2];} IPV6_OPTION_ROUTER_ALERT, *PIPV6_OPTION_ROUTER_ALERT;
typedef _Struct_size_bytes_(_Inexpressible_(Length)) struct _IPV6_ROUTING_HEADER { UCHAR NextHeader; UCHAR Length; UCHAR RoutingType; UCHAR SegmentsLeft; UCHAR Reserved[4];} IPV6_ROUTING_HEADER, *PIPV6_ROUTING_HEADER;
typedef struct nd_router_solicit { ICMPV6_MESSAGE nd_rs_hdr;} ND_ROUTER_SOLICIT_HEADER, *PND_ROUTER_SOLICIT_HEADER;
typedef struct nd_router_advert { ICMPV6_MESSAGE nd_ra_hdr; UINT32 nd_ra_reachable; UINT32 nd_ra_retransmit;} ND_ROUTER_ADVERT_HEADER, *PND_ROUTER_ADVERT_HEADER;
typedef union _IPV6_ROUTER_ADVERTISEMENT_FLAGS { struct { UINT8 Reserved:3; UINT8 Preference:2; UINT8 HomeAgent:1; UINT8 OtherStatefulConfiguration:1; UINT8 ManagedAddressConfiguration:1; }; UINT8 Value;} IPV6_ROUTER_ADVERTISEMENT_FLAGS, *PIPV6_ROUTER_ADVERTISEMENT_FLAGS;
typedef struct nd_neighbor_solicit { ICMPV6_MESSAGE nd_ns_hdr; IN6_ADDR nd_ns_target;} ND_NEIGHBOR_SOLICIT_HEADER, *PND_NEIGHBOR_SOLICIT_HEADER;
typedef struct nd_neighbor_advert { ICMPV6_MESSAGE nd_na_hdr; IN6_ADDR nd_na_target;} ND_NEIGHBOR_ADVERT_HEADER, *PND_NEIGHBOR_ADVERT_HEADER;
typedef union _IPV6_NEIGHBOR_ADVERTISEMENT_FLAGS { struct { UINT8 Reserved1:5; UINT8 Override:1; UINT8 Solicited:1; UINT8 Router:1; UINT8 Reserved2[3]; }; UINT32 Value;} IPV6_NEIGHBOR_ADVERTISEMENT_FLAGS, *PIPV6_NEIGHBOR_ADVERTISEMENT_FLAGS;
typedef struct nd_redirect { ICMPV6_MESSAGE nd_rd_hdr; IN6_ADDR nd_rd_target; IN6_ADDR nd_rd_dst;} ND_REDIRECT_HEADER, *PND_REDIRECT_HEADER;
typedef struct nd_opt_hdr { UINT8 nd_opt_type; UINT8 nd_opt_len;} ND_OPTION_HDR, *PND_OPTION_HDR;
typedef enum { ND_OPT_SOURCE_LINKADDR = 1, ND_OPT_TARGET_LINKADDR = 2, ND_OPT_PREFIX_INFORMATION = 3, ND_OPT_REDIRECTED_HEADER = 4, ND_OPT_MTU = 5, ND_OPT_NBMA_SHORTCUT_LIMIT = 6, ND_OPT_ADVERTISEMENT_INTERVAL = 7, ND_OPT_HOME_AGENT_INFORMATION = 8, ND_OPT_SOURCE_ADDR_LIST = 9, ND_OPT_TARGET_ADDR_LIST = 10, ND_OPT_ROUTE_INFO = 24,} ND_OPTION_TYPE, *PND_OPTION_TYPE;
typedef struct nd_opt_prefix_info { UINT8 nd_opt_pi_type; UINT8 nd_opt_pi_len; UINT8 nd_opt_pi_prefix_len; union { UINT8 nd_opt_pi_flags_reserved; struct { UINT8 Route : 1; // Least significant bit. UINT8 Reserved1 : 3; UINT8 SitePrefix : 1; UINT8 RouterAddress : 1; UINT8 Autonomous : 1; UINT8 OnLink : 1; } Flags; }; UINT32 nd_opt_pi_valid_time; UINT32 nd_opt_pi_preferred_time; union { UINT32 nd_opt_pi_reserved2; struct { UINT8 nd_opt_pi_reserved3[3]; UINT8 nd_opt_pi_site_prefix_len; }; }; IN6_ADDR nd_opt_pi_prefix;} ND_OPTION_PREFIX_INFO, *PND_OPTION_PREFIX_INFO;
typedef struct nd_opt_rd_hdr { UINT8 nd_opt_rh_type; UINT8 nd_opt_rh_len; UINT16 nd_opt_rh_reserved1; UINT32 nd_opt_rh_reserved2;} ND_OPTION_RD_HDR, *PND_OPTION_RD_HDR;
typedef struct nd_opt_mtu { UINT8 nd_opt_mtu_type; UINT8 nd_opt_mtu_len; UINT16 nd_opt_mtu_reserved; UINT32 nd_opt_mtu_mtu;} ND_OPTION_MTU, *PND_OPTION_MTU;
typedef struct nd_opt_route_info { UINT8 nd_opt_ri_type; UINT8 nd_opt_ri_len; UINT8 nd_opt_ri_prefix_len; union { UINT8 nd_opt_ri_flags_reserved; struct { UINT8 Reserved:3; UINT8 Preference:2; } Flags; }; UINT32 nd_opt_ri_route_lifetime; IN6_ADDR nd_opt_ri_prefix;} ND_OPTION_ROUTE_INFO, *PND_OPTION_ROUTE_INFO;
typedef struct _MLD_HEADER { ICMPV6_HEADER IcmpHeader; UINT16 MaxRespTime; UINT16 Reserved; IN6_ADDR MulticastAddress;} MLD_HEADER, *PMLD_HEADER;
typedef enum { MLD_MAX_RESP_CODE_TYPE_NORMAL = 0, MLD_MAX_RESP_CODE_TYPE_FLOAT} MLD_MAX_RESP_CODE_TYPE;
typedef struct _MLDV2_QUERY_HEADER { ICMPV6_HEADER IcmpHeader; union { UINT16 MaxRespCode; struct { UINT16 MaxRespCodeMantissaHi:4; UINT16 MaxRespCodeExponent:3; UINT16 MaxRespCodeType:1; UINT16 MaxRespCodeMantissaLo:8; }; }; UINT16 Reserved; IN6_ADDR MulticastAddress; UINT8 QuerierRobustnessVariable:3; UINT8 SuppressRouterSideProcessing:1; UINT8 QueryReserved:4; union { UINT8 QueriersQueryInterfaceCode; struct { UINT8 QQCMantissa:4; UINT8 QQCExponent:3; UINT8 QQCType:1; }; }; UINT16 SourceCount;} MLDV2_QUERY_HEADER, *PMLDV2_QUERY_HEADER;
typedef struct _MLDV2_REPORT_RECORD_HEADER { UINT8 Type; UINT8 AuxillaryDataLength; UINT16 SourceCount; IN6_ADDR MulticastAddress;} MLDV2_REPORT_RECORD_HEADER, *PMLDV2_REPORT_RECORD_HEADER;
typedef struct _MLDV2_REPORT_HEADER { ICMPV6_HEADER IcmpHeader; UINT16 Reserved; UINT16 RecordCount;} MLDV2_REPORT_HEADER, *PMLDV2_REPORT_HEADER;
typedef UINT32 SEQ_NUM, *PSEQ_NUM;
#pragma pack(push, 1)
typedef struct tcp_hdr { UINT16 th_sport; UINT16 th_dport; SEQ_NUM th_seq; SEQ_NUM th_ack; UINT8 th_x2:4; UINT8 th_len:4; UINT8 th_flags; UINT16 th_win; UINT16 th_sum; UINT16 th_urp;} TCP_HDR;#if NDIS_RECEIVE_UNALIGNEDtypedef TCP_HDR UNALIGNED *PTCP_HDR;#elsetypedef TCP_HDR *PTCP_HDR;#endif
typedef struct tcp_opt_mss { UINT8 Kind; UINT8 Length; UINT16 Mss;} TCP_OPT_MSS;
typedef struct tcp_opt_ws { UINT8 Kind; UINT8 Length; UINT8 ShiftCnt;} TCP_OPT_WS;
typedef struct tcp_opt_sack_permitted { UINT8 Kind; UINT8 Length;} TCP_OPT_SACK_PERMITTED;
typedef struct tcp_opt_sack { UINT8 Kind; UINT8 Length; struct tcp_opt_sack_block { SEQ_NUM Left; SEQ_NUM Right; } Block[0];} TCP_OPT_SACK;
typedef struct tcp_opt_ts { UINT8 Kind; UINT8 Length; UINT32 Val; UINT32 EcR;} TCP_OPT_TS;
typedef struct tcp_opt_unknown { UINT8 Kind; UINT8 Length;} TCP_OPT_UNKNOWN;
#pragma pack(pop)
typedef struct DL_TUNNEL_ADDRESS { COMPARTMENT_ID CompartmentId; SCOPE_ID ScopeId; UCHAR IpAddress[0];} DL_TUNNEL_ADDRESS, *PDL_TUNNEL_ADDRESS;
C_ASSERT(DL_ADDRESS_LENGTH_MAXIMUM >= DL_SIZEOF_IPV4_TUNNEL_ADDRESS);C_ASSERT(DL_ADDRESS_LENGTH_MAXIMUM >= DL_SIZEOF_IPV6_TUNNEL_ADDRESS);
typedef enum _TUNNEL_SUB_TYPE { TUNNEL_SUB_TYPE_NONE = 0, TUNNEL_SUB_TYPE_CP = 1, TUNNEL_SUB_TYPE_IPTLS = 2} TUNNEL_SUB_TYPE, *PTUNNEL_SUB_TYPE;
#pragma pack(push, 1)
typedef struct DL_TEREDO_ADDRESS { UINT8 Reserved[6]; union { DL_EUI64 Eui64; struct { USHORT Flags; USHORT MappedPort; IN_ADDR MappedAddress; }; };} DL_TEREDO_ADDRESS, *PDL_TEREDO_ADDRESS;
typedef struct _IPTLS_METADATA { ULONGLONG SequenceNumber;} IPTLS_METADATA,*PIPTLS_METADATA;
#pragma pack(pop)
C_ASSERT(DL_ADDRESS_LENGTH_MAXIMUM >= sizeof(DL_TEREDO_ADDRESS));
typedef enum _NPI_MODULEID_TYPE { MIT_GUID = 1, MIT_IF_LUID,} NPI_MODULEID_TYPE;
typedef struct _NPI_MODULEID { USHORT Length; NPI_MODULEID_TYPE Type;#ifdef __midl [switch_type(NPI_MODULEID_TYPE), switch_is(Type)]#endif union {#ifdef __midl [case(MIT_GUID)]#endif GUID Guid;#ifdef __midl [case(MIT_IF_LUID)]#endif LUID IfLuid;#ifdef __midl [default];#endif };} NPI_MODULEID;typedef CONST NPI_MODULEID *PNPI_MODULEID;
#if !defined(__midl)__inlineBOOLEANNmrIsEqualNpiModuleId( _In_ PNPI_MODULEID ModuleId1, _In_ PNPI_MODULEID ModuleId2){ if (ModuleId1->Type == ModuleId2->Type) { if (ModuleId1->Type == MIT_GUID) {#ifdef __cplusplus return !!InlineIsEqualGUID(ModuleId1->Guid, ModuleId2->Guid);#else return (BOOLEAN)InlineIsEqualGUID(&ModuleId1->Guid, &ModuleId2->Guid);#endif } else if (ModuleId1->Type == MIT_IF_LUID) { return (BOOLEAN)RtlEqualMemory(&ModuleId1->IfLuid, &ModuleId2->IfLuid, sizeof(LUID)); } } return FALSE;}#endif
typedef GUID NPIID;typedef CONST NPIID *PNPIID;
extern CONST NPI_MODULEID NPI_MS_NMR_MODULEID;extern CONST NPIID NPI_FRAMING_LAYER_ID;extern CONST NPI_MODULEID NPI_MS_TUN_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL48_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL68_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL4L_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL6L_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL4T_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL6T_MODULEID;extern CONST NPI_MODULEID NPI_MS_WANARPV4_MODULEID;extern CONST NPI_MODULEID NPI_MS_WANARPV6_MODULEID;extern CONST NPI_MODULEID NPI_MS_FL_WANARP_MODULEID;extern CONST NPI_MODULEID NPI_MS_NDIS_MODULEID;extern CONST NPIID NPI_NETWORK_LAYER_ID;extern CONST NPI_MODULEID NPI_MS_IPV6_MODULEID;extern CONST NPI_MODULEID NPI_MS_IPV4_MODULEID;
#ifdef NETIODEF_DEFINED_ASSERT#undef ASSERT#endif
#ifdef __cplusplus}#endif
#endif /* _NETIODEF_ */