aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/route.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-05-13 17:29:41 -0400
committerDavid S. Miller <davem@davemloft.net>2011-05-13 17:29:41 -0400
commit8e36360ae876995e92d3a7538dda70548e64e685 (patch)
treed477e086bb35d2de8a6f54b461abeb24be8a4f5b /net/ipv4/route.c
parent22f728f8f311659b068e73ed92833c205651a47f (diff)
ipv4: Remove route key identity dependencies in ip_rt_get_source().
Pass in the sk_buff so that we can fetch the necessary keys from the packet header when working with input routes. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r--net/ipv4/route.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 6a83840b16af..ad141d894e4e 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1699,22 +1699,26 @@ static int ip_rt_bug(struct sk_buff *skb)
1699 in IP options! 1699 in IP options!
1700 */ 1700 */
1701 1701
1702void ip_rt_get_source(u8 *addr, struct rtable *rt) 1702void ip_rt_get_source(u8 *addr, struct sk_buff *skb, struct rtable *rt)
1703{ 1703{
1704 __be32 src; 1704 __be32 src;
1705 struct fib_result res;
1706 1705
1707 if (rt_is_output_route(rt)) 1706 if (rt_is_output_route(rt))
1708 src = rt->rt_src; 1707 src = rt->rt_src;
1709 else { 1708 else {
1710 struct flowi4 fl4 = { 1709 struct fib_result res;
1711 .daddr = rt->rt_key_dst, 1710 struct flowi4 fl4;
1712 .saddr = rt->rt_key_src, 1711 struct iphdr *iph;
1713 .flowi4_tos = rt->rt_key_tos, 1712
1714 .flowi4_oif = rt->rt_oif, 1713 iph = ip_hdr(skb);
1715 .flowi4_iif = rt->rt_iif, 1714
1716 .flowi4_mark = rt->rt_mark, 1715 memset(&fl4, 0, sizeof(fl4));
1717 }; 1716 fl4.daddr = iph->daddr;
1717 fl4.saddr = iph->saddr;
1718 fl4.flowi4_tos = iph->tos;
1719 fl4.flowi4_oif = rt->dst.dev->ifindex;
1720 fl4.flowi4_iif = skb->dev->ifindex;
1721 fl4.flowi4_mark = skb->mark;
1718 1722
1719 rcu_read_lock(); 1723 rcu_read_lock();
1720 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res) == 0) 1724 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res) == 0)