Home | History | Annotate | Line # | Download | only in netinet
radix_ipf.h revision 1.2.4.3
      1  1.2.4.3  yamt /*	$NetBSD: radix_ipf.h,v 1.2.4.3 2012/10/30 17:22:20 yamt Exp $	*/
      2  1.2.4.2  yamt 
      3  1.2.4.2  yamt /*
      4  1.2.4.3  yamt  * Copyright (C) 2012 by Darren Reed.
      5  1.2.4.2  yamt  *
      6  1.2.4.2  yamt  * See the IPFILTER.LICENCE file for details on licencing.
      7  1.2.4.2  yamt  */
      8  1.2.4.2  yamt #ifndef __RADIX_IPF_H__
      9  1.2.4.2  yamt #define	__RADIX_IPF_H__
     10  1.2.4.2  yamt 
     11  1.2.4.2  yamt #ifndef U_32_T
     12  1.2.4.2  yamt typedef unsigned int u_32_t;
     13  1.2.4.2  yamt # define	U_32_T	1
     14  1.2.4.2  yamt #endif
     15  1.2.4.2  yamt 
     16  1.2.4.2  yamt typedef struct ipf_rdx_mask {
     17  1.2.4.2  yamt 	struct ipf_rdx_mask	*next;
     18  1.2.4.2  yamt 	struct ipf_rdx_node	*node;
     19  1.2.4.2  yamt 	u_32_t			*mask;
     20  1.2.4.2  yamt 	int			maskbitcount;
     21  1.2.4.2  yamt } ipf_rdx_mask_t;
     22  1.2.4.2  yamt 
     23  1.2.4.2  yamt typedef struct ipf_rdx_node {
     24  1.2.4.2  yamt 	struct ipf_rdx_node	*left;
     25  1.2.4.2  yamt 	struct ipf_rdx_node	*right;
     26  1.2.4.2  yamt 	struct ipf_rdx_node	*parent;
     27  1.2.4.2  yamt 	struct ipf_rdx_node	*dupkey;
     28  1.2.4.2  yamt 	struct ipf_rdx_mask	*masks;
     29  1.2.4.2  yamt 	struct ipf_rdx_mask	*mymask;
     30  1.2.4.2  yamt 	u_32_t			*addrkey;
     31  1.2.4.2  yamt 	u_32_t			*maskkey;
     32  1.2.4.2  yamt 	u_32_t			*addroff;
     33  1.2.4.2  yamt 	u_32_t			*maskoff;
     34  1.2.4.2  yamt 	u_32_t			lastmask;
     35  1.2.4.2  yamt 	u_32_t			bitmask;
     36  1.2.4.2  yamt 	int			offset;
     37  1.2.4.2  yamt 	int			index;
     38  1.2.4.2  yamt 	int			maskbitcount;
     39  1.2.4.2  yamt 	int			root;
     40  1.2.4.2  yamt #ifdef RDX_DEBUG
     41  1.2.4.2  yamt 	char			name[40];
     42  1.2.4.2  yamt #endif
     43  1.2.4.2  yamt } ipf_rdx_node_t;
     44  1.2.4.2  yamt 
     45  1.2.4.2  yamt struct ipf_rdx_head;
     46  1.2.4.2  yamt 
     47  1.2.4.2  yamt typedef	void		(* radix_walk_func_t)(ipf_rdx_node_t *, void *);
     48  1.2.4.2  yamt typedef	ipf_rdx_node_t	*(* idx_hamn_func_t)(struct ipf_rdx_head *,
     49  1.2.4.2  yamt 					     addrfamily_t *, addrfamily_t *,
     50  1.2.4.2  yamt 					     ipf_rdx_node_t *);
     51  1.2.4.2  yamt typedef	ipf_rdx_node_t	*(* idx_ham_func_t)(struct ipf_rdx_head *,
     52  1.2.4.2  yamt 					    addrfamily_t *, addrfamily_t *);
     53  1.2.4.2  yamt typedef	ipf_rdx_node_t	*(* idx_ha_func_t)(struct ipf_rdx_head *,
     54  1.2.4.2  yamt 					   addrfamily_t *);
     55  1.2.4.2  yamt typedef	void		(* idx_walk_func_t)(struct ipf_rdx_head *,
     56  1.2.4.2  yamt 					    radix_walk_func_t, void *);
     57  1.2.4.2  yamt 
     58  1.2.4.2  yamt typedef struct ipf_rdx_head {
     59  1.2.4.2  yamt 	ipf_rdx_node_t	*root;
     60  1.2.4.2  yamt 	ipf_rdx_node_t	nodes[3];
     61  1.2.4.2  yamt 	ipfmutex_t	lock;
     62  1.2.4.2  yamt 	idx_hamn_func_t	addaddr;	/* add addr/mask to tree */
     63  1.2.4.2  yamt 	idx_ham_func_t	deladdr;	/* delete addr/mask from tree */
     64  1.2.4.2  yamt 	idx_ham_func_t	lookup;		/* look for specific addr/mask */
     65  1.2.4.2  yamt 	idx_ha_func_t	matchaddr;	/* search tree for address match */
     66  1.2.4.2  yamt 	idx_walk_func_t	walktree;	/* walk entire tree */
     67  1.2.4.2  yamt } ipf_rdx_head_t;
     68  1.2.4.2  yamt 
     69  1.2.4.2  yamt typedef struct radix_softc {
     70  1.2.4.2  yamt 	u_char			*zeros;
     71  1.2.4.2  yamt 	u_char			*ones;
     72  1.2.4.2  yamt } radix_softc_t;
     73  1.2.4.2  yamt 
     74  1.2.4.2  yamt #undef	RADIX_NODE_HEAD_LOCK
     75  1.2.4.2  yamt #undef	RADIX_NODE_HEAD_UNLOCK
     76  1.2.4.2  yamt #ifdef	_KERNEL
     77  1.2.4.2  yamt # define	RADIX_NODE_HEAD_LOCK(x)		MUTEX_ENTER(&(x)->lock)
     78  1.2.4.2  yamt # define	RADIX_NODE_HEAD_UNLOCK(x)	MUTEX_UNLOCK(&(x)->lock)
     79  1.2.4.2  yamt #else
     80  1.2.4.2  yamt # define	RADIX_NODE_HEAD_LOCK(x)
     81  1.2.4.2  yamt # define	RADIX_NODE_HEAD_UNLOCK(x)
     82  1.2.4.2  yamt #endif
     83  1.2.4.2  yamt 
     84  1.2.4.2  yamt extern	void	*ipf_rx_create(void);
     85  1.2.4.2  yamt extern	int	ipf_rx_init(void *);
     86  1.2.4.2  yamt extern	void	ipf_rx_destroy(void *);
     87  1.2.4.2  yamt extern	int	ipf_rx_inithead(radix_softc_t *, ipf_rdx_head_t **);
     88  1.2.4.2  yamt extern	void	ipf_rx_freehead(ipf_rdx_head_t *);
     89  1.2.4.2  yamt extern	ipf_rdx_node_t *ipf_rx_addroute(ipf_rdx_head_t *,
     90  1.2.4.2  yamt 					     addrfamily_t *, addrfamily_t *,
     91  1.2.4.2  yamt 					     ipf_rdx_node_t *);
     92  1.2.4.2  yamt extern	ipf_rdx_node_t *ipf_rx_delete(ipf_rdx_head_t *, addrfamily_t *,
     93  1.2.4.2  yamt 					   addrfamily_t *);
     94  1.2.4.2  yamt extern	void	ipf_rx_walktree(ipf_rdx_head_t *, radix_walk_func_t,
     95  1.2.4.2  yamt 				     void *);
     96  1.2.4.2  yamt 
     97  1.2.4.2  yamt #endif /* __RADIX_IPF_H__ */
     98