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