aboutsummaryrefslogtreecommitdiff
path: root/sys/netccitt/pk_var.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netccitt/pk_var.h')
-rw-r--r--sys/netccitt/pk_var.h231
1 files changed, 231 insertions, 0 deletions
diff --git a/sys/netccitt/pk_var.h b/sys/netccitt/pk_var.h
new file mode 100644
index 000000000000..beda05dc3752
--- /dev/null
+++ b/sys/netccitt/pk_var.h
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) Computing Centre, University of British Columbia, 1985
+ * Copyright (C) Computer Science Department IV,
+ * University of Erlangen-Nuremberg, Germany, 1990, 1991, 1992
+ * Copyright (c) 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.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * 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
+ * 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
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)pk_var.h 8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ *
+ * X.25 Logical Channel Descriptor
+ *
+ */
+
+struct pklcd {
+ struct pklcd_q {
+ struct pklcd_q *q_forw; /* debugging chain */
+ struct pklcd_q *q_back; /* debugging chain */
+ } lcd_q;
+ int (*lcd_upper)(); /* switch to socket vs datagram vs ...*/
+ caddr_t lcd_upnext; /* reference for lcd_upper() */
+ int (*lcd_send)(); /* if X.25 front end, direct connect */
+ caddr_t lcd_downnext; /* reference for lcd_send() */
+ short lcd_lcn; /* Logical channel number */
+ short lcd_state; /* Logical Channel state */
+ short lcd_timer; /* Various timer values */
+ short lcd_dg_timer; /* to reclaim idle datagram circuits */
+ bool lcd_intrconf_pending; /* Interrupt confirmation pending */
+ octet lcd_intrdata; /* Octet of incoming intr data */
+ char lcd_retry; /* Timer retry count */
+ char lcd_rsn; /* Seq no of last received packet */
+ char lcd_ssn; /* Seq no of next packet to send */
+ char lcd_output_window; /* Output flow control window */
+ char lcd_input_window; /* Input flow control window */
+ char lcd_last_transmitted_pr;/* Last Pr value transmitted */
+ bool lcd_rnr_condition; /* Remote in busy condition */
+ bool lcd_window_condition; /* Output window size exceeded */
+ bool lcd_reset_condition; /* True, if waiting reset confirm */
+ bool lcd_rxrnr_condition; /* True, if we have sent rnr */
+ char lcd_packetsize; /* Maximum packet size */
+ char lcd_windowsize; /* Window size - both directions */
+ octet lcd_closed_user_group; /* Closed user group specification */
+ char lcd_flags; /* copy of sockaddr_x25 op_flags */
+ struct mbuf *lcd_facilities; /* user supplied facilities for cr */
+ struct mbuf *lcd_template; /* Address of response packet */
+ struct socket *lcd_so; /* Socket addr for connection */
+ struct sockaddr_x25 *lcd_craddr;/* Calling address pointer */
+ struct sockaddr_x25 *lcd_ceaddr;/* Called address pointer */
+ time_t lcd_stime; /* time circuit established */
+ long lcd_txcnt; /* Data packet transmit count */
+ long lcd_rxcnt; /* Data packet receive count */
+ short lcd_intrcnt; /* Interrupt packet transmit count */
+ struct pklcd *lcd_listen; /* Next lcd on listen queue */
+ struct pkcb *lcd_pkp; /* Network this lcd is attached to */
+ struct mbuf *lcd_cps; /* Complete Packet Sequence reassembly*/
+ long lcd_cpsmax; /* Max length for CPS */
+ struct sockaddr_x25 lcd_faddr; /* Remote Address (Calling) */
+ struct sockaddr_x25 lcd_laddr; /* Local Address (Called) */
+ struct sockbuf lcd_sb; /* alternate for datagram service */
+};
+
+/*
+ * Per network information, allocated dynamically
+ * when a new network is configured.
+ */
+
+struct pkcb {
+ struct pkcb_q {
+ struct pkcb_q *q_forw;
+ struct pkcb_q *q_backw;
+ } pk_q;
+ short pk_state; /* packet level status */
+ short pk_maxlcn; /* local copy of xc_maxlcn */
+ int (*pk_lloutput) (); /* link level output procedure */
+ caddr_t (*pk_llctlinput) (); /* link level ctloutput procedure */
+ caddr_t pk_llnext; /* handle for next level down */
+ struct x25config *pk_xcp; /* network specific configuration */
+ struct x25_ifaddr *pk_ia; /* backpointer to ifaddr */
+ struct pklcd **pk_chan; /* actual size == xc_maxlcn+1 */
+ short pk_dxerole; /* DXE role of PLE over LLC2 */
+ short pk_restartcolls; /* counting RESTART collisions til resolved */
+ struct rtentry *pk_rt; /* back pointer to route */
+ struct rtentry *pk_llrt; /* pointer to reverse mapping */
+ u_short pk_refcount; /* ref count */
+};
+
+#define FOR_ALL_PKCBS(p) for((p) = (struct pkcb *)(pkcb_q.q_forw); \
+ (pkcb_q.q_forw != &pkcb_q) && ((struct pkcb_q *)(p) != &pkcb_q); \
+ (p) = (struct pkcb *)((p) -> pk_q.q_forw))
+
+#define PQEMPTY (pkcb_q.q_forw == &pkcb_q)
+
+/*
+ * Interface address, x25 version. Exactly one of these structures is
+ * allocated for each interface with an x25 address.
+ *
+ * The ifaddr structure conatins the protocol-independent part
+ * of the structure, and is assumed to be first.
+ */
+struct x25_ifaddr {
+ struct ifaddr ia_ifa; /* protocol-independent info */
+#define ia_ifp ia_ifa.ifa_ifp
+#define ia_flags ia_ifa.ifa_flags
+ struct x25config ia_xc; /* network specific configuration */
+ struct pkcb *ia_pkcb;
+#define ia_maxlcn ia_xc.xc_maxlcn
+ int (*ia_start) (); /* connect, confirm method */
+ struct sockaddr_x25 ia_dstaddr; /* reserve space for route dst */
+};
+
+/*
+ * ``Link-Level'' extension to Routing Entry for upper level
+ * packet switching via X.25 virtual circuits.
+ */
+struct llinfo_x25 {
+ struct llinfo_x25 *lx_next; /* chain together in linked list */
+ struct llinfo_x25 *lx_prev; /* chain together in linked list */
+ struct rtentry *lx_rt; /* back pointer to route */
+ struct pklcd *lx_lcd; /* local connection block */
+ struct x25_ifaddr *lx_ia; /* may not be same as rt_ifa */
+ int lx_state; /* can't trust lcd->lcd_state */
+ int lx_flags;
+ int lx_timer; /* for idle timeout */
+ int lx_family; /* for dispatch */
+};
+
+/* States for lx_state */
+#define LXS_NEWBORN 0
+#define LXS_RESOLVING 1
+#define LXS_FREE 2
+#define LXS_CONNECTING 3
+#define LXS_CONNECTED 4
+#define LXS_DISCONNECTING 5
+#define LXS_LISTENING 6
+
+/* flags */
+#define LXF_VALID 0x1 /* Circuit is live, etc. */
+#define LXF_RTHELD 0x2 /* this lcb references rtentry */
+#define LXF_LISTEN 0x4 /* accepting incoming calls */
+
+/*
+ * Definitions for accessing bitfields/bitslices inside X.25 structs
+ */
+
+
+struct x25bitslice {
+ unsigned int bs_mask;
+ unsigned int bs_shift;
+};
+
+#define calling_addrlen 0
+#define called_addrlen 1
+#define q_bit 2
+#define d_bit 3
+#define fmt_identifier 4
+#define lc_group_number 1
+#define p_r 5
+#define m_bit 6
+#define p_s 7
+#define zilch 8
+
+#define X25GBITS(Arg, Index) (((Arg) & x25_bitslice[(Index)].bs_mask) >> x25_bitslice[(Index)].bs_shift)
+#define X25SBITS(Arg, Index, Val) (Arg) |= (((Val) << x25_bitslice[(Index)].bs_shift) & x25_bitslice[(Index)].bs_mask)
+#define X25CSBITS(Arg, Index, Val) (Arg) = (((Val) << x25_bitslice[(Index)].bs_shift) & x25_bitslice[(Index)].bs_mask)
+
+extern struct x25bitslice x25_bitslice[];
+
+
+#define ISOFIFTTYPE(i,t) ((i)->if_type == (t))
+#define ISISO8802(i) ((ISOFIFTTYPE(i, IFT_ETHER) || \
+ ISOFIFTTYPE(i, IFT_ISO88023) || \
+ ISOFIFTTYPE(i, IFT_ISO88024) || \
+ ISOFIFTTYPE(i, IFT_ISO88025) || \
+ ISOFIFTTYPE(i, IFT_ISO88026) || \
+ ISOFIFTTYPE(i, IFT_P10) || \
+ ISOFIFTTYPE(i, IFT_P80) || \
+ ISOFIFTTYPE(i, IFT_FDDI)))
+
+/*
+ * miscellenous debugging info
+ */
+struct mbuf_cache {
+ int mbc_size;
+ int mbc_num;
+ int mbc_oldsize;
+ struct mbuf **mbc_cache;
+};
+
+#if defined(KERNEL) && defined(CCITT)
+extern struct pkcb_q pkcb_q;
+struct pklcd *pk_listenhead;
+struct pklcd *pk_attach();
+
+extern char *pk_name[], *pk_state[];
+int pk_t20, pk_t21, pk_t22, pk_t23;
+#endif