xref: /minix/minix/net/lwip/rttree.h (revision bb9622b5)
1 #ifndef MINIX_NET_LWIP_RTTREE_H
2 #define MINIX_NET_LWIP_RTTREE_H
3 
4 /* Routing table node structure. */
5 struct rttree_node {
6 	struct rttree_node *rtn_child[2];	/* left child node */
7 	struct rttree_node *rtn_parent;		/* parent node */
8 	uint8_t rtn_type;			/* node type (RNT_) */
9 	uint8_t rtn_bits;			/* prefix bit count */
10 	uint8_t rtn_byte;			/* bits-derived byte index */
11 	uint8_t rtn_shift;			/* bits-derived shift count */
12 };
13 
14 #define RTNT_DATA	0			/* data node (entry) */
15 #define RTNT_LINK	1			/* link node, in use */
16 #define RTNT_FREE	2			/* link node, free */
17 
18 /* Routing table entry structure. */
19 struct rttree_entry {
20 	struct rttree_node rte_data;		/* data node - MUST be first */
21 	struct rttree_node rte_link;		/* link node */
22 	const void *rte_addr;			/* pointer to address */
23 	const void *rte_mask;			/* pointer to mask */
24 };
25 
26 /* Routing table structure. */
27 struct rttree {
28 	struct rttree_node *rtt_root;		/* root of the route tree */
29 	struct rttree_node *rtt_free;		/* free internal nodes list */
30 	uint8_t rtt_bits;			/* number of bits in address */
31 };
32 
33 #define rttree_get_addr(entry)		((entry)->rte_addr)
34 #define rttree_get_mask(entry)		((entry)->rte_mask)
35 #define rttree_get_prefix(entry)	((entry)->rte_data.rtn_bits)
36 
37 void rttree_init(struct rttree * tree, unsigned int bits);
38 struct rttree_entry *rttree_lookup_match(struct rttree * tree,
39 	const void * addr);
40 struct rttree_entry *rttree_lookup_host(struct rttree * tree,
41 	const void * addr);
42 struct rttree_entry *rttree_lookup_exact(struct rttree * tree,
43 	const void * addr, unsigned int prefix);
44 struct rttree_entry *rttree_enum(struct rttree * tree,
45 	struct rttree_entry * entry);
46 int rttree_add(struct rttree * tree, struct rttree_entry * entry,
47 	const void * addr, const void * mask, unsigned int prefix);
48 void rttree_delete(struct rttree * tree, struct rttree_entry * entry);
49 
50 #endif /* !MINIX_NET_LWIP_RTTREE_H */
51