4 * Copyright (C) 2012 by Darren Reed.
6 * See the IPFILTER.LICENCE file for details on licencing.
8 #ifndef __RADIX_IPF_H__
9 #define __RADIX_IPF_H__
12 typedef unsigned int u_32_t;
16 typedef struct ipf_rdx_mask {
17 struct ipf_rdx_mask *next;
18 struct ipf_rdx_node *node;
23 typedef struct ipf_rdx_node {
24 struct ipf_rdx_node *left;
25 struct ipf_rdx_node *right;
26 struct ipf_rdx_node *parent;
27 struct ipf_rdx_node *dupkey;
28 struct ipf_rdx_mask *masks;
29 struct ipf_rdx_mask *mymask;
47 typedef void (* radix_walk_func_t)(ipf_rdx_node_t *, void *);
48 typedef ipf_rdx_node_t *(* idx_hamn_func_t)(struct ipf_rdx_head *,
49 addrfamily_t *, addrfamily_t *,
51 typedef ipf_rdx_node_t *(* idx_ham_func_t)(struct ipf_rdx_head *,
52 addrfamily_t *, addrfamily_t *);
53 typedef ipf_rdx_node_t *(* idx_ha_func_t)(struct ipf_rdx_head *,
55 typedef void (* idx_walk_func_t)(struct ipf_rdx_head *,
56 radix_walk_func_t, void *);
58 typedef struct ipf_rdx_head {
60 ipf_rdx_node_t nodes[3];
62 idx_hamn_func_t addaddr; /* add addr/mask to tree */
63 idx_ham_func_t deladdr; /* delete addr/mask from tree */
64 idx_ham_func_t lookup; /* look for specific addr/mask */
65 idx_ha_func_t matchaddr; /* search tree for address match */
66 idx_walk_func_t walktree; /* walk entire tree */
69 typedef struct radix_softc {
74 #undef RADIX_NODE_HEAD_LOCK
75 #undef RADIX_NODE_HEAD_UNLOCK
77 # define RADIX_NODE_HEAD_LOCK(x) MUTEX_ENTER(&(x)->lock)
78 # define RADIX_NODE_HEAD_UNLOCK(x) MUTEX_UNLOCK(&(x)->lock)
80 # define RADIX_NODE_HEAD_LOCK(x)
81 # define RADIX_NODE_HEAD_UNLOCK(x)
84 extern void *ipf_rx_create __P((void));
85 extern int ipf_rx_init __P((void *));
86 extern void ipf_rx_destroy __P((void *));
87 extern int ipf_rx_inithead __P((radix_softc_t *, ipf_rdx_head_t **));
88 extern void ipf_rx_freehead __P((ipf_rdx_head_t *));
89 extern ipf_rdx_node_t *ipf_rx_addroute __P((ipf_rdx_head_t *,
90 addrfamily_t *, addrfamily_t *,
92 extern ipf_rdx_node_t *ipf_rx_delete __P((ipf_rdx_head_t *, addrfamily_t *,
94 extern void ipf_rx_walktree __P((ipf_rdx_head_t *, radix_walk_func_t,
97 #endif /* __RADIX_IPF_H__ */