diff options
author | Patrick McHardy <kaber@trash.net> | 2006-08-11 02:09:48 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 17:54:25 -0400 |
commit | 9e762a4a89b302cb3b26a1f9bb33eff459eaeca9 (patch) | |
tree | 4be606cc6bfe097beac3aeeea32b4adc107409b7 /include | |
parent | 2dfe55b47e3d66ded5a84caf71e0da5710edf48b (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.h | 4 | ||||
-rw-r--r-- | include/linux/rtnetlink.h | 8 | ||||
-rw-r--r-- | include/net/fib_rules.h | 7 |
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 | ||
721 | static inline u32 rtm_get_table(struct rtattr **rta, u8 table) | ||
722 | { | ||
723 | return RTA_GET_U32(rta[RTA_TABLE-1]); | ||
724 | rtattr_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 | ||
77 | static 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 | |||
77 | extern int fib_rules_register(struct fib_rules_ops *); | 84 | extern int fib_rules_register(struct fib_rules_ops *); |
78 | extern int fib_rules_unregister(struct fib_rules_ops *); | 85 | extern int fib_rules_unregister(struct fib_rules_ops *); |
79 | 86 | ||