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
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.
18 EFI UDPv4 protocol implementation
28 #include <Protocol/IP4.h>
29 #include <Protocol/Udp4.h>
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>
41 #include "Udp4Driver.h"
44 extern EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName
;
45 extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding
;
46 extern EFI_UDP4_PROTOCOL mUdp4Protocol
;
47 extern UINT16 mUdp4RandomPort
;
49 #define ICMP_ERROR_PACKET_LENGTH 8
51 #define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
53 #define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)
54 #define UDP4_MAX_DATA_SIZE 65507
56 #define UDP4_PORT_KNOWN 1024
58 #define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')
60 #define UDP4_SERVICE_DATA_FROM_THIS(a) \
65 UDP4_SERVICE_DATA_SIGNATURE \
68 typedef struct _UDP4_SERVICE_DATA_
{
70 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding
;
71 EFI_HANDLE ImageHandle
;
72 EFI_HANDLE ControllerHandle
;
73 NET_LIST_ENTRY ChildrenList
;
77 EFI_EVENT TimeoutEvent
;
82 #define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')
84 #define UDP4_INSTANCE_DATA_FROM_THIS(a) \
89 UDP4_INSTANCE_DATA_SIGNATURE \
92 typedef struct _UDP4_INSTANCE_DATA_
{
96 UDP4_SERVICE_DATA
*Udp4Service
;
97 EFI_UDP4_PROTOCOL Udp4Proto
;
98 EFI_UDP4_CONFIG_DATA ConfigData
;
99 EFI_HANDLE ChildHandle
;
108 NET_LIST_ENTRY RcvdDgramQue
;
109 NET_LIST_ENTRY DeliveredDgramQue
;
113 EFI_STATUS IcmpError
;
115 IP_IO_IP_INFO
*IpInfo
;
118 } UDP4_INSTANCE_DATA
;
120 typedef struct _UDP4_RXDATA_WRAP_
{
124 EFI_UDP4_RECEIVE_DATA RxData
;
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
140 IN EFI_UDP4_PROTOCOL
*This
,
141 IN EFI_UDP4_CONFIG_DATA
*UdpConfigData OPTIONAL
147 IN EFI_UDP4_PROTOCOL
*This
,
149 IN EFI_IPv4_ADDRESS
*MulticastAddress OPTIONAL
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
165 IN EFI_UDP4_PROTOCOL
*This
,
166 IN EFI_UDP4_COMPLETION_TOKEN
*Token
172 IN EFI_UDP4_PROTOCOL
*This
,
173 IN EFI_UDP4_COMPLETION_TOKEN
*Token
179 IN EFI_UDP4_PROTOCOL
*This
,
180 IN EFI_UDP4_COMPLETION_TOKEN
*Token OPTIONAL
186 IN EFI_UDP4_PROTOCOL
*This
191 IN UDP4_SERVICE_DATA
*Udp4Service
,
192 IN EFI_HANDLE ImageHandle
,
193 IN EFI_HANDLE ControllerHandle
198 IN UDP4_SERVICE_DATA
*Udp4Service
203 IN UDP4_SERVICE_DATA
*Udp4Service
,
204 IN UDP4_INSTANCE_DATA
*Instance
209 IN UDP4_INSTANCE_DATA
*Instance
214 IN NET_LIST_ENTRY
*InstanceList
,
215 IN EFI_UDP4_CONFIG_DATA
*ConfigData
219 Udp4IsReconfigurable (
220 IN EFI_UDP4_CONFIG_DATA
*OldConfigData
,
221 IN EFI_UDP4_CONFIG_DATA
*NewConfigData
225 Udp4BuildIp4ConfigData (
226 IN EFI_UDP4_CONFIG_DATA
*Udp4ConfigData
,
227 IN EFI_IP4_CONFIG_DATA
*Ip4ConfigData
231 Udp4ValidateTxToken (
232 IN UDP4_INSTANCE_DATA
*Instance
,
233 IN EFI_UDP4_COMPLETION_TOKEN
*TxToken
239 IN NET_MAP_ITEM
*Item
,
251 IN NET_MAP
*TokenMap
,
252 IN EFI_UDP4_COMPLETION_TOKEN
*Token
258 IN NET_MAP_ITEM
*Item
,
259 IN VOID
*Arg OPTIONAL
264 IN NET_LIST_ENTRY
*RcvdDgramQue
268 Udp4InstanceCancelToken (
269 IN UDP4_INSTANCE_DATA
*Instance
,
270 IN EFI_UDP4_COMPLETION_TOKEN
*Token OPTIONAL
274 Udp4InstanceDeliverDgram (
275 IN UDP4_INSTANCE_DATA
*Instance
279 Udp4ReportIcmpError (
280 IN UDP4_INSTANCE_DATA
*Instance
284 Udp4NetVectorExtFree (
289 Udp4SetVariableData (
290 IN UDP4_SERVICE_DATA
*Udp4Service
294 Udp4ClearVariableData (
295 IN UDP4_SERVICE_DATA
*Udp4Service