Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
[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   NET_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   NET_LIST_ENTRY          Groups;
57 } IGMP_SERVICE_DATA;
58
59 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 };
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