home *** CD-ROM | disk | FTP | other *** search
- #include "Terminal.h"
-
- /* Upper sub-layer (LAPB) definitions */
-
- /* Control field templates */
- #define I 0x00 /* Information frames */
- #define S 0x01 /* Supervisory frames */
- #define RR 0x01 /* Receiver ready */
- #define RNR 0x05 /* Receiver not ready */
- #define REJ 0x09 /* Reject */
- #define U 0x03 /* Unnumbered frames */
- #define SABM 0x2f /* Set Asynchronous Balanced Mode */
- #define DISC 0x43 /* Disconnect */
- #define DM 0x0f /* Disconnected mode */
- #define UA 0x63 /* Unnumbered acknowledge */
- #define FRMR 0x87 /* Frame reject */
- #define UI 0x03 /* Unnumbered information */
- #define PF 0x10 /* Poll/final bit */
-
- #define MMASK 7 /* Mask for modulo-8 sequence numbers */
-
- /* FRMR reason bits */
- #define W 1 /* Invalid control field */
- #define X 2 /* Unallowed I-field */
- #define Y 4 /* Too-long I-field */
- #define Z 8 /* Invalid sequence number */
-
- /* Per-connection link control block
- * These are created and destroyed dynamically,
- * and are indexed through a hash table.
- * One exists for each logical AX.25 Level 2 connection
- */
- struct ax25_cb {
- struct ax25_cb *next; /* Doubly linked list pointers */
- struct ax25_cb *prev;
-
- struct mbuf *txq; /* Transmit queue */
-
- struct mbuf *rxasm; /* Receive reassembly buffer */
- struct mbuf *rxq; /* Receive queue */
-
- struct ax25 addr; /* Address header */
-
- struct interface *interface; /* Associated interface */
-
- char rejsent; /* REJ frame has been sent */
- char remotebusy; /* Remote sent RNR */
- char response; /* Response owed to other end */
-
- char vs; /* Our send state variable */
- char vr; /* Our receive state variable */
- char unack; /* Number of unacked frames */
- int maxframe; /* Transmit flow control level */
- int16 paclen; /* Maximum outbound packet size */
- int16 window; /* Local flow control limit */
- char proto; /* Protocol version */
- #define V1 1 /* AX.25 Version 1 */
- #define V2 2 /* AX.25 Version 2 */
- int16 pthresh; /* Poll threshold */
- unsigned retries; /* Retry counter */
- unsigned n2; /* Retry limit */
- int state; /* Link state */
- #define DISCONNECTED 0
- #define SETUP 1
- #define DISCPENDING 2
- #define CONNECTED 3
- #define RECOVERY 4
- #define FRAMEREJECT 5
- char frmrinfo[3]; /* I-field for FRMR message */
- struct timer t1; /* Retry timer */
- struct timer t2; /* Acknowledgement delay timer */
- struct timer t3; /* Keep-alive poll timer */
- struct timer t4; /* Link redundancy timer */
-
- void (*r_upcall)(); /* Receiver upcall */
- void (*t_upcall)(); /* Transmit upcall */
- void (*s_upcall)(); /* State change upcall */
- char *user; /* User pointer */
- int segremain;
- char segpid;
- struct session *session; /* Pointer to session structure */
- Terminal *terminal;
- };
- #define NULLAX25 ((struct ax25_cb *)0)
- extern struct ax25_cb *ax25_cb[];
- #define NHASH 17
-
- #define YES 1
- #define NO 0
- int sendframe(struct ax25_cb *, char, char, struct mbuf *);
-
- /* In LAPB */
- int lapb_input(struct ax25_cb *, char, struct mbuf *);
- void est_link(struct ax25_cb *);
- void clr_ex(struct ax25_cb *);
- void enq_resp(struct ax25_cb *);
- void inv_rex(struct ax25_cb *);
- int frmr(struct ax25_cb *, char, char);
- int sendctl(struct ax25_cb *, char, char);
- int lapb_output(struct ax25_cb *);
- void lapbstate(struct ax25_cb *, int);
- void ax_incom(struct ax25_cb *, int16);
- void ax_session(struct ax25_cb *, int16);
- void ax_rx(struct ax25_cb *, int16);
- void ax_tx(struct ax25_cb *, int16);
- void ax_state(struct ax25_cb *, int, int);
- struct ax25_cb *open_ax25(struct ax25 *, int16, void (*)(),
- void (*)(), void (*)(), struct interface *, char *);
-
- /* In LAPBTIME */
- void recover(int *);
- void send_ack(int *);
- void pollthem(int *);
- void redundant(int *);
- void tx_enq(struct ax25_cb *);
-
- /* In LCSUM */
- int16 lcsum(int16 *, int16);
-