From 47d5d01a45d64d231fb856a9cdfecf5d567371e6 Mon Sep 17 00:00:00 2001 From: ths Date: Tue, 20 Feb 2007 00:05:08 +0000 Subject: [PATCH] Add -bootp option for slirp, by Anthony Liguori. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2439 c046a42c-6fe2-441c-8c8c-71466251a162 --- qemu-doc.texi | 10 ++++++++++ slirp/bootp.c | 6 ++++++ vl.c | 6 ++++++ vl.h | 1 + 4 files changed, 23 insertions(+) diff --git a/qemu-doc.texi b/qemu-doc.texi index 00b28a6d47..b23b03377a 100644 --- a/qemu-doc.texi +++ b/qemu-doc.texi @@ -452,6 +452,16 @@ guest must be configured in binary mode (use the command @code{bin} of the Unix TFTP client). The host IP address on the guest is as usual 10.0.2.2. +@item -bootp file +When using the user mode network stack, broadcast @var{file} as the BOOTP +filename. In conjunction with @option{-tftp}, this can be used to network boot +a guest from a local directory. + +Example (using pxelinux): +@example +qemu -hda linux.img -boot n -tftp /path/to/tftp/files -bootp /pxelinux.0 +@end example + @item -smb dir When using the user mode network stack, activate a built-in SMB server so that Windows OSes can access to the host files in @file{dir} diff --git a/slirp/bootp.c b/slirp/bootp.c index 62cbcfd8f3..9d243a705a 100644 --- a/slirp/bootp.c +++ b/slirp/bootp.c @@ -38,6 +38,8 @@ typedef struct { BOOTPClient bootp_clients[NB_ADDR]; +const char *bootp_filename; + static const uint8_t rfc1533_cookie[] = { RFC1533_COOKIE }; #ifdef DEBUG @@ -168,6 +170,10 @@ static void bootp_reply(struct bootp_t *bp) goto new_addr; } } + + if (bootp_filename) + snprintf(rbp->bp_file, sizeof(rbp->bp_file), "%s", bootp_filename); + dprintf("offered addr=%08x\n", ntohl(daddr.sin_addr.s_addr)); saddr.sin_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS); diff --git a/vl.c b/vl.c index 28d8eb34db..fd944e0488 100644 --- a/vl.c +++ b/vl.c @@ -6403,6 +6403,7 @@ void help(void) "\n" #ifdef CONFIG_SLIRP "-tftp prefix allow tftp access to files starting with prefix [-net user]\n" + "-bootp file advertise file in BOOTP replies\n" #ifndef _WIN32 "-smb dir allow SMB access to files in 'dir' [-net user]\n" #endif @@ -6491,6 +6492,7 @@ enum { QEMU_OPTION_net, QEMU_OPTION_tftp, + QEMU_OPTION_bootp, QEMU_OPTION_smb, QEMU_OPTION_redir, @@ -6567,6 +6569,7 @@ const QEMUOption qemu_options[] = { { "net", HAS_ARG, QEMU_OPTION_net}, #ifdef CONFIG_SLIRP { "tftp", HAS_ARG, QEMU_OPTION_tftp }, + { "bootp", HAS_ARG, QEMU_OPTION_bootp }, #ifndef _WIN32 { "smb", HAS_ARG, QEMU_OPTION_smb }, #endif @@ -7085,6 +7088,9 @@ int main(int argc, char **argv) case QEMU_OPTION_tftp: tftp_prefix = optarg; break; + case QEMU_OPTION_bootp: + bootp_filename = optarg; + break; #ifndef _WIN32 case QEMU_OPTION_smb: net_slirp_smb(optarg); diff --git a/vl.h b/vl.h index 005ff13300..c6d305c1a1 100644 --- a/vl.h +++ b/vl.h @@ -159,6 +159,7 @@ extern int smp_cpus; extern int no_quit; extern int semihosting_enabled; extern int autostart; +extern const char *bootp_filename; #define MAX_OPTION_ROMS 16 extern const char *option_rom[MAX_OPTION_ROMS]; -- 2.39.2