|
@@ -98,17 +98,14 @@ ipv4_connected:
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
- ipv6_addr_set(&np->daddr, 0, 0, htonl(0x0000ffff), inet->daddr);
|
|
|
+ ipv6_addr_set_v4mapped(inet->daddr, &np->daddr);
|
|
|
|
|
|
- if (ipv6_addr_any(&np->saddr)) {
|
|
|
- ipv6_addr_set(&np->saddr, 0, 0, htonl(0x0000ffff),
|
|
|
- inet->saddr);
|
|
|
- }
|
|
|
+ if (ipv6_addr_any(&np->saddr))
|
|
|
+ ipv6_addr_set_v4mapped(inet->saddr, &np->saddr);
|
|
|
+
|
|
|
+ if (ipv6_addr_any(&np->rcv_saddr))
|
|
|
+ ipv6_addr_set_v4mapped(inet->rcv_saddr, &np->rcv_saddr);
|
|
|
|
|
|
- if (ipv6_addr_any(&np->rcv_saddr)) {
|
|
|
- ipv6_addr_set(&np->rcv_saddr, 0, 0, htonl(0x0000ffff),
|
|
|
- inet->rcv_saddr);
|
|
|
- }
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
@@ -330,9 +327,8 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
|
|
if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL)
|
|
|
sin->sin6_scope_id = IP6CB(skb)->iif;
|
|
|
} else {
|
|
|
- ipv6_addr_set(&sin->sin6_addr, 0, 0,
|
|
|
- htonl(0xffff),
|
|
|
- *(__be32 *)(nh + serr->addr_offset));
|
|
|
+ ipv6_addr_set_v4mapped(*(__be32 *)(nh + serr->addr_offset),
|
|
|
+ &sin->sin6_addr);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -352,8 +348,8 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
|
|
} else {
|
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
|
|
|
|
- ipv6_addr_set(&sin->sin6_addr, 0, 0,
|
|
|
- htonl(0xffff), ip_hdr(skb)->saddr);
|
|
|
+ ipv6_addr_set_v4mapped(ip_hdr(skb)->saddr,
|
|
|
+ &sin->sin6_addr);
|
|
|
if (inet->cmsg_flags)
|
|
|
ip_cmsg_recv(msg, skb);
|
|
|
}
|