aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2006-08-11 02:09:48 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2006-09-22 17:54:25 -0400
commit9e762a4a89b302cb3b26a1f9bb33eff459eaeca9 (patch)
tree4be606cc6bfe097beac3aeeea32b4adc107409b7 /include
parent2dfe55b47e3d66ded5a84caf71e0da5710edf48b (diff)
[NET]: Introduce RTA_TABLE/FRA_TABLE attributes
Introduce RTA_TABLE route attribute and FRA_TABLE routing rule attribute to hold 32 bit routing table IDs. Usespace compatibility is provided by continuing to accept and send the rtm_table field, but because of its limited size it can only carry the low 8 bits of the table ID. This implies that if larger IDs are used, _all_ userspace programs using them need to use RTA_TABLE. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/fib_rules.h4
-rw-r--r--include/linux/rtnetlink.h8
-rw-r--r--include/net/fib_rules.h7
3 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/fib_rules.h b/include/linux/fib_rules.h
index 5e503f0ca6e4..19a82b6c1c1f 100644
--- a/include/linux/fib_rules.h
+++ b/include/linux/fib_rules.h
@@ -36,6 +36,10 @@ enum
36 FRA_UNUSED5, 36 FRA_UNUSED5,
37 FRA_FWMARK, /* netfilter mark (IPv4) */ 37 FRA_FWMARK, /* netfilter mark (IPv4) */
38 FRA_FLOW, /* flow/class id */ 38 FRA_FLOW, /* flow/class id */
39 FRA_UNUSED6,
40 FRA_UNUSED7,
41 FRA_UNUSED8,
42 FRA_TABLE, /* Extended table id */
39 __FRA_MAX 43 __FRA_MAX
40}; 44};
41 45
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 0aaffa2ae666..ea422a539a03 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -264,6 +264,7 @@ enum rtattr_type_t
264 RTA_CACHEINFO, 264 RTA_CACHEINFO,
265 RTA_SESSION, 265 RTA_SESSION,
266 RTA_MP_ALGO, 266 RTA_MP_ALGO,
267 RTA_TABLE,
267 __RTA_MAX 268 __RTA_MAX
268}; 269};
269 270
@@ -717,6 +718,13 @@ extern void __rtnl_unlock(void);
717 } \ 718 } \
718} while(0) 719} while(0)
719 720
721static inline u32 rtm_get_table(struct rtattr **rta, u8 table)
722{
723 return RTA_GET_U32(rta[RTA_TABLE-1]);
724rtattr_failure:
725 return table;
726}
727
720#endif /* __KERNEL__ */ 728#endif /* __KERNEL__ */
721 729
722 730
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h
index 61375d9e53f8..8e2f473d3e82 100644
--- a/include/net/fib_rules.h
+++ b/include/net/fib_rules.h
@@ -74,6 +74,13 @@ static inline void fib_rule_put(struct fib_rule *rule)
74 call_rcu(&rule->rcu, fib_rule_put_rcu); 74 call_rcu(&rule->rcu, fib_rule_put_rcu);
75} 75}
76 76
77static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
78{
79 if (nla[FRA_TABLE])
80 return nla_get_u32(nla[FRA_TABLE]);
81 return frh->table;
82}
83
77extern int fib_rules_register(struct fib_rules_ops *); 84extern int fib_rules_register(struct fib_rules_ops *);
78extern int fib_rules_unregister(struct fib_rules_ops *); 85extern int fib_rules_unregister(struct fib_rules_ops *);
79 86