lapb.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:6k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _LAPB_H
  2. #define _LAPB_H
  3. #ifndef _GLOBAL_H
  4. #include "global.h"
  5. #endif
  6. #ifndef _MBUF_H
  7. #include "mbuf.h"
  8. #endif
  9. #ifndef _IFACE_H
  10. #include "iface.h"
  11. #endif
  12. #ifndef _TIMER_H
  13. #include "timer.h"
  14. #endif
  15. #ifndef _AX25_H
  16. #include "ax25.h"
  17. #endif
  18. /* Upper sub-layer (LAPB) definitions */
  19. /* Control field templates */
  20. #define I 0x00 /* Information frames */
  21. #define S 0x01 /* Supervisory frames */
  22. #define RR 0x01 /* Receiver ready */
  23. #define RNR 0x05 /* Receiver not ready */
  24. #define REJ 0x09 /* Reject */
  25. #define U 0x03 /* Unnumbered frames */
  26. #define SABM 0x2f /* Set Asynchronous Balanced Mode */
  27. #define DISC 0x43 /* Disconnect */
  28. #define DM 0x0f /* Disconnected mode */
  29. #define UA 0x63 /* Unnumbered acknowledge */
  30. #define FRMR 0x87 /* Frame reject */
  31. #define UI 0x03 /* Unnumbered information */
  32. #define PF 0x10 /* Poll/final bit */
  33. #define MMASK 7 /* Mask for modulo-8 sequence numbers */
  34. /* FRMR reason bits */
  35. #define W 1 /* Invalid control field */
  36. #define X 2 /* Unallowed I-field */
  37. #define Y 4 /* Too-long I-field */
  38. #define Z 8 /* Invalid sequence number */
  39. #define SEG_FIRST 0x80 /* First segment of a sequence */
  40. #define SEG_REM 0x7f /* Mask for # segments remaining */
  41. /* Per-connection link control block
  42.  * These are created and destroyed dynamically,
  43.  * and are indexed through a hash table.
  44.  * One exists for each logical AX.25 Level 2 connection
  45.  */
  46. struct ax25_cb {
  47. struct ax25_cb *next; /* Linked list pointer */
  48. struct iface *iface; /* Interface */
  49. struct mbuf *txq; /* Transmit queue */
  50. struct mbuf *rxasm; /* Receive reassembly buffer */
  51. struct mbuf *rxq; /* Receive queue */
  52. uint8 local[AXALEN]; /* Addresses */
  53. uint8 remote[AXALEN];
  54. struct {
  55. unsigned int rejsent:1; /* REJ frame has been sent */
  56. unsigned int remotebusy:1; /* Remote sent RNR */
  57. unsigned int rtt_run:1; /* Round trip "timer" is running */
  58. unsigned int retrans:1; /* A retransmission has occurred */
  59. unsigned int clone:1; /* Server-type cb, will be cloned */
  60. } flags;
  61. uint8 reason; /* Reason for connection closing */
  62. #define LB_NORMAL 0 /* Normal close */
  63. #define LB_DM 1 /* Received DM from other end */
  64. #define LB_TIMEOUT 2 /* Excessive retries */
  65. uint8 response; /* Response owed to other end */
  66. uint8 vs; /* Our send state variable */
  67. uint8 vr; /* Our receive state variable */
  68. uint8 unack; /* Number of unacked frames */
  69. int maxframe; /* Transmit flow control level, frames */
  70. uint16 paclen; /* Maximum outbound packet size, bytes */
  71. uint16 window; /* Local flow control limit, bytes */
  72. enum {
  73. V1=1, /* AX.25 Version 1 */
  74. V2 /* AX.25 Version 2 */
  75. } proto; /* Protocol version */
  76. uint16 pthresh; /* Poll threshold, bytes */
  77. unsigned retries; /* Retry counter */
  78. unsigned n2; /* Retry limit */
  79. enum {
  80. LAPB_DISCONNECTED=1,
  81. LAPB_LISTEN,
  82. LAPB_SETUP,
  83. LAPB_DISCPENDING,
  84. LAPB_CONNECTED,
  85. LAPB_RECOVERY
  86. } state; /* Link state */
  87. struct timer t1; /* Retry timer */
  88. struct timer t3; /* Keep-alive poll timer */
  89. int32 rtt_time; /* Stored clock values for RTT, ticks */
  90. int rtt_seq; /* Sequence number being timed */
  91. int32 srt; /* Smoothed round-trip time, ms */
  92. int32 mdev; /* Mean rtt deviation, ms */
  93. void (*r_upcall)(struct ax25_cb *,int); /* Receiver upcall */
  94. void (*t_upcall)(struct ax25_cb *,int); /* Transmit upcall */
  95. void (*s_upcall)(struct ax25_cb *,int,int); /* State change upcall */
  96. int user; /* User pointer */
  97. int segremain; /* Segmenter state */
  98. };
  99. /* Linkage to network protocols atop ax25 */
  100. struct axlink {
  101. int pid;
  102. void (*funct)(struct iface *,struct ax25_cb *,uint8 *, uint8 *,
  103.  struct mbuf **,int);
  104. };
  105. extern struct axlink Axlink[];
  106. /* Codes for the open_ax25 call */
  107. #define AX_PASSIVE 0
  108. #define AX_ACTIVE 1
  109. #define AX_SERVER 2 /* Passive, clone on opening */
  110. extern struct ax25_cb Ax25default,*Ax25_cb;
  111. extern char *Ax25states[],*Axreasons[];
  112. extern int32 Axirtt,T3init,Blimit;
  113. extern uint16 N2,Maxframe,Paclen,Pthresh,Axwindow,Axversion;
  114. /* In ax25cmd.c: */
  115. void st_ax25(struct ax25_cb *axp);
  116. /* In ax25subr.c: */
  117. struct ax25_cb *cr_ax25(uint8 *addr);
  118. void del_ax25(struct ax25_cb *axp);
  119. struct ax25_cb *find_ax25(uint8 *);
  120. /* In ax25user.c: */
  121. int ax25val(struct ax25_cb *axp);
  122. int disc_ax25(struct ax25_cb *axp);
  123. int kick_ax25(struct ax25_cb *axp);
  124. struct ax25_cb *open_ax25(struct iface *,uint8 *,uint8 *,
  125. int,uint16,
  126. void (*)(struct ax25_cb *,int),
  127. void (*)(struct ax25_cb *,int),
  128. void (*)(struct ax25_cb *,int,int),
  129. int user);
  130. struct mbuf *recv_ax25(struct ax25_cb *axp,uint16 cnt);
  131. int reset_ax25(struct ax25_cb *axp);
  132. int send_ax25(struct ax25_cb *axp,struct mbuf **bp,int pid);
  133. /* In lapb.c: */
  134. void est_link(struct ax25_cb *axp);
  135. void lapbstate(struct ax25_cb *axp,int s);
  136. int lapb_input(struct ax25_cb *axp,int cmdrsp,struct mbuf **bp);
  137. int lapb_output(struct ax25_cb *axp);
  138. struct mbuf *segmenter(struct mbuf **bp,uint16 ssize);
  139. int sendctl(struct ax25_cb *axp,int cmdrsp,int cmd);
  140. int sendframe(struct ax25_cb *axp,int cmdrsp,int ctl,struct mbuf **data);
  141. void axnl3(struct iface *iface,struct ax25_cb *axp,uint8 *src,
  142. uint8 *dest,struct mbuf **bp,int mcast);
  143. /* In lapbtimer.c: */
  144. void pollthem(void *p);
  145. void recover(void *p);
  146. /* In ax25subr.c: */
  147. uint16 ftype(int control);
  148. void lapb_garbage(int drastic);
  149. /* In axsock.c: */
  150. void s_arcall(struct ax25_cb *axp,int cnt);
  151. void s_ascall(struct ax25_cb *axp,int old,int new);
  152. void s_atcall(struct ax25_cb *axp,int cnt);
  153. #endif /* _LAPB_H */