summaryrefslogtreecommitdiffstats
path: root/usr.sbin/rad/engine.c
diff options
context:
space:
mode:
authorflorian <florian@openbsd.org>2018-07-15 09:28:21 +0000
committerflorian <florian@openbsd.org>2018-07-15 09:28:21 +0000
commit4c40b7e8ed0a313f15b06f9a298049cf3842ca3b (patch)
treefc09616e382c96412e85d8d9bd7db726f6dd0aa3 /usr.sbin/rad/engine.c
parentmark up managed / other configuration (diff)
downloadwireguard-openbsd-4c40b7e8ed0a313f15b06f9a298049cf3842ca3b.tar.xz
wireguard-openbsd-4c40b7e8ed0a313f15b06f9a298049cf3842ca3b.zip
Implement RFC 8106: IPv6 Router Advertisement Options for DNS
Configuration.
Diffstat (limited to 'usr.sbin/rad/engine.c')
-rw-r--r--usr.sbin/rad/engine.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/usr.sbin/rad/engine.c b/usr.sbin/rad/engine.c
index 9ecb93da44b..5d186439dd8 100644
--- a/usr.sbin/rad/engine.c
+++ b/usr.sbin/rad/engine.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: engine.c,v 1.6 2018/07/11 19:05:25 florian Exp $ */
+/* $OpenBSD: engine.c,v 1.7 2018/07/15 09:28:21 florian Exp $ */
/*
* Copyright (c) 2018 Florian Obser <florian@openbsd.org>
@@ -43,9 +43,6 @@
#include "rad.h"
#include "engine.h"
-#define MAX_RTR_ADV_INTERVAL 600
-#define MIN_RTR_ADV_INTERVAL 200
-
struct engine_iface {
TAILQ_ENTRY(engine_iface) entry;
struct event timer;
@@ -267,6 +264,8 @@ engine_dispatch_main(int fd, short event, void *bula)
struct imsgev *iev = bula;
struct imsgbuf *ibuf;
struct ra_prefix_conf *ra_prefix_conf;
+ struct ra_rdnss_conf *ra_rdnss_conf;
+ struct ra_dnssl_conf *ra_dnssl_conf;
ssize_t n;
int shut = 0;
@@ -335,6 +334,8 @@ engine_dispatch_main(int fd, short event, void *bula)
sizeof(struct ra_iface_conf));
ra_iface_conf->autoprefix = NULL;
SIMPLEQ_INIT(&ra_iface_conf->ra_prefix_list);
+ SIMPLEQ_INIT(&ra_iface_conf->ra_rdnss_list);
+ SIMPLEQ_INIT(&ra_iface_conf->ra_dnssl_list);
SIMPLEQ_INSERT_TAIL(&nconf->ra_iface_list,
ra_iface_conf, entry);
break;
@@ -354,6 +355,27 @@ engine_dispatch_main(int fd, short event, void *bula)
SIMPLEQ_INSERT_TAIL(&ra_iface_conf->ra_prefix_list,
ra_prefix_conf, entry);
break;
+ case IMSG_RECONF_RA_RDNS_LIFETIME:
+ ra_iface_conf->rdns_lifetime = *((uint32_t *)imsg.data);
+ break;
+ case IMSG_RECONF_RA_RDNSS:
+ if ((ra_rdnss_conf = malloc(sizeof(struct
+ ra_rdnss_conf))) == NULL)
+ fatal(NULL);
+ memcpy(ra_rdnss_conf, imsg.data, sizeof(struct
+ ra_rdnss_conf));
+ SIMPLEQ_INSERT_TAIL(&ra_iface_conf->ra_rdnss_list,
+ ra_rdnss_conf, entry);
+ break;
+ case IMSG_RECONF_RA_DNSSL:
+ if ((ra_dnssl_conf = malloc(sizeof(struct
+ ra_dnssl_conf))) == NULL)
+ fatal(NULL);
+ memcpy(ra_dnssl_conf, imsg.data, sizeof(struct
+ ra_dnssl_conf));
+ SIMPLEQ_INSERT_TAIL(&ra_iface_conf->ra_dnssl_list,
+ ra_dnssl_conf, entry);
+ break;
case IMSG_RECONF_END:
merge_config(engine_conf, nconf);
nconf = NULL;