1 /** @file
2   EBL commands for Network Devices
3 
4   Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
5   (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
6 
7   This program and the accompanying materials
8   are licensed and made available under the terms and conditions of the BSD License
9   which accompanies this distribution.  The full text of the license may be found at
10   http://opensource.org/licenses/bsd-license.php
11 
12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 
15 **/
16 
17 #include "Ebl.h"
18 
19 EFI_STATUS
ParseIp(IN CHAR8 * String,OUT EFI_IP_ADDRESS * Address)20 ParseIp (
21   IN  CHAR8           *String,
22   OUT EFI_IP_ADDRESS  *Address
23   )
24 {
25   Address->v4.Addr[0] = (UINT8)AsciiStrDecimalToUintn (String);
26   String = AsciiStrStr(String, ".") + 1;
27   Address->v4.Addr[1] = (UINT8)AsciiStrDecimalToUintn (String);
28   String = AsciiStrStr(String, ".") + 1;
29   Address->v4.Addr[2] = (UINT8)AsciiStrDecimalToUintn (String);
30   String = AsciiStrStr(String, ".") + 1;
31   Address->v4.Addr[3] = (UINT8)AsciiStrDecimalToUintn (String);
32 
33   return EFI_SUCCESS;
34 }
35 
36 EFI_STATUS
37 EFIAPI
EblIpCmd(IN UINTN Argc,IN CHAR8 ** Argv)38 EblIpCmd (
39   IN UINTN  Argc,
40   IN CHAR8  **Argv
41   )
42 {
43   EFI_STATUS        Status = EFI_INVALID_PARAMETER;
44   EFI_MAC_ADDRESS   Mac;
45   EFI_IP_ADDRESS    Ip;
46 
47   if (Argc == 1) {
48     // Get current IP/MAC
49 
50     // Get current MAC address
51     Status = EblGetCurrentMacAddress (&Mac);
52     if (EFI_ERROR (Status)) {
53       goto Exit;
54     }
55 
56     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]);
57 
58     // Get current IP address
59     Status = EblGetCurrentIpAddress (&Ip);
60     if (EFI_ERROR(Status)) {
61       AsciiPrint("IP Address is not configured.\n");
62       Status = EFI_SUCCESS;
63       goto Exit;
64     }
65 
66     AsciiPrint("IP Address:   %d.%d.%d.%d\n", Ip.v4.Addr[0], Ip.v4.Addr[1],Ip.v4.Addr[2], Ip.v4.Addr[3]);
67 
68   } else if ((Argv[1][0] == 'r') && (Argc == 2)) {
69     // Get new address via dhcp
70     Status = EblPerformDHCP (TRUE);
71   } else if ((Argv[1][0] == 's') && (Argc == 3)) {
72     // Set static IP
73     Status = ParseIp (Argv[2], &Ip);
74     if (EFI_ERROR (Status)) {
75       goto Exit;
76     }
77 
78     Status = EblSetStationIp (&Ip, NULL);
79   }
80 
81 Exit:
82   return Status;
83 }
84 
85 GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdNetworkTemplate[] =
86 {
87   {
88     "ip",
89     " ; print current ip address\n\r   [r]; request DHCP address\n\r   [s] ipaddr; set static IP address",
90     NULL,
91     EblIpCmd
92   }
93 };
94 
95 
96 /**
97   Initialize the commands in this in this file
98 **/
99 VOID
EblInitializeNetworkCmd(VOID)100 EblInitializeNetworkCmd (
101   VOID
102   )
103 {
104   EblAddCommands (mCmdNetworkTemplate, sizeof (mCmdNetworkTemplate)/sizeof (EBL_COMMAND_TABLE));
105 }
106 
107