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