Home | History | Annotate | Download | only in ddk
      1 /*
      2  * afilter.h
      3  *
      4  * Address filtering for NDIS MACs
      5  *
      6  * This file is part of the w32api package.
      7  *
      8  * Contributors:
      9  *   Created by Filip Navara <xnavara (at) volny.cz>
     10  *
     11  * THIS SOFTWARE IS NOT COPYRIGHTED
     12  *
     13  * This source code is offered for use in the public domain. You may
     14  * use, modify or distribute it freely.
     15  *
     16  * This code is distributed in the hope that it will be useful but
     17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     18  * DISCLAIMED. This includes but is not limited to warranties of
     19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     20  *
     21  */
     22 
     23 #ifndef _ARC_FILTER_DEFS_
     24 #define _ARC_FILTER_DEFS_
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif
     29 
     30 #define ARC_RECEIVE_BUFFERS            64
     31 #define ARCNET_ADDRESS_LEN             1
     32 #define ARC_PROTOCOL_HEADER_SIZE       (sizeof(ARC_PROTOCOL_HEADER))
     33 #define ARC_MAX_FRAME_SIZE             504
     34 #define ARC_MAX_ADDRESS_IDS            256
     35 #define ARC_MAX_FRAME_HEADER_SIZE      6
     36 #define ARC_MAX_PACKET_SIZE            576
     37 #define ARC_FILTER_MAX_OPENS           (sizeof(ULONG) * 8)
     38 
     39 #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
     40 
     41 #define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
     42 #define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
     43         (((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
     44 
     45 typedef ULONG MASK, *PMASK;
     46 
     47 typedef struct _ARC_BUFFER_LIST
     48 {
     49   PVOID  Buffer;
     50   UINT  Size;
     51   UINT  BytesLeft;
     52   struct _ARC_BUFFER_LIST  *Next;
     53 } ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
     54 
     55 typedef struct _ARC_PROTOCOL_HEADER
     56 {
     57   UCHAR  SourceId[ARCNET_ADDRESS_LEN];
     58   UCHAR  DestId[ARCNET_ADDRESS_LEN];
     59   UCHAR  ProtId;
     60 } ARC_PROTOCOL_HEADER, *PARC_PROTOCOL_HEADER;
     61 
     62 typedef struct _ARC_PACKET_HEADER
     63 {
     64   ARC_PROTOCOL_HEADER  ProtHeader;
     65   USHORT  FrameSequence;
     66   UCHAR  SplitFlag;
     67   UCHAR  LastSplitFlag;
     68   UCHAR  FramesReceived;
     69 } ARC_PACKET_HEADER, *PARC_PACKET_HEADER;
     70 
     71 typedef struct _ARC_PACKET
     72 {
     73   ARC_PACKET_HEADER  Header;
     74   struct _ARC_PACKET  *Next;
     75   ULONG  TotalLength;
     76   BOOLEAN  LastFrame;
     77   PARC_BUFFER_LIST  FirstBuffer;
     78   PARC_BUFFER_LIST  LastBuffer;
     79   NDIS_PACKET  TmpNdisPacket;
     80 } ARC_PACKET, *PARC_PACKET;
     81 
     82 typedef struct _ARC_BINDING_INFO
     83 {
     84   PNDIS_OPEN_BLOCK  NdisBindingHandle;
     85   PVOID  Reserved;
     86   UINT  PacketFilters;
     87   ULONG  References;
     88   struct _ARC_BINDING_INFO  *NextOpen;
     89   BOOLEAN  ReceivedAPacket;
     90   UINT  OldPacketFilters;
     91 } ARC_BINDING_INFO,*PARC_BINDING_INFO;
     92 
     93 typedef struct _ARC_FILTER
     94 {
     95   struct _NDIS_MINIPORT_BLOCK  *Miniport;
     96   UINT  CombinedPacketFilter;
     97   PARC_BINDING_INFO  OpenList;
     98   NDIS_HANDLE  ReceiveBufferPool;
     99   PARC_BUFFER_LIST  FreeBufferList;
    100   PARC_PACKET  FreePackets;
    101   PARC_PACKET  OutstandingPackets;
    102   UCHAR  AdapterAddress;
    103   UINT  OldCombinedPacketFilter;
    104 } ARC_FILTER,*PARC_FILTER;
    105 
    106 BOOLEAN
    107 NTAPI
    108 ArcCreateFilter(
    109   IN struct _NDIS_MINIPORT_BLOCK  *Miniport,
    110   IN UCHAR  AdapterAddress,
    111   OUT PARC_FILTER  *Filter);
    112 
    113 VOID
    114 NTAPI
    115 ArcDeleteFilter(
    116   IN PARC_FILTER Filter);
    117 
    118 BOOLEAN
    119 NTAPI
    120 ArcNoteFilterOpenAdapter(
    121   IN PARC_FILTER  Filter,
    122   IN NDIS_HANDLE  NdisBindingHandle,
    123   OUT PNDIS_HANDLE  NdisFilterHandle);
    124 
    125 NDIS_STATUS
    126 NTAPI
    127 ArcDeleteFilterOpenAdapter(
    128   IN PARC_FILTER  Filter,
    129   IN NDIS_HANDLE  NdisFilterHandle,
    130   IN PNDIS_REQUEST  NdisRequest);
    131 
    132 NDIS_STATUS
    133 NTAPI
    134 ArcFilterAdjust(
    135   IN PARC_FILTER  Filter,
    136   IN NDIS_HANDLE  NdisFilterHandle,
    137   IN PNDIS_REQUEST  NdisRequest,
    138   IN UINT  FilterClasses,
    139   IN BOOLEAN  Set);
    140 
    141 VOID
    142 NTAPI
    143 ArcFilterDprIndicateReceiveComplete(
    144   IN PARC_FILTER  Filter);
    145 
    146 VOID
    147 NTAPI
    148 ArcFilterDprIndicateReceive(
    149   IN PARC_FILTER  Filter,
    150   IN PUCHAR  pRawHeader,
    151   IN PUCHAR  pData,
    152   IN UINT  Length);
    153 
    154 NDIS_STATUS
    155 NTAPI
    156 ArcFilterTransferData(
    157   IN PARC_FILTER  Filter,
    158   IN NDIS_HANDLE  MacReceiveContext,
    159   IN UINT  ByteOffset,
    160   IN UINT  BytesToTransfer,
    161   OUT PNDIS_PACKET  Packet,
    162   OUT PUINT  BytesTransfered);
    163 
    164 VOID
    165 NTAPI
    166 ArcFreeNdisPacket(
    167   IN PARC_PACKET  Packet);
    168 
    169 VOID
    170 NTAPI
    171 ArcFilterDoIndication(
    172   IN PARC_FILTER  Filter,
    173   IN PARC_PACKET  Packet);
    174 
    175 VOID
    176 NTAPI
    177 ArcDestroyPacket(
    178   IN PARC_FILTER  Filter,
    179   IN PARC_PACKET  Packet);
    180 
    181 #ifdef __cplusplus
    182 }
    183 #endif
    184 
    185 #endif /* _ARC_FILTER_DEFS_ */
    186