summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/bgpd/rde.c20
-rw-r--r--usr.sbin/bgpd/rde.h10
-rw-r--r--usr.sbin/bgpd/rde_rib.c4
3 files changed, 21 insertions, 13 deletions
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 0257653069f..79cf5a42545 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.411 2018/08/06 15:59:01 claudio Exp $ */
+/* $OpenBSD: rde.c,v 1.412 2018/08/08 06:54:50 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -773,7 +773,7 @@ rde_dispatch_imsg_parent(struct imsgbuf *ibuf)
fatal(NULL);
memcpy(nconf, imsg.data, sizeof(struct bgpd_config));
for (rid = 0; rid < rib_size; rid++) {
- if (*ribs[rid].name == '\0')
+ if (!rib_valid(rid))
break;
ribs[rid].state = RECONF_DELETE;
}
@@ -1320,7 +1320,7 @@ rde_update_update(struct rde_peer *peer, struct filterstate *in,
fatalx("rde_update_update: no prefix in Adj-RIB-In");
for (i = RIB_LOC_START; i < rib_size; i++) {
- if (*ribs[i].name == '\0')
+ if (!rib_valid(i))
break;
rde_filterstate_prep(&state, &in->aspath, in->nexthop,
in->nhflags);
@@ -1352,7 +1352,7 @@ rde_update_withdraw(struct rde_peer *peer, struct bgpd_addr *prefix,
u_int16_t i;
for (i = RIB_LOC_START; i < rib_size; i++) {
- if (*ribs[i].name == '\0')
+ if (!rib_valid(i))
break;
if (prefix_remove(&ribs[i].rib, peer, prefix, prefixlen, 0))
rde_update_log("withdraw", i, peer, NULL, prefix,
@@ -2799,7 +2799,7 @@ rde_reload_done(void)
}
/* bring ribs in sync */
for (rid = 0; rid < rib_size; rid++) {
- if (*ribs[rid].name == '\0')
+ if (!rib_valid(rid))
continue;
rde_filter_calc_skip_steps(ribs[rid].in_rules_tmp);
@@ -2868,7 +2868,7 @@ rde_softreconfig_done(void *arg)
filterlist_free(out_rules_tmp);
out_rules_tmp = NULL;
for (rid = 0; rid < rib_size; rid++) {
- if (*ribs[rid].name == '\0')
+ if (!rib_valid(rid))
continue;
ribs[rid].state = RECONF_NONE;
}
@@ -2904,7 +2904,7 @@ rde_softreconfig_in(struct rib_entry *re, void *bula)
rib = &ribs[i];
if (rib->state != RECONF_RELOAD)
continue;
- if (*rib->name == '\0')
+ if (!rib_valid(i))
break;
rde_filterstate_prep(&state, asp, prefix_nexthop(p),
@@ -3486,7 +3486,7 @@ network_add(struct network_config *nc, int flagstatic)
nc->prefixlen, 0))
peerself->prefix_cnt++;
for (i = RIB_LOC_START; i < rib_size; i++) {
- if (*ribs[i].name == '\0')
+ if (!rib_valid(i))
break;
rde_update_log("announce", i, peerself,
state.nexthop ? &state.nexthop->exit_nexthop : NULL,
@@ -3538,7 +3538,7 @@ network_delete(struct network_config *nc, int flagstatic)
}
for (i = RIB_LOC_START; i < rib_size; i++) {
- if (*ribs[i].name == '\0')
+ if (!rib_valid(i))
break;
if (prefix_remove(&ribs[i].rib, peerself, &nc->prefix,
nc->prefixlen, flags))
@@ -3607,7 +3607,7 @@ rde_shutdown(void)
/* free filters */
filterlist_free(out_rules);
for (i = 0; i < rib_size; i++) {
- if (*ribs[i].name == '\0')
+ if (!rib_valid(i))
break;
filterlist_free(ribs[i].in_rules);
}
diff --git a/usr.sbin/bgpd/rde.h b/usr.sbin/bgpd/rde.h
index 7fcf39daec6..0e30e476559 100644
--- a/usr.sbin/bgpd/rde.h
+++ b/usr.sbin/bgpd/rde.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.h,v 1.184 2018/08/06 08:13:31 claudio Exp $ */
+/* $OpenBSD: rde.h,v 1.185 2018/08/08 06:54:50 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and
@@ -466,6 +466,14 @@ re_rib(struct rib_entry *re)
return (struct rib *)((intptr_t)re->__rib & ~1);
}
+static inline int
+rib_valid(u_int16_t rid)
+{
+ if (rid >= rib_size || *ribs[rid].name == '\0')
+ return 0;
+ return 1;
+}
+
void path_init(u_int32_t);
void path_init(u_int32_t);
void path_shutdown(void);
diff --git a/usr.sbin/bgpd/rde_rib.c b/usr.sbin/bgpd/rde_rib.c
index 5b973ae2abc..80ca3d609e0 100644
--- a/usr.sbin/bgpd/rde_rib.c
+++ b/usr.sbin/bgpd/rde_rib.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde_rib.c,v 1.174 2018/08/06 08:13:31 claudio Exp $ */
+/* $OpenBSD: rde_rib.c,v 1.175 2018/08/08 06:54:50 benno Exp $ */
/*
* Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org>
@@ -86,7 +86,7 @@ rib_new(char *name, u_int rtableid, u_int16_t flags)
u_int16_t id;
for (id = 0; id < rib_size; id++) {
- if (*ribs[id].name == '\0')
+ if (!rib_valid(id))
break;
}