ipv4: In ip_build_and_send_pkt() use 'saddr' and 'daddr' args passed in.
authorDavid S. Miller <davem@davemloft.net>
Wed, 4 May 2011 19:03:30 +0000 (12:03 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 May 2011 19:03:30 +0000 (12:03 -0700)
Instead of rt->rt_{dst,src}

The only tricky part is source route option handling.

If the source route option is enabled we can't just use plain 'daddr',
we have to use opt->opt.faddr.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_output.c

index 3aa4c31e5448e337115a92022ae7156cfd60eaa4..db38c1822de8ed8c79903d5a4dca99e142451992 100644 (file)
@@ -158,8 +158,8 @@ int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
        else
                iph->frag_off = 0;
        iph->ttl      = ip_select_ttl(inet, &rt->dst);
-       iph->daddr    = rt->rt_dst;
-       iph->saddr    = rt->rt_src;
+       iph->daddr    = (opt && opt->opt.srr ? opt->opt.faddr : daddr);
+       iph->saddr    = saddr;
        iph->protocol = sk->sk_protocol;
        ip_select_ident(iph, &rt->dst, sk);