/** @file\r
- Implement IP6 pesudo interface.\r
+ Implement IP6 pseudo interface.\r
\r
- Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
VOID\r
EFIAPI\r
Ip6OnFrameSent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
Ip6CancelInstanceFrame (\r
- IN IP6_LINK_TX_TOKEN *Frame,\r
- IN VOID *Context\r
+ IN IP6_LINK_TX_TOKEN *Frame,\r
+ IN VOID *Context\r
)\r
{\r
- if (Frame->IpInstance == (IP6_PROTOCOL *) Context) {\r
+ if (Frame->IpInstance == (IP6_PROTOCOL *)Context) {\r
return TRUE;\r
}\r
\r
**/\r
EFI_STATUS\r
Ip6SetAddress (\r
- IN IP6_INTERFACE *Interface,\r
- IN EFI_IPv6_ADDRESS *Ip6Addr,\r
- IN BOOLEAN IsAnycast,\r
- IN UINT8 PrefixLength,\r
- IN UINT32 ValidLifetime,\r
- IN UINT32 PreferredLifetime,\r
- IN IP6_DAD_CALLBACK DadCallback OPTIONAL,\r
- IN VOID *Context OPTIONAL\r
+ IN IP6_INTERFACE *Interface,\r
+ IN EFI_IPv6_ADDRESS *Ip6Addr,\r
+ IN BOOLEAN IsAnycast,\r
+ IN UINT8 PrefixLength,\r
+ IN UINT32 ValidLifetime,\r
+ IN UINT32 PreferredLifetime,\r
+ IN IP6_DAD_CALLBACK DadCallback OPTIONAL,\r
+ IN VOID *Context OPTIONAL\r
)\r
{\r
IP6_SERVICE *IpSb;\r
return EFI_SUCCESS;\r
}\r
\r
- AddressInfo = (IP6_ADDRESS_INFO *) AllocatePool (sizeof (IP6_ADDRESS_INFO));\r
+ AddressInfo = (IP6_ADDRESS_INFO *)AllocatePool (sizeof (IP6_ADDRESS_INFO));\r
if (AddressInfo == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- AddressInfo->Signature = IP6_ADDR_INFO_SIGNATURE;\r
+ AddressInfo->Signature = IP6_ADDR_INFO_SIGNATURE;\r
IP6_COPY_ADDRESS (&AddressInfo->Address, Ip6Addr);\r
AddressInfo->IsAnycast = IsAnycast;\r
AddressInfo->PrefixLength = PrefixLength;\r
AddressInfo->PrefixLength = IP6_LINK_LOCAL_PREFIX_LENGTH;\r
}\r
\r
-\r
//\r
- // Node should delay joining the solicited-node mulitcast address by a random delay\r
+ // Node should delay joining the solicited-node multicast address by a random delay\r
// between 0 and MAX_RTR_SOLICITATION_DELAY (1 second).\r
// Thus queue the address to be processed in Duplicate Address Detection module\r
// after the delay time (in milliseconds).\r
//\r
- Delay = (UINT64) NET_RANDOM (NetRandomInitSeed ());\r
+ Delay = (UINT64)NET_RANDOM (NetRandomInitSeed ());\r
Delay = MultU64x32 (Delay, IP6_ONE_SECOND_IN_MS);\r
Delay = RShiftU64 (Delay, 32);\r
\r
- DelayNode = (IP6_DELAY_JOIN_LIST *) AllocatePool (sizeof (IP6_DELAY_JOIN_LIST));\r
+ DelayNode = (IP6_DELAY_JOIN_LIST *)AllocatePool (sizeof (IP6_DELAY_JOIN_LIST));\r
if (DelayNode == NULL) {\r
FreePool (AddressInfo);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- DelayNode->DelayTime = (UINT32) (DivU64x32 (Delay, IP6_TIMER_INTERVAL_IN_MS));\r
+ DelayNode->DelayTime = (UINT32)(DivU64x32 (Delay, IP6_TIMER_INTERVAL_IN_MS));\r
DelayNode->Interface = Interface;\r
DelayNode->AddressInfo = AddressInfo;\r
DelayNode->DadCallback = DadCallback;\r
**/\r
IP6_INTERFACE *\r
Ip6CreateInterface (\r
- IN IP6_SERVICE *IpSb,\r
- IN BOOLEAN LinkLocal\r
+ IN IP6_SERVICE *IpSb,\r
+ IN BOOLEAN LinkLocal\r
)\r
{\r
- EFI_STATUS Status;\r
- IP6_INTERFACE *Interface;\r
- EFI_IPv6_ADDRESS *Ip6Addr;\r
+ EFI_STATUS Status;\r
+ IP6_INTERFACE *Interface;\r
+ EFI_IPv6_ADDRESS *Ip6Addr;\r
\r
NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
\r
return NULL;\r
}\r
\r
- Interface->Signature = IP6_INTERFACE_SIGNATURE;\r
- Interface->RefCnt = 1;\r
+ Interface->Signature = IP6_INTERFACE_SIGNATURE;\r
+ Interface->RefCnt = 1;\r
\r
InitializeListHead (&Interface->AddressList);\r
- Interface->AddressCount = 0;\r
- Interface->Configured = FALSE;\r
+ Interface->AddressCount = 0;\r
+ Interface->Configured = FALSE;\r
\r
- Interface->Service = IpSb;\r
- Interface->Controller = IpSb->Controller;\r
- Interface->Image = IpSb->Image;\r
+ Interface->Service = IpSb;\r
+ Interface->Controller = IpSb->Controller;\r
+ Interface->Image = IpSb->Image;\r
\r
InitializeListHead (&Interface->ArpQues);\r
InitializeListHead (&Interface->SentFrames);\r
\r
- Interface->DupAddrDetect = IpSb->Ip6ConfigInstance.DadXmits.DupAddrDetectTransmits;\r
+ Interface->DupAddrDetect = IpSb->Ip6ConfigInstance.DadXmits.DupAddrDetectTransmits;\r
InitializeListHead (&Interface->DupAddrDetectList);\r
\r
InitializeListHead (&Interface->DelayJoinList);\r
\r
InitializeListHead (&Interface->IpInstances);\r
- Interface->PromiscRecv = FALSE;\r
+ Interface->PromiscRecv = FALSE;\r
\r
if (!LinkLocal) {\r
return Interface;\r
Ip6Addr,\r
FALSE,\r
IP6_LINK_LOCAL_PREFIX_LENGTH,\r
- (UINT32) IP6_INFINIT_LIFETIME,\r
- (UINT32) IP6_INFINIT_LIFETIME,\r
+ (UINT32)IP6_INFINIT_LIFETIME,\r
+ (UINT32)IP6_INFINIT_LIFETIME,\r
NULL,\r
NULL\r
);\r
**/\r
VOID\r
Ip6CleanInterface (\r
- IN IP6_INTERFACE *Interface,\r
- IN IP6_PROTOCOL *IpInstance OPTIONAL\r
+ IN IP6_INTERFACE *Interface,\r
+ IN IP6_PROTOCOL *IpInstance OPTIONAL\r
)\r
{\r
- IP6_DAD_ENTRY *Duplicate;\r
- IP6_DELAY_JOIN_LIST *Delay;\r
+ IP6_DAD_ENTRY *Duplicate;\r
+ IP6_DELAY_JOIN_LIST *Delay;\r
\r
NET_CHECK_SIGNATURE (Interface, IP6_INTERFACE_SIGNATURE);\r
ASSERT (Interface->RefCnt > 0);\r
**/\r
IP6_LINK_TX_TOKEN *\r
Ip6CreateLinkTxToken (\r
- IN IP6_INTERFACE *Interface,\r
- IN IP6_PROTOCOL *IpInstance OPTIONAL,\r
- IN NET_BUF *Packet,\r
- IN IP6_FRAME_CALLBACK CallBack,\r
- IN VOID *Context\r
+ IN IP6_INTERFACE *Interface,\r
+ IN IP6_PROTOCOL *IpInstance OPTIONAL,\r
+ IN NET_BUF *Packet,\r
+ IN IP6_FRAME_CALLBACK CallBack,\r
+ IN VOID *Context\r
)\r
{\r
EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken;\r
ZeroMem (&Token->DstMac, sizeof (EFI_MAC_ADDRESS));\r
IP6_COPY_LINK_ADDRESS (&Token->SrcMac, &Interface->Service->SnpMode.CurrentAddress);\r
\r
- MnpToken = &(Token->MnpToken);\r
- MnpToken->Status = EFI_NOT_READY;\r
+ MnpToken = &(Token->MnpToken);\r
+ MnpToken->Status = EFI_NOT_READY;\r
\r
Status = gBS->CreateEvent (\r
EVT_NOTIFY_SIGNAL,\r
return NULL;\r
}\r
\r
- MnpTxData = &Token->MnpTxData;\r
- MnpToken->Packet.TxData = MnpTxData;\r
+ MnpTxData = &Token->MnpTxData;\r
+ MnpToken->Packet.TxData = MnpTxData;\r
\r
MnpTxData->DestinationAddress = &Token->DstMac;\r
MnpTxData->SourceAddress = &Token->SrcMac;\r
MnpTxData->DataLength = Packet->TotalSize;\r
MnpTxData->HeaderLength = 0;\r
\r
- Count = Packet->BlockOpNum;\r
+ Count = Packet->BlockOpNum;\r
\r
- NetbufBuildExt (Packet, (NET_FRAGMENT *) MnpTxData->FragmentTable, &Count);\r
- MnpTxData->FragmentCount = (UINT16)Count;\r
+ NetbufBuildExt (Packet, (NET_FRAGMENT *)MnpTxData->FragmentTable, &Count);\r
+ MnpTxData->FragmentCount = (UINT16)Count;\r
\r
return Token;\r
}\r
**/\r
VOID\r
Ip6FreeLinkTxToken (\r
- IN IP6_LINK_TX_TOKEN *Token\r
+ IN IP6_LINK_TX_TOKEN *Token\r
)\r
{\r
NET_CHECK_SIGNATURE (Token, IP6_LINK_TX_SIGNATURE);\r
VOID\r
EFIAPI\r
Ip6RecycleFrame (\r
- IN VOID *Context\r
+ IN VOID *Context\r
)\r
{\r
EFI_MANAGED_NETWORK_RECEIVE_DATA *RxData;\r
\r
- RxData = (EFI_MANAGED_NETWORK_RECEIVE_DATA *) Context;\r
+ RxData = (EFI_MANAGED_NETWORK_RECEIVE_DATA *)Context;\r
\r
gBS->SignalEvent (RxData->RecycleEvent);\r
}\r
VOID\r
EFIAPI\r
Ip6OnFrameReceivedDpc (\r
- IN VOID *Context\r
+ IN VOID *Context\r
)\r
{\r
EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken;\r
UINT32 Flag;\r
IP6_SERVICE *IpSb;\r
\r
- Token = (IP6_LINK_RX_TOKEN *) Context;\r
+ Token = (IP6_LINK_RX_TOKEN *)Context;\r
NET_CHECK_SIGNATURE (Token, IP6_LINK_RX_SIGNATURE);\r
\r
//\r
// First clear the interface's receive request in case the\r
// caller wants to call Ip6ReceiveFrame in the callback.\r
//\r
- IpSb = (IP6_SERVICE *) Token->Context;\r
+ IpSb = (IP6_SERVICE *)Token->Context;\r
NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
\r
-\r
MnpToken = &Token->MnpToken;\r
MnpRxData = MnpToken->Packet.RxData;\r
\r
if (EFI_ERROR (MnpToken->Status) || (MnpRxData == NULL)) {\r
Token->CallBack (NULL, MnpToken->Status, 0, Token->Context);\r
- return ;\r
+ return;\r
}\r
\r
//\r
- // Wrap the frame in a net buffer then deliever it to IP input.\r
+ // Wrap the frame in a net buffer then deliver it to IP input.\r
// IP will reassemble the packet, and deliver it to upper layer\r
//\r
Netfrag.Len = MnpRxData->DataLength;\r
\r
Token->CallBack (NULL, EFI_OUT_OF_RESOURCES, 0, Token->Context);\r
\r
- return ;\r
+ return;\r
}\r
\r
Flag = (MnpRxData->BroadcastFlag ? IP6_LINK_BROADCAST : 0);\r
VOID\r
EFIAPI\r
Ip6OnFrameReceived (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
//\r
\r
@retval EFI_ALREADY_STARTED There is already a pending receive request.\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource to receive.\r
- @retval EFI_SUCCESS The recieve request has been started.\r
+ @retval EFI_SUCCESS The receive request has been started.\r
\r
**/\r
EFI_STATUS\r
Ip6ReceiveFrame (\r
- IN IP6_FRAME_CALLBACK CallBack,\r
- IN IP6_SERVICE *IpSb\r
+ IN IP6_FRAME_CALLBACK CallBack,\r
+ IN IP6_SERVICE *IpSb\r
)\r
{\r
- EFI_STATUS Status;\r
- IP6_LINK_RX_TOKEN *Token;\r
- \r
+ EFI_STATUS Status;\r
+ IP6_LINK_RX_TOKEN *Token;\r
+\r
NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
\r
Token = &IpSb->RecvRequest;\r
Token->CallBack = CallBack;\r
- Token->Context = (VOID *) IpSb;\r
+ Token->Context = (VOID *)IpSb;\r
\r
Status = IpSb->Mnp->Receive (IpSb->Mnp, &Token->MnpToken);\r
if (EFI_ERROR (Status)) {\r
}\r
\r
/**\r
- Callback funtion when frame transmission is finished. It will\r
+ Callback function when frame transmission is finished. It will\r
call the frame owner's callback function to tell it the result.\r
\r
@param[in] Context Context which points to the token.\r
VOID\r
EFIAPI\r
Ip6OnFrameSentDpc (\r
- IN VOID *Context\r
+ IN VOID *Context\r
)\r
{\r
- IP6_LINK_TX_TOKEN *Token;\r
+ IP6_LINK_TX_TOKEN *Token;\r
\r
- Token = (IP6_LINK_TX_TOKEN *) Context;\r
+ Token = (IP6_LINK_TX_TOKEN *)Context;\r
NET_CHECK_SIGNATURE (Token, IP6_LINK_TX_SIGNATURE);\r
\r
RemoveEntryList (&Token->Link);\r
\r
Token->CallBack (\r
- Token->Packet,\r
- Token->MnpToken.Status,\r
- 0,\r
- Token->Context\r
- );\r
+ Token->Packet,\r
+ Token->MnpToken.Status,\r
+ 0,\r
+ Token->Context\r
+ );\r
\r
Ip6FreeLinkTxToken (Token);\r
}\r
VOID\r
EFIAPI\r
Ip6OnFrameSent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
//\r
**/\r
EFI_STATUS\r
Ip6SendFrame (\r
- IN IP6_INTERFACE *Interface,\r
- IN IP6_PROTOCOL *IpInstance OPTIONAL,\r
- IN NET_BUF *Packet,\r
- IN EFI_IPv6_ADDRESS *NextHop,\r
- IN IP6_FRAME_CALLBACK CallBack,\r
- IN VOID *Context\r
+ IN IP6_INTERFACE *Interface,\r
+ IN IP6_PROTOCOL *IpInstance OPTIONAL,\r
+ IN NET_BUF *Packet,\r
+ IN EFI_IPv6_ADDRESS *NextHop,\r
+ IN IP6_FRAME_CALLBACK CallBack,\r
+ IN VOID *Context\r
)\r
{\r
- IP6_SERVICE *IpSb;\r
- IP6_LINK_TX_TOKEN *Token;\r
- EFI_STATUS Status;\r
- IP6_NEIGHBOR_ENTRY *NeighborCache;\r
- LIST_ENTRY *Entry;\r
- IP6_NEIGHBOR_ENTRY *ArpQue;\r
+ IP6_SERVICE *IpSb;\r
+ IP6_LINK_TX_TOKEN *Token;\r
+ EFI_STATUS Status;\r
+ IP6_NEIGHBOR_ENTRY *NeighborCache;\r
+ LIST_ENTRY *Entry;\r
+ IP6_NEIGHBOR_ENTRY *ArpQue;\r
\r
IpSb = Interface->Service;\r
NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
}\r
\r
switch (NeighborCache->State) {\r
- case EfiNeighborStale:\r
- NeighborCache->State = EfiNeighborDelay;\r
- NeighborCache->Ticks = (UINT32) IP6_GET_TICKS (IP6_DELAY_FIRST_PROBE_TIME);\r
+ case EfiNeighborStale:\r
+ NeighborCache->State = EfiNeighborDelay;\r
+ NeighborCache->Ticks = (UINT32)IP6_GET_TICKS (IP6_DELAY_FIRST_PROBE_TIME);\r
//\r
// Fall through\r
//\r
- case EfiNeighborReachable:\r
- case EfiNeighborDelay:\r
- case EfiNeighborProbe:\r
- IP6_COPY_LINK_ADDRESS (&Token->DstMac, &NeighborCache->LinkAddress);\r
- goto SendNow;\r
- break;\r
-\r
- default:\r
- break;\r
+ case EfiNeighborReachable:\r
+ case EfiNeighborDelay:\r
+ case EfiNeighborProbe:\r
+ IP6_COPY_LINK_ADDRESS (&Token->DstMac, &NeighborCache->LinkAddress);\r
+ goto SendNow;\r
+ break;\r
+\r
+ default:\r
+ break;\r
}\r
\r
//\r
return EFI_SUCCESS;\r
\r
SendNow:\r
- //\r
+ //\r
// Insert the tx token into the SentFrames list before calling Mnp->Transmit.\r
// Remove it if the returned status is not EFI_SUCCESS.\r
//\r
VOID\r
EFIAPI\r
Ip6TimerTicking (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- IP6_SERVICE *IpSb;\r
+ IP6_SERVICE *IpSb;\r
\r
- IpSb = (IP6_SERVICE *) Context;\r
+ IpSb = (IP6_SERVICE *)Context;\r
NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
\r
Ip6PacketTimerTicking (IpSb);\r