diff options
author | 2015-03-14 03:52:42 +0000 | |
---|---|---|
committer | 2015-03-14 03:52:42 +0000 | |
commit | 04c6d98ad7f285f9dd3dd20a0fbf4d8ae2504f66 (patch) | |
tree | 01d2899334e6b96cfaeafd08c40f6d14aca0a98a | |
parent | Remove some includes include-what-you-use claims don't (diff) | |
download | wireguard-openbsd-04c6d98ad7f285f9dd3dd20a0fbf4d8ae2504f66.tar.xz wireguard-openbsd-04c6d98ad7f285f9dd3dd20a0fbf4d8ae2504f66.zip |
rename rde_free_filter() to filterlist_free() and start using it outside
of the RDE to free the filterlists. Also refactor common code to merge
filterlists into its own function. Makes the code look nicer.
-rw-r--r-- | usr.sbin/bgpd/bgpd.h | 5 | ||||
-rw-r--r-- | usr.sbin/bgpd/parse.y | 55 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde.c | 10 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde.h | 3 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde_filter.c | 4 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde_rib.c | 6 |
6 files changed, 36 insertions, 47 deletions
diff --git a/usr.sbin/bgpd/bgpd.h b/usr.sbin/bgpd/bgpd.h index fb5ab850071..48672e68102 100644 --- a/usr.sbin/bgpd/bgpd.h +++ b/usr.sbin/bgpd/bgpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bgpd.h,v 1.283 2015/03/14 02:43:02 claudio Exp $ */ +/* $OpenBSD: bgpd.h,v 1.284 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -930,7 +930,8 @@ void control_cleanup(const char *); int control_imsg_relay(struct imsg *); /* config.c */ -int host(const char *, struct bgpd_addr *, u_int8_t *); +void filterlist_free(struct filter_head *); +int host(const char *, struct bgpd_addr *, u_int8_t *); /* kroute.c */ int kr_init(void); diff --git a/usr.sbin/bgpd/parse.y b/usr.sbin/bgpd/parse.y index ac954c8285e..971fcddd6ec 100644 --- a/usr.sbin/bgpd/parse.y +++ b/usr.sbin/bgpd/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.277 2015/03/14 02:43:02 claudio Exp $ */ +/* $OpenBSD: parse.y,v 1.278 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -135,6 +135,7 @@ int neighbor_consistent(struct peer *); int merge_filterset(struct filter_set_head *, struct filter_set *); void copy_filterset(struct filter_set_head *, struct filter_set_head *); +void merge_filter_lists(struct filter_head *, struct filter_head *); struct filter_rule *get_rule(enum action_types); int getcommunity(char *); @@ -2574,7 +2575,6 @@ parse_config(char *filename, struct bgpd_config *xconf, struct peer *p, *pnext; struct listen_addr *la; struct network *n; - struct filter_rule *r; struct rde_rib *rr; struct rdomain *rd; int errors = 0; @@ -2663,23 +2663,10 @@ parse_config(char *filename, struct bgpd_config *xconf, free(n); } - while ((r = TAILQ_FIRST(filter_l)) != NULL) { - TAILQ_REMOVE(filter_l, r, entry); - filterset_free(&r->set); - free(r); - } - - while ((r = TAILQ_FIRST(peerfilter_l)) != NULL) { - TAILQ_REMOVE(peerfilter_l, r, entry); - filterset_free(&r->set); - free(r); - } + filterlist_free(filter_l); + filterlist_free(peerfilter_l); + filterlist_free(groupfilter_l); - while ((r = TAILQ_FIRST(groupfilter_l)) != NULL) { - TAILQ_REMOVE(groupfilter_l, r, entry); - filterset_free(&r->set); - free(r); - } while ((rr = SIMPLEQ_FIRST(&ribnames)) != NULL) { SIMPLEQ_REMOVE_HEAD(&ribnames, entry); free(rr); @@ -2712,25 +2699,16 @@ parse_config(char *filename, struct bgpd_config *xconf, * together. Static group sets come first then peer sets * last normal filter rules. */ - while ((r = TAILQ_FIRST(groupfilter_l)) != NULL) { - TAILQ_REMOVE(groupfilter_l, r, entry); - TAILQ_INSERT_TAIL(xfilter_l, r, entry); - } - while ((r = TAILQ_FIRST(peerfilter_l)) != NULL) { - TAILQ_REMOVE(peerfilter_l, r, entry); - TAILQ_INSERT_TAIL(xfilter_l, r, entry); - } - while ((r = TAILQ_FIRST(filter_l)) != NULL) { - TAILQ_REMOVE(filter_l, r, entry); - TAILQ_INSERT_TAIL(xfilter_l, r, entry); - } + merge_filter_lists(xfilter_l, groupfilter_l); + merge_filter_lists(xfilter_l, peerfilter_l); + merge_filter_lists(xfilter_l, filter_l); + free(filter_l); + free(peerfilter_l); + free(groupfilter_l); } free(conf); free(mrtconf); - free(filter_l); - free(peerfilter_l); - free(groupfilter_l); return (errors ? -1 : 0); } @@ -3563,6 +3541,17 @@ copy_filterset(struct filter_set_head *source, struct filter_set_head *dest) } } +void +merge_filter_lists(struct filter_head *dst, struct filter_head *src) +{ + struct filter_rule *r; + + while ((r = TAILQ_FIRST(src)) != NULL) { + TAILQ_REMOVE(src, r, entry); + TAILQ_INSERT_TAIL(dst, r, entry); + } +} + struct filter_rule * get_rule(enum action_types type) { diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c index 723fabe1686..8624461f803 100644 --- a/usr.sbin/bgpd/rde.c +++ b/usr.sbin/bgpd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.329 2014/10/08 16:15:37 deraadt Exp $ */ +/* $OpenBSD: rde.c,v 1.330 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -2669,12 +2669,12 @@ rde_reload_done(void) /* dump the full table to neighbors that changed rib */ peer_dump(peer->conf.id, AID_UNSPEC); } - rde_free_filter(out_rules_tmp); + filterlist_free(out_rules_tmp); out_rules_tmp = NULL; for (rid = 0; rid < rib_size; rid++) { if (*ribs[rid].name == '\0') continue; - rde_free_filter(ribs[rid].in_rules_tmp); + filterlist_free(ribs[rid].in_rules_tmp); ribs[rid].in_rules_tmp = NULL; ribs[rid].state = RECONF_NONE; } @@ -3542,11 +3542,11 @@ rde_shutdown(void) peer_down(p->conf.id); /* free filters */ - rde_free_filter(out_rules); + filterlist_free(out_rules); for (i = 0; i < rib_size; i++) { if (*ribs[i].name == '\0') break; - rde_free_filter(ribs[i].in_rules); + filterlist_free(ribs[i].in_rules); } nexthop_shutdown(); diff --git a/usr.sbin/bgpd/rde.h b/usr.sbin/bgpd/rde.h index abafc19b10f..02b755d0888 100644 --- a/usr.sbin/bgpd/rde.h +++ b/usr.sbin/bgpd/rde.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.h,v 1.147 2013/08/14 20:34:26 claudio Exp $ */ +/* $OpenBSD: rde.h,v 1.148 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> and @@ -326,7 +326,6 @@ u_int32_t rde_local_as(void); int rde_noevaluate(void); int rde_decisionflags(void); int rde_as4byte(struct rde_peer *); -void rde_free_filter(struct filter_head *); /* rde_attr.c */ int attr_write(void *, u_int16_t, u_int8_t, u_int8_t, void *, diff --git a/usr.sbin/bgpd/rde_filter.c b/usr.sbin/bgpd/rde_filter.c index 68bfd0831d6..c75e61feae2 100644 --- a/usr.sbin/bgpd/rde_filter.c +++ b/usr.sbin/bgpd/rde_filter.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde_filter.c,v 1.71 2014/01/24 06:07:13 phessler Exp $ */ +/* $OpenBSD: rde_filter.c,v 1.72 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2004 Claudio Jeker <claudio@openbsd.org> @@ -440,7 +440,7 @@ rde_filter_equal(struct filter_head *a, struct filter_head *b, } void -rde_free_filter(struct filter_head *fh) +filterlist_free(struct filter_head *fh) { struct filter_rule *r; diff --git a/usr.sbin/bgpd/rde_rib.c b/usr.sbin/bgpd/rde_rib.c index 45e1ce4e304..fd2fb224e22 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.141 2014/12/18 19:28:44 tedu Exp $ */ +/* $OpenBSD: rde_rib.c,v 1.142 2015/03/14 03:52:42 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Claudio Jeker <claudio@openbsd.org> @@ -150,8 +150,8 @@ rib_free(struct rib *rib) break; } } - rde_free_filter(rib->in_rules_tmp); - rde_free_filter(rib->in_rules); + filterlist_free(rib->in_rules_tmp); + filterlist_free(rib->in_rules); bzero(rib, sizeof(struct rib)); } |