Author: mmel
Date: Wed Oct 14 13:13:14 2020
New Revision: 366700
URL: https://svnweb.freebsd.org/changeset/base/366700

Log:
  Add 'netserver' command to EFI loader.
  
  In some environments is difficult to access bootp/dhcp
  configuration as "standard user". Add a command that allows to set
  or display the URI of the network server used as "net:" device.
  Currently only tftp and nfs protocols are supported.
  
  Typical usage pattern is:
  netserver tftp://192.168.168.1/path_to_obj_dir/arm.armv7/sys/GENERIC/
  boot net:kernel
  
  Reviewed by:  imp, kevans
  MFC after:    4 weeks
  Differential Revision: https://reviews.freebsd.org/D26736

Modified:
  head/stand/efi/loader/main.c

Modified: head/stand/efi/loader/main.c
==============================================================================
--- head/stand/efi/loader/main.c        Wed Oct 14 12:28:54 2020        
(r366699)
+++ head/stand/efi/loader/main.c        Wed Oct 14 13:13:14 2020        
(r366700)
@@ -40,10 +40,14 @@ __FBSDID("$FreeBSD$");
 #include <sys/zfs_bootenv.h>
 #endif
 #include <paths.h>
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
 #include <stdint.h>
 #include <string.h>
 #include <setjmp.h>
 #include <disk.h>
+#include <dev_net.h>
+#include <net.h>
 
 #include <efi.h>
 #include <efilib.h>
@@ -1594,3 +1598,34 @@ command_chain(int argc, char *argv[])
 }
 
 COMMAND_SET(chain, "chain", "chain load file", command_chain);
+
+extern struct in_addr servip;
+static int
+command_netserver(int argc, char *argv[])
+{
+       char *proto;
+       n_long rootaddr;
+
+       if (argc > 2) {
+               command_errmsg = "wrong number of arguments";
+               return (CMD_ERROR);
+       }
+       if (argc < 2) {
+               proto = netproto == NET_TFTP ? "tftp://"; : "nfs://";
+               printf("Netserver URI: %s%s%s\n", proto, intoa(rootip.s_addr),
+                   rootpath);
+               return (CMD_OK);
+       }
+       if (argc == 2) {
+               strncpy(rootpath, argv[1], sizeof(rootpath));
+               rootpath[sizeof(rootpath) -1] = '\0';
+               if ((rootaddr = net_parse_rootpath()) != INADDR_NONE)
+                       servip.s_addr = rootip.s_addr = rootaddr;
+               return (CMD_OK);
+       }
+       return (CMD_ERROR);     /* not reached */
+
+}
+
+COMMAND_SET(netserver, "netserver", "change or display netserver URI",
+    command_netserver);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to