From: "Ni, Ruiyu" <ruiyu.ni@Intel.com>
To: edk2-devel@lists.01.org
Subject: Re: [Patch 2/2] MdeModulePkg: Did some code enhancement for DxeIpIpLib.
Date: Wed, 10 Jan 2018 12:51:01 +0800 [thread overview]
Message-ID: <39b3957e-19ba-c5aa-112b-2478752db5bd@Intel.com> (raw)
In-Reply-To: <1515554188-2560-3-git-send-email-fan.wang@intel.com>
Patch title: DxeIpIoLib
On 1/10/2018 11:16 AM, Wang Fan wrote:
> * In DxeIpIo, there are several places use ASSERT() to check input
> parameters without and descriptions or error handling. This patch
> fixed this issue.
> * Fixed some incorrect descriptions in code commence.
> * Remove unneeded Exit tag in function IpIoOpen and IpIoConfigIp.
> * Add EFIAPI tag for function IpIoRefreshNeighbor.
>
> Cc: Jiaxin Wu <jiaxin.wu@intel.com>
> Cc: Ye Ting <ting.ye@intel.com>
> Cc: Fu Siyuan <siyuan.fu@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Wang Fan <fan.wang@intel.com>
> ---
> MdeModulePkg/Include/Library/IpIoLib.h | 21 +++++++++--
> MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c | 52 ++++++++++++++++++----------
> 2 files changed, 52 insertions(+), 21 deletions(-)
>
> diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h
> index 463bf95..61653b0 100644
> --- a/MdeModulePkg/Include/Library/IpIoLib.h
> +++ b/MdeModulePkg/Include/Library/IpIoLib.h
> @@ -308,10 +308,12 @@ typedef struct _IP_IO_IP_INFO {
> UINT8 IpVersion;
> } IP_IO_IP_INFO;
>
> /**
> Create a new IP_IO instance.
> +
> + If IpVersion is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function uses IP4/IP6 service binding protocol in Controller to create
> an IP4/IP6 child (aka IP4/IP6 instance).
>
> @param[in] Image The image handle of the driver or application that
> @@ -351,10 +353,12 @@ IpIoDestroy (
> IN OUT IP_IO *IpIo
> );
>
> /**
> Stop an IP_IO instance.
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function is paired with IpIoOpen(). The IP_IO will be unconfigured, and all
> pending send/receive tokens will be canceled.
>
> @param[in, out] IpIo The pointer to the IP_IO instance that needs to stop.
> @@ -370,11 +374,13 @@ IpIoStop (
> IN OUT IP_IO *IpIo
> );
>
> /**
> Open an IP_IO instance for use.
> -
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
> +
> This function is called after IpIoCreate(). It is used for configuring the IP
> instance and register the callbacks and their context data for sending and
> receiving IP packets.
>
> @param[in, out] IpIo The pointer to an IP_IO instance that needs
> @@ -399,11 +405,11 @@ IpIoOpen (
> );
>
> /**
> Send out an IP packet.
>
> - This function is called after IpIoOpen(). The data to be sent are wrapped in
> + This function is called after IpIoOpen(). The data to be sent is wrapped in
> Pkt. The IP instance wrapped in IpIo is used for sending by default but can be
> overriden by Sender. Other sending configs, like source address and gateway
> address etc., are specified in OverrideData.
>
> @param[in, out] IpIo Pointer to an IP_IO instance used for sending IP
> @@ -437,10 +443,13 @@ IpIoSend (
> );
>
> /**
> Cancel the IP transmit token that wraps this Packet.
>
> + If IpIo is NULL, then ASSERT().
> + If Packet is NULL, then ASSERT().
> +
> @param[in] IpIo The pointer to the IP_IO instance.
> @param[in] Packet The pointer to the packet of NET_BUF to cancel.
>
> **/
> VOID
> @@ -450,10 +459,13 @@ IpIoCancelTxToken (
> IN VOID *Packet
> );
>
> /**
> Add a new IP instance for sending data.
> +
> + If IpIo is NULL, then ASSERT().
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> The function is used to add the IP_IO to the IP_IO sending list. The caller
> can later use IpIoFindSender() to get the IP_IO and call IpIoSend() to send
> data.
>
> @@ -471,10 +483,12 @@ IpIoAddIp (
>
> /**
> Configure the IP instance of this IpInfo and start the receiving if IpConfigData
> is not NULL.
>
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
> +
> @param[in, out] IpInfo The pointer to the IP_IO_IP_INFO instance.
> @param[in, out] IpConfigData The IP4 or IP6 configure data used to configure
> the IP instance. If NULL, the IP instance is reset.
> If UseDefaultAddress is set to TRUE, and the configure
> operation succeeds, the default address information
> @@ -493,10 +507,12 @@ IpIoConfigIp (
> );
>
> /**
> Destroy an IP instance maintained in IpIo->IpList for
> sending purpose.
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function pairs with IpIoAddIp(). The IpInfo is previously created by
> IpIoAddIp(). The IP_IO_IP_INFO::RefCnt is decremented and the IP instance
> will be dstroyed if the RefCnt is zero.
>
> @@ -584,10 +600,11 @@ IpIoGetIcmpErrStatus (
> @retval EFI_UNSUPPORTED IP version is IPv4, which doesn't support neighbor cache refresh.
> @retval EFI_OUT_OF_RESOURCES Failed due to resource limitations.
>
> **/
> EFI_STATUS
> +EFIAPI
> IpIoRefreshNeighbor (
> IN IP_IO *IpIo,
> IN EFI_IP_ADDRESS *Neighbor,
> IN UINT32 Timeout
> );
> diff --git a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c
> index c7bc1aa..0c6681d 100644
> --- a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c
> +++ b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c
> @@ -1,10 +1,10 @@
> /** @file
> IpIo Library.
>
> (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
> -Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2005 - 2018, 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
> which accompanies this distribution. The full text of the license may be found at
> http://opensource.org/licenses/bsd-license.php
>
> @@ -632,12 +632,12 @@ IpIoExtFree (
> @param[in] Context Pointer to the context.
> @param[in] NotifyData Pointer to the notify data.
> @param[in] Dest Pointer to the destination IP address.
> @param[in] Override Pointer to the overriden IP_IO data.
>
> - @return Pointer to the data structure created to wrap the packet. If NULL,
> - @return resource limit occurred.
> + @return Pointer to the data structure created to wrap the packet. If any error occurs,
> + then return NULL.
>
> **/
> IP_IO_SEND_ENTRY *
> IpIoCreateSndEntry (
> IN OUT IP_IO *IpIo,
> @@ -1073,11 +1073,11 @@ IpIoListenHandlerDpc (
> if ((EFI_IP4 (RxData->Ip4RxData.Header->SourceAddress) != 0) &&
> (IpIo->SubnetMask != 0) &&
> IP4_NET_EQUAL (IpIo->StationIp, EFI_NTOHL (((EFI_IP4_RECEIVE_DATA *) RxData)->Header->SourceAddress), IpIo->SubnetMask) &&
> !NetIp4IsUnicast (EFI_NTOHL (((EFI_IP4_RECEIVE_DATA *) RxData)->Header->SourceAddress), IpIo->SubnetMask)) {
> //
> - // The source address is not zero and it's not a unicast IP address, discard it.
> + // The source address doesn't match StationIp and it's not a unicast IP address, discard it.
> //
> goto CleanUp;
> }
>
> if (RxData->Ip4RxData.DataLength == 0) {
> @@ -1219,10 +1219,12 @@ IpIoListenHandler (
> }
>
>
> /**
> Create a new IP_IO instance.
> +
> + If IpVersion is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function uses IP4/IP6 service binding protocol in Controller to create
> an IP4/IP6 child (aka IP4/IP6 instance).
>
> @param[in] Image The image handle of the driver or application that
> @@ -1284,11 +1286,11 @@ IpIoCreate (
> Status = IpIoCreateIpChildOpenProtocol (
> Controller,
> Image,
> &IpIo->ChildHandle,
> IpVersion,
> - (VOID **)&(IpIo->Ip)
> + (VOID **) & (IpIo->Ip)
> );
> if (EFI_ERROR (Status)) {
> goto ReleaseIpIo;
> }
>
> @@ -1306,11 +1308,13 @@ ReleaseIpIo:
> }
>
>
> /**
> Open an IP_IO instance for use.
> -
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
> +
> This function is called after IpIoCreate(). It is used for configuring the IP
> instance and register the callbacks and their context data for sending and
> receiving IP packets.
>
> @param[in, out] IpIo Pointer to an IP_IO instance that needs
> @@ -1417,11 +1421,11 @@ IpIoOpen (
> IpIo->Ip.Ip4,
> &(IpIo->RcvToken.Ip4Token)
> );
> if (EFI_ERROR (Status)) {
> IpIo->Ip.Ip4->Configure (IpIo->Ip.Ip4, NULL);
> - goto ErrorExit;
> + return Status;
> }
>
> } else {
>
> IpIo->Protocol = OpenData->IpConfigData.Ip6CfgData.DefaultProtocol;
> @@ -1429,25 +1433,25 @@ IpIoOpen (
> IpIo->Ip.Ip6,
> &(IpIo->RcvToken.Ip6Token)
> );
> if (EFI_ERROR (Status)) {
> IpIo->Ip.Ip6->Configure (IpIo->Ip.Ip6, NULL);
> - goto ErrorExit;
> + return Status;
> }
> }
>
> IpIo->IsConfigured = TRUE;
> InsertTailList (&mActiveIpIoList, &IpIo->Entry);
>
> -ErrorExit:
> -
> return Status;
> }
>
>
> /**
> Stop an IP_IO instance.
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function is paired with IpIoOpen(). The IP_IO will be unconfigured and all
> the pending send/receive tokens will be canceled.
>
> @param[in, out] IpIo Pointer to the IP_IO instance that needs to stop.
> @@ -1575,11 +1579,11 @@ IpIoDestroy (
>
>
> /**
> Send out an IP packet.
>
> - This function is called after IpIoOpen(). The data to be sent are wrapped in
> + This function is called after IpIoOpen(). The data to be sent is wrapped in
> Pkt. The IP instance wrapped in IpIo is used for sending by default but can be
> overriden by Sender. Other sending configs, like source address and gateway
> address etc., are specified in OverrideData.
>
> @param[in, out] IpIo Pointer to an IP_IO instance used for sending IP
> @@ -1662,10 +1666,13 @@ IpIoSend (
>
>
> /**
> Cancel the IP transmit token which wraps this Packet.
>
> + If IpIo is NULL, then ASSERT().
> + If Packet is NULL, then ASSERT().
> +
> @param[in] IpIo Pointer to the IP_IO instance.
> @param[in] Packet Pointer to the packet of NET_BUF to cancel.
>
> **/
> VOID
> @@ -1708,10 +1715,13 @@ IpIoCancelTxToken (
> }
>
>
> /**
> Add a new IP instance for sending data.
> +
> + If IpIo is NULL, then ASSERT().
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> The function is used to add the IP_IO to the IP_IO sending list. The caller
> can later use IpIoFindSender() to get the IP_IO and call IpIoSend() to send
> data.
>
> @@ -1735,10 +1745,11 @@ IpIoAddIp (
>
> IpInfo = AllocatePool (sizeof (IP_IO_IP_INFO));
> if (IpInfo == NULL) {
> return NULL;
> }
> + ASSERT ((IpInfo->IpVersion == IP_VERSION_4) || (IpInfo->IpVersion == IP_VERSION_6));
>
> //
> // Init this IpInfo, set the Addr and SubnetMask to 0 before we configure the IP
> // instance.
> //
> @@ -1810,10 +1821,13 @@ ReleaseIpInfo:
>
> /**
> Configure the IP instance of this IpInfo and start the receiving if IpConfigData
> is not NULL.
>
> + If IpInfo is NULL, then ASSERT().
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
> +
> @param[in, out] IpInfo Pointer to the IP_IO_IP_INFO instance.
> @param[in, out] IpConfigData The IP configure data used to configure the IP
> instance, if NULL the IP instance is reset. If
> UseDefaultAddress is set to TRUE, and the configure
> operation succeeds, the default address information
> @@ -1859,11 +1873,11 @@ IpIoConfigIp (
> } else {
> Status = Ip.Ip6->Configure (Ip.Ip6, IpConfigData);
> }
>
> if (EFI_ERROR (Status)) {
> - goto OnExit;
> + return Status;
> }
>
> if (IpConfigData != NULL) {
> if (IpInfo->IpVersion == IP_VERSION_4) {
>
> @@ -1874,11 +1888,11 @@ IpIoConfigIp (
> NULL,
> NULL
> );
> if (EFI_ERROR (Status)) {
> Ip.Ip4->Configure (Ip.Ip4, NULL);
> - goto OnExit;
> + return Status;
> }
>
> IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->StationAddress, &Ip4ModeData.ConfigData.StationAddress);
> IP4_COPY_ADDRESS (&((EFI_IP4_CONFIG_DATA*) IpConfigData)->SubnetMask, &Ip4ModeData.ConfigData.SubnetMask);
> }
> @@ -1908,11 +1922,11 @@ IpIoConfigIp (
> NULL,
> NULL
> );
> if (EFI_ERROR (Status)) {
> Ip.Ip6->Configure (Ip.Ip6, NULL);
> - goto OnExit;
> + return Status;
> }
>
> if (Ip6ModeData.IsConfigured) {
> CopyMem (
> &((EFI_IP6_CONFIG_DATA *) IpConfigData)->StationAddress,
> @@ -1944,11 +1958,11 @@ IpIoConfigIp (
> FreePool (Ip6ModeData.IcmpTypeList);
> }
>
> } else {
> Status = EFI_NO_MAPPING;
> - goto OnExit;
> + return Status;
> }
>
> CopyMem (
> &IpInfo->Addr,
> &Ip6ModeData.ConfigData.StationAddress,
> @@ -1969,19 +1983,19 @@ IpIoConfigIp (
> //
> ZeroMem (&IpInfo->Addr, sizeof (IpInfo->Addr));
> ZeroMem (&IpInfo->PreMask, sizeof (IpInfo->PreMask));
> }
>
> -OnExit:
> -
> return Status;
> }
>
>
> /**
> Destroy an IP instance maintained in IpIo->IpList for
> sending purpose.
> +
> + If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT().
>
> This function pairs with IpIoAddIp(). The IpInfo is previously created by
> IpIoAddIp(). The IP_IO_IP_INFO::RefCnt is decremented and the IP instance
> will be dstroyed if the RefCnt is zero.
>
> @@ -2110,12 +2124,11 @@ IpIoFindSender (
>
> if (EFI_IP6_EQUAL (&IpInfo->Addr.v6, &Src->v6)) {
> *IpIo = IpIoPtr;
> return IpInfo;
> }
> - }
> -
> + }
> }
> }
>
> //
> // No match.
> @@ -2258,10 +2271,11 @@ IpIoGetIcmpErrStatus (
> @retval EFI_UNSUPPORTED IP version is IPv4, which doesn't support neighbor cache refresh.
> @retval EFI_OUT_OF_RESOURCES Failed due to resource limit.
>
> **/
> EFI_STATUS
> +EFIAPI
> IpIoRefreshNeighbor (
> IN IP_IO *IpIo,
> IN EFI_IP_ADDRESS *Neighbor,
> IN UINT32 Timeout
> )
>
--
Thanks,
Ray
next prev parent reply other threads:[~2018-01-10 4:45 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 3:16 [Patch 0/2] Fixed some issues in DxeIpIoLib Wang Fan
2018-01-10 3:16 ` [Patch 1/2] MdeModulePkg: Freed the received packet buffer if it is not expected Wang Fan
2018-01-15 5:46 ` Fu, Siyuan
2018-01-16 0:44 ` Wu, Jiaxin
2018-01-10 3:16 ` [Patch 2/2] MdeModulePkg: Did some code enhancement for DxeIpIpLib Wang Fan
2018-01-10 4:51 ` Ni, Ruiyu [this message]
2018-01-10 4:58 ` Wang, Fan
2018-01-15 5:48 ` Fu, Siyuan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=39b3957e-19ba-c5aa-112b-2478752db5bd@Intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox