diff options
author | Thomas Graf <tgraf@suug.ch> | 2006-08-17 21:14:52 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 17:55:04 -0400 |
commit | 4e902c57417c4c285b98ba2722468d1c3ed83d1b (patch) | |
tree | 83251829a4bc9628a3543e5f70e7b11090fe22d9 /include/net/ip_fib.h | |
parent | ab32ea5d8a760e7dd4339634e95d7be24ee5b842 (diff) |
[IPv4]: FIB configuration using struct fib_config
Introduces struct fib_config replacing the ugly struct kern_rta
prone to ordering issues. Avoids creating faked netlink messages
for auto generated routes or requests via ioctl.
A new interface net/nexthop.h is added to help navigate through
nexthop configuration arrays.
A new struct nl_info will be used to carry the necessary netlink
information to be used for notifications later on.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/ip_fib.h')
-rw-r--r-- | include/net/ip_fib.h | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 8e9ba563d342..42ed96fab3f5 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
@@ -20,25 +20,32 @@ | |||
20 | #include <linux/seq_file.h> | 20 | #include <linux/seq_file.h> |
21 | #include <net/fib_rules.h> | 21 | #include <net/fib_rules.h> |
22 | 22 | ||
23 | /* WARNING: The ordering of these elements must match ordering | 23 | struct fib_config { |
24 | * of RTA_* rtnetlink attribute numbers. | 24 | u8 fc_family; |
25 | */ | 25 | u8 fc_dst_len; |
26 | struct kern_rta { | 26 | u8 fc_src_len; |
27 | void *rta_dst; | 27 | u8 fc_tos; |
28 | void *rta_src; | 28 | u8 fc_protocol; |
29 | int *rta_iif; | 29 | u8 fc_scope; |
30 | int *rta_oif; | 30 | u8 fc_type; |
31 | void *rta_gw; | 31 | /* 1 byte unused */ |
32 | u32 *rta_priority; | 32 | u32 fc_table; |
33 | void *rta_prefsrc; | 33 | u32 fc_dst; |
34 | struct rtattr *rta_mx; | 34 | u32 fc_src; |
35 | struct rtattr *rta_mp; | 35 | u32 fc_gw; |
36 | unsigned char *rta_protoinfo; | 36 | int fc_oif; |
37 | u32 *rta_flow; | 37 | u32 fc_flags; |
38 | struct rta_cacheinfo *rta_ci; | 38 | u32 fc_priority; |
39 | struct rta_session *rta_sess; | 39 | u32 fc_prefsrc; |
40 | u32 *rta_mp_alg; | 40 | struct nlattr *fc_mx; |
41 | }; | 41 | struct rtnexthop *fc_mp; |
42 | int fc_mx_len; | ||
43 | int fc_mp_len; | ||
44 | u32 fc_flow; | ||
45 | u32 fc_mp_alg; | ||
46 | u32 fc_nlflags; | ||
47 | struct nl_info fc_nlinfo; | ||
48 | }; | ||
42 | 49 | ||
43 | struct fib_info; | 50 | struct fib_info; |
44 | 51 | ||
@@ -154,12 +161,8 @@ struct fib_table { | |||
154 | u32 tb_id; | 161 | u32 tb_id; |
155 | unsigned tb_stamp; | 162 | unsigned tb_stamp; |
156 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); | 163 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); |
157 | int (*tb_insert)(struct fib_table *table, struct rtmsg *r, | 164 | int (*tb_insert)(struct fib_table *, struct fib_config *); |
158 | struct kern_rta *rta, struct nlmsghdr *n, | 165 | int (*tb_delete)(struct fib_table *, struct fib_config *); |
159 | struct netlink_skb_parms *req); | ||
160 | int (*tb_delete)(struct fib_table *table, struct rtmsg *r, | ||
161 | struct kern_rta *rta, struct nlmsghdr *n, | ||
162 | struct netlink_skb_parms *req); | ||
163 | int (*tb_dump)(struct fib_table *table, struct sk_buff *skb, | 166 | int (*tb_dump)(struct fib_table *table, struct sk_buff *skb, |
164 | struct netlink_callback *cb); | 167 | struct netlink_callback *cb); |
165 | int (*tb_flush)(struct fib_table *table); | 168 | int (*tb_flush)(struct fib_table *table); |
@@ -228,8 +231,6 @@ struct rtentry; | |||
228 | extern int ip_fib_check_default(u32 gw, struct net_device *dev); | 231 | extern int ip_fib_check_default(u32 gw, struct net_device *dev); |
229 | extern int fib_sync_down(u32 local, struct net_device *dev, int force); | 232 | extern int fib_sync_down(u32 local, struct net_device *dev, int force); |
230 | extern int fib_sync_up(struct net_device *dev); | 233 | extern int fib_sync_up(struct net_device *dev); |
231 | extern int fib_convert_rtentry(int cmd, struct nlmsghdr *nl, struct rtmsg *rtm, | ||
232 | struct kern_rta *rta, struct rtentry *r); | ||
233 | extern u32 __fib_res_prefsrc(struct fib_result *res); | 234 | extern u32 __fib_res_prefsrc(struct fib_result *res); |
234 | 235 | ||
235 | /* Exported by fib_hash.c */ | 236 | /* Exported by fib_hash.c */ |