Re: [edk2] [PATCH 2/2] ShellPkg/Ifconfig: Enable setting MAC address
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
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
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" "