OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [net/] [ip6_fib.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *      Linux INET6 implementation
3
 *
4
 *      Authors:
5
 *      Pedro Roque             <roque@di.fc.ul.pt>
6
 *
7
 *      This program is free software; you can redistribute it and/or
8
 *      modify it under the terms of the GNU General Public License
9
 *      as published by the Free Software Foundation; either version
10
 *      2 of the License, or (at your option) any later version.
11
 */
12
 
13
#ifndef _IP6_FIB_H
14
#define _IP6_FIB_H
15
 
16
#ifdef __KERNEL__
17
 
18
#include <linux/ipv6_route.h>
19
 
20
#include <net/dst.h>
21
#include <net/flow.h>
22
#include <linux/rtnetlink.h>
23
 
24
struct rt6_info;
25
 
26
struct fib6_node
27
{
28
        struct fib6_node        *parent;
29
        struct fib6_node        *left;
30
        struct fib6_node        *right;
31
 
32
        struct fib6_node        *subtree;
33
 
34
        struct rt6_info         *leaf;
35
 
36
        __u16                   fn_bit;         /* bit key */
37
        __u16                   fn_flags;
38
        __u32                   fn_sernum;
39
};
40
 
41
 
42
/*
43
 *      routing information
44
 *
45
 */
46
 
47
struct rt6key
48
{
49
        struct in6_addr addr;
50
        int             plen;
51
};
52
 
53
struct rt6_info
54
{
55
        union {
56
                struct dst_entry        dst;
57
                struct rt6_info         *next;
58
        } u;
59
 
60
#define rt6i_dev                        u.dst.dev
61
#define rt6i_nexthop                    u.dst.neighbour
62
#define rt6i_expires                    u.dst.expires
63
 
64
        struct fib6_node                *rt6i_node;
65
 
66
        struct in6_addr                 rt6i_gateway;
67
 
68
        u32                             rt6i_flags;
69
        u32                             rt6i_metric;
70
        u8                              rt6i_hoplimit;
71
        atomic_t                        rt6i_ref;
72
 
73
        union {
74
                struct flow_rule        *rt6iu_flowr;
75
                struct flow_filter      *rt6iu_filter;
76
        } flow_u;
77
 
78
#define rt6i_flowr                      flow_u.rt6iu_flowr
79
#define rt6i_filter                     flow_u.rt6iu_filter
80
 
81
        struct rt6key                   rt6i_dst;
82
        struct rt6key                   rt6i_src;
83
 
84
        u8                              rt6i_protocol;
85
};
86
 
87
struct fib6_walker_t
88
{
89
        struct fib6_walker_t *prev, *next;
90
        struct fib6_node *root, *node;
91
        struct rt6_info *leaf;
92
        unsigned char state;
93
        unsigned char prune;
94
        int (*func)(struct fib6_walker_t *);
95
        void *args;
96
};
97
 
98
extern struct fib6_walker_t fib6_walker_list;
99
extern rwlock_t fib6_walker_lock;
100
 
101
static inline void fib6_walker_link(struct fib6_walker_t *w)
102
{
103
        write_lock_bh(&fib6_walker_lock);
104
        w->next = fib6_walker_list.next;
105
        w->prev = &fib6_walker_list;
106
        w->next->prev = w;
107
        w->prev->next = w;
108
        write_unlock_bh(&fib6_walker_lock);
109
}
110
 
111
static inline void fib6_walker_unlink(struct fib6_walker_t *w)
112
{
113
        write_lock_bh(&fib6_walker_lock);
114
        w->next->prev = w->prev;
115
        w->prev->next = w->next;
116
        w->prev = w->next = w;
117
        write_unlock_bh(&fib6_walker_lock);
118
}
119
 
120
struct rt6_statistics {
121
        __u32           fib_nodes;
122
        __u32           fib_route_nodes;
123
        __u32           fib_rt_alloc;           /* permanent routes     */
124
        __u32           fib_rt_entries;         /* rt entries in table  */
125
        __u32           fib_rt_cache;           /* cache routes         */
126
};
127
 
128
#define RTN_TL_ROOT     0x0001
129
#define RTN_ROOT        0x0002          /* tree root node               */
130
#define RTN_RTINFO      0x0004          /* node with valid routing info */
131
 
132
/*
133
 *      priority levels (or metrics)
134
 *
135
 */
136
 
137
#define RTPRI_FIREWALL  8               /* Firewall control information */
138
#define RTPRI_FLOW      16              /* Flow based forwarding rules  */
139
#define RTPRI_KERN_CTL  32              /* Kernel control routes        */
140
 
141
#define RTPRI_USER_MIN  256             /* Mimimum user priority        */
142
#define RTPRI_USER_MAX  1024            /* Maximum user priority        */
143
 
144
#define RTPRI_KERN_DFLT 4096            /* Kernel default routes        */
145
 
146
#define MAX_FLOW_BACKTRACE      32
147
 
148
 
149
typedef void                    (*f_pnode)(struct fib6_node *fn, void *);
150
 
151
extern struct fib6_node         ip6_routing_table;
152
 
153
/*
154
 *      exported functions
155
 */
156
 
157
extern struct fib6_node         *fib6_lookup(struct fib6_node *root,
158
                                             struct in6_addr *daddr,
159
                                             struct in6_addr *saddr);
160
 
161
struct fib6_node                *fib6_locate(struct fib6_node *root,
162
                                             struct in6_addr *daddr, int dst_len,
163
                                             struct in6_addr *saddr, int src_len);
164
 
165
extern void                     fib6_clean_tree(struct fib6_node *root,
166
                                                int (*func)(struct rt6_info *, void *arg),
167
                                                int prune, void *arg);
168
 
169
extern int                      fib6_walk(struct fib6_walker_t *w);
170
extern int                      fib6_walk_continue(struct fib6_walker_t *w);
171
 
172
extern int                      fib6_add(struct fib6_node *root,
173
                                         struct rt6_info *rt,
174
                                         struct nlmsghdr *nlh);
175
 
176
extern int                      fib6_del(struct rt6_info *rt,
177
                                         struct nlmsghdr *nlh);
178
 
179
extern void                     inet6_rt_notify(int event, struct rt6_info *rt,
180
                                                struct nlmsghdr *nlh);
181
 
182
extern void                     fib6_run_gc(unsigned long dummy);
183
 
184
extern void                     fib6_gc_cleanup(void);
185
 
186
extern void                     fib6_init(void);
187
#endif
188
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.