diff options
author | David S. Miller <davem@davemloft.net> | 2012-07-13 08:03:45 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-20 16:31:20 -0400 |
commit | f8126f1d5136be1ca1a3536d43ad7a710b5620f8 (patch) | |
tree | 8a92815052257c4ca29461f5b9ddaaeac288a7ed /include | |
parent | f1ce3062c53809d862d8a04e7a0566c3cc4e0bda (diff) |
ipv4: Adjust semantics of rt->rt_gateway.
In order to allow prefixed routes, we have to adjust how rt_gateway
is set and interpreted.
The new interpretation is:
1) rt_gateway == 0, destination is on-link, nexthop is iph->daddr
2) rt_gateway != 0, destination requires a nexthop gateway
Abstract the fetching of the proper nexthop value using a new
inline helper, rt_nexthop(), as suggested by Joe Perches.
Signed-off-by: David S. Miller <davem@davemloft.net>
Tested-by: Vijay Subramanian <subramanian.vijay@gmail.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/route.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/net/route.h b/include/net/route.h index 6d111bceb160..3c1eeab9749b 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -70,6 +70,13 @@ static inline bool rt_is_output_route(const struct rtable *rt) | |||
70 | return rt->rt_route_iif == 0; | 70 | return rt->rt_route_iif == 0; |
71 | } | 71 | } |
72 | 72 | ||
73 | static inline __be32 rt_nexthop(const struct rtable *rt, __be32 daddr) | ||
74 | { | ||
75 | if (rt->rt_gateway) | ||
76 | return rt->rt_gateway; | ||
77 | return daddr; | ||
78 | } | ||
79 | |||
73 | struct ip_rt_acct { | 80 | struct ip_rt_acct { |
74 | __u32 o_bytes; | 81 | __u32 o_bytes; |
75 | __u32 o_packets; | 82 | __u32 o_packets; |