mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
commit
3f64116a83
66 changed files with 594 additions and 290 deletions
|
|
@ -167,18 +167,22 @@ int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
|
|||
if (np->sndflow)
|
||||
fl6_flowlabel = usin->sin6_flowinfo & IPV6_FLOWINFO_MASK;
|
||||
|
||||
addr_type = ipv6_addr_type(&usin->sin6_addr);
|
||||
|
||||
if (addr_type == IPV6_ADDR_ANY) {
|
||||
if (ipv6_addr_any(&usin->sin6_addr)) {
|
||||
/*
|
||||
* connect to self
|
||||
*/
|
||||
usin->sin6_addr.s6_addr[15] = 0x01;
|
||||
if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
|
||||
ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
|
||||
&usin->sin6_addr);
|
||||
else
|
||||
usin->sin6_addr = in6addr_loopback;
|
||||
}
|
||||
|
||||
addr_type = ipv6_addr_type(&usin->sin6_addr);
|
||||
|
||||
daddr = &usin->sin6_addr;
|
||||
|
||||
if (addr_type == IPV6_ADDR_MAPPED) {
|
||||
if (addr_type & IPV6_ADDR_MAPPED) {
|
||||
struct sockaddr_in sin;
|
||||
|
||||
if (__ipv6_only_sock(sk)) {
|
||||
|
|
|
|||
|
|
@ -1022,6 +1022,9 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (ipv6_addr_v4mapped(&fl6->saddr) &&
|
||||
!(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr)))
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -149,8 +149,13 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
|||
* connect() to INADDR_ANY means loopback (BSD'ism).
|
||||
*/
|
||||
|
||||
if (ipv6_addr_any(&usin->sin6_addr))
|
||||
usin->sin6_addr.s6_addr[15] = 0x1;
|
||||
if (ipv6_addr_any(&usin->sin6_addr)) {
|
||||
if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
|
||||
ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
|
||||
&usin->sin6_addr);
|
||||
else
|
||||
usin->sin6_addr = in6addr_loopback;
|
||||
}
|
||||
|
||||
addr_type = ipv6_addr_type(&usin->sin6_addr);
|
||||
|
||||
|
|
@ -189,7 +194,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
|||
* TCP over IPv4
|
||||
*/
|
||||
|
||||
if (addr_type == IPV6_ADDR_MAPPED) {
|
||||
if (addr_type & IPV6_ADDR_MAPPED) {
|
||||
u32 exthdrlen = icsk->icsk_ext_hdr_len;
|
||||
struct sockaddr_in sin;
|
||||
|
||||
|
|
|
|||
|
|
@ -1046,6 +1046,10 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|||
if (addr_len < SIN6_LEN_RFC2133)
|
||||
return -EINVAL;
|
||||
daddr = &sin6->sin6_addr;
|
||||
if (ipv6_addr_any(daddr) &&
|
||||
ipv6_addr_v4mapped(&np->saddr))
|
||||
ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
|
||||
daddr);
|
||||
break;
|
||||
case AF_INET:
|
||||
goto do_udp_sendmsg;
|
||||
|
|
|
|||
Loading…
Reference in a new issue