NalTypes.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:37k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //=============================================================================
  2. //  Microsoft (R) Bloodhound. Copyright (C) 1991-1999.
  3. //
  4. //  MODULE: naltypes.h
  5. //
  6. //  This source file contains defintions for the Network Abstraction Layer (NAL).
  7. //
  8. //  NOTE: Do not make changes to this file unless you mahe changes to the
  9. //        NDIS 2.0 driver header files. There are masm equivalents to change.
  10. //=============================================================================
  11. #include "buffer.h"                             //... Include buffer definitions.
  12. #include "bherr.h"                              //... Bloodhound error codes.
  13. #include "neterr.h"                             //... Network Topology error codes
  14. #include "queue.h"                              //... Queuing functions.
  15. #if !defined(_NALTYPES_)
  16. #define _NALTYPES_
  17. #pragma pack(1)
  18. //=============================================================================
  19. //  NETWORK_MESSAGE_TRIGGER_COMPLETE:
  20. //
  21. //  param1  =  Trigger structure.
  22. //  param2  =  Nothing.
  23. //=============================================================================
  24. #define NETWORK_MESSAGE_TRIGGER_COMPLETE        0
  25. //=============================================================================
  26. //  NETWORK_MESSAGE_TRANSMIT_COMPLETE:
  27. //
  28. //  param1  =  Transmit statistics.
  29. //  param2  =  Packet queue.
  30. //=============================================================================
  31. #define NETWORK_MESSAGE_TRANSMIT_COMPLETE       1
  32. //=============================================================================
  33. //  NETWORK_MESSAGE_RESET_STATE:
  34. //
  35. //  param1  =  RESET_COMPLETE     reset, current net handle now invalid
  36. //             RESET_OPEN         reset, current net handle still valid
  37. //  param2  =  Packet queue.
  38. //=============================================================================
  39. #define NETWORK_MESSAGE_RESET_STATE             2
  40. #define RESET_COMPLETE                          0
  41. #define RESET_OPEN                              1
  42. //=============================================================================
  43. //  NETWORK_MESSAGE_BH_ERROR
  44. //
  45. //  param1  =  BHERR ERROR CODE 
  46. //  param2  =  LPSTR Description (optional pointer to description of error)
  47. //=============================================================================
  48. #define NETWORK_MESSAGE_BH_ERROR                3
  49. //=============================================================================
  50. //  NETWORK_MESSAGE_NETWORK_ERROR
  51. //
  52. //  param1  =  MacType (EtherNet, TokenRing, FDDI, etc.)
  53. //  param2  =  NETERR_ error code (specific to topology)
  54. //=============================================================================
  55. #define NETWORK_MESSAGE_NETWORK_ERROR           4
  56. //=============================================================================
  57. //  The network handle.
  58. //=============================================================================
  59. #ifndef MAKE_IDENTIFIER
  60. #define MAKE_IDENTIFIER(a, b, c, d)     ((DWORD) MAKELONG(MAKEWORD(a, b), MAKEWORD(c, d)))
  61. #endif
  62. typedef struct _NETWORK         *HNETWORK;
  63. #define HANDLE_TYPE_NETWORK     MAKE_IDENTIFIER('N', 'E', 'T', '$')
  64. //=============================================================================
  65. //  NETWORKSTATE data structure.
  66. //=============================================================================
  67. typedef struct _NETWORKSTATUS
  68. {
  69.     DWORD       State;                                      //... Current state.
  70.     DWORD       Flags;                                      //... Current flags.
  71.     DWORD       TriggerAction;                              //... Trigger action.
  72.     DWORD       TriggerOpcode;                              //... Trigger opcode.
  73.     DWORD       TriggerState;                               //... Trigger state.
  74.     DWORD       BufferSize;                                 //... Capture buffer size.
  75. } NETWORKSTATUS;
  76. typedef NETWORKSTATUS *LPNETWORKSTATUS;
  77. #define NETWORKSTATUS_SIZE   sizeof(NETWORKSTATUS)
  78. #define NETWORKSTATUS_STATE_VOID                0           //... Nothing state.
  79. #define NETWORKSTATUS_STATE_INIT                1           //... Initial state.
  80. #define NETWORKSTATUS_STATE_READY               2           //... Ready state.
  81. #define NETWORKSTATUS_STATE_CAPTURING           3           //... Capturing state.
  82. #define NETWORKSTATUS_STATE_PAUSED              4           //... Paused state.
  83. #define NETWORKSTATUS_FLAGS_TRIGGER_PENDING     0x0001      //... Trigger pending.
  84. //=============================================================================
  85. //  General constants.
  86. //=============================================================================
  87. #define MAC_TYPE_UNKNOWN                        0           //... not supported
  88. #define MAC_TYPE_ETHERNET                       1           //... ethernet and 802.3
  89. #define MAC_TYPE_TOKENRING                      2           //... tokenring (802.5)
  90. #define MAC_TYPE_FDDI                           3           //... fddi.
  91. #define MACHINE_NAME_LENGTH                     16
  92. #define USER_NAME_LENGTH                        32
  93. #define ADAPTER_COMMENT_LENGTH                  32
  94. #define CLOSE_FLAGS_CLOSE                       0x0000
  95. #define CLOSE_FLAGS_SUSPEND                     0x0001
  96. //=============================================================================
  97. //  NAL error codes.
  98. //=============================================================================
  99. #define NAL_SUCCESS                          BHERR_SUCCESS
  100. #define NAL_INVALID_NETWORK_ID               BHERR_INVALID_NETWORK_ID
  101. #define NAL_INVALID_HNETCONTEXT              BHERR_INVALID_HNETWORK
  102. #define NAL_OUT_OF_MEMORY                    BHERR_OUT_OF_MEMORY
  103. #define NAL_NETWORK_BUSY                     BHERR_NETWORK_BUSY
  104. #define NAL_INVALID_HBUFFER                  BHERR_INVALID_HBUFFER
  105. #define NAL_INVALID_PACKET_LENGTH            BHERR_INVALID_PACKET_LENGTH
  106. #define NAL_TRANSMIT_ERROR                   BHERR_TRANSMIT_ERROR
  107. #define NAL_CAPTURE_PAUSED                   BHERR_CAPTURE_PAUSED
  108. #define NAL_CAPTURE_NOT_PAUSED               BHERR_CAPTURE_NOT_PAUSED
  109. #define NAL_CAPTURE_STARTED                  BHERR_CAPTURING
  110. #define NAL_CAPTURE_NOT_STARTED              BHERR_NOT_CAPTURING
  111. #define NAL_MSDOS_DRIVER_NOT_LOADED          BHERR_MSDOS_DRIVER_NOT_LOADED
  112. #define NAL_WINDOWS_DRIVER_NOT_LOADED        BHERR_WINDOWS_DRIVER_NOT_LOADED
  113. #define NAL_MSDOS_DRIVER_INIT_FAILURE        BHERR_MSDOS_DRIVER_INIT_FAILURE
  114. #define NAL_WINDOWS_DRIVER_INIT_FAILURE      BHERR_WINDOWS_DRIVER_INIT_FAILURE
  115. #define NAL_PROMISCUOUS_MODE_NOT_SUPPORTED   BHERR_PROMISCUOUS_MODE_NOT_SUPPORTED
  116. #define NAL_MAC_DRIVER_OPEN_FAILURE          BHERR_MAC_DRIVER_OPEN_FAILURE
  117. #define NAL_PENDING                          BHERR_PENDING
  118. #define NAL_INTERNAL_EXCEPTION               BHERR_INTERNAL_EXCEPTION
  119. //=============================================================================
  120. //  Trigger codes.
  121. //=============================================================================
  122. #define TRIGGER_OFF                                     0
  123. #define TRIGGER_ON_PATTERN_MATCH                        1
  124. #define TRIGGER_ON_BUFFER_CONTENT                       2
  125. #define TRIGGER_ON_PATTERN_MATCH_THEN_BUFFER_CONTENT    3
  126. #define TRIGGER_ON_BUFFER_CONTENT_THEN_PATTERN_MATCH    4
  127. #define TRIGGER_STATE_NOTHING                           0
  128. #define TRIGGER_STATE_STOP_CAPTURE                      1
  129. #define TRIGGER_STATE_PAUSE_CAPTURE                     2
  130. #define TRIGGER_ACTION_NOTIFY                           0
  131. #define TRIGGER_ACTION_EXECUTE_COMMAND                  1
  132. //=============================================================================
  133. //  Handle defintions.
  134. //=============================================================================
  135. typedef LPVOID HNETCONTEXT;
  136. //=============================================================================
  137. //  Transmit statistics structure.
  138. //=============================================================================
  139. typedef struct _TRANSMITSTATS
  140. {
  141.     DWORD       TotalFramesSent;
  142.     DWORD       TotalBytesSent;
  143.     DWORD       TotalTransmitErrors;
  144. } TRANSMITSTATS;
  145. typedef TRANSMITSTATS *LPTRANSMITSTATS;
  146. #define TRANSMITSTATS_SIZE   sizeof(TRANSMITSTATS)
  147. //=============================================================================
  148. //  Statistics structure.
  149. //=============================================================================
  150. typedef struct _STATISTICS
  151. {
  152.     //=========================================================================
  153.     //  Statistics kept by BH driver.
  154.     //=========================================================================
  155.     DWORD           TimeElapsed;
  156.     //...           Buffered statistics
  157.     DWORD           TotalFramesCaptured;
  158.     DWORD           TotalBytesCaptured;
  159.     //...           Filtered statistics
  160.     DWORD           TotalFramesFiltered;
  161.     DWORD           TotalBytesFiltered;
  162.     //...           Overall statistics.
  163.     DWORD           TotalFramesSeen;
  164.     DWORD           TotalBytesSeen;
  165.     DWORD           TotalMulticastsReceived;
  166.     DWORD           TotalBroadcastsReceived;
  167.     DWORD           TotalFramesDropped;
  168.     DWORD           TotalFramesDroppedFromBuffer;
  169.     //=========================================================================
  170.     //  Statistics kept by MAC driver.
  171.     //=========================================================================
  172.     DWORD           MacFramesReceived;
  173.     DWORD           MacCRCErrors;
  174.     union
  175.     {
  176.         DWORD           MacBytesReceived;
  177.         LARGE_INTEGER   MacBytesReceivedEx;
  178.     };
  179.     DWORD           MacFramesDropped_NoBuffers;
  180.     DWORD           MacMulticastsReceived;
  181.     DWORD           MacBroadcastsReceived;
  182.     DWORD           MacFramesDropped_HwError;
  183. } STATISTICS;
  184. typedef STATISTICS *LPSTATISTICS;
  185. #define STATISTICS_SIZE   sizeof(STATISTICS)
  186. //=============================================================================
  187. //  Protocol statistics structure.
  188. //=============================================================================
  189. typedef struct _PROTOCOLSTAT
  190. {
  191.     DWORD       ProtocolID;
  192.     DWORD       ProtocolFramesCaptured;
  193.     DWORD       ProtocolBytesCaptured;
  194. } PROTOCOLSTAT;
  195. typedef PROTOCOLSTAT *LPPROTOCOLSTAT;
  196. #define PROTOCOLSTAT_SIZE   sizeof(PROTOCOLSTAT)
  197. typedef struct _PROTOCOL_STATISTICS_TABLE
  198. {
  199.     DWORD           nProtocols;
  200.     LPPROTOCOLSTAT  ProtocolStatistic;
  201. } PROTOCOL_STATISTICS_TABLE;
  202. typedef PROTOCOL_STATISTICS_TABLE *LPPROTOCOL_STATISTICS_TABLE;
  203. #define PROTOCOL_STATISTIC_TABLE_SIZE   sizeof(PROTOCOL_STATISTICS_TABLE)
  204. //=============================================================================
  205. //  Packet data structure.
  206. //=============================================================================
  207. typedef struct _PACKET *LPPACKET;
  208. typedef struct _PACKET
  209. {
  210.     LPBYTE      Frame;                      //... Pointer to entire MAC frame.
  211.     LPVOID      FrameMdl;                   //... Driver-level frame pointer.
  212.     WORD FrameSize;     //... Length of frame.
  213.     WORD ReferenceCount;      //... Number of frame references (lock count).
  214.     DWORD       TimeStamp;                  //... Timestamp of frame.
  215. } PACKET;
  216. #define PACKET_SIZE  sizeof(PACKET)
  217. //=============================================================================
  218. //  StatFrame type.
  219. //=============================================================================
  220. typedef struct _FRAMEHDR
  221. {
  222.     BYTE    SrcAddress[6];
  223.     BYTE    DstAddress[6];
  224.     WORD    Length;
  225.     BYTE    DSAP;
  226.     BYTE    SSAP;
  227.     BYTE    Control;
  228.     BYTE    ProtocolID[3];
  229.     WORD    EtherType;
  230. } FRAMEHDR;
  231. typedef struct _TRFRAMEHDR
  232. {
  233.     BYTE    AC;
  234.     BYTE    FC;
  235.     BYTE    SrcAddress[6];
  236.     BYTE    DstAddress[6];
  237.     BYTE    DSAP;
  238.     BYTE    SSAP;
  239.     BYTE    Control;
  240.     BYTE    ProtocolID[3];
  241.     WORD    EtherType;
  242. } TRFRAMEHDR;
  243. #define DEFAULT_AC          0x00
  244. #define DEFAULT_FC          0x40
  245. #define DEFAULT_SAP         0xAA
  246. #define DEFAULT_CONTROL     0x03
  247. #define DEFAULT_ETHERTYPE   0x8419
  248. typedef struct _FDDIFRAMEHDR
  249. {
  250.     BYTE    FC;
  251.     BYTE    SrcAddress[6];
  252.     BYTE    DstAddress[6];
  253.     BYTE    DSAP;
  254.     BYTE    SSAP;
  255.     BYTE    Control;
  256.     BYTE    ProtocolID[3];
  257.     WORD    EtherType;
  258. } FDDIFRAMEHDR;
  259. #define DEFAULT_FDDIFC      0x10
  260. typedef struct _FDDISTATFRAME
  261. {
  262.     DWORD       TimeStamp;          //... Relative time in milliseconds.
  263.     WORD        FrameLength;        //... MAC frame length.
  264.     WORD        nBytesAvail;        //... Actual frame length copied.
  265.     FDDIFRAMEHDR  FrameHeader;
  266.     BYTE        FrameID[4];         //... "$MST"
  267.     DWORD       Flags;              //... Flags
  268.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  269.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  270.     DWORD       StatsVersion;
  271.     STATISTICS  Statistics;
  272. } FDDISTATFRAME;
  273. typedef FDDISTATFRAME *LPFDDISTATFRAME;
  274. typedef FDDISTATFRAME UNALIGNED *ULPFDDISTATFRAME;
  275. #define FDDISTATFRAME_SIZE  sizeof(FDDISTATFRAME)
  276. typedef struct _TRSTATFRAME
  277. {
  278.     DWORD       TimeStamp;          //... Relative time in milliseconds.
  279.     WORD        FrameLength;        //... MAC frame length.
  280.     WORD        nBytesAvail;        //... Actual frame length copied.
  281.     TRFRAMEHDR  FrameHeader;
  282.     BYTE        FrameID[4];         //... "$MST"
  283.     DWORD       Flags;              //... Flags
  284.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  285.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  286.     DWORD       StatsVersion;
  287.     STATISTICS  Statistics;
  288. } TRSTATFRAME;
  289. typedef TRSTATFRAME *LPTRSTATFRAME;
  290. typedef TRSTATFRAME UNALIGNED *ULPTRSTATFRAME;
  291. #define TRSTATFRAME_SIZE  sizeof(TRSTATFRAME)
  292. typedef struct _STATFRAME
  293. {
  294.     DWORD       TimeStamp;          //... Relative time in milliseconds.
  295.     WORD        FrameLength;        //... MAC frame length.
  296.     WORD        nBytesAvail;        //... Actual frame length copied.
  297.     FRAMEHDR    FrameHeader;
  298.     BYTE        FrameID[4];         //... "$MST"
  299.     DWORD       Flags;              //... Flags
  300.     DWORD       FrameType;          //... Statistics is always 103 (0x67)
  301.     WORD        StatsDataLen;       //... Length of Version DWORD + STATISTICS
  302.     DWORD       StatsVersion;
  303.     STATISTICS  Statistics;
  304. } STATFRAME;
  305. #define STATISTICS_VERSION  0x00000000
  306. typedef STATFRAME *LPSTATFRAME;
  307. typedef STATFRAME UNALIGNED *ULPSTATFRAME;
  308. #define STATFRAME_SIZE  sizeof(STATFRAME)
  309. //=============================================================================
  310. //  The network procedure type.
  311. //
  312. //  Syntax:
  313. //
  314. //  DWORD CALLBACK NetworkProc(handle, message, status, UserContext, param1, param2).
  315. //=============================================================================
  316. typedef DWORD (WINAPI *NETWORKPROC)(HNETWORK, DWORD, DWORD, LPVOID, LPVOID, LPVOID);
  317. //=============================================================================
  318. //  Packet queue data structure.
  319. //=============================================================================
  320. typedef struct _PACKETQUEUE *LPPACKETQUEUE;
  321. typedef struct _PACKETQUEUE
  322. {
  323.     //=========================================================================
  324.     //  The following members are set by the NAL interface and
  325.     //  must be NOT used by the Bloodhound kernel or applications.
  326.     //=========================================================================
  327.     LINK            QueueLinkage;               //... Queue linkage (used by Bloodhound drivers).
  328.     DWORD           State;                      //... Transmit complete flag (used by Bloodhound drivers).
  329.     DWORD           Status;                     //... Final Bloodhound error code (used by Bloodhound drivers).
  330.     LPVOID          TimerHandle;                //... Handle to timer or pending transmits (used by Bloodhound drivers).
  331.     HANDLE          hNetwork;                   //... Network handle (set by NAL).
  332.     LPVOID          InstData;                   //... OpenNetwork instance data.
  333.     //=========================================================================
  334.     //  The following members are set by NAL applications, such as the Bloodhound
  335.     //  kernel.
  336.     //=========================================================================
  337.     DWORD           Size;                       //... The overall size in bytes.
  338.     DWORD           FrameTimeDelta;             //... Time between frames (-1 means use frame timestamp).
  339.     DWORD           QueueTimeDelta;             //... Time between queues.
  340.     DWORD           IterationCount;             //... Number of times to repeat send sequence.
  341.     TRANSMITSTATS   TransmitStats;              //... Transmit statistics structure.
  342.     NETWORKPROC     NetworkProc;                //... Network procedure, used by the kernel to hook transmit completions.
  343.     //=========================================================================
  344.     //  The actual list of packets to transmit.
  345.     //=========================================================================
  346.     DWORD           nPackets;                   //... Packet queue length (i.e. number of frames to send).
  347.     PACKET          Packet[0];                  //... Packet queue.
  348. } PACKETQUEUE;
  349. #define PACKETQUEUE_SIZE  sizeof(PACKETQUEUE)
  350. #define PACKETQUEUE_STATE_VOID          0
  351. #define PACKETQUEUE_STATE_PENDING       1
  352. #define PACKETQUEUE_STATE_COMPLETE      2
  353. #define PACKETQUEUE_STATE_CANCEL        3
  354. //=============================================================================
  355. //  Address structures
  356. //=============================================================================
  357. #define MAX_NAME_SIZE                   32
  358. #define IP_ADDRESS_SIZE                 4
  359. #define MAC_ADDRESS_SIZE                6
  360. //      What is the maximum address size that we could have to copy?
  361. //      IPX == DWORD + 6 bytes == 10
  362. #define MAX_ADDRESS_SIZE                                10
  363. //  VINES IP ADDRESS
  364. typedef struct _VINES_IP_ADDRESS
  365. {
  366.     DWORD   NetID;
  367.     WORD    SubnetID;
  368. } VINES_IP_ADDRESS;
  369. typedef VINES_IP_ADDRESS *LPVINES_IP_ADDRESS;
  370. #define VINES_IP_ADDRESS_SIZE sizeof(VINES_IP_ADDRESS)
  371. // ... IPX address
  372. typedef struct _IPX_ADDRESS
  373. {
  374.     BYTE    Subnet[4];
  375.     BYTE    Address[6];
  376. } IPX_ADDRESS;
  377. typedef IPX_ADDRESS *LPIPX_ADDRESS;
  378. #define IPX_ADDRESS_SIZE sizeof(IPX_ADDRESS)
  379. //... XNS address
  380. typedef IPX_ADDRESS XNS_ADDRESS;
  381. typedef IPX_ADDRESS *LPXNS_ADDRESS;
  382. // ... ETHERNET SOURCE ADDRESS
  383. typedef struct _ETHERNET_SRC_ADDRESS
  384. {
  385.     BYTE    RoutingBit:     1;
  386.     BYTE    LocalBit:       1;
  387.     BYTE    Byte0:          6;
  388.     BYTE    Reserved[5];
  389. } ETHERNET_SRC_ADDRESS;
  390. typedef ETHERNET_SRC_ADDRESS *LPETHERNET_SRC_ADDRESS;
  391. // ... ETHERNET DESTINATION ADDRESS
  392. typedef struct _ETHERNET_DST_ADDRESS
  393. {
  394.     BYTE    GroupBit:       1;
  395.     BYTE    AdminBit:       1;
  396.     BYTE    Byte0:          6;
  397.     BYTE    Reserved[5];
  398. } ETHERNET_DST_ADDRESS;
  399. typedef ETHERNET_DST_ADDRESS *LPETHERNET_DST_ADDRESS;
  400. // ... FDDI addresses
  401. typedef ETHERNET_SRC_ADDRESS FDDI_SRC_ADDRESS;
  402. typedef ETHERNET_DST_ADDRESS FDDI_DST_ADDRESS;
  403. typedef FDDI_SRC_ADDRESS *LPFDDI_SRC_ADDRESS;
  404. typedef FDDI_DST_ADDRESS *LPFDDI_DST_ADDRESS;
  405. // .... TOKENRING Source Address
  406. typedef struct _TOKENRING_SRC_ADDRESS
  407. {
  408.     BYTE    Byte0:          6;
  409.     BYTE    LocalBit:       1;
  410.     BYTE    RoutingBit:     1;
  411.     BYTE    Byte1;
  412.     BYTE    Byte2:          7;
  413.     BYTE    Functional:     1;
  414.     BYTE    Reserved[3];
  415. } TOKENRING_SRC_ADDRESS;
  416. typedef TOKENRING_SRC_ADDRESS *LPTOKENRING_SRC_ADDRESS;
  417. // .... TOKENRING Destination Address
  418. typedef struct _TOKENRING_DST_ADDRESS
  419. {
  420.     BYTE    Byte0:          6;
  421.     BYTE    AdminBit:       1;
  422.     BYTE    GroupBit:       1;
  423.     BYTE    Reserved[5];
  424. } TOKENRING_DST_ADDRESS;
  425. typedef TOKENRING_DST_ADDRESS *LPTOKENRING_DST_ADDRESS;
  426. //... Old type def's
  427. #define MACADDRESS_SIZE     MAC_ADDRESS_SIZE
  428. #define IPADDRESS_SIZE      IP_ADDRESS_SIZE
  429. #define IPXADDRESS_SIZE     IPX_ADDRESS_SIZE
  430. #define VINESIPADDRESS_SIZE VINES_IP_ADDRESS_SIZE
  431. typedef struct _ADDRESS
  432. {
  433.     DWORD                       Type;
  434.     union
  435.     {
  436.         BYTE                    MACAddress[MAC_ADDRESS_SIZE];
  437.         BYTE                    IPAddress[IP_ADDRESS_SIZE];
  438.         BYTE                    IPXRawAddress[IPX_ADDRESS_SIZE];
  439.         IPX_ADDRESS             IPXAddress;
  440.         
  441.         BYTE                    VinesIPRawAddress[VINES_IP_ADDRESS_SIZE];
  442.         VINES_IP_ADDRESS        VinesIPAddress;       
  443.         ETHERNET_SRC_ADDRESS    EthernetSrcAddress;
  444.         ETHERNET_DST_ADDRESS    EthernetDstAddress;
  445.         TOKENRING_SRC_ADDRESS   TokenringSrcAddress;
  446.         TOKENRING_DST_ADDRESS   TokenringDstAddress;
  447.         FDDI_SRC_ADDRESS        FddiSrcAddress;
  448.         FDDI_DST_ADDRESS        FddiDstAddress;
  449.     };
  450.     WORD                        Flags;
  451. } ADDRESS;
  452. typedef ADDRESS *LPADDRESS;
  453. #define ADDRESS_SIZE    sizeof(ADDRESS)
  454. #define ADDRESS_TYPE_ETHERNET   0
  455. #define ADDRESS_TYPE_IP         1
  456. #define ADDRESS_TYPE_IPX        2
  457. #define ADDRESS_TYPE_TOKENRING  3
  458. #define ADDRESS_TYPE_FDDI       4
  459. #define ADDRESS_TYPE_XNS        5
  460. #define ADDRESS_TYPE_ANY        6        // NOTE: Special ANY and ANY_GROUP are placeholders, meaning, ignore this type
  461. #define ADDRESS_TYPE_ANY_GROUP  7     
  462. #define ADDRESS_TYPE_FIND_HIGHEST  8
  463. #define ADDRESS_TYPE_VINES_IP   9
  464. #define ADDRESS_TYPE_LOCAL_ONLY 10
  465. #define ADDRESSTYPE_FLAGS_NORMALIZE     0x0001
  466. #define ADDRESSTYPE_FLAGS_BIT_REVERSE   0x0002
  467. //=============================================================================
  468. //  Address pair.
  469. //=============================================================================
  470. typedef struct _ADDRESSPAIR
  471. {
  472.     WORD        AddressFlags;
  473.     WORD        NalReserved;
  474.     ADDRESS     DstAddress;
  475.     ADDRESS     SrcAddress;
  476. } ADDRESSPAIR;
  477. typedef ADDRESSPAIR *LPADDRESSPAIR;
  478. #define ADDRESS_FLAGS_MATCH_DST     0x0001  //... Match dest. address.
  479. #define ADDRESS_FLAGS_MATCH_SRC     0x0002  //... Match src. address.
  480. #define ADDRESS_FLAGS_EXCLUDE       0x0004  //... Perform logical XOR vs logical OR.
  481. #define ADDRESS_FLAGS_GROUP_ADDR    0x0008  //... Match group bit only.
  482. #define ADDRESS_FLAGS_MATCH_BOTH    0x0003  //... 0x0001 | 0x0002.
  483. #define ADDRESSPAIR_SIZE sizeof(ADDRESSPAIR)
  484. //=============================================================================
  485. //  Address table.
  486. //=============================================================================
  487. #define MAX_ADDRESS_PAIRS   8
  488. typedef struct _ADDRESSTABLE
  489. {
  490.     DWORD           nAddressPairs;
  491.     ADDRESSPAIR     AddressPair[MAX_ADDRESS_PAIRS];
  492. } ADDRESSTABLE;
  493. typedef ADDRESSTABLE *LPADDRESSTABLE;
  494. #define ADDRESSTABLE_SIZE sizeof(ADDRESSTABLE)
  495. //=============================================================================
  496. //  Network information.
  497. //=============================================================================
  498. typedef struct _NETWORKINFO
  499. {
  500.     BYTE            PermanentAddr[6];       //... Permanent MAC address
  501.     BYTE            CurrentAddr[6];         //... Current  MAC address
  502.     ADDRESS         OtherAddress;           //... Other address supported (IP, IPX, etc...)
  503.     DWORD           LinkSpeed;              //... Link speed in Mbits.
  504.     DWORD           MacType;                //... Media type.
  505.     DWORD           MaxFrameSize;           //... Max frame size allowed.
  506.     DWORD           Flags;                  //... Informational flags.
  507.     DWORD           TimestampScaleFactor;   //... 1 = 1/1 ms, 10 = 1/10 ms, 100 = 1/100 ms, etc.
  508.     BYTE            NodeName[32];           //... Name of remote workstation.
  509.     BYTE            Comment[ADAPTER_COMMENT_LENGTH]; // Adapter comment field.
  510. } NETWORKINFO;
  511. typedef NETWORKINFO *LPNETWORKINFO;
  512. #define NETWORKINFO_SIZE    sizeof(NETWORKINFO)
  513. #define NETWORKINFO_FLAGS_PMODE_NOT_SUPPORTED           0x00000001
  514. #define NETWORKINFO_FLAGS_LOOPBACK_NOT_SUPPORTED        0x00000002
  515. #define NETWORKINFO_FLAGS_REMOTE_NAL                    0x00000004
  516. #define NETWORKINFO_FLAGS_REMOTE_NAL_CONNECTED          0x00000008
  517. #define NETWORKINFO_FLAGS_REMOTE_CARD                   0x00000010
  518. //=============================================================================
  519. //  Pattern structure.
  520. //=============================================================================
  521. #define MAX_PATTERN_LENGTH  16
  522. typedef struct _PATTERNMATCH
  523. {
  524.     DWORD   Flags;
  525.     WORD    Offset;
  526.     WORD    Length;
  527.     BYTE    PatternToMatch[MAX_PATTERN_LENGTH];                 //... Pattern to match.
  528. } PATTERNMATCH;
  529. #define PATTERN_MATCH_FLAGS_NOT                 0x00000001      //... Negate the results.
  530. #define PATTERN_MATCH_FLAGS_DATA_RELATIVE       0x00000002      //... pattern is relative to data, not frame.
  531. typedef PATTERNMATCH *LPPATTERNMATCH;
  532. #define PATTERNMATCH_SIZE    sizeof(PATTERNMATCH)
  533. //=============================================================================
  534. //  Expression structure.
  535. //=============================================================================
  536. #define MAX_PATTERNS    4
  537. typedef struct _ANDEXP
  538. {
  539.     DWORD            nPatternMatches;
  540.     PATTERNMATCH     PatternMatch[MAX_PATTERNS];
  541. } ANDEXP;
  542. typedef ANDEXP *LPANDEXP;
  543. #define ANDEXP_SIZE     sizeof(ANDEXP)
  544. typedef struct _EXPRESSION
  545. {
  546.     DWORD       nAndExps;
  547.     ANDEXP      AndExp[MAX_PATTERNS];
  548. } EXPRESSION;
  549. typedef EXPRESSION *LPEXPRESSION;
  550. #define EXPRESSION_SIZE    sizeof(EXPRESSION)
  551. //=============================================================================
  552. //  Trigger.
  553. //=============================================================================
  554. typedef struct _TRIGGER
  555. {
  556.     DWORD           TriggerFlags;           //... Trigger flags.
  557.     PATTERNMATCH    TriggerPatternMatch;    //... Trigger pattern match.
  558.     BYTE            TriggerOpcode;          //... Trigger opcode.
  559.     BYTE            TriggerAction;          //... Action to take when trigger occurs.
  560.     WORD            TriggerState;           //... State change request.
  561.     WORD            TriggerBufferSize;      //... Percentage of buffer to trigger on.
  562.     LPSTR           TriggerCommand;         //... Command string to pass to WinExec.
  563. } TRIGGER;
  564. typedef TRIGGER *LPTRIGGER;
  565. #define TRIGGER_SIZE    sizeof(TRIGGER)
  566. #define TRIGGER_FLAGS_DATA_RELATIVE         0x00000001
  567. //=============================================================================
  568. //  Capture filter.
  569. //=============================================================================
  570. typedef struct _CAPTUREFILTER
  571. {
  572.     DWORD           FilterFlags;            //... filter flags,
  573.     LPBYTE          SapTable;               //... sap table.
  574.     LPWORD          EtypeTable;             //... etype table.
  575.     WORD            nSaps;                  //... sap table length.
  576.     WORD            nEtypes;                //... Etype table length.
  577.     LPADDRESSTABLE  AddressTable;           //... Address table.
  578.     EXPRESSION      FilterExpression;       //... Filter expression.
  579.     TRIGGER         Trigger;                //... Trigger structure.
  580.     DWORD           nFrameBytesToCopy;      //... Number of byte of each frame to copy.
  581.     DWORD           Reserved;
  582. } CAPTUREFILTER;
  583. typedef CAPTUREFILTER *LPCAPTUREFILTER;
  584. #define CAPTUREFILTER_SIZE sizeof(CAPTUREFILTER)
  585. //=============================================================================
  586. //  Capture filter flags. By default all frames are rejected and
  587. //  NalSetCaptureFilter enables them based on the CAPTUREFILTER flags
  588. //  defined below.
  589. //=============================================================================
  590. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_SAPS    0x0001      //... include saps.
  591. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL_ETYPES  0x0002      //... include etypes.
  592. #define CAPTUREFILTER_FLAGS_TRIGGER             0x0004      //... process trigger.
  593. #define CAPTUREFILTER_FLAGS_LOCAL_ONLY          0x0008      //... non-promiscuous.
  594. #define CAPTUREFILTER_FLAGS_DISCARD_COMMENTS    0x0010      //... throw away our internal comment frames
  595. //.. The following causes both saps and etypes to be included.
  596. #define CAPTUREFILTER_FLAGS_INCLUDE_ALL         0x0003      //... 0x0001 | 0x0002
  597. #define BUFFER_FULL_25_PERCENT                  0
  598. #define BUFFER_FULL_50_PERCENT                  1
  599. #define BUFFER_FULL_75_PERCENT                  2
  600. #define BUFFER_FULL_100_PERCENT                 3
  601. //=============================================================================
  602. //  Station statistics.
  603. //=============================================================================
  604. typedef struct _STATIONSTATS *LPSTATIONSTATS;
  605. typedef struct _SESSION      *LPSESSION;
  606. typedef struct _SESSION
  607. {
  608.     LPSESSION       NextSession;            //... opaque, used by nal.
  609.     LPSTATIONSTATS  StationOwner;
  610.     LPSTATIONSTATS  StationPartner;
  611.     DWORD           Flags;
  612.     DWORD           TotalPacketsSent;
  613. } SESSION;
  614. #define SESSION_SIZE    sizeof(SESSION)
  615. #define SESSION_FLAGS_INITIALIZED  0x0001           //... Structure has been initialized.
  616. #define SESSION_FLAGS_EVENTPOSTED  0x0002           //... Nal has posted an event for this entry.
  617. typedef struct _STATIONSTATS    *LPSTATIONSTATS;
  618. typedef struct _STATIONSTATS
  619. {
  620.     LPSTATIONSTATS NextStationStats;        //... opaque, used by nal.
  621.     LPSESSION       SessionPartnerList;     //... opaque, used by nal.
  622.     DWORD           Flags;                  //... opaque, used by nal.
  623.     BYTE            StationAddress[6];
  624.     WORD            Pad;                    //... DWORD alignment.
  625.     DWORD           TotalPacketsReceived;
  626.     DWORD           TotalDirectedPacketsSent;
  627.     DWORD           TotalBroadcastPacketsSent;
  628.     DWORD           TotalMulticastPacketsSent;
  629.     DWORD           TotalBytesReceived;
  630.     DWORD           TotalBytesSent;
  631. } STATIONSTATS;
  632. #define STATIONSTATS_SIZE       sizeof(STATIONSTATS)
  633. #define STATIONSTATS_FLAGS_INITIALIZED  0x0001      //... Structure has been initialized.
  634. #define STATIONSTATS_FLAGS_EVENTPOSTED  0x0002      //... Nal has posted an event for this entry.
  635. //=============================================================================
  636. //  Bone packet definition.
  637. //=============================================================================
  638. #define STATIONQUERY_FLAGS_LOADED       0x0001      //... Driver is loaded but the kernel is not.
  639. #define STATIONQUERY_FLAGS_RUNNING      0x0002      //... Driver is loaded but not capturing.
  640. #define STATIONQUERY_FLAGS_CAPTURING    0x0004      //... Driver is actively capturing.
  641. #define STATIONQUERY_FLAGS_TRANSMITTING 0x0008      //... Driver is actively transmitting.
  642. typedef struct _STATIONQUERY
  643. {
  644.     DWORD           Flags;                              //... Current state of bloodhound.
  645.     BYTE            BCDVerMinor;                        //... Binary coded decimal (minor).
  646.     BYTE            BCDVerMajor;                        //... Binary coded decimal (major).
  647.     DWORD           LicenseNumber;                      //... Software license number.
  648.     BYTE            MachineName[MACHINE_NAME_LENGTH];   //... Machine name, if any.
  649.     BYTE            UserName[USER_NAME_LENGTH];         //... Username name, if any.
  650.     BYTE            Reserved[32];                       //... Reserved.
  651.     BYTE            AdapterAddress[6];                  //... NIC address.
  652. } STATIONQUERY;
  653. typedef STATIONQUERY *LPSTATIONQUERY;
  654. #define STATIONQUERY_SIZE sizeof(STATIONQUERY)
  655. //=============================================================================
  656. //  QUERYTABLE structure.
  657. //=============================================================================
  658. typedef struct _QUERYTABLE
  659. {
  660.     DWORD           nStationQueries;
  661.     STATIONQUERY    StationQuery[0];
  662. } QUERYTABLE;
  663. typedef QUERYTABLE *LPQUERYTABLE;
  664. #define QUERYTABLE_SIZE sizeof(QUERYTABLE)
  665. //=============================================================================
  666. //  BONEPACKET structure.
  667. //=============================================================================
  668. typedef struct _BONEPACKET
  669. {
  670.     DWORD       Signature;                  //... 'RTSS'
  671.     BYTE        Command;                    //... packet command field.
  672.     BYTE        Flags;                      //... flags.
  673.     DWORD       Reserved;                   //... reserved.
  674.     WORD        Length;                     //... length of data, if any.
  675. } BONEPACKET;
  676. typedef BONEPACKET *LPBONEPACKET;
  677. #define BONEPACKET_SIZE sizeof(BONEPACKET)
  678. //=============================================================================
  679. //  BONE alert packet.
  680. //=============================================================================
  681. typedef struct _ALERT
  682. {
  683.     DWORD           AlertCode;                          //... Alert code.
  684.     BYTE            MachineName[MACHINE_NAME_LENGTH];   //... Machine name, if any.
  685.     BYTE            UserName[USER_NAME_LENGTH];         //... Username name, if any.
  686.     union
  687.     {
  688.         BYTE            Pad[32];                        //... Alert code-specific data.
  689.         DWORD           nFramesToSend;                  //... Transmit alert data.
  690.     };
  691. } ALERT;
  692. typedef ALERT *LPALERT;
  693. #define ALERT_SIZE sizeof(ALERT)
  694. //... Alert codes.
  695. #define ALERT_CODE_BEGIN_TRANSMIT           0
  696. //=============================================================================
  697. //  BONEPACKET signature.
  698. //=============================================================================
  699. #define MAKE_WORD(l, h)         (((WORD) (l)) | (((WORD) (h)) << 8))
  700. #define MAKE_LONG(l, h)         (((DWORD) (l)) | (((DWORD) (h)) << 16L))
  701. #define MAKE_SIG(a, b, c, d)    MAKE_LONG(MAKE_WORD(a, b), MAKE_WORD(c, d))
  702. #define BONE_PACKET_SIGNATURE   MAKE_SIG('R', 'T', 'S', 'S')
  703. //=============================================================================
  704. //  BONEPACKET commands.
  705. //=============================================================================
  706. #define BONE_COMMAND_STATION_QUERY_REQUEST      0
  707. #define BONE_COMMAND_STATION_QUERY_RESPONSE     1
  708. #define BONE_COMMAND_ALERT                      2
  709. //=============================================================================
  710. //  STATISTICS parameter structure return from OpenNetwork().
  711. //=============================================================================
  712. typedef struct _STATISTICSPARAM
  713. {
  714.     DWORD           StatisticsSize;             //... Number of bytes.
  715.     LPSTATISTICS    Statistics;
  716.     DWORD           StatisticsTableEntries;     //... Number of entries.
  717.     LPSTATIONSTATS  StatisticsTable;
  718.     DWORD           SessionTableEntries;        //... Number of entries.
  719.     LPSESSION       SessionTable;
  720. } STATISTICSPARAM;
  721. typedef STATISTICSPARAM *LPSTATISTICSPARAM;
  722. #define STATISTICSPARAM_SIZE    sizeof(STATISTICSPARAM)
  723. //=============================================================================
  724. //  RECONNECTINFO structure.
  725. //=============================================================================
  726. typedef struct _RECONNECTINFO_HEADER
  727. {
  728.     DWORD       Signature;                      //... Application-defined signature.
  729.     WORD        PrivateDataLength;              //... Private data length (max = 64K - header size).
  730.     BYTE        Reserved[26];                   //... Reserved for future use.
  731. } RECONNECTINFO_HEADER;
  732. typedef RECONNECTINFO_HEADER *LPRECONNECTINFO_HEADER;
  733. #define RECONNECTINFO_HEADER_SIZE   sizeof(RECONNECTINFO_HEADER)    //... 32 byte fixed header.
  734. typedef struct _RECONNECTINFO
  735. {
  736.     RECONNECTINFO_HEADER    ReconnectInfoHeader;
  737.     BYTE                    PrivateData[0];
  738. } RECONNECTINFO;
  739. typedef RECONNECTINFO *LPRECONNECTINFO;
  740. #define RECONNECTINFO_SIZE  sizeof(RECONNECTINFO)
  741. //=============================================================================
  742. //  TEMP SetupNetworkID() data struct
  743. //=============================================================================
  744. typedef struct _SETUPNETWORKPARMS
  745. {
  746.     char    Nodename[32];       //... remote node to connect to
  747.     char    Comment[255];       //... comment regarding what we are using remote network for
  748.     int     NetID;              //... which network id to use
  749.     DWORD   Frequency;          //... frequency of Agent status updates
  750.     DWORD   fSlowLink:1;        //... flag to signify slow link
  751. } SETUPNETWORKPARMS;
  752. typedef SETUPNETWORKPARMS *LPSETUPNETWORKPARMS;
  753. #define SETUPNETWORKPARMS_SIZE    sizeof(SETUPNETWORKPARMS)
  754. //=============================================================================
  755. // Constants for SpecialFrame comment insertions
  756. //=============================================================================
  757. #define SPECIAL_FRAME_FLAG_USE_AS_STATS_ENDPOINT      0x00000001
  758. #define SPECIAL_FRAME_TYPE_COMMENT  101
  759. #define SPECIAL_FRAME_TYPE_BOOKMARK 102
  760. #define SPECIAL_FRAME_TYPE_STATS    103
  761. #define SPECIAL_FRAME_TYPE_ODBC     104
  762. #define SPECIAL_FRAME_TYPE_MESSAGE  105
  763. #pragma pack()
  764. #endif