X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FNetwork%2FIp4Dxe%2FIp4Igmp.h;h=0cc9445944415a0fbf041693d2fd1c4ee8a11c37;hp=6c48d6aca879cae045b241a17201d014b7e143ac;hb=c0fd7f734e2d33e22215899b40a47b843129541d;hpb=96e1079fa412753e42edf293ce28adda88e68a45 diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h index 6c48d6aca8..0cc9445944 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h @@ -1,27 +1,24 @@ /** @file -Copyright (c) 2005 - 2006, 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. - - -Module Name: - - Ip4Igmp.h - -Abstract: - +Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __EFI_IP4_IGMP_H__ #define __EFI_IP4_IGMP_H__ +// +// IGMP message type +// +#define IGMP_MEMBERSHIP_QUERY 0x11 +#define IGMP_V1_MEMBERSHIP_REPORT 0x12 +#define IGMP_V2_MEMBERSHIP_REPORT 0x16 +#define IGMP_LEAVE_GROUP 0x17 + +#define IGMP_V1ROUTER_PRESENT 400 +#define IGMP_UNSOLICIATED_REPORT 10 + #pragma pack(1) typedef struct { UINT8 Type; @@ -56,65 +53,149 @@ typedef struct { LIST_ENTRY Groups; } IGMP_SERVICE_DATA; -typedef enum { - // - // IGMP message type - // - IGMP_MEMBERSHIP_QUERY = 0x11, - IGMP_V1_MEMBERSHIP_REPORT = 0x12, - IGMP_V2_MEMBERSHIP_REPORT = 0x16, - IGMP_LEAVE_GROUP = 0x17, +/** + Init the IGMP control data of the IP4 service instance, configure + MNP to receive ALL SYSTEM multicast. - IGMP_V1ROUTER_PRESENT = 400, - IGMP_UNSOLICIATED_REPORT = 10 -} IGMP_ENUM_TYPES; + @param[in, out] IpSb The IP4 service whose IGMP is to be initialized. + @retval EFI_SUCCESS IGMP of the IpSb is successfully initialized. + @retval EFI_OUT_OF_RESOURCES Failed to allocate resource to initialize IGMP. + @retval Others Failed to initialize the IGMP of IpSb. + +**/ EFI_STATUS Ip4InitIgmp ( - IN IP4_SERVICE *IpService + IN OUT IP4_SERVICE *IpSb ); +/** + Join the multicast group on behalf of this IP4 child + + @param[in] IpInstance The IP4 child that wants to join the group. + @param[in] Address The group to join. + + @retval EFI_SUCCESS Successfully join the multicast group. + @retval EFI_OUT_OF_RESOURCES Failed to allocate resources. + @retval Others Failed to join the multicast group. + +**/ EFI_STATUS Ip4JoinGroup ( - IN IP4_PROTOCOL *IpInstance, - IN IP4_ADDR Address + IN IP4_PROTOCOL *IpInstance, + IN IP4_ADDR Address ); +/** + Leave the IP4 multicast group on behalf of IpInstance. + + @param[in] IpInstance The IP4 child that wants to leave the group + address. + @param[in] Address The group address to leave. + + @retval EFI_NOT_FOUND The IP4 service instance isn't in the group. + @retval EFI_SUCCESS Successfully leave the multicast group. + @retval Others Failed to leave the multicast group. + +**/ EFI_STATUS Ip4LeaveGroup ( - IN IP4_PROTOCOL *IpInstance, - IN IP4_ADDR Address + IN IP4_PROTOCOL *IpInstance, + IN IP4_ADDR Address ); +/** + Handle the received IGMP message for the IP4 service instance. + + @param[in] IpSb The IP4 service instance that received the message. + @param[in] Head The IP4 header of the received message. + @param[in] Packet The IGMP message, without IP4 header. + + @retval EFI_INVALID_PARAMETER The IGMP message is malformated. + @retval EFI_SUCCESS The IGMP message is successfully processed. + +**/ EFI_STATUS Ip4IgmpHandle ( - IN IP4_SERVICE *IpService, - IN IP4_HEAD *Head, - IN NET_BUF *Packet + IN IP4_SERVICE *IpSb, + IN IP4_HEAD *Head, + IN NET_BUF *Packet ); +/** + The periodical timer function for IGMP. It does the following + things: + 1. Decrease the Igmpv1QuerySeen to make it possible to refresh + the IGMP server type. + 2. Decrease the report timer for each IGMP group in "delaying + member" state. + + @param[in] IpSb The IP4 service instance that is ticking. + +**/ VOID Ip4IgmpTicking ( - IN IP4_SERVICE *IpService + IN IP4_SERVICE *IpSb ); +/** + Add a group address to the array of group addresses. + The caller should make sure that no duplicated address + existed in the array. Although the function doesn't + assume the byte order of the both Source and Addr, the + network byte order is used by the caller. + + @param[in] Source The array of group addresses to add to. + @param[in] Count The number of group addresses in the Source. + @param[in] Addr The IP4 multicast address to add. + + @return NULL if failed to allocate memory for the new groups, + otherwise the new combined group addresses. + +**/ IP4_ADDR * Ip4CombineGroups ( - IN IP4_ADDR *SourceGroups, - IN UINT32 Count, - IN IP4_ADDR Addr + IN IP4_ADDR *Source, + IN UINT32 Count, + IN IP4_ADDR Addr ); +/** + Remove a group address from the array of group addresses. + Although the function doesn't assume the byte order of the + both Groups and Addr, the network byte order is used by + the caller. + + @param Groups The array of group addresses to remove from. + @param Count The number of group addresses in the Groups. + @param Addr The IP4 multicast address to remove. + + @return The nubmer of group addresses in the Groups after remove. + It is Count if the Addr isn't in the Groups. + +**/ INTN Ip4RemoveGroupAddr ( - IN IP4_ADDR *Group, - IN UINT32 GroupCnt, - IN IP4_ADDR Addr + IN OUT IP4_ADDR *Groups, + IN UINT32 Count, + IN IP4_ADDR Addr ); +/** + Find the IGMP_GROUP structure which contains the status of multicast + group Address in this IGMP control block + + @param[in] IgmpCtrl The IGMP control block to search from. + @param[in] Address The multicast address to search. + + @return NULL if the multicast address isn't in the IGMP control block. Otherwise + the point to the IGMP_GROUP which contains the status of multicast group + for Address. + +**/ IGMP_GROUP * Ip4FindGroup ( - IN IGMP_SERVICE_DATA *IgmpCtrl, - IN IP4_ADDR Address + IN IGMP_SERVICE_DATA *IgmpCtrl, + IN IP4_ADDR Address ); #endif