123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /** @file
- Multicast Listener Discovery support routines.
- Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef __EFI_IP6_MLD_H__
- #define __EFI_IP6_MLD_H__
- #define IP6_UNSOLICITED_REPORT_INTERVAL 10
- #pragma pack(1)
- typedef struct {
- IP6_ICMP_HEAD Head;
- UINT16 MaxRespDelay;
- UINT16 Reserved;
- EFI_IPv6_ADDRESS Group;
- } IP6_MLD_HEAD;
- #pragma pack()
- //
- // The status of multicast group. It isn't necessary to maintain
- // explicit state of host state diagram. A group with finity
- // DelayTime (less than 0xffffffff) is in "delaying listener" state. otherwise, it is in
- // "idle listener" state.
- //
- typedef struct {
- LIST_ENTRY Link;
- INTN RefCnt;
- EFI_IPv6_ADDRESS Address;
- UINT32 DelayTimer;
- BOOLEAN SendByUs;
- EFI_MAC_ADDRESS Mac;
- } IP6_MLD_GROUP;
- //
- // The MLD status. Each IP6 service instance has a MLD_SERVICE_DATA
- // attached. The Mldv1QuerySeen remember whether the server on this
- // connected network is v1 or v2.
- //
- typedef struct {
- INTN Mldv1QuerySeen;
- LIST_ENTRY Groups;
- } IP6_MLD_SERVICE_DATA;
- /**
- Search a IP6_MLD_GROUP list entry node from a list array.
- @param[in] IpSb Points to an IP6 service binding instance.
- @param[in] MulticastAddr The IPv6 multicast address to be searched.
- @return The found IP6_ML_GROUP list entry or NULL.
- **/
- IP6_MLD_GROUP *
- Ip6FindMldEntry (
- IN IP6_SERVICE *IpSb,
- IN EFI_IPv6_ADDRESS *MulticastAddr
- );
- /**
- Init the MLD data of the IP6 service instance, configure
- MNP to receive ALL SYSTEM multicasts.
- @param[in] IpSb The IP6 service whose MLD is to be initialized.
- @retval EFI_OUT_OF_RESOURCES There are not sufficient resources to complete the
- operation.
- @retval EFI_SUCCESS The MLD module successfully initialized.
- **/
- EFI_STATUS
- Ip6InitMld (
- IN IP6_SERVICE *IpSb
- );
- /**
- Join the multicast group on behalf of this IP6 service binding instance.
- @param[in] IpSb The IP6 service binding instance.
- @param[in] Interface Points to an IP6_INTERFACE structure.
- @param[in] Address The group address to join.
- @retval EFI_SUCCESS Successfully joined the multicast group.
- @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.
- @retval Others Failed to join the multicast group.
- **/
- EFI_STATUS
- Ip6JoinGroup (
- IN IP6_SERVICE *IpSb,
- IN IP6_INTERFACE *Interface,
- IN EFI_IPv6_ADDRESS *Address
- );
- /**
- Leave the IP6 multicast group.
- @param[in] IpSb The IP6 service binding instance.
- @param[in] Address The group address to leave.
- @retval EFI_NOT_FOUND The IP6 service instance isn't in the group.
- @retval EFI_SUCCESS Successfully left the multicast group.
- @retval Others Failed to leave the multicast group.
- **/
- EFI_STATUS
- Ip6LeaveGroup (
- IN IP6_SERVICE *IpSb,
- IN EFI_IPv6_ADDRESS *Address
- );
- /**
- Worker function for EfiIp6Groups(). The caller
- should verify that the parameters are valid.
- @param[in] IpInstance The IP6 child to change the setting.
- @param[in] JoinFlag TRUE to join the group, otherwise leave it.
- @param[in] GroupAddress The target group address. If NULL, leave all
- the group addresses.
- @retval EFI_ALREADY_STARTED Wants to join the group, but is already a member of it.
- @retval EFI_OUT_OF_RESOURCES Failed to allocate some resources.
- @retval EFI_DEVICE_ERROR Failed to set the group configuration.
- @retval EFI_SUCCESS Successfully updated the group setting.
- @retval EFI_NOT_FOUND Tried to leave a group of whom it isn't a member.
- **/
- EFI_STATUS
- Ip6Groups (
- IN IP6_PROTOCOL *IpInstance,
- IN BOOLEAN JoinFlag,
- IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL
- );
- /**
- Process the Multicast Listener Query message.
- @param[in] IpSb The IP service that received the packet.
- @param[in] Head The IP head of the MLD query packet.
- @param[in] Packet The content of the MLD query packet with IP head
- removed.
- @retval EFI_SUCCESS The MLD query packet processed successfully.
- @retval EFI_INVALID_PARAMETER The packet is invalid.
- @retval Others Failed to process the packet.
- **/
- EFI_STATUS
- Ip6ProcessMldQuery (
- IN IP6_SERVICE *IpSb,
- IN EFI_IP6_HEADER *Head,
- IN NET_BUF *Packet
- );
- /**
- Process the Multicast Listener Report message.
- @param[in] IpSb The IP service that received the packet.
- @param[in] Head The IP head of the MLD report packet.
- @param[in] Packet The content of the MLD report packet with IP head
- removed.
- @retval EFI_SUCCESS The MLD report packet processed successfully.
- @retval EFI_INVALID_PARAMETER The packet is invalid.
- **/
- EFI_STATUS
- Ip6ProcessMldReport (
- IN IP6_SERVICE *IpSb,
- IN EFI_IP6_HEADER *Head,
- IN NET_BUF *Packet
- );
- /**
- The heartbeat timer of the MLD module. It sends out solicited MLD report when
- DelayTimer expires.
- @param[in] IpSb The IP6 service binding instance.
- **/
- VOID
- Ip6MldTimerTicking (
- IN IP6_SERVICE *IpSb
- );
- #endif
|