diff options
author | 2014-01-19 09:52:25 +0000 | |
---|---|---|
committer | 2014-01-19 09:52:25 +0000 | |
commit | c39094b898c563a5961f093f4086fd5f15e733ea (patch) | |
tree | 5bc43bc70e97be6d596c211bd269d791845abb7e | |
parent | Extend the initial pf ruleset to explicitly allow dhcp / bootp and dhcpv6. (diff) | |
download | wireguard-openbsd-c39094b898c563a5961f093f4086fd5f15e733ea.tar.xz wireguard-openbsd-c39094b898c563a5961f093f4086fd5f15e733ea.zip |
More cleanup in radix.c. Kill the rt_mkfreelist and replace it with a
radix_mask pool. With input and OK mikeb@ and henning@
-rw-r--r-- | sys/net/radix.c | 30 | ||||
-rw-r--r-- | sys/net/radix.h | 6 |
2 files changed, 13 insertions, 23 deletions
diff --git a/sys/net/radix.c b/sys/net/radix.c index e839c77c166..f9943c3be6f 100644 --- a/sys/net/radix.c +++ b/sys/net/radix.c @@ -1,4 +1,4 @@ -/* $OpenBSD: radix.c,v 1.35 2014/01/19 04:04:36 claudio Exp $ */ +/* $OpenBSD: radix.c,v 1.36 2014/01/19 09:52:25 claudio Exp $ */ /* $NetBSD: radix.c,v 1.20 2003/08/07 16:32:56 agc Exp $ */ /* @@ -41,6 +41,7 @@ #include <sys/malloc.h> #include <sys/domain.h> #include <sys/syslog.h> +#include <sys/pool.h> #include <net/radix.h> #ifndef SMALL_KERNEL @@ -50,12 +51,13 @@ #endif int max_keylen; -struct radix_mask *rn_mkfreelist; struct radix_node_head *mask_rnhead; static char *addmask_key; static char normal_chars[] = {0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, -1}; static char *rn_zeros, *rn_ones; +struct pool rtmask_pool; /* pool for radix_mask structures */ + #define rn_masktop (mask_rnhead->rnh_treetop) static int rn_satisfies_leaf(char *, struct radix_node *, int); @@ -69,20 +71,6 @@ struct radix_node *rn_newpair(void *, int, struct radix_node[2]); struct radix_node *rn_search(void *, struct radix_node *); struct radix_node *rn_search_m(void *, struct radix_node *, void *); -#define MKGet(m) do { \ - if (rn_mkfreelist) { \ - m = rn_mkfreelist; \ - rn_mkfreelist = (m)->rm_mklist; \ - } else \ - m = malloc(sizeof (*(m)), M_RTABLE, M_NOWAIT); \ -} while (0) - -#define MKFree(m) do { \ - (m)->rm_mklist = rn_mkfreelist; \ - rn_mkfreelist = (m); \ -} while (0) - - /* * The data structure for the keys is a radix tree with one way * branching removed. The index rn_b at an internal node n represents a bit @@ -506,7 +494,7 @@ rn_new_radix_mask(struct radix_node *tt, struct radix_mask *next) { struct radix_mask *m; - MKGet(m); + m = pool_get(&rtmask_pool, PR_NOWAIT | PR_ZERO); if (m == NULL) { log(LOG_ERR, "Mask for route not entered\n"); return (0); @@ -841,7 +829,7 @@ rn_delete(void *v_arg, void *netmask_arg, struct radix_node_head *head, for (mp = &x->rn_mklist; (m = *mp); mp = &m->rm_mklist) if (m == saved_m) { *mp = m->rm_mklist; - MKFree(m); + pool_put(&rtmask_pool, m); break; } if (m == NULL) { @@ -928,7 +916,7 @@ on1: struct radix_mask *mm = m->rm_mklist; x->rn_mklist = 0; if (--(m->rm_refs) < 0) - MKFree(m); + pool_put(&rtmask_pool, m); else if (m->rm_flags & RNF_NORMAL) /* * don't progress because this @@ -1046,11 +1034,13 @@ rn_inithead0(struct radix_node_head *rnh, int off) } void -rn_init() +rn_init(void) { char *cp, *cplim; struct domain *dom; + pool_init(&rtmask_pool, sizeof(struct radix_mask), 0, 0, 0, "rtmask", + NULL); for (dom = domains; dom; dom = dom->dom_next) if (dom->dom_maxrtkey > max_keylen) max_keylen = dom->dom_maxrtkey; diff --git a/sys/net/radix.h b/sys/net/radix.h index 4d7c54577ad..23c4e1a43f8 100644 --- a/sys/net/radix.h +++ b/sys/net/radix.h @@ -1,4 +1,4 @@ -/* $OpenBSD: radix.h,v 1.22 2014/01/10 14:29:08 tedu Exp $ */ +/* $OpenBSD: radix.h,v 1.23 2014/01/19 09:52:25 claudio Exp $ */ /* $NetBSD: radix.h,v 1.8 1996/02/13 22:00:37 christos Exp $ */ /* @@ -78,7 +78,7 @@ struct radix_node { * Annotations to tree concerning potential routes applying to subtrees. */ -extern struct radix_mask { +struct radix_mask { short rm_b; /* bit offset; -1-index(netmask) */ char rm_unused; /* cf. rn_bmask */ u_char rm_flags; /* cf. rn_flags */ @@ -88,7 +88,7 @@ extern struct radix_mask { struct radix_node *rmu_leaf; /* for normal routes */ } rm_rmu; int rm_refs; /* # of references to this struct */ -} *rn_mkfreelist; +}; #define rm_mask rm_rmu.rmu_mask #define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */ |