1. Update the UdpIo to a combined UdpIo to support both v4 and v6 stack.
2. Update Dhcp4 and Mtftp4 driver to adopt the combined UdpIo. 3. Clean up coding style problems in combined IpIoLib/NetLib. Update Tcp4 and Udp4 to adopt the changes. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9382 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
Implementation of Mtftp drivers.
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation<BR>
|
||||
Copyright (c) 2006 - 2009, Intel Corporation<BR>
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -107,7 +107,7 @@ Mtftp4DriverBindingSupported (
|
||||
Just leave the Udp child unconfigured. When UDP is unloaded,
|
||||
MTFTP will be informed with DriverBinding Stop.
|
||||
|
||||
@param UdpIo The UDP port to configure
|
||||
@param UdpIo The UDP_IO to configure
|
||||
@param Context The opaque parameter to the callback
|
||||
|
||||
@retval EFI_SUCCESS It always return EFI_SUCCESS directly.
|
||||
@@ -115,7 +115,7 @@ Mtftp4DriverBindingSupported (
|
||||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4ConfigNullUdp (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
@@ -201,7 +201,13 @@ Mtftp4CreateService (
|
||||
return Status;
|
||||
}
|
||||
|
||||
MtftpSb->ConnectUdp = UdpIoCreatePort (Controller, Image, Mtftp4ConfigNullUdp, NULL);
|
||||
MtftpSb->ConnectUdp = UdpIoCreateIo (
|
||||
Controller,
|
||||
Image,
|
||||
Mtftp4ConfigNullUdp,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (MtftpSb->ConnectUdp == NULL) {
|
||||
gBS->CloseEvent (MtftpSb->TimerToGetMap);
|
||||
@@ -226,7 +232,7 @@ Mtftp4CleanService (
|
||||
IN MTFTP4_SERVICE *MtftpSb
|
||||
)
|
||||
{
|
||||
UdpIoFreePort (MtftpSb->ConnectUdp);
|
||||
UdpIoFreeIo (MtftpSb->ConnectUdp);
|
||||
gBS->CloseEvent (MtftpSb->TimerToGetMap);
|
||||
gBS->CloseEvent (MtftpSb->Timer);
|
||||
}
|
||||
@@ -467,10 +473,11 @@ Mtftp4ServiceBindingCreateChild (
|
||||
|
||||
Mtftp4InitProtocol (MtftpSb, Instance);
|
||||
|
||||
Instance->UnicastPort = UdpIoCreatePort (
|
||||
Instance->UnicastPort = UdpIoCreateIo (
|
||||
MtftpSb->Controller,
|
||||
MtftpSb->Image,
|
||||
Mtftp4ConfigNullUdp,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
Instance
|
||||
);
|
||||
|
||||
@@ -530,7 +537,7 @@ Mtftp4ServiceBindingCreateChild (
|
||||
ON_ERROR:
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
UdpIoFreePort (Instance->UnicastPort);
|
||||
UdpIoFreeIo (Instance->UnicastPort);
|
||||
gBS->FreePool (Instance);
|
||||
}
|
||||
|
||||
@@ -623,7 +630,7 @@ Mtftp4ServiceBindingDestroyChild (
|
||||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||
|
||||
Mtftp4CleanOperation (Instance, EFI_DEVICE_ERROR);
|
||||
UdpIoFreePort (Instance->UnicastPort);
|
||||
UdpIoFreeIo (Instance->UnicastPort);
|
||||
|
||||
RemoveEntryList (&Instance->Link);
|
||||
MtftpSb->ChildrenNum--;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#/** @file
|
||||
# Component name for module Mtftp4
|
||||
#
|
||||
# Copyright (c) 2007, Intel Corporation
|
||||
# Copyright (c) 2007 - 2009, Intel Corporation
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
@@ -67,4 +67,6 @@
|
||||
gEfiMtftp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp4ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
||||
|
@@ -50,7 +50,7 @@ Mtftp4CleanOperation (
|
||||
}
|
||||
|
||||
ASSERT (Instance->UnicastPort != NULL);
|
||||
UdpIoCleanPort (Instance->UnicastPort);
|
||||
UdpIoCleanIo (Instance->UnicastPort);
|
||||
|
||||
if (Instance->LastPacket != NULL) {
|
||||
NetbufFree (Instance->LastPacket);
|
||||
@@ -58,7 +58,7 @@ Mtftp4CleanOperation (
|
||||
}
|
||||
|
||||
if (Instance->McastUdpPort != NULL) {
|
||||
UdpIoFreePort (Instance->McastUdpPort);
|
||||
UdpIoFreeIo (Instance->McastUdpPort);
|
||||
Instance->McastUdpPort = NULL;
|
||||
}
|
||||
|
||||
@@ -211,9 +211,8 @@ Mtftp4OverrideValid (
|
||||
the UDP is reconfigured.
|
||||
|
||||
@param Instance The Mtftp instance
|
||||
@param UdpPort The UDP port to poll
|
||||
@param UdpCfgData The UDP configure data to reconfigure the UDP
|
||||
port.
|
||||
@param UdpIo The UDP_IO to poll
|
||||
@param UdpCfgData The UDP configure data to reconfigure the UDP_IO
|
||||
|
||||
@retval TRUE The default address is retrieved and UDP is reconfigured.
|
||||
@retval FALSE Some error occured.
|
||||
@@ -222,7 +221,7 @@ Mtftp4OverrideValid (
|
||||
BOOLEAN
|
||||
Mtftp4GetMapping (
|
||||
IN MTFTP4_PROTOCOL *Instance,
|
||||
IN UDP_IO_PORT *UdpPort,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN EFI_UDP4_CONFIG_DATA *UdpCfgData
|
||||
)
|
||||
{
|
||||
@@ -234,7 +233,7 @@ Mtftp4GetMapping (
|
||||
ASSERT (Instance->Config.UseDefaultSetting);
|
||||
|
||||
Service = Instance->Service;
|
||||
Udp = UdpPort->Udp;
|
||||
Udp = UdpIo->Protocol.Udp4;
|
||||
|
||||
Status = gBS->SetTimer (
|
||||
Service->TimerToGetMap,
|
||||
@@ -263,7 +262,7 @@ Mtftp4GetMapping (
|
||||
/**
|
||||
Configure the UDP port for unicast receiving.
|
||||
|
||||
@param UdpIo The UDP port
|
||||
@param UdpIo The UDP_IO instance
|
||||
@param Instance The MTFTP session
|
||||
|
||||
@retval EFI_SUCCESS The UDP port is successfully configured for the
|
||||
@@ -272,7 +271,7 @@ Mtftp4GetMapping (
|
||||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4ConfigUnicastPort (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN MTFTP4_PROTOCOL *Instance
|
||||
)
|
||||
{
|
||||
@@ -301,7 +300,7 @@ Mtftp4ConfigUnicastPort (
|
||||
Ip = HTONL (Instance->ServerIp);
|
||||
CopyMem (&UdpConfig.RemoteAddress, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
Status = UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfig);
|
||||
Status = UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfig);
|
||||
|
||||
if ((Status == EFI_NO_MAPPING) && Mtftp4GetMapping (Instance, UdpIo, &UdpConfig)) {
|
||||
return EFI_SUCCESS;
|
||||
@@ -312,9 +311,15 @@ Mtftp4ConfigUnicastPort (
|
||||
// The station IP address is manually configured and the Gateway IP is not 0.
|
||||
// Add the default route for this UDP instance.
|
||||
//
|
||||
Status = UdpIo->Udp->Routes (UdpIo->Udp, FALSE, &mZeroIp4Addr, &mZeroIp4Addr, &Config->GatewayIp);
|
||||
Status = UdpIo->Protocol.Udp4->Routes (
|
||||
UdpIo->Protocol.Udp4,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
UdpIo->Udp->Configure (UdpIo->Udp, NULL);
|
||||
UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, NULL);
|
||||
}
|
||||
}
|
||||
return Status;
|
||||
@@ -1070,7 +1075,7 @@ EfiMtftp4Poll (
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
Udp = Instance->UnicastPort->Udp;
|
||||
Udp = Instance->UnicastPort->Protocol.Udp4;
|
||||
return Udp->Poll (Udp);
|
||||
}
|
||||
|
||||
|
@@ -85,7 +85,7 @@ struct _MTFTP4_SERVICE {
|
||||
// This UDP child is used to keep the connection between the UDP
|
||||
// and MTFTP, so MTFTP will be notified when UDP is uninstalled.
|
||||
//
|
||||
UDP_IO_PORT *ConnectUdp;
|
||||
UDP_IO *ConnectUdp;
|
||||
};
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ struct _MTFTP4_PROTOCOL {
|
||||
UINT16 ListeningPort;
|
||||
UINT16 ConnectedPort;
|
||||
IP4_ADDR Gateway;
|
||||
UDP_IO_PORT *UnicastPort;
|
||||
UDP_IO *UnicastPort;
|
||||
|
||||
//
|
||||
// Timeout and retransmit status
|
||||
@@ -148,7 +148,7 @@ struct _MTFTP4_PROTOCOL {
|
||||
IP4_ADDR McastIp;
|
||||
UINT16 McastPort;
|
||||
BOOLEAN Master;
|
||||
UDP_IO_PORT *McastUdpPort;
|
||||
UDP_IO *McastUdpPort;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -20,7 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
The packet process callback for MTFTP download.
|
||||
|
||||
@param UdpPacket The packet received
|
||||
@param Points The local/remote access point of the packet
|
||||
@param EndPoint The local/remote access point of the packet
|
||||
@param IoStatus The status of the receiving
|
||||
@param Context Opaque parameter, which is the MTFTP session
|
||||
|
||||
@@ -28,7 +28,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
VOID
|
||||
Mtftp4RrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
);
|
||||
@@ -370,7 +370,7 @@ Mtftp4RrqOackValid (
|
||||
/**
|
||||
Configure a UDP IO port to receive the multicast.
|
||||
|
||||
@param McastIo The UDP IO port to configure
|
||||
@param McastIo The UDP IO to configure
|
||||
@param Context The opaque parameter to the function which is the
|
||||
MTFTP session.
|
||||
|
||||
@@ -380,7 +380,7 @@ Mtftp4RrqOackValid (
|
||||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4RrqConfigMcastPort (
|
||||
IN UDP_IO_PORT *McastIo,
|
||||
IN UDP_IO *McastIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
@@ -412,7 +412,7 @@ Mtftp4RrqConfigMcastPort (
|
||||
Ip = HTONL (Instance->ServerIp);
|
||||
CopyMem (&UdpConfig.RemoteAddress, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
Status = McastIo->Udp->Configure (McastIo->Udp, &UdpConfig);
|
||||
Status = McastIo->Protocol.Udp4->Configure (McastIo->Protocol.Udp4, &UdpConfig);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
@@ -424,16 +424,16 @@ Mtftp4RrqConfigMcastPort (
|
||||
// The station IP address is manually configured and the Gateway IP is not 0.
|
||||
// Add the default route for this UDP instance.
|
||||
//
|
||||
Status = McastIo->Udp->Routes (
|
||||
McastIo->Udp,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
Status = McastIo->Protocol.Udp4->Routes (
|
||||
McastIo->Protocol.Udp4,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
McastIo->Udp->Configure (McastIo->Udp, NULL);
|
||||
McastIo->Protocol.Udp4->Configure (McastIo->Protocol.Udp4, NULL);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
@@ -444,7 +444,7 @@ Mtftp4RrqConfigMcastPort (
|
||||
Ip = HTONL (Instance->McastIp);
|
||||
CopyMem (&Group, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
return McastIo->Udp->Groups (McastIo->Udp, TRUE, &Group);
|
||||
return McastIo->Protocol.Udp4->Groups (McastIo->Protocol.Udp4, TRUE, &Group);
|
||||
}
|
||||
|
||||
|
||||
@@ -539,10 +539,11 @@ Mtftp4RrqHandleOack (
|
||||
//
|
||||
Instance->McastIp = Reply.McastIp;
|
||||
Instance->McastPort = Reply.McastPort;
|
||||
Instance->McastUdpPort = UdpIoCreatePort (
|
||||
Instance->McastUdpPort = UdpIoCreateIo (
|
||||
Instance->Service->Controller,
|
||||
Instance->Service->Image,
|
||||
Mtftp4RrqConfigMcastPort,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
Instance
|
||||
);
|
||||
|
||||
@@ -598,7 +599,7 @@ Mtftp4RrqHandleOack (
|
||||
The packet process callback for MTFTP download.
|
||||
|
||||
@param UdpPacket The packet received
|
||||
@param Points The local/remote access point of the packet
|
||||
@param EndPoint The local/remote access point of the packet
|
||||
@param IoStatus The status of the receiving
|
||||
@param Context Opaque parameter, which is the MTFTP session
|
||||
|
||||
@@ -606,7 +607,7 @@ Mtftp4RrqHandleOack (
|
||||
VOID
|
||||
Mtftp4RrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
@@ -637,7 +638,7 @@ Mtftp4RrqInput (
|
||||
//
|
||||
// Find the port this packet is from to restart receive correctly.
|
||||
//
|
||||
Multicast = (BOOLEAN) (Points->LocalAddr == Instance->McastIp);
|
||||
Multicast = (BOOLEAN) (EndPoint->LocalAddr.Addr[0] == Instance->McastIp);
|
||||
|
||||
if (UdpPacket->TotalSize < MTFTP4_OPCODE_LEN) {
|
||||
goto ON_EXIT;
|
||||
@@ -649,11 +650,11 @@ Mtftp4RrqInput (
|
||||
// is required to use the same port as RemotePort to multicast the
|
||||
// data.
|
||||
//
|
||||
if (Points->RemotePort != Instance->ConnectedPort) {
|
||||
if (EndPoint->RemotePort != Instance->ConnectedPort) {
|
||||
if (Instance->ConnectedPort != 0) {
|
||||
goto ON_EXIT;
|
||||
} else {
|
||||
Instance->ConnectedPort = Points->RemotePort;
|
||||
Instance->ConnectedPort = EndPoint->RemotePort;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -359,7 +359,7 @@ Mtftp4SendError (
|
||||
It simply frees the packet.
|
||||
|
||||
@param Packet The transmitted (or failed to) packet
|
||||
@param Points The local and remote UDP access point
|
||||
@param EndPoint The local and remote UDP access point
|
||||
@param IoStatus The result of the transmission
|
||||
@param Context Opaque parameter to the callback
|
||||
|
||||
@@ -367,7 +367,7 @@ Mtftp4SendError (
|
||||
VOID
|
||||
Mtftp4OnPacketSent (
|
||||
IN NET_BUF *Packet,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
@@ -415,7 +415,7 @@ Mtftp4SendPacket (
|
||||
IN OUT NET_BUF *Packet
|
||||
)
|
||||
{
|
||||
UDP_POINTS UdpPoint;
|
||||
UDP_END_POINT UdpPoint;
|
||||
EFI_STATUS Status;
|
||||
UINT16 OpCode;
|
||||
UINT16 Value;
|
||||
@@ -427,14 +427,13 @@ Mtftp4SendPacket (
|
||||
NetbufFree (Instance->LastPacket);
|
||||
}
|
||||
|
||||
Instance->LastPacket = Packet;
|
||||
Instance->LastPacket = Packet;
|
||||
|
||||
Instance->CurRetry = 0;
|
||||
Instance->CurRetry = 0;
|
||||
Mtftp4SetTimeout (Instance);
|
||||
|
||||
UdpPoint.LocalAddr = 0;
|
||||
UdpPoint.LocalPort = 0;
|
||||
UdpPoint.RemoteAddr = Instance->ServerIp;
|
||||
ZeroMem (&UdpPoint, sizeof (UdpPoint));
|
||||
UdpPoint.RemoteAddr.Addr[0] = Instance->ServerIp;
|
||||
|
||||
//
|
||||
// Send the requests to the listening port, other packets
|
||||
@@ -457,7 +456,7 @@ Mtftp4SendPacket (
|
||||
Instance->UnicastPort,
|
||||
Packet,
|
||||
&UdpPoint,
|
||||
0,
|
||||
NULL,
|
||||
Mtftp4OnPacketSent,
|
||||
Instance
|
||||
);
|
||||
@@ -484,16 +483,15 @@ Mtftp4Retransmit (
|
||||
IN MTFTP4_PROTOCOL *Instance
|
||||
)
|
||||
{
|
||||
UDP_POINTS UdpPoint;
|
||||
UDP_END_POINT UdpPoint;
|
||||
EFI_STATUS Status;
|
||||
UINT16 OpCode;
|
||||
UINT16 Value;
|
||||
|
||||
ASSERT (Instance->LastPacket != NULL);
|
||||
|
||||
UdpPoint.LocalAddr = 0;
|
||||
UdpPoint.LocalPort = 0;
|
||||
UdpPoint.RemoteAddr = Instance->ServerIp;
|
||||
ZeroMem (&UdpPoint, sizeof (UdpPoint));
|
||||
UdpPoint.RemoteAddr.Addr[0] = Instance->ServerIp;
|
||||
|
||||
//
|
||||
// Set the requests to the listening port, other packets to the connected port
|
||||
@@ -514,7 +512,7 @@ Mtftp4Retransmit (
|
||||
Instance->UnicastPort,
|
||||
Instance->LastPacket,
|
||||
&UdpPoint,
|
||||
0,
|
||||
NULL,
|
||||
Mtftp4OnPacketSent,
|
||||
Instance
|
||||
);
|
||||
|
@@ -329,7 +329,7 @@ Mtftp4WrqHandleOack (
|
||||
The input process routine for MTFTP upload.
|
||||
|
||||
@param UdpPacket The received MTFTP packet.
|
||||
@param Points The local/remote access point
|
||||
@param EndPoint The local/remote access point
|
||||
@param IoStatus The result of the packet receiving
|
||||
@param Context Opaque parameter for the callback, which is the
|
||||
MTFTP session.
|
||||
@@ -337,7 +337,7 @@ Mtftp4WrqHandleOack (
|
||||
VOID
|
||||
Mtftp4WrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
@@ -371,11 +371,11 @@ Mtftp4WrqInput (
|
||||
// Client send initial request to server's listening port. Server
|
||||
// will select a UDP port to communicate with the client.
|
||||
//
|
||||
if (Points->RemotePort != Instance->ConnectedPort) {
|
||||
if (EndPoint->RemotePort != Instance->ConnectedPort) {
|
||||
if (Instance->ConnectedPort != 0) {
|
||||
goto ON_EXIT;
|
||||
} else {
|
||||
Instance->ConnectedPort = Points->RemotePort;
|
||||
Instance->ConnectedPort = EndPoint->RemotePort;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user