xref: /csrg-svn/sys/netccitt/pk_var.h (revision 63216)
157022Ssklower /*
257022Ssklower  * Copyright (c) Computing Centre, University of British Columbia, 1985
357022Ssklower  * Copyright (C) Computer Science Department IV,
457022Ssklower  * 		 University of Erlangen-Nuremberg, Germany, 1990, 1991, 1992
5*63216Sbostic  * Copyright (c) 1992, 1993
6*63216Sbostic  *	The Regents of the University of California.  All rights reserved.
757022Ssklower  *
857022Ssklower  * This code is derived from software contributed to Berkeley by the
957022Ssklower  * Laboratory for Computation Vision and the Computer Science Department
1057022Ssklower  * of the the University of British Columbia and the Computer Science
1157022Ssklower  * Department (IV) of the University of Erlangen-Nuremberg, Germany.
1241935Ssklower  *
1341935Ssklower  * %sccs.include.redist.c%
1441935Ssklower  *
15*63216Sbostic  *	@(#)pk_var.h	8.1 (Berkeley) 06/10/93
1641935Ssklower  */
1741595Ssklower 
1841595Ssklower /*
1941595Ssklower  *
2041595Ssklower  *  X.25 Logical Channel Descriptor
2141595Ssklower  *
2241595Ssklower  */
2341595Ssklower 
2441595Ssklower struct pklcd {
2547265Ssklower 	struct 	pklcd_q {
2647265Ssklower 		struct	pklcd_q *q_forw;	/* debugging chain */
2747265Ssklower 		struct	pklcd_q *q_back;	/* debugging chain */
2847265Ssklower 	} lcd_q;
2943362Ssklower 	int	(*lcd_upper)();		/* switch to socket vs datagram vs ...*/
3043362Ssklower 	caddr_t	lcd_upnext;		/* reference for lcd_upper() */
3147265Ssklower 	int	(*lcd_send)();		/* if X.25 front end, direct connect */
3247265Ssklower 	caddr_t lcd_downnext;		/* reference for lcd_send() */
3341595Ssklower 	short   lcd_lcn;		/* Logical channel number */
3441595Ssklower 	short   lcd_state;		/* Logical Channel state */
3547265Ssklower 	short   lcd_timer;		/* Various timer values */
3647265Ssklower 	short   lcd_dg_timer;		/* to reclaim idle datagram circuits */
3741595Ssklower         bool	lcd_intrconf_pending;	/* Interrupt confirmation pending */
3841595Ssklower 	octet	lcd_intrdata;		/* Octet of incoming intr data */
3941595Ssklower 	char	lcd_retry;		/* Timer retry count */
4041595Ssklower 	char	lcd_rsn;		/* Seq no of last received packet */
4141595Ssklower 	char	lcd_ssn;		/* Seq no of next packet to send */
4241595Ssklower 	char	lcd_output_window;	/* Output flow control window */
4341595Ssklower 	char	lcd_input_window;	/* Input flow control window */
4441595Ssklower 	char	lcd_last_transmitted_pr;/* Last Pr value transmitted */
4541595Ssklower         bool	lcd_rnr_condition;	/* Remote in busy condition */
4641595Ssklower         bool	lcd_window_condition;	/* Output window size exceeded */
4741595Ssklower         bool	lcd_reset_condition;	/* True, if waiting reset confirm */
4847265Ssklower 	bool	lcd_rxrnr_condition;	/* True, if we have sent rnr */
4941595Ssklower 	char	lcd_packetsize;		/* Maximum packet size */
5041595Ssklower 	char	lcd_windowsize;		/* Window size - both directions */
5141595Ssklower         octet	lcd_closed_user_group;	/* Closed user group specification */
5241595Ssklower 	char	lcd_flags;		/* copy of sockaddr_x25 op_flags */
5347265Ssklower 	struct	mbuf *lcd_facilities;	/* user supplied facilities for cr */
5445892Ssklower 	struct	mbuf *lcd_template;	/* Address of response packet */
5541595Ssklower 	struct	socket *lcd_so;		/* Socket addr for connection */
5642277Ssklower 	struct	sockaddr_x25 *lcd_craddr;/* Calling address pointer */
5742277Ssklower 	struct	sockaddr_x25 *lcd_ceaddr;/* Called address pointer */
5841595Ssklower 	time_t	lcd_stime;		/* time circuit established */
5941595Ssklower 	long    lcd_txcnt;		/* Data packet transmit count */
6041595Ssklower 	long    lcd_rxcnt;		/* Data packet receive count */
6141595Ssklower 	short   lcd_intrcnt;		/* Interrupt packet transmit count */
6241595Ssklower 	struct	pklcd *lcd_listen;	/* Next lcd on listen queue */
6342277Ssklower 	struct	pkcb *lcd_pkp;		/* Network this lcd is attached to */
6445892Ssklower 	struct	mbuf *lcd_cps;		/* Complete Packet Sequence reassembly*/
6545892Ssklower 	long	lcd_cpsmax;		/* Max length for CPS */
6645165Ssklower 	struct	sockaddr_x25 lcd_faddr;	/* Remote Address (Calling) */
6745165Ssklower 	struct	sockaddr_x25 lcd_laddr;	/* Local Address (Called) */
6843362Ssklower 	struct	sockbuf lcd_sb;		/* alternate for datagram service */
6941595Ssklower };
7041595Ssklower 
7141595Ssklower /*
7242140Ssklower  * Per network information, allocated dynamically
7342140Ssklower  * when a new network is configured.
7442140Ssklower  */
7542140Ssklower 
7642140Ssklower struct	pkcb {
7757022Ssklower 	struct pkcb_q {
7857022Ssklower 		struct pkcb_q *q_forw;
7957022Ssklower 		struct pkcb_q *q_backw;
8057022Ssklower 	} pk_q;
8149935Ssklower 	short	pk_state;		/* packet level status */
8249935Ssklower 	short	pk_maxlcn;		/* local copy of xc_maxlcn */
8342277Ssklower 	int	(*pk_lloutput) ();	/* link level output procedure */
8457022Ssklower 	caddr_t (*pk_llctlinput) ();    /* link level ctloutput procedure */
8543362Ssklower 	caddr_t pk_llnext;		/* handle for next level down */
8642277Ssklower 	struct	x25config *pk_xcp;	/* network specific configuration */
8749935Ssklower 	struct	x25_ifaddr *pk_ia;	/* backpointer to ifaddr */
8842140Ssklower 	struct	pklcd **pk_chan;	/* actual size == xc_maxlcn+1 */
8957022Ssklower 	short	pk_dxerole;		/* DXE role of PLE over LLC2 */
9057022Ssklower 	short	pk_restartcolls;	/* counting RESTART collisions til resolved */
9157022Ssklower 	struct	rtentry *pk_rt;		/* back pointer to route */
9257022Ssklower 	struct  rtentry *pk_llrt;       /* pointer to reverse mapping */
9357022Ssklower 	u_short pk_refcount;  		/* ref count */
9442140Ssklower };
9557022Ssklower 
9657022Ssklower #define FOR_ALL_PKCBS(p) for((p) = (struct pkcb *)(pkcb_q.q_forw); \
9757022Ssklower 			     (pkcb_q.q_forw != &pkcb_q) && ((struct pkcb_q *)(p) != &pkcb_q); \
9857022Ssklower 			     (p) = (struct pkcb *)((p) -> pk_q.q_forw))
9957022Ssklower 
10057022Ssklower #define	PQEMPTY		(pkcb_q.q_forw == &pkcb_q)
10157022Ssklower 
10242140Ssklower /*
10341935Ssklower  *	Interface address, x25 version. Exactly one of these structures is
10441935Ssklower  *	allocated for each interface with an x25 address.
10541935Ssklower  *
10641935Ssklower  *	The ifaddr structure conatins the protocol-independent part
10741935Ssklower  *	of the structure, and is assumed to be first.
10841595Ssklower  */
10941935Ssklower struct x25_ifaddr {
11041935Ssklower 	struct	ifaddr ia_ifa;		/* protocol-independent info */
11149935Ssklower #define ia_ifp	ia_ifa.ifa_ifp
11249935Ssklower #define	ia_flags ia_ifa.ifa_flags
11349935Ssklower 	struct	x25config ia_xc;	/* network specific configuration */
11457022Ssklower 	struct  pkcb *ia_pkcb;
11549935Ssklower #define ia_maxlcn ia_xc.xc_maxlcn
11649935Ssklower 	int	(*ia_start) ();		/* connect, confirm method */
11749935Ssklower 	struct	sockaddr_x25 ia_dstaddr; /* reserve space for route dst */
11841935Ssklower };
11941595Ssklower 
12041935Ssklower /*
12141935Ssklower  * ``Link-Level'' extension to Routing Entry for upper level
12241935Ssklower  * packet switching via X.25 virtual circuits.
12341935Ssklower  */
12445165Ssklower struct llinfo_x25 {
12545297Ssklower 	struct	llinfo_x25 *lx_next;	/* chain together in linked list */
12645297Ssklower 	struct	llinfo_x25 *lx_prev;	/* chain together in linked list */
12745297Ssklower 	struct	rtentry *lx_rt;		/* back pointer to route */
12845165Ssklower 	struct	pklcd *lx_lcd;		/* local connection block */
12945165Ssklower 	struct	x25_ifaddr *lx_ia;	/* may not be same as rt_ifa */
13045165Ssklower 	int	lx_state;		/* can't trust lcd->lcd_state */
13145165Ssklower 	int	lx_flags;
13245165Ssklower 	int	lx_timer;		/* for idle timeout */
13345297Ssklower 	int	lx_family;		/* for dispatch */
13441595Ssklower };
13541595Ssklower 
13645165Ssklower /* States for lx_state */
13745165Ssklower #define LXS_NEWBORN		0
13845165Ssklower #define LXS_RESOLVING		1
13945165Ssklower #define LXS_FREE		2
14049935Ssklower #define LXS_CONNECTING		3
14149935Ssklower #define LXS_CONNECTED		4
14245165Ssklower #define LXS_DISCONNECTING 	5
14345297Ssklower #define LXS_LISTENING 		6
14442140Ssklower 
14542140Ssklower /* flags */
14645165Ssklower #define LXF_VALID	0x1		/* Circuit is live, etc. */
14745165Ssklower #define LXF_RTHELD	0x2		/* this lcb references rtentry */
14845297Ssklower #define LXF_LISTEN	0x4		/* accepting incoming calls */
14942140Ssklower 
15049588Ssklower /*
15157022Ssklower  * Definitions for accessing bitfields/bitslices inside X.25 structs
15257022Ssklower  */
15357022Ssklower 
15457022Ssklower 
15557022Ssklower struct x25bitslice {
15657022Ssklower 	unsigned int bs_mask;
15757022Ssklower 	unsigned int bs_shift;
15857022Ssklower };
15957022Ssklower 
16057022Ssklower #define	calling_addrlen	0
16157022Ssklower #define	called_addrlen	1
16257022Ssklower #define	q_bit	        2
16357022Ssklower #define	d_bit           3
16457022Ssklower #define	fmt_identifier	4
16557022Ssklower #define	lc_group_number	1
16657022Ssklower #define	p_r             5
16757022Ssklower #define	m_bit           6
16857022Ssklower #define	p_s             7
16957022Ssklower #define	zilch           8
17057022Ssklower 
17157022Ssklower #define	X25GBITS(Arg, Index)	(((Arg) & x25_bitslice[(Index)].bs_mask) >> x25_bitslice[(Index)].bs_shift)
17257022Ssklower #define	X25SBITS(Arg, Index, Val)	(Arg) |= (((Val) << x25_bitslice[(Index)].bs_shift) & x25_bitslice[(Index)].bs_mask)
17357022Ssklower #define	X25CSBITS(Arg, Index, Val)	(Arg) = (((Val) << x25_bitslice[(Index)].bs_shift) & x25_bitslice[(Index)].bs_mask)
17457022Ssklower 
17557022Ssklower extern struct x25bitslice x25_bitslice[];
17657022Ssklower 
17757022Ssklower 
17857022Ssklower #define ISOFIFTTYPE(i,t) ((i)->if_type == (t))
17957022Ssklower #define ISISO8802(i) ((ISOFIFTTYPE(i, IFT_ETHER) || \
18057022Ssklower 		       ISOFIFTTYPE(i, IFT_ISO88023) || \
18157022Ssklower 		       ISOFIFTTYPE(i, IFT_ISO88024) || \
18257022Ssklower 		       ISOFIFTTYPE(i, IFT_ISO88025) || \
18357022Ssklower 		       ISOFIFTTYPE(i, IFT_ISO88026) || \
18457022Ssklower 		       ISOFIFTTYPE(i, IFT_P10) || \
18557022Ssklower 		       ISOFIFTTYPE(i, IFT_P80) || \
18657022Ssklower 		       ISOFIFTTYPE(i, IFT_FDDI)))
18757022Ssklower 
18857022Ssklower /*
18949588Ssklower  * miscellenous debugging info
19049588Ssklower  */
19149588Ssklower struct mbuf_cache {
19249588Ssklower 	int	mbc_size;
19349588Ssklower 	int	mbc_num;
19449588Ssklower 	int	mbc_oldsize;
19549588Ssklower 	struct	mbuf **mbc_cache;
19649588Ssklower };
19749588Ssklower 
19847265Ssklower #if defined(KERNEL) && defined(CCITT)
19957022Ssklower extern struct pkcb_q pkcb_q;
20041595Ssklower struct	pklcd *pk_listenhead;
20142277Ssklower struct	pklcd *pk_attach();
20241595Ssklower 
20347265Ssklower extern char	*pk_name[], *pk_state[];
20441595Ssklower int	pk_t20, pk_t21, pk_t22, pk_t23;
20541595Ssklower #endif
206