Dhcp6 internal functions implementation.\r
\r
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
- Copyright (c) 2009 - 2016, 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
#include "Dhcp6Impl.h"\r
\r
-\r
/**\r
Enqueue the packet into the retry list in case of timeout.\r
\r
IN EFI_DHCP6_RETRANSMISSION *RetryCtl OPTIONAL\r
)\r
{\r
- DHCP6_TX_CB *TxCb;\r
- DHCP6_IA_CB *IaCb;\r
+ DHCP6_TX_CB *TxCb;\r
+ DHCP6_IA_CB *IaCb;\r
\r
ASSERT (Packet != NULL);\r
\r
//\r
// Save pointer to elapsed-time value so we can update it on retransmits.\r
//\r
- TxCb->Elapsed = Elapsed;\r
+ TxCb->Elapsed = Elapsed;\r
\r
//\r
- // Calculate the retransmission according to the the message type.\r
+ // Calculate the retransmission according to the message type.\r
//\r
switch (Packet->Dhcp6.Header.MessageType) {\r
- case Dhcp6MsgSolicit:\r
- //\r
- // Calculate the retransmission threshold value for solicit packet.\r
- // Use the default value by rfc-3315 if user doesn't configure.\r
- //\r
- if (RetryCtl == NULL) {\r
- TxCb->RetryCtl.Irt = DHCP6_SOL_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_SOL_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_SOL_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_SOL_MRD;\r
- } else {\r
- TxCb->RetryCtl.Irt = (RetryCtl->Irt != 0) ? RetryCtl->Irt : DHCP6_SOL_IRT;\r
- TxCb->RetryCtl.Mrc = (RetryCtl->Mrc != 0) ? RetryCtl->Mrc : DHCP6_SOL_MRC;\r
- TxCb->RetryCtl.Mrt = (RetryCtl->Mrt != 0) ? RetryCtl->Mrt : DHCP6_SOL_MRT;\r
- TxCb->RetryCtl.Mrd = (RetryCtl->Mrd != 0) ? RetryCtl->Mrd : DHCP6_SOL_MRD;\r
- }\r
+ case Dhcp6MsgSolicit:\r
+ //\r
+ // Calculate the retransmission threshold value for solicit packet.\r
+ // Use the default value by rfc-3315 if user doesn't configure.\r
+ //\r
+ if (RetryCtl == NULL) {\r
+ TxCb->RetryCtl.Irt = DHCP6_SOL_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_SOL_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_SOL_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_SOL_MRD;\r
+ } else {\r
+ TxCb->RetryCtl.Irt = (RetryCtl->Irt != 0) ? RetryCtl->Irt : DHCP6_SOL_IRT;\r
+ TxCb->RetryCtl.Mrc = (RetryCtl->Mrc != 0) ? RetryCtl->Mrc : DHCP6_SOL_MRC;\r
+ TxCb->RetryCtl.Mrt = (RetryCtl->Mrt != 0) ? RetryCtl->Mrt : DHCP6_SOL_MRT;\r
+ TxCb->RetryCtl.Mrd = (RetryCtl->Mrd != 0) ? RetryCtl->Mrd : DHCP6_SOL_MRD;\r
+ }\r
\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ FALSE\r
+ );\r
+ break;\r
+\r
+ case Dhcp6MsgRequest:\r
+ //\r
+ // Calculate the retransmission threshold value for request packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_REQ_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_REQ_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_REQ_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_REQ_MRD;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
TxCb->RetryCtl.Irt,\r
TRUE,\r
- FALSE\r
+ TRUE\r
);\r
- break;\r
-\r
- case Dhcp6MsgRequest:\r
- //\r
- // Calculate the retransmission threshold value for request packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_REQ_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_REQ_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_REQ_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_REQ_MRD;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
-\r
- case Dhcp6MsgConfirm:\r
- //\r
- // Calculate the retransmission threshold value for confirm packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_CNF_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_CNF_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_CNF_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_CNF_MRD;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
-\r
- case Dhcp6MsgRenew:\r
- //\r
- // Calculate the retransmission threshold value for renew packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_REB_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_REB_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_REB_MRT;\r
- TxCb->RetryCtl.Mrd = IaCb->T2 - IaCb->T1;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
+ break;\r
\r
- case Dhcp6MsgRebind:\r
- //\r
- // Calculate the retransmission threshold value for rebind packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_REN_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_REN_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_REN_MRT;\r
- TxCb->RetryCtl.Mrd = IaCb->AllExpireTime - IaCb->T2;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
+ case Dhcp6MsgConfirm:\r
+ //\r
+ // Calculate the retransmission threshold value for confirm packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_CNF_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_CNF_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_CNF_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_CNF_MRD;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ TRUE\r
+ );\r
+ break;\r
\r
- case Dhcp6MsgDecline:\r
- //\r
- // Calculate the retransmission threshold value for decline packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_DEC_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_DEC_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_DEC_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_DEC_MRD;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
+ case Dhcp6MsgRenew:\r
+ //\r
+ // Calculate the retransmission threshold value for renew packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_REB_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_REB_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_REB_MRT;\r
+ TxCb->RetryCtl.Mrd = IaCb->T2 - IaCb->T1;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ TRUE\r
+ );\r
+ break;\r
\r
- case Dhcp6MsgRelease:\r
- //\r
- // Calculate the retransmission threshold value for release packet.\r
- //\r
- TxCb->RetryCtl.Irt = DHCP6_REL_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_REL_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_REL_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_REL_MRD;\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
- TxCb->RetryCtl.Irt,\r
- TRUE,\r
- TRUE\r
- );\r
- break;\r
+ case Dhcp6MsgRebind:\r
+ //\r
+ // Calculate the retransmission threshold value for rebind packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_REN_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_REN_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_REN_MRT;\r
+ TxCb->RetryCtl.Mrd = IaCb->AllExpireTime - IaCb->T2;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ TRUE\r
+ );\r
+ break;\r
\r
- case Dhcp6MsgInfoRequest:\r
- //\r
- // Calculate the retransmission threshold value for info-request packet.\r
- // Use the default value by rfc-3315 if user doesn't configure.\r
- //\r
- if (RetryCtl == NULL) {\r
- TxCb->RetryCtl.Irt = DHCP6_INF_IRT;\r
- TxCb->RetryCtl.Mrc = DHCP6_INF_MRC;\r
- TxCb->RetryCtl.Mrt = DHCP6_INF_MRT;\r
- TxCb->RetryCtl.Mrd = DHCP6_INF_MRD;\r
- } else {\r
- TxCb->RetryCtl.Irt = (RetryCtl->Irt != 0) ? RetryCtl->Irt : DHCP6_INF_IRT;\r
- TxCb->RetryCtl.Mrc = (RetryCtl->Mrc != 0) ? RetryCtl->Mrc : DHCP6_INF_MRC;\r
- TxCb->RetryCtl.Mrt = (RetryCtl->Mrt != 0) ? RetryCtl->Mrt : DHCP6_INF_MRT;\r
- TxCb->RetryCtl.Mrd = (RetryCtl->Mrd != 0) ? RetryCtl->Mrd : DHCP6_INF_MRD;\r
- }\r
+ case Dhcp6MsgDecline:\r
+ //\r
+ // Calculate the retransmission threshold value for decline packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_DEC_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_DEC_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_DEC_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_DEC_MRD;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ TRUE\r
+ );\r
+ break;\r
\r
- TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ case Dhcp6MsgRelease:\r
+ //\r
+ // Calculate the retransmission threshold value for release packet.\r
+ //\r
+ TxCb->RetryCtl.Irt = DHCP6_REL_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_REL_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_REL_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_REL_MRD;\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
TxCb->RetryCtl.Irt,\r
TRUE,\r
TRUE\r
);\r
- break;\r
+ break;\r
\r
- default:\r
- //\r
- // Unexpected message type.\r
- //\r
- return EFI_DEVICE_ERROR;\r
+ case Dhcp6MsgInfoRequest:\r
+ //\r
+ // Calculate the retransmission threshold value for info-request packet.\r
+ // Use the default value by rfc-3315 if user doesn't configure.\r
+ //\r
+ if (RetryCtl == NULL) {\r
+ TxCb->RetryCtl.Irt = DHCP6_INF_IRT;\r
+ TxCb->RetryCtl.Mrc = DHCP6_INF_MRC;\r
+ TxCb->RetryCtl.Mrt = DHCP6_INF_MRT;\r
+ TxCb->RetryCtl.Mrd = DHCP6_INF_MRD;\r
+ } else {\r
+ TxCb->RetryCtl.Irt = (RetryCtl->Irt != 0) ? RetryCtl->Irt : DHCP6_INF_IRT;\r
+ TxCb->RetryCtl.Mrc = (RetryCtl->Mrc != 0) ? RetryCtl->Mrc : DHCP6_INF_MRC;\r
+ TxCb->RetryCtl.Mrt = (RetryCtl->Mrt != 0) ? RetryCtl->Mrt : DHCP6_INF_MRT;\r
+ TxCb->RetryCtl.Mrd = (RetryCtl->Mrd != 0) ? RetryCtl->Mrd : DHCP6_INF_MRD;\r
+ }\r
+\r
+ TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
+ TxCb->RetryCtl.Irt,\r
+ TRUE,\r
+ TRUE\r
+ );\r
+ break;\r
+\r
+ default:\r
+ //\r
+ // Unexpected message type.\r
+ //\r
+ FreePool (TxCb);\r
+ return EFI_DEVICE_ERROR;\r
}\r
\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Dequeue the packet from retry list if reply received or timeout at last.\r
\r
**/\r
EFI_STATUS\r
Dhcp6DequeueRetry (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN UINT32 PacketXid,\r
- IN BOOLEAN NeedSignal\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN UINT32 PacketXid,\r
+ IN BOOLEAN NeedSignal\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- DHCP6_TX_CB *TxCb;\r
- DHCP6_INF_CB *InfCb;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ DHCP6_TX_CB *TxCb;\r
+ DHCP6_INF_CB *InfCb;\r
\r
//\r
// Seek the retransmit node in the retransmit list by packet xid.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->TxList) {\r
-\r
TxCb = NET_LIST_USER_STRUCT (Entry, DHCP6_TX_CB, Link);\r
- ASSERT(TxCb->TxPacket);\r
+ ASSERT (TxCb->TxPacket);\r
\r
if (TxCb->Xid == PacketXid) {\r
-\r
if (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest) {\r
-\r
//\r
// Seek the info-request node in the info-request list by packet xid.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->InfList) {\r
-\r
InfCb = NET_LIST_USER_STRUCT (Entry, DHCP6_INF_CB, Link);\r
\r
if (InfCb->Xid == PacketXid) {\r
//\r
// Remove the info-request node, and signal the event if timeout.\r
//\r
- if (InfCb->TimeoutEvent != NULL && NeedSignal) {\r
+ if ((InfCb->TimeoutEvent != NULL) && NeedSignal) {\r
gBS->SignalEvent (InfCb->TimeoutEvent);\r
}\r
\r
}\r
}\r
}\r
+\r
//\r
// Remove the retransmit node.\r
//\r
RemoveEntryList (&TxCb->Link);\r
- ASSERT(TxCb->TxPacket);\r
+ ASSERT (TxCb->TxPacket);\r
FreePool (TxCb->TxPacket);\r
FreePool (TxCb);\r
return EFI_SUCCESS;\r
return EFI_NOT_FOUND;\r
}\r
\r
-\r
/**\r
Clean up the specific nodes in the retry list.\r
\r
**/\r
VOID\r
Dhcp6CleanupRetry (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN UINT32 Scope\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN UINT32 Scope\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- DHCP6_TX_CB *TxCb;\r
- DHCP6_INF_CB *InfCb;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ DHCP6_TX_CB *TxCb;\r
+ DHCP6_INF_CB *InfCb;\r
\r
//\r
// Clean up all the stateful messages from the retransmit list.\r
//\r
- if (Scope == DHCP6_PACKET_STATEFUL || Scope == DHCP6_PACKET_ALL) {\r
-\r
+ if ((Scope == DHCP6_PACKET_STATEFUL) || (Scope == DHCP6_PACKET_ALL)) {\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->TxList) {\r
-\r
TxCb = NET_LIST_USER_STRUCT (Entry, DHCP6_TX_CB, Link);\r
- ASSERT(TxCb->TxPacket);\r
+ ASSERT (TxCb->TxPacket);\r
\r
if (TxCb->TxPacket->Dhcp6.Header.MessageType != Dhcp6MsgInfoRequest) {\r
RemoveEntryList (&TxCb->Link);\r
//\r
// Clean up all the stateless messages from the retransmit list.\r
//\r
- if (Scope == DHCP6_PACKET_STATELESS || Scope == DHCP6_PACKET_ALL) {\r
-\r
+ if ((Scope == DHCP6_PACKET_STATELESS) || (Scope == DHCP6_PACKET_ALL)) {\r
//\r
// Clean up all the retransmit list for stateless messages.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->TxList) {\r
-\r
TxCb = NET_LIST_USER_STRUCT (Entry, DHCP6_TX_CB, Link);\r
- ASSERT(TxCb->TxPacket);\r
+ ASSERT (TxCb->TxPacket);\r
\r
if (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest) {\r
RemoveEntryList (&TxCb->Link);\r
// Clean up all the info-request messages list.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->InfList) {\r
-\r
InfCb = NET_LIST_USER_STRUCT (Entry, DHCP6_INF_CB, Link);\r
\r
if (InfCb->TimeoutEvent != NULL) {\r
gBS->SignalEvent (InfCb->TimeoutEvent);\r
}\r
+\r
RemoveEntryList (&InfCb->Link);\r
FreePool (InfCb);\r
}\r
\r
@retval TRUE The control block is in Instance's retry list.\r
@retval FALSE The control block is NOT in Instance's retry list.\r
- \r
+\r
**/\r
BOOLEAN\r
Dhcp6IsValidTxCb (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN DHCP6_TX_CB *TxCb\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN DHCP6_TX_CB *TxCb\r
)\r
{\r
- LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Entry;\r
\r
NET_LIST_FOR_EACH (Entry, &Instance->TxList) {\r
if (TxCb == NET_LIST_USER_STRUCT (Entry, DHCP6_TX_CB, Link)) {\r
**/\r
VOID\r
Dhcp6CleanupSession (\r
- IN OUT DHCP6_INSTANCE *Instance,\r
- IN EFI_STATUS Status\r
+ IN OUT DHCP6_INSTANCE *Instance,\r
+ IN EFI_STATUS Status\r
)\r
{\r
- UINTN Index;\r
- EFI_DHCP6_IA *Ia;\r
+ UINTN Index;\r
+ EFI_DHCP6_IA *Ia;\r
\r
- ASSERT(Instance->Config);\r
- ASSERT(Instance->IaCb.Ia);\r
+ ASSERT (Instance->Config);\r
+ ASSERT (Instance->IaCb.Ia);\r
\r
//\r
// Clean up the retransmit list for stateful messages.\r
//\r
// Reinitialize the Ia fields of the instance.\r
//\r
- Instance->UdpSts = Status;\r
- Instance->AdSelect = NULL;\r
- Instance->AdPref = 0;\r
- Instance->Unicast = NULL;\r
- Instance->IaCb.T1 = 0;\r
- Instance->IaCb.T2 = 0;\r
- Instance->IaCb.AllExpireTime = 0;\r
- Instance->IaCb.LeaseTime = 0;\r
+ Instance->UdpSts = Status;\r
+ Instance->AdSelect = NULL;\r
+ Instance->AdPref = 0;\r
+ Instance->Unicast = NULL;\r
+ Instance->IaCb.T1 = 0;\r
+ Instance->IaCb.T2 = 0;\r
+ Instance->IaCb.AllExpireTime = 0;\r
+ Instance->IaCb.LeaseTime = 0;\r
\r
//\r
// Clear start time\r
//\r
- Instance->StartTime = 0;\r
+ Instance->StartTime = 0;\r
\r
- Ia = Instance->IaCb.Ia;\r
- Ia->State = Dhcp6Init;\r
- Ia->ReplyPacket = NULL;\r
+ Ia = Instance->IaCb.Ia;\r
+ Ia->State = Dhcp6Init;\r
+ Ia->ReplyPacket = NULL;\r
\r
//\r
// Set the addresses as zero lifetime, and then the notify\r
}\r
}\r
\r
-\r
/**\r
Callback to user when Dhcp6 transmit/receive occurs.\r
\r
EFI_STATUS\r
EFIAPI\r
Dhcp6CallbackUser (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_EVENT Event,\r
- IN OUT EFI_DHCP6_PACKET **Packet\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_EVENT Event,\r
+ IN OUT EFI_DHCP6_PACKET **Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *NewPacket;\r
- EFI_DHCP6_CALLBACK Callback;\r
- VOID *Context;\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *NewPacket;\r
+ EFI_DHCP6_CALLBACK Callback;\r
+ VOID *Context;\r
\r
ASSERT (Packet != NULL);\r
ASSERT (Instance->Config != NULL);\r
// Callback to user with the new message if has.\r
//\r
if (Callback != NULL) {\r
-\r
Status = Callback (\r
&Instance->Dhcp6,\r
Context,\r
return Status;\r
}\r
\r
-\r
/**\r
Update Ia according to the new reply message.\r
\r
**/\r
EFI_STATUS\r
Dhcp6UpdateIaInfo (\r
- IN OUT DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet\r
+ IN OUT DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 *Option;\r
- UINT8 *IaInnerOpt;\r
- UINT16 IaInnerLen;\r
- UINT16 StsCode;\r
- UINT32 T1;\r
- UINT32 T2;\r
+ EFI_STATUS Status;\r
+ UINT8 *Option;\r
+ UINT8 *IaInnerOpt;\r
+ UINT16 IaInnerLen;\r
+ UINT16 StsCode;\r
+ UINT32 T1;\r
+ UINT32 T2;\r
\r
ASSERT (Instance->Config != NULL);\r
//\r
- // If the reply was received in reponse to a solicit with rapid commit option,\r
+ // If the reply was received in response to a solicit with rapid commit option,\r
// request, renew or rebind message, the client updates the information it has\r
// recorded about IAs from the IA options contained in the reply message:\r
// 1. record the T1 and T2 times\r
// 2. add any new addresses in the IA\r
// 3. discard any addresses from the IA, that have a valid lifetime of 0\r
- // 4. update lifetimes for any addresses that alread recorded\r
+ // 4. update lifetimes for any addresses that already recorded\r
// 5. leave unchanged any information about addresses\r
//\r
// See details in the section-18.1.8 of rfc-3315.\r
// The inner options still start with 2 bytes option-code and 2 bytes option-len.\r
//\r
if (Instance->Config->IaDescriptor.Type == Dhcp6OptIana) {\r
- T1 = NTOHL (ReadUnaligned32 ((UINT32 *) (Option + 8)));\r
- T2 = NTOHL (ReadUnaligned32 ((UINT32 *) (Option + 12)));\r
+ T1 = NTOHL (ReadUnaligned32 ((UINT32 *)(Option + 8)));\r
+ T2 = NTOHL (ReadUnaligned32 ((UINT32 *)(Option + 12)));\r
//\r
// Refer to RFC3155 Chapter 22.4. If a client receives an IA_NA with T1 greater than T2,\r
// and both T1 and T2 are greater than 0, the client discards the IA_NA option and processes\r
// the remainder of the message as though the server had not included the invalid IA_NA option.\r
//\r
- if (T1 > T2 && T2 > 0) {\r
+ if ((T1 > T2) && (T2 > 0)) {\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
IaInnerOpt = Option + 16;\r
- IaInnerLen = (UINT16) (NTOHS (ReadUnaligned16 ((UINT16 *) (Option + 2))) - 12);\r
+ IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(Option + 2))) - 12);\r
} else {\r
- T1 = 0;\r
- T2 = 0;\r
+ T1 = 0;\r
+ T2 = 0;\r
IaInnerOpt = Option + 8;\r
- IaInnerLen = (UINT16) (NTOHS (ReadUnaligned16 ((UINT16 *) (Option + 2))) - 4);\r
+ IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(Option + 2))) - 4);\r
}\r
\r
//\r
Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode);\r
\r
if (Option != NULL) {\r
- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *) (Option + 4)));\r
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(Option + 4)));\r
if (StsCode != Dhcp6StsSuccess) {\r
return EFI_DEVICE_ERROR;\r
}\r
return Status;\r
}\r
\r
-\r
-\r
/**\r
Seek StatusCode Option in package. A Status Code option may appear in the\r
options field of a DHCP message and/or in the options field of another option.\r
**/\r
EFI_STATUS\r
Dhcp6SeekStsOption (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet,\r
- OUT UINT8 **Option\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet,\r
+ OUT UINT8 **Option\r
)\r
{\r
- UINT8 *IaInnerOpt;\r
- UINT16 IaInnerLen;\r
- UINT16 StsCode;\r
+ UINT8 *IaInnerOpt;\r
+ UINT16 IaInnerLen;\r
+ UINT16 StsCode;\r
\r
//\r
// Seek StatusCode option directly in DHCP message body. That is, search in\r
);\r
\r
if (*Option != NULL) {\r
- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *) (*Option + 4)));\r
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(*Option + 4)));\r
if (StsCode != Dhcp6StsSuccess) {\r
return EFI_DEVICE_ERROR;\r
}\r
//\r
if (Instance->Config->IaDescriptor.Type == Dhcp6OptIana) {\r
IaInnerOpt = *Option + 16;\r
- IaInnerLen = (UINT16) (NTOHS (ReadUnaligned16 ((UINT16 *) (*Option + 2))) - 12);\r
+ IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(*Option + 2))) - 12);\r
} else {\r
IaInnerOpt = *Option + 8;\r
- IaInnerLen = (UINT16) (NTOHS (ReadUnaligned16 ((UINT16 *) (*Option + 2))) - 4);\r
+ IaInnerLen = (UINT16)(NTOHS (ReadUnaligned16 ((UINT16 *)(*Option + 2))) - 4);\r
}\r
\r
//\r
//\r
// sizeof (option-code + option-len) = 4\r
//\r
- *Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode);\r
+ *Option = Dhcp6SeekOption (IaInnerOpt, IaInnerLen, Dhcp6OptStatusCode);\r
if (*Option != NULL) {\r
- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *) (*Option + 4)));\r
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(*Option + 4)));\r
if (StsCode != Dhcp6StsSuccess) {\r
return EFI_DEVICE_ERROR;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Transmit Dhcp6 message by udpio.\r
\r
**/\r
EFI_STATUS\r
Dhcp6TransmitPacket (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet,\r
- IN UINT16 *Elapsed\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet,\r
+ IN UINT16 *Elapsed\r
)\r
{\r
- EFI_STATUS Status;\r
- NET_BUF *Wrap;\r
- NET_FRAGMENT Frag;\r
- UDP_END_POINT EndPt;\r
- DHCP6_SERVICE *Service;\r
+ EFI_STATUS Status;\r
+ NET_BUF *Wrap;\r
+ NET_FRAGMENT Frag;\r
+ UDP_END_POINT EndPt;\r
+ DHCP6_SERVICE *Service;\r
\r
Service = Instance->Service;\r
\r
//\r
// Wrap it into a netbuf then send it.\r
//\r
- Frag.Bulk = (UINT8 *) &Packet->Dhcp6.Header;\r
+ Frag.Bulk = (UINT8 *)&Packet->Dhcp6.Header;\r
Frag.Len = Packet->Length;\r
\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Create the solicit message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendSolicitMsg (\r
- IN DHCP6_INSTANCE *Instance\r
+ IN DHCP6_INSTANCE *Instance\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET_OPTION *UserOpt;\r
- EFI_DHCP6_DUID *ClientId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT32 UserLen;\r
- UINTN Index;\r
- UINT16 Length;\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET_OPTION *UserOpt;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT32 UserLen;\r
+ UINTN Index;\r
+ UINT16 Length;\r
\r
Service = Instance->Service;\r
ClientId = Service->ClientId;\r
}\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE + UserLen);\r
if (Packet == NULL) {\r
// Append user-defined when configurate Dhcp6 service.\r
//\r
for (Index = 0; Index < Instance->Config->OptionCount; Index++) {\r
-\r
UserOpt = Instance->Config->OptionList[Index];\r
- Cursor = Dhcp6AppendOption(\r
+ Cursor = Dhcp6AppendOption (\r
Cursor,\r
UserOpt->OpCode,\r
UserOpt->OpLen,\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
**/\r
EFI_STATUS\r
Dhcp6InitSolicitMsg (\r
- IN DHCP6_INSTANCE *Instance\r
+ IN DHCP6_INSTANCE *Instance\r
)\r
{\r
- Instance->IaCb.T1 = 0;\r
- Instance->IaCb.T2 = 0;\r
+ Instance->IaCb.T1 = 0;\r
+ Instance->IaCb.T2 = 0;\r
Instance->IaCb.Ia->IaAddressCount = 0;\r
\r
return Dhcp6SendSolicitMsg (Instance);\r
}\r
\r
-\r
/**\r
Create the request message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendRequestMsg (\r
- IN DHCP6_INSTANCE *Instance\r
+ IN DHCP6_INSTANCE *Instance\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET_OPTION *UserOpt;\r
- EFI_DHCP6_DUID *ClientId;\r
- EFI_DHCP6_DUID *ServerId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Option;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT32 UserLen;\r
- UINTN Index;\r
- UINT16 Length;\r
-\r
- ASSERT(Instance->AdSelect != NULL);\r
- ASSERT(Instance->Config != NULL);\r
- ASSERT(Instance->IaCb.Ia != NULL);\r
- ASSERT(Instance->Service != NULL);\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET_OPTION *UserOpt;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ EFI_DHCP6_DUID *ServerId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Option;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT32 UserLen;\r
+ UINTN Index;\r
+ UINT16 Length;\r
+\r
+ ASSERT (Instance->AdSelect != NULL);\r
+ ASSERT (Instance->Config != NULL);\r
+ ASSERT (Instance->IaCb.Ia != NULL);\r
+ ASSERT (Instance->Service != NULL);\r
\r
Service = Instance->Service;\r
ClientId = Service->ClientId;\r
\r
- ASSERT(ClientId != NULL);\r
+ ASSERT (ClientId != NULL);\r
\r
//\r
// Get the server Id from the selected advertisement message.\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- ServerId = (EFI_DHCP6_DUID *) (Option + 2);\r
+ ServerId = (EFI_DHCP6_DUID *)(Option + 2);\r
\r
//\r
// Calculate the added length of customized option list.\r
}\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE + UserLen);\r
if (Packet == NULL) {\r
// Append user-defined when configurate Dhcp6 service.\r
//\r
for (Index = 0; Index < Instance->Config->OptionCount; Index++) {\r
-\r
UserOpt = Instance->Config->OptionList[Index];\r
- Cursor = Dhcp6AppendOption(\r
+ Cursor = Dhcp6AppendOption (\r
Cursor,\r
UserOpt->OpCode,\r
UserOpt->OpLen,\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
return Dhcp6EnqueueRetry (Instance, Packet, Elapsed, NULL);\r
}\r
\r
-\r
/**\r
Create the decline message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendDeclineMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_IA *DecIa\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_IA *DecIa\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET *LastReply;\r
- EFI_DHCP6_DUID *ClientId;\r
- EFI_DHCP6_DUID *ServerId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Option;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT16 Length;\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET *LastReply;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ EFI_DHCP6_DUID *ServerId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Option;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT16 Length;\r
\r
ASSERT (Instance->Config != NULL);\r
ASSERT (Instance->IaCb.Ia != NULL);\r
//\r
// EFI_DHCP6_DUID contains a length field of 2 bytes.\r
//\r
- ServerId = (EFI_DHCP6_DUID *) (Option + 2);\r
+ ServerId = (EFI_DHCP6_DUID *)(Option + 2);\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE);\r
if (Packet == NULL) {\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
return Dhcp6EnqueueRetry (Instance, Packet, Elapsed, NULL);\r
}\r
\r
-\r
/**\r
Create the release message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendReleaseMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_IA *RelIa\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_IA *RelIa\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET *LastReply;\r
- EFI_DHCP6_DUID *ClientId;\r
- EFI_DHCP6_DUID *ServerId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Option;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT16 Length;\r
-\r
- ASSERT(Instance->Config);\r
- ASSERT(Instance->IaCb.Ia);\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET *LastReply;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ EFI_DHCP6_DUID *ServerId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Option;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT16 Length;\r
+\r
+ ASSERT (Instance->Config);\r
+ ASSERT (Instance->IaCb.Ia);\r
\r
Service = Instance->Service;\r
ClientId = Service->ClientId;\r
LastReply = Instance->IaCb.Ia->ReplyPacket;\r
\r
- ASSERT(ClientId);\r
- ASSERT(LastReply);\r
+ ASSERT (ClientId);\r
+ ASSERT (LastReply);\r
\r
//\r
// Get the server Id from the last reply message.\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- ServerId = (EFI_DHCP6_DUID *) (Option + 2);\r
+ ServerId = (EFI_DHCP6_DUID *)(Option + 2);\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE);\r
if (Packet == NULL) {\r
//\r
// Determine the size/length of packet\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
return Dhcp6EnqueueRetry (Instance, Packet, Elapsed, NULL);\r
}\r
\r
-\r
/**\r
Create the renew/rebind message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendRenewRebindMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN BOOLEAN RebindRequest\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN BOOLEAN RebindRequest\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET *LastReply;\r
- EFI_DHCP6_PACKET_OPTION *UserOpt;\r
- EFI_DHCP6_DUID *ClientId;\r
- EFI_DHCP6_DUID *ServerId;\r
- EFI_DHCP6_STATE State;\r
- EFI_DHCP6_EVENT Event;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Option;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT32 UserLen;\r
- UINTN Index;\r
- UINT16 Length;\r
-\r
- ASSERT(Instance->Config);\r
- ASSERT(Instance->IaCb.Ia);\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET *LastReply;\r
+ EFI_DHCP6_PACKET_OPTION *UserOpt;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ EFI_DHCP6_DUID *ServerId;\r
+ EFI_DHCP6_STATE State;\r
+ EFI_DHCP6_EVENT Event;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Option;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT32 UserLen;\r
+ UINTN Index;\r
+ UINT16 Length;\r
\r
- Service = Instance->Service;\r
- ClientId = Service->ClientId;\r
+ ASSERT (Instance->Config);\r
+ ASSERT (Instance->IaCb.Ia);\r
\r
- ASSERT(ClientId);\r
+ Service = Instance->Service;\r
+ ClientId = Service->ClientId;\r
+\r
+ ASSERT (ClientId);\r
\r
//\r
// Calculate the added length of customized option list.\r
}\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE + UserLen);\r
if (Packet == NULL) {\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- ServerId = (EFI_DHCP6_DUID *) (Option + 2);\r
+ ServerId = (EFI_DHCP6_DUID *)(Option + 2);\r
\r
Cursor = Dhcp6AppendOption (\r
Cursor,\r
// Append user-defined when configurate Dhcp6 service.\r
//\r
for (Index = 0; Index < Instance->Config->OptionCount; Index++) {\r
-\r
UserOpt = Instance->Config->OptionList[Index];\r
- Cursor = Dhcp6AppendOption(\r
+ Cursor = Dhcp6AppendOption (\r
Cursor,\r
UserOpt->OpCode,\r
UserOpt->OpLen,\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
// Callback to user with the packet to be sent and check the user's feedback.\r
//\r
- State = (RebindRequest) ? Dhcp6Rebinding : Dhcp6Renewing;\r
- Event = (RebindRequest) ? Dhcp6EnterRebinding : Dhcp6EnterRenewing;\r
+ State = (RebindRequest) ? Dhcp6Rebinding : Dhcp6Renewing;\r
+ Event = (RebindRequest) ? Dhcp6EnterRebinding : Dhcp6EnterRenewing;\r
\r
Status = Dhcp6CallbackUser (Instance, Event, &Packet);\r
\r
IN VOID *CallbackContext OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- DHCP6_INF_CB *InfCb;\r
- DHCP6_SERVICE *Service;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ DHCP6_INF_CB *InfCb;\r
+ DHCP6_SERVICE *Service;\r
+ EFI_TPL OldTpl;\r
\r
- Service = Instance->Service;\r
+ Service = Instance->Service;\r
\r
- OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+ OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
Instance->UdpSts = EFI_ALREADY_STARTED;\r
//\r
// Create and initialize the control block for the info-request.\r
//\r
- InfCb = AllocateZeroPool (sizeof(DHCP6_INF_CB));\r
+ InfCb = AllocateZeroPool (sizeof (DHCP6_INF_CB));\r
\r
if (InfCb == NULL) {\r
gBS->RestoreTPL (OldTpl);\r
//\r
// Register receive callback for the stateless exchange process.\r
//\r
- Status = UdpIoRecvDatagram(\r
+ Status = UdpIoRecvDatagram (\r
Service->UdpIo,\r
Dhcp6ReceivePacket,\r
Service,\r
if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {\r
goto ON_ERROR;\r
}\r
- \r
+\r
gBS->RestoreTPL (OldTpl);\r
return EFI_SUCCESS;\r
- \r
+\r
ON_ERROR:\r
- gBS->RestoreTPL (OldTpl); \r
+ gBS->RestoreTPL (OldTpl);\r
RemoveEntryList (&InfCb->Link);\r
FreePool (InfCb);\r
\r
IN EFI_DHCP6_RETRANSMISSION *Retransmission\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET_OPTION *UserOpt;\r
- EFI_DHCP6_DUID *ClientId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Cursor;\r
- UINT16 *Elapsed;\r
- UINT32 UserLen;\r
- UINTN Index;\r
- UINT16 Length;\r
-\r
- ASSERT(OptionRequest);\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET_OPTION *UserOpt;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Cursor;\r
+ UINT16 *Elapsed;\r
+ UINT32 UserLen;\r
+ UINTN Index;\r
+ UINT16 Length;\r
+\r
+ ASSERT (OptionRequest);\r
\r
Service = Instance->Service;\r
ClientId = Service->ClientId;\r
UserLen = NTOHS (OptionRequest->OpLen) + 4;\r
\r
- ASSERT(ClientId);\r
+ ASSERT (ClientId);\r
\r
//\r
// Calculate the added length of customized option list.\r
}\r
\r
//\r
- // Create the Dhcp6 packet and initialize commone fields.\r
+ // Create the Dhcp6 packet and initialize common fields.\r
//\r
Packet = AllocateZeroPool (DHCP6_BASE_PACKET_SIZE + UserLen);\r
if (Packet == NULL) {\r
Packet->Dhcp6.Header.MessageType = Dhcp6MsgInfoRequest;\r
Packet->Dhcp6.Header.TransactionId = Service->Xid++;\r
\r
- InfCb->Xid = Packet->Dhcp6.Header.TransactionId;\r
+ InfCb->Xid = Packet->Dhcp6.Header.TransactionId;\r
\r
//\r
// Assembly Dhcp6 options for info-request message.\r
// Append user-defined when configurate Dhcp6 service.\r
//\r
for (Index = 0; Index < OptionCount; Index++) {\r
-\r
UserOpt = OptionList[Index];\r
- Cursor = Dhcp6AppendOption(\r
+ Cursor = Dhcp6AppendOption (\r
Cursor,\r
UserOpt->OpCode,\r
UserOpt->OpLen,\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
- \r
+\r
//\r
// Clear initial time for current transaction.\r
//\r
return Dhcp6EnqueueRetry (Instance, Packet, Elapsed, Retransmission);\r
}\r
\r
-\r
/**\r
Create the Confirm message and send it.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SendConfirmMsg (\r
- IN DHCP6_INSTANCE *Instance\r
+ IN DHCP6_INSTANCE *Instance\r
)\r
{\r
- UINT8 *Cursor;\r
- UINTN Index;\r
- UINT16 Length;\r
- UINT32 UserLen;\r
- EFI_STATUS Status;\r
- DHCP6_SERVICE *Service;\r
- EFI_DHCP6_DUID *ClientId;\r
- EFI_DHCP6_PACKET *Packet;\r
- EFI_DHCP6_PACKET_OPTION *UserOpt;\r
- UINT16 *Elapsed;\r
+ UINT8 *Cursor;\r
+ UINTN Index;\r
+ UINT16 Length;\r
+ UINT32 UserLen;\r
+ EFI_STATUS Status;\r
+ DHCP6_SERVICE *Service;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ EFI_DHCP6_PACKET_OPTION *UserOpt;\r
+ UINT16 *Elapsed;\r
\r
ASSERT (Instance->Config != NULL);\r
ASSERT (Instance->IaCb.Ia != NULL);\r
//\r
// Determine the size/length of packet.\r
//\r
- Packet->Length += (UINT32) (Cursor - Packet->Dhcp6.Option);\r
+ Packet->Length += (UINT32)(Cursor - Packet->Dhcp6.Option);\r
ASSERT (Packet->Size > Packet->Length + 8);\r
\r
//\r
return Dhcp6EnqueueRetry (Instance, Packet, Elapsed, NULL);\r
}\r
\r
-\r
-\r
/**\r
Handle with the Dhcp6 reply message.\r
\r
**/\r
EFI_STATUS\r
Dhcp6HandleReplyMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 *Option;\r
- UINT16 StsCode;\r
+ EFI_STATUS Status;\r
+ UINT8 *Option;\r
+ UINT16 StsCode;\r
\r
ASSERT (Instance->Config != NULL);\r
ASSERT (Instance->IaCb.Ia != NULL);\r
Dhcp6OptRapidCommit\r
);\r
\r
- if ((Option != NULL && !Instance->Config->RapidCommit) || (Option == NULL && Instance->Config->RapidCommit)) {\r
+ if (((Option != NULL) && !Instance->Config->RapidCommit) || ((Option == NULL) && Instance->Config->RapidCommit)) {\r
return EFI_DEVICE_ERROR;\r
}\r
\r
// As to a valid reply packet in response to a request/renew/rebind packet,\r
// ignore the packet if not contains the Ia option\r
//\r
- if (Instance->IaCb.Ia->State == Dhcp6Requesting ||\r
- Instance->IaCb.Ia->State == Dhcp6Renewing ||\r
- Instance->IaCb.Ia->State == Dhcp6Rebinding\r
- ) {\r
-\r
+ if ((Instance->IaCb.Ia->State == Dhcp6Requesting) ||\r
+ (Instance->IaCb.Ia->State == Dhcp6Renewing) ||\r
+ (Instance->IaCb.Ia->State == Dhcp6Rebinding)\r
+ )\r
+ {\r
Option = Dhcp6SeekIaOption (\r
Packet->Dhcp6.Option,\r
Packet->Length,\r
// the client considers the decline/release event completed regardless of the\r
// status code.\r
//\r
- if (Instance->IaCb.Ia->State == Dhcp6Declining || Instance->IaCb.Ia->State == Dhcp6Releasing) {\r
-\r
+ if ((Instance->IaCb.Ia->State == Dhcp6Declining) || (Instance->IaCb.Ia->State == Dhcp6Releasing)) {\r
if (Instance->IaCb.Ia->IaAddressCount != 0) {\r
- Instance->IaCb.Ia->State = Dhcp6Bound;\r
+ Instance->IaCb.Ia->State = Dhcp6Bound;\r
} else {\r
ASSERT (Instance->IaCb.Ia->ReplyPacket);\r
FreePool (Instance->IaCb.Ia->ReplyPacket);\r
Instance->UdpSts = EFI_SUCCESS;\r
\r
//\r
- // For async, signal the Ia event to inform Ia infomation update.\r
+ // For async, signal the Ia event to inform Ia information update.\r
//\r
if (Instance->Config->IaInfoEvent != NULL) {\r
gBS->SignalEvent (Instance->Config->IaInfoEvent);\r
//\r
// Reset start time for next exchange.\r
//\r
- Instance->StartTime = 0;\r
+ Instance->StartTime = 0;\r
\r
Status = EFI_SUCCESS;\r
goto ON_EXIT;\r
//\r
// Reset start time for next exchange.\r
//\r
- Instance->StartTime = 0;\r
+ Instance->StartTime = 0;\r
\r
//\r
// Set bound state and store the reply packet.\r
//\r
// For sync, set the success flag out of polling in start/renewrebind.\r
//\r
- Instance->UdpSts = EFI_SUCCESS;\r
+ Instance->UdpSts = EFI_SUCCESS;\r
\r
//\r
// Maybe this is a new round DHCP process due to some reason, such as NotOnLink\r
- // ReplyMsg for ConfirmMsg should triger new round to acquire new address. In that\r
+ // ReplyMsg for ConfirmMsg should trigger new round to acquire new address. In that\r
// case, clear old address.ValidLifetime and append to new address. Therefore, DHCP\r
// consumers can be notified to flush old address.\r
//\r
Dhcp6AppendCacheIa (Instance);\r
\r
//\r
- // For async, signal the Ia event to inform Ia infomation update.\r
+ // For async, signal the Ia event to inform Ia information update.\r
//\r
if (Instance->Config->IaInfoEvent != NULL) {\r
gBS->SignalEvent (Instance->Config->IaInfoEvent);\r
}\r
} else if (Status == EFI_NOT_FOUND) {\r
//\r
- // Refer to RFC3315 Chapter 18.1.8, for each IA in the original Renew or Rebind message, \r
+ // Refer to RFC3315 Chapter 18.1.8, for each IA in the original Renew or Rebind message,\r
// the client sends a Renew or Rebind if the IA is not in the Reply message.\r
// Return EFI_SUCCESS so we can continue to restart the Renew/Rebind process.\r
//\r
return EFI_SUCCESS;\r
}\r
- \r
+\r
goto ON_EXIT;\r
- \r
} else if (Option != NULL) {\r
//\r
// Any error status code option is found.\r
//\r
- StsCode = NTOHS (ReadUnaligned16 ((UINT16 *) (Option + 4)));\r
+ StsCode = NTOHS (ReadUnaligned16 ((UINT16 *)(Option + 4)));\r
switch (StsCode) {\r
- case Dhcp6StsUnspecFail:\r
- //\r
- // It indicates the server is unable to process the message due to an\r
- // unspecified failure condition, so just retry if possible.\r
- //\r
- break;\r
-\r
- case Dhcp6StsUseMulticast:\r
- //\r
- // It indicates the server receives a message via unicast from a client\r
- // to which the server has not sent a unicast option, so retry it by\r
- // multi-cast address.\r
- //\r
- if (Instance->Unicast != NULL) {\r
- FreePool (Instance->Unicast);\r
- Instance->Unicast = NULL;\r
- }\r
- break;\r
-\r
- case Dhcp6StsNotOnLink:\r
- if (Instance->IaCb.Ia->State == Dhcp6Confirming) {\r
+ case Dhcp6StsUnspecFail:\r
//\r
- // Before initiate new round DHCP, cache the current IA.\r
+ // It indicates the server is unable to process the message due to an\r
+ // unspecified failure condition, so just retry if possible.\r
//\r
- Status = Dhcp6CacheIa (Instance);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
+ break;\r
\r
+ case Dhcp6StsUseMulticast:\r
//\r
- // Restart S.A.R.R process to acquire new address.\r
+ // It indicates the server receives a message via unicast from a client\r
+ // to which the server has not sent a unicast option, so retry it by\r
+ // multi-cast address.\r
//\r
- Status = Dhcp6InitSolicitMsg (Instance);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (Instance->Unicast != NULL) {\r
+ FreePool (Instance->Unicast);\r
+ Instance->Unicast = NULL;\r
}\r
- }\r
- break;\r
\r
- case Dhcp6StsNoBinding:\r
- if (Instance->IaCb.Ia->State == Dhcp6Renewing || Instance->IaCb.Ia->State == Dhcp6Rebinding) {\r
- //\r
- // Refer to RFC3315 Chapter 18.1.8, for each IA in the original Renew or Rebind message, the client \r
- // sends a Request message if the IA contained a Status Code option with the NoBinding status.\r
- //\r
- Status = Dhcp6SendRequestMsg(Instance);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ break;\r
+\r
+ case Dhcp6StsNotOnLink:\r
+ if (Instance->IaCb.Ia->State == Dhcp6Confirming) {\r
+ //\r
+ // Before initiate new round DHCP, cache the current IA.\r
+ //\r
+ Status = Dhcp6CacheIa (Instance);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Restart S.A.R.R process to acquire new address.\r
+ //\r
+ Status = Dhcp6InitSolicitMsg (Instance);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
- }\r
- break;\r
\r
- default:\r
- //\r
- // The other status code, just restart solicitation.\r
- //\r
- break;\r
+ break;\r
+\r
+ case Dhcp6StsNoBinding:\r
+ if ((Instance->IaCb.Ia->State == Dhcp6Renewing) || (Instance->IaCb.Ia->State == Dhcp6Rebinding)) {\r
+ //\r
+ // Refer to RFC3315 Chapter 18.1.8, for each IA in the original Renew or Rebind message, the client\r
+ // sends a Request message if the IA contained a Status Code option with the NoBinding status.\r
+ //\r
+ Status = Dhcp6SendRequestMsg (Instance);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ //\r
+ // The other status code, just restart solicitation.\r
+ //\r
+ break;\r
}\r
}\r
\r
return EFI_SUCCESS;\r
- \r
+\r
ON_EXIT:\r
\r
- if (!EFI_ERROR(Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
Status = Dhcp6DequeueRetry (\r
Instance,\r
Packet->Dhcp6.Header.TransactionId,\r
FALSE\r
);\r
}\r
- \r
+\r
return Status;\r
}\r
\r
-\r
/**\r
Select the appointed Dhcp6 advertisement message.\r
\r
**/\r
EFI_STATUS\r
Dhcp6SelectAdvertiseMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *AdSelect\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *AdSelect\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 *Option;\r
+ EFI_STATUS Status;\r
+ UINT8 *Option;\r
\r
ASSERT (AdSelect != NULL);\r
\r
FALSE\r
);\r
\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
// Check whether there is server unicast option in the selected advertise\r
// packet, and update it.\r
//\r
- Option = Dhcp6SeekOption(\r
+ Option = Dhcp6SeekOption (\r
AdSelect->Dhcp6.Option,\r
AdSelect->Length - 4,\r
Dhcp6OptServerUnicast\r
);\r
\r
if (Option != NULL) {\r
-\r
- Instance->Unicast = AllocateZeroPool (sizeof(EFI_IPv6_ADDRESS));\r
+ Instance->Unicast = AllocateZeroPool (sizeof (EFI_IPv6_ADDRESS));\r
\r
if (Instance->Unicast == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- CopyMem (Instance->Unicast, Option + 4, sizeof(EFI_IPv6_ADDRESS));\r
+ CopyMem (Instance->Unicast, Option + 4, sizeof (EFI_IPv6_ADDRESS));\r
}\r
\r
//\r
return Dhcp6SendRequestMsg (Instance);\r
}\r
\r
-\r
/**\r
Handle with the Dhcp6 advertisement message.\r
\r
**/\r
EFI_STATUS\r
Dhcp6HandleAdvertiseMsg (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 *Option;\r
- BOOLEAN Timeout;\r
+ EFI_STATUS Status;\r
+ UINT8 *Option;\r
+ BOOLEAN Timeout;\r
\r
- ASSERT(Instance->Config);\r
- ASSERT(Instance->IaCb.Ia);\r
+ ASSERT (Instance->Config);\r
+ ASSERT (Instance->IaCb.Ia);\r
\r
Timeout = FALSE;\r
\r
//\r
// If the client does receives a valid reply message that includes a rapid\r
- // commit option since a solicit with rapid commit optioin sent before, select\r
+ // commit option since a solicit with rapid commit option sent before, select\r
// this reply message. Or else, process the advertise messages as normal.\r
// See details in the section-17.1.4 of rfc-3315.\r
//\r
- Option = Dhcp6SeekOption(\r
+ Option = Dhcp6SeekOption (\r
Packet->Dhcp6.Option,\r
Packet->Length - 4,\r
Dhcp6OptRapidCommit\r
);\r
\r
- if (Option != NULL && Instance->Config->RapidCommit && Packet->Dhcp6.Header.MessageType == Dhcp6MsgReply) {\r
-\r
+ if ((Option != NULL) && Instance->Config->RapidCommit && (Packet->Dhcp6.Header.MessageType == Dhcp6MsgReply)) {\r
return Dhcp6HandleReplyMsg (Instance, Packet);\r
}\r
\r
CopyMem (Instance->AdSelect, Packet, Packet->Size);\r
\r
Instance->AdPref = 0xff;\r
-\r
} else if (Status == EFI_NOT_READY) {\r
//\r
// Not_ready means user wants to continue to receive more advertise packets.\r
//\r
- if (Instance->AdPref == 0xff && Instance->AdSelect == NULL) {\r
+ if ((Instance->AdPref == 0xff) && (Instance->AdSelect == NULL)) {\r
//\r
// It's a tricky point. The timer routine set adpref as 0xff if the first\r
// rt timeout and no advertisement received, which means any advertisement\r
// Check whether the current packet has a 255 preference option or not.\r
// Take non-preference option as 0 value.\r
//\r
- Option = Dhcp6SeekOption(\r
+ Option = Dhcp6SeekOption (\r
Packet->Dhcp6.Option,\r
Packet->Length - 4,\r
Dhcp6OptPreference\r
);\r
\r
- if (Instance->AdSelect == NULL || (Option != NULL && *(Option + 4) > Instance->AdPref)) {\r
+ if ((Instance->AdSelect == NULL) || ((Option != NULL) && (*(Option + 4) > Instance->AdPref))) {\r
//\r
// No advertisements received before or preference is more than other\r
// advertisements received before. Then store the new packet and the\r
// preference is less than other advertisements received before.\r
// Leave the packet alone.\r
}\r
-\r
} else {\r
//\r
// Other error status means termination.\r
// RT has elapsed, or get a highest preference 255 advertise.\r
// See details in the section-17.1.2 of rfc-3315.\r
//\r
- if (Instance->AdPref == 0xff || Timeout) {\r
+ if ((Instance->AdPref == 0xff) || Timeout) {\r
Status = Dhcp6SelectAdvertiseMsg (Instance, Instance->AdSelect);\r
}\r
\r
return Status;\r
}\r
\r
-\r
/**\r
The Dhcp6 stateful exchange process routine.\r
\r
**/\r
VOID\r
Dhcp6HandleStateful (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DHCP6_DUID *ClientId;\r
- DHCP6_SERVICE *Service;\r
- UINT8 *Option;\r
+ EFI_STATUS Status;\r
+ EFI_DHCP6_DUID *ClientId;\r
+ DHCP6_SERVICE *Service;\r
+ UINT8 *Option;\r
\r
Service = Instance->Service;\r
ClientId = Service->ClientId;\r
//\r
// Discard the packet if not advertisement or reply packet.\r
//\r
- if (Packet->Dhcp6.Header.MessageType != Dhcp6MsgAdvertise && Packet->Dhcp6.Header.MessageType != Dhcp6MsgReply) {\r
+ if ((Packet->Dhcp6.Header.MessageType != Dhcp6MsgAdvertise) && (Packet->Dhcp6.Header.MessageType != Dhcp6MsgReply)) {\r
goto ON_CONTINUE;\r
}\r
\r
//\r
// Check whether include client Id or not.\r
//\r
- Option = Dhcp6SeekOption(\r
+ Option = Dhcp6SeekOption (\r
Packet->Dhcp6.Option,\r
Packet->Length - 4,\r
Dhcp6OptClientId\r
);\r
\r
- if (Option == NULL || CompareMem (Option + 4, ClientId->Duid, ClientId->Length) != 0) {\r
+ if ((Option == NULL) || (CompareMem (Option + 4, ClientId->Duid, ClientId->Length) != 0)) {\r
goto ON_CONTINUE;\r
}\r
\r
//\r
// Check whether include server Id or not.\r
//\r
- Option = Dhcp6SeekOption(\r
+ Option = Dhcp6SeekOption (\r
Packet->Dhcp6.Option,\r
Packet->Length - 4,\r
Dhcp6OptServerId\r
}\r
\r
switch (Instance->IaCb.Ia->State) {\r
- case Dhcp6Selecting:\r
- //\r
- // Handle the advertisement message when in the Dhcp6Selecting state.\r
- // Do not need check return status, if failed, just continue to the next.\r
- //\r
- Dhcp6HandleAdvertiseMsg (Instance, Packet);\r
- break;\r
-\r
- case Dhcp6Requesting:\r
- case Dhcp6Confirming:\r
- case Dhcp6Renewing:\r
- case Dhcp6Rebinding:\r
- case Dhcp6Releasing:\r
- case Dhcp6Declining:\r
- //\r
- // Handle the reply message when in the Dhcp6Requesting, Dhcp6Renewing\r
- // Dhcp6Rebinding, Dhcp6Releasing and Dhcp6Declining state.\r
- // If failed here, it should reset the current session.\r
- //\r
- Status = Dhcp6HandleReplyMsg (Instance, Packet);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_EXIT;\r
- }\r
- break;\r
- default:\r
- //\r
- // Other state has not supported yet.\r
- //\r
- break;\r
+ case Dhcp6Selecting:\r
+ //\r
+ // Handle the advertisement message when in the Dhcp6Selecting state.\r
+ // Do not need check return status, if failed, just continue to the next.\r
+ //\r
+ Dhcp6HandleAdvertiseMsg (Instance, Packet);\r
+ break;\r
+\r
+ case Dhcp6Requesting:\r
+ case Dhcp6Confirming:\r
+ case Dhcp6Renewing:\r
+ case Dhcp6Rebinding:\r
+ case Dhcp6Releasing:\r
+ case Dhcp6Declining:\r
+ //\r
+ // Handle the reply message when in the Dhcp6Requesting, Dhcp6Renewing\r
+ // Dhcp6Rebinding, Dhcp6Releasing and Dhcp6Declining state.\r
+ // If failed here, it should reset the current session.\r
+ //\r
+ Status = Dhcp6HandleReplyMsg (Instance, Packet);\r
+ if (EFI_ERROR (Status)) {\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ break;\r
+ default:\r
+ //\r
+ // Other state has not supported yet.\r
+ //\r
+ break;\r
}\r
\r
ON_CONTINUE:\r
}\r
}\r
\r
-\r
/**\r
The Dhcp6 stateless exchange process routine.\r
\r
**/\r
VOID\r
Dhcp6HandleStateless (\r
- IN DHCP6_INSTANCE *Instance,\r
- IN EFI_DHCP6_PACKET *Packet\r
+ IN DHCP6_INSTANCE *Instance,\r
+ IN EFI_DHCP6_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- DHCP6_SERVICE *Service;\r
- DHCP6_INF_CB *InfCb;\r
- UINT8 *Option;\r
- BOOLEAN IsMatched;\r
+ EFI_STATUS Status;\r
+ DHCP6_SERVICE *Service;\r
+ DHCP6_INF_CB *InfCb;\r
+ UINT8 *Option;\r
+ BOOLEAN IsMatched;\r
\r
Service = Instance->Service;\r
Status = EFI_SUCCESS;\r
}\r
}\r
\r
-\r
/**\r
The receive callback function for Dhcp6 exchange process.\r
\r
VOID\r
EFIAPI\r
Dhcp6ReceivePacket (\r
- IN NET_BUF *Udp6Wrap,\r
- IN UDP_END_POINT *EndPoint,\r
- IN EFI_STATUS IoStatus,\r
- IN VOID *Context\r
+ IN NET_BUF *Udp6Wrap,\r
+ IN UDP_END_POINT *EndPoint,\r
+ IN EFI_STATUS IoStatus,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_DHCP6_HEADER *Head;\r
- EFI_DHCP6_PACKET *Packet;\r
- DHCP6_SERVICE *Service;\r
- DHCP6_INSTANCE *Instance;\r
- DHCP6_TX_CB *TxCb;\r
- UINT32 Size;\r
- BOOLEAN IsDispatched;\r
- BOOLEAN IsStateless;\r
- LIST_ENTRY *Entry1;\r
- LIST_ENTRY *Next1;\r
- LIST_ENTRY *Entry2;\r
- LIST_ENTRY *Next2;\r
- EFI_STATUS Status;\r
+ EFI_DHCP6_HEADER *Head;\r
+ EFI_DHCP6_PACKET *Packet;\r
+ DHCP6_SERVICE *Service;\r
+ DHCP6_INSTANCE *Instance;\r
+ DHCP6_TX_CB *TxCb;\r
+ UINT32 Size;\r
+ BOOLEAN IsDispatched;\r
+ BOOLEAN IsStateless;\r
+ LIST_ENTRY *Entry1;\r
+ LIST_ENTRY *Next1;\r
+ LIST_ENTRY *Entry2;\r
+ LIST_ENTRY *Next2;\r
+ EFI_STATUS Status;\r
\r
ASSERT (Udp6Wrap != NULL);\r
ASSERT (Context != NULL);\r
\r
- Service = (DHCP6_SERVICE *) Context;\r
+ Service = (DHCP6_SERVICE *)Context;\r
Instance = NULL;\r
Packet = NULL;\r
IsDispatched = FALSE;\r
IsStateless = FALSE;\r
\r
if (EFI_ERROR (IoStatus)) {\r
- return ;\r
+ return;\r
}\r
\r
if (Udp6Wrap->TotalSize < sizeof (EFI_DHCP6_HEADER)) {\r
// Copy the net buffer received from upd6 to a Dhcp6 packet.\r
//\r
Size = sizeof (EFI_DHCP6_PACKET) + Udp6Wrap->TotalSize;\r
- Packet = (EFI_DHCP6_PACKET *) AllocateZeroPool (Size);\r
+ Packet = (EFI_DHCP6_PACKET *)AllocateZeroPool (Size);\r
\r
if (Packet == NULL) {\r
goto ON_CONTINUE;\r
\r
Packet->Size = Size;\r
Head = &Packet->Dhcp6.Header;\r
- Packet->Length = NetbufCopy (Udp6Wrap, 0, Udp6Wrap->TotalSize, (UINT8 *) Head);\r
+ Packet->Length = NetbufCopy (Udp6Wrap, 0, Udp6Wrap->TotalSize, (UINT8 *)Head);\r
\r
if (Packet->Length == 0) {\r
goto ON_CONTINUE;\r
// Dispatch packet to right instance by transaction id.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry1, Next1, &Service->Child) {\r
-\r
Instance = NET_LIST_USER_STRUCT (Entry1, DHCP6_INSTANCE, Link);\r
\r
NET_LIST_FOR_EACH_SAFE (Entry2, Next2, &Instance->TxList) {\r
-\r
TxCb = NET_LIST_USER_STRUCT (Entry2, DHCP6_TX_CB, Link);\r
\r
if (Packet->Dhcp6.Header.TransactionId == TxCb->Xid) {\r
if (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest) {\r
IsStateless = TRUE;\r
}\r
- IsDispatched = TRUE;\r
+\r
+ IsDispatched = TRUE;\r
break;\r
}\r
}\r
\r
if (!IsDispatched) {\r
Status = UdpIoRecvDatagram (\r
- Service->UdpIo,\r
- Dhcp6ReceivePacket,\r
- Service,\r
- 0\r
- );\r
+ Service->UdpIo,\r
+ Dhcp6ReceivePacket,\r
+ Service,\r
+ 0\r
+ );\r
if (EFI_ERROR (Status)) {\r
NET_LIST_FOR_EACH_SAFE (Entry1, Next1, &Service->Child) {\r
Instance = NET_LIST_USER_STRUCT (Entry1, DHCP6_INSTANCE, Link);\r
**/\r
BOOLEAN\r
Dhcp6LinkMovDetect (\r
- IN DHCP6_INSTANCE *Instance\r
+ IN DHCP6_INSTANCE *Instance\r
)\r
{\r
UINT32 InterruptStatus;\r
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
\r
ASSERT (Instance != NULL);\r
- Snp = Instance->Service->Snp;\r
+ Snp = Instance->Service->Snp;\r
MediaPresent = Instance->MediaPresent;\r
\r
//\r
if (!MediaPresent && Instance->MediaPresent) {\r
return TRUE;\r
}\r
+\r
return FALSE;\r
}\r
\r
-\r
/**\r
The timer routine of the Dhcp6 instance for each second.\r
\r
VOID\r
EFIAPI\r
Dhcp6OnTimerTick (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- DHCP6_INSTANCE *Instance;\r
- DHCP6_TX_CB *TxCb;\r
- DHCP6_IA_CB *IaCb;\r
- UINT32 LossTime;\r
- EFI_STATUS Status;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ DHCP6_INSTANCE *Instance;\r
+ DHCP6_TX_CB *TxCb;\r
+ DHCP6_IA_CB *IaCb;\r
+ UINT32 LossTime;\r
+ EFI_STATUS Status;\r
\r
ASSERT (Context != NULL);\r
\r
- Instance = (DHCP6_INSTANCE *) Context;\r
+ Instance = (DHCP6_INSTANCE *)Context;\r
\r
//\r
// 1. Loop the tx list, count live time of every tx packet to check whether\r
// need re-transmit or not.\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Instance->TxList) {\r
-\r
TxCb = NET_LIST_USER_STRUCT (Entry, DHCP6_TX_CB, Link);\r
\r
TxCb->TickTime++;\r
//\r
// Handle the first rt in the transmission of solicit specially.\r
//\r
- if ((TxCb->RetryCnt == 0 || TxCb->SolicitRetry) && TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgSolicit) {\r
+ if (((TxCb->RetryCnt == 0) || TxCb->SolicitRetry) && (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgSolicit)) {\r
if (Instance->AdSelect == NULL) {\r
//\r
// Set adpref as 0xff here to indicate select any advertisement\r
} else if (EFI_ERROR (Status)) {\r
TxCb->RetryCnt++;\r
}\r
+\r
return;\r
}\r
}\r
+\r
//\r
// Increase the retry count for the packet and add up the total loss time.\r
//\r
//\r
// Check whether overflow the max retry count limit for this packet\r
//\r
- if (TxCb->RetryCtl.Mrc != 0 && TxCb->RetryCtl.Mrc < TxCb->RetryCnt) {\r
+ if ((TxCb->RetryCtl.Mrc != 0) && (TxCb->RetryCtl.Mrc < TxCb->RetryCnt)) {\r
Status = EFI_NO_RESPONSE;\r
goto ON_CLOSE;\r
}\r
//\r
// Check whether overflow the max retry duration for this packet\r
//\r
- if (TxCb->RetryCtl.Mrd != 0 && TxCb->RetryCtl.Mrd <= TxCb->RetryLos) {\r
+ if ((TxCb->RetryCtl.Mrd != 0) && (TxCb->RetryCtl.Mrd <= TxCb->RetryLos)) {\r
Status = EFI_NO_RESPONSE;\r
goto ON_CLOSE;\r
}\r
TRUE\r
);\r
\r
- if (TxCb->RetryCtl.Mrt != 0 && TxCb->RetryCtl.Mrt < TxCb->RetryExp) {\r
+ if ((TxCb->RetryCtl.Mrt != 0) && (TxCb->RetryCtl.Mrt < TxCb->RetryExp)) {\r
TxCb->RetryExp = Dhcp6CalculateExpireTime (\r
TxCb->RetryCtl.Mrt,\r
TRUE,\r
// duration time.\r
//\r
LossTime = TxCb->RetryLos + TxCb->RetryExp;\r
- if (TxCb->RetryCtl.Mrd != 0 && TxCb->RetryCtl.Mrd < LossTime) {\r
+ if ((TxCb->RetryCtl.Mrd != 0) && (TxCb->RetryCtl.Mrd < LossTime)) {\r
TxCb->RetryExp = TxCb->RetryCtl.Mrd - TxCb->RetryLos;\r
}\r
\r
//\r
IaCb = &Instance->IaCb;\r
\r
- if (Instance->Config == NULL || IaCb->Ia == NULL) {\r
+ if ((Instance->Config == NULL) || (IaCb->Ia == NULL)) {\r
return;\r
}\r
\r
- if (IaCb->Ia->State == Dhcp6Bound || IaCb->Ia->State == Dhcp6Renewing || IaCb->Ia->State == Dhcp6Rebinding) {\r
-\r
+ if ((IaCb->Ia->State == Dhcp6Bound) || (IaCb->Ia->State == Dhcp6Renewing) || (IaCb->Ia->State == Dhcp6Rebinding)) {\r
IaCb->LeaseTime++;\r
\r
- if (IaCb->LeaseTime > IaCb->T2 && IaCb->Ia->State == Dhcp6Bound) {\r
+ if ((IaCb->LeaseTime > IaCb->T2) && (IaCb->Ia->State == Dhcp6Bound)) {\r
//\r
// Exceed t2, send rebind packet to extend the Ia lease.\r
//\r
Dhcp6SendRenewRebindMsg (Instance, TRUE);\r
-\r
- } else if (IaCb->LeaseTime > IaCb->T1 && IaCb->Ia->State == Dhcp6Bound) {\r
-\r
+ } else if ((IaCb->LeaseTime > IaCb->T1) && (IaCb->Ia->State == Dhcp6Bound)) {\r
//\r
// Exceed t1, send renew packet to extend the Ia lease.\r
//\r
\r
return;\r
\r
- ON_CLOSE:\r
+ON_CLOSE:\r
\r
if (Dhcp6IsValidTxCb (Instance, TxCb) &&\r
- TxCb->TxPacket != NULL &&\r
- (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest ||\r
- TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgRenew ||\r
- TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgConfirm)\r
- ) {\r
+ (TxCb->TxPacket != NULL) &&\r
+ ((TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest) ||\r
+ (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgRenew) ||\r
+ (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgConfirm))\r
+ )\r
+ {\r
//\r
// The failure of renew/Confirm will still switch to the bound state.\r
//\r
if ((TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgRenew) ||\r
- (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgConfirm)) {\r
+ (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgConfirm))\r
+ {\r
ASSERT (Instance->IaCb.Ia);\r
Instance->IaCb.Ia->State = Dhcp6Bound;\r
}\r
+\r
//\r
// The failure of info-request will return no response.\r
//\r
if (TxCb->TxPacket->Dhcp6.Header.MessageType == Dhcp6MsgInfoRequest) {\r
Instance->UdpSts = EFI_NO_RESPONSE;\r
}\r
+\r
Dhcp6DequeueRetry (\r
Instance,\r
TxCb->Xid,\r