home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / internet / tcpipsrc / h / if / lapb < prev    next >
Text File  |  1994-06-06  |  5KB  |  119 lines

  1. #include "Terminal.h"
  2.  
  3. /* Upper sub-layer (LAPB) definitions */
  4.  
  5. /* Control field templates */
  6. #define I       0x00    /* Information frames */
  7. #define S       0x01    /* Supervisory frames */
  8. #define RR      0x01    /* Receiver ready */
  9. #define RNR     0x05    /* Receiver not ready */
  10. #define REJ     0x09    /* Reject */
  11. #define U       0x03    /* Unnumbered frames */
  12. #define SABM    0x2f    /* Set Asynchronous Balanced Mode */
  13. #define DISC    0x43    /* Disconnect */
  14. #define DM      0x0f    /* Disconnected mode */
  15. #define UA      0x63    /* Unnumbered acknowledge */
  16. #define FRMR    0x87    /* Frame reject */
  17. #define UI      0x03    /* Unnumbered information */
  18. #define PF      0x10    /* Poll/final bit */
  19.  
  20. #define MMASK   7       /* Mask for modulo-8 sequence numbers */
  21.  
  22. /* FRMR reason bits */
  23. #define W       1       /* Invalid control field */
  24. #define X       2       /* Unallowed I-field */
  25. #define Y       4       /* Too-long I-field */
  26. #define Z       8       /* Invalid sequence number */
  27.  
  28. /* Per-connection link control block
  29.  * These are created and destroyed dynamically,
  30.  * and are indexed through a hash table.
  31.  * One exists for each logical AX.25 Level 2 connection
  32.  */
  33. struct ax25_cb {
  34.         struct ax25_cb *next;           /* Doubly linked list pointers */
  35.         struct ax25_cb *prev;
  36.  
  37.         struct mbuf *txq;               /* Transmit queue */
  38.  
  39.         struct mbuf *rxasm;             /* Receive reassembly buffer */
  40.         struct mbuf *rxq;               /* Receive queue */
  41.  
  42.         struct ax25 addr;               /* Address header */
  43.  
  44.         struct interface *interface;    /* Associated interface */
  45.  
  46.         char rejsent;                   /* REJ frame has been sent */
  47.         char remotebusy;                /* Remote sent RNR */
  48.         char response;                  /* Response owed to other end */
  49.  
  50.         char vs;                        /* Our send state variable */
  51.         char vr;                        /* Our receive state variable */
  52.         char unack;                     /* Number of unacked frames */
  53.         int maxframe;                   /* Transmit flow control level */
  54.         int16 paclen;                   /* Maximum outbound packet size */
  55.         int16 window;                   /* Local flow control limit */
  56.         char proto;                     /* Protocol version */
  57. #define V1      1                       /* AX.25 Version 1 */
  58. #define V2      2                       /* AX.25 Version 2 */
  59.         int16   pthresh;                /* Poll threshold */
  60.         unsigned retries;               /* Retry counter */
  61.         unsigned n2;                    /* Retry limit */
  62.         int state;                      /* Link state */
  63. #define DISCONNECTED    0
  64. #define SETUP           1
  65. #define DISCPENDING     2
  66. #define CONNECTED       3
  67. #define RECOVERY        4
  68. #define FRAMEREJECT     5
  69.         char frmrinfo[3];               /* I-field for FRMR message */
  70.         struct timer t1;                /* Retry timer */
  71.         struct timer t2;                /* Acknowledgement delay timer */
  72.         struct timer t3;                /* Keep-alive poll timer */
  73.         struct timer t4;                /* Link redundancy timer */
  74.  
  75.         void (*r_upcall)();             /* Receiver upcall */
  76.         void (*t_upcall)();             /* Transmit upcall */
  77.         void (*s_upcall)();             /* State change upcall */
  78.         char *user;                     /* User pointer */
  79.         int  segremain;
  80.         char segpid;
  81.         struct session *session;        /* Pointer to session structure */
  82.         Terminal *terminal;
  83. };
  84. #define NULLAX25        ((struct ax25_cb *)0)
  85. extern struct ax25_cb *ax25_cb[];
  86. #define NHASH   17
  87.  
  88. #define YES     1
  89. #define NO      0
  90. int  sendframe(struct ax25_cb *, char, char, struct mbuf *);
  91.  
  92. /* In LAPB */
  93. int  lapb_input(struct ax25_cb *, char, struct mbuf *);
  94. void est_link(struct ax25_cb *);
  95. void clr_ex(struct ax25_cb *);
  96. void enq_resp(struct ax25_cb *);
  97. void inv_rex(struct ax25_cb *);
  98. int  frmr(struct ax25_cb *, char, char);
  99. int  sendctl(struct ax25_cb *, char, char);
  100. int  lapb_output(struct ax25_cb *);
  101. void lapbstate(struct ax25_cb *, int);
  102. void ax_incom(struct ax25_cb *, int16);
  103. void ax_session(struct ax25_cb *, int16);
  104. void ax_rx(struct ax25_cb *, int16);
  105. void ax_tx(struct ax25_cb *, int16);
  106. void ax_state(struct ax25_cb *, int, int);
  107. struct ax25_cb *open_ax25(struct ax25 *, int16, void (*)(),
  108.                           void (*)(), void (*)(), struct interface *, char *);
  109.  
  110. /* In LAPBTIME */
  111. void recover(int *);
  112. void send_ack(int *);
  113. void pollthem(int *);
  114. void redundant(int *);
  115. void tx_enq(struct ax25_cb *);
  116.  
  117. /* In LCSUM */
  118. int16 lcsum(int16 *, int16);
  119.