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

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _NETROM_H
  2. #define _NETROM_H
  3. #ifndef _MBUF_H
  4. #include "mbuf.h"
  5. #endif
  6. #ifndef _IFACE_H
  7. #include "iface.h"
  8. #endif
  9. #ifndef _AX25_H
  10. #include "ax25.h"
  11. #endif
  12. #ifndef _LAPB_H
  13. #include "lapb.h"
  14. #endif
  15. #ifndef _NR4_H
  16. #include "nr4.h"
  17. #endif
  18. /* net/rom support definitions
  19.  * Copyright 1989 by Daniel M. Frank, W9NK.  Permission granted for
  20.  * non-commercial distribution only.
  21.  */
  22. #define NR3HLEN 15 /* length of a net/rom level 3 hdr, */
  23. #define NR3DLEN 241 /* max data size in net/rom l3 packet */
  24. #define NR3NODESIG 0xff /* signature for nodes broadcast */
  25. #define NR3NODEHL 7 /* nodes bc header length */
  26. #define NRNUMIFACE 10 /* number of interfaces associated */
  27. /* with net/rom network layer      */
  28. #define NRNUMCHAINS 17 /* number of chains in the */
  29. /* neighbor and route hash tables */
  30. #define NRRTDESTLEN 21 /* length of destination entry in */
  31. /* nodes broadcast */
  32. #define NRDESTPERPACK 11 /* maximum number of destinations per */
  33. /* nodes packet */
  34. /* NET/ROM protocol numbers */
  35. #define NRPROTO_IP 0x0c
  36. /* Internal representation of net/rom network layer header */
  37. struct nr3hdr {
  38. uint8 source[AXALEN] ; /* callsign of origin node */
  39. uint8 dest[AXALEN] ; /* callsign of destination node */
  40. unsigned ttl ; /* time-to-live */
  41. } ;
  42. /* Internal representation of net/rom routing broadcast destination */
  43. /* entry */
  44. struct nr3dest {
  45. uint8 dest[AXALEN] ; /* destination callsign */
  46. char alias[AXALEN] ; /* ident, upper case ASCII, blank-filled */
  47. uint8 neighbor[AXALEN] ; /* best-quality neighbor */
  48. unsigned quality ; /* quality of route for this neighbor */
  49. } ;
  50. /* net/rom interface table entry */
  51. struct nriface {
  52. struct iface *iface ; /* pointer to ax.25 interface */
  53. char alias[AXALEN] ; /* alias for this interface's node */
  54. /* broadcasts */
  55. unsigned quality ; /* net/rom link quality estimate */
  56. } ;
  57. /* net/rom neighbor table structure */
  58. struct nrnbr_tab {
  59. struct nrnbr_tab *next ; /* doubly linked list pointers */
  60. struct nrnbr_tab *prev ;
  61. uint8 call[AXALEN] ; /* call of neighbor + 2 digis max */
  62. unsigned iface ; /* offset of neighbor's port in */
  63. /* interface table */
  64. unsigned refcnt ; /* how many routes for this neighbor? */
  65. } ;
  66. /* A list of these structures is provided for each route table */
  67. /* entry.  They bind a destination to a neighbor node.  If the */
  68. /* list of bindings becomes empty, the route table entry is    */
  69. /* automatically deleted.    */
  70. struct nr_bind {
  71. struct nr_bind *next ; /* doubly linked list */
  72. struct nr_bind *prev ;
  73. unsigned quality ; /* quality estimate */
  74. unsigned obsocnt ; /* obsolescence count */
  75. unsigned flags ;
  76. #define NRB_PERMANENT 0x01 /* entry never times out */
  77. #define NRB_RECORDED 0x02 /* a "record route" entry */
  78. struct nrnbr_tab *via ; /* route goes via this neighbor */
  79. } ;
  80. /* net/rom routing table entry */
  81. struct nrroute_tab {
  82. struct nrroute_tab *next ; /* doubly linked list pointers */
  83. struct nrroute_tab *prev ;
  84. char alias[AXALEN] ; /* alias of node */
  85. uint8 call[AXALEN] ; /* callsign of node */
  86. unsigned num_routes ; /* how many routes in bindings list? */
  87. struct nr_bind *routes ; /* list of neighbors */
  88. } ;
  89. /* The net/rom nodes broadcast filter structure */
  90. struct nrnf_tab {
  91. struct nrnf_tab *next ; /* doubly linked list */
  92. struct nrnf_tab *prev ;
  93. uint8 neighbor[AXALEN] ; /* call of neighbor to filter */
  94. unsigned iface ; /* filter on this interface */
  95. } ;
  96. /* Structure for handling raw NET/ROM user sockets */
  97. struct raw_nr {
  98. struct raw_nr *prev;
  99. struct raw_nr *next;
  100. struct mbuf *rcvq; /* receive queue */
  101. uint8 protocol; /* Protocol */
  102. };
  103. /* The interface table */
  104. extern struct nriface Nrifaces[NRNUMIFACE] ;
  105. /* How many interfaces are in use */
  106. extern unsigned Nr_numiface ;
  107. /* The neighbor hash table (hashed on neighbor callsign) */
  108. extern struct nrnbr_tab *Nrnbr_tab[NRNUMCHAINS] ;
  109. /* The routes hash table (hashed on destination callsign) */
  110. extern struct nrroute_tab *Nrroute_tab[NRNUMCHAINS] ;
  111. /* The nodes broadcast filter table */
  112. extern struct nrnf_tab *Nrnf_tab[NRNUMCHAINS] ;
  113. extern uint8 Nr_nodebc[AXALEN];
  114. /* filter modes: */
  115. #define NRNF_NOFILTER 0 /* don't filter */
  116. #define NRNF_ACCEPT 1 /* accept broadcasts from stations in list */
  117. #define NRNF_REJECT 2 /* reject broadcasts from stations in list */
  118. /* The filter mode */
  119. extern unsigned Nr_nfmode ;
  120. /* The time-to-live for net/rom network layer packets */
  121. extern unsigned short Nr_ttl ;
  122. /* The obsolescence count initializer */
  123. extern unsigned Obso_init ;
  124. /* The threshhold at which routes becoming obsolete are not broadcast */
  125. extern unsigned Obso_minbc ;
  126. /* The quality threshhold below which routes in a broadcast will */
  127. /* be ignored */
  128. extern unsigned Nr_autofloor ;
  129. /* Whether we want to broadcast the contents of our routing
  130.  * table, or just our own callsign and alias:
  131.  */
  132. extern int Nr_verbose ;
  133. /* The maximum number of routes maintained for a destination. */
  134. /* If the list fills up, only the highest quality routes are  */
  135. /* kept.  This limiting is done to avoid possible over-use of */
  136. /* memory for routing tables in closely spaced net/rom networks. */
  137. extern unsigned Nr_maxroutes ;
  138. /* The netrom pseudo-interface */
  139. extern struct iface *Nr_iface ;
  140. /* Functions */
  141. /* In nr3.c: */
  142. void del_rnr(struct raw_nr *rpp);
  143. uint8 *find_nralias(char *);
  144. struct nrroute_tab *find_nrroute(uint8 *);
  145. void nr_bcnodes(unsigned ifno);
  146. void nr_nodercv(struct iface *iface,uint8 *source,struct mbuf **bpp);
  147. int nr_nfadd(uint8 *, unsigned);
  148. int nr_nfdrop(uint8 *, unsigned);
  149. void nr_route(struct mbuf **bp,struct ax25_cb *iaxp);
  150. int nr_routeadd(char *, uint8 *, unsigned,
  151. unsigned, uint8 *, unsigned, unsigned);
  152. int nr_routedrop(uint8 *, uint8 *, unsigned);
  153. int nr_send(struct mbuf **bp,struct iface *iface,int32 gateway,uint8 tos);
  154. void nr_sendraw(uint8 *dest,unsigned family,unsigned proto,
  155. struct mbuf **data);
  156. void nr3output(uint8 *dest,struct mbuf **data);
  157. uint16 nrhash(uint8 *s);
  158. struct raw_nr *raw_nr(uint8);
  159. /* In nrcmd.c: */
  160. void donrdump(struct nr4cb *cb);
  161. int doroutedump(void);
  162. int dorouteinfo(int argc,char *argv[],void *p);
  163. int putalias(char *to, char *from,int complain);
  164. /* In nrhdr.c: */
  165. struct mbuf *htonnr3(struct nr3hdr *);
  166. struct mbuf *htonnrdest(struct nr3dest *);
  167. int ntohnr3(struct nr3hdr *, struct mbuf **);
  168. int ntohnrdest(struct nr3dest *ds,struct mbuf **bpp);
  169. #endif /* _NETROM_H */