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