summaryrefslogtreecommitdiff
path: root/sys/netccitt/pk_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netccitt/pk_output.c')
-rw-r--r--sys/netccitt/pk_output.c208
1 files changed, 105 insertions, 103 deletions
diff --git a/sys/netccitt/pk_output.c b/sys/netccitt/pk_output.c
index 9bc91325fec..36c58f39643 100644
--- a/sys/netccitt/pk_output.c
+++ b/sys/netccitt/pk_output.c
@@ -1,16 +1,17 @@
-/* $NetBSD: pk_output.c,v 1.6 1994/09/20 06:41:04 cgd Exp $ */
+/* $OpenBSD: pk_output.c,v 1.2 1996/03/04 07:36:43 niklas Exp $ */
+/* $NetBSD: pk_output.c,v 1.7 1996/02/13 22:05:30 christos Exp $ */
/*
- * Copyright (c) University of British Columbia, 1984
- * Copyright (C) Computer Science Department IV,
+ * Copyright(c) University of British Columbia, 1984
+ * Copyright(C) Computer Science Department IV,
* University of Erlangen-Nuremberg, Germany, 1992
- * Copyright (c) 1991, 1992, 1993
+ * Copyright(c) 1991, 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by the
* Laboratory for Computation Vision and the Computer Science Department
* of the the University of British Columbia and the Computer Science
- * Department (IV) of the University of Erlangen-Nuremberg, Germany.
+ * Department(IV) of the University of Erlangen-Nuremberg, Germany.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -33,14 +34,14 @@
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)pk_output.c 8.1 (Berkeley) 6/10/93
+ * @(#)pk_output.c 8.1(Berkeley) 6/10/93
*/
#include <sys/param.h>
@@ -56,163 +57,164 @@
#include <netccitt/x25.h>
#include <netccitt/pk.h>
#include <netccitt/pk_var.h>
+#include <netccitt/pk_extern.h>
-struct mbuf_cache pk_output_cache = {0 }, pk_input_cache;
-struct mbuf *nextpk ();
+struct mbuf_cache pk_output_cache = {0}, pk_input_cache;
-pk_output (lcp)
-register struct pklcd *lcp;
+void
+pk_output(lcp)
+ register struct pklcd *lcp;
{
register struct x25_packet *xp;
register struct mbuf *m;
- register struct pkcb *pkp = lcp -> lcd_pkp;
+ register struct pkcb *pkp = lcp->lcd_pkp;
if (lcp == 0 || pkp == 0) {
- printf ("pk_output: zero arg\n");
+ printf("pk_output: zero arg\n");
return;
}
-
- while ((m = nextpk (lcp)) != NULL) {
- xp = mtod (m, struct x25_packet *);
-
- switch (pk_decode (xp) + lcp -> lcd_state) {
- /*
- * All the work is already done - just set the state and
- * pass to peer.
- */
- case CALL + READY:
- lcp -> lcd_state = SENT_CALL;
- lcp -> lcd_timer = pk_t21;
+ while ((m = nextpk(lcp)) != NULL) {
+ xp = mtod(m, struct x25_packet *);
+
+ switch (pk_decode(xp) + lcp->lcd_state) {
+ /*
+ * All the work is already done - just set the state
+ * and pass to peer.
+ */
+ case PK_CALL + READY:
+ lcp->lcd_state = SENT_CALL;
+ lcp->lcd_timer = pk_t21;
break;
- /*
- * Just set the state to allow packet to flow and send the
- * confirmation.
- */
- case CALL_ACCEPTED + RECEIVED_CALL:
- lcp -> lcd_state = DATA_TRANSFER;
+ /*
+ * Just set the state to allow packet to flow and send the
+ * confirmation.
+ */
+ case PK_CALL_ACCEPTED + RECEIVED_CALL:
+ lcp->lcd_state = DATA_TRANSFER;
break;
- /*
- * Just set the state. Keep the LCD around till the clear
- * confirmation is returned.
- */
- case CLEAR + RECEIVED_CALL:
- case CLEAR + SENT_CALL:
- case CLEAR + DATA_TRANSFER:
- lcp -> lcd_state = SENT_CLEAR;
- lcp -> lcd_retry = 0;
+ /*
+ * Just set the state. Keep the LCD around till the
+ * clear confirmation is returned.
+ */
+ case PK_CLEAR + RECEIVED_CALL:
+ case PK_CLEAR + SENT_CALL:
+ case PK_CLEAR + DATA_TRANSFER:
+ lcp->lcd_state = SENT_CLEAR;
+ lcp->lcd_retry = 0;
/* fall through */
- case CLEAR + SENT_CLEAR:
- lcp -> lcd_timer = pk_t23;
- lcp -> lcd_retry++;
+ case PK_CLEAR + SENT_CLEAR:
+ lcp->lcd_timer = pk_t23;
+ lcp->lcd_retry++;
break;
- case CLEAR_CONF + RECEIVED_CLEAR:
- case CLEAR_CONF + SENT_CLEAR:
- case CLEAR_CONF + READY:
- lcp -> lcd_state = READY;
+ case PK_CLEAR_CONF + RECEIVED_CLEAR:
+ case PK_CLEAR_CONF + SENT_CLEAR:
+ case PK_CLEAR_CONF + READY:
+ lcp->lcd_state = READY;
break;
- case DATA + DATA_TRANSFER:
- SPS(xp, lcp -> lcd_ssn);
- lcp -> lcd_input_window =
- (lcp -> lcd_rsn + 1) % MODULUS;
- SPR(xp, lcp -> lcd_input_window);
- lcp -> lcd_last_transmitted_pr = lcp -> lcd_input_window;
- lcp -> lcd_ssn = (lcp -> lcd_ssn + 1) % MODULUS;
- if (lcp -> lcd_ssn == ((lcp -> lcd_output_window + lcp -> lcd_windowsize) % MODULUS))
- lcp -> lcd_window_condition = TRUE;
+ case PK_DATA + DATA_TRANSFER:
+ SPS(xp, lcp->lcd_ssn);
+ lcp->lcd_input_window =
+ (lcp->lcd_rsn + 1) % MODULUS;
+ SPR(xp, lcp->lcd_input_window);
+ lcp->lcd_last_transmitted_pr = lcp->lcd_input_window;
+ lcp->lcd_ssn = (lcp->lcd_ssn + 1) % MODULUS;
+ if (lcp->lcd_ssn == ((lcp->lcd_output_window + lcp->lcd_windowsize) % MODULUS))
+ lcp->lcd_window_condition = TRUE;
break;
- case INTERRUPT + DATA_TRANSFER:
+ case PK_INTERRUPT + DATA_TRANSFER:
#ifdef ancient_history
- xp -> packet_data = 0;
+ xp->packet_data = 0;
#endif
- lcp -> lcd_intrconf_pending = TRUE;
+ lcp->lcd_intrconf_pending = TRUE;
break;
- case INTERRUPT_CONF + DATA_TRANSFER:
+ case PK_INTERRUPT_CONF + DATA_TRANSFER:
break;
- case RR + DATA_TRANSFER:
- case RNR + DATA_TRANSFER:
- lcp -> lcd_input_window =
- (lcp -> lcd_rsn + 1) % MODULUS;
- SPR(xp, lcp -> lcd_input_window);
- lcp -> lcd_last_transmitted_pr = lcp -> lcd_input_window;
+ case PK_RR + DATA_TRANSFER:
+ case PK_RNR + DATA_TRANSFER:
+ lcp->lcd_input_window =
+ (lcp->lcd_rsn + 1) % MODULUS;
+ SPR(xp, lcp->lcd_input_window);
+ lcp->lcd_last_transmitted_pr = lcp->lcd_input_window;
break;
- case RESET + DATA_TRANSFER:
- lcp -> lcd_reset_condition = TRUE;
+ case PK_RESET + DATA_TRANSFER:
+ lcp->lcd_reset_condition = TRUE;
break;
- case RESET_CONF + DATA_TRANSFER:
- lcp -> lcd_reset_condition = FALSE;
+ case PK_RESET_CONF + DATA_TRANSFER:
+ lcp->lcd_reset_condition = FALSE;
break;
- /*
- * A restart should be only generated internally. Therefore
- * all logic for restart is in the pk_restart routine.
- */
- case RESTART + READY:
- lcp -> lcd_timer = pk_t20;
+ /*
+ * A restart should be only generated internally.
+ * Therefore all logic for restart is in the
+ * pk_restart routine.
+ */
+ case PK_RESTART + READY:
+ lcp->lcd_timer = pk_t20;
break;
- /*
- * Restarts are all handled internally. Therefore all the
- * logic for the incoming restart packet is handled in the
- * pk_input routine.
- */
- case RESTART_CONF + READY:
+ /*
+ * Restarts are all handled internally. Therefore
+ * all the logic for the incoming restart packet is
+ * handled in the pk_input routine.
+ */
+ case PK_RESTART_CONF + READY:
break;
- default:
- m_freem (m);
+ default:
+ m_freem(m);
return;
}
/* Trace the packet. */
- pk_trace (pkp -> pk_xcp, m, "P-Out");
+ pk_trace(pkp->pk_xcp, m, "P-Out");
/* Pass the packet on down to the link layer */
if (pk_input_cache.mbc_size || pk_input_cache.mbc_oldsize) {
m->m_flags |= 0x08;
mbuf_cache(&pk_input_cache, m);
}
- (*pkp -> pk_lloutput) (pkp -> pk_llnext, m, pkp -> pk_rt);
+ (*pkp->pk_lloutput) (m, pkp->pk_llnext, pkp->pk_rt);
}
}
-/*
- * This procedure returns the next packet to send or null. A
- * packet is composed of one or more mbufs.
+/*
+ * This procedure returns the next packet to send or null. A packet is
+ * composed of one or more mbufs.
*/
struct mbuf *
-nextpk (lcp)
-struct pklcd *lcp;
+nextpk(lcp)
+ struct pklcd *lcp;
{
register struct mbuf *m, *n;
- struct socket *so = lcp -> lcd_so;
+ struct socket *so = lcp->lcd_so;
register struct sockbuf *sb = (so ? &so->so_snd : &lcp->lcd_sb);
- if (lcp -> lcd_template) {
- m = lcp -> lcd_template;
- lcp -> lcd_template = NULL;
+ if (lcp->lcd_template) {
+ m = lcp->lcd_template;
+ lcp->lcd_template = NULL;
} else {
- if (lcp -> lcd_rnr_condition || lcp -> lcd_window_condition ||
- lcp -> lcd_reset_condition)
+ if (lcp->lcd_rnr_condition || lcp->lcd_window_condition ||
+ lcp->lcd_reset_condition)
return (NULL);
- if ((m = sb -> sb_mb) == 0)
+ if ((m = sb->sb_mb) == 0)
return (NULL);
- sb -> sb_mb = m -> m_nextpkt;
- m->m_act = 0;
- for (n = m; n; n = n -> m_next)
- sbfree (sb, n);
+ sb->sb_mb = m->m_nextpkt;
+ m->m_act = 0;
+ for (n = m; n; n = n->m_next)
+ sbfree(sb, n);
}
return (m);
}