mirror of https://github.com/acidanthera/audk.git
105 lines
2.7 KiB
C
105 lines
2.7 KiB
C
|
/** @file
|
||
|
EBL commands for Network Devices
|
||
|
|
||
|
Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||
|
|
||
|
All rights reserved. This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
**/
|
||
|
|
||
|
#include "Ebl.h"
|
||
|
|
||
|
EFI_STATUS
|
||
|
ParseIp (
|
||
|
IN CHAR8 *String,
|
||
|
OUT EFI_IP_ADDRESS *Address
|
||
|
)
|
||
|
{
|
||
|
Address->v4.Addr[0] = AsciiStrDecimalToUintn(String);
|
||
|
String = AsciiStrStr(String, ".") + 1;
|
||
|
Address->v4.Addr[1] = AsciiStrDecimalToUintn(String);
|
||
|
String = AsciiStrStr(String, ".") + 1;
|
||
|
Address->v4.Addr[2] = AsciiStrDecimalToUintn(String);
|
||
|
String = AsciiStrStr(String, ".") + 1;
|
||
|
Address->v4.Addr[3] = AsciiStrDecimalToUintn(String);
|
||
|
|
||
|
return EFI_SUCCESS;
|
||
|
}
|
||
|
|
||
|
EFI_STATUS
|
||
|
EblIpCmd (
|
||
|
IN UINTN Argc,
|
||
|
IN CHAR8 **Argv
|
||
|
)
|
||
|
{
|
||
|
EFI_STATUS Status = EFI_INVALID_PARAMETER;
|
||
|
EFI_MAC_ADDRESS Mac;
|
||
|
EFI_IP_ADDRESS Ip;
|
||
|
|
||
|
if (Argc == 1) {
|
||
|
// Get current IP/MAC
|
||
|
|
||
|
// Get current MAC address
|
||
|
Status = EblGetCurrentMacAddress (&Mac);
|
||
|
if (EFI_ERROR (Status)) {
|
||
|
goto Exit;
|
||
|
}
|
||
|
|
||
|
AsciiPrint ("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", Mac.Addr[0], Mac.Addr[1], Mac.Addr[2], Mac.Addr[3], Mac.Addr[4], Mac.Addr[5]);
|
||
|
|
||
|
// Get current IP address
|
||
|
Status = EblGetCurrentIpAddress (&Ip);
|
||
|
if (EFI_ERROR(Status)) {
|
||
|
AsciiPrint("IP Address is not configured.\n");
|
||
|
Status = EFI_SUCCESS;
|
||
|
goto Exit;
|
||
|
}
|
||
|
|
||
|
AsciiPrint("IP Address: %d.%d.%d.%d\n", Ip.v4.Addr[0], Ip.v4.Addr[1],Ip.v4.Addr[2], Ip.v4.Addr[3]);
|
||
|
|
||
|
} else if ((Argv[1][0] == 'r') && (Argc == 2)) {
|
||
|
// Get new address via dhcp
|
||
|
Status = EblPerformDHCP (TRUE);
|
||
|
} else if ((Argv[1][0] == 's') && (Argc == 3)) {
|
||
|
// Set static IP
|
||
|
Status = ParseIp (Argv[2], &Ip);
|
||
|
if (EFI_ERROR (Status)) {
|
||
|
goto Exit;
|
||
|
}
|
||
|
|
||
|
Status = EblSetStationIp (&Ip, NULL);
|
||
|
}
|
||
|
|
||
|
Exit:
|
||
|
return Status;
|
||
|
}
|
||
|
|
||
|
GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdNetworkTemplate[] =
|
||
|
{
|
||
|
{
|
||
|
"ip",
|
||
|
" ; print current ip address\n\r [r]; request DHCP address\n\r [s] ipaddr; set static IP address",
|
||
|
NULL,
|
||
|
EblIpCmd
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
Initialize the commands in this in this file
|
||
|
**/
|
||
|
VOID
|
||
|
EblInitializeNetworkCmd (
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
EblAddCommands (mCmdNetworkTemplate, sizeof (mCmdNetworkTemplate)/sizeof (EBL_COMMAND_TABLE));
|
||
|
}
|
||
|
|