aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/ip_fib.h
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2006-08-17 21:14:52 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 17:55:04 -0400
commit4e902c57417c4c285b98ba2722468d1c3ed83d1b (patch)
tree83251829a4bc9628a3543e5f70e7b11090fe22d9 /include/net/ip_fib.h
parentab32ea5d8a760e7dd4339634e95d7be24ee5b842 (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.h55
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 23struct fib_config {
24 * of RTA_* rtnetlink attribute numbers. 24 u8 fc_family;
25 */ 25 u8 fc_dst_len;
26struct 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
43struct fib_info; 50struct 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;
228extern int ip_fib_check_default(u32 gw, struct net_device *dev); 231extern int ip_fib_check_default(u32 gw, struct net_device *dev);
229extern int fib_sync_down(u32 local, struct net_device *dev, int force); 232extern int fib_sync_down(u32 local, struct net_device *dev, int force);
230extern int fib_sync_up(struct net_device *dev); 233extern int fib_sync_up(struct net_device *dev);
231extern int fib_convert_rtentry(int cmd, struct nlmsghdr *nl, struct rtmsg *rtm,
232 struct kern_rta *rta, struct rtentry *r);
233extern u32 __fib_res_prefsrc(struct fib_result *res); 234extern u32 __fib_res_prefsrc(struct fib_result *res);
234 235
235/* Exported by fib_hash.c */ 236/* Exported by fib_hash.c */