Hi,
Here is a patch for using alternative control socket for relayd and relayctl.
It's based on ospfd. I would like for this to get in order to be able to
control multiple relayd daemons on different rdomains.
regards,
Giannis
Index: relayd.8
===================================================================
RCS file: /cvs/src/usr.sbin/relayd/relayd.8,v
retrieving revision 1.25
diff -u -p -u -r1.25 relayd.8
--- relayd.8 27 Jul 2015 14:50:58 -0000 1.25
+++ relayd.8 22 Jun 2017 15:08:26 -0000
@@ -25,6 +25,7 @@
.Op Fl dnv
.Op Fl D Ar macro Ns = Ns Ar value
.Op Fl f Ar file
+.Op Fl s Ar socket
.Sh DESCRIPTION
.Nm
is a daemon to relay and dynamically redirect incoming connections to
@@ -118,6 +119,8 @@ The default is
.It Fl n
Configtest mode.
Only check the configuration file for validity.
+.It Fl s Ar socket
+Use an alternate location for the default control socket.
.It Fl v
Produce more verbose output.
.El
Index: relayd.c
===================================================================
RCS file: /cvs/src/usr.sbin/relayd/relayd.c,v
retrieving revision 1.169
diff -u -p -u -r1.169 relayd.c
--- relayd.c 31 May 2017 04:14:34 -0000 1.169
+++ relayd.c 22 Jun 2017 15:08:26 -0000
@@ -107,7 +107,8 @@ usage(void)
{
extern char *__progname;
- fprintf(stderr, "usage: %s [-dnv] [-D macro=value] [-f file]\n",
+ fprintf(stderr, "usage: %s [-dnv] [-D macro=value] [-f file]"
+ " [-s socket]\n",
__progname);
exit(1);
}
@@ -121,12 +122,13 @@ main(int argc, char *argv[])
struct relayd *env;
struct privsep *ps;
const char *conffile = CONF_FILE;
+ const char *sockname = RELAYD_SOCKET;
enum privsep_procid proc_id = PROC_PARENT;
int proc_instance = 0;
const char *errp, *title = NULL;
int argc0 = argc;
- while ((c = getopt(argc, argv, "dD:nI:P:f:v")) != -1) {
+ while ((c = getopt(argc, argv, "dD:nI:P:f:s:v")) != -1) {
switch (c) {
case 'd':
debug = 2;
@@ -143,6 +145,9 @@ main(int argc, char *argv[])
case 'f':
conffile = optarg;
break;
+ case 's':
+ sockname = optarg;
+ break;
case 'v':
verbose++;
opts |= RELAYD_OPT_VERBOSE;
@@ -200,7 +205,7 @@ main(int argc, char *argv[])
errx(1, "unknown user %s", RELAYD_USER);
/* Configure the control socket */
- ps->ps_csock.cs_name = RELAYD_SOCKET;
+ ps->ps_csock.cs_name = sockname;
log_init(debug, LOG_DAEMON);
log_setverbose(verbose);
Index: relayctl.8
===================================================================
RCS file: /cvs/src/usr.sbin/relayctl/relayctl.8,v
retrieving revision 1.32
diff -u -p -u -r1.32 relayctl.8
--- relayctl.8 28 Nov 2015 01:22:44 -0000 1.32
+++ relayctl.8 22 Jun 2017 15:08:37 -0000
@@ -23,6 +23,7 @@
.Nd control the relay daemon
.Sh SYNOPSIS
.Nm
+.Op Fl s Ar socket
.Ar command
.Op Ar argument ...
.Sh DESCRIPTION
@@ -31,6 +32,21 @@ The
program controls the
.Xr relayd 8
daemon.
+Commands may be abbreviated to the minimum unambiguous prefix; for example,
+.Cm sh su
+for
+.Cm show summary .
+.Pp
+The following options are available:
+.Bl -tag -width Ds
+.It Fl s Ar socket
+Use
+.Ar socket
+instead of the default
+.Pa /var/run/relayd.sock
+to communicate with
+.Xr relayd 8 .
+.El
.Pp
The following commands are available:
.Bl -tag -width Ds
Index: relayctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/relayctl/relayctl.c,v
retrieving revision 1.57
diff -u -p -u -r1.57 relayctl.c
--- relayctl.c 3 Sep 2016 14:44:21 -0000 1.57
+++ relayctl.c 22 Jun 2017 15:08:37 -0000
@@ -88,7 +88,8 @@ usage(void)
{
extern char *__progname;
- fprintf(stderr, "usage: %s command [argument ...]\n", __progname);
+ fprintf(stderr, "usage: %s [-s socket] command [argument ...]\n",
+ __progname);
exit(1);
}
@@ -101,9 +102,25 @@ main(int argc, char *argv[])
int ctl_sock;
int done = 0;
int n, verbose = 0;
+ int ch;
+ char *sockname;
+
+ sockname = RELAYD_SOCKET;
+ while ((ch = getopt(argc, argv, "s:")) != -1) {
+ switch (ch) {
+ case 's':
+ sockname = optarg;
+ break;
+ default:
+ usage();
+ /* NOTREACHED */
+ }
+ }
+ argc -= optind;
+ argv += optind;
/* parse options */
- if ((res = parse(argc - 1, argv + 1)) == NULL)
+ if ((res = parse(argc, argv)) == NULL)
exit(1);
/* connect to relayd control socket */
@@ -112,7 +129,7 @@ main(int argc, char *argv[])
bzero(&sun, sizeof(sun));
sun.sun_family = AF_UNIX;
- (void)strlcpy(sun.sun_path, RELAYD_SOCKET, sizeof(sun.sun_path));
+ (void)strlcpy(sun.sun_path, sockname, sizeof(sun.sun_path));
reconnect:
if (connect(ctl_sock, (struct sockaddr *)&sun, sizeof(sun)) == -1) {
/* Keep retrying if running in monitor mode */
@@ -121,7 +138,7 @@ main(int argc, char *argv[])
usleep(100);
goto reconnect;
}
- err(1, "connect: %s", RELAYD_SOCKET);
+ err(1, "connect: %s", sockname);
}
if (pledge("stdio", NULL) == -1)