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