/*
- * $Id$
+ * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
+
#ifndef SQUID_RADIX_H
-#define SQUID_RADIX_H
+#define SQUID_RADIX_H
/*
* Copyright (c) 1988, 1989, 1993
struct squid_radix_node {
- struct squid_radix_mask *rn_mklist; /* list of masks contained in subtree */
+ struct squid_radix_mask *rn_mklist; /* list of masks contained in subtree */
- struct squid_radix_node *rn_p; /* parent */
- short rn_b; /* bit offset; -1-index(netmask) */
- char rn_bmask; /* node: mask for bit test */
- unsigned char rn_flags; /* enumerated next */
-#define RNF_NORMAL 1 /* leaf contains normal route */
-#define RNF_ROOT 2 /* leaf is root leaf for tree */
-#define RNF_ACTIVE 4 /* This node is alive (for rtfree) */
+ struct squid_radix_node *rn_p; /* parent */
+ short rn_b; /* bit offset; -1-index(netmask) */
+ char rn_bmask; /* node: mask for bit test */
+ unsigned char rn_flags; /* enumerated next */
+#define RNF_NORMAL 1 /* leaf contains normal route */
+#define RNF_ROOT 2 /* leaf is root leaf for tree */
+#define RNF_ACTIVE 4 /* This node is alive (for rtfree) */
union {
- struct { /* leaf only data: */
- char *rn_Key; /* object of search */
- char *rn_Mask; /* netmask, if present */
+ struct { /* leaf only data: */
+ char *rn_Key; /* object of search */
+ char *rn_Mask; /* netmask, if present */
struct squid_radix_node *rn_Dupedkey;
} rn_leaf;
- struct { /* node only data: */
- int rn_Off; /* where to start compare */
+ struct { /* node only data: */
+ int rn_Off; /* where to start compare */
- struct squid_radix_node *rn_L; /* progeny */
+ struct squid_radix_node *rn_L; /* progeny */
- struct squid_radix_node *rn_R; /* progeny */
+ struct squid_radix_node *rn_R; /* progeny */
} rn_node;
} rn_u;
#ifdef RN_DEBUG
*/
struct squid_radix_mask {
- short rm_b; /* bit offset; -1-index(netmask) */
- char rm_unused; /* cf. rn_bmask */
- unsigned char rm_flags; /* cf. rn_flags */
+ short rm_b; /* bit offset; -1-index(netmask) */
+ char rm_unused; /* cf. rn_bmask */
+ unsigned char rm_flags; /* cf. rn_flags */
- struct squid_radix_mask *rm_mklist; /* more masks to try */
+ struct squid_radix_mask *rm_mklist; /* more masks to try */
union {
- char *rmu_mask; /* the mask */
+ char *rmu_mask; /* the mask */
- struct squid_radix_node *rmu_leaf; /* for normal routes */
+ struct squid_radix_node *rmu_leaf; /* for normal routes */
} rm_rmu;
- int rm_refs; /* # of references to this struct */
+ int rm_refs; /* # of references to this struct */
};
struct squid_radix_node_head {
struct squid_radix_node *rnh_treetop;
- int rnh_addrsize; /* permit, but not require fixed keys */
- int rnh_pktsize; /* permit, but not require fixed keys */
+ int rnh_addrsize; /* permit, but not require fixed keys */
+ int rnh_pktsize; /* permit, but not require fixed keys */
- struct squid_radix_node *(*rnh_addaddr) /* add based on sockaddr */
+ struct squid_radix_node *(*rnh_addaddr) /* add based on sockaddr */
(void *v, void *mask, struct squid_radix_node_head * head, struct squid_radix_node nodes[]);
- struct squid_radix_node *(*rnh_addpkt) /* add based on packet hdr */
+ struct squid_radix_node *(*rnh_addpkt) /* add based on packet hdr */
(void *v, void *mask, struct squid_radix_node_head * head, struct squid_radix_node nodes[]);
- struct squid_radix_node *(*rnh_deladdr) /* remove based on sockaddr */
-
+ struct squid_radix_node *(*rnh_deladdr) /* remove based on sockaddr */
(void *v, void *mask, struct squid_radix_node_head * head);
- struct squid_radix_node *(*rnh_delpkt) /* remove based on packet hdr */
-
+ struct squid_radix_node *(*rnh_delpkt) /* remove based on packet hdr */
(void *v, void *mask, struct squid_radix_node_head * head);
- struct squid_radix_node *(*rnh_matchaddr) /* locate based on sockaddr */
-
+ struct squid_radix_node *(*rnh_matchaddr) /* locate based on sockaddr */
(void *v, struct squid_radix_node_head * head);
- struct squid_radix_node *(*rnh_lookup) /* locate based on sockaddr */
+ struct squid_radix_node *(*rnh_lookup) /* locate based on sockaddr */
(void *v, void *mask, struct squid_radix_node_head * head);
- struct squid_radix_node *(*rnh_matchpkt) /* locate based on packet hdr */
-
+ struct squid_radix_node *(*rnh_matchpkt) /* locate based on packet hdr */
(void *v, struct squid_radix_node_head * head);
- int (*rnh_walktree) /* traverse tree */
-
+ int (*rnh_walktree) /* traverse tree */
(struct squid_radix_node_head * head, int (*f) (struct squid_radix_node *, void *), void *w);
- struct squid_radix_node rnh_nodes[3]; /* empty tree for common case */
+ struct squid_radix_node rnh_nodes[3]; /* empty tree for common case */
};
-
SQUIDCEXTERN void squid_rn_init (void);
SQUIDCEXTERN int squid_rn_inithead(struct squid_radix_node_head **, int);
SQUIDCEXTERN struct squid_radix_node *squid_rn_lookup(void *, void *, struct squid_radix_node_head *);
#endif /* SQUID_RADIX_H */
+