summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrenato <renato@openbsd.org>2016-02-21 18:40:56 +0000
committerrenato <renato@openbsd.org>2016-02-21 18:40:56 +0000
commit44faa115db9d64e07a9924cb93b2da8f109fb322 (patch)
tree444d648f99dc1cf473f295d2d13a9ff2bb79276d
parentAdd scope id only for unicast IPv6 packets. (diff)
downloadwireguard-openbsd-44faa115db9d64e07a9924cb93b2da8f109fb322.tar.xz
wireguard-openbsd-44faa115db9d64e07a9924cb93b2da8f109fb322.zip
Several minor tweaks.
-rw-r--r--usr.sbin/eigrpd/eigrpd.c4
-rw-r--r--usr.sbin/eigrpd/eigrpd.h9
-rw-r--r--usr.sbin/eigrpd/eigrpe.h4
-rw-r--r--usr.sbin/eigrpd/interface.c17
-rw-r--r--usr.sbin/eigrpd/kroute.c23
-rw-r--r--usr.sbin/eigrpd/packet.c4
-rw-r--r--usr.sbin/eigrpd/parse.y10
-rw-r--r--usr.sbin/eigrpd/rde_dual.c15
-rw-r--r--usr.sbin/eigrpd/tlv.c4
-rw-r--r--usr.sbin/eigrpd/util.c17
10 files changed, 47 insertions, 60 deletions
diff --git a/usr.sbin/eigrpd/eigrpd.c b/usr.sbin/eigrpd/eigrpd.c
index ddbfb593a2c..38b0a863a52 100644
--- a/usr.sbin/eigrpd/eigrpd.c
+++ b/usr.sbin/eigrpd/eigrpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: eigrpd.c,v 1.5 2016/02/02 17:51:11 sthen Exp $ */
+/* $OpenBSD: eigrpd.c,v 1.6 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -171,7 +171,7 @@ main(int argc, char *argv[])
mib[3] = IPCTL_FORWARDING;
len = sizeof(ipforwarding);
if (sysctl(mib, 4, &ipforwarding, &len, NULL, 0) == -1)
- err(1, "sysctl");
+ log_warn("sysctl");
if (ipforwarding != 1)
log_warnx("WARNING: IP forwarding NOT enabled");
diff --git a/usr.sbin/eigrpd/eigrpd.h b/usr.sbin/eigrpd/eigrpd.h
index bf2e03293f6..6797c4301f7 100644
--- a/usr.sbin/eigrpd/eigrpd.h
+++ b/usr.sbin/eigrpd/eigrpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: eigrpd.h,v 1.8 2016/01/15 12:41:09 renato Exp $ */
+/* $OpenBSD: eigrpd.h,v 1.9 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -120,10 +120,15 @@ union eigrpd_addr {
struct in6_addr v6;
};
+#define IN6_IS_SCOPE_EMBED(a) \
+ ((IN6_IS_ADDR_LINKLOCAL(a)) || \
+ (IN6_IS_ADDR_MC_LINKLOCAL(a)) || \
+ (IN6_IS_ADDR_MC_INTFACELOCAL(a)))
+
/* interface types */
enum iface_type {
IF_TYPE_POINTOPOINT,
- IF_TYPE_BROADCAST,
+ IF_TYPE_BROADCAST
};
struct if_addr {
diff --git a/usr.sbin/eigrpd/eigrpe.h b/usr.sbin/eigrpd/eigrpe.h
index a021983330a..1f13669d3a4 100644
--- a/usr.sbin/eigrpd/eigrpe.h
+++ b/usr.sbin/eigrpd/eigrpe.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: eigrpe.h,v 1.7 2016/01/15 12:36:41 renato Exp $ */
+/* $OpenBSD: eigrpe.h,v 1.8 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -92,7 +92,7 @@ struct iface *if_new(struct eigrpd_conf *, struct kif *);
void if_del(struct iface *);
void if_init(struct eigrpd_conf *, struct iface *);
struct iface *if_lookup(struct eigrpd_conf *, unsigned int);
-struct if_addr *if_addr_new(struct iface *, struct kaddr *);
+void if_addr_new(struct iface *, struct kaddr *);
void if_addr_del(struct iface *, struct kaddr *);
struct if_addr *if_addr_lookup(struct if_addr_head *, struct kaddr *);
in_addr_t if_primary_addr(struct iface *);
diff --git a/usr.sbin/eigrpd/interface.c b/usr.sbin/eigrpd/interface.c
index 45edfc8f7dc..77d56e4cd5b 100644
--- a/usr.sbin/eigrpd/interface.c
+++ b/usr.sbin/eigrpd/interface.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: interface.c,v 1.12 2016/01/15 12:41:50 renato Exp $ */
+/* $OpenBSD: interface.c,v 1.13 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -24,7 +24,6 @@
#include <sys/socket.h>
#include <arpa/inet.h>
#include <ctype.h>
-#include <err.h>
#include <string.h>
#include "eigrpd.h"
@@ -61,7 +60,7 @@ if_new(struct eigrpd_conf *xconf, struct kif *kif)
struct iface *iface;
if ((iface = calloc(1, sizeof(*iface))) == NULL)
- err(1, "if_new: calloc");
+ fatal("if_new: calloc");
TAILQ_INIT(&iface->ei_list);
TAILQ_INIT(&iface->addr_list);
@@ -138,17 +137,17 @@ if_lookup(struct eigrpd_conf *xconf, unsigned int ifindex)
return (NULL);
}
-struct if_addr *
+void
if_addr_new(struct iface *iface, struct kaddr *kaddr)
{
struct if_addr *if_addr;
struct eigrp_iface *ei;
if (if_addr_lookup(&iface->addr_list, kaddr) != NULL)
- return (NULL);
+ return;
if ((if_addr = calloc(1, sizeof(*if_addr))) == NULL)
- fatal("if_addr_new");
+ fatal("if_addr_new: calloc");
if_addr->af = kaddr->af;
memcpy(&if_addr->addr, &kaddr->addr, sizeof(if_addr->addr));
@@ -162,8 +161,6 @@ if_addr_new(struct iface *iface, struct kaddr *kaddr)
eigrpe_orig_local_route(ei, if_addr, 0);
if_update(iface, if_addr->af);
-
- return (if_addr);
}
void
@@ -291,7 +288,7 @@ eigrp_if_new(struct eigrpd_conf *xconf, struct eigrp *eigrp, struct kif *kif)
iface = if_new(xconf, kif);
if ((ei = calloc(1, sizeof(*ei))) == NULL)
- err(1, "eigrp_if_new: calloc");
+ fatal("eigrp_if_new: calloc");
ei->state = IF_STA_DOWN;
/* get next unused ifaceid */
@@ -726,7 +723,7 @@ if_set_ipv6_mcast(struct iface *iface)
{
if (setsockopt(econf->eigrp_socket_v6, IPPROTO_IPV6, IPV6_MULTICAST_IF,
&iface->ifindex, sizeof(iface->ifindex)) < 0) {
- log_debug("%s: error setting IPV6_MULTICAST_IF, interface %s",
+ log_warn("%s: error setting IPV6_MULTICAST_IF, interface %s",
__func__, iface->name);
return (-1);
}
diff --git a/usr.sbin/eigrpd/kroute.c b/usr.sbin/eigrpd/kroute.c
index 3c269b9af02..609a4fac6a5 100644
--- a/usr.sbin/eigrpd/kroute.c
+++ b/usr.sbin/eigrpd/kroute.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kroute.c,v 1.8 2016/02/21 18:36:11 renato Exp $ */
+/* $OpenBSD: kroute.c,v 1.9 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -29,7 +29,6 @@
#include <net/if_dl.h>
#include <net/if_types.h>
#include <net/route.h>
-#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
@@ -124,20 +123,17 @@ int rtmsg_process(char *, size_t);
int rtmsg_process_route(struct rt_msghdr *,
struct sockaddr *[RTAX_MAX]);
-RB_HEAD(kroute_tree, kroute_prefix) krt;
+RB_HEAD(kroute_tree, kroute_prefix) krt = RB_INITIALIZER(&krt);
RB_PROTOTYPE(kroute_tree, kroute_prefix, entry, kroute_compare)
RB_GENERATE(kroute_tree, kroute_prefix, entry, kroute_compare)
-RB_HEAD(kif_tree, kif_node) kit;
+RB_HEAD(kif_tree, kif_node) kit = RB_INITIALIZER(&kit);
RB_PROTOTYPE(kif_tree, kif_node, entry, kif_compare)
RB_GENERATE(kif_tree, kif_node, entry, kif_compare)
int
kif_init(void)
{
- RB_INIT(&kit);
- kr_state.fib_sync = 0; /* decoupled */
-
if (fetchifs() == -1)
return (-1);
@@ -162,7 +158,7 @@ kr_init(int fs, unsigned int rdomain)
/* not interested in my own messages */
if (setsockopt(kr_state.fd, SOL_SOCKET, SO_USELOOPBACK,
&opt, sizeof(opt)) == -1)
- log_warn("%s: setsockopt", __func__); /* not fatal */
+ log_warn("%s: setsockopt(SO_USELOOPBACK)", __func__);
/* grow receive buffer, don't wanna miss messages */
optlen = sizeof(default_rcvbuf);
@@ -637,9 +633,11 @@ kroute_remove(struct kroute *kr)
}
if (TAILQ_EMPTY(&kp->priorities)) {
- if (RB_REMOVE(kroute_tree, &krt, kp) == NULL)
+ if (RB_REMOVE(kroute_tree, &krt, kp) == NULL) {
log_warnx("%s failed for %s/%u", __func__,
log_addr(kr->af, &kr->prefix), kp->prefixlen);
+ return (-1);
+ }
free(kp);
} else
kr_redistribute(kp);
@@ -813,6 +811,7 @@ protect_lo(void)
kroute_insert(&kr6);
}
+/* misc */
uint8_t
prefixlen_classful(in_addr_t ina)
{
@@ -1300,7 +1299,7 @@ fetchtable(void)
return (-1);
}
if ((buf = malloc(len)) == NULL) {
- log_warn("fetchtable");
+ log_warn("%s", __func__);
return (-1);
}
if (sysctl(mib, 7, buf, &len, NULL, 0) == -1) {
@@ -1335,7 +1334,7 @@ fetchifs(void)
return (-1);
}
if ((buf = malloc(len)) == NULL) {
- log_warn("fetchifs");
+ log_warn("%s", __func__);
return (-1);
}
if (sysctl(mib, 6, buf, &len, NULL, 0) == -1) {
@@ -1530,6 +1529,8 @@ rtmsg_process_route(struct rt_msghdr *rtm, struct sockaddr *rti_info[RTAX_MAX])
kr.flags |= F_REJECT;
if (rtm->rtm_flags & RTF_DYNAMIC)
kr.flags |= F_DYNAMIC;
+ if (rtm->rtm_flags & RTF_CONNECTED)
+ kr.flags |= F_CONNECTED;
kr.priority = rtm->rtm_priority;
if (rtm->rtm_type == RTM_CHANGE) {
diff --git a/usr.sbin/eigrpd/packet.c b/usr.sbin/eigrpd/packet.c
index 2db339bd1c1..2b1dfaa535b 100644
--- a/usr.sbin/eigrpd/packet.c
+++ b/usr.sbin/eigrpd/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.9 2016/02/21 18:39:08 renato Exp $ */
+/* $OpenBSD: packet.c,v 1.10 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -713,7 +713,7 @@ find_iface(unsigned int ifindex, int af, union eigrpd_addr *src)
{
struct iface *iface;
struct if_addr *if_addr;
- uint32_t mask;
+ in_addr_t mask;
iface = if_lookup(econf, ifindex);
if (iface == NULL)
diff --git a/usr.sbin/eigrpd/parse.y b/usr.sbin/eigrpd/parse.y
index 955ab1bf7ed..b1a1b781965 100644
--- a/usr.sbin/eigrpd/parse.y
+++ b/usr.sbin/eigrpd/parse.y
@@ -1,4 +1,4 @@
-/* $OpenBSD: parse.y,v 1.5 2016/01/15 12:23:45 renato Exp $ */
+/* $OpenBSD: parse.y,v 1.6 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -133,9 +133,8 @@ typedef struct {
%token ERROR
%token <v.string> STRING
%token <v.number> NUMBER
-%type <v.number> yesno no
+%type <v.number> yesno no eigrp_af
%type <v.string> string
-%type <v.number> eigrp_af
%type <v.redist> redistribute
%type <v.redist_metric> redist_metric opt_red_metric
@@ -891,11 +890,11 @@ pushfile(const char *name, int secret)
struct file *nfile;
if ((nfile = calloc(1, sizeof(struct file))) == NULL) {
- log_warn("malloc");
+ log_warn("calloc");
return (NULL);
}
if ((nfile->name = strdup(name)) == NULL) {
- log_warn("malloc");
+ log_warn("strdup");
free(nfile);
return (NULL);
}
@@ -945,7 +944,6 @@ parse_config(char *filename, int opts)
conf->fib_priority_external = RTP_EIGRP;
conf->fib_priority_summary = RTP_EIGRP;
- memset(&globaldefs, 0, sizeof(globaldefs));
defs = &globaldefs;
defs->kvalues[0] = defs->kvalues[2] = 1;
defs->active_timeout = DEFAULT_ACTIVE_TIMEOUT;
diff --git a/usr.sbin/eigrpd/rde_dual.c b/usr.sbin/eigrpd/rde_dual.c
index 7994b8d26db..e54f93ca5db 100644
--- a/usr.sbin/eigrpd/rde_dual.c
+++ b/usr.sbin/eigrpd/rde_dual.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde_dual.c,v 1.19 2016/01/28 13:25:14 jsg Exp $ */
+/* $OpenBSD: rde_dual.c,v 1.20 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -472,8 +472,10 @@ reply_outstanding_add(struct rt_node *rn, struct rde_nbr *nbr)
TAILQ_INSERT_TAIL(&rn->rijk, reply, rn_entry);
TAILQ_INSERT_TAIL(&nbr->rijk, reply, nbr_entry);
- reply_active_start_timer(reply);
- reply_sia_start_timer(reply);
+ if (rn->eigrp->active_timeout > 0) {
+ reply_active_start_timer(reply);
+ reply_sia_start_timer(reply);
+ }
}
struct reply_node *
@@ -517,9 +519,6 @@ reply_active_start_timer(struct reply_node *reply)
struct eigrp *eigrp = reply->nbr->eigrp;
struct timeval tv;
- if (eigrp->active_timeout == 0)
- return;
-
timerclear(&tv);
tv.tv_sec = eigrp->active_timeout * 60;
if (evtimer_add(&reply->ev_active_timeout, &tv) == -1)
@@ -573,7 +572,6 @@ reply_sia_timer(int fd, short event, void *arg)
rinfo_fill_successor(rn, &ri);
ri.metric.flags |= F_METRIC_ACTIVE;
rde_send_siaquery(nbr, &ri);
-
}
void
@@ -582,9 +580,6 @@ reply_sia_start_timer(struct reply_node *reply)
struct eigrp *eigrp = reply->nbr->eigrp;
struct timeval tv;
- if (eigrp->active_timeout == 0)
- return;
-
/*
* draft-savage-eigrp-04 - Section 4.4.1.1:
* "The SIA-QUERY packet SHOULD be sent on a per-destination basis
diff --git a/usr.sbin/eigrpd/tlv.c b/usr.sbin/eigrpd/tlv.c
index 0992f215edb..8e146947696 100644
--- a/usr.sbin/eigrpd/tlv.c
+++ b/usr.sbin/eigrpd/tlv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tlv.c,v 1.7 2016/02/21 18:38:37 renato Exp $ */
+/* $OpenBSD: tlv.c,v 1.8 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -85,7 +85,7 @@ gen_sequence_tlv(struct ibuf *buf, struct seq_addr_head *seq_addr_list)
}
break;
default:
- log_debug("%s: unkown address family", __func__);
+ log_debug("%s: unknown address family", __func__);
return (-1);
}
len += (sizeof(alen) + alen);
diff --git a/usr.sbin/eigrpd/util.c b/usr.sbin/eigrpd/util.c
index dc379f3e0f9..60a3d8fd324 100644
--- a/usr.sbin/eigrpd/util.c
+++ b/usr.sbin/eigrpd/util.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: util.c,v 1.4 2016/01/15 12:41:09 renato Exp $ */
+/* $OpenBSD: util.c,v 1.5 2016/02/21 18:40:56 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -216,10 +216,6 @@ eigrp_prefixcmp(int af, const union eigrpd_addr *a, const union eigrpd_addr *b,
return (-1);
}
-#define IN6_IS_SCOPE_EMBED(a) \
- ((IN6_IS_ADDR_LINKLOCAL(a)) || \
- (IN6_IS_ADDR_MC_LINKLOCAL(a)) || \
- (IN6_IS_ADDR_MC_INTFACELOCAL(a)))
void
embedscope(struct sockaddr_in6 *sin6)
@@ -243,10 +239,9 @@ recoverscope(struct sockaddr_in6 *sin6)
{
uint16_t tmp16;
- if (sin6->sin6_scope_id != 0) {
+ if (sin6->sin6_scope_id != 0)
log_warnx("%s: address %s already has scope id %u",
__func__, log_sockaddr(sin6), sin6->sin6_scope_id);
- }
if (IN6_IS_SCOPE_EMBED(&sin6->sin6_addr)) {
memcpy(&tmp16, &sin6->sin6_addr.s6_addr[2], sizeof(tmp16));
@@ -259,14 +254,12 @@ recoverscope(struct sockaddr_in6 *sin6)
void
addscope(struct sockaddr_in6 *sin6, uint32_t id)
{
- if (sin6->sin6_scope_id != 0) {
+ if (sin6->sin6_scope_id != 0)
log_warnx("%s: address %s already has scope id %u", __func__,
log_sockaddr(sin6), sin6->sin6_scope_id);
- }
- if (IN6_IS_SCOPE_EMBED(&sin6->sin6_addr)) {
+ if (IN6_IS_SCOPE_EMBED(&sin6->sin6_addr))
sin6->sin6_scope_id = id;
- }
}
void
@@ -277,5 +270,3 @@ clearscope(struct in6_addr *in6)
in6->s6_addr[3] = 0;
}
}
-
-#undef IN6_IS_SCOPE_EMBED