summaryrefslogtreecommitdiffstats
path: root/sys/netinet/in_pcb.c
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1997-02-18 20:46:36 +0000
committerwollman <wollman@FreeBSD.org>1997-02-18 20:46:36 +0000
commit9c02696981a3e802694006b17a0654f76ffe2c87 (patch)
treede43a65608f4e16314533102f763778f5f0efe26 /sys/netinet/in_pcb.c
parent348a992441e4cfa6fff7a76bd128868ccc008872 (diff)
downloadFreeBSD-src-9c02696981a3e802694006b17a0654f76ffe2c87.zip
FreeBSD-src-9c02696981a3e802694006b17a0654f76ffe2c87.tar.gz
Convert raw IP from mondo-switch-statement-from-Hell to
pr_usrreqs. Collapse duplicates with udp_usrreq.c and tcp_usrreq.c (calling the generic routines in uipc_socket2.c and in_pcb.c). Calling sockaddr()_ or peeraddr() on a detached socket now traps, rather than harmlessly returning an error; this should never happen. Allow the raw IP buffer sizes to be controlled via sysctl.
Diffstat (limited to 'sys/netinet/in_pcb.c')
-rw-r--r--sys/netinet/in_pcb.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 9d4d566..94b6547 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -454,11 +454,21 @@ in_pcbdetach(inp)
FREE(inp, M_PCB);
}
-void
-in_setsockaddr(inp, nam)
- register struct inpcb *inp;
+/*
+ * The calling convention of in_setsockaddr() and in_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.
+ */
+int
+in_setsockaddr(so, nam)
+ struct socket *so;
struct mbuf *nam;
{
+ register struct inpcb *inp = sotoinpcb(so);
register struct sockaddr_in *sin;
nam->m_len = sizeof (*sin);
@@ -468,13 +478,15 @@ in_setsockaddr(inp, nam)
sin->sin_len = sizeof(*sin);
sin->sin_port = inp->inp_lport;
sin->sin_addr = inp->inp_laddr;
+ return 0;
}
-void
-in_setpeeraddr(inp, nam)
- struct inpcb *inp;
+int
+in_setpeeraddr(so, nam)
+ struct socket *so;
struct mbuf *nam;
{
+ struct inpcb *inp = sotoinpcb(so);
register struct sockaddr_in *sin;
nam->m_len = sizeof (*sin);
@@ -484,6 +496,7 @@ in_setpeeraddr(inp, nam)
sin->sin_len = sizeof(*sin);
sin->sin_port = inp->inp_fport;
sin->sin_addr = inp->inp_faddr;
+ return 0;
}
/*
OpenPOWER on IntegriCloud