diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/sys_socket.c | 9 | ||||
-rw-r--r-- | sys/kern/uipc_domain.c | 6 | ||||
-rw-r--r-- | sys/kern/uipc_sockbuf.c | 122 | ||||
-rw-r--r-- | sys/kern/uipc_socket.c | 54 | ||||
-rw-r--r-- | sys/kern/uipc_socket2.c | 122 | ||||
-rw-r--r-- | sys/kern/uipc_syscalls.c | 6 | ||||
-rw-r--r-- | sys/net/if.c | 33 | ||||
-rw-r--r-- | sys/netinet/in_proto.c | 7 | ||||
-rw-r--r-- | sys/netinet/tcp_timer.c | 20 | ||||
-rw-r--r-- | sys/netinet/tcp_usrreq.c | 429 | ||||
-rw-r--r-- | sys/netinet/tcp_var.h | 5 | ||||
-rw-r--r-- | sys/nfs/nfs_socket.c | 11 | ||||
-rw-r--r-- | sys/nfsclient/nfs_socket.c | 11 | ||||
-rw-r--r-- | sys/nfsserver/nfs_srvsock.c | 11 | ||||
-rw-r--r-- | sys/sys/protosw.h | 15 |
15 files changed, 566 insertions, 295 deletions
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c index 63af0ad..4038037 100644 --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)sys_socket.c 8.1 (Berkeley) 6/10/93 - * $Id: sys_socket.c,v 1.6 1995/12/14 08:31:49 phk Exp $ + * $Id: sys_socket.c,v 1.7 1996/03/11 15:12:43 davidg Exp $ */ #include <sys/param.h> @@ -138,8 +138,7 @@ soo_ioctl(fp, cmd, data, p) return (ifioctl(so, cmd, data, p)); if (IOCGROUP(cmd) == 'r') return (rtioctl(cmd, data, p)); - return ((*so->so_proto->pr_usrreq)(so, PRU_CONTROL, - (struct mbuf *)cmd, (struct mbuf *)data, (struct mbuf *)0)); + return ((*so->so_proto->pr_usrreqs->pru_control)(so, cmd, data, 0)); } int @@ -192,9 +191,7 @@ soo_stat(so, ub) bzero((caddr_t)ub, sizeof (*ub)); ub->st_mode = S_IFSOCK; - return ((*so->so_proto->pr_usrreq)(so, PRU_SENSE, - (struct mbuf *)ub, (struct mbuf *)0, - (struct mbuf *)0)); + return ((*so->so_proto->pr_usrreqs->pru_sense)(so, ub)); } /* ARGSUSED */ diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c index c989f94..dd1d8c1b 100644 --- a/sys/kern/uipc_domain.c +++ b/sys/kern/uipc_domain.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)uipc_domain.c 8.2 (Berkeley) 10/18/93 - * $Id: uipc_domain.c,v 1.12 1995/12/16 02:13:50 bde Exp $ + * $Id: uipc_domain.c,v 1.13 1996/07/09 19:12:51 wollman Exp $ */ #include <sys/param.h> @@ -106,10 +106,8 @@ domaininit(dummy) for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++){ #ifdef PRU_OLDSTYLE /* See comments in uipc_socket2.c. */ - if (pr->pr_usrreqs == 0) + if (pr->pr_usrreqs == 0 && pr->pr_ousrreq) pr->pr_usrreqs = &pru_oldstyle; - else if(pr->pr_usrreq == 0) - pr->pr_usrreq = pr_newstyle_usrreq; #endif if (pr->pr_init) (*pr->pr_init)(); diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c index 4a8227d..a178e02 100644 --- a/sys/kern/uipc_sockbuf.c +++ b/sys/kern/uipc_sockbuf.c @@ -186,8 +186,7 @@ sonewconn1(head, connstatus) so->so_state |= SS_INCOMP; } head->so_qlen++; - if ((*so->so_proto->pr_usrreq)(so, PRU_ATTACH, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0)) { + if ((*so->so_proto->pr_usrreqs->pru_attach)(so, 0)) { if (so->so_state & SS_COMP) { TAILQ_REMOVE(&head->so_comp, so, so_list); } else { @@ -768,19 +767,19 @@ sbdroprecord(sb) static int old_abort(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_ABORT, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_ABORT, nomb, nomb, nomb); } static int old_accept(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_ACCEPT, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_ACCEPT, nomb, nam, nomb); } static int old_attach(struct socket *so, int proto) { - return so->so_proto->pr_usrreq(so, PRU_ATTACH, nomb, + return so->so_proto->pr_ousrreq(so, PRU_ATTACH, nomb, (struct mbuf *)proto, /* XXX */ nomb); } @@ -788,57 +787,58 @@ old_attach(struct socket *so, int proto) static int old_bind(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_BIND, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_BIND, nomb, nam, nomb); } static int old_connect(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_CONNECT, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_CONNECT, nomb, nam, nomb); } static int old_connect2(struct socket *so1, struct socket *so2) { - return so1->so_proto->pr_usrreq(so1, PRU_CONNECT2, nomb, + return so1->so_proto->pr_ousrreq(so1, PRU_CONNECT2, nomb, (struct mbuf *)so2, nomb); } static int -old_control(struct socket *so, int cmd, caddr_t data) +old_control(struct socket *so, int cmd, caddr_t data, struct ifnet *ifp) { - return so->so_proto->pr_usrreq(so, PRU_CONTROL, (struct mbuf *)cmd, - (struct mbuf *)data, nomb); + return so->so_proto->pr_ousrreq(so, PRU_CONTROL, (struct mbuf *)cmd, + (struct mbuf *)data, + (struct mbuf *)ifp); } static int old_detach(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_DETACH, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_DETACH, nomb, nomb, nomb); } static int old_disconnect(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_DISCONNECT, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_DISCONNECT, nomb, nomb, nomb); } static int old_listen(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_LISTEN, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_LISTEN, nomb, nomb, nomb); } static int old_peeraddr(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_PEERADDR, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_PEERADDR, nomb, nam, nomb); } static int old_rcvd(struct socket *so, int flags) { - return so->so_proto->pr_usrreq(so, PRU_RCVD, nomb, + return so->so_proto->pr_ousrreq(so, PRU_RCVD, nomb, (struct mbuf *)flags, /* XXX */ nomb); } @@ -846,7 +846,7 @@ old_rcvd(struct socket *so, int flags) static int old_rcvoob(struct socket *so, struct mbuf *m, int flags) { - return so->so_proto->pr_usrreq(so, PRU_RCVOOB, m, + return so->so_proto->pr_ousrreq(so, PRU_RCVOOB, m, (struct mbuf *)flags, /* XXX */ nomb); } @@ -864,26 +864,26 @@ old_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *addr, } else { req = PRU_SEND; } - return so->so_proto->pr_usrreq(so, req, m, addr, control); + return so->so_proto->pr_ousrreq(so, req, m, addr, control); } static int old_sense(struct socket *so, struct stat *sb) { - return so->so_proto->pr_usrreq(so, PRU_SENSE, (struct mbuf *)sb, + return so->so_proto->pr_ousrreq(so, PRU_SENSE, (struct mbuf *)sb, nomb, nomb); } static int old_shutdown(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_SHUTDOWN, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_SHUTDOWN, nomb, nomb, nomb); } static int old_sockaddr(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_SOCKADDR, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_SOCKADDR, nomb, nam, nomb); } struct pr_usrreqs pru_oldstyle = { @@ -893,82 +893,14 @@ struct pr_usrreqs pru_oldstyle = { old_sense, old_shutdown, old_sockaddr }; +#endif /* PRU_OLDSTYLE */ + /* - * This function is glue going the other way. It is present to allow - * for this interface to be actively developed from both directions - * (i.e., work on the kernel and protocol stacks proceeds simultaneously). - * It is expected that this function will probably cease to exist much - * sooner than the pru_oldstyle interface, above, will, because once the - * all of the high-kernel use of pr_usrreq() is removed the function is - * no longer needed. + * Some routines that return EOPNOTSUPP for entry points that are not + * supported by a protocol. Fill in as needed. */ int -pr_newstyle_usrreq(struct socket *so, int req, struct mbuf *m, - struct mbuf *nam, struct mbuf *control) +pru_connect2_notsupp(struct socket *so1, struct socket *so2) { - struct pr_usrreqs *pru = so->so_proto->pr_usrreqs; - - switch(req) { - case PRU_ABORT: - return pru->pru_abort(so); - - case PRU_ACCEPT: - return pru->pru_accept(so, nam); - - case PRU_ATTACH: - return pru->pru_attach(so, (int)nam); - - case PRU_BIND: - return pru->pru_bind(so, nam); - - case PRU_CONNECT: - return pru->pru_connect(so, nam); - - case PRU_CONNECT2: - return pru->pru_connect2(so, (struct socket *)nam); - - case PRU_CONTROL: - return pru->pru_control(so, (int)m, (caddr_t)nam); - - case PRU_DETACH: - return pru->pru_detach(so); - - case PRU_DISCONNECT: - return pru->pru_disconnect(so); - - case PRU_LISTEN: - return pru->pru_listen(so); - - case PRU_PEERADDR: - return pru->pru_peeraddr(so, nam); - - case PRU_RCVD: - return pru->pru_rcvd(so, (int)nam); - - case PRU_RCVOOB: - return pru->pru_rcvoob(so, m, (int)nam); - - case PRU_SEND: - return pru->pru_send(so, 0, m, nam, control); - - case PRU_SENDOOB: - return pru->pru_send(so, PRUS_OOB, m, nam, control); - - case PRU_SEND_EOF: - return pru->pru_send(so, PRUS_EOF, m, nam, control); - - case PRU_SENSE: - return pru->pru_sense(so, (struct stat *)m); - - case PRU_SHUTDOWN: - return pru->pru_shutdown(so); - - case PRU_SOCKADDR: - return pru->pru_sockaddr(so, nam); - - } - - panic("pru_newstyle_usrreq: unhandled request %d", req); + return EOPNOTSUPP; } - -#endif /* PRU_OLDSTYLE */ diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index b58eb51..462191f 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)uipc_socket.c 8.3 (Berkeley) 4/15/94 - * $Id: uipc_socket.c,v 1.17 1996/04/16 03:50:08 davidg Exp $ + * $Id: uipc_socket.c,v 1.18 1996/05/09 20:14:57 wollman Exp $ */ #include <sys/param.h> @@ -77,7 +77,7 @@ socreate(dom, aso, type, proto, p) prp = pffindproto(dom, proto, type); else prp = pffindtype(dom, type); - if (prp == 0 || prp->pr_usrreq == 0) + if (prp == 0 || prp->pr_usrreqs == 0) return (EPROTONOSUPPORT); if (prp->pr_type != type) return (EPROTOTYPE); @@ -89,9 +89,7 @@ socreate(dom, aso, type, proto, p) if (p->p_ucred->cr_uid == 0) so->so_state = SS_PRIV; so->so_proto = prp; - error = - (*prp->pr_usrreq)(so, PRU_ATTACH, - (struct mbuf *)0, (struct mbuf *)proto, (struct mbuf *)0); + error = (*prp->pr_usrreqs->pru_attach)(so, proto); if (error) { so->so_state |= SS_NOFDREF; sofree(so); @@ -109,9 +107,7 @@ sobind(so, nam) int s = splnet(); int error; - error = - (*so->so_proto->pr_usrreq)(so, PRU_BIND, - (struct mbuf *)0, nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_bind)(so, nam); splx(s); return (error); } @@ -123,9 +119,7 @@ solisten(so, backlog) { int s = splnet(), error; - error = - (*so->so_proto->pr_usrreq)(so, PRU_LISTEN, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_listen)(so); if (error) { splx(s); return (error); @@ -210,9 +204,7 @@ soclose(so) } drop: if (so->so_pcb) { - int error2 = - (*so->so_proto->pr_usrreq)(so, PRU_DETACH, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0); + int error2 = (*so->so_proto->pr_usrreqs->pru_detach)(so); if (error == 0) error = error2; } @@ -233,9 +225,7 @@ soabort(so) struct socket *so; { - return ( - (*so->so_proto->pr_usrreq)(so, PRU_ABORT, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0)); + return (*so->so_proto->pr_usrreqs->pru_abort)(so); } int @@ -249,8 +239,7 @@ soaccept(so, nam) if ((so->so_state & SS_NOFDREF) == 0) panic("soaccept: !NOFDREF"); so->so_state &= ~SS_NOFDREF; - error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, - (struct mbuf *)0, nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_accept)(so, nam); splx(s); return (error); } @@ -277,8 +266,7 @@ soconnect(so, nam) (error = sodisconnect(so)))) error = EISCONN; else - error = (*so->so_proto->pr_usrreq)(so, PRU_CONNECT, - (struct mbuf *)0, nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_connect)(so, nam); splx(s); return (error); } @@ -291,8 +279,7 @@ soconnect2(so1, so2) int s = splnet(); int error; - error = (*so1->so_proto->pr_usrreq)(so1, PRU_CONNECT2, - (struct mbuf *)0, (struct mbuf *)so2, (struct mbuf *)0); + error = (*so1->so_proto->pr_usrreqs->pru_connect2)(so1, so2); splx(s); return (error); } @@ -312,8 +299,7 @@ sodisconnect(so) error = EALREADY; goto bad; } - error = (*so->so_proto->pr_usrreq)(so, PRU_DISCONNECT, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_disconnect)(so); bad: splx(s); return (error); @@ -472,8 +458,8 @@ nopages: if (dontroute) so->so_options |= SO_DONTROUTE; s = splnet(); /* XXX */ - error = (*so->so_proto->pr_usrreq)(so, - (flags & MSG_OOB) ? PRU_SENDOOB : + error = (*so->so_proto->pr_usrreqs->pru_send)(so, + (flags & MSG_OOB) ? PRUS_OOB : /* * If the user set MSG_EOF, the protocol * understands this flag and nothing left to @@ -482,7 +468,7 @@ nopages: ((flags & MSG_EOF) && (so->so_proto->pr_flags & PR_IMPLOPCL) && (resid <= 0)) ? - PRU_SEND_EOF : PRU_SEND, + PRUS_EOF : 0, top, addr, control); splx(s); if (dontroute) @@ -549,8 +535,7 @@ soreceive(so, paddr, uio, mp0, controlp, flagsp) flags = 0; if (flags & MSG_OOB) { m = m_get(M_WAIT, MT_DATA); - error = (*pr->pr_usrreq)(so, PRU_RCVOOB, - m, (struct mbuf *)(flags & MSG_PEEK), (struct mbuf *)0); + error = (*pr->pr_usrreqs->pru_rcvoob)(so, m, flags & MSG_PEEK); if (error) goto bad; do { @@ -566,8 +551,7 @@ bad: if (mp) *mp = (struct mbuf *)0; if (so->so_state & SS_ISCONFIRMING && uio->uio_resid) - (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0, - (struct mbuf *)0, (struct mbuf *)0); + (*pr->pr_usrreqs->pru_rcvd)(so, 0); restart: error = sblock(&so->so_rcv, SBLOCKWAIT(flags)); @@ -804,8 +788,7 @@ dontblock: if (m == 0) so->so_rcv.sb_mb = nextrecord; if (pr->pr_flags & PR_WANTRCVD && so->so_pcb) - (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0, - (struct mbuf *)flags, (struct mbuf *)0); + (*pr->pr_usrreqs->pru_rcvd)(so, flags); } if (orig_resid == uio->uio_resid && orig_resid && (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) { @@ -833,8 +816,7 @@ soshutdown(so, how) if (how & FREAD) sorflush(so); if (how & FWRITE) - return ((*pr->pr_usrreq)(so, PRU_SHUTDOWN, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0)); + return ((*pr->pr_usrreqs->pru_shutdown)(so)); return (0); } diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index 4a8227d..a178e02 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -186,8 +186,7 @@ sonewconn1(head, connstatus) so->so_state |= SS_INCOMP; } head->so_qlen++; - if ((*so->so_proto->pr_usrreq)(so, PRU_ATTACH, - (struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0)) { + if ((*so->so_proto->pr_usrreqs->pru_attach)(so, 0)) { if (so->so_state & SS_COMP) { TAILQ_REMOVE(&head->so_comp, so, so_list); } else { @@ -768,19 +767,19 @@ sbdroprecord(sb) static int old_abort(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_ABORT, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_ABORT, nomb, nomb, nomb); } static int old_accept(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_ACCEPT, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_ACCEPT, nomb, nam, nomb); } static int old_attach(struct socket *so, int proto) { - return so->so_proto->pr_usrreq(so, PRU_ATTACH, nomb, + return so->so_proto->pr_ousrreq(so, PRU_ATTACH, nomb, (struct mbuf *)proto, /* XXX */ nomb); } @@ -788,57 +787,58 @@ old_attach(struct socket *so, int proto) static int old_bind(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_BIND, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_BIND, nomb, nam, nomb); } static int old_connect(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_CONNECT, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_CONNECT, nomb, nam, nomb); } static int old_connect2(struct socket *so1, struct socket *so2) { - return so1->so_proto->pr_usrreq(so1, PRU_CONNECT2, nomb, + return so1->so_proto->pr_ousrreq(so1, PRU_CONNECT2, nomb, (struct mbuf *)so2, nomb); } static int -old_control(struct socket *so, int cmd, caddr_t data) +old_control(struct socket *so, int cmd, caddr_t data, struct ifnet *ifp) { - return so->so_proto->pr_usrreq(so, PRU_CONTROL, (struct mbuf *)cmd, - (struct mbuf *)data, nomb); + return so->so_proto->pr_ousrreq(so, PRU_CONTROL, (struct mbuf *)cmd, + (struct mbuf *)data, + (struct mbuf *)ifp); } static int old_detach(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_DETACH, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_DETACH, nomb, nomb, nomb); } static int old_disconnect(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_DISCONNECT, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_DISCONNECT, nomb, nomb, nomb); } static int old_listen(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_LISTEN, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_LISTEN, nomb, nomb, nomb); } static int old_peeraddr(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_PEERADDR, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_PEERADDR, nomb, nam, nomb); } static int old_rcvd(struct socket *so, int flags) { - return so->so_proto->pr_usrreq(so, PRU_RCVD, nomb, + return so->so_proto->pr_ousrreq(so, PRU_RCVD, nomb, (struct mbuf *)flags, /* XXX */ nomb); } @@ -846,7 +846,7 @@ old_rcvd(struct socket *so, int flags) static int old_rcvoob(struct socket *so, struct mbuf *m, int flags) { - return so->so_proto->pr_usrreq(so, PRU_RCVOOB, m, + return so->so_proto->pr_ousrreq(so, PRU_RCVOOB, m, (struct mbuf *)flags, /* XXX */ nomb); } @@ -864,26 +864,26 @@ old_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *addr, } else { req = PRU_SEND; } - return so->so_proto->pr_usrreq(so, req, m, addr, control); + return so->so_proto->pr_ousrreq(so, req, m, addr, control); } static int old_sense(struct socket *so, struct stat *sb) { - return so->so_proto->pr_usrreq(so, PRU_SENSE, (struct mbuf *)sb, + return so->so_proto->pr_ousrreq(so, PRU_SENSE, (struct mbuf *)sb, nomb, nomb); } static int old_shutdown(struct socket *so) { - return so->so_proto->pr_usrreq(so, PRU_SHUTDOWN, nomb, nomb, nomb); + return so->so_proto->pr_ousrreq(so, PRU_SHUTDOWN, nomb, nomb, nomb); } static int old_sockaddr(struct socket *so, struct mbuf *nam) { - return so->so_proto->pr_usrreq(so, PRU_SOCKADDR, nomb, nam, nomb); + return so->so_proto->pr_ousrreq(so, PRU_SOCKADDR, nomb, nam, nomb); } struct pr_usrreqs pru_oldstyle = { @@ -893,82 +893,14 @@ struct pr_usrreqs pru_oldstyle = { old_sense, old_shutdown, old_sockaddr }; +#endif /* PRU_OLDSTYLE */ + /* - * This function is glue going the other way. It is present to allow - * for this interface to be actively developed from both directions - * (i.e., work on the kernel and protocol stacks proceeds simultaneously). - * It is expected that this function will probably cease to exist much - * sooner than the pru_oldstyle interface, above, will, because once the - * all of the high-kernel use of pr_usrreq() is removed the function is - * no longer needed. + * Some routines that return EOPNOTSUPP for entry points that are not + * supported by a protocol. Fill in as needed. */ int -pr_newstyle_usrreq(struct socket *so, int req, struct mbuf *m, - struct mbuf *nam, struct mbuf *control) +pru_connect2_notsupp(struct socket *so1, struct socket *so2) { - struct pr_usrreqs *pru = so->so_proto->pr_usrreqs; - - switch(req) { - case PRU_ABORT: - return pru->pru_abort(so); - - case PRU_ACCEPT: - return pru->pru_accept(so, nam); - - case PRU_ATTACH: - return pru->pru_attach(so, (int)nam); - - case PRU_BIND: - return pru->pru_bind(so, nam); - - case PRU_CONNECT: - return pru->pru_connect(so, nam); - - case PRU_CONNECT2: - return pru->pru_connect2(so, (struct socket *)nam); - - case PRU_CONTROL: - return pru->pru_control(so, (int)m, (caddr_t)nam); - - case PRU_DETACH: - return pru->pru_detach(so); - - case PRU_DISCONNECT: - return pru->pru_disconnect(so); - - case PRU_LISTEN: - return pru->pru_listen(so); - - case PRU_PEERADDR: - return pru->pru_peeraddr(so, nam); - - case PRU_RCVD: - return pru->pru_rcvd(so, (int)nam); - - case PRU_RCVOOB: - return pru->pru_rcvoob(so, m, (int)nam); - - case PRU_SEND: - return pru->pru_send(so, 0, m, nam, control); - - case PRU_SENDOOB: - return pru->pru_send(so, PRUS_OOB, m, nam, control); - - case PRU_SEND_EOF: - return pru->pru_send(so, PRUS_EOF, m, nam, control); - - case PRU_SENSE: - return pru->pru_sense(so, (struct stat *)m); - - case PRU_SHUTDOWN: - return pru->pru_shutdown(so); - - case PRU_SOCKADDR: - return pru->pru_sockaddr(so, nam); - - } - - panic("pru_newstyle_usrreq: unhandled request %d", req); + return EOPNOTSUPP; } - -#endif /* PRU_OLDSTYLE */ diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 6e17484..a560b2f 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94 - * $Id: uipc_syscalls.c,v 1.16 1996/03/11 15:37:33 davidg Exp $ + * $Id: uipc_syscalls.c,v 1.17 1996/05/09 20:14:59 wollman Exp $ */ #include "opt_ktrace.h" @@ -1126,7 +1126,7 @@ getsockname1(p, uap, retval, compat) m = m_getclr(M_WAIT, MT_SONAME); if (m == NULL) return (ENOBUFS); - error = (*so->so_proto->pr_usrreq)(so, PRU_SOCKADDR, 0, m, 0); + error = (*so->so_proto->pr_usrreqs->pru_sockaddr)(so, m); if (error) goto bad; if (len > m->m_len) @@ -1199,7 +1199,7 @@ getpeername1(p, uap, retval, compat) m = m_getclr(M_WAIT, MT_SONAME); if (m == NULL) return (ENOBUFS); - error = (*so->so_proto->pr_usrreq)(so, PRU_PEERADDR, 0, m, 0); + error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, m); if (error) goto bad; if (len > m->m_len) diff --git a/sys/net/if.c b/sys/net/if.c index ce12fb8..bfcd1eb 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)if.c 8.3 (Berkeley) 1/4/94 - * $Id: if.c,v 1.31 1996/06/10 23:07:26 gpalmer Exp $ + * $Id: if.c,v 1.32 1996/06/12 19:23:59 gpalmer Exp $ */ #include <sys/param.h> @@ -162,18 +162,6 @@ if_attach(ifp) while (namelen != 0) sdl->sdl_data[--namelen] = 0xff; } - /* - * If they provided a slow input queue, initialize it. - */ - if (ifp->if_poll_slowq) { - struct ifqueue *ifq = ifp->if_poll_slowq; - - bzero(ifq, sizeof *ifq); - ifq->ifq_maxlen = ifqmaxlen; -#ifdef POLLING - ifq->if_poll_recv = if_poll_recv_slow; -#endif - } } /* * Locate an interface based on a complete address. @@ -583,9 +571,9 @@ ifioctl(so, cmd, data, p) if (so->so_proto == 0) return (EOPNOTSUPP); #ifndef COMPAT_43 - return ((*so->so_proto->pr_usrreq)(so, PRU_CONTROL, - (struct mbuf *)cmd, (struct mbuf *)data, - (struct mbuf *)ifp)); + return ((*so->so_proto->pr_usrreqs->pru_control)(so, cmd, + data, + ifp)); #else { int ocmd = cmd; @@ -623,14 +611,10 @@ ifioctl(so, cmd, data, p) case OSIOCGIFNETMASK: cmd = SIOCGIFNETMASK; } - error = ((*so->so_proto->pr_usrreq)(so, PRU_CONTROL, - /* - * XXX callees reverse the following bogus casts, - * but it would be easier to use a separate - * interface that is guaranteed to work. - */ - (struct mbuf *)cmd, (struct mbuf *)data, - (struct mbuf *)ifp)); + error = ((*so->so_proto->pr_usrreqs->pru_control)(so, + cmd, + data, + ifp)); switch (ocmd) { case OSIOCGIFADDR: @@ -759,3 +743,4 @@ ifconf(cmd, data) } SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers"); +SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW, 0, "Generic link-management"); diff --git a/sys/netinet/in_proto.c b/sys/netinet/in_proto.c index fef71ac..f97c803 100644 --- a/sys/netinet/in_proto.c +++ b/sys/netinet/in_proto.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)in_proto.c 8.2 (Berkeley) 2/9/95 - * $Id: in_proto.c,v 1.31 1996/06/20 17:52:32 fenner Exp $ + * $Id: in_proto.c,v 1.32 1996/07/10 19:44:21 julian Exp $ */ #include <sys/param.h> @@ -105,8 +105,9 @@ struct protosw inetsw[] = { { SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_IMPLOPCL|PR_WANTRCVD, tcp_input, 0, tcp_ctlinput, tcp_ctloutput, - tcp_usrreq, - tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain + 0, + tcp_init, tcp_fasttimo, tcp_slowtimo, tcp_drain, + &tcp_usrreqs }, { SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR, rip_input, 0, 0, rip_ctloutput, diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index 8fbac15..a1c3d13 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)tcp_timer.c 8.2 (Berkeley) 5/24/95 - * $Id: tcp_timer.c,v 1.16 1996/04/15 03:46:33 davidg Exp $ + * $Id: tcp_timer.c,v 1.17 1996/06/03 15:37:52 jdp Exp $ */ #ifndef TUBA_INCLUDE @@ -122,6 +122,9 @@ tcp_slowtimo() register struct tcpcb *tp; register int i; int s; +#ifdef TCPDEBUG + int ostate; +#endif s = splnet(); @@ -142,10 +145,19 @@ tcp_slowtimo() continue; for (i = 0; i < TCPT_NTIMERS; i++) { if (tp->t_timer[i] && --tp->t_timer[i] == 0) { - if (tcp_usrreq(tp->t_inpcb->inp_socket, - PRU_SLOWTIMO, (struct mbuf *)0, - (struct mbuf *)i, (struct mbuf *)0) == NULL) +#ifdef TCPDEBUG + ostate = tp->t_state; +#endif + tp = tcp_timers(tp, i); + if (tp == NULL) goto tpgone; +#ifdef TCPDEBUG + if (tp->t_inpcb->inp_socket->so_options + & SO_DEBUG) + tcp_trace(TA_USER, ostate, tp, + (struct tcpiphdr *)0, + PRU_SLOWTIMO); +#endif } } tp->t_idle++; diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index bf6c89c..c7c62b2 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * From: @(#)tcp_usrreq.c 8.2 (Berkeley) 1/3/94 - * $Id: tcp_usrreq.c,v 1.21 1995/12/06 23:37:42 bde Exp $ + * $Id: tcp_usrreq.c,v 1.22 1996/03/11 15:13:37 davidg Exp $ */ #include <sys/param.h> @@ -77,6 +77,8 @@ static struct tcpcb * tcp_disconnect __P((struct tcpcb *)); static struct tcpcb * tcp_usrclosed __P((struct tcpcb *)); + +#ifdef notdef /* * Process a TCP user request for TCP tb. If this is a send request * then m is the mbuf chain of send data. If this is a timer expiration @@ -391,6 +393,431 @@ tcp_usrreq(so, req, m, nam, control) splx(s); return (error); } +#endif + +#ifdef TCPDEBUG +#define TCPDEBUG0 int ostate +#define TCPDEBUG1() ostate = tp ? tp->t_state : 0 +#define TCPDEBUG2(req) if (tp && (so->so_options & SO_DEBUG)) && \ + tcp_trace(TA_USER, ostate, tp, 0, req) +#else +#define TCPDEBUG0 +#define TCPDEBUG1() +#define TCPDEBUG2(req) +#endif + +/* + * TCP attaches to socket via pru_attach(), reserving space, + * and an internet control block. + */ +static int +tcp_usr_attach(struct socket *so, int proto) +{ + int s = splnet(); + int error; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp = 0; + TCPDEBUG0; + + TCPDEBUG1(); + if (inp) { + error = EISCONN; + goto out; + } + + error = tcp_attach(so); + if (error) + goto out; + + if ((so->so_options & SO_LINGER) && so->so_linger == 0) + so->so_linger = TCP_LINGERTIME * hz; + tp = sototcpcb(so); +out: + TCPDEBUG2(PRU_ATTACH); + splx(s); + return error; +} + +/* + * pru_detach() detaches the TCP protocol from the socket. + * If the protocol state is non-embryonic, then can't + * do this directly: have to initiate a pru_disconnect(), + * which may finish later; embryonic TCB's can just + * be discarded here. + */ +static int +tcp_usr_detach(struct socket *so) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + TCPDEBUG0; + + if (inp == 0) { + splx(s); + return EINVAL; /* XXX */ + } + tp = intotcpcb(inp); + TCPDEBUG1(); + if (tp->t_state > TCPS_LISTEN) + tp = tcp_disconnect(tp); + else + tp = tcp_close(tp); + + TCPDEBUG2(PRU_DETACH); + splx(s); + return error; +} + +#define COMMON_START() TCPDEBUG0; \ + do { \ + if (inp == 0) { \ + splx(s); \ + return EINVAL; \ + } \ + tp = intotcpcb(inp); \ + TCPDEBUG1(); \ + } while(0) + +#define COMMON_END(req) out: TCPDEBUG2(req); splx(s); return error; goto out + + +/* + * Give the socket an address. + */ +static int +tcp_usr_bind(struct socket *so, struct mbuf *nam) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + struct sockaddr_in *sinp; + + COMMON_START(); + + /* + * Must check for multicast addresses and disallow binding + * to them. + */ + sinp = mtod(nam, struct sockaddr_in *); + if (sinp->sin_family == AF_INET && + IN_MULTICAST(ntohl(sinp->sin_addr.s_addr))) { + error = EAFNOSUPPORT; + goto out; + } + error = in_pcbbind(inp, nam); + if (error) + goto out; + COMMON_END(PRU_BIND); + +} + +/* + * Prepare to accept connections. + */ +static int +tcp_usr_listen(struct socket *so) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + if (inp->inp_lport == 0) + error = in_pcbbind(inp, NULL); + if (error == 0) + tp->t_state = TCPS_LISTEN; + COMMON_END(PRU_LISTEN); +} + +/* + * Initiate connection to peer. + * Create a template for use in transmissions on this connection. + * Enter SYN_SENT state, and mark socket as connecting. + * Start keep-alive timer, and seed output sequence space. + * Send initial segment on connection. + */ +static int +tcp_usr_connect(struct socket *so, struct mbuf *nam) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + struct sockaddr_in *sinp; + + COMMON_START(); + + /* + * Must disallow TCP ``connections'' to multicast addresses. + */ + sinp = mtod(nam, struct sockaddr_in *); + if (sinp->sin_family == AF_INET + && IN_MULTICAST(ntohl(sinp->sin_addr.s_addr))) { + error = EAFNOSUPPORT; + goto out; + } + + if ((error = tcp_connect(tp, nam)) != 0) + goto out; + error = tcp_output(tp); + COMMON_END(PRU_CONNECT); +} + +/* + * Initiate disconnect from peer. + * If connection never passed embryonic stage, just drop; + * else if don't need to let data drain, then can just drop anyways, + * else have to begin TCP shutdown process: mark socket disconnecting, + * drain unread data, state switch to reflect user close, and + * send segment (e.g. FIN) to peer. Socket will be really disconnected + * when peer sends FIN and acks ours. + * + * SHOULD IMPLEMENT LATER PRU_CONNECT VIA REALLOC TCPCB. + */ +static int +tcp_usr_disconnect(struct socket *so) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + tp = tcp_disconnect(tp); + COMMON_END(PRU_DISCONNECT); +} + +/* + * Accept a connection. Essentially all the work is + * done at higher levels; just return the address + * of the peer, storing through addr. + */ +static int +tcp_usr_accept(struct socket *so, struct mbuf *nam) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + in_setpeeraddr(inp, nam); + COMMON_END(PRU_ACCEPT); +} + +/* + * Mark the connection as being incapable of further output. + */ +static int +tcp_usr_shutdown(struct socket *so) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + socantsendmore(so); + tp = tcp_usrclosed(tp); + if (tp) + error = tcp_output(tp); + COMMON_END(PRU_SHUTDOWN); +} + +/* + * After a receive, possibly send window update to peer. + */ +static int +tcp_usr_rcvd(struct socket *so, int flags) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + tcp_output(tp); + COMMON_END(PRU_RCVD); +} + +/* + * Do a send by putting data in output queue and updating urgent + * marker if URG set. Possibly send more data. + */ +static int +tcp_usr_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *nam, + struct mbuf *control) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + if (control && control->m_len) { + m_freem(control); /* XXX shouldn't caller do this??? */ + if (m) + m_freem(m); + return EINVAL; + } + + if(!(flags & PRUS_OOB)) { + sbappend(&so->so_snd, m); + if (nam && tp->t_state < TCPS_SYN_SENT) { + /* + * Do implied connect if not yet connected, + * initialize window to default value, and + * initialize maxseg/maxopd using peer's cached + * MSS. + */ + error = tcp_connect(tp, nam); + if (error) + goto out; + tp->snd_wnd = TTCP_CLIENT_SND_WND; + tcp_mss(tp, -1); + } + + if (flags & PRUS_EOF) { + /* + * Close the send side of the connection after + * the data is sent. + */ + socantsendmore(so); + tp = tcp_usrclosed(tp); + } + if (tp != NULL) + error = tcp_output(tp); + } else { + if (sbspace(&so->so_snd) < -512) { + m_freem(m); + error = ENOBUFS; + goto out; + } + /* + * According to RFC961 (Assigned Protocols), + * the urgent pointer points to the last octet + * of urgent data. We continue, however, + * to consider it to indicate the first octet + * of data past the urgent section. + * Otherwise, snd_up should be one lower. + */ + sbappend(&so->so_snd, m); + tp->snd_up = tp->snd_una + so->so_snd.sb_cc; + tp->t_force = 1; + error = tcp_output(tp); + tp->t_force = 0; + } + COMMON_END((flags & PRUS_OOB) ? PRU_SENDOOB : + ((flags & PRUS_EOF) ? PRU_SEND_EOF : PRU_SEND)); +} + +/* + * Abort the TCP. + */ +static int +tcp_usr_abort(struct socket *so) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + tp = tcp_drop(tp, ECONNABORTED); + COMMON_END(PRU_ABORT); +} + +/* + * Fill in st_bklsize for fstat() operations on a socket. + */ +static int +tcp_usr_sense(struct socket *so, struct stat *sb) +{ + int s = splnet(); + + sb->st_blksize = so->so_snd.sb_hiwat; + splx(s); + return 0; +} + +/* + * Receive out-of-band data. + */ +static int +tcp_usr_rcvoob(struct socket *so, struct mbuf *m, int flags) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + if ((so->so_oobmark == 0 && + (so->so_state & SS_RCVATMARK) == 0) || + so->so_options & SO_OOBINLINE || + tp->t_oobflags & TCPOOB_HADDATA) { + error = EINVAL; + goto out; + } + if ((tp->t_oobflags & TCPOOB_HAVEDATA) == 0) { + error = EWOULDBLOCK; + goto out; + } + m->m_len = 1; + *mtod(m, caddr_t) = tp->t_iobc; + if ((flags & MSG_PEEK) == 0) + tp->t_oobflags ^= (TCPOOB_HAVEDATA | TCPOOB_HADDATA); + COMMON_END(PRU_RCVOOB); +} + +static int +tcp_usr_sockaddr(struct socket *so, struct mbuf *nam) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + in_setsockaddr(inp, nam); + COMMON_END(PRU_SOCKADDR); +} + +static int +tcp_usr_peeraddr(struct socket *so, struct mbuf *nam) +{ + int s = splnet(); + int error = 0; + struct inpcb *inp = sotoinpcb(so); + struct tcpcb *tp; + + COMMON_START(); + in_setpeeraddr(inp, nam); + COMMON_END(PRU_PEERADDR); +} + +/* + * XXX - this should just be a call to in_control, but we need to get + * the types worked out. + */ +static int +tcp_usr_control(struct socket *so, int cmd, caddr_t arg, struct ifnet *ifp) +{ + return in_control(so, cmd, arg, ifp); +} + +/* xxx - should be const */ +struct pr_usrreqs tcp_usrreqs = { + tcp_usr_abort, tcp_usr_accept, tcp_usr_attach, tcp_usr_bind, + tcp_usr_connect, pru_connect2_notsupp, tcp_usr_control, tcp_usr_detach, + tcp_usr_disconnect, tcp_usr_listen, tcp_usr_peeraddr, tcp_usr_rcvd, + tcp_usr_rcvoob, tcp_usr_send, tcp_usr_sense, tcp_usr_shutdown, + tcp_usr_sockaddr +}; /* * Common subroutine to open a TCP connection to remote host specified diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index 8152eaf..4717e5d 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)tcp_var.h 8.4 (Berkeley) 5/24/95 - * $Id: tcp_var.h,v 1.32 1996/04/26 18:32:58 wollman Exp $ + * $Id: tcp_var.h,v 1.33 1996/06/05 16:57:38 wollman Exp $ */ #ifndef _NETINET_TCP_VAR_H_ @@ -362,9 +362,8 @@ struct tcpiphdr * struct tcpcb * tcp_timers __P((struct tcpcb *, int)); void tcp_trace __P((int, int, struct tcpcb *, struct tcpiphdr *, int)); -int tcp_usrreq __P((struct socket *, - int, struct mbuf *, struct mbuf *, struct mbuf *)); +extern struct pr_usrreqs tcp_usrreqs; extern u_long tcp_sendspace; extern u_long tcp_recvspace; diff --git a/sys/nfs/nfs_socket.c b/sys/nfs/nfs_socket.c index d372b92..fb29864 100644 --- a/sys/nfs/nfs_socket.c +++ b/sys/nfs/nfs_socket.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.3 (Berkeley) 1/12/94 - * $Id: nfs_socket.c,v 1.15 1996/02/13 18:16:28 wollman Exp $ + * $Id: nfs_socket.c,v 1.16 1996/06/14 11:13:18 phk Exp $ */ /* @@ -1347,11 +1347,12 @@ nfs_timer(arg) nmp->nm_sent < nmp->nm_cwnd) && (m = m_copym(rep->r_mreq, 0, M_COPYALL, M_DONTWAIT))){ if ((nmp->nm_flag & NFSMNT_NOCONN) == 0) - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - (struct mbuf *)0, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, (struct mbuf *)0, + (struct mbuf *)0); else - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - nmp->nm_nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, nmp->nm_nam, (struct mbuf *)0); if (error) { if (NFSIGNORE_SOERROR(nmp->nm_soflags, error)) so->so_error = 0; diff --git a/sys/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c index d372b92..fb29864 100644 --- a/sys/nfsclient/nfs_socket.c +++ b/sys/nfsclient/nfs_socket.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.3 (Berkeley) 1/12/94 - * $Id: nfs_socket.c,v 1.15 1996/02/13 18:16:28 wollman Exp $ + * $Id: nfs_socket.c,v 1.16 1996/06/14 11:13:18 phk Exp $ */ /* @@ -1347,11 +1347,12 @@ nfs_timer(arg) nmp->nm_sent < nmp->nm_cwnd) && (m = m_copym(rep->r_mreq, 0, M_COPYALL, M_DONTWAIT))){ if ((nmp->nm_flag & NFSMNT_NOCONN) == 0) - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - (struct mbuf *)0, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, (struct mbuf *)0, + (struct mbuf *)0); else - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - nmp->nm_nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, nmp->nm_nam, (struct mbuf *)0); if (error) { if (NFSIGNORE_SOERROR(nmp->nm_soflags, error)) so->so_error = 0; diff --git a/sys/nfsserver/nfs_srvsock.c b/sys/nfsserver/nfs_srvsock.c index d372b92..fb29864 100644 --- a/sys/nfsserver/nfs_srvsock.c +++ b/sys/nfsserver/nfs_srvsock.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.3 (Berkeley) 1/12/94 - * $Id: nfs_socket.c,v 1.15 1996/02/13 18:16:28 wollman Exp $ + * $Id: nfs_socket.c,v 1.16 1996/06/14 11:13:18 phk Exp $ */ /* @@ -1347,11 +1347,12 @@ nfs_timer(arg) nmp->nm_sent < nmp->nm_cwnd) && (m = m_copym(rep->r_mreq, 0, M_COPYALL, M_DONTWAIT))){ if ((nmp->nm_flag & NFSMNT_NOCONN) == 0) - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - (struct mbuf *)0, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, (struct mbuf *)0, + (struct mbuf *)0); else - error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m, - nmp->nm_nam, (struct mbuf *)0); + error = (*so->so_proto->pr_usrreqs->pru_send) + (so, 0, m, nmp->nm_nam, (struct mbuf *)0); if (error) { if (NFSIGNORE_SOERROR(nmp->nm_soflags, error)) so->so_error = 0; diff --git a/sys/sys/protosw.h b/sys/sys/protosw.h index 29b7ca4..f3abcf7 100644 --- a/sys/sys/protosw.h +++ b/sys/sys/protosw.h @@ -80,8 +80,8 @@ struct protosw { struct mbuf **)); /* control output (from above) */ /* user-protocol hook */ - int (*pr_usrreq) __P((struct socket *, int, struct mbuf *, - struct mbuf *, struct mbuf *)); + int (*pr_ousrreq) __P((struct socket *, int, struct mbuf *, + struct mbuf *, struct mbuf *)); /* user request: see list below */ /* utility hooks */ void (*pr_init) __P((void)); /* initialization hook */ @@ -166,6 +166,7 @@ char *prurequests[] = { #ifdef KERNEL /* users shouldn't see this decl */ struct stat; +struct ifnet; /* * If the ordering here looks odd, that's because it's alphabetical. @@ -177,13 +178,15 @@ struct pr_usrreqs { int (*pru_bind) __P((struct socket *so, struct mbuf *nam)); int (*pru_connect) __P((struct socket *so, struct mbuf *nam)); int (*pru_connect2) __P((struct socket *so1, struct socket *so2)); - int (*pru_control) __P((struct socket *so, int cmd, caddr_t data)); + int (*pru_control) __P((struct socket *so, int cmd, caddr_t data, + struct ifnet *ifp)); int (*pru_detach) __P((struct socket *so)); int (*pru_disconnect) __P((struct socket *so)); int (*pru_listen) __P((struct socket *so)); int (*pru_peeraddr) __P((struct socket *so, struct mbuf *nam)); int (*pru_rcvd) __P((struct socket *so, int flags)); - int (*pru_rcvoob) __P((struct socket *so, struct mbuf *m, int flags)); + int (*pru_rcvoob) __P((struct socket *so, struct mbuf *m, + int flags)); /* * The `m' parameter here is almost certainly going to become a * `struct uio' at some point in the future. Similar changes @@ -198,6 +201,8 @@ struct pr_usrreqs { int (*pru_sockaddr) __P((struct socket *so, struct mbuf *nam)); }; +int pru_connect2_notsupp __P((struct socket *so1, struct socket *so2)); + #define PRU_OLDSTYLE #ifdef PRU_OLDSTYLE @@ -207,8 +212,6 @@ struct pr_usrreqs { * appropriate arguments. */ extern struct pr_usrreqs pru_oldstyle; -int pr_newstyle_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, - struct mbuf *); #endif /* PRU_OLDSTYLE */ #endif /* KERNEL */ |