summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2007-05-11 10:20:51 +0000
committerrwatson <rwatson@FreeBSD.org>2007-05-11 10:20:51 +0000
commit47d37a80be0931ad72e67db6ba915221afdfeb4f (patch)
tree830d52c0a835e86532d14a328bcdb1121e33e37a /sys
parent46a4c44c3b39d3c635f686c57785c0dd7511f2b6 (diff)
downloadFreeBSD-src-47d37a80be0931ad72e67db6ba915221afdfeb4f.zip
FreeBSD-src-47d37a80be0931ad72e67db6ba915221afdfeb4f.tar.gz
Reduce network stack oddness: implement .pru_sockaddr and .pru_peeraddr
protocol entry points using functions named proto_getsockaddr and proto_getpeeraddr rather than proto_setsockaddr and proto_setpeeraddr. While it's true that sockaddrs are allocated and set, the net effect is to retrieve (get) the socket address or peer address from a socket, not set it, so align names to that intent.
Diffstat (limited to 'sys')
-rw-r--r--sys/netatalk/ddp_usrreq.c10
-rw-r--r--sys/netgraph/ng_socket.c6
-rw-r--r--sys/netinet/in_pcb.c22
-rw-r--r--sys/netinet/in_pcb.h4
-rw-r--r--sys/netinet/ip_divert.c4
-rw-r--r--sys/netinet/raw_ip.c4
-rw-r--r--sys/netinet/tcp_usrreq.c6
-rw-r--r--sys/netinet/udp_usrreq.c4
-rw-r--r--sys/netinet6/in6_pcb.c30
-rw-r--r--sys/netinet6/in6_pcb.h4
-rw-r--r--sys/netinet6/raw_ip6.c4
-rw-r--r--sys/netipx/ipx_pcb.c4
-rw-r--r--sys/netipx/ipx_pcb.h4
-rw-r--r--sys/netipx/ipx_usrreq.c4
14 files changed, 46 insertions, 64 deletions
diff --git a/sys/netatalk/ddp_usrreq.c b/sys/netatalk/ddp_usrreq.c
index d2af633..df38e2a 100644
--- a/sys/netatalk/ddp_usrreq.c
+++ b/sys/netatalk/ddp_usrreq.c
@@ -285,19 +285,19 @@ ddp_clean(void)
#endif
static int
-at_setpeeraddr(struct socket *so, struct sockaddr **nam)
+at_getpeeraddr(struct socket *so, struct sockaddr **nam)
{
return (EOPNOTSUPP);
}
static int
-at_setsockaddr(struct socket *so, struct sockaddr **nam)
+at_getsockaddr(struct socket *so, struct sockaddr **nam)
{
struct ddpcb *ddp;
ddp = sotoddpcb(so);
- KASSERT(ddp != NULL, ("at_setsockaddr: ddp == NULL"));
+ KASSERT(ddp != NULL, ("at_getsockaddr: ddp == NULL"));
DDP_LOCK(ddp);
at_sockaddr(ddp, nam);
@@ -313,9 +313,9 @@ struct pr_usrreqs ddp_usrreqs = {
.pru_control = at_control,
.pru_detach = ddp_detach,
.pru_disconnect = ddp_disconnect,
- .pru_peeraddr = at_setpeeraddr,
+ .pru_peeraddr = at_getpeeraddr,
.pru_send = ddp_send,
.pru_shutdown = ddp_shutdown,
- .pru_sockaddr = at_setsockaddr,
+ .pru_sockaddr = at_getsockaddr,
.pru_close = ddp_close,
};
diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c
index 2a03275..45cf520 100644
--- a/sys/netgraph/ng_socket.c
+++ b/sys/netgraph/ng_socket.c
@@ -466,7 +466,7 @@ ngd_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
* Used for both data and control sockets
*/
static int
-ng_setsockaddr(struct socket *so, struct sockaddr **addr)
+ng_getsockaddr(struct socket *so, struct sockaddr **addr)
{
struct ngpcb *pcbp;
struct sockaddr_ng *sg;
@@ -1053,7 +1053,7 @@ static struct pr_usrreqs ngc_usrreqs = {
.pru_peeraddr = NULL,
.pru_send = ngc_send,
.pru_shutdown = NULL,
- .pru_sockaddr = ng_setsockaddr,
+ .pru_sockaddr = ng_getsockaddr,
.pru_close = NULL,
};
@@ -1067,7 +1067,7 @@ static struct pr_usrreqs ngd_usrreqs = {
.pru_peeraddr = NULL,
.pru_send = ngd_send,
.pru_shutdown = NULL,
- .pru_sockaddr = ng_setsockaddr,
+ .pru_sockaddr = ng_getsockaddr,
.pru_close = NULL,
};
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 04bd2cf..d7d8290 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -772,6 +772,9 @@ 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)
{
@@ -787,23 +790,15 @@ in_sockaddr(in_port_t port, struct in_addr *addr_p)
return (struct sockaddr *)sin;
}
-/*
- * The wrapper function will pass down the pcbinfo for this function to lock.
- * The socket must have a valid
- * (i.e., non-nil) PCB, but it should be impossible to get an invalid one
- * except through a kernel programming error, so it is acceptable to panic
- * (or in this case trap) if the PCB is invalid. (Actually, we don't trap
- * because there actually /is/ a programming error somewhere... XXX)
- */
int
-in_setsockaddr(struct socket *so, struct sockaddr **nam)
+in_getsockaddr(struct socket *so, struct sockaddr **nam)
{
struct inpcb *inp;
struct in_addr addr;
in_port_t port;
inp = sotoinpcb(so);
- KASSERT(inp != NULL, ("in_setsockaddr: inp == NULL"));
+ KASSERT(inp != NULL, ("in_getsockaddr: inp == NULL"));
INP_LOCK(inp);
port = inp->inp_lport;
@@ -814,18 +809,15 @@ in_setsockaddr(struct socket *so, struct sockaddr **nam)
return 0;
}
-/*
- * The wrapper function will pass down the pcbinfo for this function to lock.
- */
int
-in_setpeeraddr(struct socket *so, struct sockaddr **nam)
+in_getpeeraddr(struct socket *so, struct sockaddr **nam)
{
struct inpcb *inp;
struct in_addr addr;
in_port_t port;
inp = sotoinpcb(so);
- KASSERT(inp != NULL, ("in_setpeeraddr: inp == NULL"));
+ KASSERT(inp != NULL, ("in_getpeeraddr: inp == NULL"));
INP_LOCK(inp);
port = inp->inp_fport;
diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h
index 70a5aa1..1467b6a 100644
--- a/sys/netinet/in_pcb.h
+++ b/sys/netinet/in_pcb.h
@@ -391,8 +391,8 @@ void in_pcbnotifyall(struct inpcbinfo *pcbinfo, struct in_addr,
int, struct inpcb *(*)(struct inpcb *, int));
void in_pcbrehash(struct inpcb *);
void in_pcbsetsolabel(struct socket *so);
-int in_setpeeraddr(struct socket *so, struct sockaddr **nam);
-int in_setsockaddr(struct socket *so, struct sockaddr **nam);
+int in_getpeeraddr(struct socket *so, struct sockaddr **nam);
+int in_getsockaddr(struct socket *so, struct sockaddr **nam);
struct sockaddr *
in_sockaddr(in_port_t port, struct in_addr *addr);
void in_pcbsosetlabel(struct socket *so);
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c
index 2d2a314..a5f904b 100644
--- a/sys/netinet/ip_divert.c
+++ b/sys/netinet/ip_divert.c
@@ -635,10 +635,10 @@ struct pr_usrreqs div_usrreqs = {
.pru_bind = div_bind,
.pru_control = in_control,
.pru_detach = div_detach,
- .pru_peeraddr = in_setpeeraddr,
+ .pru_peeraddr = in_getpeeraddr,
.pru_send = div_send,
.pru_shutdown = div_shutdown,
- .pru_sockaddr = in_setsockaddr,
+ .pru_sockaddr = in_getsockaddr,
.pru_sosetlabel = in_pcbsosetlabel
};
diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c
index 0fecafa..3eef187 100644
--- a/sys/netinet/raw_ip.c
+++ b/sys/netinet/raw_ip.c
@@ -920,10 +920,10 @@ struct pr_usrreqs rip_usrreqs = {
.pru_control = in_control,
.pru_detach = rip_detach,
.pru_disconnect = rip_disconnect,
- .pru_peeraddr = in_setpeeraddr,
+ .pru_peeraddr = in_getpeeraddr,
.pru_send = rip_send,
.pru_shutdown = rip_shutdown,
- .pru_sockaddr = in_setsockaddr,
+ .pru_sockaddr = in_getsockaddr,
.pru_sosetlabel = in_pcbsosetlabel,
.pru_close = rip_close,
};
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index f28b0ba..8845efc 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -618,7 +618,7 @@ tcp_usr_accept(struct socket *so, struct sockaddr **nam)
TCPDEBUG1();
/*
- * We inline in_setpeeraddr and COMMON_END here, so that we can
+ * We inline in_getpeeraddr and COMMON_END here, so that we can
* copy the data of interest and defer the malloc until after we
* release the lock.
*/
@@ -1036,12 +1036,12 @@ struct pr_usrreqs tcp_usrreqs = {
.pru_detach = tcp_usr_detach,
.pru_disconnect = tcp_usr_disconnect,
.pru_listen = tcp_usr_listen,
- .pru_peeraddr = in_setpeeraddr,
+ .pru_peeraddr = in_getpeeraddr,
.pru_rcvd = tcp_usr_rcvd,
.pru_rcvoob = tcp_usr_rcvoob,
.pru_send = tcp_usr_send,
.pru_shutdown = tcp_usr_shutdown,
- .pru_sockaddr = in_setsockaddr,
+ .pru_sockaddr = in_getsockaddr,
.pru_sosetlabel = in_pcbsosetlabel,
.pru_close = tcp_usr_close,
};
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 4e853ca..cf2661c 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -1143,11 +1143,11 @@ struct pr_usrreqs udp_usrreqs = {
.pru_control = in_control,
.pru_detach = udp_detach,
.pru_disconnect = udp_disconnect,
- .pru_peeraddr = in_setpeeraddr,
+ .pru_peeraddr = in_getpeeraddr,
.pru_send = udp_send,
.pru_sosend = sosend_dgram,
.pru_shutdown = udp_shutdown,
- .pru_sockaddr = in_setsockaddr,
+ .pru_sockaddr = in_getsockaddr,
.pru_sosetlabel = in_pcbsosetlabel,
.pru_close = udp_close,
};
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index ecd7ea0..d44e3e4 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -501,18 +501,8 @@ in6_v4mapsin6_sockaddr(port, addr_p)
return (struct sockaddr *)sin6_p;
}
-/*
- * The calling convention of in6_setsockaddr() and in6_setpeeraddr() was
- * modified to match the pru_sockaddr() and pru_peeraddr() entry points
- * in struct pr_usrreqs, so that protocols can just reference then directly
- * without the need for a wrapper function. The socket must have a valid
- * (i.e., non-nil) PCB, but it should be impossible to get an invalid one
- * except through a kernel programming error, so it is acceptable to panic
- * (or in this case trap) if the PCB is invalid. (Actually, we don't trap
- * because there actually /is/ a programming error somewhere... XXX)
- */
int
-in6_setsockaddr(so, nam)
+in6_getsockaddr(so, nam)
struct socket *so;
struct sockaddr **nam;
{
@@ -521,7 +511,7 @@ in6_setsockaddr(so, nam)
in_port_t port;
inp = sotoinpcb(so);
- KASSERT(inp != NULL, ("in6_setsockaddr: inp == NULL"));
+ KASSERT(inp != NULL, ("in6_getsockaddr: inp == NULL"));
INP_LOCK(inp);
port = inp->inp_lport;
@@ -533,7 +523,7 @@ in6_setsockaddr(so, nam)
}
int
-in6_setpeeraddr(so, nam)
+in6_getpeeraddr(so, nam)
struct socket *so;
struct sockaddr **nam;
{
@@ -542,7 +532,7 @@ in6_setpeeraddr(so, nam)
in_port_t port;
inp = sotoinpcb(so);
- KASSERT(inp != NULL, ("in6_setpeeraddr: inp == NULL"));
+ KASSERT(inp != NULL, ("in6_getpeeraddr: inp == NULL"));
INP_LOCK(inp);
port = inp->inp_fport;
@@ -563,12 +553,12 @@ in6_mapped_sockaddr(struct socket *so, struct sockaddr **nam)
KASSERT(inp != NULL, ("in6_mapped_sockaddr: inp == NULL"));
if ((inp->inp_vflag & (INP_IPV4 | INP_IPV6)) == INP_IPV4) {
- error = in_setsockaddr(so, nam);
+ error = in_getsockaddr(so, nam);
if (error == 0)
in6_sin_2_v4mapsin6_in_sock(nam);
} else {
- /* scope issues will be handled in in6_setsockaddr(). */
- error = in6_setsockaddr(so, nam);
+ /* scope issues will be handled in in6_getsockaddr(). */
+ error = in6_getsockaddr(so, nam);
}
return error;
@@ -584,12 +574,12 @@ in6_mapped_peeraddr(struct socket *so, struct sockaddr **nam)
KASSERT(inp != NULL, ("in6_mapped_peeraddr: inp == NULL"));
if ((inp->inp_vflag & (INP_IPV4 | INP_IPV6)) == INP_IPV4) {
- error = in_setpeeraddr(so, nam);
+ error = in_getpeeraddr(so, nam);
if (error == 0)
in6_sin_2_v4mapsin6_in_sock(nam);
} else
- /* scope issues will be handled in in6_setpeeraddr(). */
- error = in6_setpeeraddr(so, nam);
+ /* scope issues will be handled in in6_getpeeraddr(). */
+ error = in6_getpeeraddr(so, nam);
return error;
}
diff --git a/sys/netinet6/in6_pcb.h b/sys/netinet6/in6_pcb.h
index a1f4190..832c755 100644
--- a/sys/netinet6/in6_pcb.h
+++ b/sys/netinet6/in6_pcb.h
@@ -95,8 +95,8 @@ struct sockaddr *
in6_sockaddr __P((in_port_t port, struct in6_addr *addr_p));
struct sockaddr *
in6_v4mapsin6_sockaddr __P((in_port_t port, struct in_addr *addr_p));
-int in6_setpeeraddr __P((struct socket *so, struct sockaddr **nam));
-int in6_setsockaddr __P((struct socket *so, struct sockaddr **nam));
+int in6_getpeeraddr __P((struct socket *so, struct sockaddr **nam));
+int in6_getsockaddr __P((struct socket *so, struct sockaddr **nam));
int in6_mapped_sockaddr __P((struct socket *so, struct sockaddr **nam));
int in6_mapped_peeraddr __P((struct socket *so, struct sockaddr **nam));
int in6_selecthlim __P((struct in6pcb *, struct ifnet *));
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index 739d854..f06d1eb 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -819,9 +819,9 @@ struct pr_usrreqs rip6_usrreqs = {
.pru_control = in6_control,
.pru_detach = rip6_detach,
.pru_disconnect = rip6_disconnect,
- .pru_peeraddr = in6_setpeeraddr,
+ .pru_peeraddr = in6_getpeeraddr,
.pru_send = rip6_send,
.pru_shutdown = rip6_shutdown,
- .pru_sockaddr = in6_setsockaddr,
+ .pru_sockaddr = in6_getsockaddr,
.pru_close = rip6_close,
};
diff --git a/sys/netipx/ipx_pcb.c b/sys/netipx/ipx_pcb.c
index 39663f6..c6cfd2a 100644
--- a/sys/netipx/ipx_pcb.c
+++ b/sys/netipx/ipx_pcb.c
@@ -333,7 +333,7 @@ ipx_pcbfree(ipxp)
}
void
-ipx_setsockaddr(ipxp, nam)
+ipx_getsockaddr(ipxp, nam)
register struct ipxpcb *ipxp;
struct sockaddr **nam;
{
@@ -350,7 +350,7 @@ ipx_setsockaddr(ipxp, nam)
}
void
-ipx_setpeeraddr(ipxp, nam)
+ipx_getpeeraddr(ipxp, nam)
register struct ipxpcb *ipxp;
struct sockaddr **nam;
{
diff --git a/sys/netipx/ipx_pcb.h b/sys/netipx/ipx_pcb.h
index 755eb5a..5b5921e 100644
--- a/sys/netipx/ipx_pcb.h
+++ b/sys/netipx/ipx_pcb.h
@@ -131,8 +131,8 @@ void ipx_pcbdisconnect(struct ipxpcb *ipxp);
void ipx_pcbfree(struct ipxpcb *ipxp);
struct ipxpcb *
ipx_pcblookup(struct ipx_addr *faddr, int lport, int wildp);
-void ipx_setpeeraddr(struct ipxpcb *ipxp, struct sockaddr **nam);
-void ipx_setsockaddr(struct ipxpcb *ipxp, struct sockaddr **nam);
+void ipx_getpeeraddr(struct ipxpcb *ipxp, struct sockaddr **nam);
+void ipx_getsockaddr(struct ipxpcb *ipxp, struct sockaddr **nam);
#define IPX_LIST_LOCK_INIT() mtx_init(&ipxpcb_list_mtx, "ipx_list_mtx", \
NULL, MTX_DEF | MTX_RECURSE)
diff --git a/sys/netipx/ipx_usrreq.c b/sys/netipx/ipx_usrreq.c
index 2ee7e94..ad60f4b 100644
--- a/sys/netipx/ipx_usrreq.c
+++ b/sys/netipx/ipx_usrreq.c
@@ -586,7 +586,7 @@ ipx_peeraddr(so, nam)
struct ipxpcb *ipxp = sotoipxpcb(so);
KASSERT(ipxp != NULL, ("ipx_peeraddr: ipxp == NULL"));
- ipx_setpeeraddr(ipxp, nam);
+ ipx_getpeeraddr(ipxp, nam);
return (0);
}
@@ -671,7 +671,7 @@ ipx_sockaddr(so, nam)
struct ipxpcb *ipxp = sotoipxpcb(so);
KASSERT(ipxp != NULL, ("ipx_sockaddr: ipxp == NULL"));
- ipx_setsockaddr(ipxp, nam);
+ ipx_getsockaddr(ipxp, nam);
return (0);
}
OpenPOWER on IntegriCloud