added my responsibility for the `cpm' port
[unix-history] / sys / netccitt / pk_input.c
index 6f4b358..e1c833a 100644 (file)
@@ -35,7 +35,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)pk_input.c  7.14 (Berkeley) 7/16/91
+ *     from: @(#)pk_input.c    7.14 (Berkeley) 7/16/91
+ *     $Id: pk_input.c,v 1.4 1993/11/25 01:34:29 wollman Exp $
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -100,13 +101,14 @@ caddr_t llnext;
        return (pkp);
 }
 
        return (pkp);
 }
 
+int
 pk_resize (pkp)
 pk_resize (pkp)
-register struct pkcb *pkp;
+       register struct pkcb *pkp;
 {
        struct pklcd *dev_lcp = 0;
        struct x25config *xcp = pkp -> pk_xcp;
        if (pkp -> pk_chan &&
 {
        struct pklcd *dev_lcp = 0;
        struct x25config *xcp = pkp -> pk_xcp;
        if (pkp -> pk_chan &&
-           (pkp -> pk_maxlcn != xcp -> xc_maxlcn)) {
+           ((u_long)pkp -> pk_maxlcn != (u_long)xcp -> xc_maxlcn)) {
                pk_restart (pkp, X25_RESTART_NETWORK_CONGESTION);
                dev_lcp = pkp -> pk_chan[0];
                free ((caddr_t)pkp -> pk_chan, M_IFADDR);
                pk_restart (pkp, X25_RESTART_NETWORK_CONGESTION);
                dev_lcp = pkp -> pk_chan[0];
                free ((caddr_t)pkp -> pk_chan, M_IFADDR);
@@ -143,8 +145,10 @@ register struct pkcb *pkp;
  *  becomes operational, is reset, or when the link goes down. 
  */
 
  *  becomes operational, is reset, or when the link goes down. 
  */
 
+int
 pk_ctlinput (code, pkp)
 pk_ctlinput (code, pkp)
-register struct pkcb *pkp;
+       int code;
+       register struct pkcb *pkp;
 {
 
 
 {
 
 
@@ -166,11 +170,13 @@ register struct pkcb *pkp;
        }
        return (0);
 }
        }
        return (0);
 }
+
 struct ifqueue pkintrq;
 /*
  * This routine is called if there are semi-smart devices that do HDLC
  * in hardware and want to queue the packet and call level 3 directly
  */
 struct ifqueue pkintrq;
 /*
  * This routine is called if there are semi-smart devices that do HDLC
  * in hardware and want to queue the packet and call level 3 directly
  */
+void
 pkintr ()
 {
        register struct mbuf *m;
 pkintr ()
 {
        register struct mbuf *m;
@@ -209,8 +215,9 @@ struct mbuf_cache pk_input_cache = {0 };
  *
  */
 
  *
  */
 
+void
 pk_input (m)
 pk_input (m)
-register struct mbuf *m;
+       register struct mbuf *m;
 {
        register struct x25_packet *xp;
        register struct pklcd *lcp;
 {
        register struct x25_packet *xp;
        register struct pklcd *lcp;
@@ -254,7 +261,7 @@ register struct mbuf *m;
                        /* send response on lcd 0's output queue */
                        lcp = pkp -> pk_chan[0];
                        lcp -> lcd_template = pk_template (lcn, X25_CLEAR_CONFIRM);
                        /* send response on lcd 0's output queue */
                        lcp = pkp -> pk_chan[0];
                        lcp -> lcd_template = pk_template (lcn, X25_CLEAR_CONFIRM);
-                       pk_output (lcp);
+                       pk_output (lcp, 0);
                        m_freem (m);
                        return;
                }
                        m_freem (m);
                        return;
                }
@@ -316,7 +323,7 @@ register struct mbuf *m;
        case CLEAR + DATA_TRANSFER: 
                lcp -> lcd_state = RECEIVED_CLEAR;
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_CLEAR_CONFIRM);
        case CLEAR + DATA_TRANSFER: 
                lcp -> lcd_state = RECEIVED_CLEAR;
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_CLEAR_CONFIRM);
-               pk_output (lcp);
+               pk_output (lcp, 0);
                pk_clearcause (pkp, xp);
                if (lcp -> lcd_upper) {
                        MCHTYPE(m, MT_CONTROL);
                pk_clearcause (pkp, xp);
                if (lcp -> lcd_upper) {
                        MCHTYPE(m, MT_CONTROL);
@@ -454,7 +461,7 @@ register struct mbuf *m;
                        break;
                lcp -> lcd_intrdata = xp -> packet_data;
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_INTERRUPT_CONFIRM);
                        break;
                lcp -> lcd_intrdata = xp -> packet_data;
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_INTERRUPT_CONFIRM);
-               pk_output (lcp);
+               pk_output (lcp, 0);
                m -> m_data += PKHEADERLN;
                m -> m_len -= PKHEADERLN;
                m -> m_pkthdr.len -= PKHEADERLN;
                m -> m_data += PKHEADERLN;
                m -> m_len -= PKHEADERLN;
                m -> m_pkthdr.len -= PKHEADERLN;
@@ -492,7 +499,7 @@ register struct mbuf *m;
                }
                if (lcp -> lcd_rnr_condition == TRUE)
                        lcp -> lcd_rnr_condition = FALSE;
                }
                if (lcp -> lcd_rnr_condition == TRUE)
                        lcp -> lcd_rnr_condition = FALSE;
-               pk_output (lcp);
+               pk_output (lcp, 0);
                break;
 
        /* 
                break;
 
        /* 
@@ -527,7 +534,7 @@ register struct mbuf *m;
                lcp -> lcd_rsn = MODULUS - 1;
 
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_RESET_CONFIRM);
                lcp -> lcd_rsn = MODULUS - 1;
 
                lcp -> lcd_template = pk_template (lcp -> lcd_lcn, X25_RESET_CONFIRM);
-               pk_output (lcp);
+               pk_output (lcp, 0);
 
                pk_flush(lcp);
                if (so == 0)
 
                pk_flush(lcp);
                if (so == 0)
@@ -543,7 +550,7 @@ register struct mbuf *m;
        case RESET_CONF + DATA_TRANSFER: 
                if (lcp -> lcd_reset_condition) {
                        lcp -> lcd_reset_condition = FALSE;
        case RESET_CONF + DATA_TRANSFER: 
                if (lcp -> lcd_reset_condition) {
                        lcp -> lcd_reset_condition = FALSE;
-                       pk_output (lcp);
+                       pk_output (lcp, 0);
                }
                else
                        pk_procerror (RESET, lcp, "unexpected packet", 32);
                }
                else
                        pk_procerror (RESET, lcp, "unexpected packet", 32);
@@ -580,7 +587,7 @@ register struct mbuf *m;
                        pk_restartcause (pkp, xp);
                        pkp -> pk_chan[0] -> lcd_template = pk_template (0,
                                X25_RESTART_CONFIRM);
                        pk_restartcause (pkp, xp);
                        pkp -> pk_chan[0] -> lcd_template = pk_template (0,
                                X25_RESTART_CONFIRM);
-                       pk_output (pkp -> pk_chan[0]);
+                       pk_output (pkp -> pk_chan[0], 0);
                }
                break;
 
                }
                break;
 
@@ -622,10 +629,10 @@ register struct mbuf *m;
                m_freem (m);
 }
 
                m_freem (m);
 }
 
-static
+static void
 prune_dnic(from, to, dnicname, xcp)
 prune_dnic(from, to, dnicname, xcp)
-char *from, *to, *dnicname;
-register struct x25config *xcp;
+       char *from, *to, *dnicname;
+       register struct x25config *xcp;
 {
        register char *cp1 = from, *cp2 = from;
        if (xcp->xc_prepnd0 && *cp1 == '0') {
 {
        register char *cp1 = from, *cp2 = from;
        if (xcp->xc_prepnd0 && *cp1 == '0') {
@@ -641,10 +648,11 @@ copyrest:
        for (cp1 = dnicname; *cp2 = *cp1++;)
                cp2++;
 }
        for (cp1 = dnicname; *cp2 = *cp1++;)
                cp2++;
 }
-/* static */
+
+static void
 pk_simple_bsd (from, to, lower, len)
 pk_simple_bsd (from, to, lower, len)
-register octet *from, *to;
-register len, lower;
+       register octet *from, *to;
+       register len, lower;
 {
        register int c;
        while (--len >= 0) {
 {
        register int c;
        while (--len >= 0) {
@@ -658,11 +666,12 @@ register len, lower;
        *to = 0;
 }
 
        *to = 0;
 }
 
-/*static octet * */
+static void
 pk_from_bcd (a, iscalling, sa, xcp)
 pk_from_bcd (a, iscalling, sa, xcp)
-register struct x25_calladdr *a;
-register struct sockaddr_x25 *sa;
-register struct x25config *xcp;
+       register struct x25_calladdr *a;
+       int iscalling;
+       register struct sockaddr_x25 *sa;
+       register struct x25config *xcp;
 {
        octet buf[MAXADDRLN+1];
        octet *cp;
 {
        octet buf[MAXADDRLN+1];
        octet *cp;
@@ -688,15 +697,15 @@ register struct x25config *xcp;
                bcopy ((caddr_t)buf, (caddr_t)sa -> x25_addr, count + 1);
 }
 
                bcopy ((caddr_t)buf, (caddr_t)sa -> x25_addr, count + 1);
 }
 
-static
+static void
 save_extra(m0, fp, so)
 save_extra(m0, fp, so)
-struct mbuf *m0;
-octet *fp;
-struct socket *so;
+       struct mbuf *m0;
+       octet *fp;
+       struct socket *so;
 {
 {
-       register struct mbuf *m;
+       register struct mbuf *m = 0;
        struct cmsghdr cmsghdr;
        struct cmsghdr cmsghdr;
-       if (m = m_copym (m, 0, (int)M_COPYALL)) {
+       if (m = m_copym (m, 0, (int)M_COPYALL, M_DONTWAIT)) {
                int off = fp - mtod (m0, octet *);
                int len = m->m_pkthdr.len - off + sizeof (cmsghdr);
                cmsghdr.cmsg_len = len;
                int off = fp - mtod (m0, octet *);
                int len = m->m_pkthdr.len - off + sizeof (cmsghdr);
                cmsghdr.cmsg_len = len;
@@ -718,9 +727,10 @@ struct socket *so;
  * sockets awaiting connections.
  */
 
  * sockets awaiting connections.
  */
 
+void
 pk_incoming_call (pkp, m0)
 pk_incoming_call (pkp, m0)
-struct mbuf *m0;
-struct pkcb *pkp;
+       struct pkcb *pkp;
+       struct mbuf *m0;
 {
        register struct pklcd *lcp = 0, *l;
        register struct sockaddr_x25 *sa;
 {
        register struct pklcd *lcp = 0, *l;
        register struct sockaddr_x25 *sa;
@@ -747,8 +757,10 @@ struct pkcb *pkp;
                ((a -> called_addrlen + a -> calling_addrlen + 1) / 2));
        u += *u + 1;
        udlen = min (16, ((octet *)xp) + len - u);
                ((a -> called_addrlen + a -> calling_addrlen + 1) / 2));
        u += *u + 1;
        udlen = min (16, ((octet *)xp) + len - u);
+#if 0
        if (udlen < 0)
                udlen = 0;
        if (udlen < 0)
                udlen = 0;
+#endif
        pk_from_bcd (a, 1, sa, pkp -> pk_xcp); /* get calling address */
        pk_parse_facilities (facp, sa);
        bcopy ((caddr_t)u, sa -> x25_udata, udlen);
        pk_from_bcd (a, 1, sa, pkp -> pk_xcp); /* get calling address */
        pk_parse_facilities (facp, sa);
        bcopy ((caddr_t)u, sa -> x25_udata, udlen);
@@ -818,7 +830,7 @@ struct pkcb *pkp;
                                lcp -> lcd_flags &= ~X25_DBIT;
                }
                if (so) {
                                lcp -> lcd_flags &= ~X25_DBIT;
                }
                if (so) {
-                       pk_output (lcp);
+                       pk_output (lcp, 0);
                        soisconnected (so);
                        if (so -> so_options & SO_OOBINLINE)
                                save_extra(m0, facp, so);
                        soisconnected (so);
                        if (so -> so_options & SO_OOBINLINE)
                                save_extra(m0, facp, so);
@@ -858,9 +870,10 @@ struct pkcb *pkp;
        pk_clear (lcp, 0, 1);
 }
 
        pk_clear (lcp, 0, 1);
 }
 
+void
 pk_call_accepted (lcp, m)
 pk_call_accepted (lcp, m)
-struct pklcd *lcp;
-struct mbuf *m;
+       struct pklcd *lcp;
+       struct mbuf *m;
 {
        register struct x25_calladdr *ap;
        register octet *fcp;
 {
        register struct x25_calladdr *ap;
        register octet *fcp;
@@ -884,9 +897,10 @@ struct mbuf *m;
                lcp -> lcd_upper(lcp, m);
 }
 
                lcp -> lcd_upper(lcp, m);
 }
 
+void
 pk_parse_facilities (fcp, sa)
 pk_parse_facilities (fcp, sa)
-register octet *fcp;
-register struct sockaddr_x25 *sa;
+       register octet *fcp;
+       register struct sockaddr_x25 *sa;
 {
        register octet *maxfcp;
 
 {
        register octet *maxfcp;