1 /** @file
2   Translate the host name into an IP address
3 
4   Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials are licensed and made available under
6   the terms and conditions of the BSD License that accompanies this distribution.
7   The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php.
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 #include <errno.h>
14 #include <netdb.h>
15 #include <string.h>
16 #include <Uefi.h>
17 #include <unistd.h>
18 
19 #include <Library/DebugLib.h>
20 #include <Library/UefiLib.h>
21 
22 #include <sys/socket.h>
23 
24 char mBuffer[65536];
25 
26 
27 /** Translate the host name into an IP address
28 
29   @param[in]  Argc  The number of arguments
30   @param[in]  Argv  The argument value array
31 
32   @retval  0        The application exited normally.
33   @retval  Other    An error occurred.
34 **/
35 int
main(IN int Argc,IN char ** Argv)36 main (
37   IN int Argc,
38   IN char **Argv
39   )
40 {
41   UINTN Index;
42   struct hostent * pHost;
43   UINT8 * pIpAddress;
44   char ** ppName;
45 
46   DEBUG (( DEBUG_INFO,
47             "%a starting\r\n",
48             Argv[0]));
49 
50   //  Determine if the host name is specified
51   if ( 1 == Argc ) {
52     Print ( L"%a  <host name>\r\n", Argv[0]);
53   }
54   else {
55     //  Translate the host name
56     pHost = gethostbyname ( Argv[1]);
57     if ( NULL == pHost ) {
58       Print ( L"ERROR - host not found, h_errno: %d\r\n", h_errno );
59     }
60     else {
61       pIpAddress = (UINT8 *)pHost->h_addr;
62       Print ( L"%d.%d.%d.%d, Type %d, %a\r\n",
63               pIpAddress[0],
64               pIpAddress[1],
65               pIpAddress[2],
66               pIpAddress[3],
67               pHost->h_addrtype,
68               pHost->h_name );
69 
70       //  Display the other addresses
71       for ( Index = 1; NULL != pHost->h_addr_list[Index]; Index++ ) {
72         pIpAddress = (UINT8 *)pHost->h_addr_list[Index];
73         Print ( L"%d.%d.%d.%d\r\n",
74                 pIpAddress[0],
75                 pIpAddress[1],
76                 pIpAddress[2],
77                 pIpAddress[3]);
78       }
79 
80       //  Display the list of aliases
81       ppName = pHost->h_aliases;
82       if (( NULL == ppName ) || ( NULL == *ppName )) {
83         Print ( L"No aliases\r\n" );
84       }
85       else {
86         Print ( L"Aliases: " );
87         while ( NULL != *ppName ) {
88           //
89           //  Display the alias
90           //
91           Print ( L"%a", *ppName );
92 
93           //
94           //  Set the next alias
95           //
96           ppName += 1;
97           if ( NULL != *ppName ) {
98             Print ( L", " );
99           }
100         }
101         Print ( L"\r\n" );
102       }
103     }
104   }
105   //  All done
106   return errno;
107 }
108