- supported.conf: Added sparse_keymap (eeepc_laptop depends on it)
[linux-flexiantxendom0-3.2.10.git] / drivers / staging / rt3090 / igmp_snoop.h
1 /*
2  *************************************************************************
3  * Ralink Tech Inc.
4  * 5F., No.36, Taiyuan St., Jhubei City,
5  * Hsinchu County 302,
6  * Taiwan, R.O.C.
7  *
8  * (c) Copyright 2002-2007, Ralink Technology, Inc.
9  *
10  * This program is free software; you can redistribute it and/or modify  *
11  * it under the terms of the GNU General Public License as published by  *
12  * the Free Software Foundation; either version 2 of the License, or     *
13  * (at your option) any later version.                                   *
14  *                                                                       *
15  * This program is distributed in the hope that it will be useful,       *
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
18  * GNU General Public License for more details.                          *
19  *                                                                       *
20  * You should have received a copy of the GNU General Public License     *
21  * along with this program; if not, write to the                         *
22  * Free Software Foundation, Inc.,                                       *
23  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
24  *                                                                       *
25  *************************************************************************
26
27     Module Name:
28     igmp_snoop.h
29
30     Abstract:
31     Miniport generic portion header file
32
33     Revision History:
34     Who         When          What
35     --------    ----------    ----------------------------------------------
36 */
37
38
39 #ifndef __RTMP_IGMP_SNOOP_H__
40 #define __RTMP_IGMP_SNOOP_H__
41
42 #include "link_list.h"
43
44 #define IGMP_PROTOCOL_DESCRIPTOR        0x02
45 #define IGMP_V1_MEMBERSHIP_REPORT       0x12
46 #define IGMP_V2_MEMBERSHIP_REPORT       0x16
47 #define IGMP_LEAVE_GROUP                        0x17
48 #define IGMP_V3_MEMBERSHIP_REPORT       0x22
49
50 #define MLD_V1_LISTENER_REPORT          131
51 #define MLD_V1_LISTENER_DONE            132
52 #define MLD_V2_LISTERNER_REPORT         143
53
54 #define IGMPMAC_TB_ENTRY_AGEOUT_TIME 120 * OS_HZ
55
56 #define MULTICAST_ADDR_HASH_INDEX(Addr)      (MAC_ADDR_HASH(Addr) % (MAX_LEN_OF_MULTICAST_FILTER_HASH_TABLE))
57
58 #define IS_MULTICAST_MAC_ADDR(Addr)                     ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff))
59 #define IS_BROADCAST_MAC_ADDR(Addr)                     ((((Addr[0]) & 0xff) == 0xff))
60
61 VOID MulticastFilterTableInit(
62         IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable);
63
64 VOID MultiCastFilterTableReset(
65         IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable);
66
67 BOOLEAN MulticastFilterTableInsertEntry(
68         IN PRTMP_ADAPTER pAd,
69         IN PUCHAR pGrpId,
70         IN PUCHAR pMemberAddr,
71         IN PNET_DEV dev,
72         IN MulticastFilterEntryType type);
73
74 BOOLEAN MulticastFilterTableDeleteEntry(
75         IN PRTMP_ADAPTER pAd,
76         IN PUCHAR pGrpId,
77         IN PUCHAR pMemberAddr,
78         IN PNET_DEV dev);
79
80 PMULTICAST_FILTER_TABLE_ENTRY MulticastFilterTableLookup(
81         IN PMULTICAST_FILTER_TABLE pMulticastFilterTable,
82         IN PUCHAR pAddr,
83         IN PNET_DEV dev);
84
85 BOOLEAN isIgmpPkt(
86         IN PUCHAR pDstMacAddr,
87         IN PUCHAR pIpHeader);
88
89 VOID IGMPSnooping(
90         IN PRTMP_ADAPTER pAd,
91         IN PUCHAR pDstMacAddr,
92         IN PUCHAR pSrcMacAddr,
93         IN PUCHAR pIpHeader,
94         IN PNET_DEV pDev);
95
96 BOOLEAN isMldPkt(
97         IN PUCHAR pDstMacAddr,
98         IN PUCHAR pIpHeader,
99         OUT UINT8 *pProtoType,
100         OUT PUCHAR *pMldHeader);
101
102 VOID MLDSnooping(
103         IN PRTMP_ADAPTER pAd,
104         IN PUCHAR pDstMacAddr,
105         IN PUCHAR pSrcMacAddr,
106         IN PUCHAR pIpHeader,
107         IN PNET_DEV pDev);
108
109 UCHAR IgmpMemberCnt(
110         IN PLIST_HEADER pList);
111
112 VOID IgmpGroupDelMembers(
113         IN PRTMP_ADAPTER pAd,
114         IN PUCHAR pMemberAddr,
115         IN PNET_DEV pDev);
116
117 INT Set_IgmpSn_Enable_Proc(
118         IN PRTMP_ADAPTER pAd,
119         IN PSTRING arg);
120
121 INT Set_IgmpSn_AddEntry_Proc(
122         IN PRTMP_ADAPTER pAd,
123         IN PSTRING arg);
124
125 INT Set_IgmpSn_DelEntry_Proc(
126         IN PRTMP_ADAPTER pAd,
127         IN PSTRING arg);
128
129 INT Set_IgmpSn_TabDisplay_Proc(
130         IN PRTMP_ADAPTER pAd,
131         IN PSTRING arg);
132
133 void rtmp_read_igmp_snoop_from_file(
134         IN  PRTMP_ADAPTER pAd,
135         PSTRING tmpbuf,
136         PSTRING buffer);
137
138 NDIS_STATUS IgmpPktInfoQuery(
139         IN PRTMP_ADAPTER pAd,
140         IN PUCHAR pSrcBufVA,
141         IN PNDIS_PACKET pPacket,
142         IN UCHAR apidx,
143         OUT BOOLEAN *pInIgmpGroup,
144         OUT PMULTICAST_FILTER_TABLE_ENTRY *ppGroupEntry);
145
146 NDIS_STATUS IgmpPktClone(
147         IN PRTMP_ADAPTER pAd,
148         IN PNDIS_PACKET pPacket,
149         IN UCHAR QueIdx,
150         IN PMULTICAST_FILTER_TABLE_ENTRY pGroupEntry);
151
152 #endif /* __RTMP_IGMP_SNOOP_H__ */