]>
Commit | Line | Data |
---|---|---|
8a67d61d | 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>\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 | ||
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 |