]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.h
bdc855b52ceae5bfcbb3f5162b39e563a221c685
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Impl.h
1 /** @file
2
3 Copyright (c) 2006 - 2007, 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 Module Name:
13
14 Udp4Impl.h
15
16 Abstract:
17
18 EFI UDPv4 protocol implementation
19
20
21 **/
22
23 #ifndef _UDP4_IMPL_H_
24 #define _UDP4_IMPL_H_
25
26 #include <PiDxe.h>
27
28 #include <Protocol/IP4.h>
29 #include <Protocol/Udp4.h>
30
31 #include <Library/IpIoLib.h>
32 #include <Library/DebugLib.h>
33 #include <Library/UefiRuntimeServicesTableLib.h>
34 #include <Library/UefiDriverEntryPoint.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/BaseLib.h>
37 #include <Library/UefiLib.h>
38 #include <Library/BaseMemoryLib.h>
39 #include <Library/MemoryAllocationLib.h>
40
41 #include "Udp4Driver.h"
42
43
44 extern EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName;
45 extern EFI_COMPONENT_NAME2_PROTOCOL gUdp4ComponentName2;
46 extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding;
47 extern EFI_UDP4_PROTOCOL mUdp4Protocol;
48 extern UINT16 mUdp4RandomPort;
49
50 #define ICMP_ERROR_PACKET_LENGTH 8
51
52 #define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
53
54 #define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)
55 #define UDP4_MAX_DATA_SIZE 65507
56
57 #define UDP4_PORT_KNOWN 1024
58
59 #define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')
60
61 #define UDP4_SERVICE_DATA_FROM_THIS(a) \
62 CR ( \
63 (a), \
64 UDP4_SERVICE_DATA, \
65 ServiceBinding, \
66 UDP4_SERVICE_DATA_SIGNATURE \
67 )
68
69 typedef struct _UDP4_SERVICE_DATA_ {
70 UINT32 Signature;
71 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
72 EFI_HANDLE ImageHandle;
73 EFI_HANDLE ControllerHandle;
74 NET_LIST_ENTRY ChildrenList;
75 UINTN ChildrenNumber;
76 IP_IO *IpIo;
77
78 EFI_EVENT TimeoutEvent;
79
80 CHAR16 *MacString;
81 } UDP4_SERVICE_DATA;
82
83 #define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')
84
85 #define UDP4_INSTANCE_DATA_FROM_THIS(a) \
86 CR ( \
87 (a), \
88 UDP4_INSTANCE_DATA, \
89 Udp4Proto, \
90 UDP4_INSTANCE_DATA_SIGNATURE \
91 )
92
93 typedef struct _UDP4_INSTANCE_DATA_ {
94 UINT32 Signature;
95 NET_LIST_ENTRY Link;
96
97 UDP4_SERVICE_DATA *Udp4Service;
98 EFI_UDP4_PROTOCOL Udp4Proto;
99 EFI_UDP4_CONFIG_DATA ConfigData;
100 EFI_HANDLE ChildHandle;
101 BOOLEAN Configured;
102 BOOLEAN IsNoMapping;
103
104 NET_MAP TxTokens;
105 NET_MAP RxTokens;
106
107 NET_MAP McastIps;
108
109 NET_LIST_ENTRY RcvdDgramQue;
110 NET_LIST_ENTRY DeliveredDgramQue;
111
112 UINT16 HeadSum;
113
114 EFI_STATUS IcmpError;
115
116 IP_IO_IP_INFO *IpInfo;
117
118 BOOLEAN Destroyed;
119 } UDP4_INSTANCE_DATA;
120
121 typedef struct _UDP4_RXDATA_WRAP_ {
122 NET_LIST_ENTRY Link;
123 NET_BUF *Packet;
124 UINT32 TimeoutTick;
125 EFI_UDP4_RECEIVE_DATA RxData;
126 } UDP4_RXDATA_WRAP;
127
128 EFI_STATUS
129 EFIAPI
130 Udp4GetModeData (
131 IN EFI_UDP4_PROTOCOL *This,
132 OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL,
133 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
134 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
135 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
136 );
137
138 EFI_STATUS
139 EFIAPI
140 Udp4Configure (
141 IN EFI_UDP4_PROTOCOL *This,
142 IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
143 );
144
145 EFI_STATUS
146 EFIAPI
147 Udp4Groups (
148 IN EFI_UDP4_PROTOCOL *This,
149 IN BOOLEAN JoinFlag,
150 IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
151 );
152
153 EFI_STATUS
154 EFIAPI
155 Udp4Routes (
156 IN EFI_UDP4_PROTOCOL *This,
157 IN BOOLEAN DeleteRoute,
158 IN EFI_IPv4_ADDRESS *SubnetAddress,
159 IN EFI_IPv4_ADDRESS *SubnetMask,
160 IN EFI_IPv4_ADDRESS *GatewayAddress
161 );
162
163 EFI_STATUS
164 EFIAPI
165 Udp4Transmit (
166 IN EFI_UDP4_PROTOCOL *This,
167 IN EFI_UDP4_COMPLETION_TOKEN *Token
168 );
169
170 EFI_STATUS
171 EFIAPI
172 Udp4Receive (
173 IN EFI_UDP4_PROTOCOL *This,
174 IN EFI_UDP4_COMPLETION_TOKEN *Token
175 );
176
177 EFI_STATUS
178 EFIAPI
179 Udp4Cancel (
180 IN EFI_UDP4_PROTOCOL *This,
181 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
182 );
183
184 EFI_STATUS
185 EFIAPI
186 Udp4Poll (
187 IN EFI_UDP4_PROTOCOL *This
188 );
189
190 EFI_STATUS
191 Udp4CreateService (
192 IN UDP4_SERVICE_DATA *Udp4Service,
193 IN EFI_HANDLE ImageHandle,
194 IN EFI_HANDLE ControllerHandle
195 );
196
197 VOID
198 Udp4CleanService (
199 IN UDP4_SERVICE_DATA *Udp4Service
200 );
201
202 VOID
203 Udp4InitInstance (
204 IN UDP4_SERVICE_DATA *Udp4Service,
205 IN UDP4_INSTANCE_DATA *Instance
206 );
207
208 VOID
209 Udp4CleanInstance (
210 IN UDP4_INSTANCE_DATA *Instance
211 );
212
213 EFI_STATUS
214 Udp4Bind (
215 IN NET_LIST_ENTRY *InstanceList,
216 IN EFI_UDP4_CONFIG_DATA *ConfigData
217 );
218
219 BOOLEAN
220 Udp4IsReconfigurable (
221 IN EFI_UDP4_CONFIG_DATA *OldConfigData,
222 IN EFI_UDP4_CONFIG_DATA *NewConfigData
223 );
224
225 VOID
226 Udp4BuildIp4ConfigData (
227 IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,
228 IN EFI_IP4_CONFIG_DATA *Ip4ConfigData
229 );
230
231 EFI_STATUS
232 Udp4ValidateTxToken (
233 IN UDP4_INSTANCE_DATA *Instance,
234 IN EFI_UDP4_COMPLETION_TOKEN *TxToken
235 );
236
237 EFI_STATUS
238 Udp4TokenExist (
239 IN NET_MAP *Map,
240 IN NET_MAP_ITEM *Item,
241 IN VOID *Context
242 );
243
244 UINT16
245 Udp4Checksum (
246 IN NET_BUF *Packet,
247 IN UINT16 HeadSum
248 );
249
250 EFI_STATUS
251 Udp4RemoveToken (
252 IN NET_MAP *TokenMap,
253 IN EFI_UDP4_COMPLETION_TOKEN *Token
254 );
255
256 EFI_STATUS
257 Udp4LeaveGroup (
258 IN NET_MAP *Map,
259 IN NET_MAP_ITEM *Item,
260 IN VOID *Arg OPTIONAL
261 );
262
263 VOID
264 Udp4FlushRxData (
265 IN NET_LIST_ENTRY *RcvdDgramQue
266 );
267
268 EFI_STATUS
269 Udp4InstanceCancelToken (
270 IN UDP4_INSTANCE_DATA *Instance,
271 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
272 );
273
274 VOID
275 Udp4InstanceDeliverDgram (
276 IN UDP4_INSTANCE_DATA *Instance
277 );
278
279 VOID
280 Udp4ReportIcmpError (
281 IN UDP4_INSTANCE_DATA *Instance
282 );
283
284 VOID
285 Udp4NetVectorExtFree (
286 VOID *Context
287 );
288
289 EFI_STATUS
290 Udp4SetVariableData (
291 IN UDP4_SERVICE_DATA *Udp4Service
292 );
293
294 VOID
295 Udp4ClearVariableData (
296 IN UDP4_SERVICE_DATA *Udp4Service
297 );
298
299 #endif
300