Reviewed-by: Fu Siyuan <siyuan...@intel.com>
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Jiaxin Wu > Sent: Thursday, February 25, 2016 12:22 PM > To: edk2-devel@lists.01.org > Cc: Ye, Ting <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > Subject: [edk2] [Patch 2/4] NetworkPkg: Change the default IPv6 config policy > > The default policy for Ip6Config is Ip6ConfigPolicyAutomatic, > which results in all NIC ports starting SARR process when it > receives RA message with M flag from IPv6 router. So, this > patch is used to changes the the default IPv6 config policy to > Ip6ConfigPolicyManualand also defer the SetData operation after > Ip6ConfigProtocol installed. This update let the other platform > drivers have chance to change the default config data by consume > Ip6ConfigProtocol. > > Cc: Subramanian Sriram <srira...@hpe.com> > Cc: El-Haj-Mahmoud Samer <samer.el-haj-mahm...@hpe.com> > Cc: Ye Ting <ting...@intel.com> > Cc: Fu Siyuan <siyuan...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> > --- > NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c | 4 +- > NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h | 22 ++++++++++- > NetworkPkg/Ip6Dxe/Ip6Driver.c | 81 ++++++++++++++++++++++++++--------- > ---- > NetworkPkg/Ip6Dxe/Ip6Dxe.inf | 2 +- > 4 files changed, 78 insertions(+), 31 deletions(-) > > diff --git a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c > b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c > index 75d4f23..62a8ae2 100644 > --- a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c > +++ b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c > @@ -1,9 +1,9 @@ > /** @file > The implementation of EFI IPv6 Configuration Protocol. > > - Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2009 - 2016, 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. > @@ -2207,11 +2207,11 @@ Ip6ConfigInitInstance ( > > DataItem = &Instance->DataItem[Ip6ConfigDataTypePolicy]; > DataItem->SetData = Ip6ConfigSetPolicy; > DataItem->Data.Ptr = &Instance->Policy; > DataItem->DataSize = sizeof (Instance->Policy); > - Instance->Policy = Ip6ConfigPolicyAutomatic; > + Instance->Policy = Ip6ConfigPolicyManual; > SET_DATA_ATTRIB (DataItem->Attribute, DATA_ATTRIB_SIZE_FIXED); > > DataItem = &Instance- > >DataItem[Ip6ConfigDataTypeDupAddrDetectTransmits]; > DataItem->SetData = Ip6ConfigSetDadXmits; > DataItem->Data.Ptr = &Instance->DadXmits; > diff --git a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h > b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h > index 581978b..2f0e446 100644 > --- a/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h > +++ b/NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h > @@ -1,9 +1,9 @@ > /** @file > Definitions for EFI IPv6 Configuartion Protocol implementation. > > - Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2009 - 2016, 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. > @@ -214,10 +214,30 @@ struct _IP6_CONFIG_INSTANCE { > IP6_FORM_CALLBACK_INFO CallbackInfo; > IP6_CONFIG_NVDATA Ip6NvData; > }; > > /** > + Read the configuration data from variable storage according to the > VarName and > + gEfiIp6ConfigProtocolGuid. It checks the integrity of variable data. If the > + data is corrupted, it clears the variable data to ZERO. Othewise, it > outputs > the > + configuration data to IP6_CONFIG_INSTANCE. > + > + @param[in] VarName The pointer to the variable name > + @param[in, out] Instance The pointer to the IP6 config instance data. > + > + @retval EFI_NOT_FOUND The variable can not be found or already > corrupted. > + @retval EFI_OUT_OF_RESOURCES Fail to allocate resource to complete the > operation. > + @retval EFI_SUCCESS The configuration data was retrieved > successfully. > + > +**/ > +EFI_STATUS > +Ip6ConfigReadConfigData ( > + IN CHAR16 *VarName, > + IN OUT IP6_CONFIG_INSTANCE *Instance > + ); > + > +/** > The event process routine when the DHCPv6 server is answered with a reply > packet > for an information request. > > @param[in] This Points to the EFI_DHCP6_PROTOCOL. > @param[in] Context The pointer to the IP6 configuration instance > data. > diff --git a/NetworkPkg/Ip6Dxe/Ip6Driver.c b/NetworkPkg/Ip6Dxe/Ip6Driver.c > index 076dc60..ba70290 100644 > --- a/NetworkPkg/Ip6Dxe/Ip6Driver.c > +++ b/NetworkPkg/Ip6Dxe/Ip6Driver.c > @@ -1,9 +1,9 @@ > /** @file > The driver binding and service binding protocol for IP6 driver. > > - Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> > (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<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 > @@ -260,11 +260,10 @@ Ip6CreateService ( > { > IP6_SERVICE *IpSb; > EFI_STATUS Status; > EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken; > EFI_MANAGED_NETWORK_CONFIG_DATA *Config; > - IP6_CONFIG_DATA_ITEM *DataItem; > > ASSERT (Service != NULL); > > *Service = NULL; > > @@ -474,34 +473,10 @@ Ip6CreateService ( > ); > if (EFI_ERROR (Status)) { > goto ON_ERROR; > } > > - // > - // If there is any manual address, set it. > - // > - DataItem = &IpSb- > >Ip6ConfigInstance.DataItem[Ip6ConfigDataTypeManualAddress]; > - if (DataItem->Data.Ptr != NULL) { > - DataItem->SetData ( > - &IpSb->Ip6ConfigInstance, > - DataItem->DataSize, > - DataItem->Data.Ptr > - ); > - } > - > - // > - // If there is any gateway address, set it. > - // > - DataItem = &IpSb- > >Ip6ConfigInstance.DataItem[Ip6ConfigDataTypeGateway]; > - if (DataItem->Data.Ptr != NULL) { > - DataItem->SetData ( > - &IpSb->Ip6ConfigInstance, > - DataItem->DataSize, > - DataItem->Data.Ptr > - ); > - } > - > InsertHeadList (&IpSb->Interfaces, &IpSb->DefaultInterface->Link); > > *Service = IpSb; > return EFI_SUCCESS; > > @@ -533,10 +508,16 @@ Ip6DriverBindingStart ( > IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL > ) > { > IP6_SERVICE *IpSb; > EFI_STATUS Status; > + EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg; > + IP6_CONFIG_DATA_ITEM *DataItem; > + > + IpSb = NULL; > + Ip6Cfg = NULL; > + DataItem = NULL; > > // > // Test for the Ip6 service binding protocol > // > Status = gBS->OpenProtocol ( > @@ -558,21 +539,67 @@ Ip6DriverBindingStart ( > return Status; > } > > ASSERT (IpSb != NULL); > > + Ip6Cfg = &IpSb->Ip6ConfigInstance.Ip6Config; > + > // > // Install the Ip6ServiceBinding Protocol onto ControlerHandle > // > Status = gBS->InstallMultipleProtocolInterfaces ( > &ControllerHandle, > &gEfiIp6ServiceBindingProtocolGuid, > &IpSb->ServiceBinding, > &gEfiIp6ConfigProtocolGuid, > - &IpSb->Ip6ConfigInstance.Ip6Config, > + Ip6Cfg, > NULL > ); > + if (EFI_ERROR (Status)) { > + goto ON_ERROR; > + } > + > + // > + // Read the config data from NV variable again. > + // The default data can be changed by other drivers. > + // > + Status = Ip6ConfigReadConfigData (IpSb->MacString, &IpSb- > >Ip6ConfigInstance); > + if (EFI_ERROR (Status)) { > + goto ON_ERROR; > + } > + > + // > + // If there is any default manual address, set it. > + // > + DataItem = &IpSb- > >Ip6ConfigInstance.DataItem[Ip6ConfigDataTypeManualAddress]; > + if (DataItem->Data.Ptr != NULL) { > + Status = Ip6Cfg->SetData ( > + Ip6Cfg, > + Ip6ConfigDataTypeManualAddress, > + DataItem->DataSize, > + DataItem->Data.Ptr > + ); > + if (EFI_ERROR(Status)) { > + goto ON_ERROR; > + } > + } > + > + // > + // If there is any default gateway address, set it. > + // > + DataItem = &IpSb- > >Ip6ConfigInstance.DataItem[Ip6ConfigDataTypeGateway]; > + if (DataItem->Data.Ptr != NULL) { > + Status = Ip6Cfg->SetData ( > + Ip6Cfg, > + Ip6ConfigDataTypeGateway, > + DataItem->DataSize, > + DataItem->Data.Ptr > + ); > + if (EFI_ERROR(Status)) { > + goto ON_ERROR; > + } > + } > > if (!EFI_ERROR (Status)) { > // > // ready to go: start the receiving and timer > // > diff --git a/NetworkPkg/Ip6Dxe/Ip6Dxe.inf b/NetworkPkg/Ip6Dxe/Ip6Dxe.inf > index 76e068d..2d0fecc 100644 > --- a/NetworkPkg/Ip6Dxe/Ip6Dxe.inf > +++ b/NetworkPkg/Ip6Dxe/Ip6Dxe.inf > @@ -5,11 +5,11 @@ > # Neighbor Discovery Protocol (ND), Multicast Listener Discovery Protocol > (MLD), > # and a subset of the Internet Control Message Protocol (ICMPv6). This > driver > # also provides the mechanism to set and get various types of configurations > for > # the EFI IPv6 network stack. > # > -# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2009 - 2016, 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. > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel