home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / NALTYPES.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  37.1 KB  |  1,008 lines

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