home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / naltypes.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  38KB  |  1,006 lines

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