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

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _AX25_H
  2. #define _AX25_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 _SOCKADDR_H
  13. #include "sockaddr.h"
  14. #endif
  15. extern char Ax25_eol[];
  16. /* AX.25 datagram (address) sub-layer definitions */
  17. #define MAXDIGIS 7 /* Maximum number of digipeaters */
  18. #define ALEN 6 /* Number of chars in callsign field */
  19. #define AXALEN 7 /* Total AX.25 address length, including SSID */
  20. #define AXBUF 10 /* Buffer size for maximum-length ascii call */
  21. /* Bits within SSID field of AX.25 address */
  22. #define SSID 0x1e /* Sub station ID */
  23. #define REPEATED 0x80 /* Has-been-repeated bit in repeater field */
  24. #define E 0x01 /* Address extension bit */
  25. #define C 0x80 /* Command/response designation */
  26. /* Our AX.25 address */
  27. extern uint8 Mycall[AXALEN];
  28. /* List of AX.25 multicast addresses, e.g., "QST   -0" in shifted ASCII */
  29. extern uint8 Ax25multi[][AXALEN];
  30. extern int Digipeat;
  31. extern int Ax25mbox;
  32. /* Number of chars in interface field. The involved definition takes possible
  33.  * alignment requirements into account, since ax25_addr is of an odd size.
  34.  */
  35. #define ILEN (sizeof(struct sockaddr) - sizeof(short) - AXALEN)
  36. /* Socket address, AX.25 style */
  37. struct sockaddr_ax {
  38. short sax_family; /* 2 bytes */
  39. uint8 ax25_addr[AXALEN];
  40. char iface[ILEN]; /* Interface name */
  41. };
  42. /* Internal representation of an AX.25 header */
  43. struct ax25 {
  44. uint8 dest[AXALEN]; /* Destination address */
  45. uint8 source[AXALEN]; /* Source address */
  46. uint8 digis[MAXDIGIS][AXALEN]; /* Digi string */
  47. int ndigis; /* Number of digipeaters */
  48. int nextdigi; /* Index to next digi in chain */
  49. enum {
  50. LAPB_UNKNOWN,
  51. LAPB_COMMAND,
  52. LAPB_RESPONSE
  53. } cmdrsp; /* Command/response */
  54. };
  55. /* AX.25 routing table entry */
  56. struct ax_route {
  57. struct ax_route *next; /* Linked list pointer */
  58. uint8 target[AXALEN];
  59. uint8 digis[MAXDIGIS][AXALEN];
  60. int ndigis;
  61. enum {
  62. AX_LOCAL, /* Set by local ax25 route command */
  63. AX_AUTO /* Set by incoming packet */
  64. } type;
  65. };
  66. extern struct ax_route *Ax_routes;
  67. extern struct ax_route Ax_default;
  68. /* AX.25 Level 3 Protocol IDs (PIDs) */
  69. #define PID_X25 0x01 /* CCITT X.25 PLP */
  70. #define PID_SEGMENT 0x08 /* Segmentation fragment */
  71. #define PID_TEXNET 0xc3 /* TEXNET datagram protocol */
  72. #define PID_LQ 0xc4 /* Link quality protocol */
  73. #define PID_APPLETALK 0xca /* Appletalk */
  74. #define PID_APPLEARP 0xcb /* Appletalk ARP */
  75. #define PID_IP 0xcc /* ARPA Internet Protocol */
  76. #define PID_ARP 0xcd /* ARPA Address Resolution Protocol */
  77. #define PID_NETROM 0xcf /* NET/ROM */
  78. #define PID_NO_L3 0xf0 /* No level 3 protocol */
  79. /* Link quality report packet header, internal format */
  80. struct lqhdr {
  81. uint16 version; /* Version number of protocol */
  82. #define LINKVERS 1
  83. int32 ip_addr; /* Sending station's IP address */
  84. };
  85. #define LQHDR 6
  86. /* Link quality entry, internal format */
  87. struct lqentry {
  88. uint8 addr[AXALEN]; /* Address of heard station */
  89. int32 count; /* Count of packets heard from that station */
  90. };
  91. #define LQENTRY 11
  92. /* Link quality database record format
  93.  * Currently used only by AX.25 interfaces
  94.  */
  95. struct lq {
  96. struct lq *next;
  97. uint8 addr[AXALEN]; /* Hardware address of station heard */
  98. struct iface *iface; /* Interface address was heard on */
  99. int32 time; /* Time station was last heard */
  100. int32 currxcnt; /* Current # of packets heard from this station */
  101. #ifdef notdef /* Not yet implemented */
  102. /* # of packets heard from this station as of his last update */
  103. int32 lastrxcnt;
  104. /* # packets reported as transmitted by station as of his last update */
  105. int32 lasttxcnt;
  106. uint16 hisqual; /* Fraction (0-1000) of station's packets heard
  107.  * as of last update
  108.  */
  109. uint16 myqual; /* Fraction (0-1000) of our packets heard by station
  110.  * as of last update
  111.  */
  112. #endif
  113. };
  114. extern struct lq *Lq; /* Link quality record headers */
  115. /* Structure used to keep track of monitored destination addresses */
  116. struct ld {
  117. struct ld *next; /* Linked list pointers */
  118. uint8 addr[AXALEN];/* Hardware address of destination overheard */
  119. struct iface *iface; /* Interface address was heard on */
  120. int32 time; /* Time station was last mentioned */
  121. int32 currxcnt; /* Current # of packets destined to this station */
  122. };
  123. extern struct ld *Ld; /* Destination address record headers */
  124. /* In ax25.c: */
  125. struct ax_route *ax_add(uint8 *,int,uint8 digis[][AXALEN],int);
  126. int ax_drop(uint8 *);
  127. struct ax_route *ax_lookup(uint8 *);
  128. void ax_recv(struct iface *,struct mbuf **);
  129. int axui_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos);
  130. int axi_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos);
  131. int ax_output(struct iface *iface,uint8 *dest,uint8 *source,uint16 pid,
  132. struct mbuf **data);
  133. int axsend(struct iface *iface,uint8 *dest,uint8 *source,
  134. int cmdrsp,int ctl,struct mbuf **data);
  135. /* In axhdr.c: */
  136. void htonax25(struct ax25 *hdr,struct mbuf **data);
  137. int ntohax25(struct ax25 *hdr,struct mbuf **bpp);
  138. /* In axlink.c: */
  139. void getlqentry(struct lqentry *ep,struct mbuf **bpp);
  140. void getlqhdr(struct lqhdr *hp,struct mbuf **bpp);
  141. void logsrc(struct iface *iface,uint8 *addr);
  142. void logdest(struct iface *iface,uint8 *addr);
  143. char *putlqentry(char *cp,uint8 *addr,int32 count);
  144. char *putlqhdr(char *cp,uint16 version,int32 ip_addr);
  145. struct lq *al_lookup(struct iface *ifp,uint8 *addr,int sort);
  146. /* In ax25subr.c: */
  147. int addreq(uint8 *a,uint8 *b);
  148. char *pax25(char *e,uint8 *addr);
  149. int setcall(uint8 *out,char *call);
  150. void beac_input(struct iface *iface,uint8 *src,struct mbuf **bpp);
  151. #endif  /* _AX25_H */