net: constantify radix.c functions
Mark dst/mask public API functions fields as const to clearly indicate that these parameters are not modified or stored in the datastructure. Differential Revision: https://reviews.freebsd.org/D35971 MFC after: 2 weeks
This commit is contained in:
parent
2717e958df
commit
97ffaff859
@ -58,9 +58,9 @@ static struct radix_node
|
|||||||
*rn_insert(void *, struct radix_head *, int *,
|
*rn_insert(void *, struct radix_head *, int *,
|
||||||
struct radix_node [2]),
|
struct radix_node [2]),
|
||||||
*rn_newpair(void *, int, struct radix_node[2]),
|
*rn_newpair(void *, int, struct radix_node[2]),
|
||||||
*rn_search(void *, struct radix_node *),
|
*rn_search(const void *, struct radix_node *),
|
||||||
*rn_search_m(void *, struct radix_node *, void *);
|
*rn_search_m(const void *, struct radix_node *, void *);
|
||||||
static struct radix_node *rn_addmask(void *, struct radix_mask_head *, int,int);
|
static struct radix_node *rn_addmask(const void *, struct radix_mask_head *, int,int);
|
||||||
|
|
||||||
static void rn_detachhead_internal(struct radix_head *);
|
static void rn_detachhead_internal(struct radix_head *);
|
||||||
|
|
||||||
@ -74,11 +74,11 @@ static char rn_ones[RADIX_MAX_KEY_LEN] = {
|
|||||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int rn_lexobetter(void *m_arg, void *n_arg);
|
static int rn_lexobetter(const void *m_arg, const void *n_arg);
|
||||||
static struct radix_mask *
|
static struct radix_mask *
|
||||||
rn_new_radix_mask(struct radix_node *tt,
|
rn_new_radix_mask(struct radix_node *tt,
|
||||||
struct radix_mask *next);
|
struct radix_mask *next);
|
||||||
static int rn_satisfies_leaf(char *trial, struct radix_node *leaf,
|
static int rn_satisfies_leaf(const char *trial, struct radix_node *leaf,
|
||||||
int skip);
|
int skip);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -142,10 +142,10 @@ static int rn_satisfies_leaf(char *trial, struct radix_node *leaf,
|
|||||||
* Search a node in the tree matching the key.
|
* Search a node in the tree matching the key.
|
||||||
*/
|
*/
|
||||||
static struct radix_node *
|
static struct radix_node *
|
||||||
rn_search(void *v_arg, struct radix_node *head)
|
rn_search(const void *v_arg, struct radix_node *head)
|
||||||
{
|
{
|
||||||
struct radix_node *x;
|
struct radix_node *x;
|
||||||
caddr_t v;
|
c_caddr_t v;
|
||||||
|
|
||||||
for (x = head, v = v_arg; x->rn_bit >= 0;) {
|
for (x = head, v = v_arg; x->rn_bit >= 0;) {
|
||||||
if (x->rn_bmask & v[x->rn_offset])
|
if (x->rn_bmask & v[x->rn_offset])
|
||||||
@ -161,10 +161,10 @@ rn_search(void *v_arg, struct radix_node *head)
|
|||||||
* XXX note this function is used only once.
|
* XXX note this function is used only once.
|
||||||
*/
|
*/
|
||||||
static struct radix_node *
|
static struct radix_node *
|
||||||
rn_search_m(void *v_arg, struct radix_node *head, void *m_arg)
|
rn_search_m(const void *v_arg, struct radix_node *head, void *m_arg)
|
||||||
{
|
{
|
||||||
struct radix_node *x;
|
struct radix_node *x;
|
||||||
caddr_t v = v_arg, m = m_arg;
|
c_caddr_t v = v_arg, m = m_arg;
|
||||||
|
|
||||||
for (x = head; x->rn_bit >= 0;) {
|
for (x = head; x->rn_bit >= 0;) {
|
||||||
if ((x->rn_bmask & m[x->rn_offset]) &&
|
if ((x->rn_bmask & m[x->rn_offset]) &&
|
||||||
@ -177,10 +177,10 @@ rn_search_m(void *v_arg, struct radix_node *head, void *m_arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rn_refines(void *m_arg, void *n_arg)
|
rn_refines(const void *m_arg, const void *n_arg)
|
||||||
{
|
{
|
||||||
caddr_t m = m_arg, n = n_arg;
|
c_caddr_t m = m_arg, n = n_arg;
|
||||||
caddr_t lim, lim2 = lim = n + LEN(n);
|
c_caddr_t lim, lim2 = lim = n + LEN(n);
|
||||||
int longer = LEN(n++) - LEN(m++);
|
int longer = LEN(n++) - LEN(m++);
|
||||||
int masks_are_equal = 1;
|
int masks_are_equal = 1;
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ rn_refines(void *m_arg, void *n_arg)
|
|||||||
* from host routes.
|
* from host routes.
|
||||||
*/
|
*/
|
||||||
struct radix_node *
|
struct radix_node *
|
||||||
rn_lookup(void *v_arg, void *m_arg, struct radix_head *head)
|
rn_lookup(const void *v_arg, const void *m_arg, struct radix_head *head)
|
||||||
{
|
{
|
||||||
struct radix_node *x;
|
struct radix_node *x;
|
||||||
caddr_t netmask;
|
caddr_t netmask;
|
||||||
@ -250,10 +250,10 @@ rn_lookup(void *v_arg, void *m_arg, struct radix_head *head)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
rn_satisfies_leaf(char *trial, struct radix_node *leaf, int skip)
|
rn_satisfies_leaf(const char *trial, struct radix_node *leaf, int skip)
|
||||||
{
|
{
|
||||||
char *cp = trial, *cp2 = leaf->rn_key, *cp3 = leaf->rn_mask;
|
const char *cp = trial, *cp2 = leaf->rn_key, *cp3 = leaf->rn_mask;
|
||||||
char *cplim;
|
const char *cplim;
|
||||||
int length = min(LEN(cp), LEN(cp2));
|
int length = min(LEN(cp), LEN(cp2));
|
||||||
|
|
||||||
if (cp3 == NULL)
|
if (cp3 == NULL)
|
||||||
@ -271,12 +271,12 @@ rn_satisfies_leaf(char *trial, struct radix_node *leaf, int skip)
|
|||||||
* Search for longest-prefix match in given @head
|
* Search for longest-prefix match in given @head
|
||||||
*/
|
*/
|
||||||
struct radix_node *
|
struct radix_node *
|
||||||
rn_match(void *v_arg, struct radix_head *head)
|
rn_match(const void *v_arg, struct radix_head *head)
|
||||||
{
|
{
|
||||||
caddr_t v = v_arg;
|
c_caddr_t v = v_arg;
|
||||||
struct radix_node *t = head->rnh_treetop, *x;
|
struct radix_node *t = head->rnh_treetop, *x;
|
||||||
caddr_t cp = v, cp2;
|
c_caddr_t cp = v, cp2;
|
||||||
caddr_t cplim;
|
c_caddr_t cplim;
|
||||||
struct radix_node *saved_t, *top = t;
|
struct radix_node *saved_t, *top = t;
|
||||||
int off = t->rn_offset, vlen = LEN(cp), matched_off;
|
int off = t->rn_offset, vlen = LEN(cp), matched_off;
|
||||||
int test, b, rn_bit;
|
int test, b, rn_bit;
|
||||||
@ -498,10 +498,11 @@ rn_insert(void *v_arg, struct radix_head *head, int *dupentry,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct radix_node *
|
static struct radix_node *
|
||||||
rn_addmask(void *n_arg, struct radix_mask_head *maskhead, int search, int skip)
|
rn_addmask(const void *n_arg, struct radix_mask_head *maskhead, int search, int skip)
|
||||||
{
|
{
|
||||||
unsigned char *netmask = n_arg;
|
const unsigned char *netmask = n_arg;
|
||||||
unsigned char *cp, *cplim;
|
const unsigned char *c, *clim;
|
||||||
|
unsigned char *cp;
|
||||||
struct radix_node *x;
|
struct radix_node *x;
|
||||||
int b = 0, mlen, j;
|
int b = 0, mlen, j;
|
||||||
int maskduplicated, isnormal;
|
int maskduplicated, isnormal;
|
||||||
@ -552,17 +553,17 @@ rn_addmask(void *n_arg, struct radix_mask_head *maskhead, int search, int skip)
|
|||||||
* a non-contiguous mask.
|
* a non-contiguous mask.
|
||||||
*/
|
*/
|
||||||
#define CONTIG(_c) (((~(_c) + 1) & (_c)) == (unsigned char)(~(_c) + 1))
|
#define CONTIG(_c) (((~(_c) + 1) & (_c)) == (unsigned char)(~(_c) + 1))
|
||||||
cplim = netmask + mlen;
|
clim = netmask + mlen;
|
||||||
isnormal = 1;
|
isnormal = 1;
|
||||||
for (cp = netmask + skip; (cp < cplim) && *(u_char *)cp == 0xff;)
|
for (c = netmask + skip; (c < clim) && *(const u_char *)c == 0xff;)
|
||||||
cp++;
|
c++;
|
||||||
if (cp != cplim) {
|
if (c != clim) {
|
||||||
for (j = 0x80; (j & *cp) != 0; j >>= 1)
|
for (j = 0x80; (j & *c) != 0; j >>= 1)
|
||||||
b++;
|
b++;
|
||||||
if (!CONTIG(*cp) || cp != (cplim - 1))
|
if (!CONTIG(*c) || c != (clim - 1))
|
||||||
isnormal = 0;
|
isnormal = 0;
|
||||||
}
|
}
|
||||||
b += (cp - netmask) << 3;
|
b += (c - netmask) << 3;
|
||||||
x->rn_bit = -1 - b;
|
x->rn_bit = -1 - b;
|
||||||
if (isnormal)
|
if (isnormal)
|
||||||
x->rn_flags |= RNF_NORMAL;
|
x->rn_flags |= RNF_NORMAL;
|
||||||
@ -570,9 +571,9 @@ rn_addmask(void *n_arg, struct radix_mask_head *maskhead, int search, int skip)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int /* XXX: arbitrary ordering for non-contiguous masks */
|
static int /* XXX: arbitrary ordering for non-contiguous masks */
|
||||||
rn_lexobetter(void *m_arg, void *n_arg)
|
rn_lexobetter(const void *m_arg, const void *n_arg)
|
||||||
{
|
{
|
||||||
u_char *mp = m_arg, *np = n_arg, *lim;
|
const u_char *mp = m_arg, *np = n_arg, *lim;
|
||||||
|
|
||||||
if (LEN(mp) > LEN(np))
|
if (LEN(mp) > LEN(np))
|
||||||
return (1); /* not really, but need to check longer one first */
|
return (1); /* not really, but need to check longer one first */
|
||||||
@ -606,10 +607,10 @@ rn_new_radix_mask(struct radix_node *tt, struct radix_mask *next)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct radix_node *
|
struct radix_node *
|
||||||
rn_addroute(void *v_arg, void *n_arg, struct radix_head *head,
|
rn_addroute(void *v_arg, const void *n_arg, struct radix_head *head,
|
||||||
struct radix_node treenodes[2])
|
struct radix_node treenodes[2])
|
||||||
{
|
{
|
||||||
caddr_t v = (caddr_t)v_arg, netmask = (caddr_t)n_arg;
|
caddr_t v = (caddr_t)v_arg, netmask = NULL;
|
||||||
struct radix_node *t, *x = NULL, *tt;
|
struct radix_node *t, *x = NULL, *tt;
|
||||||
struct radix_node *saved_tt, *top = head->rnh_treetop;
|
struct radix_node *saved_tt, *top = head->rnh_treetop;
|
||||||
short b = 0, b_leaf = 0;
|
short b = 0, b_leaf = 0;
|
||||||
@ -624,8 +625,8 @@ rn_addroute(void *v_arg, void *n_arg, struct radix_head *head,
|
|||||||
* the mask to speed avoiding duplicate references at
|
* the mask to speed avoiding duplicate references at
|
||||||
* nodes and possibly save time in calculating indices.
|
* nodes and possibly save time in calculating indices.
|
||||||
*/
|
*/
|
||||||
if (netmask) {
|
if (n_arg) {
|
||||||
x = rn_addmask(netmask, head->rnh_masks, 0, top->rn_offset);
|
x = rn_addmask(n_arg, head->rnh_masks, 0, top->rn_offset);
|
||||||
if (x == NULL)
|
if (x == NULL)
|
||||||
return (0);
|
return (0);
|
||||||
b_leaf = x->rn_bit;
|
b_leaf = x->rn_bit;
|
||||||
@ -763,12 +764,13 @@ rn_addroute(void *v_arg, void *n_arg, struct radix_head *head,
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct radix_node *
|
struct radix_node *
|
||||||
rn_delete(void *v_arg, void *netmask_arg, struct radix_head *head)
|
rn_delete(const void *v_arg, const void *netmask_arg, struct radix_head *head)
|
||||||
{
|
{
|
||||||
struct radix_node *t, *p, *x, *tt;
|
struct radix_node *t, *p, *x, *tt;
|
||||||
struct radix_mask *m, *saved_m, **mp;
|
struct radix_mask *m, *saved_m, **mp;
|
||||||
struct radix_node *dupedkey, *saved_tt, *top;
|
struct radix_node *dupedkey, *saved_tt, *top;
|
||||||
caddr_t v, netmask;
|
c_caddr_t v;
|
||||||
|
c_caddr_t netmask;
|
||||||
int b, head_off, vlen;
|
int b, head_off, vlen;
|
||||||
|
|
||||||
v = v_arg;
|
v = v_arg;
|
||||||
|
@ -106,13 +106,13 @@ struct radix_mask {
|
|||||||
struct radix_head;
|
struct radix_head;
|
||||||
|
|
||||||
typedef int walktree_f_t(struct radix_node *, void *);
|
typedef int walktree_f_t(struct radix_node *, void *);
|
||||||
typedef struct radix_node *rn_matchaddr_f_t(void *v,
|
typedef struct radix_node *rn_matchaddr_f_t(const void *v,
|
||||||
struct radix_head *head);
|
struct radix_head *head);
|
||||||
typedef struct radix_node *rn_addaddr_f_t(void *v, void *mask,
|
typedef struct radix_node *rn_addaddr_f_t(void *v, const void *mask,
|
||||||
struct radix_head *head, struct radix_node nodes[]);
|
struct radix_head *head, struct radix_node nodes[]);
|
||||||
typedef struct radix_node *rn_deladdr_f_t(void *v, void *mask,
|
typedef struct radix_node *rn_deladdr_f_t(const void *v, const void *mask,
|
||||||
struct radix_head *head);
|
struct radix_head *head);
|
||||||
typedef struct radix_node *rn_lookup_f_t(void *v, void *mask,
|
typedef struct radix_node *rn_lookup_f_t(const void *v, const void *mask,
|
||||||
struct radix_head *head);
|
struct radix_head *head);
|
||||||
typedef int rn_walktree_t(struct radix_head *head, walktree_f_t *f,
|
typedef int rn_walktree_t(struct radix_head *head, walktree_f_t *f,
|
||||||
void *w);
|
void *w);
|
||||||
@ -176,13 +176,13 @@ void rn_inithead_internal(struct radix_head *rh, struct radix_node *base_nodes,
|
|||||||
|
|
||||||
int rn_inithead(void **, int);
|
int rn_inithead(void **, int);
|
||||||
int rn_detachhead(void **);
|
int rn_detachhead(void **);
|
||||||
int rn_refines(void *, void *);
|
int rn_refines(const void *, const void *);
|
||||||
struct radix_node *rn_addroute(void *, void *, struct radix_head *,
|
struct radix_node *rn_addroute(void *, const void *, struct radix_head *,
|
||||||
struct radix_node[2]);
|
struct radix_node[2]);
|
||||||
struct radix_node *rn_delete(void *, void *, struct radix_head *);
|
struct radix_node *rn_delete(const void *, const void *, struct radix_head *);
|
||||||
struct radix_node *rn_lookup (void *v_arg, void *m_arg,
|
struct radix_node *rn_lookup (const void *v_arg, const void *m_arg,
|
||||||
struct radix_head *head);
|
struct radix_head *head);
|
||||||
struct radix_node *rn_match(void *, struct radix_head *);
|
struct radix_node *rn_match(const void *, struct radix_head *);
|
||||||
int rn_walktree_from(struct radix_head *h, void *a, void *m,
|
int rn_walktree_from(struct radix_head *h, void *a, void *m,
|
||||||
walktree_f_t *f, void *w);
|
walktree_f_t *f, void *w);
|
||||||
int rn_walktree(struct radix_head *, walktree_f_t *, void *);
|
int rn_walktree(struct radix_head *, walktree_f_t *, void *);
|
||||||
|
Loading…
Reference in New Issue
Block a user