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_COMPONENT_NAME2_PROTOCOL gUdp4ComponentName2
;
46 extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding
;
47 extern EFI_UDP4_PROTOCOL mUdp4Protocol
;
48 extern UINT16 mUdp4RandomPort
;
50 #define ICMP_ERROR_PACKET_LENGTH 8
52 #define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
54 #define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)
55 #define UDP4_MAX_DATA_SIZE 65507
57 #define UDP4_PORT_KNOWN 1024
59 #define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')
61 #define UDP4_SERVICE_DATA_FROM_THIS(a) \
66 UDP4_SERVICE_DATA_SIGNATURE \
69 typedef struct _UDP4_SERVICE_DATA_
{
71 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding
;
72 EFI_HANDLE ImageHandle
;
73 EFI_HANDLE ControllerHandle
;
74 NET_LIST_ENTRY ChildrenList
;
78 EFI_EVENT TimeoutEvent
;
83 #define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')
85 #define UDP4_INSTANCE_DATA_FROM_THIS(a) \
90 UDP4_INSTANCE_DATA_SIGNATURE \
93 typedef struct _UDP4_INSTANCE_DATA_
{
97 UDP4_SERVICE_DATA
*Udp4Service
;
98 EFI_UDP4_PROTOCOL Udp4Proto
;
99 EFI_UDP4_CONFIG_DATA ConfigData
;
100 EFI_HANDLE ChildHandle
;
109 NET_LIST_ENTRY RcvdDgramQue
;
110 NET_LIST_ENTRY DeliveredDgramQue
;
114 EFI_STATUS IcmpError
;
116 IP_IO_IP_INFO
*IpInfo
;
119 } UDP4_INSTANCE_DATA
;
121 typedef struct _UDP4_RXDATA_WRAP_
{
125 EFI_UDP4_RECEIVE_DATA RxData
;
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
141 IN EFI_UDP4_PROTOCOL
*This
,
142 IN EFI_UDP4_CONFIG_DATA
*UdpConfigData OPTIONAL
148 IN EFI_UDP4_PROTOCOL
*This
,
150 IN EFI_IPv4_ADDRESS
*MulticastAddress OPTIONAL
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
166 IN EFI_UDP4_PROTOCOL
*This
,
167 IN EFI_UDP4_COMPLETION_TOKEN
*Token
173 IN EFI_UDP4_PROTOCOL
*This
,
174 IN EFI_UDP4_COMPLETION_TOKEN
*Token
180 IN EFI_UDP4_PROTOCOL
*This
,
181 IN EFI_UDP4_COMPLETION_TOKEN
*Token OPTIONAL
187 IN EFI_UDP4_PROTOCOL
*This
192 IN UDP4_SERVICE_DATA
*Udp4Service
,
193 IN EFI_HANDLE ImageHandle
,
194 IN EFI_HANDLE ControllerHandle
199 IN UDP4_SERVICE_DATA
*Udp4Service
204 IN UDP4_SERVICE_DATA
*Udp4Service
,
205 IN UDP4_INSTANCE_DATA
*Instance
210 IN UDP4_INSTANCE_DATA
*Instance
215 IN NET_LIST_ENTRY
*InstanceList
,
216 IN EFI_UDP4_CONFIG_DATA
*ConfigData
220 Udp4IsReconfigurable (
221 IN EFI_UDP4_CONFIG_DATA
*OldConfigData
,
222 IN EFI_UDP4_CONFIG_DATA
*NewConfigData
226 Udp4BuildIp4ConfigData (
227 IN EFI_UDP4_CONFIG_DATA
*Udp4ConfigData
,
228 IN EFI_IP4_CONFIG_DATA
*Ip4ConfigData
232 Udp4ValidateTxToken (
233 IN UDP4_INSTANCE_DATA
*Instance
,
234 IN EFI_UDP4_COMPLETION_TOKEN
*TxToken
240 IN NET_MAP_ITEM
*Item
,
252 IN NET_MAP
*TokenMap
,
253 IN EFI_UDP4_COMPLETION_TOKEN
*Token
259 IN NET_MAP_ITEM
*Item
,
260 IN VOID
*Arg OPTIONAL
265 IN NET_LIST_ENTRY
*RcvdDgramQue
269 Udp4InstanceCancelToken (
270 IN UDP4_INSTANCE_DATA
*Instance
,
271 IN EFI_UDP4_COMPLETION_TOKEN
*Token OPTIONAL
275 Udp4InstanceDeliverDgram (
276 IN UDP4_INSTANCE_DATA
*Instance
280 Udp4ReportIcmpError (
281 IN UDP4_INSTANCE_DATA
*Instance
285 Udp4NetVectorExtFree (
290 Udp4SetVariableData (
291 IN UDP4_SERVICE_DATA
*Udp4Service
295 Udp4ClearVariableData (
296 IN UDP4_SERVICE_DATA
*Udp4Service