]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h
Scrubbed some files for IP4
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Igmp.h
1 /** @file
2
3 Copyright (c) 2005 - 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13 Module Name:
14
15 Ip4Igmp.h
16
17 Abstract:
18
19
20 **/
21
22 #ifndef __EFI_IP4_IGMP_H__
23 #define __EFI_IP4_IGMP_H__
24
25 #pragma pack(1)
26 typedef struct {
27 UINT8 Type;
28 UINT8 MaxRespTime;
29 UINT16 Checksum;
30 IP4_ADDR Group;
31 } IGMP_HEAD;
32 #pragma pack()
33
34 //
35 // The status of multicast group. It isn't necessary to maintain
36 // explicit state of host state diagram. A group with non-zero
37 // DelayTime is in "delaying member" state. otherwise, it is in
38 // "idle member" state.
39 //
40 typedef struct {
41 LIST_ENTRY Link;
42 INTN RefCnt;
43 IP4_ADDR Address;
44 INTN DelayTime;
45 BOOLEAN ReportByUs;
46 EFI_MAC_ADDRESS Mac;
47 } IGMP_GROUP;
48
49 //
50 // The IGMP status. Each IP4 service instance has a IGMP_SERVICE_DATA
51 // attached. The Igmpv1QuerySeen remember whether the server on this
52 // connected network is v1 or v2.
53 //
54 typedef struct {
55 INTN Igmpv1QuerySeen;
56 LIST_ENTRY Groups;
57 } IGMP_SERVICE_DATA;
58
59 typedef enum {
60 //
61 // IGMP message type
62 //
63 IGMP_MEMBERSHIP_QUERY = 0x11,
64 IGMP_V1_MEMBERSHIP_REPORT = 0x12,
65 IGMP_V2_MEMBERSHIP_REPORT = 0x16,
66 IGMP_LEAVE_GROUP = 0x17,
67
68 IGMP_V1ROUTER_PRESENT = 400,
69 IGMP_UNSOLICIATED_REPORT = 10
70 } IGMP_ENUM_TYPES;
71
72 EFI_STATUS
73 Ip4InitIgmp (
74 IN IP4_SERVICE *IpService
75 );
76
77 EFI_STATUS
78 Ip4JoinGroup (
79 IN IP4_PROTOCOL *IpInstance,
80 IN IP4_ADDR Address
81 );
82
83 EFI_STATUS
84 Ip4LeaveGroup (
85 IN IP4_PROTOCOL *IpInstance,
86 IN IP4_ADDR Address
87 );
88
89 EFI_STATUS
90 Ip4IgmpHandle (
91 IN IP4_SERVICE *IpService,
92 IN IP4_HEAD *Head,
93 IN NET_BUF *Packet
94 );
95
96 VOID
97 Ip4IgmpTicking (
98 IN IP4_SERVICE *IpService
99 );
100
101 IP4_ADDR *
102 Ip4CombineGroups (
103 IN IP4_ADDR *SourceGroups,
104 IN UINT32 Count,
105 IN IP4_ADDR Addr
106 );
107
108 INTN
109 Ip4RemoveGroupAddr (
110 IN IP4_ADDR *Group,
111 IN UINT32 GroupCnt,
112 IN IP4_ADDR Addr
113 );
114
115 IGMP_GROUP *
116 Ip4FindGroup (
117 IN IGMP_SERVICE_DATA *IgmpCtrl,
118 IN IP4_ADDR Address
119 );
120 #endif