2 * Copyright (C) 2012 by Darren Reed.
4 * See the IPFILTER.LICENCE file for details on licencing.
6 #ifndef __RADIX_IPF_H__
7 #define __RADIX_IPF_H__
10 typedef unsigned int u_32_t;
14 typedef struct ipf_rdx_mask {
15 struct ipf_rdx_mask *next;
16 struct ipf_rdx_node *node;
21 typedef struct ipf_rdx_node {
22 struct ipf_rdx_node *left;
23 struct ipf_rdx_node *right;
24 struct ipf_rdx_node *parent;
25 struct ipf_rdx_node *dupkey;
26 struct ipf_rdx_mask *masks;
27 struct ipf_rdx_mask *mymask;
45 typedef void (* radix_walk_func_t)(ipf_rdx_node_t *, void *);
46 typedef ipf_rdx_node_t *(* idx_hamn_func_t)(struct ipf_rdx_head *,
47 addrfamily_t *, addrfamily_t *,
49 typedef ipf_rdx_node_t *(* idx_ham_func_t)(struct ipf_rdx_head *,
50 addrfamily_t *, addrfamily_t *);
51 typedef ipf_rdx_node_t *(* idx_ha_func_t)(struct ipf_rdx_head *,
53 typedef void (* idx_walk_func_t)(struct ipf_rdx_head *,
54 radix_walk_func_t, void *);
56 typedef struct ipf_rdx_head {
58 ipf_rdx_node_t nodes[3];
60 idx_hamn_func_t addaddr; /* add addr/mask to tree */
61 idx_ham_func_t deladdr; /* delete addr/mask from tree */
62 idx_ham_func_t lookup; /* look for specific addr/mask */
63 idx_ha_func_t matchaddr; /* search tree for address match */
64 idx_walk_func_t walktree; /* walk entire tree */
67 typedef struct radix_softc {
72 #undef RADIX_NODE_HEAD_LOCK
73 #undef RADIX_NODE_HEAD_UNLOCK
75 # define RADIX_NODE_HEAD_LOCK(x) MUTEX_ENTER(&(x)->lock)
76 # define RADIX_NODE_HEAD_UNLOCK(x) MUTEX_UNLOCK(&(x)->lock)
78 # define RADIX_NODE_HEAD_LOCK(x)
79 # define RADIX_NODE_HEAD_UNLOCK(x)
82 extern void *ipf_rx_create __P((void));
83 extern int ipf_rx_init __P((void *));
84 extern void ipf_rx_destroy __P((void *));
85 extern int ipf_rx_inithead __P((radix_softc_t *, ipf_rdx_head_t **));
86 extern void ipf_rx_freehead __P((ipf_rdx_head_t *));
87 extern ipf_rdx_node_t *ipf_rx_addroute __P((ipf_rdx_head_t *,
88 addrfamily_t *, addrfamily_t *,
90 extern ipf_rdx_node_t *ipf_rx_delete __P((ipf_rdx_head_t *, addrfamily_t *,
92 extern void ipf_rx_walktree __P((ipf_rdx_head_t *, radix_walk_func_t,
95 #endif /* __RADIX_IPF_H__ */