Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
fib_rules.h
Go to the documentation of this file.
1
#ifndef __NET_FIB_RULES_H
2
#define __NET_FIB_RULES_H
3
4
#include <linux/types.h>
5
#include <linux/slab.h>
6
#include <linux/netdevice.h>
7
#include <
linux/fib_rules.h
>
8
#include <
net/flow.h
>
9
#include <
net/rtnetlink.h
>
10
11
struct
fib_rule
{
12
struct
list_head
list
;
13
atomic_t
refcnt
;
14
int
iifindex
;
15
int
oifindex
;
16
u32
mark
;
17
u32
mark_mask
;
18
u32
pref
;
19
u32
flags
;
20
u32
table
;
21
u8
action
;
22
u32
target
;
23
struct
fib_rule
__rcu
*
ctarget
;
24
char
iifname
[
IFNAMSIZ
];
25
char
oifname
[
IFNAMSIZ
];
26
struct
rcu_head
rcu
;
27
struct
net
*
fr_net
;
28
};
29
30
struct
fib_lookup_arg
{
31
void
*
lookup_ptr
;
32
void
*
result
;
33
struct
fib_rule
*
rule
;
34
int
flags
;
35
#define FIB_LOOKUP_NOREF 1
36
};
37
38
struct
fib_rules_ops
{
39
int
family
;
40
struct
list_head
list
;
41
int
rule_size
;
42
int
addr_size
;
43
int
unresolved_rules
;
44
int
nr_goto_rules
;
45
46
int
(*
action
)(
struct
fib_rule
*,
47
struct
flowi
*,
int
,
48
struct
fib_lookup_arg
*);
49
int
(*
match
)(
struct
fib_rule
*,
50
struct
flowi
*,
int
);
51
int
(*
configure
)(
struct
fib_rule
*,
52
struct
sk_buff
*,
53
struct
fib_rule_hdr
*,
54
struct
nlattr
**);
55
void
(*
delete
)(
struct
fib_rule
*);
56
int
(*
compare
)(
struct
fib_rule
*,
57
struct
fib_rule_hdr
*,
58
struct
nlattr
**);
59
int
(*
fill
)(
struct
fib_rule
*,
struct
sk_buff
*,
60
struct
fib_rule_hdr
*);
61
u32
(*
default_pref
)(
struct
fib_rules_ops
*
ops
);
62
size_t
(*
nlmsg_payload
)(
struct
fib_rule
*);
63
64
/* Called after modifications to the rules set, must flush
65
* the route cache if one exists. */
66
void
(*
flush_cache
)(
struct
fib_rules_ops
*
ops
);
67
68
int
nlgroup
;
69
const
struct
nla_policy
*
policy
;
70
struct
list_head
rules_list
;
71
struct
module
*
owner
;
72
struct
net
*
fro_net
;
73
struct
rcu_head
rcu
;
74
};
75
76
#define FRA_GENERIC_POLICY \
77
[FRA_IIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
78
[FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
79
[FRA_PRIORITY] = { .type = NLA_U32 }, \
80
[FRA_FWMARK] = { .type = NLA_U32 }, \
81
[FRA_FWMASK] = { .type = NLA_U32 }, \
82
[FRA_TABLE] = { .type = NLA_U32 }, \
83
[FRA_GOTO] = { .type = NLA_U32 }
84
85
static
inline
void
fib_rule_get(
struct
fib_rule
*
rule
)
86
{
87
atomic_inc
(&rule->
refcnt
);
88
}
89
90
static
inline
void
fib_rule_put_rcu(
struct
rcu_head
*
head
)
91
{
92
struct
fib_rule
*
rule
=
container_of
(head,
struct
fib_rule
,
rcu
);
93
release_net(rule->
fr_net
);
94
kfree
(rule);
95
}
96
97
static
inline
void
fib_rule_put(
struct
fib_rule
*
rule
)
98
{
99
if
(
atomic_dec_and_test
(&rule->
refcnt
))
100
call_rcu
(&rule->
rcu
, fib_rule_put_rcu);
101
}
102
103
static
inline
u32
frh_get_table(
struct
fib_rule_hdr
*frh,
struct
nlattr
**
nla
)
104
{
105
if
(nla[
FRA_TABLE
])
106
return
nla_get_u32(nla[FRA_TABLE]);
107
return
frh->
table
;
108
}
109
110
extern
struct
fib_rules_ops
*
fib_rules_register
(
const
struct
fib_rules_ops
*,
struct
net
*);
111
extern
void
fib_rules_unregister
(
struct
fib_rules_ops
*);
112
113
extern
int
fib_rules_lookup
(
struct
fib_rules_ops
*,
114
struct
flowi
*,
int
flags
,
115
struct
fib_lookup_arg
*);
116
extern
int
fib_default_rule_add
(
struct
fib_rules_ops
*,
117
u32
pref,
u32
table
,
118
u32
flags
);
119
extern
u32
fib_default_rule_pref
(
struct
fib_rules_ops
*ops);
120
#endif
Generated on Thu Jan 10 2013 14:53:04 for Linux Kernel by
1.8.2