add a new command, ifconfig.

This commit is contained in:
okuji 2001-01-11 08:08:15 +00:00
parent 1b97631a73
commit 7519621c59
6 changed files with 119 additions and 0 deletions

View file

@ -1,3 +1,13 @@
2001-01-11 Eugene Doudine <dudin@np.nk.nornik.ru>
* stage2/builtins.c [SUPPORT_NETBOOT] (ifconfig_func): New
function to configure network interface from command line.
[SUPPORT_NETBOOT] (builtin_ifconfig): New variable.
[SUPPORT_NETBOOT] (builtin_table): Added a pointer to
BUILTIN_IFCONFIG.
* netboot/main.c (ifconfig): New function.
* netboot/etherboot.h (ifconfig): Added the prototype.
2001-01-11 OKUJI Yoshinori <okuji@gnu.org>
* docs/Makefile.am [BUILD_EXAMPLE_KERNEL] (noinst_DATA): New

1
NEWS
View file

@ -23,6 +23,7 @@ New in 1.0 - XXXX-XX-XX:
* Booting Windows from a logical partition is supported.
* The example Multiboot kernel in the directory "docs" is built, if you
specify the option `--enable-example-kernel' to the configure script.
* New command, "ifconfig".
New in 0.5.96 - 2000-10-04:
* New commands, "reboot" and "halt".

1
THANKS
View file

@ -22,6 +22,7 @@ Edmund GRIMLEY EVANS <edmundo@rano.demon.co.uk>
Edward Killips <ekillips@triton.net>
Eric Hanchrow <erich@microsoft.com>
Erik Schoenfelder <schoenfr@gaertner.de>
Eugene Doudine <dudin@np.nk.nornik.ru>
Frank Mehnert <fm3@os.inf.tu-dresden.de>
Goran Koruga <goran.koruga@hermes.si>
Hal Snyder <hal@vailsys.com>

View file

@ -462,6 +462,7 @@ External prototypes
#ifdef GRUB
extern void print_network_configuration P((void));
extern int arp_server_override P((const char *buf));
extern int ifconfig P((char *ip, char *sm, char *gw, char *svr));
#endif /* GRUB */
#ifndef GRUB

View file

@ -206,6 +206,49 @@ default_netmask (void)
return (htonl (0xffffff00));
}
/* ifconfig - configure network interface. */
int
ifconfig (char *ip, char *sm, char *gw, char *svr)
{
in_addr tmp;
if (sm)
{
if (! inet_aton (sm, &tmp))
return 0;
netmask = tmp.s_addr;
}
if (ip)
{
if (! inet_aton (ip, &arptable[ARP_CLIENT].ipaddr))
return 0;
if (! netmask && ! sm)
netmask = default_netmask ();
}
if (gw && ! inet_aton (gw, &arptable[ARP_GATEWAY].ipaddr))
return 0;
if (svr && ! inet_aton (svr, &arptable[ARP_SERVER].ipaddr))
return 0;
if (ip || sm)
{
if (IP_BROADCAST == (netmask | arptable[ARP_CLIENT].ipaddr.s_addr)
|| netmask == (netmask | arptable[ARP_CLIENT].ipaddr.s_addr)
|| ! netmask)
network_ready = 0;
else
network_ready = 1;
}
return 1;
}
/**************************************************************************
UDP_TRANSMIT - Send a UDP datagram
**************************************************************************/

View file

@ -1516,6 +1516,66 @@ static struct builtin builtin_hide =
" its partition type code."
};
#ifdef SUPPORT_NETBOOT
/* ifconfig */
static int
ifconfig_func (char *arg, int flags)
{
char *svr = 0, *ip = 0, *gw = 0, *sm = 0;
if (! eth_probe ())
{
grub_printf ("No ethernet card found.\n");
errnum = ERR_DEV_VALUES;
return 1;
}
if (! *arg)
{
print_network_configuration ();
return 0;
}
while (*arg)
{
if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1))
svr = arg + sizeof("--server=") - 1;
else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1))
ip = arg + sizeof ("--address=") - 1;
else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1))
gw = arg + sizeof ("--gateway=") - 1;
else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1))
sm = arg + sizeof ("--mask=") - 1;
else
{
errnum = ERR_BAD_ARGUMENT;
return 1;
}
arg = skip_to (0, arg);
}
if (! ifconfig (ip, sm, gw, svr))
{
errnum = ERR_BAD_ARGUMENT;
return 1;
}
return 0;
}
static struct builtin builtin_ifconfig =
{
"ifconfig",
ifconfig_func,
BUILTIN_CMDLINE | BUILTIN_MENU,
"ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]",
"Configure the IP address, the netmask, the gateway and the server"
" address or print current network configuration."
};
#endif /* SUPPORT_NETBOOT */
/* impsprobe */
static int
@ -4349,6 +4409,9 @@ struct builtin *builtin_table[] =
&builtin_help,
&builtin_hiddenmenu,
&builtin_hide,
#ifdef SUPPORT_NETBOOT
&builtin_ifconfig,
#endif /* SUPPORT_NETBOOT */
&builtin_impsprobe,
&builtin_initrd,
&builtin_install,