header file dependencies fixed up and untested changes to raw interface
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Sat, 9 Oct 1982 21:40:39 +0000 (13:40 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Sat, 9 Oct 1982 21:40:39 +0000 (13:40 -0800)
SCCS-vsn: sys/net/if.c 4.20
SCCS-vsn: sys/net/raw_cb.c 4.12
SCCS-vsn: sys/net/raw_usrreq.c 4.19
SCCS-vsn: sys/net/route.c 4.12

usr/src/sys/net/if.c
usr/src/sys/net/raw_cb.c
usr/src/sys/net/raw_usrreq.c
usr/src/sys/net/route.c

index 3f85ba7..5bb08c0 100644 (file)
@@ -1,11 +1,9 @@
-/*     if.c    4.19    82/09/12        */
+/*     if.c    4.20    82/10/09        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/socket.h"
 #include "../h/protosw.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/socket.h"
 #include "../h/protosw.h"
-#include "../net/in.h"
-#include "../net/in_systm.h"
 #include "../net/if.h"
 #include "../net/af.h"
 
 #include "../net/if.h"
 #include "../net/af.h"
 
@@ -32,6 +30,7 @@ ifinit()
        if_slowtimo();
 }
 
        if_slowtimo();
 }
 
+#if vax
 /*
  * Call each interface on a Unibus reset.
  */
 /*
  * Call each interface on a Unibus reset.
  */
@@ -44,6 +43,7 @@ ifubareset(uban)
                if (ifp->if_ubareset)
                        (*ifp->if_ubareset)(uban);
 }
                if (ifp->if_ubareset)
                        (*ifp->if_ubareset)(uban);
 }
+#endif
 
 /*
  * Attach an interface to the
 
 /*
  * Attach an interface to the
@@ -92,7 +92,7 @@ if_ifwithnet(addr)
        register struct sockaddr *addr;
 {
        register struct ifnet *ifp;
        register struct sockaddr *addr;
 {
        register struct ifnet *ifp;
-       register int af = addr->sa_family;
+       register u_int af = addr->sa_family;
        register int (*netmatch)();
 
        if (af >= AF_MAX)
        register int (*netmatch)();
 
        if (af >= AF_MAX)
index ec3782e..4f7fa4b 100644 (file)
@@ -1,4 +1,4 @@
-/*     raw_cb.c        4.11    82/07/24        */
+/*     raw_cb.c        4.12    82/10/09        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -6,11 +6,8 @@
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 #include "../h/mtpr.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 #include "../h/mtpr.h"
-#include "../net/in.h"
-#include "../net/in_systm.h"
 #include "../net/if.h"
 #include "../net/raw_cb.h"
 #include "../net/if.h"
 #include "../net/raw_cb.h"
-#include "../net/pup.h"
 #include <errno.h>
 
 /*
 #include <errno.h>
 
 /*
  * Allocate a control block and a nominal amount
  * of buffer space for the socket.
  */
  * Allocate a control block and a nominal amount
  * of buffer space for the socket.
  */
-raw_attach(so, addr)
+raw_attach(so)
        register struct socket *so;
        register struct socket *so;
-       struct sockaddr *addr;
 {
        struct mbuf *m;
        register struct rawcb *rp;
 
 {
        struct mbuf *m;
        register struct rawcb *rp;
 
-       if (ifnet == 0)
-               return (EADDRNOTAVAIL);
-       /*
-        * Should we verify address not already in use?
-        * Some say yes, others no.
-        */
-       if (addr) switch (addr->sa_family) {
-
-       case AF_IMPLINK:
-       case AF_INET:
-               if (((struct sockaddr_in *)addr)->sin_addr.s_addr &&
-                   if_ifwithaddr(addr) == 0)
-                       return (EADDRNOTAVAIL);
-               break;
-
-#ifdef PUP
-       /*
-        * Curious, we convert PUP address format to internet
-        * to allow us to verify we're asking for an Ethernet
-        * interface.  This is wrong, but things are heavily
-        * oriented towards the internet addressing scheme, and
-        * converting internet to PUP would be very expensive.
-        */
-       case AF_PUP: {
-               struct sockaddr_pup *spup = (struct sockaddr_pup *)addr;
-               struct sockaddr_in inpup;
-
-               bzero((caddr_t)&inpup, sizeof(inpup));
-               inpup.sin_family = AF_INET;
-               inpup.sin_addr.s_net = spup->sp_net;
-               inpup.sin_addr.s_impno = spup->sp_host;
-               if (inpup.sin_addr.s_addr &&
-                   if_ifwithaddr((struct sockaddr *)&inpup) == 0)
-                       return (EADDRNOTAVAIL);
-               break;
-       }
-#endif
-
-       default:
-               return (EAFNOSUPPORT);
-       }
        m = m_getclr(M_DONTWAIT);
        if (m == 0)
                return (ENOBUFS);
        m = m_getclr(M_DONTWAIT);
        if (m == 0)
                return (ENOBUFS);
@@ -86,10 +41,6 @@ raw_attach(so, addr)
        insque(rp, &rawcb);
        so->so_pcb = (caddr_t)rp;
        rp->rcb_pcb = 0;
        insque(rp, &rawcb);
        so->so_pcb = (caddr_t)rp;
        rp->rcb_pcb = 0;
-       if (addr) {
-               bcopy((caddr_t)addr, (caddr_t)&rp->rcb_laddr, sizeof(*addr));
-               rp->rcb_flags |= RAW_LADDR;
-       }
        return (0);
 bad2:
        sbrelease(&so->so_snd);
        return (0);
 bad2:
        sbrelease(&so->so_snd);
@@ -124,14 +75,77 @@ raw_disconnect(rp)
                raw_detach(rp);
 }
 
                raw_detach(rp);
 }
 
+raw_bind(so, nam)
+       register struct socket *so;
+       struct mbuf *nam;
+{
+       struct sockaddr *addr = mtod(nam, struct sockaddr *);
+       struct mbuf *m;
+       register struct rawcb *rp;
+
+       if (ifnet == 0)
+               return (EADDRNOTAVAIL);
+{
+#include "../netinet/in.h"
+#include "../netinet/in_systm.h"
+/* BEGIN DUBIOUS */
+       /*
+        * Should we verify address not already in use?
+        * Some say yes, others no.
+        */
+       switch (addr->sa_family) {
+
+       case AF_IMPLINK:
+       case AF_INET:
+               if (((struct sockaddr_in *)addr)->sin_addr.s_addr &&
+                   if_ifwithaddr(addr) == 0)
+                       return (EADDRNOTAVAIL);
+               break;
+
+#ifdef PUP
+       /*
+        * Curious, we convert PUP address format to internet
+        * to allow us to verify we're asking for an Ethernet
+        * interface.  This is wrong, but things are heavily
+        * oriented towards the internet addressing scheme, and
+        * converting internet to PUP would be very expensive.
+        */
+       case AF_PUP: {
+#include "../netpup/pup.h"
+               struct sockaddr_pup *spup = (struct sockaddr_pup *)addr;
+               struct sockaddr_in inpup;
+
+               bzero((caddr_t)&inpup, sizeof(inpup));
+               inpup.sin_family = AF_INET;
+               inpup.sin_addr.s_net = spup->sp_net;
+               inpup.sin_addr.s_impno = spup->sp_host;
+               if (inpup.sin_addr.s_addr &&
+                   if_ifwithaddr((struct sockaddr *)&inpup) == 0)
+                       return (EADDRNOTAVAIL);
+               break;
+       }
+#endif
+
+       default:
+               return (EAFNOSUPPORT);
+       }
+}
+/* END DUBIOUS */
+       bcopy((caddr_t)addr, (caddr_t)&rp->rcb_laddr, sizeof (*addr));
+       rp->rcb_flags |= RAW_LADDR;
+       return (0);
+}
+
 /*
  * Associate a peer's address with a
  * raw connection block.
  */
 /*
  * Associate a peer's address with a
  * raw connection block.
  */
-raw_connaddr(rp, addr)
+raw_connaddr(rp, nam)
        struct rawcb *rp;
        struct rawcb *rp;
-       struct sockaddr *addr;
+       struct mbuf *nam;
 {
 {
+       struct sockaddr *addr = mtod(nam, struct sockaddr *);
+
        bcopy((caddr_t)addr, (caddr_t)&rp->rcb_faddr, sizeof(*addr));
        rp->rcb_flags |= RAW_FADDR;
 }
        bcopy((caddr_t)addr, (caddr_t)&rp->rcb_faddr, sizeof(*addr));
        rp->rcb_flags |= RAW_FADDR;
 }
index 7564542..240e938 100644 (file)
@@ -1,4 +1,4 @@
-/*     raw_usrreq.c    4.18    82/07/24        */
+/*     raw_usrreq.c    4.19    82/10/09        */
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
@@ -6,9 +6,8 @@
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 #include "../h/mtpr.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 #include "../h/mtpr.h"
-#include "../net/in.h"
-#include "../net/in_systm.h"
 #include "../net/if.h"
 #include "../net/if.h"
+#include "../net/netisr.h"
 #include "../net/raw_cb.h"
 #include <errno.h>
 
 #include "../net/raw_cb.h"
 #include <errno.h>
 
@@ -45,7 +44,6 @@ raw_input(m0, proto, src, dst)
                return;
        }
        m->m_next = m0;
                return;
        }
        m->m_next = m0;
-       m->m_off = MMINOFF;
        m->m_len = sizeof(struct raw_header);
        rh = mtod(m, struct raw_header *);
        rh->raw_dst = *dst;
        m->m_len = sizeof(struct raw_header);
        rh = mtod(m, struct raw_header *);
        rh->raw_dst = *dst;
@@ -146,11 +144,11 @@ raw_ctlinput(cmd, arg)
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
-raw_usrreq(so, req, m, addr)
+raw_usrreq(so, req, m, nam, opt)
        struct socket *so;
        int req;
        struct socket *so;
        int req;
-       struct mbuf *m;
-       caddr_t addr;
+       struct mbuf *m, *nam;
+       struct socketopt *opt;
 {
        register struct rawcb *rp = sotorawcb(so);
        int error = 0;
 {
        register struct rawcb *rp = sotorawcb(so);
        int error = 0;
@@ -170,7 +168,7 @@ raw_usrreq(so, req, m, addr)
                        return (EACCES);
                if (rp)
                        return (EINVAL);
                        return (EACCES);
                if (rp)
                        return (EINVAL);
-               error = raw_attach(so, (struct sockaddr *)addr);
+               error = raw_attach(so);
                break;
 
        /*
                break;
 
        /*
@@ -192,7 +190,7 @@ raw_usrreq(so, req, m, addr)
        case PRU_CONNECT:
                if (rp->rcb_flags & RAW_FADDR)
                        return (EISCONN);
        case PRU_CONNECT:
                if (rp->rcb_flags & RAW_FADDR)
                        return (EISCONN);
-               raw_connaddr(rp, (struct sockaddr *)addr);
+               raw_connaddr(rp, nam);
                soisconnected(so);
                break;
 
                soisconnected(so);
                break;
 
@@ -215,14 +213,14 @@ raw_usrreq(so, req, m, addr)
         * routine handles any massaging necessary.
         */
        case PRU_SEND:
         * routine handles any massaging necessary.
         */
        case PRU_SEND:
-               if (addr) {
+               if (nam) {
                        if (rp->rcb_flags & RAW_FADDR)
                                return (EISCONN);
                        if (rp->rcb_flags & RAW_FADDR)
                                return (EISCONN);
-                       raw_connaddr(rp, (struct sockaddr *)addr);
+                       raw_connaddr(rp, nam);
                } else if ((rp->rcb_flags & RAW_FADDR) == 0)
                        return (ENOTCONN);
                error = (*so->so_proto->pr_output)(m, so);
                } else if ((rp->rcb_flags & RAW_FADDR) == 0)
                        return (ENOTCONN);
                error = (*so->so_proto->pr_output)(m, so);
-               if (addr)
+               if (nam)
                        rp->rcb_flags &= ~RAW_FADDR;
                break;
 
                        rp->rcb_flags &= ~RAW_FADDR;
                break;
 
@@ -245,7 +243,9 @@ raw_usrreq(so, req, m, addr)
                break;
 
        case PRU_SOCKADDR:
                break;
 
        case PRU_SOCKADDR:
-               bcopy(addr, (caddr_t)&rp->rcb_laddr, sizeof (struct sockaddr));
+               bcopy((caddr_t)&rp->rcb_laddr, mtod(nam, struct sockaddr *),
+                   sizeof (struct sockaddr));
+               nam->m_len = sizeof (struct sockaddr);
                break;
 
        default:
                break;
 
        default:
index ea73e40..b46049b 100644 (file)
@@ -1,4 +1,4 @@
-/*     route.c 4.11    82/06/20        */
+/*     route.c 4.12    82/10/09        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -6,8 +6,6 @@
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/ioctl.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/ioctl.h"
-#include "../net/in.h"
-#include "../net/in_systm.h"
 #include "../net/if.h"
 #include "../net/af.h"
 #include "../net/route.h"
 #include "../net/if.h"
 #include "../net/af.h"
 #include "../net/route.h"