ipv6: Remove external dependency on rt6i_dst and rt6i_src
This patch removes the assumptions that the returned rt is always a RTF_CACHE entry with the rt6i_dst and rt6i_src containing the destination and source address. The dst and src can be recovered from the calling site. We may consider to rename (rt6i_dst, rt6i_src) to (rt6i_key_dst, rt6i_key_src) later. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Reviewed-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Cc: Steffen Klassert <steffen.klassert@secunet.com> Cc: Julian Anastasov <ja@ssi.bg> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
286c2349f6
commit
fd0273d793
@@ -459,7 +459,7 @@ int ip6_forward(struct sk_buff *skb)
|
||||
else
|
||||
target = &hdr->daddr;
|
||||
|
||||
peer = inet_getpeer_v6(net->ipv6.peers, &rt->rt6i_dst.addr, 1);
|
||||
peer = inet_getpeer_v6(net->ipv6.peers, &hdr->daddr, 1);
|
||||
|
||||
/* Limit redirects both by destination (here)
|
||||
and by source (inside ndisc_send_redirect)
|
||||
@@ -584,7 +584,8 @@ int ip6_fragment(struct sock *sk, struct sk_buff *skb,
|
||||
}
|
||||
mtu -= hlen + sizeof(struct frag_hdr);
|
||||
|
||||
frag_id = ipv6_select_ident(net, rt);
|
||||
frag_id = ipv6_select_ident(net, &ipv6_hdr(skb)->daddr,
|
||||
&ipv6_hdr(skb)->saddr);
|
||||
|
||||
if (skb_has_frag_list(skb)) {
|
||||
int first_len = skb_pagelen(skb);
|
||||
@@ -1057,7 +1058,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,
|
||||
int odd, struct sk_buff *skb),
|
||||
void *from, int length, int hh_len, int fragheaderlen,
|
||||
int transhdrlen, int mtu, unsigned int flags,
|
||||
struct rt6_info *rt)
|
||||
const struct flowi6 *fl6)
|
||||
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
@@ -1102,7 +1103,9 @@ static inline int ip6_ufo_append_data(struct sock *sk,
|
||||
skb_shinfo(skb)->gso_size = (mtu - fragheaderlen -
|
||||
sizeof(struct frag_hdr)) & ~7;
|
||||
skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
|
||||
skb_shinfo(skb)->ip6_frag_id = ipv6_select_ident(sock_net(sk), rt);
|
||||
skb_shinfo(skb)->ip6_frag_id = ipv6_select_ident(sock_net(sk),
|
||||
&fl6->daddr,
|
||||
&fl6->saddr);
|
||||
|
||||
append:
|
||||
return skb_append_datato_frags(sk, skb, getfrag, from,
|
||||
@@ -1327,7 +1330,7 @@ emsgsize:
|
||||
(sk->sk_type == SOCK_DGRAM)) {
|
||||
err = ip6_ufo_append_data(sk, queue, getfrag, from, length,
|
||||
hh_len, fragheaderlen,
|
||||
transhdrlen, mtu, flags, rt);
|
||||
transhdrlen, mtu, flags, fl6);
|
||||
if (err)
|
||||
goto error;
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user