X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=NetworkPkg%2FTcpDxe%2FTcpMain.c;h=75de71eb6ea300c95fabc8fa509f45560164aa7b;hb=HEAD;hp=55a6d5b7d21330dbea17054cd3989d90708a930e;hpb=a3bcde70e6dc69000f85cc5deee98101d2ae200a;p=mirror_edk2.git
diff --git a/NetworkPkg/TcpDxe/TcpMain.c b/NetworkPkg/TcpDxe/TcpMain.c
index 55a6d5b7d2..c6cf3e0c2a 100644
--- a/NetworkPkg/TcpDxe/TcpMain.c
+++ b/NetworkPkg/TcpDxe/TcpMain.c
@@ -1,15 +1,10 @@
/** @file
Implementation of EFI_TCP4_PROTOCOL and EFI_TCP6_PROTOCOL.
- Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
+ (C) Copyright 2014 Hewlett-Packard Development Company, L.P.
+ Copyright (c) 2009 - 2018, 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
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -29,16 +24,20 @@
**/
EFI_STATUS
TcpChkDataBuf (
- IN UINT32 DataLen,
- IN UINT32 FragmentCount,
- IN EFI_TCP4_FRAGMENT_DATA *FragmentTable
+ IN UINT32 DataLen,
+ IN UINT32 FragmentCount,
+ IN EFI_TCP4_FRAGMENT_DATA *FragmentTable
)
{
- UINT32 Index;
+ UINT32 Index;
- UINT32 Len;
+ UINT32 Len;
for (Index = 0, Len = 0; Index < FragmentCount; Index++) {
+ if (FragmentTable[Index].FragmentBuffer == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
Len = Len + FragmentTable[Index].FragmentLength;
}
@@ -75,12 +74,12 @@ TcpChkDataBuf (
EFI_STATUS
EFIAPI
Tcp4GetModeData (
- IN CONST EFI_TCP4_PROTOCOL *This,
- OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL,
- OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL,
- OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
- OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
+ IN EFI_TCP4_PROTOCOL *This,
+ OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL,
+ OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL,
+ OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
+ OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
)
{
TCP4_MODE_DATA TcpMode;
@@ -90,13 +89,13 @@ Tcp4GetModeData (
return EFI_INVALID_PARAMETER;
}
- Sock = SOCK_FROM_THIS (This);
+ Sock = SOCK_FROM_THIS (This);
- TcpMode.Tcp4State = Tcp4State;
- TcpMode.Tcp4ConfigData = Tcp4ConfigData;
- TcpMode.Ip4ModeData = Ip4ModeData;
- TcpMode.MnpConfigData = MnpConfigData;
- TcpMode.SnpModeData = SnpModeData;
+ TcpMode.Tcp4State = Tcp4State;
+ TcpMode.Tcp4ConfigData = Tcp4ConfigData;
+ TcpMode.Ip4ModeData = Ip4ModeData;
+ TcpMode.MnpConfigData = MnpConfigData;
+ TcpMode.SnpModeData = SnpModeData;
return SockGetMode (Sock, &TcpMode);
}
@@ -126,8 +125,8 @@ Tcp4GetModeData (
EFI_STATUS
EFIAPI
Tcp4Configure (
- IN EFI_TCP4_PROTOCOL * This,
- IN EFI_TCP4_CONFIG_DATA * TcpConfigData OPTIONAL
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL
)
{
EFI_TCP4_OPTION *Option;
@@ -144,21 +143,21 @@ Tcp4Configure (
// Tcp protocol related parameter check will be conducted here
//
if (NULL != TcpConfigData) {
-
CopyMem (&Ip, &TcpConfigData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));
- if ((Ip != 0) && !NetIp4IsUnicast (NTOHL (Ip), 0)) {
+ if (IP4_IS_LOCAL_BROADCAST (NTOHL (Ip))) {
return EFI_INVALID_PARAMETER;
}
- if (TcpConfigData->AccessPoint.ActiveFlag && (0 == TcpConfigData->AccessPoint.RemotePort || (Ip == 0))) {
+ if (TcpConfigData->AccessPoint.ActiveFlag && ((0 == TcpConfigData->AccessPoint.RemotePort) || (Ip == 0))) {
return EFI_INVALID_PARAMETER;
}
if (!TcpConfigData->AccessPoint.UseDefaultAddress) {
-
CopyMem (&Ip, &TcpConfigData->AccessPoint.StationAddress, sizeof (IP4_ADDR));
CopyMem (&SubnetMask, &TcpConfigData->AccessPoint.SubnetMask, sizeof (IP4_ADDR));
- if (!NetIp4IsUnicast (NTOHL (Ip), 0) || !IP4_IS_VALID_NETMASK (NTOHL (SubnetMask))) {
+ if (!IP4_IS_VALID_NETMASK (NTOHL (SubnetMask)) ||
+ ((SubnetMask != 0) && !NetIp4IsUnicast (NTOHL (Ip), NTOHL (SubnetMask))))
+ {
return EFI_INVALID_PARAMETER;
}
}
@@ -212,26 +211,26 @@ Tcp4Configure (
EFI_STATUS
EFIAPI
Tcp4Routes (
- IN EFI_TCP4_PROTOCOL *This,
- IN BOOLEAN DeleteRoute,
- IN EFI_IPv4_ADDRESS *SubnetAddress,
- IN EFI_IPv4_ADDRESS *SubnetMask,
- IN EFI_IPv4_ADDRESS *GatewayAddress
+ IN EFI_TCP4_PROTOCOL *This,
+ IN BOOLEAN DeleteRoute,
+ IN EFI_IPv4_ADDRESS *SubnetAddress,
+ IN EFI_IPv4_ADDRESS *SubnetMask,
+ IN EFI_IPv4_ADDRESS *GatewayAddress
)
{
- SOCKET *Sock;
- TCP4_ROUTE_INFO RouteInfo;
+ SOCKET *Sock;
+ TCP4_ROUTE_INFO RouteInfo;
if (NULL == This) {
return EFI_INVALID_PARAMETER;
}
- Sock = SOCK_FROM_THIS (This);
+ Sock = SOCK_FROM_THIS (This);
- RouteInfo.DeleteRoute = DeleteRoute;
- RouteInfo.SubnetAddress = SubnetAddress;
- RouteInfo.SubnetMask = SubnetMask;
- RouteInfo.GatewayAddress = GatewayAddress;
+ RouteInfo.DeleteRoute = DeleteRoute;
+ RouteInfo.SubnetAddress = SubnetAddress;
+ RouteInfo.SubnetMask = SubnetMask;
+ RouteInfo.GatewayAddress = GatewayAddress;
return SockRoute (Sock, &RouteInfo);
}
@@ -258,13 +257,13 @@ Tcp4Routes (
EFI_STATUS
EFIAPI
Tcp4Connect (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == ConnectionToken || NULL == ConnectionToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == ConnectionToken) || (NULL == ConnectionToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -283,7 +282,7 @@ Tcp4Connect (
@retval EFI_SUCCESS The listen token was queued successfully.
@retval EFI_NOT_STARTED The EFI_TCP4_PROTOCOL instance hasn't been
configured.
- @retval EFI_ACCESS_DENIED The instatnce is not a passive one or it is not
+ @retval EFI_ACCESS_DENIED The instance is not a passive one or it is not
in Tcp4StateListen state or a same listen token
has already existed in the listen token queue of
this TCP instance.
@@ -296,13 +295,13 @@ Tcp4Connect (
EFI_STATUS
EFIAPI
Tcp4Accept (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_LISTEN_TOKEN *ListenToken
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_LISTEN_TOKEN *ListenToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == ListenToken || NULL == ListenToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == ListenToken) || (NULL == ListenToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -343,28 +342,29 @@ Tcp4Accept (
EFI_STATUS
EFIAPI
Tcp4Transmit (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_IO_TOKEN *Token
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_IO_TOKEN *Token
)
{
SOCKET *Sock;
EFI_STATUS Status;
- if (NULL == This ||
- NULL == Token ||
- NULL == Token->CompletionToken.Event ||
- NULL == Token->Packet.TxData ||
- 0 == Token->Packet.TxData->FragmentCount ||
- 0 == Token->Packet.TxData->DataLength
- ) {
+ if ((NULL == This) ||
+ (NULL == Token) ||
+ (NULL == Token->CompletionToken.Event) ||
+ (NULL == Token->Packet.TxData) ||
+ (0 == Token->Packet.TxData->FragmentCount) ||
+ (0 == Token->Packet.TxData->DataLength)
+ )
+ {
return EFI_INVALID_PARAMETER;
}
Status = TcpChkDataBuf (
- Token->Packet.TxData->DataLength,
- Token->Packet.TxData->FragmentCount,
- Token->Packet.TxData->FragmentTable
- );
+ Token->Packet.TxData->DataLength,
+ Token->Packet.TxData->FragmentCount,
+ Token->Packet.TxData->FragmentTable
+ );
if (EFI_ERROR (Status)) {
return Status;
}
@@ -408,28 +408,29 @@ Tcp4Transmit (
EFI_STATUS
EFIAPI
Tcp4Receive (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_IO_TOKEN *Token
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_IO_TOKEN *Token
)
{
SOCKET *Sock;
EFI_STATUS Status;
- if (NULL == This ||
- NULL == Token ||
- NULL == Token->CompletionToken.Event ||
- NULL == Token->Packet.RxData ||
- 0 == Token->Packet.RxData->FragmentCount ||
- 0 == Token->Packet.RxData->DataLength
- ) {
+ if ((NULL == This) ||
+ (NULL == Token) ||
+ (NULL == Token->CompletionToken.Event) ||
+ (NULL == Token->Packet.RxData) ||
+ (0 == Token->Packet.RxData->FragmentCount) ||
+ (0 == Token->Packet.RxData->DataLength)
+ )
+ {
return EFI_INVALID_PARAMETER;
}
Status = TcpChkDataBuf (
- Token->Packet.RxData->DataLength,
- Token->Packet.RxData->FragmentCount,
- Token->Packet.RxData->FragmentTable
- );
+ Token->Packet.RxData->DataLength,
+ Token->Packet.RxData->FragmentCount,
+ Token->Packet.RxData->FragmentTable
+ );
if (EFI_ERROR (Status)) {
return Status;
}
@@ -437,7 +438,6 @@ Tcp4Receive (
Sock = SOCK_FROM_THIS (This);
return SockRcv (Sock, Token);
-
}
/**
@@ -465,13 +465,13 @@ Tcp4Receive (
EFI_STATUS
EFIAPI
Tcp4Close (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_CLOSE_TOKEN *CloseToken
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_CLOSE_TOKEN *CloseToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == CloseToken || NULL == CloseToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == CloseToken) || (NULL == CloseToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -483,24 +483,43 @@ Tcp4Close (
/**
Abort an asynchronous connection, listen, transmission or receive request.
- @param[in] This Pointer to the EFI_TCP4_PROTOCOL instance.
- @param[in] Token Pointer to a token that has been issued by
- Connect(), Accept(), Transmit() or Receive(). If
- NULL, all pending tokens issued by the four
- functions listed above will be aborted.
-
- @retval EFI_UNSUPPORTED The operation is not supported in the current
- implementation.
+ @param This The pointer to the EFI_TCP4_PROTOCOL instance.
+ @param Token The pointer to a token that has been issued by
+ EFI_TCP4_PROTOCOL.Connect(),
+ EFI_TCP4_PROTOCOL.Accept(),
+ EFI_TCP4_PROTOCOL.Transmit() or
+ EFI_TCP4_PROTOCOL.Receive(). If NULL, all pending
+ tokens issued by above four functions will be aborted. Type
+ EFI_TCP4_COMPLETION_TOKEN is defined in
+ EFI_TCP4_PROTOCOL.Connect().
+
+ @retval EFI_SUCCESS The asynchronous I/O request is aborted and Token->Event
+ is signaled.
+ @retval EFI_INVALID_PARAMETER This is NULL.
+ @retval EFI_NOT_STARTED This instance hasn't been configured.
+ @retval EFI_NO_MAPPING When using the default address, configuration
+ (DHCP, BOOTP,RARP, etc.) hasn't finished yet.
+ @retval EFI_NOT_FOUND The asynchronous I/O request isn't found in the
+ transmission or receive queue. It has either
+ completed or wasn't issued by Transmit() and Receive().
**/
EFI_STATUS
EFIAPI
Tcp4Cancel (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL
+ IN EFI_TCP4_PROTOCOL *This,
+ IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL
)
{
- return EFI_UNSUPPORTED;
+ SOCKET *Sock;
+
+ if (NULL == This) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Sock = SOCK_FROM_THIS (This);
+
+ return SockCancel (Sock, Token);
}
/**
@@ -520,7 +539,7 @@ Tcp4Cancel (
EFI_STATUS
EFIAPI
Tcp4Poll (
- IN EFI_TCP4_PROTOCOL *This
+ IN EFI_TCP4_PROTOCOL *This
)
{
SOCKET *Sock;
@@ -530,7 +549,7 @@ Tcp4Poll (
return EFI_INVALID_PARAMETER;
}
- Sock = SOCK_FROM_THIS (This);
+ Sock = SOCK_FROM_THIS (This);
Status = Sock->ProtoHandler (Sock, SOCK_POLL, NULL);
@@ -568,12 +587,12 @@ Tcp4Poll (
EFI_STATUS
EFIAPI
Tcp6GetModeData (
- IN EFI_TCP6_PROTOCOL *This,
- OUT EFI_TCP6_CONNECTION_STATE *Tcp6State OPTIONAL,
- OUT EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL,
- OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
- OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
+ IN EFI_TCP6_PROTOCOL *This,
+ OUT EFI_TCP6_CONNECTION_STATE *Tcp6State OPTIONAL,
+ OUT EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL,
+ OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
+ OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
)
{
TCP6_MODE_DATA TcpMode;
@@ -583,7 +602,7 @@ Tcp6GetModeData (
return EFI_INVALID_PARAMETER;
}
- Sock = SOCK_FROM_THIS (This);
+ Sock = SOCK_FROM_THIS (This);
TcpMode.Tcp6State = Tcp6State;
TcpMode.Tcp6ConfigData = Tcp6ConfigData;
@@ -644,8 +663,8 @@ Tcp6GetModeData (
EFI_STATUS
EFIAPI
Tcp6Configure (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL
)
{
EFI_TCP6_OPTION *Option;
@@ -661,15 +680,15 @@ Tcp6Configure (
// Tcp protocol related parameter check will be conducted here
//
if (NULL != Tcp6ConfigData) {
-
Ip = &Tcp6ConfigData->AccessPoint.RemoteAddress;
if (!NetIp6IsUnspecifiedAddr (Ip) && !NetIp6IsValidUnicast (Ip)) {
return EFI_INVALID_PARAMETER;
}
if (Tcp6ConfigData->AccessPoint.ActiveFlag &&
- (0 == Tcp6ConfigData->AccessPoint.RemotePort || NetIp6IsUnspecifiedAddr (Ip))
- ) {
+ ((0 == Tcp6ConfigData->AccessPoint.RemotePort) || NetIp6IsUnspecifiedAddr (Ip))
+ )
+ {
return EFI_INVALID_PARAMETER;
}
@@ -732,13 +751,13 @@ Tcp6Configure (
EFI_STATUS
EFIAPI
Tcp6Connect (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == ConnectionToken || NULL == ConnectionToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == ConnectionToken) || (NULL == ConnectionToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -777,7 +796,7 @@ Tcp6Connect (
@retval EFI_INVALID_PARAMETER One or more of the following are TRUE:
- This is NULL.
- ListenToken is NULL.
- - ListentToken->CompletionToken.Event is NULL.
+ - ListenToken->CompletionToken.Event is NULL.
@retval EFI_OUT_OF_RESOURCES Could not allocate enough resource to finish the operation.
@retval EFI_DEVICE_ERROR Any unexpected error not belonging to a category listed above.
@@ -785,13 +804,13 @@ Tcp6Connect (
EFI_STATUS
EFIAPI
Tcp6Accept (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_LISTEN_TOKEN *ListenToken
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_LISTEN_TOKEN *ListenToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == ListenToken || NULL == ListenToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == ListenToken) || (NULL == ListenToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -840,28 +859,29 @@ Tcp6Accept (
EFI_STATUS
EFIAPI
Tcp6Transmit (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_IO_TOKEN *Token
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_IO_TOKEN *Token
)
{
SOCKET *Sock;
EFI_STATUS Status;
- if (NULL == This ||
- NULL == Token ||
- NULL == Token->CompletionToken.Event ||
- NULL == Token->Packet.TxData ||
- 0 == Token->Packet.TxData->FragmentCount ||
- 0 == Token->Packet.TxData->DataLength
- ) {
+ if ((NULL == This) ||
+ (NULL == Token) ||
+ (NULL == Token->CompletionToken.Event) ||
+ (NULL == Token->Packet.TxData) ||
+ (0 == Token->Packet.TxData->FragmentCount) ||
+ (0 == Token->Packet.TxData->DataLength)
+ )
+ {
return EFI_INVALID_PARAMETER;
}
Status = TcpChkDataBuf (
- Token->Packet.TxData->DataLength,
- Token->Packet.TxData->FragmentCount,
- (EFI_TCP4_FRAGMENT_DATA *) Token->Packet.TxData->FragmentTable
- );
+ Token->Packet.TxData->DataLength,
+ Token->Packet.TxData->FragmentCount,
+ (EFI_TCP4_FRAGMENT_DATA *)Token->Packet.TxData->FragmentTable
+ );
if (EFI_ERROR (Status)) {
return Status;
}
@@ -920,28 +940,29 @@ Tcp6Transmit (
EFI_STATUS
EFIAPI
Tcp6Receive (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_IO_TOKEN *Token
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_IO_TOKEN *Token
)
{
SOCKET *Sock;
EFI_STATUS Status;
- if (NULL == This ||
- NULL == Token ||
- NULL == Token->CompletionToken.Event ||
- NULL == Token->Packet.RxData ||
- 0 == Token->Packet.RxData->FragmentCount ||
- 0 == Token->Packet.RxData->DataLength
- ) {
+ if ((NULL == This) ||
+ (NULL == Token) ||
+ (NULL == Token->CompletionToken.Event) ||
+ (NULL == Token->Packet.RxData) ||
+ (0 == Token->Packet.RxData->FragmentCount) ||
+ (0 == Token->Packet.RxData->DataLength)
+ )
+ {
return EFI_INVALID_PARAMETER;
}
Status = TcpChkDataBuf (
- Token->Packet.RxData->DataLength,
- Token->Packet.RxData->FragmentCount,
- (EFI_TCP4_FRAGMENT_DATA *) Token->Packet.RxData->FragmentTable
- );
+ Token->Packet.RxData->DataLength,
+ Token->Packet.RxData->FragmentCount,
+ (EFI_TCP4_FRAGMENT_DATA *)Token->Packet.RxData->FragmentTable
+ );
if (EFI_ERROR (Status)) {
return Status;
}
@@ -981,13 +1002,13 @@ Tcp6Receive (
EFI_STATUS
EFIAPI
Tcp6Close (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_CLOSE_TOKEN *CloseToken
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_CLOSE_TOKEN *CloseToken
)
{
SOCKET *Sock;
- if (NULL == This || NULL == CloseToken || NULL == CloseToken->CompletionToken.Event) {
+ if ((NULL == This) || (NULL == CloseToken) || (NULL == CloseToken->CompletionToken.Event)) {
return EFI_INVALID_PARAMETER;
}
@@ -997,20 +1018,20 @@ Tcp6Close (
}
/**
- Abort an asynchronous connection, listen, transmission, or receive request.
+ Abort an asynchronous connection, listen, transmission or receive request.
- The Cancel() function aborts a pending connection, listen, transmit, or
+ The Cancel() function aborts a pending connection, listen, transmit or
receive request.
- If Token is not NULL and the token is in the connection, listen, transmission,
+ If Token is not NULL and the token is in the connection, listen, transmission
or receive queue when it is being cancelled, its Token->Status will be set
- to EFI_ABORTED, and then Token->Event will be signaled.
+ to EFI_ABORTED and then Token->Event will be signaled.
If the token is not in one of the queues, which usually means that the
asynchronous operation has completed, EFI_NOT_FOUND is returned.
If Token is NULL all asynchronous token issued by Connect(), Accept(),
- Transmit(), and Receive() will be aborted.
+ Transmit() and Receive() will be aborted.
@param[in] This Pointer to the EFI_TCP6_PROTOCOL instance.
@param[in] Token Pointer to a token that has been issued by
@@ -1022,17 +1043,31 @@ Tcp6Close (
EFI_TCP6_COMPLETION_TOKEN is defined in
EFI_TCP_PROTOCOL.Connect().
- @retval EFI_UNSUPPORTED The implementation does not support this function.
+ @retval EFI_SUCCESS The asynchronous I/O request is aborted and Token->Event
+ is signaled.
+ @retval EFI_INVALID_PARAMETER This is NULL.
+ @retval EFI_NOT_STARTED This instance hasn't been configured.
+ @retval EFI_NOT_FOUND The asynchronous I/O request isn't found in the transmission or
+ receive queue. It has either completed or wasn't issued by
+ Transmit() and Receive().
**/
EFI_STATUS
EFIAPI
Tcp6Cancel (
- IN EFI_TCP6_PROTOCOL *This,
- IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL
+ IN EFI_TCP6_PROTOCOL *This,
+ IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL
)
{
- return EFI_UNSUPPORTED;
+ SOCKET *Sock;
+
+ if (NULL == This) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Sock = SOCK_FROM_THIS (This);
+
+ return SockCancel (Sock, Token);
}
/**
@@ -1055,7 +1090,7 @@ Tcp6Cancel (
EFI_STATUS
EFIAPI
Tcp6Poll (
- IN EFI_TCP6_PROTOCOL *This
+ IN EFI_TCP6_PROTOCOL *This
)
{
SOCKET *Sock;
@@ -1065,10 +1100,9 @@ Tcp6Poll (
return EFI_INVALID_PARAMETER;
}
- Sock = SOCK_FROM_THIS (This);
+ Sock = SOCK_FROM_THIS (This);
Status = Sock->ProtoHandler (Sock, SOCK_POLL, NULL);
return Status;
}
-