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