aboutsummaryrefslogtreecommitdiff
path: root/sys/netccitt/pk_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netccitt/pk_input.c')
-rw-r--r--sys/netccitt/pk_input.c83
1 files changed, 48 insertions, 35 deletions
diff --git a/sys/netccitt/pk_input.c b/sys/netccitt/pk_input.c
index fccb75606069..1445bed6ce14 100644
--- a/sys/netccitt/pk_input.c
+++ b/sys/netccitt/pk_input.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)pk_input.c 7.14 (Berkeley) 7/16/91
- * $Id: pk_input.c,v 1.2 1993/10/16 19:46:50 rgrimes Exp $
+ * $Id: pk_input.c,v 1.5 1993/12/19 00:52:18 wollman Exp $
*/
#include "param.h"
@@ -101,13 +101,14 @@ caddr_t llnext;
return (pkp);
}
+int
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 &&
- (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);
@@ -144,8 +145,10 @@ register struct pkcb *pkp;
* becomes operational, is reset, or when the link goes down.
*/
+int
pk_ctlinput (code, pkp)
-register struct pkcb *pkp;
+ int code;
+ register struct pkcb *pkp;
{
@@ -167,11 +170,13 @@ register struct pkcb *pkp;
}
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
*/
+void
pkintr ()
{
register struct mbuf *m;
@@ -210,8 +215,9 @@ struct mbuf_cache pk_input_cache = {0 };
*
*/
+void
pk_input (m)
-register struct mbuf *m;
+ register struct mbuf *m;
{
register struct x25_packet *xp;
register struct pklcd *lcp;
@@ -255,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);
- pk_output (lcp);
+ pk_output (lcp, 0);
m_freem (m);
return;
}
@@ -317,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);
- pk_output (lcp);
+ pk_output (lcp, 0);
pk_clearcause (pkp, xp);
if (lcp -> lcd_upper) {
MCHTYPE(m, MT_CONTROL);
@@ -455,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);
- pk_output (lcp);
+ pk_output (lcp, 0);
m -> m_data += PKHEADERLN;
m -> m_len -= PKHEADERLN;
m -> m_pkthdr.len -= PKHEADERLN;
@@ -493,7 +499,7 @@ register struct mbuf *m;
}
if (lcp -> lcd_rnr_condition == TRUE)
lcp -> lcd_rnr_condition = FALSE;
- pk_output (lcp);
+ pk_output (lcp, 0);
break;
/*
@@ -528,7 +534,7 @@ register struct mbuf *m;
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)
@@ -544,7 +550,7 @@ register struct mbuf *m;
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);
@@ -581,7 +587,7 @@ register struct mbuf *m;
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;
@@ -623,10 +629,10 @@ register struct mbuf *m;
m_freem (m);
}
-static
+static void
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') {
@@ -642,10 +648,11 @@ copyrest:
for (cp1 = dnicname; *cp2 = *cp1++;)
cp2++;
}
-/* static */
+
+static void
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) {
@@ -659,11 +666,12 @@ register len, lower;
*to = 0;
}
-/*static octet * */
+static void
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;
@@ -689,15 +697,15 @@ register struct x25config *xcp;
bcopy ((caddr_t)buf, (caddr_t)sa -> x25_addr, count + 1);
}
-static
+static void
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;
- 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;
@@ -719,9 +727,10 @@ struct socket *so;
* sockets awaiting connections.
*/
+void
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;
@@ -748,8 +757,10 @@ struct pkcb *pkp;
((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;
+#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);
@@ -819,7 +830,7 @@ struct pkcb *pkp;
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);
@@ -859,9 +870,10 @@ struct pkcb *pkp;
pk_clear (lcp, 0, 1);
}
+void
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;
@@ -885,9 +897,10 @@ struct mbuf *m;
lcp -> lcd_upper(lcp, m);
}
+void
pk_parse_facilities (fcp, sa)
-register octet *fcp;
-register struct sockaddr_x25 *sa;
+ register octet *fcp;
+ register struct sockaddr_x25 *sa;
{
register octet *maxfcp;