[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bochs-cvs
Subject:    [Bochs-cvs] [13918] trunk/bochs
From:       vruppert--- via Bochs-cvs <bochs-cvs () lists ! sourceforge ! net>
Date:       2020-08-09 17:24:08
Message-ID: 1596993848.744316.11333 () sfp-scm-3 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]

Revision: 13918
Author:   vruppert
Date:     2020-08-09 17:24:08 +0000 (Sun, 09 Aug 2020)
Log Message:
-----------
Added support for setting up the network bootfile in the bxhub utility.
TODO: Implement configurable bootfile in the vnet module.

Modified Paths:
--------------
    trunk/bochs/CHANGES
    trunk/bochs/doc/docbook/user/user.dbk
    trunk/bochs/iodev/network/eth_vnet.cc
    trunk/bochs/iodev/network/netutil.cc
    trunk/bochs/iodev/network/netutil.h
    trunk/bochs/misc/bxhub.cc

Modified: trunk/bochs/CHANGES
===================================================================
--- trunk/bochs/CHANGES	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/CHANGES	2020-08-09 17:24:08 UTC (rev 13918)
@@ -16,6 +16,7 @@
     - Added "multiple NICs" support to the NE2000 and E1000 devices. Up to 4 devices
       per model are supported. Use the zero-based "card" parameter to specify device.
     - Added experimental FTP service for networking modules 'vnet' and 'socket'.
+    - Fixes for network boot support with iPXE (modules 'slirp' and 'socket').
     - Added log file support to 'bxhub' utility (networking module 'socket').
     - Packet logging in text format for the 'slirp' and 'vnet' modules controlled
       by runtime option (slirp: "pktlog" option in config / vnet: "script" parameter).

Modified: trunk/bochs/doc/docbook/user/user.dbk
===================================================================
--- trunk/bochs/doc/docbook/user/user.dbk	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/doc/docbook/user/user.dbk	2020-08-09 17:24:08 UTC (rev 13918)
@@ -8295,6 +8295,7 @@
   -base=...     base UDP port (bxhub uses 2 ports per Bochs session)
   -mac=...      host MAC address (default is b0:c4:20:00:00:0f)
   -tftp=...     enable FTP and TFTP support using specified directory as root
+  -bootfile=... network bootfile reported by DHCP - located on TFTP server
   -loglev=...   set log level (0 - 3, default 1)
   -logfile=...  send log output to file
   --help        display this help and exit

Modified: trunk/bochs/iodev/network/eth_vnet.cc
===================================================================
--- trunk/bochs/iodev/network/eth_vnet.cc	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/iodev/network/eth_vnet.cc	2020-08-09 17:24:08 UTC (rev 13918)
@@ -75,6 +75,7 @@
 static const Bit8u default_dns_ipv4addr[4] = {192,168,10,2};
 static const Bit8u default_ftp_ipv4addr[4] = {192,168,10,3};
 static const Bit8u dhcp_base_ipv4addr[4] = {192,168,10,15};
+static const char default_bootfile[] = "pxelinux.0";
 
 static Bit8u    packet_buffer[BX_PACKET_BUFSIZE];
 static unsigned packet_len;
@@ -152,6 +153,7 @@
   memcpy(dhcp.srv_ipv4addr[VNET_DNS], default_dns_ipv4addr, 4);
   memcpy(dhcp.srv_ipv4addr[VNET_MISC], default_ftp_ipv4addr, 4);
   memcpy(dhcp.client_base_ipv4addr, dhcp_base_ipv4addr, 4);
+  strcpy(dhcp.bootfile, default_bootfile);
   vnet_server.init(dev, &dhcp, netif);
   vnet_server.init_client(0, (Bit8u*)macaddr);
 

Modified: trunk/bochs/iodev/network/netutil.cc
===================================================================
--- trunk/bochs/iodev/network/netutil.cc	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/iodev/network/netutil.cc	2020-08-09 17:24:08 UTC (rev 13918)
@@ -1740,7 +1740,7 @@
 void vnet_server_c::ftp_recv_file(tcp_conn_t *tcpc_cmd, tcp_conn_t *tcpc_data,
                                   const char *fname)
 {
-  char path[BX_PATHNAME_LEN], tmp_path[BX_PATHNAME_LEN], *cptr, reply[80];
+  char path[BX_PATHNAME_LEN], tmp_path[BX_PATHNAME_LEN+4], *cptr, reply[80];
   ftp_session_t *fs = (ftp_session_t*)tcpc_cmd->data;
   int fd = -1;
   bx_bool exists;
@@ -2059,7 +2059,9 @@
   memcpy(&replybuf[20], dhcp->srv_ipv4addr[VNET_SRV], 4);
   memcpy(&replybuf[28],&data[28],6);
   memcpy(&replybuf[44],"vnet",4);
-  memcpy(&replybuf[108],"pxelinux.0",10);
+  if (strlen(dhcp->bootfile) > 0) {
+    memcpy(&replybuf[108], dhcp->bootfile, strlen(dhcp->bootfile));
+  }
   replybuf[236] = 0x63;
   replybuf[237] = 0x82;
   replybuf[238] = 0x53;
@@ -2472,7 +2474,7 @@
             s->options &= ~TFTP_OPTION_TSIZE;
           } else {
             s->tsize_val = (size_t)stbuf.st_size;
-            BX_DEBUG(("tftp filesize: %lu", (unsigned long)s->tsize_val));
+            BX_DEBUG(("TFTP RRQ: filesize=%lu", (unsigned long)s->tsize_val));
           }
         }
         if ((s->options & ~TFTP_OPTION_OCTET) > 0) {

Modified: trunk/bochs/iodev/network/netutil.h
===================================================================
--- trunk/bochs/iodev/network/netutil.h	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/iodev/network/netutil.h	2020-08-09 17:24:08 UTC (rev 13918)
@@ -165,6 +165,7 @@
   Bit8u host_macaddr[6];
   Bit8u srv_ipv4addr[3][4];
   Bit8u client_base_ipv4addr[4];
+  char  bootfile[128];
 } dhcp_cfg_t;
 
 // vnet functions shared with bxhub

Modified: trunk/bochs/misc/bxhub.cc
===================================================================
--- trunk/bochs/misc/bxhub.cc	2020-08-08 19:23:35 UTC (rev 13917)
+++ trunk/bochs/misc/bxhub.cc	2020-08-09 17:24:08 UTC (rev 13918)
@@ -88,9 +88,11 @@
 const Bit8u default_dns_ipv4addr[4] = {10, 0, 2, 3};
 const Bit8u default_ftp_ipv4addr[4] = {10, 0, 2, 4};
 const Bit8u dhcp_base_ipv4addr[4] = {10, 0, 2, 15};
+const char  default_bootfile[] = "pxelinux.0";
 
 static Bit16u port_base = 40000;
 static char tftp_root[BX_PATHNAME_LEN];
+static char dhcp_bootfile[128];
 static Bit8u host_macaddr[6];
 static int client_max;
 static Bit8u n_clients;
@@ -164,6 +166,7 @@
     "  -base=...     base UDP port (bxhub uses 2 ports per Bochs session)\n"
     "  -mac=...      host MAC address (default is b0:c4:20:00:00:0f)\n"
     "  -tftp=...     enable FTP and TFTP support using specified directory as root\n"
+    "  -bootfile=... network bootfile reported by DHCP - located on TFTP server\n"
     "  -loglev=...   set log level (0 - 3, default 1)\n"
     "  -logfile=...  send log output to file\n"
     "  --help        display this help and exit\n\n");
@@ -180,6 +183,7 @@
   bx_loglev = 1;
   port_base = 40000;
   tftp_root[0] = 0;
+  dhcp_bootfile[0] = 0;
   bx_logfname[0] = 0;
   memcpy(host_macaddr, default_host_macaddr, ETHERNET_MAC_ADDR_LEN);
   while ((arg < argc) && (ret == 1)) {
@@ -209,6 +213,9 @@
     else if (!strncmp("-tftp=", argv[arg], 6)) {
       strcpy(tftp_root, &argv[arg][6]);
     }
+    else if (!strncmp("-bootfile=", argv[arg], 10)) {
+      strcpy(dhcp_bootfile, &argv[arg][10]);
+    }
     else if (!strncmp("-mac=", argv[arg], 5)) {
       n = sscanf(&argv[arg][5], "%x:%x:%x:%x:%x:%x",
                  &tmp[0],&tmp[1],&tmp[2],&tmp[3],&tmp[4],&tmp[5]);
@@ -316,6 +323,11 @@
   memcpy(dhcp.srv_ipv4addr[VNET_DNS], default_dns_ipv4addr, 4);
   memcpy(dhcp.srv_ipv4addr[VNET_MISC], default_ftp_ipv4addr, 4);
   memcpy(dhcp.client_base_ipv4addr, &dhcp_base_ipv4addr, 4);
+  if (strlen(dhcp_bootfile) > 0) {
+    strcpy(dhcp.bootfile, dhcp_bootfile);
+  } else {
+    strcpy(dhcp.bootfile, default_bootfile);
+  }
   vnet_server.init(NULL, &dhcp, tftp_root);
   printf("Host MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n",
          host_macaddr[0], host_macaddr[1], host_macaddr[2],
@@ -323,8 +335,9 @@
          );
   if (strlen(tftp_root) > 0) {
     printf("FTP / TFTP using root directory '%s'\n", tftp_root);
+    printf("Network bootfile set to '%s'\n", dhcp.bootfile);
   } else {
-    printf("FTP / TFTP support disabled\n");
+    printf("FTP / TFTP support and network boot disabled\n");
   }
 
   if (strlen(bx_logfname) > 0) {



_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic