Commit 1a00fee4 authored by David Miller's avatar David Miller Committed by David S. Miller

ipv4: Remove rt_key_{src,dst,tos} from struct rtable.

They are always used in contexts where they can be reconstituted,
or where the finally resolved rt->rt_{src,dst} is semantically
equivalent.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 38a424e4
...@@ -44,14 +44,9 @@ struct fib_info; ...@@ -44,14 +44,9 @@ struct fib_info;
struct rtable { struct rtable {
struct dst_entry dst; struct dst_entry dst;
/* Lookup key. */
__be32 rt_key_dst;
__be32 rt_key_src;
int rt_genid; int rt_genid;
unsigned int rt_flags; unsigned int rt_flags;
__u16 rt_type; __u16 rt_type;
__u8 rt_key_tos;
__be32 rt_dst; /* Path destination */ __be32 rt_dst; /* Path destination */
__be32 rt_src; /* Path source */ __be32 rt_src; /* Path source */
......
...@@ -1268,12 +1268,9 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr, ...@@ -1268,12 +1268,9 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
#endif #endif
rth->dst.output = ip_rt_bug; rth->dst.output = ip_rt_bug;
rth->rt_key_dst = daddr;
rth->rt_key_src = saddr;
rth->rt_genid = rt_genid(dev_net(dev)); rth->rt_genid = rt_genid(dev_net(dev));
rth->rt_flags = RTCF_MULTICAST; rth->rt_flags = RTCF_MULTICAST;
rth->rt_type = RTN_MULTICAST; rth->rt_type = RTN_MULTICAST;
rth->rt_key_tos = tos;
rth->rt_dst = daddr; rth->rt_dst = daddr;
rth->rt_src = saddr; rth->rt_src = saddr;
rth->rt_route_iif = dev->ifindex; rth->rt_route_iif = dev->ifindex;
...@@ -1392,12 +1389,9 @@ static int __mkroute_input(struct sk_buff *skb, ...@@ -1392,12 +1389,9 @@ static int __mkroute_input(struct sk_buff *skb,
goto cleanup; goto cleanup;
} }
rth->rt_key_dst = daddr;
rth->rt_key_src = saddr;
rth->rt_genid = rt_genid(dev_net(rth->dst.dev)); rth->rt_genid = rt_genid(dev_net(rth->dst.dev));
rth->rt_flags = flags; rth->rt_flags = flags;
rth->rt_type = res->type; rth->rt_type = res->type;
rth->rt_key_tos = tos;
rth->rt_dst = daddr; rth->rt_dst = daddr;
rth->rt_src = saddr; rth->rt_src = saddr;
rth->rt_route_iif = in_dev->dev->ifindex; rth->rt_route_iif = in_dev->dev->ifindex;
...@@ -1563,12 +1557,9 @@ out: return err; ...@@ -1563,12 +1557,9 @@ out: return err;
rth->dst.tclassid = itag; rth->dst.tclassid = itag;
#endif #endif
rth->rt_key_dst = daddr;
rth->rt_key_src = saddr;
rth->rt_genid = rt_genid(net); rth->rt_genid = rt_genid(net);
rth->rt_flags = flags|RTCF_LOCAL; rth->rt_flags = flags|RTCF_LOCAL;
rth->rt_type = res.type; rth->rt_type = res.type;
rth->rt_key_tos = tos;
rth->rt_dst = daddr; rth->rt_dst = daddr;
rth->rt_src = saddr; rth->rt_src = saddr;
rth->rt_route_iif = dev->ifindex; rth->rt_route_iif = dev->ifindex;
...@@ -1668,9 +1659,7 @@ EXPORT_SYMBOL(ip_route_input); ...@@ -1668,9 +1659,7 @@ EXPORT_SYMBOL(ip_route_input);
/* called with rcu_read_lock() */ /* called with rcu_read_lock() */
static struct rtable *__mkroute_output(const struct fib_result *res, static struct rtable *__mkroute_output(const struct fib_result *res,
const struct flowi4 *fl4, const struct flowi4 *fl4, int orig_oif,
__be32 orig_daddr, __be32 orig_saddr,
int orig_oif, __u8 orig_rtos,
struct net_device *dev_out, struct net_device *dev_out,
unsigned int flags) unsigned int flags)
{ {
...@@ -1721,12 +1710,9 @@ static struct rtable *__mkroute_output(const struct fib_result *res, ...@@ -1721,12 +1710,9 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
rth->dst.output = ip_output; rth->dst.output = ip_output;
rth->rt_key_dst = orig_daddr;
rth->rt_key_src = orig_saddr;
rth->rt_genid = rt_genid(dev_net(dev_out)); rth->rt_genid = rt_genid(dev_net(dev_out));
rth->rt_flags = flags; rth->rt_flags = flags;
rth->rt_type = type; rth->rt_type = type;
rth->rt_key_tos = orig_rtos;
rth->rt_dst = fl4->daddr; rth->rt_dst = fl4->daddr;
rth->rt_src = fl4->saddr; rth->rt_src = fl4->saddr;
rth->rt_route_iif = 0; rth->rt_route_iif = 0;
...@@ -1777,16 +1763,12 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4) ...@@ -1777,16 +1763,12 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
unsigned int flags = 0; unsigned int flags = 0;
struct fib_result res; struct fib_result res;
struct rtable *rth; struct rtable *rth;
__be32 orig_daddr;
__be32 orig_saddr;
int orig_oif; int orig_oif;
res.tclassid = 0; res.tclassid = 0;
res.fi = NULL; res.fi = NULL;
res.table = NULL; res.table = NULL;
orig_daddr = fl4->daddr;
orig_saddr = fl4->saddr;
orig_oif = fl4->flowi4_oif; orig_oif = fl4->flowi4_oif;
fl4->flowi4_iif = net->loopback_dev->ifindex; fl4->flowi4_iif = net->loopback_dev->ifindex;
...@@ -1948,8 +1930,7 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4) ...@@ -1948,8 +1930,7 @@ struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4)
make_route: make_route:
rth = __mkroute_output(&res, fl4, orig_daddr, orig_saddr, orig_oif, rth = __mkroute_output(&res, fl4, orig_oif, dev_out, flags);
tos, dev_out, flags);
out: out:
rcu_read_unlock(); rcu_read_unlock();
...@@ -2014,9 +1995,6 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or ...@@ -2014,9 +1995,6 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
if (new->dev) if (new->dev)
dev_hold(new->dev); dev_hold(new->dev);
rt->rt_key_dst = ort->rt_key_dst;
rt->rt_key_src = ort->rt_key_src;
rt->rt_key_tos = ort->rt_key_tos;
rt->rt_route_iif = ort->rt_route_iif; rt->rt_route_iif = ort->rt_route_iif;
rt->rt_iif = ort->rt_iif; rt->rt_iif = ort->rt_iif;
rt->rt_oif = ort->rt_oif; rt->rt_oif = ort->rt_oif;
...@@ -2058,7 +2036,7 @@ struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4, ...@@ -2058,7 +2036,7 @@ struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4,
} }
EXPORT_SYMBOL_GPL(ip_route_output_flow); EXPORT_SYMBOL_GPL(ip_route_output_flow);
static int rt_fill_info(struct net *net, static int rt_fill_info(struct net *net, __be32 src, u8 tos,
struct sk_buff *skb, u32 pid, u32 seq, int event, struct sk_buff *skb, u32 pid, u32 seq, int event,
int nowait, unsigned int flags) int nowait, unsigned int flags)
{ {
...@@ -2077,7 +2055,7 @@ static int rt_fill_info(struct net *net, ...@@ -2077,7 +2055,7 @@ static int rt_fill_info(struct net *net,
r->rtm_family = AF_INET; r->rtm_family = AF_INET;
r->rtm_dst_len = 32; r->rtm_dst_len = 32;
r->rtm_src_len = 0; r->rtm_src_len = 0;
r->rtm_tos = rt->rt_key_tos; r->rtm_tos = tos;
r->rtm_table = RT_TABLE_MAIN; r->rtm_table = RT_TABLE_MAIN;
if (nla_put_u32(skb, RTA_TABLE, RT_TABLE_MAIN)) if (nla_put_u32(skb, RTA_TABLE, RT_TABLE_MAIN))
goto nla_put_failure; goto nla_put_failure;
...@@ -2090,9 +2068,9 @@ static int rt_fill_info(struct net *net, ...@@ -2090,9 +2068,9 @@ static int rt_fill_info(struct net *net,
if (nla_put_be32(skb, RTA_DST, rt->rt_dst)) if (nla_put_be32(skb, RTA_DST, rt->rt_dst))
goto nla_put_failure; goto nla_put_failure;
if (rt->rt_key_src) { if (src) {
r->rtm_src_len = 32; r->rtm_src_len = 32;
if (nla_put_be32(skb, RTA_SRC, rt->rt_key_src)) if (nla_put_be32(skb, RTA_SRC, src))
goto nla_put_failure; goto nla_put_failure;
} }
if (rt->dst.dev && if (rt->dst.dev &&
...@@ -2104,7 +2082,7 @@ static int rt_fill_info(struct net *net, ...@@ -2104,7 +2082,7 @@ static int rt_fill_info(struct net *net,
goto nla_put_failure; goto nla_put_failure;
#endif #endif
if (!rt_is_input_route(rt) && if (!rt_is_input_route(rt) &&
rt->rt_src != rt->rt_key_src) { rt->rt_src != src) {
if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_src)) if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_src))
goto nla_put_failure; goto nla_put_failure;
} }
...@@ -2248,7 +2226,8 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void ...@@ -2248,7 +2226,8 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void
if (rtm->rtm_flags & RTM_F_NOTIFY) if (rtm->rtm_flags & RTM_F_NOTIFY)
rt->rt_flags |= RTCF_NOTIFY; rt->rt_flags |= RTCF_NOTIFY;
err = rt_fill_info(net, skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, err = rt_fill_info(net, src, rtm->rtm_tos, skb,
NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
RTM_NEWROUTE, 0, 0); RTM_NEWROUTE, 0, 0);
if (err <= 0) if (err <= 0)
goto errout_free; goto errout_free;
......
...@@ -79,9 +79,6 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev, ...@@ -79,9 +79,6 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
struct rtable *rt = (struct rtable *)xdst->route; struct rtable *rt = (struct rtable *)xdst->route;
const struct flowi4 *fl4 = &fl->u.ip4; const struct flowi4 *fl4 = &fl->u.ip4;
xdst->u.rt.rt_key_dst = fl4->daddr;
xdst->u.rt.rt_key_src = fl4->saddr;
xdst->u.rt.rt_key_tos = fl4->flowi4_tos;
xdst->u.rt.rt_route_iif = fl4->flowi4_iif; xdst->u.rt.rt_route_iif = fl4->flowi4_iif;
xdst->u.rt.rt_iif = fl4->flowi4_iif; xdst->u.rt.rt_iif = fl4->flowi4_iif;
xdst->u.rt.rt_oif = fl4->flowi4_oif; xdst->u.rt.rt_oif = fl4->flowi4_oif;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment