diff options
author | David S. Miller <davem@davemloft.net> | 2012-07-13 05:03:45 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-20 13:31:20 -0700 |
commit | f8126f1d5136be1ca1a3536d43ad7a710b5620f8 (patch) | |
tree | 8a92815052257c4ca29461f5b9ddaaeac288a7ed /net/ipv4/inet_connection_sock.c | |
parent | f1ce3062c53809d862d8a04e7a0566c3cc4e0bda (diff) | |
download | linux-f8126f1d5136be1ca1a3536d43ad7a710b5620f8.tar.gz linux-f8126f1d5136be1ca1a3536d43ad7a710b5620f8.tar.bz2 linux-f8126f1d5136be1ca1a3536d43ad7a710b5620f8.zip |
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 'net/ipv4/inet_connection_sock.c')
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index c7a4de05ca04..0a290d719bc7 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -389,7 +389,7 @@ struct dst_entry *inet_csk_route_req(struct sock *sk, rt = ip_route_output_flow(net, fl4, sk); if (IS_ERR(rt)) goto no_route; - if (opt && opt->opt.is_strictroute && fl4->daddr != rt->rt_gateway) + if (opt && opt->opt.is_strictroute && rt->rt_gateway) goto route_err; return &rt->dst; @@ -422,7 +422,7 @@ struct dst_entry *inet_csk_route_child_sock(struct sock *sk, rt = ip_route_output_flow(net, fl4, sk); if (IS_ERR(rt)) goto no_route; - if (opt && opt->opt.is_strictroute && fl4->daddr != rt->rt_gateway) + if (opt && opt->opt.is_strictroute && rt->rt_gateway) goto route_err; return &rt->dst; |