Re: [edk2] [PATCH 2/2] ShellPkg/Ifconfig: Enable setting MAC address

2016-11-07 Thread Marcin Wojtas
Hi Jaben,

2016-11-04 21:38 GMT+01:00 Carsey, Jaben :
> I think this is a good idea. But I see 2 issues.
> 1 - ifconfig standard parameters are controlled by the UEFI Shell 
> Specification.  If you want to extend the parameters you need to use 
> parameters that start with underscore.  I do not quite know how to so this 
> under the "-s" set of functions for this command.  Maybe just add this 
> separate from "-s", using something like "-_mac"?

No, problem. Since this will be an additional parameter in
mIfConfig[6]CheckList, and all consist of single letter, I propose
"-_m". Is it ok?

> 2 - whatever change is done here should also be done to the ipv6 version of 
> the command.
>

Ok, I can see it should be not much than simple copy-paste.

Best regards,
Marcin
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [PATCH 2/2] ShellPkg/Ifconfig: Enable setting MAC address

2016-11-04 Thread Carsey, Jaben
I think this is a good idea. But I see 2 issues.  
1 - ifconfig standard parameters are controlled by the UEFI Shell 
Specification.  If you want to extend the parameters you need to use parameters 
that start with underscore.  I do not quite know how to so this under the "-s" 
set of functions for this command.  Maybe just add this separate from "-s", 
using something like "-_mac"?
2 - whatever change is done here should also be done to the ipv6 version of the 
command.

-Jaben


> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Marcin Wojtas
> Sent: Friday, November 04, 2016 11:29 AM
> To: edk2-devel@lists.01.org
> Cc: Tian, Feng <feng.t...@intel.com>; leif.lindh...@linaro.org; Gao, Liming
> <liming@intel.com>; Kinney, Michael D <michael.d.kin...@intel.com>
> Subject: [edk2] [PATCH 2/2] ShellPkg/Ifconfig: Enable setting MAC address
> Importance: High
> 
> This adds new feature to ifconfig shell command, which allow
> for updating MAC address of the interface or resetting it to the
> initial value.
> 
> It consumes newly added NetLib helpers for parsing the Unicode
> string to EFI_MAC_ADDRESS, calling Snp->StationAddress() callback
> and reconnecting controller, so that all interface's children
> devices could get updated with new value of the MAC address.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Marcin Wojtas <m...@semihalf.com>
> ---
>  .../UefiShellNetwork1CommandsLib/Ifconfig.c| 54
> ++
>  .../UefiShellNetwork1CommandsLib.uni   | 12 -
>  2 files changed, 64 insertions(+), 2 deletions(-)
> 
> diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
> b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
> index 5e243d5..e4ea308 100644
> --- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
> +++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
> @@ -120,6 +120,12 @@ VAR_CHECK_ITEM  mSetCheckList[] = {
>  FlagTypeSingle
>},
>{
> +L"mac",
> +0x0010,
> +0x0005,
> +FlagTypeSingle
> +  },
> +  {
>  NULL,
>  0x0,
>  0x0,
> @@ -832,6 +838,7 @@ IfConfigSetInterfaceInfo (
>EFI_EVENTTimeOutEvt;
>EFI_EVENTMappedEvt;
>BOOLEAN  IsAddressOk;
> +  BOOLEAN  MacAddressReset;
> 
>EFI_IP4_CONFIG2_POLICY   Policy;
>EFI_IP4_CONFIG2_MANUAL_ADDRESS   ManualAddress;
> @@ -840,6 +847,7 @@ IfConfigSetInterfaceInfo (
>EFI_IPv4_ADDRESS *Dns;
>ARG_LIST *Tmp;
>UINTNIndex;
> +  EFI_MAC_ADDRESS  NewMac;
> 
>CONST CHAR16* TempString;
> 
> @@ -1150,6 +1158,52 @@ IfConfigSetInterfaceInfo (
>  ShellStatus = SHELL_ACCESS_DENIED;
>  goto ON_EXIT;
>}
> +} else if (StrCmp (VarArg->Arg, L"mac") == 0) {
> +  //
> +  // Set MAC address.
> +  //
> +  MacAddressReset = FALSE;
> +  VarArg = VarArg->Next;
> +  if (VarArg == NULL) {
> +ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);
> +ShellStatus = SHELL_INVALID_PARAMETER;
> +goto ON_EXIT;
> +  }
> +
> +  if (StrCmp (VarArg->Arg, L"reset") == 0) {
> +MacAddressReset = TRUE;
> +  } else {
> +Status = NetLibStrToMac (VarArg->Arg, );
> +if (EFI_ERROR(Status)) {
> +  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN
> (STR_IFCONFIG_INVALID_MACADDRESS), gShellNetwork1HiiHandle, VarArg-
> >Arg);
> +  ShellStatus = SHELL_INVALID_PARAMETER;
> +  goto ON_EXIT;
> +}
> +  }
> +
> +  Status = NetLibSetMacAddress (
> +  IfCb->NicHandle,
> +  ,
> +  IfCb->IfInfo->HwAddressSize,
> +  MacAddressReset
> +  );
> +  if (EFI_ERROR(Status)) {
> +ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);
> +ShellStatus = SHELL_ACCESS_DENIED;
> +goto ON_EXIT;
> +  }
> +
> +  //
> +  // Reconnect controller, so that all children get updated with
> +  // new MAC address information.
> +  //
> +  Status = NetLibReconnectInterface (IfCb->NicHandle);
> +  if (EFI_ERROR(Status)) {
> +ShellStatus = SHELL_DEVICE_ERROR;
> +  

[edk2] [PATCH 2/2] ShellPkg/Ifconfig: Enable setting MAC address

2016-11-04 Thread Marcin Wojtas
This adds new feature to ifconfig shell command, which allow
for updating MAC address of the interface or resetting it to the
initial value.

It consumes newly added NetLib helpers for parsing the Unicode
string to EFI_MAC_ADDRESS, calling Snp->StationAddress() callback
and reconnecting controller, so that all interface's children
devices could get updated with new value of the MAC address.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Marcin Wojtas 
---
 .../UefiShellNetwork1CommandsLib/Ifconfig.c| 54 ++
 .../UefiShellNetwork1CommandsLib.uni   | 12 -
 2 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
index 5e243d5..e4ea308 100644
--- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
+++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
@@ -120,6 +120,12 @@ VAR_CHECK_ITEM  mSetCheckList[] = {
 FlagTypeSingle
   },
   {
+L"mac",
+0x0010,
+0x0005,
+FlagTypeSingle
+  },
+  {
 NULL,
 0x0,
 0x0,
@@ -832,6 +838,7 @@ IfConfigSetInterfaceInfo (
   EFI_EVENTTimeOutEvt;
   EFI_EVENTMappedEvt;
   BOOLEAN  IsAddressOk;
+  BOOLEAN  MacAddressReset;
 
   EFI_IP4_CONFIG2_POLICY   Policy;
   EFI_IP4_CONFIG2_MANUAL_ADDRESS   ManualAddress;
@@ -840,6 +847,7 @@ IfConfigSetInterfaceInfo (
   EFI_IPv4_ADDRESS *Dns;
   ARG_LIST *Tmp;
   UINTNIndex;
+  EFI_MAC_ADDRESS  NewMac;
 
   CONST CHAR16* TempString;
 
@@ -1150,6 +1158,52 @@ IfConfigSetInterfaceInfo (
 ShellStatus = SHELL_ACCESS_DENIED;
 goto ON_EXIT;
   }
+} else if (StrCmp (VarArg->Arg, L"mac") == 0) {
+  //
+  // Set MAC address.
+  //
+  MacAddressReset = FALSE;
+  VarArg = VarArg->Next;
+  if (VarArg == NULL) {
+ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);
+ShellStatus = SHELL_INVALID_PARAMETER;
+goto ON_EXIT;
+  }
+
+  if (StrCmp (VarArg->Arg, L"reset") == 0) {
+MacAddressReset = TRUE;
+  } else {
+Status = NetLibStrToMac (VarArg->Arg, );
+if (EFI_ERROR(Status)) {
+  ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN 
(STR_IFCONFIG_INVALID_MACADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);
+  ShellStatus = SHELL_INVALID_PARAMETER;
+  goto ON_EXIT;
+}
+  }
+
+  Status = NetLibSetMacAddress (
+  IfCb->NicHandle,
+  ,
+  IfCb->IfInfo->HwAddressSize,
+  MacAddressReset
+  );
+  if (EFI_ERROR(Status)) {
+ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);
+ShellStatus = SHELL_ACCESS_DENIED;
+goto ON_EXIT;
+  }
+
+  //
+  // Reconnect controller, so that all children get updated with
+  // new MAC address information.
+  //
+  Status = NetLibReconnectInterface (IfCb->NicHandle);
+  if (EFI_ERROR(Status)) {
+ShellStatus = SHELL_DEVICE_ERROR;
+goto ON_EXIT;
+  }
+
+  VarArg = VarArg->Next;
 }
   }
 
diff --git 
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
index 76b6188..ffc358d 100644
--- 
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
+++ 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
@@ -66,6 +66,7 @@
 #string STR_IFCONFIG_LACK_COMMAND #language en-US"Lack 
interface config option.\n"
 #string STR_IFCONFIG_INVALID_INTERFACE#language en-US"Invalid 
interface name.\n"
 #string STR_IFCONFIG_INVALID_IPADDRESS#language en-US"Invalid ipv4 
address: '%H%s%N'\n"
+#string STR_IFCONFIG_INVALID_MACADDRESS   #language en-US"Invalid MAC 
address: '%H%s%N'\n"
 #string STR_IFCONFIG_DUPLICATE_COMMAND#language en-US"Duplicate 
commands. Bad command %H%s%N is skipped.\n"
 #string STR_IFCONFIG_CONFLICT_COMMAND #language en-US"Conflict 
commands. Bad command %H%s%N is skipped.\n"
 #string STR_IFCONFIG_UNKNOWN_COMMAND  #language en-US"Unknown 
commands. Bad command %H%s%N is skipped.\n"
@@ -133,7 +134,7 @@
 ".SH SYNOPSIS\r\n"
 " \r\n"
 "IFCONFIG [-r [Name]] [-l [Name]]\r\n"
-"IFCONFIG [-s  dhcp |> | >]\r\n"
+"IFCONFIG [-s  dhcp |> | > | 
 | >]\r\n"
 ".SH OPTIONS\r\n"
 " \r\n"
 "  -r  - Renew configuration of interface and set dhcp policy.\r\n"
@@ -146,6 +147,8 @@
 "  - Example: 255.255.255.0\r\n"
 "