]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/Ip6Dxe/Ip6Mld.h
BaseTools/Capsule: Do not support -o with --dump-info
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6Mld.h
CommitLineData
a3bcde70
HT
1/** @file\r
2 Multicast Listener Discovery support routines.\r
3\r
4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php.\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef __EFI_IP6_MLD_H__\r
17#define __EFI_IP6_MLD_H__\r
18\r
19#define IP6_UNSOLICITED_REPORT_INTERVAL 10\r
20\r
21#pragma pack(1)\r
22typedef struct {\r
23 IP6_ICMP_HEAD Head;\r
24 UINT16 MaxRespDelay;\r
25 UINT16 Reserved;\r
26 EFI_IPv6_ADDRESS Group;\r
27} IP6_MLD_HEAD;\r
28#pragma pack()\r
29\r
30//\r
31// The status of multicast group. It isn't necessary to maintain\r
32// explicit state of host state diagram. A group with finity\r
33// DelayTime (less than 0xffffffff) is in "delaying listener" state. otherwise, it is in\r
34// "idle listener" state.\r
35//\r
36typedef struct {\r
37 LIST_ENTRY Link;\r
38 INTN RefCnt;\r
39 EFI_IPv6_ADDRESS Address;\r
40 UINT32 DelayTimer;\r
41 BOOLEAN SendByUs;\r
42 EFI_MAC_ADDRESS Mac;\r
43} IP6_MLD_GROUP;\r
44\r
45//\r
46// The MLD status. Each IP6 service instance has a MLD_SERVICE_DATA\r
47// attached. The Mldv1QuerySeen remember whether the server on this\r
48// connected network is v1 or v2.\r
49//\r
50typedef struct {\r
51 INTN Mldv1QuerySeen;\r
52 LIST_ENTRY Groups;\r
53} IP6_MLD_SERVICE_DATA;\r
54\r
55/**\r
56 Search a IP6_MLD_GROUP list entry node from a list array.\r
57\r
58 @param[in] IpSb Points to an IP6 service binding instance.\r
59 @param[in] MulticastAddr The IPv6 multicast address to be searched.\r
60\r
61 @return The found IP6_ML_GROUP list entry or NULL.\r
62\r
63**/\r
64IP6_MLD_GROUP *\r
65Ip6FindMldEntry (\r
66 IN IP6_SERVICE *IpSb,\r
67 IN EFI_IPv6_ADDRESS *MulticastAddr\r
68 );\r
69\r
70/**\r
71 Init the MLD data of the IP6 service instance, configure\r
72 MNP to receive ALL SYSTEM multicasts.\r
73\r
74 @param[in] IpSb The IP6 service whose MLD is to be initialized.\r
75\r
76 @retval EFI_OUT_OF_RESOURCES There are not sufficient resources to complete the\r
77 operation.\r
78 @retval EFI_SUCCESS The MLD module successfully initialized.\r
79\r
80**/\r
81EFI_STATUS\r
82Ip6InitMld (\r
83 IN IP6_SERVICE *IpSb\r
84 );\r
85\r
86/**\r
87 Join the multicast group on behalf of this IP6 service binding instance.\r
88\r
89 @param[in] IpSb The IP6 service binding instance.\r
90 @param[in] Interface Points to an IP6_INTERFACE structure.\r
91 @param[in] Address The group address to join.\r
92\r
93 @retval EFI_SUCCESS Successfully joined the multicast group.\r
94 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
95 @retval Others Failed to join the multicast group.\r
96\r
97**/\r
98EFI_STATUS\r
99Ip6JoinGroup (\r
100 IN IP6_SERVICE *IpSb,\r
101 IN IP6_INTERFACE *Interface,\r
102 IN EFI_IPv6_ADDRESS *Address\r
103 );\r
104\r
105/**\r
106 Leave the IP6 multicast group.\r
107\r
108 @param[in] IpSb The IP6 service binding instance.\r
109 @param[in] Address The group address to leave.\r
110\r
111 @retval EFI_NOT_FOUND The IP6 service instance isn't in the group.\r
112 @retval EFI_SUCCESS Successfully left the multicast group.\r
113 @retval Others Failed to leave the multicast group.\r
114\r
115**/\r
116EFI_STATUS\r
117Ip6LeaveGroup (\r
118 IN IP6_SERVICE *IpSb,\r
119 IN EFI_IPv6_ADDRESS *Address\r
120 );\r
121\r
122/**\r
123 Worker function for EfiIp6Groups(). The caller\r
124 should verify that the parameters are valid.\r
125\r
126 @param[in] IpInstance The IP6 child to change the setting.\r
127 @param[in] JoinFlag TRUE to join the group, otherwise leave it.\r
128 @param[in] GroupAddress The target group address. If NULL, leave all\r
129 the group addresses.\r
130\r
131 @retval EFI_ALREADY_STARTED Wants to join the group, but is already a member of it.\r
132 @retval EFI_OUT_OF_RESOURCES Failed to allocate some resources.\r
133 @retval EFI_DEVICE_ERROR Failed to set the group configuraton.\r
134 @retval EFI_SUCCESS Successfully updated the group setting.\r
135 @retval EFI_NOT_FOUND Tried to leave a group of whom it isn't a member.\r
136\r
137**/\r
138EFI_STATUS\r
139Ip6Groups (\r
140 IN IP6_PROTOCOL *IpInstance,\r
141 IN BOOLEAN JoinFlag,\r
142 IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL\r
143 );\r
144\r
145/**\r
146 Process the Multicast Listener Query message.\r
147\r
148 @param[in] IpSb The IP service that received the packet.\r
149 @param[in] Head The IP head of the MLD query packet.\r
150 @param[in] Packet The content of the MLD query packet with IP head\r
151 removed.\r
152\r
153 @retval EFI_SUCCESS The MLD query packet processed successfully.\r
154 @retval EFI_INVALID_PARAMETER The packet is invalid.\r
155 @retval Others Failed to process the packet.\r
156\r
157**/\r
158EFI_STATUS\r
159Ip6ProcessMldQuery (\r
160 IN IP6_SERVICE *IpSb,\r
161 IN EFI_IP6_HEADER *Head,\r
162 IN NET_BUF *Packet\r
163 );\r
164\r
165/**\r
166 Process the Multicast Listener Report message.\r
167\r
168 @param[in] IpSb The IP service that received the packet.\r
169 @param[in] Head The IP head of the MLD report packet.\r
170 @param[in] Packet The content of the MLD report packet with IP head\r
171 removed.\r
172\r
173 @retval EFI_SUCCESS The MLD report packet processed successfully.\r
174 @retval EFI_INVALID_PARAMETER The packet is invalid.\r
175\r
176**/\r
177EFI_STATUS\r
178Ip6ProcessMldReport (\r
179 IN IP6_SERVICE *IpSb,\r
180 IN EFI_IP6_HEADER *Head,\r
181 IN NET_BUF *Packet\r
182 );\r
183\r
184\r
185/**\r
186 The heartbeat timer of the MLD module. It sends out solicited MLD report when\r
187 DelayTimer expires.\r
188\r
189 @param[in] IpSb The IP6 service binding instance.\r
190\r
191**/\r
192VOID\r
193Ip6MldTimerTicking (\r
194 IN IP6_SERVICE *IpSb\r
195 );\r
196\r
197#endif\r
198\r