Data Structures | |
struct | IP6_MLD_HEAD |
struct | IP6_MLD_GROUP |
struct | IP6_MLD_SERVICE_DATA |
Defines | |
#define | IP6_UNSOLICITED_REPORT_INTERVAL 10 |
Functions | |
IP6_MLD_GROUP * | Ip6FindMldEntry (IN IP6_SERVICE *IpSb, IN EFI_IPv6_ADDRESS *MulticastAddr) |
EFI_STATUS | Ip6InitMld (IN IP6_SERVICE *IpSb) |
EFI_STATUS | Ip6JoinGroup (IN IP6_SERVICE *IpSb, IN IP6_INTERFACE *Interface, IN EFI_IPv6_ADDRESS *Address) |
EFI_STATUS | Ip6LeaveGroup (IN IP6_SERVICE *IpSb, IN EFI_IPv6_ADDRESS *Address) |
EFI_STATUS | Ip6Groups (IN IP6_PROTOCOL *IpInstance, IN BOOLEAN JoinFlag, IN EFI_IPv6_ADDRESS *GroupAddress) |
EFI_STATUS | Ip6ProcessMldQuery (IN IP6_SERVICE *IpSb, IN EFI_IP6_HEADER *Head, IN NET_BUF *Packet) |
EFI_STATUS | Ip6ProcessMldReport (IN IP6_SERVICE *IpSb, IN EFI_IP6_HEADER *Head, IN NET_BUF *Packet) |
VOID | Ip6MldTimerTicking (IN IP6_SERVICE *IpSb) |
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define IP6_UNSOLICITED_REPORT_INTERVAL 10 |
Referenced by Ip6JoinGroup().
IP6_MLD_GROUP* Ip6FindMldEntry | ( | IN IP6_SERVICE * | IpSb, | |
IN EFI_IPv6_ADDRESS * | MulticastAddr | |||
) |
Search a IP6_MLD_GROUP list entry node from a list array.
[in] | IpSb | Points to an IP6 service binding instance. |
[in] | MulticastAddr | The IPv6 multicast address to be searched. |
[in] | IpSb | Points to IP6 service binding instance. |
[in] | MulticastAddr | The IPv6 multicast address to be searched. |
References IP6_MLD_GROUP::Address, and IP6_SERVICE_SIGNATURE.
Referenced by Ip6JoinGroup(), Ip6LeaveGroup(), Ip6PreProcessPacket(), Ip6ProcessMldQuery(), and Ip6ProcessMldReport().
EFI_STATUS Ip6Groups | ( | IN IP6_PROTOCOL * | IpInstance, | |
IN BOOLEAN | JoinFlag, | |||
IN EFI_IPv6_ADDRESS * | GroupAddress | |||
) |
Worker function for EfiIp6Groups(). The caller should verify that the parameters are valid.
[in] | IpInstance | The IP6 child to change the setting. |
[in] | JoinFlag | TRUE to join the group, otherwise leave it. |
[in] | GroupAddress | The target group address. If NULL, leave all the group addresses. |
EFI_ALREADY_STARTED | Wants to join the group, but is already a member of it. | |
EFI_OUT_OF_RESOURCES | Failed to allocate some resources. | |
EFI_DEVICE_ERROR | Failed to set the group configuraton. | |
EFI_SUCCESS | Successfully updated the group setting. | |
EFI_NOT_FOUND | Tried to leave a group of whom it isn't a member. |
[in] | IpInstance | The IP6 child to change the setting. |
[in] | JoinFlag | TRUE to join the group, otherwise leave it. |
[in] | GroupAddress | The target group address. If NULL, leave all the group addresses. |
EFI_ALREADY_STARTED | Wants to join the group, but is already a member of it | |
EFI_OUT_OF_RESOURCES | Failed to allocate sufficient resources. | |
EFI_DEVICE_ERROR | Failed to set the group configuraton. | |
EFI_SUCCESS | Successfully updated the group setting. | |
EFI_NOT_FOUND | Try to leave the group which it isn't a member. |
References Ip6CombineGroups(), Ip6JoinGroup(), Ip6LeaveGroup(), and Ip6RemoveGroup().
Referenced by EfiIp6Groups(), and Ip6CleanProtocol().
EFI_STATUS Ip6InitMld | ( | IN IP6_SERVICE * | IpSb | ) |
Init the MLD data of the IP6 service instance, configure MNP to receive ALL SYSTEM multicasts.
[in] | IpSb | The IP6 service whose MLD is to be initialized. |
EFI_OUT_OF_RESOURCES | There are not sufficient resources to complete the operation. | |
EFI_SUCCESS | The MLD module successfully initialized. |
[in] | IpSb | The IP6 service whose MLD is to be initialized. |
EFI_OUT_OF_RESOURCES | There are not sufficient resourcet to complete the operation. | |
EFI_SUCCESS | The MLD module successfully initialized. |
References IP6_INFINIT_LIFETIME, IP6_LINK_LOCAL_SCOPE, Ip6CreateMldEntry(), Ip6GetMulticastMac(), Ip6SetToAllNodeMulticast(), IP6_MLD_GROUP::Link, and IP6_MLD_GROUP::Mac.
Referenced by Ip6CreateService().
EFI_STATUS Ip6JoinGroup | ( | IN IP6_SERVICE * | IpSb, | |
IN IP6_INTERFACE * | Interface, | |||
IN EFI_IPv6_ADDRESS * | Address | |||
) |
Join the multicast group on behalf of this IP6 service binding instance.
[in] | IpSb | The IP6 service binding instance. |
[in] | Interface | Points to an IP6_INTERFACE structure. |
[in] | Address | The group address to join. |
EFI_SUCCESS | Successfully joined the multicast group. | |
EFI_OUT_OF_RESOURCES | Failed to allocate resources. | |
Others | Failed to join the multicast group. |
[in] | IpSb | The IP6 service binding instance. |
[in] | Interface | Points to an IP6_INTERFACE structure. |
[in] | Address | The group address to join. |
EFI_SUCCESS | Successfully join the multicast group. | |
EFI_OUT_OF_RESOURCES | Failed to allocate resources. | |
Others | Failed to join the multicast group. |
References IP6_UNSOLICITED_REPORT_INTERVAL, Ip6CreateMldEntry(), Ip6FindMldEntry(), Ip6GetMulticastMac(), Ip6SendMldReport(), IP6_MLD_GROUP::Link, IP6_MLD_GROUP::Mac, IP6_MLD_GROUP::RefCnt, and IP6_MLD_GROUP::SendByUs.
Referenced by Ip6Groups(), and Ip6InitDADProcess().
EFI_STATUS Ip6LeaveGroup | ( | IN IP6_SERVICE * | IpSb, | |
IN EFI_IPv6_ADDRESS * | Address | |||
) |
Leave the IP6 multicast group.
[in] | IpSb | The IP6 service binding instance. |
[in] | Address | The group address to leave. |
EFI_NOT_FOUND | The IP6 service instance isn't in the group. | |
EFI_SUCCESS | Successfully left the multicast group. | |
Others | Failed to leave the multicast group. |
[in] | IpSb | The IP6 service binding instance. |
[in] | Address | The group address to leave. |
EFI_NOT_FOUND | The IP6 service instance isn't in the group. | |
EFI_SUCCESS | Successfully leave the multicast group.. | |
Others | Failed to leave the multicast group. |
References Ip6FindMac(), Ip6FindMldEntry(), Ip6SendMldDone(), IP6_MLD_GROUP::Link, IP6_MLD_GROUP::Mac, IP6_MLD_GROUP::RefCnt, and IP6_MLD_GROUP::SendByUs.
Referenced by Ip6CleanService(), Ip6Groups(), Ip6OnDADFinished(), and Ip6RemoveAddr().
VOID Ip6MldTimerTicking | ( | IN IP6_SERVICE * | IpSb | ) |
The heartbeat timer of the MLD module. It sends out solicited MLD report when DelayTimer expires.
[in] | IpSb | The IP6 service binding instance. |
[in] | IpSb | The IP6 service binding instance. |
References IP6_MLD_GROUP::Address, IP6_MLD_GROUP::DelayTimer, and Ip6SendMldReport().
Referenced by Ip6TimerTicking().
EFI_STATUS Ip6ProcessMldQuery | ( | IN IP6_SERVICE * | IpSb, | |
IN EFI_IP6_HEADER * | Head, | |||
IN NET_BUF * | Packet | |||
) |
Process the Multicast Listener Query message.
[in] | IpSb | The IP service that received the packet. |
[in] | Head | The IP head of the MLD query packet. |
[in] | Packet | The content of the MLD query packet with IP head removed. |
EFI_SUCCESS | The MLD query packet processed successfully. | |
EFI_INVALID_PARAMETER | The packet is invalid. | |
Others | Failed to process the packet. |
References IP6_MLD_GROUP::Address, IP6_LINK_LOCAL_SCOPE, Ip6FindMldEntry(), Ip6SetToAllNodeMulticast(), and Ip6UpdateDelayTimer().
Referenced by Ip6ProcessIcmpInformation().
EFI_STATUS Ip6ProcessMldReport | ( | IN IP6_SERVICE * | IpSb, | |
IN EFI_IP6_HEADER * | Head, | |||
IN NET_BUF * | Packet | |||
) |
Process the Multicast Listener Report message.
[in] | IpSb | The IP service that received the packet. |
[in] | Head | The IP head of the MLD report packet. |
[in] | Packet | The content of the MLD report packet with IP head removed. |
EFI_SUCCESS | The MLD report packet processed successfully. | |
EFI_INVALID_PARAMETER | The packet is invalid. |
References IP6_MLD_GROUP::DelayTimer, Ip6FindMldEntry(), and IP6_MLD_GROUP::SendByUs.
Referenced by Ip6ProcessIcmpInformation().