aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/in_pcb.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r--sys/netinet/in_pcb.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 49e0b49e7e7e..797c0dc445dd 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -1824,57 +1824,40 @@ in_pcbdrop(struct inpcb *inp)
/*
* Common routines to return the socket addresses associated with inpcbs.
*/
-struct sockaddr *
-in_sockaddr(in_port_t port, struct in_addr *addr_p)
-{
- struct sockaddr_in *sin;
-
- sin = malloc(sizeof *sin, M_SONAME,
- M_WAITOK | M_ZERO);
- sin->sin_family = AF_INET;
- sin->sin_len = sizeof(*sin);
- sin->sin_addr = *addr_p;
- sin->sin_port = port;
-
- return (struct sockaddr *)sin;
-}
-
int
-in_getsockaddr(struct socket *so, struct sockaddr **nam)
+in_getsockaddr(struct socket *so, struct sockaddr *sa)
{
struct inpcb *inp;
- struct in_addr addr;
- in_port_t port;
inp = sotoinpcb(so);
KASSERT(inp != NULL, ("in_getsockaddr: inp == NULL"));
- INP_RLOCK(inp);
- port = inp->inp_lport;
- addr = inp->inp_laddr;
- INP_RUNLOCK(inp);
+ *(struct sockaddr_in *)sa = (struct sockaddr_in ){
+ .sin_len = sizeof(struct sockaddr_in),
+ .sin_family = AF_INET,
+ .sin_port = inp->inp_lport,
+ .sin_addr = inp->inp_laddr,
+ };
- *nam = in_sockaddr(port, &addr);
- return 0;
+ return (0);
}
int
-in_getpeeraddr(struct socket *so, struct sockaddr **nam)
+in_getpeeraddr(struct socket *so, struct sockaddr *sa)
{
struct inpcb *inp;
- struct in_addr addr;
- in_port_t port;
inp = sotoinpcb(so);
KASSERT(inp != NULL, ("in_getpeeraddr: inp == NULL"));
- INP_RLOCK(inp);
- port = inp->inp_fport;
- addr = inp->inp_faddr;
- INP_RUNLOCK(inp);
+ *(struct sockaddr_in *)sa = (struct sockaddr_in ){
+ .sin_len = sizeof(struct sockaddr_in),
+ .sin_family = AF_INET,
+ .sin_port = inp->inp_fport,
+ .sin_addr = inp->inp_faddr,
+ };
- *nam = in_sockaddr(port, &addr);
- return 0;
+ return (0);
}
static bool