1. Mark the network volatile variables as deprecated in code comments and remove related code to set/get these variable.

2. Remove the GetTime() call when receiving Udp4/6 packets.
Signed-off-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye, Ting <ting.ye@intel.com>
Reviewed-by: Wu, Jiaxin <jiaxin.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15497 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Fu Siyuan
2014-05-07 06:17:31 +00:00
committed by sfu5
parent 5966402ed5
commit d551cc64cd
33 changed files with 87 additions and 1366 deletions

View File

@@ -1,7 +1,7 @@
/** @file
The implementation of a dispatch routine for processing TCP requests.
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -327,8 +327,6 @@ TcpFlushPcb (
FreePool (Sock->DevicePath);
Sock->DevicePath = NULL;
}
TcpSetVariableData (TcpProto->TcpService);
}
NetbufFreeList (&Tcb->SndQue);

View File

@@ -1,7 +1,7 @@
/** @file
The driver binding and service binding protocol for the TCP driver.
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -349,8 +349,6 @@ TcpCreateService (
goto ON_ERROR;
}
TcpSetVariableData (TcpServiceData);
return EFI_SUCCESS;
ON_ERROR:
@@ -499,11 +497,6 @@ TcpDestroyService (
//
TcpDestroyTimer ();
//
// Clear the variable.
//
TcpClearVariableData (TcpServiceData);
//
// Release the TCP service data
//

View File

@@ -1,7 +1,7 @@
/** @file
The prototype of driver binding and service binding protocol for TCP driver.
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -33,7 +33,6 @@ typedef struct _TCP_SERVICE_DATA {
UINT8 IpVersion;
IP_IO *IpIo;
EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
CHAR16 *MacString;
LIST_ENTRY SocketList;
} TCP_SERVICE_DATA;

View File

@@ -1,7 +1,7 @@
/** @file
Declaration of external functions shared in TCP driver.
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -276,31 +276,6 @@ TcpResetConnection (
IN TCP_CB *Tcb
);
/**
Set the Tcp variable data.
@param[in] TcpService Tcp service data.
@retval EFI_OUT_OF_RESOURCES There are not enough resources to set the variable.
@retval other Set variable failed.
**/
EFI_STATUS
TcpSetVariableData (
IN TCP_SERVICE_DATA *TcpService
);
/**
Clear the variable and free the resource.
@param[in] TcpService Tcp service data.
**/
VOID
TcpClearVariableData (
IN TCP_SERVICE_DATA *TcpService
);
/**
Install the device path protocol on the TCP instance.

View File

@@ -1,7 +1,7 @@
/** @file
Misc support routines for TCP driver.
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -467,7 +467,6 @@ TcpInsertTcb (
InsertHeadList (Head, &Tcb->List);
TcpProto = (TCP_PROTO_DATA *) Tcb->Sk->ProtoReserved;
TcpSetVariableData (TcpProto->TcpService);
return 0;
}
@@ -943,266 +942,6 @@ TcpResetConnection (
NetbufFree (Nbuf);
}
/**
Set the Tcp variable data.
@param[in] TcpService Tcp service data.
@retval EFI_OUT_OF_RESOURCES There are not enough resources to set the variable.
@retval other Set variable failed.
**/
EFI_STATUS
TcpSetVariableData (
IN TCP_SERVICE_DATA *TcpService
)
{
EFI_GUID *ServiceBindingGuid;
UINT32 NumConfiguredInstance;
LIST_ENTRY *Entry;
TCP_CB *TcpPcb;
TCP_PROTO_DATA *TcpProto;
UINTN VariableDataSize;
EFI_TCP4_VARIABLE_DATA *Tcp4VariableData;
EFI_TCP4_SERVICE_POINT *Tcp4ServicePoint;
EFI_TCP6_VARIABLE_DATA *Tcp6VariableData;
EFI_TCP6_SERVICE_POINT *Tcp6ServicePoint;
VOID *VariableData;
CHAR16 *NewMacString;
EFI_STATUS Status;
if (TcpService->IpVersion == IP_VERSION_4) {
ServiceBindingGuid = &gEfiTcp4ServiceBindingProtocolGuid;
} else {
ServiceBindingGuid = &gEfiTcp6ServiceBindingProtocolGuid;
}
NumConfiguredInstance = 0;
Tcp4VariableData = NULL;
Tcp6VariableData = NULL;
//
// Go through the running queue to count the instances.
//
NET_LIST_FOR_EACH (Entry, &mTcpRunQue) {
TcpPcb = NET_LIST_USER_STRUCT (Entry, TCP_CB, List);
TcpProto = (TCP_PROTO_DATA *) TcpPcb->Sk->ProtoReserved;
if (TcpProto->TcpService == TcpService) {
//
// This tcp instance belongs to the TcpService.
//
NumConfiguredInstance++;
}
}
//
// Go through the listening queue to count the instances.
//
NET_LIST_FOR_EACH (Entry, &mTcpListenQue) {
TcpPcb = NET_LIST_USER_STRUCT (Entry, TCP_CB, List);
TcpProto = (TCP_PROTO_DATA *) TcpPcb->Sk->ProtoReserved;
if (TcpProto->TcpService == TcpService) {
//
// This tcp instance belongs to the TcpService.
//
NumConfiguredInstance++;
}
}
Tcp4ServicePoint = NULL;
Tcp6ServicePoint = NULL;
//
// Calculate the size of the Tcp4VariableData. As there may be no Tcp4 child,
// we should add extra buffers for the service points only if the number of configured
// children is more than one.
//
if (TcpService->IpVersion == IP_VERSION_4) {
VariableDataSize = sizeof (EFI_TCP4_VARIABLE_DATA);
if (NumConfiguredInstance > 1) {
VariableDataSize += sizeof (EFI_TCP4_SERVICE_POINT) * (NumConfiguredInstance - 1);
}
Tcp4VariableData = AllocateZeroPool (VariableDataSize);
if (Tcp4VariableData == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Tcp4VariableData->DriverHandle = TcpService->DriverBindingHandle;
Tcp4VariableData->ServiceCount = NumConfiguredInstance;
Tcp4ServicePoint = &Tcp4VariableData->Services[0];
VariableData = Tcp4VariableData;
} else {
VariableDataSize = sizeof (EFI_TCP6_VARIABLE_DATA);
if (NumConfiguredInstance > 1) {
VariableDataSize += sizeof (EFI_TCP6_SERVICE_POINT) * (NumConfiguredInstance - 1);
}
Tcp6VariableData = AllocateZeroPool (VariableDataSize);
if (Tcp6VariableData == NULL) {
return EFI_OUT_OF_RESOURCES;
}
Tcp6VariableData->DriverHandle = TcpService->DriverBindingHandle;
Tcp6VariableData->ServiceCount = NumConfiguredInstance;
Tcp6ServicePoint = &Tcp6VariableData->Services[0];
VariableData = Tcp6VariableData;
}
//
// Go through the running queue to fill the service points.
//
NET_LIST_FOR_EACH (Entry, &mTcpRunQue) {
TcpPcb = NET_LIST_USER_STRUCT (Entry, TCP_CB, List);
TcpProto = (TCP_PROTO_DATA *) TcpPcb->Sk->ProtoReserved;
if (TcpProto->TcpService == TcpService) {
//
// This tcp instance belongs to the TcpService.
//
if (TcpService->IpVersion == IP_VERSION_4) {
Tcp4ServicePoint->InstanceHandle = TcpPcb->Sk->SockHandle;
CopyMem (&Tcp4ServicePoint->LocalAddress, &TcpPcb->LocalEnd.Ip, sizeof (EFI_IPv4_ADDRESS));
Tcp4ServicePoint->LocalPort = NTOHS (TcpPcb->LocalEnd.Port);
CopyMem (&Tcp4ServicePoint->RemoteAddress, &TcpPcb->RemoteEnd.Ip, sizeof (EFI_IPv4_ADDRESS));
Tcp4ServicePoint->RemotePort = NTOHS (TcpPcb->RemoteEnd.Port);
Tcp4ServicePoint++;
} else {
Tcp6ServicePoint->InstanceHandle = TcpPcb->Sk->SockHandle;
IP6_COPY_ADDRESS (&Tcp6ServicePoint->LocalAddress, &TcpPcb->LocalEnd.Ip);
Tcp6ServicePoint->LocalPort = NTOHS (TcpPcb->LocalEnd.Port);
IP6_COPY_ADDRESS (&Tcp6ServicePoint->RemoteAddress, &TcpPcb->RemoteEnd.Ip);
Tcp6ServicePoint->RemotePort = NTOHS (TcpPcb->RemoteEnd.Port);
Tcp6ServicePoint++;
}
}
}
//
// Go through the listening queue to fill the service points.
//
NET_LIST_FOR_EACH (Entry, &mTcpListenQue) {
TcpPcb = NET_LIST_USER_STRUCT (Entry, TCP_CB, List);
TcpProto = (TCP_PROTO_DATA *) TcpPcb->Sk->ProtoReserved;
if (TcpProto->TcpService == TcpService) {
//
// This tcp instance belongs to the TcpService.
//
if (TcpService->IpVersion == IP_VERSION_4) {
Tcp4ServicePoint->InstanceHandle = TcpPcb->Sk->SockHandle;
CopyMem (&Tcp4ServicePoint->LocalAddress, &TcpPcb->LocalEnd.Ip, sizeof (EFI_IPv4_ADDRESS));
Tcp4ServicePoint->LocalPort = NTOHS (TcpPcb->LocalEnd.Port);
CopyMem (&Tcp4ServicePoint->RemoteAddress, &TcpPcb->RemoteEnd.Ip, sizeof (EFI_IPv4_ADDRESS));
Tcp4ServicePoint->RemotePort = NTOHS (TcpPcb->RemoteEnd.Port);
Tcp4ServicePoint++;
} else {
Tcp6ServicePoint->InstanceHandle = TcpPcb->Sk->SockHandle;
IP6_COPY_ADDRESS (&Tcp6ServicePoint->LocalAddress, &TcpPcb->LocalEnd.Ip);
Tcp6ServicePoint->LocalPort = NTOHS (TcpPcb->LocalEnd.Port);
IP6_COPY_ADDRESS (&Tcp6ServicePoint->RemoteAddress, &TcpPcb->RemoteEnd.Ip);
Tcp6ServicePoint->RemotePort = NTOHS (TcpPcb->RemoteEnd.Port);
Tcp6ServicePoint++;
}
}
}
//
// Get the mac string.
//
Status = NetLibGetMacString (
TcpService->ControllerHandle,
TcpService->DriverBindingHandle,
&NewMacString
);
if (EFI_ERROR (Status)) {
goto ON_ERROR;
}
if (TcpService->MacString != NULL) {
//
// The variable is set already. We're going to update it.
//
if (StrCmp (TcpService->MacString, NewMacString) != 0) {
//
// The mac address is changed. Delete the previous variable first.
//
gRT->SetVariable (
TcpService->MacString,
ServiceBindingGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS,
0,
NULL
);
}
FreePool (TcpService->MacString);
}
TcpService->MacString = NewMacString;
Status = gRT->SetVariable (
TcpService->MacString,
ServiceBindingGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS,
VariableDataSize,
VariableData
);
ON_ERROR:
FreePool (VariableData);
return Status;
}
/**
Clear the variable and free the resource.
@param[in] TcpService Tcp service data.
**/
VOID
TcpClearVariableData (
IN TCP_SERVICE_DATA *TcpService
)
{
EFI_GUID *ServiceBindingGuid;
ASSERT (TcpService->MacString != NULL);
if (TcpService->IpVersion == IP_VERSION_4) {
ServiceBindingGuid = &gEfiTcp4ServiceBindingProtocolGuid;
} else {
ServiceBindingGuid = &gEfiTcp6ServiceBindingProtocolGuid;
}
gRT->SetVariable (
TcpService->MacString,
ServiceBindingGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS,
0,
NULL
);
FreePool (TcpService->MacString);
TcpService->MacString = NULL;
}
/**
Install the device path protocol on the TCP instance.