1*41595Ssklower /* Copyright (c) University of British Columbia, 1984 */ 2*41595Ssklower 3*41595Ssklower 4*41595Ssklower /* 5*41595Ssklower * 6*41595Ssklower * X.25 Logical Channel Descriptor 7*41595Ssklower * 8*41595Ssklower */ 9*41595Ssklower 10*41595Ssklower struct pklcd { 11*41595Ssklower short lcd_lcn; /* Logical channel number */ 12*41595Ssklower short lcd_state; /* Logical Channel state */ 13*41595Ssklower bool lcd_intrconf_pending; /* Interrupt confirmation pending */ 14*41595Ssklower octet lcd_intrdata; /* Octet of incoming intr data */ 15*41595Ssklower short lcd_timer; /* Various timer values */ 16*41595Ssklower char lcd_retry; /* Timer retry count */ 17*41595Ssklower char lcd_rsn; /* Seq no of last received packet */ 18*41595Ssklower char lcd_ssn; /* Seq no of next packet to send */ 19*41595Ssklower char lcd_output_window; /* Output flow control window */ 20*41595Ssklower char lcd_input_window; /* Input flow control window */ 21*41595Ssklower char lcd_last_transmitted_pr;/* Last Pr value transmitted */ 22*41595Ssklower bool lcd_rnr_condition; /* Remote in busy condition */ 23*41595Ssklower bool lcd_window_condition; /* Output window size exceeded */ 24*41595Ssklower bool lcd_reset_condition; /* True, if waiting reset confirm */ 25*41595Ssklower char lcd_packetsize; /* Maximum packet size */ 26*41595Ssklower char lcd_windowsize; /* Window size - both directions */ 27*41595Ssklower octet lcd_closed_user_group; /* Closed user group specification */ 28*41595Ssklower char lcd_flags; /* copy of sockaddr_x25 op_flags */ 29*41595Ssklower struct x25_packet *lcd_template;/* Address of current packet */ 30*41595Ssklower struct socket *lcd_so; /* Socket addr for connection */ 31*41595Ssklower struct sockaddr_x25 *lcd_craddr;/* Calling address */ 32*41595Ssklower struct sockaddr_x25 *lcd_ceaddr;/* Called address */ 33*41595Ssklower time_t lcd_stime; /* time circuit established */ 34*41595Ssklower long lcd_txcnt; /* Data packet transmit count */ 35*41595Ssklower long lcd_rxcnt; /* Data packet receive count */ 36*41595Ssklower short lcd_intrcnt; /* Interrupt packet transmit count */ 37*41595Ssklower struct pklcd *lcd_listen; /* Next lcd on listen queue */ 38*41595Ssklower struct pkcb *lcd_pkp; /* network this lcd is attached to */ 39*41595Ssklower }; 40*41595Ssklower 41*41595Ssklower /* 42*41595Ssklower * Per network information, allocated dynamically 43*41595Ssklower * when a new network is configured. 44*41595Ssklower */ 45*41595Ssklower 46*41595Ssklower struct pkcb { 47*41595Ssklower struct pkcb *pk_next; 48*41595Ssklower short pk_state; /* packet level status */ 49*41595Ssklower short pk_maxlcn; /* local copy of xc_maxlcn */ 50*41595Ssklower int (*pk_output) (); /* link level output procedure */ 51*41595Ssklower struct x25config *pk_xcp; /* network specific configuration */ 52*41595Ssklower struct pklcd *pk_chan[1]; /* actual size == xc_maxlcn+1 */ 53*41595Ssklower }; 54*41595Ssklower 55*41595Ssklower #ifdef KERNEL 56*41595Ssklower struct pkcb *pkcbhead; /* head of linked list of networks */ 57*41595Ssklower struct pklcd *pk_listenhead; 58*41595Ssklower 59*41595Ssklower char *pk_name[], *pk_state[]; 60*41595Ssklower int pk_t20, pk_t21, pk_t22, pk_t23; 61*41595Ssklower #endif 62