X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FIp6Dxe%2FIp6Common.c;h=4f71d052bf85c16a2a2b4596cd92257dd1f1922b;hp=18ec012a1ed389c7b138868544636303e87d5354;hb=d551cc64cdf1f943744294819220b78a60b10822;hpb=5966402ed51c5b611bf437c812047dc9c432a47e diff --git a/NetworkPkg/Ip6Dxe/Ip6Common.c b/NetworkPkg/Ip6Dxe/Ip6Common.c index 18ec012a1e..4f71d052bf 100644 --- a/NetworkPkg/Ip6Dxe/Ip6Common.c +++ b/NetworkPkg/Ip6Dxe/Ip6Common.c @@ -1,7 +1,7 @@ /** @file The implementation of common functions shared by IP6 driver. - Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.
+ Copyright (c) 2009 - 2014, 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 @@ -650,146 +650,6 @@ Ip6GetMulticastMac ( return Mnp->McastIpToMac (Mnp, TRUE, &EfiIp, Mac); } -/** - Set the Ip6 variable data. - - @param[in] IpSb Points to an IP6 service binding instance. - - @retval EFI_OUT_OF_RESOURCES There are not enough resources to set the variable. - @retval other Set variable failed. - -**/ -EFI_STATUS -Ip6SetVariableData ( - IN IP6_SERVICE *IpSb - ) -{ - UINT32 NumConfiguredInstance; - LIST_ENTRY *Entry; - UINTN VariableDataSize; - EFI_IP6_VARIABLE_DATA *Ip6VariableData; - EFI_IP6_ADDRESS_PAIR *Ip6AddressPair; - IP6_PROTOCOL *IpInstance; - CHAR16 *NewMacString; - EFI_STATUS Status; - - NumConfiguredInstance = 0; - - // - // Go through the children list to count the configured children. - // - NET_LIST_FOR_EACH (Entry, &IpSb->Children) { - IpInstance = NET_LIST_USER_STRUCT_S (Entry, IP6_PROTOCOL, Link, IP6_PROTOCOL_SIGNATURE); - - if (IpInstance->State == IP6_STATE_CONFIGED) { - NumConfiguredInstance++; - } - } - - // - // Calculate the size of the Ip6VariableData. As there may be no IP child, - // we should add extra buffer for the address paris only if the number of configured - // children is more than 1. - // - VariableDataSize = sizeof (EFI_IP6_VARIABLE_DATA); - - if (NumConfiguredInstance > 1) { - VariableDataSize += sizeof (EFI_IP6_ADDRESS_PAIR) * (NumConfiguredInstance - 1); - } - - Ip6VariableData = AllocatePool (VariableDataSize); - if (Ip6VariableData == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - Ip6VariableData->DriverHandle = IpSb->Image; - Ip6VariableData->AddressCount = NumConfiguredInstance; - - Ip6AddressPair = &Ip6VariableData->AddressPairs[0]; - - // - // Go through the children list to fill the configured children's address pairs. - // - NET_LIST_FOR_EACH (Entry, &IpSb->Children) { - IpInstance = NET_LIST_USER_STRUCT_S (Entry, IP6_PROTOCOL, Link, IP6_PROTOCOL_SIGNATURE); - - if (IpInstance->State == IP6_STATE_CONFIGED) { - Ip6AddressPair->InstanceHandle = IpInstance->Handle; - Ip6AddressPair->PrefixLength = IpInstance->PrefixLength; - IP6_COPY_ADDRESS (&Ip6AddressPair->Ip6Address, &IpInstance->ConfigData.StationAddress); - - Ip6AddressPair++; - } - } - - // - // Get the mac string. - // - Status = NetLibGetMacString (IpSb->Controller, IpSb->Image, &NewMacString); - if (EFI_ERROR (Status)) { - goto Exit; - } - - if (IpSb->MacString != NULL) { - // - // The variable is set already, we're going to update it. - // - if (StrCmp (IpSb->MacString, NewMacString) != 0) { - // - // The mac address is changed, delete the previous variable first. - // - gRT->SetVariable ( - IpSb->MacString, - &gEfiIp6ServiceBindingProtocolGuid, - EFI_VARIABLE_BOOTSERVICE_ACCESS, - 0, - NULL - ); - } - - FreePool (IpSb->MacString); - } - - IpSb->MacString = NewMacString; - - Status = gRT->SetVariable ( - IpSb->MacString, - &gEfiIp6ServiceBindingProtocolGuid, - EFI_VARIABLE_BOOTSERVICE_ACCESS, - VariableDataSize, - (VOID *) Ip6VariableData - ); - -Exit: - FreePool (Ip6VariableData); - return Status; -} - -/** - Clear the variable and free the resource. - - @param[in] IpSb Ip6 service binding instance. - -**/ -VOID -Ip6ClearVariableData ( - IN IP6_SERVICE *IpSb - ) -{ - ASSERT (IpSb->MacString != NULL); - - gRT->SetVariable ( - IpSb->MacString, - &gEfiIp6ServiceBindingProtocolGuid, - EFI_VARIABLE_BOOTSERVICE_ACCESS, - 0, - NULL - ); - - FreePool (IpSb->MacString); - IpSb->MacString = NULL; -} - /** Convert the multibyte field in IP header's byter order. In spite of its name, it can also be used to convert from