add a new command tftpserver.

This commit is contained in:
okuji 2000-05-29 08:59:38 +00:00
parent 83038ffbbc
commit 7ca6bf9d91
6 changed files with 62 additions and 4 deletions

View file

@ -1,3 +1,14 @@
2000-05-29 OKUJI Yoshinori <okuji@gnu.org>
Based on a patch by Neal H Walfield <neal@walfield.org>:
* netboot/misc.c [GRUB] (inet_aton): Defined.
* netboot/main.c (arp_server_override): New function.
* netboot/etherboot.h [GRUB] (arp_server_override): Declared.
(inet_aton): Likewise.
* stage2/builtins.c (tftpserver_func): New function.
(builtin_tftpserver): New variable.
(builtin_table): Added a pointer to BUILTIN_TFTPSERVER.
2000-05-28 OKUJI Yoshinori <okuji@gnu.org> 2000-05-28 OKUJI Yoshinori <okuji@gnu.org>
* stage2/asm.S (codestart): Fix a typo: DISKLESS_SUPPORT -> * stage2/asm.S (codestart): Fix a typo: DISKLESS_SUPPORT ->

2
NEWS
View file

@ -35,6 +35,8 @@ New in 0.5.95 - XXXX-XX-XX:
and "make" will produce two additional images, ``nbgrub'' for Net Boot and "make" will produce two additional images, ``nbgrub'' for Net Boot
Image Proposal and ``pxegrub'' for Preboot Execution Environment. See Image Proposal and ``pxegrub'' for Preboot Execution Environment. See
the documentation, for more details. the documentation, for more details.
* The command "tftpserver" overrides a TFTP server address returned by a
BOOTP server, a DHCP server or a RARP server.
New in 0.5.94 - 2000-03-06: New in 0.5.94 - 2000-03-06:
* Stage 1 supports both the LBA mode and the CHS mode. * Stage 1 supports both the LBA mode and the CHS mode.

View file

@ -457,6 +457,7 @@ External prototypes
/* main.c */ /* main.c */
#ifdef GRUB #ifdef GRUB
extern void print_network_configuration P((void)); extern void print_network_configuration P((void));
extern int arp_server_override P((const char *buf));
#endif /* GRUB */ #endif /* GRUB */
#ifndef GRUB #ifndef GRUB
@ -517,7 +518,9 @@ extern int getdec P((char **));
#ifndef GRUB #ifndef GRUB
extern void printf P((const char *, ...)); extern void printf P((const char *, ...));
extern char *sprintf P((char *, const char *, ...)); extern char *sprintf P((char *, const char *, ...));
#endif /* ! GRUB */
extern int inet_aton P((char *p, in_addr *i)); extern int inet_aton P((char *p, in_addr *i));
#ifndef GRUB
extern void gateA20_set P((void)); extern void gateA20_set P((void));
extern void gateA20_unset P((void)); extern void gateA20_unset P((void));
extern void putchar P((int)); extern void putchar P((int));

View file

@ -167,6 +167,19 @@ print_network_configuration (void)
} }
} }
/* Override the server IP address. */
int
arp_server_override (const char *buffer)
{
in_addr in;
if (! inet_aton ((char *) buffer, &in))
return 0;
arptable[ARP_SERVER].ipaddr.s_addr = in.s_addr;
return 1;
}
/************************************************************************** /**************************************************************************
DEFAULT_NETMASK - Return default netmask for IP address DEFAULT_NETMASK - Return default netmask for IP address
**************************************************************************/ **************************************************************************/

View file

@ -159,8 +159,9 @@ void printf(const char *fmt, ...)
do_printf(buf, fmt, ((const int *)&fmt)+1); do_printf(buf, fmt, ((const int *)&fmt)+1);
while (*p) putchar(*p++); while (*p) putchar(*p++);
} }
#endif /* ! GRUB */
#ifdef IMAGE_MENU #if defined(IMAGE_MENU) || defined(GRUB)
/************************************************************************** /**************************************************************************
INET_ATON - Convert an ascii x.x.x.x to binary form INET_ATON - Convert an ascii x.x.x.x to binary form
**************************************************************************/ **************************************************************************/
@ -184,9 +185,7 @@ int inet_aton(char *p, in_addr *i)
i->s_addr = htonl((ip << 8) | val); i->s_addr = htonl((ip << 8) | val);
return(1); return(1);
} }
#endif /* IMAGE_MENU || GRUB */
#endif /* IMAGE_MENU */
#endif /* ! GRUB */
int getdec(char **ptr) int getdec(char **ptr)
{ {

View file

@ -2943,6 +2943,35 @@ static struct builtin builtin_testload =
" step is to try loading a kernel." " step is to try loading a kernel."
}; };
/* tftpserver */
static int
tftpserver_func (char *arg, int flags)
{
#ifdef SUPPORT_NETBOOT
if (! *arg || ! arp_server_override (arg))
{
errnum = ERR_BAD_ARGUMENT;
return 1;
}
print_network_configuration ();
return 0;
#else
errnum = ERR_UNRECOGNIZED;
return 1;
#endif
}
static struct builtin builtin_tftpserver =
{
"tftpserver",
tftpserver_func,
BUILTIN_CMDLINE | BUILTIN_MENU,
"tftpserver IPADDR",
"Override the TFTP server address."
};
/* timeout */ /* timeout */
static int static int
@ -3077,6 +3106,7 @@ struct builtin *builtin_table[] =
&builtin_setkey, &builtin_setkey,
&builtin_setup, &builtin_setup,
&builtin_testload, &builtin_testload,
&builtin_tftpserver,
&builtin_timeout, &builtin_timeout,
&builtin_title, &builtin_title,
&builtin_unhide, &builtin_unhide,