Commit 79ab0531 authored by David S. Miller's avatar David S. Miller

ipv4: udp: Eliminate remaining uses of rt->rt_src

We already track and pass around the correct flow key,
so simply use it in udp_send_skb().
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9f6abb5f
...@@ -706,12 +706,11 @@ static void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst) ...@@ -706,12 +706,11 @@ static void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst)
} }
} }
static int udp_send_skb(struct sk_buff *skb, __be32 daddr, __be32 dport) static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4)
{ {
struct sock *sk = skb->sk; struct sock *sk = skb->sk;
struct inet_sock *inet = inet_sk(sk); struct inet_sock *inet = inet_sk(sk);
struct udphdr *uh; struct udphdr *uh;
struct rtable *rt = (struct rtable *)skb_dst(skb);
int err = 0; int err = 0;
int is_udplite = IS_UDPLITE(sk); int is_udplite = IS_UDPLITE(sk);
int offset = skb_transport_offset(skb); int offset = skb_transport_offset(skb);
...@@ -723,7 +722,7 @@ static int udp_send_skb(struct sk_buff *skb, __be32 daddr, __be32 dport) ...@@ -723,7 +722,7 @@ static int udp_send_skb(struct sk_buff *skb, __be32 daddr, __be32 dport)
*/ */
uh = udp_hdr(skb); uh = udp_hdr(skb);
uh->source = inet->inet_sport; uh->source = inet->inet_sport;
uh->dest = dport; uh->dest = fl4->fl4_dport;
uh->len = htons(len); uh->len = htons(len);
uh->check = 0; uh->check = 0;
...@@ -737,14 +736,14 @@ static int udp_send_skb(struct sk_buff *skb, __be32 daddr, __be32 dport) ...@@ -737,14 +736,14 @@ static int udp_send_skb(struct sk_buff *skb, __be32 daddr, __be32 dport)
} else if (skb->ip_summed == CHECKSUM_PARTIAL) { /* UDP hardware csum */ } else if (skb->ip_summed == CHECKSUM_PARTIAL) { /* UDP hardware csum */
udp4_hwcsum(skb, rt->rt_src, daddr); udp4_hwcsum(skb, fl4->saddr, fl4->daddr);
goto send; goto send;
} else } else
csum = udp_csum(skb); csum = udp_csum(skb);
/* add protocol-dependent pseudo-header */ /* add protocol-dependent pseudo-header */
uh->check = csum_tcpudp_magic(rt->rt_src, daddr, len, uh->check = csum_tcpudp_magic(fl4->saddr, fl4->daddr, len,
sk->sk_protocol, csum); sk->sk_protocol, csum);
if (uh->check == 0) if (uh->check == 0)
uh->check = CSUM_MANGLED_0; uh->check = CSUM_MANGLED_0;
...@@ -778,7 +777,7 @@ static int udp_push_pending_frames(struct sock *sk) ...@@ -778,7 +777,7 @@ static int udp_push_pending_frames(struct sock *sk)
if (!skb) if (!skb)
goto out; goto out;
err = udp_send_skb(skb, fl4->daddr, fl4->fl4_dport); err = udp_send_skb(skb, fl4);
out: out:
up->len = 0; up->len = 0;
...@@ -963,7 +962,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, ...@@ -963,7 +962,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
msg->msg_flags); msg->msg_flags);
err = PTR_ERR(skb); err = PTR_ERR(skb);
if (skb && !IS_ERR(skb)) if (skb && !IS_ERR(skb))
err = udp_send_skb(skb, daddr, dport); err = udp_send_skb(skb, fl4);
goto out; goto out;
} }
......
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