summaryrefslogtreecommitdiffstats
path: root/ShellPkg
diff options
context:
space:
mode:
authorJiaxin Wu <jiaxin.wu@intel.com>2016-03-02 15:58:25 +0800
committerJiaxin Wu <jiaxin.wu@intel.com>2016-03-03 15:27:24 +0800
commit913ba15120b4dfa58fb90e859161ccf976015321 (patch)
treef10cc34142c1846e7cda902f85a4fb6c2e6791d0 /ShellPkg
parentc8d9d0e2bd376cbbe6a37da786784e7fc736c7d9 (diff)
downloadedk2-913ba15120b4dfa58fb90e859161ccf976015321.tar.gz
edk2-913ba15120b4dfa58fb90e859161ccf976015321.tar.bz2
edk2-913ba15120b4dfa58fb90e859161ccf976015321.zip
ShellPkg: Update 'ifconfig -r' implementation
This patch is used to update ifconfig -r implementation to sync with UEFI Shell 2.2. option -r means to reconfigure all or specified interface, and set DHCP policy. If specified interface is already set to DHCP, then refresh the IPv4 configuration. If the interface name is specified with '-r', DHCP DORA process will be triggered by the policy transition (static -> dhcp). Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Carsey Jaben <jaben.carsey@intel.com> Cc: El-Haj-Mahmoud Samer <samer.el-haj-mahmoud@hpe.com> Cc: Subramanian Sriram <sriram-s@hpe.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Sriram Subramanian <sriram-s@hpe.com> Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Diffstat (limited to 'ShellPkg')
-rw-r--r--ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
index 0c4a3b09c3..92108a14ad 100644
--- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
+++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
@@ -2,7 +2,7 @@
The implementation for Shell command ifconfig based on IP4Config2 protocol.
(C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -710,6 +710,7 @@ IfConfigShowInterfaceInfo (
The clean process of the ifconfig command to clear interface info.
@param[in] IfList The pointer of IfList(interface list).
+ @param[in] IfName The pointer of interface name.
@retval SHELL_SUCCESS The ifconfig command clean processed successfully.
@retval others The ifconfig command clean process failed.
@@ -717,7 +718,8 @@ IfConfigShowInterfaceInfo (
**/
SHELL_STATUS
IfConfigClearInterfaceInfo (
- IN LIST_ENTRY *IfList
+ IN LIST_ENTRY *IfList,
+ IN CHAR16 *IfName
)
{
EFI_STATUS Status;
@@ -726,8 +728,7 @@ IfConfigClearInterfaceInfo (
LIST_ENTRY *Next;
IFCONFIG_INTERFACE_CB *IfCb;
EFI_IP4_CONFIG2_POLICY Policy;
-
- Policy = Ip4Config2PolicyDhcp;
+
Status = EFI_SUCCESS;
ShellStatus = SHELL_SUCCESS;
@@ -737,9 +738,29 @@ IfConfigClearInterfaceInfo (
//
// Go through the interface list.
+ // If the interface name is specified, DHCP DORA process will be
+ // triggered by the policy transition (static -> dhcp).
//
NET_LIST_FOR_EACH_SAFE (Entry, Next, IfList) {
IfCb = NET_LIST_USER_STRUCT (Entry, IFCONFIG_INTERFACE_CB, Link);
+
+ if ((IfName != NULL) && (StrCmp (IfName, IfCb->IfInfo->Name) == 0)) {
+ Policy = Ip4Config2PolicyStatic;
+
+ Status = IfCb->IfCfg->SetData (
+ IfCb->IfCfg,
+ Ip4Config2DataTypePolicy,
+ sizeof (EFI_IP4_CONFIG2_POLICY),
+ &Policy
+ );
+ if (EFI_ERROR (Status)) {
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");
+ ShellStatus = SHELL_ACCESS_DENIED;
+ break;
+ }
+ }
+
+ Policy = Ip4Config2PolicyDhcp;
Status = IfCb->IfCfg->SetData (
IfCb->IfCfg,
@@ -1143,7 +1164,7 @@ IfConfig (
break;
case IfConfigOpClear:
- ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList);
+ ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList, Private->IfName);
break;
case IfConfigOpSet: