RTEMS CPU Kit with SuperCore
4.11.3
Main Page
Related Pages
Modules
+
Data Structures
Data Structures
+
Data Fields
+
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
+
Files
File List
+
Globals
+
All
_
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Functions
_
a
b
c
d
e
f
g
i
j
l
m
n
o
p
q
r
s
t
u
v
w
+
Variables
_
b
c
d
i
r
+
Typedefs
a
b
c
d
f
h
i
m
o
p
q
r
s
t
u
w
x
+
Enumerations
b
c
d
e
h
i
m
o
p
r
s
t
w
+
Enumerator
c
i
m
p
r
s
t
w
+
Macros
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
w
mnt
data0
chrisj
rtems
releases
rtems-release.git
4.11.3
ws-rtems
rtems-4.11.3
cpukit
libnetworking
net
radix.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1988, 1989, 1993
3
* The Regents of the University of California. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 4. Neither the name of the University nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* @(#)radix.h 8.2 (Berkeley) 10/31/94
30
* $FreeBSD: src/sys/net/radix.h,v 1.25 2004/04/18 11:48:35 luigi Exp $
31
*/
32
33
#ifndef _RADIX_H_
34
#define _RADIX_H_
35
36
/*
37
* Radix search tree node layout.
38
*/
39
40
struct
radix_node
{
41
struct
radix_mask
*rn_mklist;
/* list of masks contained in subtree */
42
struct
radix_node
*rn_parent;
/* parent */
43
short
rn_bit;
/* bit offset; -1-index(netmask) */
44
char
rn_bmask;
/* node: mask for bit test*/
45
u_char rn_flags;
/* enumerated next */
46
#define RNF_NORMAL 1
/* leaf contains normal route */
47
#define RNF_ROOT 2
/* leaf is root leaf for tree */
48
#define RNF_ACTIVE 4
/* This node is alive (for rtfree) */
49
union
{
50
struct
{
/* leaf only data: */
51
caddr_t rn_Key;
/* object of search */
52
caddr_t rn_Mask;
/* netmask, if present */
53
struct
radix_node
*rn_Dupedkey;
54
} rn_leaf;
55
struct
{
/* node only data: */
56
int
rn_Off;
/* where to start compare */
57
struct
radix_node
*rn_L;
/* progeny */
58
struct
radix_node
*rn_R;
/* progeny */
59
} rn_node;
60
} rn_u;
61
#ifdef RN_DEBUG
62
int
rn_info;
63
struct
radix_node
*rn_twin;
64
struct
radix_node
*rn_ybro;
65
#endif
66
};
67
68
#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
69
#define rn_key rn_u.rn_leaf.rn_Key
70
#define rn_mask rn_u.rn_leaf.rn_Mask
71
#define rn_offset rn_u.rn_node.rn_Off
72
#define rn_left rn_u.rn_node.rn_L
73
#define rn_right rn_u.rn_node.rn_R
74
75
/*
76
* Annotations to tree concerning potential routes applying to subtrees.
77
*/
78
79
struct
radix_mask
{
80
short
rm_bit;
/* bit offset; -1-index(netmask) */
81
char
rm_unused;
/* cf. rn_bmask */
82
u_char rm_flags;
/* cf. rn_flags */
83
struct
radix_mask
*rm_mklist;
/* more masks to try */
84
union
{
85
caddr_t rmu_mask;
/* the mask */
86
struct
radix_node
*rmu_leaf;
/* for normal routes */
87
} rm_rmu;
88
int
rm_refs;
/* # of references to this struct */
89
};
90
91
#define rm_mask rm_rmu.rmu_mask
92
#define rm_leaf rm_rmu.rmu_leaf
/* extra field would make 32 bytes */
93
94
#define MKGet(m) {\
95
if (rn_mkfreelist) {\
96
m = rn_mkfreelist; \
97
rn_mkfreelist = (m)->rm_mklist; \
98
} else \
99
R_Malloc(m, struct radix_mask *, sizeof (*(m))); }\
100
101
#define MKFree(m) { (m)->rm_mklist = rn_mkfreelist; rn_mkfreelist = (m);}
102
103
typedef
int
walktree_f_t(
struct
radix_node
*,
void
*);
104
105
struct
radix_node_head
{
106
struct
radix_node
*rnh_treetop;
107
int
rnh_addrsize;
/* permit, but not require fixed keys */
108
int
rnh_pktsize;
/* permit, but not require fixed keys */
109
struct
radix_node
*(*rnh_addaddr)
/* add based on sockaddr */
110
(
void
*v,
void
*mask,
111
struct
radix_node_head
*head,
struct
radix_node
nodes[]);
112
struct
radix_node
*(*rnh_addpkt)
/* add based on packet hdr */
113
(
void
*v,
void
*mask,
114
struct
radix_node_head
*head,
struct
radix_node
nodes[]);
115
struct
radix_node
*(*rnh_deladdr)
/* remove based on sockaddr */
116
(
void
*v,
void
*mask,
struct
radix_node_head
*head);
117
struct
radix_node
*(*rnh_delpkt)
/* remove based on packet hdr */
118
(
void
*v,
void
*mask,
struct
radix_node_head
*head);
119
struct
radix_node
*(*rnh_matchaddr)
/* locate based on sockaddr */
120
(
void
*v,
struct
radix_node_head
*head);
121
struct
radix_node
*(*rnh_lookup)
/* locate based on sockaddr */
122
(
void
*v,
void
*mask,
struct
radix_node_head
*head);
123
struct
radix_node
*(*rnh_matchpkt)
/* locate based on packet hdr */
124
(
void
*v,
struct
radix_node_head
*head);
125
int (*rnh_walktree)
/* traverse tree */
126
(
struct
radix_node_head
*head, walktree_f_t *f,
void
*w);
127
int (*rnh_walktree_from)
/* traverse tree below a */
128
(
struct
radix_node_head
*head,
void
*a,
void
*m,
129
walktree_f_t *f,
void
*w);
130
void (*rnh_close)
/* do something when the last ref drops */
131
(
struct
radix_node
*rn,
struct
radix_node_head
*head);
132
struct
radix_node
rnh_nodes[3];
/* empty tree for common case */
133
};
134
135
#ifndef _KERNEL
136
#define Bcmp(a, b, n) bcmp(((char *)(a)), ((char *)(b)), (n))
137
#define Bcopy(a, b, n) bcopy(((char *)(a)), ((char *)(b)), (unsigned)(n))
138
#define Bzero(p, n) bzero((char *)(p), (int)(n));
139
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned int)(n)))
140
#define R_Zalloc(p, t, n) (p = (t) calloc(1,(unsigned int)(n)))
141
#define Free(p) free((char *)p);
142
#else
143
#define Bcmp(a, b, n) bcmp(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
144
#define Bcopy(a, b, n) bcopy(((caddr_t)(a)), ((caddr_t)(b)), (unsigned)(n))
145
#define Bzero(p, n) bzero((caddr_t)(p), (unsigned)(n));
146
#define R_Malloc(p, t, n) (p = (t) malloc((unsigned long)(n), M_RTABLE, M_DONTWAIT))
147
#define Free(p) free((caddr_t)p, M_RTABLE);
148
#endif
/*_KERNEL*/
149
150
void
rn_init(
void
);
151
int
rn_inithead(
void
**,
int
);
152
int
rn_refines(
void
*,
void
*);
153
struct
radix_node
154
*rn_addmask(
void
*,
int
,
int
),
155
*rn_addroute (
void
*,
void
*,
struct
radix_node_head
*,
156
struct
radix_node
[2]),
157
*rn_delete(
void
*,
void
*,
struct
radix_node_head
*),
158
*rn_lookup (
void
*v_arg,
void
*m_arg,
159
struct
radix_node_head
*head),
160
*rn_match(
void
*,
struct
radix_node_head
*);
161
162
#endif
/* _RADIX_H_ */
radix_node_head
Definition:
radix.h:106
radix_mask
Definition:
radix.h:80
radix_node
Definition:
radix.h:41
Generated by
1.8.13