1 
2 /*
3  * Kernel variables for NSP
4  */
5 
6 typedef	short nsp_seq;
7 
8 /*
9  * NSP control block, ala Session Control Port,
10  * p. 41-44, NSP spec.
11  */
12 struct nspcb {
13 	struct	nspcb *n_next, *n_prev;	/* list of all NSP cb's */
14 	struct	nspcb *n_head;		/* pointer to head of list */
15 	struct	nspq *nq_next, *nq_prev;	/* retransmit queue */
16 /* NEED STUFF FOR INPUT REASSEMBLY */
17 	struct	socket *n_socket;	/* back pointer to socket */
18 	char	n_state;	/* state of the port */
19 	char	n_flags;	/* flags, see below */
20 	short	n_retrans;	/* count of message retransmissions */
21 	short	n_segsize;	/* transmit segment size */
22 	u_short	n_node;		/* remote node address */
23 	u_short	n_loc;		/* local link address */
24 	u_short	n_rem;		/* remote link address */
25 /* timer variables */
26 	u_short	nt_dat;		/* timeout for data segments */
27 	u_short	nt_oth;		/* timeout for other data */
28 	u_short	nt_con;		/* timeout for connect, disconnect */
29 /* sequence variables */
30 	nsp_seq	nn_dat;		/* number of next data segment to transmit */
31 	nsp_seq nn_oth;		/* number of next other data segment */
32 	nsp_seq	nn_high;	/* highest numbered data segment queued */
33 /* error control variables */
34 	nsp_seq	na_xmtdat;	/* number of last data segment we acked */
35 	nsp_seq	na_xmtoth;	/* number of last other data we acked */
36 	nsp_seq	na_rcvdat;	/* number of highest data segment ack rcv'ed */
37 /* flow control variables */
38 	char	nf_locdat;	/* data request count */
39 	char	nf_locint;	/* flow control state for receiving intr data */
40 	char	nf_remdat;	/* data request count from remote */
41 	char	nf_remint;	/* interrupt request count from remote */
42 /* buffers for optional data */
43 	u_short	nb_src;		/* source node addr for rcv CI */
44 	struct	mbuf *nb_con;	/* data for rcv or xmt CI */
45 	struct	mbuf *nb_xmt;	/* data for xmt CC, DI, Intr */
46 	struct	mbuf *nb_rcv;	/* data for rcv CC, DI, Intr */
47 };
48 
49 #define	sotonspcb(so)	((struct nspcb *)(so)->so_pcb)
50 
51 /* port states, p. 34-36 */
52 #define	NS_O		0	/* open */
53 #define	NS_CR		1	/* connect received */
54 #define	NS_DR		2	/* disconnect reject */
55 #define	NS_DRC		3	/* disconnect reject complete */
56 #define	NS_CC		4	/* connect confirm */
57 #define	NS_CI		5	/* connect initiate */
58 #define	NS_NR		6	/* no resources */
59 #define	NS_NC		7	/* no communication */
60 #define	NS_CD		8	/* connect delivered */
61 #define	NS_RJ		9	/* rejected */
62 #define	NS_RUN		10	/* running */
63 #define	NS_DI		11	/* disconnect initiate */
64 #define	NS_DIC		12	/* disconnect complete */
65 #define	NS_DN		13	/* disconnect notification */
66 #define	NS_CL		14	/* closed */
67 #define	NS_CN		15	/* closed notification */
68 #define	NS_LI		16	/* listen for connection */
69 
70 /* flags */
71 #define	NF_DATACK	0001	/* data acknowledgement required */
72 #define	NF_OTHACK	0002	/* other data acknowledgement required */
73 #define	NF_CON		0004	/* connect data available */
74 #define	NF_INTAVAIL	0010	/* transmit interrupt data available */
75 #define	NF_OTHSENT	0020	/* other data message has been sent */
76 #define	NF_OTHINTR	0040	/* other data message was an interrupt msg */
77 #define	NF_DATOFF	0100	/* on/off switch for data flow control */
78 
79 /* locint states */
80 /* I STILL DON'T UNDERSTAND THIS WELL ENOUGH */
81 #define	NFL_EMPTY	0
82 #define	NFL_INTR	1
83 #define	NFL_SEND	2
84