hide rib[] internals in new rib_valid() function
authorbenno <benno@openbsd.org>
Wed, 8 Aug 2018 06:54:50 +0000 (06:54 +0000)
committerbenno <benno@openbsd.org>
Wed, 8 Aug 2018 06:54:50 +0000 (06:54 +0000)
ok claudio@

usr.sbin/bgpd/rde.c
usr.sbin/bgpd/rde.h
usr.sbin/bgpd/rde_rib.c

index 0257653..79cf5a4 100644 (file)
@@ -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);
        }
index 7fcf39d..0e30e47 100644 (file)
@@ -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);
index 5b973ae..80ca3d6 100644 (file)
@@ -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;
        }