]> git.proxmox.com Git - mirror_edk2.git/blob - 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
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_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding;
46 extern EFI_UDP4_PROTOCOL mUdp4Protocol;
47 extern 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
68 typedef 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
92 typedef 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
120 typedef 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
127 EFI_STATUS
128 EFIAPI
129 Udp4GetModeData (
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
137 EFI_STATUS
138 EFIAPI
139 Udp4Configure (
140 IN EFI_UDP4_PROTOCOL *This,
141 IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
142 );
143
144 EFI_STATUS
145 EFIAPI
146 Udp4Groups (
147 IN EFI_UDP4_PROTOCOL *This,
148 IN BOOLEAN JoinFlag,
149 IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
150 );
151
152 EFI_STATUS
153 EFIAPI
154 Udp4Routes (
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
162 EFI_STATUS
163 EFIAPI
164 Udp4Transmit (
165 IN EFI_UDP4_PROTOCOL *This,
166 IN EFI_UDP4_COMPLETION_TOKEN *Token
167 );
168
169 EFI_STATUS
170 EFIAPI
171 Udp4Receive (
172 IN EFI_UDP4_PROTOCOL *This,
173 IN EFI_UDP4_COMPLETION_TOKEN *Token
174 );
175
176 EFI_STATUS
177 EFIAPI
178 Udp4Cancel (
179 IN EFI_UDP4_PROTOCOL *This,
180 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
181 );
182
183 EFI_STATUS
184 EFIAPI
185 Udp4Poll (
186 IN EFI_UDP4_PROTOCOL *This
187 );
188
189 EFI_STATUS
190 Udp4CreateService (
191 IN UDP4_SERVICE_DATA *Udp4Service,
192 IN EFI_HANDLE ImageHandle,
193 IN EFI_HANDLE ControllerHandle
194 );
195
196 VOID
197 Udp4CleanService (
198 IN UDP4_SERVICE_DATA *Udp4Service
199 );
200
201 VOID
202 Udp4InitInstance (
203 IN UDP4_SERVICE_DATA *Udp4Service,
204 IN UDP4_INSTANCE_DATA *Instance
205 );
206
207 VOID
208 Udp4CleanInstance (
209 IN UDP4_INSTANCE_DATA *Instance
210 );
211
212 EFI_STATUS
213 Udp4Bind (
214 IN NET_LIST_ENTRY *InstanceList,
215 IN EFI_UDP4_CONFIG_DATA *ConfigData
216 );
217
218 BOOLEAN
219 Udp4IsReconfigurable (
220 IN EFI_UDP4_CONFIG_DATA *OldConfigData,
221 IN EFI_UDP4_CONFIG_DATA *NewConfigData
222 );
223
224 VOID
225 Udp4BuildIp4ConfigData (
226 IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,
227 IN EFI_IP4_CONFIG_DATA *Ip4ConfigData
228 );
229
230 EFI_STATUS
231 Udp4ValidateTxToken (
232 IN UDP4_INSTANCE_DATA *Instance,
233 IN EFI_UDP4_COMPLETION_TOKEN *TxToken
234 );
235
236 EFI_STATUS
237 Udp4TokenExist (
238 IN NET_MAP *Map,
239 IN NET_MAP_ITEM *Item,
240 IN VOID *Context
241 );
242
243 UINT16
244 Udp4Checksum (
245 IN NET_BUF *Packet,
246 IN UINT16 HeadSum
247 );
248
249 EFI_STATUS
250 Udp4RemoveToken (
251 IN NET_MAP *TokenMap,
252 IN EFI_UDP4_COMPLETION_TOKEN *Token
253 );
254
255 EFI_STATUS
256 Udp4LeaveGroup (
257 IN NET_MAP *Map,
258 IN NET_MAP_ITEM *Item,
259 IN VOID *Arg OPTIONAL
260 );
261
262 VOID
263 Udp4FlushRxData (
264 IN NET_LIST_ENTRY *RcvdDgramQue
265 );
266
267 EFI_STATUS
268 Udp4InstanceCancelToken (
269 IN UDP4_INSTANCE_DATA *Instance,
270 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
271 );
272
273 VOID
274 Udp4InstanceDeliverDgram (
275 IN UDP4_INSTANCE_DATA *Instance
276 );
277
278 VOID
279 Udp4ReportIcmpError (
280 IN UDP4_INSTANCE_DATA *Instance
281 );
282
283 VOID
284 Udp4NetVectorExtFree (
285 VOID *Context
286 );
287
288 EFI_STATUS
289 Udp4SetVariableData (
290 IN UDP4_SERVICE_DATA *Udp4Service
291 );
292
293 VOID
294 Udp4ClearVariableData (
295 IN UDP4_SERVICE_DATA *Udp4Service
296 );
297
298 #endif
299