Skip to content

Commit

Permalink
ipv4: Rework ipmr_rt_fib_lookup() flow key initialization.
Browse files Browse the repository at this point in the history
Use information from the skb as much as possible, currently
this means daddr, saddr, and TOS.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 4, 2011
1 parent 57a503c commit 417da66
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions net/ipv4/ipmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1788,12 +1788,14 @@ static int ip_mr_forward(struct net *net, struct mr_table *mrt,
return 0;
}

static struct mr_table *ipmr_rt_fib_lookup(struct net *net, struct rtable *rt)
static struct mr_table *ipmr_rt_fib_lookup(struct net *net, struct sk_buff *skb)
{
struct rtable *rt = skb_rtable(skb);
struct iphdr *iph = ip_hdr(skb);
struct flowi4 fl4 = {
.daddr = rt->rt_key_dst,
.saddr = rt->rt_key_src,
.flowi4_tos = rt->rt_tos,
.daddr = iph->daddr,
.saddr = iph->saddr,
.flowi4_tos = iph->tos,
.flowi4_oif = rt->rt_oif,
.flowi4_iif = rt->rt_iif,
.flowi4_mark = rt->rt_mark,
Expand Down Expand Up @@ -1825,7 +1827,7 @@ int ip_mr_input(struct sk_buff *skb)
if (IPCB(skb)->flags & IPSKB_FORWARDED)
goto dont_forward;

mrt = ipmr_rt_fib_lookup(net, skb_rtable(skb));
mrt = ipmr_rt_fib_lookup(net, skb);
if (IS_ERR(mrt)) {
kfree_skb(skb);
return PTR_ERR(mrt);
Expand Down Expand Up @@ -1957,7 +1959,7 @@ int pim_rcv_v1(struct sk_buff *skb)

pim = igmp_hdr(skb);

mrt = ipmr_rt_fib_lookup(net, skb_rtable(skb));
mrt = ipmr_rt_fib_lookup(net, skb);
if (IS_ERR(mrt))
goto drop;
if (!mrt->mroute_do_pim ||
Expand Down Expand Up @@ -1989,7 +1991,7 @@ static int pim_rcv(struct sk_buff *skb)
csum_fold(skb_checksum(skb, 0, skb->len, 0))))
goto drop;

mrt = ipmr_rt_fib_lookup(net, skb_rtable(skb));
mrt = ipmr_rt_fib_lookup(net, skb);
if (IS_ERR(mrt))
goto drop;
if (__pim_rcv(mrt, skb, sizeof(*pim))) {
Expand Down

0 comments on commit 417da66

Please sign in to comment.