+++ /dev/null
-/** @file\r
-\r
-Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#ifndef __EFI_IP4_IGMP_H__\r
-#define __EFI_IP4_IGMP_H__\r
-\r
-//\r
-// IGMP message type\r
-//\r
-#define IGMP_MEMBERSHIP_QUERY 0x11\r
-#define IGMP_V1_MEMBERSHIP_REPORT 0x12\r
-#define IGMP_V2_MEMBERSHIP_REPORT 0x16\r
-#define IGMP_LEAVE_GROUP 0x17\r
-\r
-#define IGMP_V1ROUTER_PRESENT 400\r
-#define IGMP_UNSOLICIATED_REPORT 10\r
-\r
-#pragma pack(1)\r
-typedef struct {\r
- UINT8 Type;\r
- UINT8 MaxRespTime;\r
- UINT16 Checksum;\r
- IP4_ADDR Group;\r
-} IGMP_HEAD;\r
-#pragma pack()\r
-\r
-///\r
-/// The status of multicast group. It isn't necessary to maintain\r
-/// explicit state of host state diagram. A group with non-zero\r
-/// DelayTime is in "delaying member" state. otherwise, it is in\r
-/// "idle member" state.\r
-///\r
-typedef struct {\r
- LIST_ENTRY Link;\r
- INTN RefCnt;\r
- IP4_ADDR Address;\r
- INTN DelayTime;\r
- BOOLEAN ReportByUs;\r
- EFI_MAC_ADDRESS Mac;\r
-} IGMP_GROUP;\r
-\r
-///\r
-/// The IGMP status. Each IP4 service instance has a IGMP_SERVICE_DATA\r
-/// attached. The Igmpv1QuerySeen remember whether the server on this\r
-/// connected network is v1 or v2.\r
-///\r
-typedef struct {\r
- INTN Igmpv1QuerySeen;\r
- LIST_ENTRY Groups;\r
-} IGMP_SERVICE_DATA;\r
-\r
-/**\r
- Init the IGMP control data of the IP4 service instance, configure\r
- MNP to receive ALL SYSTEM multicast.\r
-\r
- @param[in, out] IpSb The IP4 service whose IGMP is to be initialized.\r
-\r
- @retval EFI_SUCCESS IGMP of the IpSb is successfully initialized.\r
- @retval EFI_OUT_OF_RESOURCES Failed to allocate resource to initialize IGMP.\r
- @retval Others Failed to initialize the IGMP of IpSb.\r
-\r
-**/\r
-EFI_STATUS\r
-Ip4InitIgmp (\r
- IN OUT IP4_SERVICE *IpSb\r
- );\r
-\r
-/**\r
- Join the multicast group on behalf of this IP4 child\r
-\r
- @param[in] IpInstance The IP4 child that wants to join the group.\r
- @param[in] Address The group to join.\r
-\r
- @retval EFI_SUCCESS Successfully join the multicast group.\r
- @retval EFI_OUT_OF_RESOURCES Failed to allocate resources.\r
- @retval Others Failed to join the multicast group.\r
-\r
-**/\r
-EFI_STATUS\r
-Ip4JoinGroup (\r
- IN IP4_PROTOCOL *IpInstance,\r
- IN IP4_ADDR Address\r
- );\r
-\r
-/**\r
- Leave the IP4 multicast group on behalf of IpInstance.\r
-\r
- @param[in] IpInstance The IP4 child that wants to leave the group\r
- address.\r
- @param[in] Address The group address to leave.\r
-\r
- @retval EFI_NOT_FOUND The IP4 service instance isn't in the group.\r
- @retval EFI_SUCCESS Successfully leave the multicast group.\r
- @retval Others Failed to leave the multicast group.\r
-\r
-**/\r
-EFI_STATUS\r
-Ip4LeaveGroup (\r
- IN IP4_PROTOCOL *IpInstance,\r
- IN IP4_ADDR Address\r
- );\r
-\r
-/**\r
- Handle the received IGMP message for the IP4 service instance.\r
-\r
- @param[in] IpSb The IP4 service instance that received the message.\r
- @param[in] Head The IP4 header of the received message.\r
- @param[in] Packet The IGMP message, without IP4 header.\r
-\r
- @retval EFI_INVALID_PARAMETER The IGMP message is malformated.\r
- @retval EFI_SUCCESS The IGMP message is successfully processed.\r
-\r
-**/\r
-EFI_STATUS\r
-Ip4IgmpHandle (\r
- IN IP4_SERVICE *IpSb,\r
- IN IP4_HEAD *Head,\r
- IN NET_BUF *Packet\r
- );\r
-\r
-/**\r
- The periodical timer function for IGMP. It does the following\r
- things:\r
- 1. Decrease the Igmpv1QuerySeen to make it possible to refresh\r
- the IGMP server type.\r
- 2. Decrease the report timer for each IGMP group in "delaying\r
- member" state.\r
-\r
- @param[in] IpSb The IP4 service instance that is ticking.\r
-\r
-**/\r
-VOID\r
-Ip4IgmpTicking (\r
- IN IP4_SERVICE *IpSb\r
- );\r
-\r
-/**\r
- Add a group address to the array of group addresses.\r
- The caller should make sure that no duplicated address\r
- existed in the array. Although the function doesn't\r
- assume the byte order of the both Source and Addr, the\r
- network byte order is used by the caller.\r
-\r
- @param[in] Source The array of group addresses to add to.\r
- @param[in] Count The number of group addresses in the Source.\r
- @param[in] Addr The IP4 multicast address to add.\r
-\r
- @return NULL if failed to allocate memory for the new groups,\r
- otherwise the new combined group addresses.\r
-\r
-**/\r
-IP4_ADDR *\r
-Ip4CombineGroups (\r
- IN IP4_ADDR *Source,\r
- IN UINT32 Count,\r
- IN IP4_ADDR Addr\r
- );\r
-\r
-/**\r
- Remove a group address from the array of group addresses.\r
- Although the function doesn't assume the byte order of the\r
- both Groups and Addr, the network byte order is used by\r
- the caller.\r
-\r
- @param Groups The array of group addresses to remove from.\r
- @param Count The number of group addresses in the Groups.\r
- @param Addr The IP4 multicast address to remove.\r
-\r
- @return The nubmer of group addresses in the Groups after remove.\r
- It is Count if the Addr isn't in the Groups.\r
-\r
-**/\r
-INTN\r
-Ip4RemoveGroupAddr (\r
- IN OUT IP4_ADDR *Groups,\r
- IN UINT32 Count,\r
- IN IP4_ADDR Addr\r
- );\r
-\r
-/**\r
- Find the IGMP_GROUP structure which contains the status of multicast\r
- group Address in this IGMP control block\r
-\r
- @param[in] IgmpCtrl The IGMP control block to search from.\r
- @param[in] Address The multicast address to search.\r
-\r
- @return NULL if the multicast address isn't in the IGMP control block. Otherwise\r
- the point to the IGMP_GROUP which contains the status of multicast group\r
- for Address.\r
-\r
-**/\r
-IGMP_GROUP *\r
-Ip4FindGroup (\r
- IN IGMP_SERVICE_DATA *IgmpCtrl,\r
- IN IP4_ADDR Address\r
- );\r
-#endif\r