Commit 47d5d01a45d64d231fb856a9cdfecf5d567371e6

Authored by ths
1 parent 5f189496

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
... ... @@ -452,6 +452,16 @@ guest must be configured in binary mode (use the command @code{bin} of
452 452 the Unix TFTP client). The host IP address on the guest is as usual
453 453 10.0.2.2.
454 454  
  455 +@item -bootp file
  456 +When using the user mode network stack, broadcast @var{file} as the BOOTP
  457 +filename. In conjunction with @option{-tftp}, this can be used to network boot
  458 +a guest from a local directory.
  459 +
  460 +Example (using pxelinux):
  461 +@example
  462 +qemu -hda linux.img -boot n -tftp /path/to/tftp/files -bootp /pxelinux.0
  463 +@end example
  464 +
455 465 @item -smb dir
456 466 When using the user mode network stack, activate a built-in SMB
457 467 server so that Windows OSes can access to the host files in @file{dir}
... ...
slirp/bootp.c
... ... @@ -38,6 +38,8 @@ typedef struct {
38 38  
39 39 BOOTPClient bootp_clients[NB_ADDR];
40 40  
  41 +const char *bootp_filename;
  42 +
41 43 static const uint8_t rfc1533_cookie[] = { RFC1533_COOKIE };
42 44  
43 45 #ifdef DEBUG
... ... @@ -168,6 +170,10 @@ static void bootp_reply(struct bootp_t *bp)
168 170 goto new_addr;
169 171 }
170 172 }
  173 +
  174 + if (bootp_filename)
  175 + snprintf(rbp->bp_file, sizeof(rbp->bp_file), "%s", bootp_filename);
  176 +
171 177 dprintf("offered addr=%08x\n", ntohl(daddr.sin_addr.s_addr));
172 178  
173 179 saddr.sin_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
... ...
... ... @@ -6403,6 +6403,7 @@ void help(void)
6403 6403 "\n"
6404 6404 #ifdef CONFIG_SLIRP
6405 6405 "-tftp prefix allow tftp access to files starting with prefix [-net user]\n"
  6406 + "-bootp file advertise file in BOOTP replies\n"
6406 6407 #ifndef _WIN32
6407 6408 "-smb dir allow SMB access to files in 'dir' [-net user]\n"
6408 6409 #endif
... ... @@ -6491,6 +6492,7 @@ enum {
6491 6492  
6492 6493 QEMU_OPTION_net,
6493 6494 QEMU_OPTION_tftp,
  6495 + QEMU_OPTION_bootp,
6494 6496 QEMU_OPTION_smb,
6495 6497 QEMU_OPTION_redir,
6496 6498  
... ... @@ -6567,6 +6569,7 @@ const QEMUOption qemu_options[] = {
6567 6569 { "net", HAS_ARG, QEMU_OPTION_net},
6568 6570 #ifdef CONFIG_SLIRP
6569 6571 { "tftp", HAS_ARG, QEMU_OPTION_tftp },
  6572 + { "bootp", HAS_ARG, QEMU_OPTION_bootp },
6570 6573 #ifndef _WIN32
6571 6574 { "smb", HAS_ARG, QEMU_OPTION_smb },
6572 6575 #endif
... ... @@ -7085,6 +7088,9 @@ int main(int argc, char **argv)
7085 7088 case QEMU_OPTION_tftp:
7086 7089 tftp_prefix = optarg;
7087 7090 break;
  7091 + case QEMU_OPTION_bootp:
  7092 + bootp_filename = optarg;
  7093 + break;
7088 7094 #ifndef _WIN32
7089 7095 case QEMU_OPTION_smb:
7090 7096 net_slirp_smb(optarg);
... ...
... ... @@ -159,6 +159,7 @@ extern int smp_cpus;
159 159 extern int no_quit;
160 160 extern int semihosting_enabled;
161 161 extern int autostart;
  162 +extern const char *bootp_filename;
162 163  
163 164 #define MAX_OPTION_ROMS 16
164 165 extern const char *option_rom[MAX_OPTION_ROMS];
... ...