diff options
Diffstat (limited to 'MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h new file mode 100644 index 0000000000..f7cb92c23f --- /dev/null +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h @@ -0,0 +1,120 @@ +/** @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: + + +**/ + +#ifndef __EFI_IP4_IGMP_H__ +#define __EFI_IP4_IGMP_H__ + +#pragma pack(1) +typedef struct { + UINT8 Type; + UINT8 MaxRespTime; + UINT16 Checksum; + IP4_ADDR Group; +} IGMP_HEAD; +#pragma pack() + +// +// The status of multicast group. It isn't necessary to maintain +// explicit state of host state diagram. A group with non-zero +// DelayTime is in "delaying member" state. otherwise, it is in +// "idle member" state. +// +typedef struct { + NET_LIST_ENTRY Link; + INTN RefCnt; + IP4_ADDR Address; + INTN DelayTime; + BOOLEAN ReportByUs; + EFI_MAC_ADDRESS Mac; +} IGMP_GROUP; + +// +// The IGMP status. Each IP4 service instance has a IGMP_SERVICE_DATA +// attached. The Igmpv1QuerySeen remember whether the server on this +// connected network is v1 or v2. +// +typedef struct { + INTN Igmpv1QuerySeen; + NET_LIST_ENTRY Groups; +} IGMP_SERVICE_DATA; + +enum { + // + // IGMP message type + // + IGMP_MEMBERSHIP_QUERY = 0x11, + IGMP_V1_MEMBERSHIP_REPORT = 0x12, + IGMP_V2_MEMBERSHIP_REPORT = 0x16, + IGMP_LEAVE_GROUP = 0x17, + + IGMP_V1ROUTER_PRESENT = 400, + IGMP_UNSOLICIATED_REPORT = 10, +}; + +EFI_STATUS +Ip4InitIgmp ( + IN IP4_SERVICE *IpService + ); + +EFI_STATUS +Ip4JoinGroup ( + IN IP4_PROTOCOL *IpInstance, + IN IP4_ADDR Address + ); + +EFI_STATUS +Ip4LeaveGroup ( + IN IP4_PROTOCOL *IpInstance, + IN IP4_ADDR Address + ); + +EFI_STATUS +Ip4IgmpHandle ( + IN IP4_SERVICE *IpService, + IN IP4_HEAD *Head, + IN NET_BUF *Packet + ); + +VOID +Ip4IgmpTicking ( + IN IP4_SERVICE *IpService + ); + +IP4_ADDR * +Ip4CombineGroups ( + IN IP4_ADDR *SourceGroups, + IN UINT32 Count, + IN IP4_ADDR Addr + ); + +INTN +Ip4RemoveGroupAddr ( + IN IP4_ADDR *Group, + IN UINT32 GroupCnt, + IN IP4_ADDR Addr + ); + +IGMP_GROUP * +Ip4FindGroup ( + IN IGMP_SERVICE_DATA *IgmpCtrl, + IN IP4_ADDR Address + ); +#endif |