summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/ngctl/main.c11
-rw-r--r--usr.sbin/ngctl/ngctl.86
-rw-r--r--usr.sbin/ngctl/ngctl.h2
3 files changed, 18 insertions, 1 deletions
diff --git a/usr.sbin/ngctl/main.c b/usr.sbin/ngctl/main.c
index 9a54cc7..f6d68b9 100644
--- a/usr.sbin/ngctl/main.c
+++ b/usr.sbin/ngctl/main.c
@@ -42,6 +42,7 @@
#define PROMPT "+ "
#define MAX_ARGS 512
#define WHITESPACE " \t\r\n\v\f"
+#define NG_SOCKET_KLD "ng_socket.ko"
/* Internal functions */
static int ReadFile(FILE *fp);
@@ -134,8 +135,16 @@ main(int ac, char *av[])
av += optind;
/* Create a new socket node */
- if (NgMkSockNode(name, &csock, &dsock) < 0)
+ if (NgMkSockNode(name, &csock, &dsock) < 0) {
+ if (errno == EPROTONOSUPPORT) {
+ if (kldload(NG_SOCKET_KLD) < 0)
+ err(EX_OSERR, "can't load %s", NG_SOCKET_KLD);
+ if (NgMkSockNode(name, &csock, &dsock) >= 0)
+ goto gotNode;
+ }
err(EX_OSERR, "can't create node");
+ }
+gotNode:
/* Do commands as requested */
if (ac == 0) {
diff --git a/usr.sbin/ngctl/ngctl.8 b/usr.sbin/ngctl/ngctl.8
index ee4f3be..8537d76 100644
--- a/usr.sbin/ngctl/ngctl.8
+++ b/usr.sbin/ngctl/ngctl.8
@@ -60,6 +60,12 @@ will enter interactive mode. Otherwise
.Nm ngctl
will execute the supplied command(s) and exit immediately.
.Pp
+If the
+.Dv ng_socket.ko
+module is not installed in the kernel,
+.Nm ngctl
+will attempt to install it.
+.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl f Ar nodeinfo
diff --git a/usr.sbin/ngctl/ngctl.h b/usr.sbin/ngctl/ngctl.h
index 64ba3db..817c6e8 100644
--- a/usr.sbin/ngctl/ngctl.h
+++ b/usr.sbin/ngctl/ngctl.h
@@ -38,9 +38,11 @@
*/
#include <sys/types.h>
+#include <sys/param.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/select.h>
+#include <sys/linker.h>
#include <stdio.h>
#include <stdlib.h>
OpenPOWER on IntegriCloud