diff options
author | truckman <truckman@FreeBSD.org> | 2002-08-21 11:57:12 +0000 |
---|---|---|
committer | truckman <truckman@FreeBSD.org> | 2002-08-21 11:57:12 +0000 |
commit | 7199888e8f06576febc8146d51d09b781470e8ce (patch) | |
tree | 20c70efb8a65a6f9c615daec57afaba3656fe3cc /sys/netinet/in_pcb.h | |
parent | 2d2341a634a0d5c812cce6d8552614bd05f799c4 (diff) | |
download | FreeBSD-src-7199888e8f06576febc8146d51d09b781470e8ce.zip FreeBSD-src-7199888e8f06576febc8146d51d09b781470e8ce.tar.gz |
Create new functions in_sockaddr(), in6_sockaddr(), and
in6_v4mapsin6_sockaddr() which allocate the appropriate sockaddr_in*
structure and initialize it with the address and port information passed
as arguments. Use calls to these new functions to replace code that is
replicated multiple times in in_setsockaddr(), in_setpeeraddr(),
in6_setsockaddr(), in6_setpeeraddr(), in6_mapped_sockaddr(), and
in6_mapped_peeraddr(). Inline COMMON_END in tcp_usr_accept() so that
we can call in_sockaddr() with temporary copies of the address and port
after the PCB is unlocked.
Fix the lock violation in tcp6_usr_accept() (caused by calling MALLOC()
inside in6_mapped_peeraddr() while the PCB is locked) by changing
the implementation of tcp6_usr_accept() to match tcp_usr_accept().
Reviewed by: suz
Diffstat (limited to 'sys/netinet/in_pcb.h')
-rw-r--r-- | sys/netinet/in_pcb.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h index d4d049c..1654eb9 100644 --- a/sys/netinet/in_pcb.h +++ b/sys/netinet/in_pcb.h @@ -344,6 +344,8 @@ void in_pcbnotifyall(struct inpcbinfo *pcbinfo, struct in_addr, void in_pcbrehash(struct inpcb *); int in_setpeeraddr(struct socket *so, struct sockaddr **nam, struct inpcbinfo *pcbinfo); int in_setsockaddr(struct socket *so, struct sockaddr **nam, struct inpcbinfo *pcbinfo);; +struct sockaddr * + in_sockaddr(in_port_t port, struct in_addr *addr); void in_pcbremlists(struct inpcb *inp); int prison_xinpcb(struct thread *td, struct inpcb *inp); #endif /* _KERNEL */ |