diff options
author | wollman <wollman@FreeBSD.org> | 1997-02-18 20:46:36 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1997-02-18 20:46:36 +0000 |
commit | 9c02696981a3e802694006b17a0654f76ffe2c87 (patch) | |
tree | de43a65608f4e16314533102f763778f5f0efe26 /sys/netinet/in_pcb.c | |
parent | 348a992441e4cfa6fff7a76bd128868ccc008872 (diff) | |
download | FreeBSD-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.c | 25 |
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; } /* |