version 1.146.2.5, 2016/05/29 08:44:38 |
version 1.146.2.6, 2016/10/05 20:56:09 |
Line 554 rip_bind(struct socket *so, struct socka |
|
Line 554 rip_bind(struct socket *so, struct socka |
|
struct inpcb *inp = sotoinpcb(so); |
struct inpcb *inp = sotoinpcb(so); |
struct sockaddr_in *addr = (struct sockaddr_in *)nam; |
struct sockaddr_in *addr = (struct sockaddr_in *)nam; |
int error = 0; |
int error = 0; |
int s; |
int s, ss; |
struct ifaddr *ia; |
struct ifaddr *ifa; |
|
|
KASSERT(solocked(so)); |
KASSERT(solocked(so)); |
KASSERT(inp != NULL); |
KASSERT(inp != NULL); |
Line 573 rip_bind(struct socket *so, struct socka |
|
Line 573 rip_bind(struct socket *so, struct socka |
|
error = EAFNOSUPPORT; |
error = EAFNOSUPPORT; |
goto release; |
goto release; |
} |
} |
if ((ia = ifa_ifwithaddr(sintosa(addr))) == 0 && |
ss = pserialize_read_enter(); |
|
if ((ifa = ifa_ifwithaddr(sintosa(addr))) == NULL && |
!in_nullhost(addr->sin_addr)) |
!in_nullhost(addr->sin_addr)) |
{ |
{ |
|
pserialize_read_exit(ss); |
error = EADDRNOTAVAIL; |
error = EADDRNOTAVAIL; |
goto release; |
goto release; |
} |
} |
if (ia && ((struct in_ifaddr *)ia)->ia4_flags & |
if (ifa && (ifatoia(ifa))->ia4_flags & IN6_IFF_DUPLICATED) { |
(IN6_IFF_NOTREADY | IN_IFF_DETACHED)) |
pserialize_read_exit(ss); |
{ |
|
error = EADDRNOTAVAIL; |
error = EADDRNOTAVAIL; |
goto release; |
goto release; |
} |
} |
|
pserialize_read_exit(ss); |
|
|
inp->inp_laddr = addr->sin_addr; |
inp->inp_laddr = addr->sin_addr; |
|
|