4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The implementation for Shell application IfConfig6.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000001,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000001,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000002,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000001,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000004,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000002,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000008,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000004,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000010,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000008,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000020,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000010,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000040,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x00000020,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Split a string with specified separator and save the substring to a list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] String The pointer of the input string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Separator The specified separator.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The pointer of headnode of ARG_LIST.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Copy the CONST string to a local copy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = (CHAR16 *) AllocateZeroPool (StrSize (String));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // init a node for the list head.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ArgNode = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Split the local copy and save in the list node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ArgNode->Next = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check the correctness of input Args with '-s' option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CheckList The pointer of VAR_CHECK_ITEM array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Name The pointer of input arg.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Init The switch to execute the check.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The value of VAR_CHECK_CODE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check the Duplicated/Conflicted/Unknown input Args.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The notify function of create event when performing a manual config.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Event The event this notify function registered to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Pointer to the context data registered to the event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print MAC address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Node The pointer of MAC address buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Size The size of MAC address buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_MAC_ADDR_BODY), mHiiHandle, Node[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Print IPv6 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Ip The pointer of Ip bufffer in EFI_IPv6_ADDRESS format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PrefixLen The pointer of PrefixLen that describes the size Prefix.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < PREFIXMAXLEN; Index = Index + 2) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!Short && (Index + 1 < PREFIXMAXLEN) && (Index % 2 == 0) && (Ip->Addr[Index] == 0) && (Ip->Addr[Index + 1] == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Deal with the case of ::.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // :: is at the beginning of the address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((Ip->Addr[Index] == 0) && (Ip->Addr[Index + 1] == 0) && (Index < PREFIXMAXLEN)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // :: is at the end of the address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_IP_ADDR_BODY), mHiiHandle, Ip->Addr[Index]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_IP_ADDR_BODY), mHiiHandle, Ip->Addr[Index + 1]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_COLON), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_PREFIX_LEN), mHiiHandle, *PrefixLen);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pick up host IPv6 address in string format from Args with "-s" option and convert it to EFI_IP6_CONFIG_MANUAL_ADDRESS format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Arg The pointer of the address of ARG_LIST which save Args with the "-s" option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buf The pointer of the address of EFI_IP6_CONFIG_MANUAL_ADDRESS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] BufSize The pointer of BufSize that describes the size of Buf in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The convertion is successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Does't find the host address, or it is an invalid IPv6 address in string format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the list to check the correctness of input host ip6 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // host ip ip ... gw
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddrBuf = AllocateZeroPool (AddrCnt * sizeof (EFI_IP6_CONFIG_MANUAL_ADDRESS));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the list to fill in the EFI_IP6_CONFIG_MANUAL_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // If prefix length is not set, set it as Zero here. In the IfConfigSetInterfaceInfo()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Zero prefix, length will be transfered to default prefix length.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IP6_COPY_ADDRESS (&AddrBuf[AddrCnt].Address, &Address);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status) && (Status != EFI_INVALID_PARAMETER)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *BufSize = AddrCnt * sizeof (EFI_IP6_CONFIG_MANUAL_ADDRESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pick up gw/dns IPv6 address in string format from Args with "-s" option and convert it to EFI_IPv6_ADDRESS format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Arg The pointer of the address of ARG_LIST that save Args with the "-s" option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Buf The pointer of the address of EFI_IPv6_ADDRESS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] BufSize The pointer of BufSize that describes the size of Buf in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The conversion is successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Doesn't find the host address, or it is an invalid IPv6 address in string format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the list to check the correctness of input gw/dns address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // gw ip ip ... host
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddrBuf = AllocateZeroPool (AddrCnt * sizeof (EFI_IPv6_ADDRESS));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the list to fill in the EFI_IPv6_ADDRESS structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((!EFI_ERROR (Status)) && (VarArg != NULL)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = NetLibStrToIp6andPrefix (VarArg->Arg, &Address, &Prefix);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status) && (Status != EFI_INVALID_PARAMETER)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Parse InterfaceId in string format from Args with the "-s" option and convert it to EFI_IP6_CONFIG_INTERFACE_ID format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Arg The pointer of the address of ARG_LIST that saves Args with the "-s" option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] IfId The pointer of EFI_IP6_CONFIG_INTERFACE_ID.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The get status processed successfullly.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The get status process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *IfId = AllocateZeroPool (sizeof (EFI_IP6_CONFIG_INTERFACE_ID));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NodeVal = (UINT8)((NodeVal << 4) + *IdStr - L'A' + 10);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NodeVal = (UINT8)((NodeVal << 4) + *IdStr - L'a' + 10);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Parse dad in string format from Args with the "-s" option and convert it to UINT32 format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Arg The pointer of the address of ARG_LIST that saves Args with the "-s" option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Xmits The pointer of Xmits.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The get status processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The get status process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The get current status of all handles.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ImageHandle The handle of ImageHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IfName The pointer of IfName(interface name).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IfList The pointer of IfList(interface list).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The get status processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The get status process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Locate all the handles with ip6 service binding protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Enumerate all handles that installed with ip6 service binding protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (HandleIndex = 0; HandleIndex < HandleNum; HandleIndex++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Ip6config protocol and ip6 service binding protocol are installed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // on the same handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the interface information size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the interface info.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check the interface name if required.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((IfName != NULL) && (StrCmp (IfName, IfInfo->Name) != 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the size of dns server list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Status != EFI_BUFFER_TOO_SMALL) && (Status != EFI_NOT_FOUND)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb = AllocateZeroPool (sizeof (IFCONFIG6_INTERFACE_CB) + DataSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb->DnsCnt = (UINT32) (DataSize / sizeof (EFI_IPv6_ADDRESS));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the dns server list if has.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the interface id if has.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the config policy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the dad transmits.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataSize = sizeof (EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((IfName != NULL) && (StrCmp (IfName, IfInfo->Name) == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Only need the appointed interface, keep the allocated buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The list process of the IfConfig6 application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IfList The pointer of IfList(interface list).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The IfConfig6 list processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The IfConfig6 list process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the interface list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_BREAK), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print interface name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_IF_NAME), mHiiHandle, IfCb->IfInfo->Name);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print interface config policy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_POLICY_AUTO), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_POLICY_MAN), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print dad transmit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_DAD_TRANSMITS), mHiiHandle, IfCb->Xmits);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print interface id if has.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_INTERFACE_ID_HEAD), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print mac address of the interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_MAC_ADDR_HEAD), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print ip addresses list of the interface.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_IP_ADDR_HEAD), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < IfCb->IfInfo->AddressInfoCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print dns server addresses list of the interface if has.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_DNS_ADDR_HEAD), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Print route table of the interface if has.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_ROUTE_HEAD), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < IfCb->IfInfo->RouteCount; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_JOINT), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_NEWLINE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_INFO_BREAK), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The clean process of the IfConfig6 application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IfList The pointer of IfList(interface list).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The IfConfig6 clean processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The IfConfig6 clean process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Go through the interface list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The set process of the IfConfig6 application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IfList The pointer of IfList(interface list).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] VarArg The pointer of ARG_LIST(Args with "-s" option).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The IfConfig6 set processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The IfConfig6 set process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_INTERFACE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Make sure to set only one interface each time.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb = BASE_CR (IfList->ForwardLink, IFCONFIG6_INTERFACE_CB, Link);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Initialize check list mechanism.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Create events & timers for asynchronous settings.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse the setting variables.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check invalid parameters (duplication & unknown & conflict).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_DUPLICATE_COMMAND), mHiiHandle, VarArg->Arg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_CONFLICT_COMMAND), mHiiHandle, VarArg->Arg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_UNKNOWN_COMMAND), mHiiHandle, VarArg->Arg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Process valid variables.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set automaic config policy
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set manual config policy.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse till the next tag or the end of command line.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"host");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set static host ip6 address list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // This is a asynchronous process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get current dad transmits count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CurDadXmitsLen = sizeof (EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync gBS->SetTimer (TimeOutEvt, TimerRelative, 50000000 + 10000000 * CurDadXmits);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_MAN_HOST), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check whether the address is set successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_IP6CFG_GETDATA), mHiiHandle, Status);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ( Index = 0; Index < (UINTN) (AddrSize / sizeof (EFI_IP6_CONFIG_MANUAL_ADDRESS)); Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // By default, the prefix length 0 is regarded as 64.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index2 = 0; Index2 < IfInfo->AddressInfoCount; Index2++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_IP6_EQUAL (&IfInfo->AddressInfo[Index2].Address, &CfgManAddr[Index].Address) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (IfInfo->AddressInfo[Index2].PrefixLength == CfgManAddr[Index].PrefixLength)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_ADDRESS_FAILED), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse till the next tag or the end of command line.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"gw");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set static gateway ip6 address list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse till the next tag or the end of command line.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_LACK_ARGUMENTS), mHiiHandle, L"dns");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set static dhs server ip6 address list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse till the next tag or the end of command line.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = IfConfig6ParseInterfaceId (&VarArg, &InterfaceId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set alternative interface id.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Parse till the next tag or the end of command line.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = IfConfig6ParseDadXmits (&VarArg, &DadXmits);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Set dad transmits count.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The IfConfig6 main process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Private The pointer of IFCONFIG6_PRIVATE_DATA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS IfConfig6 processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval others The IfConfig6 process failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get configure information of all interfaces.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = IfConfig6ShowInterfaceInfo (&Private->IfList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = IfConfig6ClearInterfaceInfo (&Private->IfList);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = IfConfig6SetInterfaceInfo (&Private->IfList, Private->VarArg);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The IfConfig6 cleanup process, free the allocated memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Private The pointer of IFCONFIG6_PRIVATE_DATA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Clean the list which save the set config Args.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Clean the IFCONFIG6_INTERFACE_CB list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfCb = BASE_CR (Entry, IFCONFIG6_INTERFACE_CB, Link);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This is the declaration of an EFI image entry point. This entry point is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers, including
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync both device drivers and bus drivers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The entry point for the IfConfig6 application which parses the command line input and calls the IfConfig6 process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ImageHandle The image handle of this application.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SystemTable The pointer to the EFI System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The operation completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Some errors occur.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Register our string package with HII and return the handle to it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mHiiHandle = HiiAddPackages (&gEfiCallerIdGuid, ImageHandle, IfConfig6Strings, NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status = ShellCommandLineParseEx (mIfConfig6CheckList, &ParamPackage, &ProblemParam, TRUE, FALSE);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_COMMAND), mHiiHandle, ProblemParam);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To handle no option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!ShellCommandLineGetFlag (ParamPackage, L"-r") && !ShellCommandLineGetFlag (ParamPackage, L"-s") &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !ShellCommandLineGetFlag (ParamPackage, L"-?") && !ShellCommandLineGetFlag (ParamPackage, L"-l")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_LACK_OPTION), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To handle conflict options.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-s"))) ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-?"))) ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-?"))) ||
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((ShellCommandLineGetFlag (ParamPackage, L"-l")) && (ShellCommandLineGetFlag (ParamPackage, L"-?")))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_CONFLICT_OPTIONS), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To show the help information of ifconfig6 command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetFlag (ParamPackage, L"-?")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_HELP), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Private = AllocateZeroPool (sizeof (IFCONFIG6_PRIVATE_DATA));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To get interface name for the list option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetFlag (ParamPackage, L"-l")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = (CHAR16 *) AllocateZeroPool (StrSize (ValueStr));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To get interface name for the clear option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetFlag (ParamPackage, L"-r")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = (CHAR16 *) AllocateZeroPool (StrSize (ValueStr));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To get interface name and corresponding Args for the set option.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ShellCommandLineGetFlag (ParamPackage, L"-s")) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_LACK_INTERFACE), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // To split the configuration into multi-section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Private->IfName == NULL || Private->VarArg == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_LACK_COMMAND), mHiiHandle);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Main process of ifconfig6.