Home | History | Annotate | Download | only in Ebl
      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
     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
     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
    100 EblInitializeNetworkCmd (
    101   VOID
    102   )
    103 {
    104   EblAddCommands (mCmdNetworkTemplate, sizeof (mCmdNetworkTemplate)/sizeof (EBL_COMMAND_TABLE));
    105 }
    106 
    107