diff options
Diffstat (limited to 'usr.sbin/bgpd')
-rw-r--r-- | usr.sbin/bgpd/rde.h | 10 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde_decide.c | 4 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde_rib.c | 11 |
3 files changed, 15 insertions, 10 deletions
diff --git a/usr.sbin/bgpd/rde.h b/usr.sbin/bgpd/rde.h index c84f7ecf880..9b7f825dbbf 100644 --- a/usr.sbin/bgpd/rde.h +++ b/usr.sbin/bgpd/rde.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.h,v 1.110 2009/05/27 06:58:15 claudio Exp $ */ +/* $OpenBSD: rde.h,v 1.111 2009/06/01 21:20:17 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and @@ -256,7 +256,8 @@ struct rib_entry { struct prefix_head prefix_h; struct prefix *active; /* for fast access */ struct pt_entry *prefix; - struct rib *rib; + u_int16_t ribid; + u_int16_t flags; }; enum rib_state { @@ -270,10 +271,13 @@ struct rib { struct rib_tree rib; LIST_HEAD(, rib_context) ctxts; enum rib_state state; + u_int16_t flags; u_int16_t id; - u_char noevaluate; }; +#define F_RIB_ENTRYLOCK 0x0001 +#define F_RIB_NOEVALUATE 0x0002 + struct prefix { LIST_ENTRY(prefix) rib_l, path_l; struct rde_aspath *aspath; diff --git a/usr.sbin/bgpd/rde_decide.c b/usr.sbin/bgpd/rde_decide.c index b580bb46b76..58d6b05ec33 100644 --- a/usr.sbin/bgpd/rde_decide.c +++ b/usr.sbin/bgpd/rde_decide.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde_decide.c,v 1.54 2009/05/21 15:47:03 claudio Exp $ */ +/* $OpenBSD: rde_decide.c,v 1.55 2009/06/01 21:20:17 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> @@ -217,7 +217,7 @@ prefix_evaluate(struct prefix *p, struct rib_entry *re) { struct prefix *xp; - if (re->rib->noevaluate || rde_noevaluate()) { + if (re->flags & F_RIB_NOEVALUATE || rde_noevaluate()) { /* decision process is turned off */ if (p != NULL) LIST_INSERT_HEAD(&re->prefix_h, p, rib_l); diff --git a/usr.sbin/bgpd/rde_rib.c b/usr.sbin/bgpd/rde_rib.c index a4bd6b4a3f7..aa3b2d1eaaf 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.103 2009/05/27 06:58:15 claudio Exp $ */ +/* $OpenBSD: rde_rib.c,v 1.104 2009/06/01 21:20:17 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> @@ -60,7 +60,7 @@ rib_init(void) ribs[0].state = RIB_ACTIVE; ribs[0].id = 0; strlcpy(ribs[0].name, "Adj-RIB-In", sizeof("Adj-RIB-In")); - ribs[0].noevaluate = 1; + ribs[0].flags = F_RIB_NOEVALUATE; } u_int16_t @@ -160,7 +160,8 @@ rib_add(struct rib *rib, struct bgpd_addr *prefix, int prefixlen) LIST_INIT(&re->prefix_h); re->prefix = pte; - re->rib = rib; + re->flags = rib->flags; + re->ribid = rib->id; if (RB_INSERT(rib_tree, &rib->rib, re) != NULL) { log_warnx("rib_add: insert failed"); @@ -184,7 +185,7 @@ rib_remove(struct rib_entry *re) if (pt_empty(re->prefix)) pt_remove(re->prefix); - if (RB_REMOVE(rib_tree, &re->rib->rib, re) == NULL) + if (RB_REMOVE(rib_tree, &ribs[re->ribid].rib, re) == NULL) log_warnx("rib_remove: remove failed."); free(re); @@ -813,7 +814,7 @@ prefix_updateall(struct rde_aspath *asp, enum nexthop_state state, /* * skip non local-RIBs or RIBs that are flagged as noeval. */ - if (p->rib->rib->noevaluate) + if (p->rib->flags & F_RIB_NOEVALUATE) continue; if (oldstate == state && state == NEXTHOP_REACH) { |