diff options
author | 2016-02-21 18:40:56 +0000 | |
---|---|---|
committer | 2016-02-21 18:40:56 +0000 | |
commit | 44faa115db9d64e07a9924cb93b2da8f109fb322 (patch) | |
tree | 444d648f99dc1cf473f295d2d13a9ff2bb79276d | |
parent | Add scope id only for unicast IPv6 packets. (diff) | |
download | wireguard-openbsd-44faa115db9d64e07a9924cb93b2da8f109fb322.tar.xz wireguard-openbsd-44faa115db9d64e07a9924cb93b2da8f109fb322.zip |
Several minor tweaks.
-rw-r--r-- | usr.sbin/eigrpd/eigrpd.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/eigrpd.h | 9 | ||||
-rw-r--r-- | usr.sbin/eigrpd/eigrpe.h | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/interface.c | 17 | ||||
-rw-r--r-- | usr.sbin/eigrpd/kroute.c | 23 | ||||
-rw-r--r-- | usr.sbin/eigrpd/packet.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/parse.y | 10 | ||||
-rw-r--r-- | usr.sbin/eigrpd/rde_dual.c | 15 | ||||
-rw-r--r-- | usr.sbin/eigrpd/tlv.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/util.c | 17 |
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 |