BSD 4_3_Reno release
[unix-history] / usr / src / sys / netiso / clnp_raw.c
index 465a61f..5750b5d 100644 (file)
@@ -1,4 +1,5 @@
-/*********************************************************** Copyright IBM Corporation 1987
+/***********************************************************
+                               Copyright IBM Corporation 1987
 
                       All Rights Reserved
 
 
                       All Rights Reserved
 
@@ -25,21 +26,19 @@ SOFTWARE.
  */
 /* $Header: clnp_raw.c,v 4.2 88/06/29 14:58:56 hagens Exp $ */
 /* $Source: /usr/argo/sys/netiso/RCS/clnp_raw.c,v $ */
  */
 /* $Header: clnp_raw.c,v 4.2 88/06/29 14:58:56 hagens Exp $ */
 /* $Source: /usr/argo/sys/netiso/RCS/clnp_raw.c,v $ */
+/*     @(#)clnp_raw.c  7.7 (Berkeley) 4/5/90 */
 #ifndef lint
 static char *rcsid = "$Header: clnp_raw.c,v 4.2 88/06/29 14:58:56 hagens Exp $";
 #endif lint
 
 #ifndef lint
 static char *rcsid = "$Header: clnp_raw.c,v 4.2 88/06/29 14:58:56 hagens Exp $";
 #endif lint
 
-#ifdef ISO
-
-#include "../h/types.h"
-#include "../h/param.h"
-#include "../h/mbuf.h"
-#include "../h/domain.h"
-#include "../h/protosw.h"
-#include "../h/socket.h"
-#include "../h/socketvar.h"
-#include "../h/errno.h"
-#include "../h/time.h"
+#include "param.h"
+#include "mbuf.h"
+#include "domain.h"
+#include "protosw.h"
+#include "socket.h"
+#include "socketvar.h"
+#include "errno.h"
+#include "time.h"
 
 #include "../net/if.h"
 #include "../net/route.h"
 
 #include "../net/if.h"
 #include "../net/route.h"
@@ -53,8 +52,6 @@ static char *rcsid = "$Header: clnp_raw.c,v 4.2 88/06/29 14:58:56 hagens Exp $";
 
 #include "tp_user.h"/* XXX -- defines SOL_NETWORK */
 
 
 #include "tp_user.h"/* XXX -- defines SOL_NETWORK */
 
-struct sockaddr_iso    rclnp_src       = { sizeof(rclnp_src), AF_ISO };
-struct sockaddr_iso    rclnp_dst       = { sizeof(rclnp_src), AF_ISO };
 struct sockproto       rclnp_proto     = { PF_ISO, 0 };
 /*
  * FUNCTION:           rclnp_input
 struct sockproto       rclnp_proto     = { PF_ISO, 0 };
 /*
  * FUNCTION:           rclnp_input
@@ -72,8 +69,8 @@ struct sockproto      rclnp_proto     = { PF_ISO, 0 };
  */
 rclnp_input(m, src, dst, hdrlen)
 struct mbuf            *m;             /* ptr to packet */
  */
 rclnp_input(m, src, dst, hdrlen)
 struct mbuf            *m;             /* ptr to packet */
-struct iso_addr                *src;   /* ptr to src address */
-struct iso_addr                *dst;   /* ptr to dest address */
+struct sockaddr_iso    *src;   /* ptr to src address */
+struct sockaddr_iso    *dst;   /* ptr to dest address */
 int                                    hdrlen; /* length (in bytes) of clnp header */
 {
 #ifdef TROLL
 int                                    hdrlen; /* length (in bytes) of clnp header */
 {
 #ifdef TROLL
@@ -83,10 +80,11 @@ int                                 hdrlen; /* length (in bytes) of clnp header */
        }
 #endif TROLL
 
        }
 #endif TROLL
 
-       rclnp_src.siso_addr = *src;
-       rclnp_dst.siso_addr = *dst;
-       raw_input(m, &rclnp_proto, (struct sockaddr *)&rclnp_src,
-               (struct sockaddr *)&rclnp_dst);
+       if (raw_input(m, &rclnp_proto, (struct sockaddr *)src,
+               (struct sockaddr *)dst) == 0) {
+                       clnp_stat.cns_delivered--;
+                       clnp_stat.cns_noproto++;
+       }
 }
 
 /*
 }
 
 /*
@@ -113,6 +111,8 @@ struct socket       *so;    /* socket to send from */
        int                                             error;          /* return value of function */
        int                                             flags;          /* flags for clnp_output */
 
        int                                             error;          /* return value of function */
        int                                             flags;          /* flags for clnp_output */
 
+       if (0 == m0->m_flags & M_PKTHDR)
+               return (EINVAL);
        /*
         *      Set up src address. If user has bound socket to an address, use it.
         *      Otherwise, do not specify src (clnp_output will fill it in).
        /*
         *      Set up src address. If user has bound socket to an address, use it.
         *      Otherwise, do not specify src (clnp_output will fill it in).
@@ -134,7 +134,8 @@ bad:
        /* get flags and ship it off */
        flags = rp->risop_flags & CLNP_VFLAGS;
 
        /* get flags and ship it off */
        flags = rp->risop_flags & CLNP_VFLAGS;
 
-       error = clnp_output(m0, &rp->risop_isop, flags|CLNP_NOCACHE);
+       error = clnp_output(m0, &rp->risop_isop, m0->m_pkthdr.len,
+                                                                                               flags|CLNP_NOCACHE);
 
        return (error);
 }
 
        return (error);
 }
@@ -240,10 +241,10 @@ struct mbuf               **m;                    /* ptr to ptr to option data */
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
-clnp_usrreq(so, req, m, nam, rights, control)
+clnp_usrreq(so, req, m, nam, control)
        register struct socket *so;
        int req;
        register struct socket *so;
        int req;
-       struct mbuf *m, *nam, *rights, *control;
+       struct mbuf *m, *nam, *control;
 {
        register int error = 0;
        register struct rawisopcb *rp = sotorawisopcb(so);
 {
        register int error = 0;
        register struct rawisopcb *rp = sotorawisopcb(so);
@@ -316,10 +317,9 @@ clnp_usrreq(so, req, m, nam, rights, control)
                return (0);
            }
        }
                return (0);
            }
        }
-       error =  raw_usrreq(so, req, m, nam, rights, control);
+       error =  raw_usrreq(so, req, m, nam, control);
 
        if (error && req == PRU_ATTACH && so->so_pcb)
                free((caddr_t)rp, M_PCB);
        return (error);
 }
 
        if (error && req == PRU_ATTACH && so->so_pcb)
                free((caddr_t)rp, M_PCB);
        return (error);
 }
-#endif ISO