1 /*
2  * Copyright 2008-2012 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /**************************************************************************//**
34  @File          fm_port_dsar.h
35 
36  @Description   Deep Sleep Auto Response project - common module header file.
37 
38                 Author - Eyal Harari
39 
40  @Cautions      See the FMan Controller spec and design document for more information.
41 *//***************************************************************************/
42 
43 #ifndef __FM_PORT_DSAR_H_
44 #define __FM_PORT_DSAR_H_
45 
46 #define DSAR_GETSER_MASK 0xFF0000FF
47 
48 #if defined(__MWERKS__) && !defined(__GNUC__)
49 #pragma pack(push,1)
50 #endif /* defined(__MWERKS__) && ... */
51 
52 /**************************************************************************//**
53  @Description   Deep Sleep Auto Response VLAN-IPv4 Binding Table (for ARP/ICMPv4)
54                 Refer to the FMan Controller spec for more details.
55 *//***************************************************************************/
56 typedef _Packed struct
57 {
58         uint32_t ipv4Addr; /*!< 32 bit IPv4 Address. */
59         uint16_t vlanId;   /*!< 12 bits VLAN ID. The 4 left-most bits should be cleared                      */
60 					   /*!< This field should be 0x0000 for an entry with no VLAN tag or a null VLAN ID. */
61         uint16_t reserved;
62 } _PackedType t_DsarArpBindingEntry;
63 
64 /**************************************************************************//**
65  @Description   Deep Sleep Auto Response Address Resolution Protocol Statistics Descriptor
66                 Refer to the FMan Controller spec for more details.
67 	            0x00 INVAL_CNT Invalid ARP IPv4-Ethernet counter
68 	            0x04 ECHO_CNT Echo counter
69 	            0x08 CD_CNT Conflict Detection counter
70 	            0x0C AR_CNT Auto-Response counter
71 	            0x10 RATM_CNT Replies Addressed To Me counter
72 	            0x14 UKOP_CNT Unknown Operation counter
73 	            0x18 NMTP_CNT Not my TPA counter
74 	            0x1C NMVLAN_CNT Not My VLAN counter
75 *//***************************************************************************/
76 typedef _Packed struct
77 {
78     uint32_t invalCnt;	/**< Invalid ARP IPv4-Ethernet counter. */
79     uint32_t echoCnt;	/**< Echo counter. 						*/
80     uint32_t cdCnt;		/**< Conflict Detection counter.		*/
81     uint32_t arCnt;		/**< Auto-Response counter.				*/
82     uint32_t ratmCnt;	/**< Replies Addressed To Me counter.	*/
83     uint32_t ukopCnt;	/**< Unknown Operation counter.			*/
84     uint32_t nmtpCnt;	/**< Not my TPA counter.				*/
85     uint32_t nmVlanCnt; /**< Not My VLAN counter				*/
86 } _PackedType t_DsarArpStatistics;
87 
88 
89 /**************************************************************************//**
90  @Description   Deep Sleep Auto Response Address Resolution Protocol Descriptor
91                 0x0 0-15 Control bits [0-15]. Bit 15  = CDEN.
92                 0x2 0-15 NumOfBindings Number of entries in the binding list.
93                 0x4 0-15 BindingsPointer Bindings Pointer. This points to an IPv4-MAC Addresses Bindings list.
94                 0x6 0-15
95                 0x8 0-15 StatisticsPointer Statistics Pointer. This field points to the ARP Descriptors statistics data structure.
96                 0xA 0-15
97                 0xC 0-15 Reserved Reserved. Must be cleared.
98                 0xE 015
99 
100 *//***************************************************************************/
101 typedef _Packed struct
102 {
103     uint16_t control;                       /** Control bits [0-15]. Bit 15  = CDEN */
104     uint16_t numOfBindings;                 /**< Number of VLAN-IPv4 */
105     uint32_t p_Bindings;	/**< VLAN-IPv4 Bindings table pointer. */
106     uint32_t p_Statistics;   /**< Statistics Data Structure pointer. */
107     uint32_t reserved1;                     /**< Reserved. */
108 } _PackedType t_DsarArpDescriptor;
109 
110 
111 /**************************************************************************//**
112  @Description   Deep Sleep Auto Response VLAN-IPv4 Binding Table (for ARP/ICMPv4)
113                 Refer to the FMan Controller spec for more details.
114 *//***************************************************************************/
115 typedef _Packed struct
116 {
117     uint32_t ipv4Addr; /*!< 32 bit IPv4 Address. */
118 	uint16_t vlanId;   /*!< 12 bits VLAN ID. The 4 left-most bits should be cleared                      */
119 					   /*!< This field should be 0x0000 for an entry with no VLAN tag or a null VLAN ID. */
120 	uint16_t reserved;
121 } _PackedType t_DsarIcmpV4BindingEntry;
122 
123 /**************************************************************************//**
124  @Description   Deep Sleep Auto Response ICMPv4 Statistics Descriptor
125                 Refer to the FMan Controller spec for more details.
126                 0x00 INVAL_CNT Invalid ICMPv4 header counter
127                 0x04 NMVLAN_CNT Not My VLAN counter
128                 0x08 NMIP_CNT Not My IP counter
129                 0x0C AR_CNT Auto-Response counter
130                 0x10 CSERR_CNT Checksum Error counter
131                 0x14 Reserved Reserved
132                 0x18 Reserved Reserved
133                 0x1C Reserved Reserved
134 
135 *//***************************************************************************/
136 typedef _Packed struct
137 {
138     uint32_t invalCnt;	/**< Invalid ICMPv4 Echo counter. */
139     uint32_t nmVlanCnt;	/**< Not My VLAN counter          */
140     uint32_t nmIpCnt;	/**< Not My IP counter		      */
141     uint32_t arCnt;		/**< Auto-Response counter        */
142     uint32_t cserrCnt;	/**< Checksum Error counter       */
143     uint32_t reserved0;	/**< Reserved                     */
144     uint32_t reserved1;	/**< Reserved                     */
145     uint32_t reserved2; /**< Reserved                     */
146 } _PackedType t_DsarIcmpV4Statistics;
147 
148 
149 
150 /**************************************************************************//**
151  @Description   Deep Sleep Auto Response ICMPv4 Descriptor
152                 0x0 0-15 Control bits [0-15]
153                 0x2 0-15 NumOfBindings Number of entries in the binding list.
154                 0x4 0-15 BindingsPointer Bindings Pointer. This points to an VLAN-IPv4 Addresses Bindings list.
155                 0x6 0-15
156                 0x8 0-15 StatisticsPointer Statistics Pointer. This field points to the ICMPv4 statistics data structure.
157                 0xA 0-15
158                 0xC 0-15 Reserved Reserved. Must be cleared.
159                 0xE 015
160 
161 *//***************************************************************************/
162 typedef _Packed struct
163 {
164     uint16_t control;                       /** Control bits [0-15].                */
165     uint16_t numOfBindings;                 /**< Number of VLAN-IPv4                */
166     uint32_t p_Bindings;	/**< VLAN-IPv4 Bindings table pointer.  */
167     uint32_t p_Statistics;   /**< Statistics Data Structure pointer. */
168     uint32_t reserved1;                     /**< Reserved.                          */
169 } _PackedType t_DsarIcmpV4Descriptor;
170 
171 /**************************************************************************//**
172  @Description   Deep Sleep Auto Response VLAN-IPv4 Binding Table (for ARP/ICMPv4)
173                 The 4 left-most bits (15:12) of the VlanId parameter are control flags.
174                 Flags[3:1] (VlanId[15:13]): Reserved, should be cleared.
175                 Flags[0] (VlanId[12]): Temporary address.
176                 � 0 - Assigned IP address.
177                 � 1- Temporary (tentative) IP address.
178                 Refer to the FMan Controller spec for more details.
179 *//***************************************************************************/
180 typedef _Packed struct
181 {
182     uint32_t ipv6Addr[4];  /*!< 3 * 32 bit IPv4 Address.                                                    */
183 	uint16_t resFlags:4;   /*!< reserved flags. should be cleared                                           */
184 	uint16_t vlanId:12;    /*!< 12 bits VLAN ID.                                                            */
185 					       /*!< This field should be 0x000 for an entry with no VLAN tag or a null VLAN ID. */
186 	uint16_t reserved;
187 } _PackedType t_DsarIcmpV6BindingEntry;
188 
189 /**************************************************************************//**
190  @Description   Deep Sleep Auto Response ICMPv4 Statistics Descriptor
191                 Refer to the FMan Controller spec for more details.
192                 0x00 INVAL_CNT Invalid ICMPv4 header counter
193                 0x04 NMVLAN_CNT Not My VLAN counter
194                 0x08 NMIP_CNT Not My IP counter
195                 0x0C AR_CNT Auto-Response counter
196                 0x10 CSERR_CNT Checksum Error counter
197                 0x14 MCAST_CNT Multicast counter
198                 0x18 Reserved Reserved
199                 0x1C Reserved Reserved
200 
201 *//***************************************************************************/
202 typedef _Packed struct
203 {
204     uint32_t invalCnt;	/**< Invalid ICMPv4 Echo counter. */
205     uint32_t nmVlanCnt;	/**< Not My VLAN counter          */
206     uint32_t nmIpCnt;	/**< Not My IP counter		      */
207     uint32_t arCnt;		/**< Auto-Response counter        */
208     uint32_t reserved1;	/**< Reserved                     */
209     uint32_t reserved2; /**< Reserved                     */
210     uint32_t reserved3;	/**< Reserved                     */
211     uint32_t reserved4; /**< Reserved                     */
212 } _PackedType t_DsarIcmpV6Statistics;
213 
214 /**************************************************************************//**
215  @Description   Deep Sleep Auto Response Neighbor Discovery Statistics Descriptor
216                 0x00 INVAL_CNT Invalid Neighbor Discovery message counter
217                 0x04 NMVLAN_CNT Not My VLAN counter
218                 0x08 NMIP_CNT Not My IP counter
219                 0x0C AR_CNT Auto-Response counter
220                 0x10 CSERR_CNT Checksum Error counter
221                 0x14 USADVERT_CNT Unsolicited Neighbor Advertisements counter
222                 0x18 NMMCAST_CNT Not My Multicast group counter
223                 0x1C NSLLA_CNT No Source Link-Layer Address counter. Indicates that there was a match on a Target
224                      Address of a packet that its source IP address is a unicast address, but the ICMPv6
225                      Source Link-layer Address option is omitted
226 *//***************************************************************************/
227 typedef _Packed struct
228 {
229     uint32_t invalCnt;	  /**< Invalid ICMPv4 Echo counter.                */
230     uint32_t nmVlanCnt;	  /**< Not My VLAN counter                         */
231     uint32_t nmIpCnt;	  /**< Not My IP counter		                   */
232     uint32_t arCnt;		  /**< Auto-Response counter                       */
233     uint32_t reserved1;	  /**< Reserved                                    */
234     uint32_t usadvertCnt; /**< Unsolicited Neighbor Advertisements counter */
235     uint32_t nmmcastCnt;  /**< Not My Multicast group counter              */
236     uint32_t nsllaCnt;    /**< No Source Link-Layer Address counter        */
237 } _PackedType t_NdStatistics;
238 
239 /**************************************************************************//**
240  @Description   Deep Sleep Auto Response ICMPv6 Descriptor
241                 0x0 0-15 Control bits [0-15]
242                 0x2 0-15 NumOfBindings Number of entries in the binding list.
243                 0x4 0-15 BindingsPointer Bindings Pointer. This points to an VLAN-IPv4 Addresses Bindings list.
244                 0x6 0-15
245                 0x8 0-15 StatisticsPointer Statistics Pointer. This field points to the ICMPv4 statistics data structure.
246                 0xA 0-15
247                 0xC 0-15 Reserved Reserved. Must be cleared.
248                 0xE 015
249 
250 *//***************************************************************************/
251 typedef _Packed struct
252 {
253     uint16_t control;                       /** Control bits [0-15].                */
254     uint16_t numOfBindings;                 /**< Number of VLAN-IPv6                */
255     uint32_t p_Bindings;	/**< VLAN-IPv4 Bindings table pointer.  */
256     uint32_t p_Statistics;   /**< Statistics Data Structure pointer. */
257 	uint32_t reserved1;                     /**< Reserved.                          */
258 } _PackedType t_DsarIcmpV6Descriptor;
259 
260 
261 /**************************************************************************//**
262  @Description   Internet Control Message Protocol (ICMPv6) Echo message header
263                 The fields names are taken from RFC 4443.
264 *//***************************************************************************/
265 /* 0                   1                   2                   3     */
266 /* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1   */
267 /* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
268 /* |     Type      |     Code      |          Checksum             | */
269 /* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
270 /* |           Identifier          |        Sequence Number        | */
271 /* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
272 /* |     Data ...                                                    */
273 /* +-+-+-+-+-                                                        */
274 typedef _Packed struct
275 {
276 	uint8_t  type;
277 	uint8_t  code;
278 	uint16_t checksum;
279 	uint16_t identifier;
280 	uint16_t sequenceNumber;
281 } _PackedType t_IcmpV6EchoHdr;
282 
283 /**************************************************************************//**
284  @Description   Internet Control Message Protocol (ICMPv6)
285                 Neighbor Solicitation/Advertisement header
286                 The fields names are taken from RFC 4861.
287                 The R/S/O fields are valid for Neighbor Advertisement only
288 *//***************************************************************************/
289 /* 0                   1                   2                   3
290  * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
291  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
292  * |     Type      |     Code      |          Checksum             |
293  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
294  * |R|S|O|                     Reserved                            |
295  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
296  * |                                                               |
297  * +                                                               +
298  * |                                                               |
299  * +                       Target Address                          +
300  * |                                                               |
301  * +                                                               +
302  * |                                                               |
303  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
304  * |   Options ...
305  * +-+-+-+-+-+-+-+-+-+-+-+-
306  *
307  * Options Format:
308  * 0                   1                   2                   3
309  * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
310  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
311  * |     Type      |    Length     |   Link-Layer Address ...      |
312  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
313  * |                  Link-Layer Address                           |
314  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
315 */
316 typedef _Packed struct
317 {
318 	uint8_t  type;
319 	uint8_t  code;
320 	uint16_t checksum;
321 	uint32_t router:1;
322 	uint32_t solicited:1;
323 	uint32_t override:1;
324 	uint32_t reserved:29;
325 	uint32_t targetAddr[4];
326 	uint8_t  optionType;
327 	uint8_t  optionLength;
328 	uint8_t  linkLayerAddr[6];
329 } _PackedType t_IcmpV6NdHdr;
330 
331 /**************************************************************************//**
332  @Description   Deep Sleep Auto Response ICMPv6 Descriptor
333                 0x0 0-15 Control bits [0-15]
334                 0x2 0-15 NumOfBindings Number of entries in the binding list.
335                 0x4 0-15 BindingsPointer Bindings Pointer. This points to an VLAN-IPv4 Addresses Bindings list.
336                 0x6 0-15
337                 0x8 0-15 StatisticsPointer Statistics Pointer. This field points to the ICMPv4 statistics data structure.
338                 0xA 0-15
339                 0xC 0-15 Reserved Reserved. Must be cleared.
340                 0xE 015
341 
342 *//***************************************************************************/
343 typedef _Packed struct
344 {
345     uint16_t control;                       /** Control bits [0-15].                    */
346     uint16_t numOfBindings;                 /**< Number of VLAN-IPv6                    */
347     uint32_t p_Bindings;	/**< VLAN-IPv4 Bindings table pointer.      */
348     uint32_t p_Statistics;   /**< Statistics Data Structure pointer.     */
349 	uint32_t solicitedAddr;                 /**< Solicited Node Multicast Group Address */
350 } _PackedType t_DsarNdDescriptor;
351 
352 /**************************************************************************//**
353 @Description    Deep Sleep Auto Response SNMP OIDs table entry
354 
355 *//***************************************************************************/
356 typedef struct {
357     uint16_t oidSize;     /**< Size in octets of the OID. */
358     uint16_t resSize;     /**< Size in octets of the value that is attached to the OID. */
359     uint32_t p_Oid;       /**< Pointer to the OID. OID is encoded in BER but type and length are excluded. */
360     uint32_t resValOrPtr; /**< Value (for up to 4 octets) or pointer to the Value. Encoded in BER. */
361     uint32_t reserved;
362 } t_OidsTblEntry;
363 
364 /**************************************************************************//**
365  @Description   Deep Sleep Auto Response SNMP IPv4 Addresses Table Entry
366                 Refer to the FMan Controller spec for more details.
367 *//***************************************************************************/
368 typedef struct
369 {
370     uint32_t ipv4Addr; /*!< 32 bit IPv4 Address. */
371     uint16_t vlanId;   /*!< 12 bits VLAN ID. The 4 left-most bits should be cleared                      */
372                        /*!< This field should be 0x0000 for an entry with no VLAN tag or a null VLAN ID. */
373     uint16_t reserved;
374 } t_DsarSnmpIpv4AddrTblEntry;
375 
376 /**************************************************************************//**
377  @Description   Deep Sleep Auto Response SNMP IPv6 Addresses Table Entry
378                 Refer to the FMan Controller spec for more details.
379 *//***************************************************************************/
380 #pragma pack(push,1)
381 typedef struct
382 {
383     uint32_t ipv6Addr[4];  /*!< 4 * 32 bit IPv6 Address.                                                     */
384     uint16_t vlanId;       /*!< 12 bits VLAN ID. The 4 left-most bits should be cleared                      */
385                            /*!< This field should be 0x0000 for an entry with no VLAN tag or a null VLAN ID. */
386     uint16_t reserved;
387 } t_DsarSnmpIpv6AddrTblEntry;
388 #pragma pack(pop)
389 
390 /**************************************************************************//**
391 @Description    Deep Sleep Auto Response SNMP statistics table
392 
393 *//***************************************************************************/
394 typedef struct {
395     uint32_t snmpErrCnt;  /**< Counts SNMP errors (wrong version, BER encoding, format). */
396     uint32_t snmpCommunityErrCnt; /**< Counts messages that were dropped due to insufficient permission. */
397     uint32_t snmpTotalDiscardCnt; /**< Counts any message that was dropped. */
398     uint32_t snmpGetReqCnt; /**< Counts the number of get-request messages */
399     uint32_t snmpGetNextReqCnt; /**< Counts the number of get-next-request messages */
400 } t_DsarSnmpStatistics;
401 
402 /**************************************************************************//**
403  @Description   Deep Sleep Auto Response SNMP Descriptor
404 
405 *//***************************************************************************/
406 typedef struct
407 {
408     uint16_t control;                          /**< Control bits [0-15]. */
409     uint16_t maxSnmpMsgLength;                 /**< Maximal allowed SNMP message length. */
410     uint16_t numOfIpv4Addresses;               /**< Number of entries in IPv4 addresses table. */
411     uint16_t numOfIpv6Addresses;               /**< Number of entries in IPv6 addresses table. */
412     uint32_t p_Ipv4AddrTbl; /**< Pointer to IPv4 addresses table. */
413     uint32_t p_Ipv6AddrTbl; /**< Pointer to IPv6 addresses table. */
414     uint32_t p_RdOnlyCommunityStr;             /**< Pointer to the Read Only Community String. */
415     uint32_t p_RdWrCommunityStr;               /**< Pointer to the Read Write Community String. */
416     uint32_t p_OidsTbl;                 /**< Pointer to OIDs table. */
417     uint32_t oidsTblSize;                      /**< Number of entries in OIDs table. */
418     uint32_t p_Statistics;                 /**< Pointer to SNMP statistics table. */
419 } t_DsarSnmpDescriptor;
420 
421 /**************************************************************************//**
422 @Description    Deep Sleep Auto Response (Common) Statistics
423 
424 *//***************************************************************************/
425 typedef _Packed struct {
426 	uint32_t dsarDiscarded;
427 	uint32_t dsarErrDiscarded;
428 	uint32_t dsarFragDiscarded;
429 	uint32_t dsarTunnelDiscarded;
430 	uint32_t dsarArpDiscarded;
431 	uint32_t dsarIpDiscarded;
432 	uint32_t dsarTcpDiscarded;
433 	uint32_t dsarUdpDiscarded;
434 	uint32_t dsarIcmpV6ChecksumErr; /* ICMPv6 Checksum Error counter */
435 	uint32_t dsarIcmpV6OtherType;   /* ICMPv6 'Other' type (not Echo or Neighbor Solicitaion/Advertisement counter */
436 	uint32_t dsarIcmpV4OtherType;   /* ICMPv4 'Other' type (not Echo) counter */
437 } _PackedType t_ArStatistics;
438 
439 
440 /**************************************************************************//**
441 @Description    Deep Sleep Auto Response TCP/UDP port filter table entry
442 
443 *//***************************************************************************/
444 typedef _Packed struct {
445 	uint32_t	Ports;
446 	uint32_t	PortsMask;
447 } _PackedType t_PortTblEntry;
448 
449 
450 
451 /**************************************************************************//**
452 @Description    Deep Sleep Auto Response Common Parameters Descriptor
453 
454 *//***************************************************************************/
455 typedef _Packed struct {
456 	uint8_t   arTxPort;            /* 0x00 0-7 Auto Response Transmit Port number            */
457 	uint8_t   controlBits;         /* 0x00 8-15 Auto Response control bits                   */
458 	uint16_t  res1;                /* 0x00 16-31 Reserved                                    */
459 	uint32_t  activeHPNIA;         /* 0x04 0-31 Active mode Hardware Parser NIA              */
460 	uint16_t  snmpPort;            /* 0x08 0-15 SNMP Port.                                   */
461 	uint8_t   macStationAddr[6];   /* 0x08 16-31 and 0x0C 0-31 MAC Station Address           */
462 	uint8_t   res2;				   /* 0x10 0-7 Reserved				    					 */
463 	uint8_t   filterControl;       /* 0x10 8-15 Filtering Control Bits.                      */
464 	uint16_t   tcpControlPass;	   /* 0x10 16-31 TCP control pass flags					     */
465 	uint8_t   ipProtocolTblSize;   /* 0x14 0-7 IP Protocol Table Size.                       */
466 	uint8_t   udpPortTblSize;      /* 0x14 8-15 UDP Port Table Size.                         */
467 	uint8_t   tcpPortTblSize;      /* 0x14 16-23 TCP Port Table Size.                        */
468 	uint8_t   res3;                /* 0x14 24-31 Reserved                                    */
469 	uint32_t  p_IpProtocolFiltTbl; /* 0x18 0-31 Pointer to IP Protocol Filter Table          */
470 	uint32_t p_UdpPortFiltTbl; /* 0x1C 0-31 Pointer to UDP Port Filter Table          */
471 	uint32_t p_TcpPortFiltTbl; /* 0x20 0-31 Pointer to TCP Port Filter Table          */
472 	uint32_t res4;                 /* 0x24 Reserved                                          */
473 	uint32_t p_ArpDescriptor;     /* 0x28 0-31 ARP Descriptor Pointer.                      */
474 	uint32_t p_NdDescriptor;      /* 0x2C 0-31 Neighbor Discovery Descriptor.               */
475 	uint32_t p_IcmpV4Descriptor;  /* 0x30 0-31 ICMPv4 Descriptor pointer.                   */
476 	uint32_t p_IcmpV6Descriptor;  /* 0x34 0-31 ICMPv6 Descriptor pointer.                   */
477 	uint32_t p_SnmpDescriptor;    /* 0x38 0-31 SNMP Descriptor pointer.                     */
478 	uint32_t p_ArStats;     /* 0x3C 0-31 Pointer to Auto Response Statistics          */
479 } _PackedType t_ArCommonDesc;
480 
481 #if defined(__MWERKS__) && !defined(__GNUC__)
482 #pragma pack(pop)
483 #endif /* defined(__MWERKS__) && ... */
484 
485 /* t_ArCommonDesc.filterControl bits */
486 #define	IP_PROT_TBL_PASS_MASK	0x08
487 #define UDP_PORT_TBL_PASS_MASK	0x04
488 #define TCP_PORT_TBL_PASS_MASK	0x02
489 
490 /* Offset of TCF flags within TCP packet */
491 #define TCP_FLAGS_OFFSET 12
492 
493 
494 #endif /* __FM_PORT_DSAR_H_ */
495