proc->thread stage 4: rework the VFS and DEVICE subsystems to take thread
[dragonfly.git] / sys / netproto / ncp / ncp_sock.c
index fd83f9f..48c2e72 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netncp/ncp_sock.c,v 1.2 1999/10/12 10:36:59 bp Exp $
- * $DragonFly: src/sys/netproto/ncp/ncp_sock.c,v 1.2 2003/06/17 04:28:53 dillon Exp $
+ * $DragonFly: src/sys/netproto/ncp/ncp_sock.c,v 1.3 2003/06/25 03:56:05 dillon Exp $
  *
  * Low level socket routines
  */
 
 /*int ncp_poll(struct socket *so, int events);*/
 /*static int ncp_getsockname(struct socket *so, caddr_t asa, int *alen);*/
-static int ncp_soconnect(struct socket *so,struct sockaddr *target, struct proc *p);
+static int ncp_soconnect(struct socket *so,struct sockaddr *target, struct thread *p);
 
 
 /* This will need only if native IP used, or (unlikely) NCP will be
  * implemented on the socket level
  */
 static int
-ncp_soconnect(struct socket *so,struct sockaddr *target, struct proc *p) {
+ncp_soconnect(struct socket *so,struct sockaddr *target, struct thread *td) {
        int error,s;
 
-       error = soconnect(so, (struct sockaddr*)target, p);
+       error = soconnect(so, (struct sockaddr*)target, td);
        if (error)
                return error;
        /*
@@ -138,11 +138,11 @@ ncp_getsockname(struct socket *so, caddr_t asa, int *alen) {
 int ncp_sock_recv(struct socket *so, struct mbuf **mp, int *rlen)
 {
        struct uio auio;
-       struct proc *p=curproc; /* XXX */
+       struct thread *td = curthread; /* XXX */
        int error,flags,len;
        
        auio.uio_resid = len = 1000000;
-       auio.uio_procp = p;
+       auio.uio_td = td;
        flags = MSG_DONTWAIT;
 
 /*     error = so->so_proto->pr_usrreqs->pru_soreceive(so, 0, &auio,
@@ -164,7 +164,7 @@ int ncp_sock_recv(struct socket *so, struct mbuf **mp, int *rlen)
 int
 ncp_sock_send(struct socket *so, struct mbuf *top, struct ncp_rq *rqp)
 {
-       struct proc *p = curproc; /* XXX */
+       struct thread *td = curthread; /* XXX */
        struct sockaddr *to = 0;
        struct ncp_conn *conn = rqp->conn;
        struct mbuf *m;
@@ -174,13 +174,13 @@ ncp_sock_send(struct socket *so, struct mbuf *top, struct ncp_rq *rqp)
        for(;;) {
                m = m_copym(top, 0, M_COPYALL, M_WAIT);
 /*             NCPDDEBUG(m);*/
-               error = so->so_proto->pr_usrreqs->pru_sosend(so, to, 0, m, 0, flags, p);
+               error = so->so_proto->pr_usrreqs->pru_sosend(so, to, 0, m, 0, flags, td);
                if (error == 0 || error == EINTR || error == ENETDOWN)
                        break;
                if (rqp->rexmit == 0) break;
                rqp->rexmit--;
                tsleep(&sendwait, PWAIT, "ncprsn", conn->li.timeout * hz);
-               error = ncp_chkintr(conn, p);
+               error = ncp_chkintr(conn, td);
                if (error == EINTR) break;
        }
        if (error) {
@@ -191,17 +191,21 @@ ncp_sock_send(struct socket *so, struct mbuf *top, struct ncp_rq *rqp)
 
 int
 ncp_poll(struct socket *so, int events){
-    struct proc *p = curproc;
+    struct thread *td = curthread; /* XXX */
     struct ucred *cred=NULL;
-    return so->so_proto->pr_usrreqs->pru_sopoll(so, events, cred, p);
+    return so->so_proto->pr_usrreqs->pru_sopoll(so, events, cred, td);
 }
 
 int
-ncp_sock_rselect(struct socket *so,struct proc *p, struct timeval *tv, int events)
+ncp_sock_rselect(struct socket *so, struct thread *td,
+       struct timeval *tv, int events)
 {
        struct timeval atv,rtv,ttv;
+       struct proc *p = td->td_proc;
        int s,timo,error=0;
 
+       KKASSERT(p);
+
        if (tv) {
                atv=*tv;
                if (itimerfix(&atv)) {
@@ -252,7 +256,7 @@ int
 ncp_sock_connect_ipx(struct ncp_conn *conn) {
        struct sockaddr_ipx sipx;
        struct ipxpcb *npcb;
-       struct proc *p = conn->procp;
+       struct thread *td = conn->td;
        int addrlen, error, count;
 
        sipx.sipx_port = htons(0);
@@ -263,15 +267,15 @@ ncp_sock_connect_ipx(struct ncp_conn *conn) {
                        goto bad;
                }
                conn->ncp_so = conn->wdg_so = NULL;
-               checkbad(socreate(AF_IPX, &conn->ncp_so, SOCK_DGRAM, 0, p));
+               checkbad(socreate(AF_IPX, &conn->ncp_so, SOCK_DGRAM, 0, td));
                if (conn->li.opt & NCP_OPT_WDOG)
-                       checkbad(socreate(AF_IPX, &conn->wdg_so, SOCK_DGRAM,0,p));
+                       checkbad(socreate(AF_IPX, &conn->wdg_so, SOCK_DGRAM,0,td));
                addrlen = sizeof(sipx);
                sipx.sipx_family = AF_IPX;
                ipx_setnullnet(sipx.sipx_addr);
                ipx_setnullhost(sipx.sipx_addr);
                sipx.sipx_len = addrlen;
-               error = sobind(conn->ncp_so, (struct sockaddr *)&sipx, p);
+               error = sobind(conn->ncp_so, (struct sockaddr *)&sipx, td);
                if (error == 0) {
                        if ((conn->li.opt & NCP_OPT_WDOG) == 0)
                                break;
@@ -279,7 +283,7 @@ ncp_sock_connect_ipx(struct ncp_conn *conn) {
                        sipx.sipx_port = htons(ntohs(sipx.sipx_port) + 1);
                        ipx_setnullnet(sipx.sipx_addr);
                        ipx_setnullhost(sipx.sipx_addr);
-                       error = sobind(conn->wdg_so, (struct sockaddr *)&sipx, p);
+                       error = sobind(conn->wdg_so, (struct sockaddr *)&sipx, td);
                }
                if (!error) break;
                if (error != EADDRINUSE) goto bad;
@@ -292,7 +296,7 @@ ncp_sock_connect_ipx(struct ncp_conn *conn) {
        npcb->ipxp_dpt = IPXPROTO_NCP;
        /* IPXrouted must be running, i.e. route must be presented */
        conn->li.ipxaddr.sipx_len = sizeof(struct sockaddr_ipx);
-       checkbad(ncp_soconnect(conn->ncp_so, &conn->li.saddr, p));
+       checkbad(ncp_soconnect(conn->ncp_so, &conn->li.saddr, td));
        if (conn->wdg_so) {
                sotoipxpcb(conn->wdg_so)->ipxp_laddr.x_net = npcb->ipxp_laddr.x_net;
                sotoipxpcb(conn->wdg_so)->ipxp_laddr.x_host= npcb->ipxp_laddr.x_host;
@@ -302,11 +306,11 @@ ncp_sock_connect_ipx(struct ncp_conn *conn) {
        }
 #ifdef NCPBURST
        if (ncp_burst_enabled) {
-               checkbad(socreate(AF_IPX, &conn->bc_so, SOCK_DGRAM, 0, p));
+               checkbad(socreate(AF_IPX, &conn->bc_so, SOCK_DGRAM, 0, td));
                bzero(&sipx, sizeof(sipx));
                sipx.sipx_len = sizeof(sipx);
-               checkbad(sobind(conn->bc_so, (struct sockaddr *)&sipx, p));
-               checkbad(ncp_soconnect(conn->bc_so, &conn->li.saddr, p));
+               checkbad(sobind(conn->bc_so, (struct sockaddr *)&sipx, td));
+               checkbad(ncp_soconnect(conn->bc_so, &conn->li.saddr, td));
        }
 #endif
        if (!error) {
@@ -340,17 +344,17 @@ ncp_sock_checksum(struct ncp_conn *conn, int enable) {
 int
 ncp_sock_connect_in(struct ncp_conn *conn) {
        struct sockaddr_in sin;
-       struct proc *p=conn->procp;
+       struct thread *td = conn->td;
        int addrlen=sizeof(sin), error;
 
        conn->flags = 0;
        bzero(&sin,addrlen);
        conn->ncp_so = conn->wdg_so = NULL;
-       checkbad(socreate(AF_INET, &conn->ncp_so, SOCK_DGRAM, IPPROTO_UDP, p));
+       checkbad(socreate(AF_INET, &conn->ncp_so, SOCK_DGRAM, IPPROTO_UDP, td));
        sin.sin_family = AF_INET;
        sin.sin_len = addrlen;
-       checkbad(sobind(conn->ncp_so, (struct sockaddr *)&sin, p));
-       checkbad(ncp_soconnect(conn->ncp_so,(struct sockaddr*)&conn->li.addr, p));
+       checkbad(sobind(conn->ncp_so, (struct sockaddr *)&sin, td));
+       checkbad(ncp_soconnect(conn->ncp_so,(struct sockaddr*)&conn->li.addr, td));
        if  (!error)
                conn->flags |= NCPFL_SOCONN;
        return error;
@@ -405,7 +409,7 @@ ncp_watchdog(struct ncp_conn *conn) {
        while (conn->wdg_so) { /* not a loop */
                so = conn->wdg_so;
                auio.uio_resid = len = 1000000;
-               auio.uio_procp = curproc;
+               auio.uio_td = curthread;
                flags = MSG_DONTWAIT;
                error = so->so_proto->pr_usrreqs->pru_soreceive(so, 
                    (struct sockaddr**)&sa, &auio, &m, (struct mbuf**)0, &flags);
@@ -416,7 +420,7 @@ ncp_watchdog(struct ncp_conn *conn) {
                buf = mtod(m, char*);
                if (buf[1] != '?') break;
                buf[1] = 'Y';
-               error = so->so_proto->pr_usrreqs->pru_sosend(so, (struct sockaddr*)sa, 0, m, 0, 0, curproc);
+               error = so->so_proto->pr_usrreqs->pru_sosend(so, (struct sockaddr*)sa, 0, m, 0, 0, curthread);
                NCPSDEBUG("send watch dog %d\n",error);
                break;
        }