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

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _RIP_H
  2. #define _RIP_H
  3. /* Routing Information Protocol (RIP)
  4.  *
  5.  * This code is derived from the 4.2 BSD version which was
  6.  * used as a spec since no formal specification is known to exist.
  7.  * See RFC 1009, Gateway Requirements, for more details. AGB 4-29-88
  8.  *
  9.  * The draft RIP RFC was used to develop most of this code. The above
  10.  * referred to the basics of the rip_recv() function of RIP.C. The RIP
  11.  * RFC has now been issued as RFC1058. AGB 7-23-88
  12.  *
  13.  * Substantially rewritten and integrated into NOS 9/1989 by KA9Q
  14.  */
  15. #ifndef _MBUF_H
  16. #include "mbuf.h"
  17. #endif
  18. #ifndef _IFACE_H
  19. #include "iface.h"
  20. #endif
  21. #ifndef _UDP_H
  22. #include "udp.h"
  23. #endif
  24. #define RIP_INFINITY 16
  25. #define RIP_TTL 240 /* Default time-to-live for an entry */
  26. #define RIPVERSION 1
  27. #define RIP_IPFAM 2
  28. /* UDP Port for RIP */
  29. #define RIP_PORT 520
  30. /* RIP Packet Types */
  31. enum ripcmd {
  32. RIPCMD_REQUEST=1, /* want info */
  33. RIPCMD_RESPONSE, /* responding to request */
  34. RIPCMD_MAX,
  35. };
  36. #define HOPCNT_INFINITY 16 /* per Xerox NS */
  37. #define MAXRIPROUTES 25 /* maximum # routes per RIP pkt */
  38. struct rip_list {
  39. struct rip_list *prev;
  40. struct rip_list *next; /* doubly linked list */
  41. /* address to scream at periodically:
  42.  * this address must have a direct network interface route and an
  43.  * ARP entry for the appropriate  hardware broadcast address, if approp.
  44.  */
  45. int32 dest;
  46. /* basic rate of RIP clocks on this net interface */
  47. int32 interval;
  48. struct timer rip_time; /* time to output next on this net. iface */
  49. /* the interface to transmit on  and receive from */
  50. struct iface *iface;
  51. /* described below with the mask defs */
  52. struct {
  53. unsigned int rip_split:1; /* Do split horizon processing */
  54. unsigned int rip_us:1; /* Include ourselves in the list */
  55. } flags;
  56. };
  57. /* Host format of a single entry in a RIP response packet */
  58. struct rip_route {
  59. uint16 addr_fam;
  60. int32 target;
  61. int32 metric;
  62. };
  63. #define RIPROUTE 20 /* Size of each routing entry */
  64. #define RIPHEADER 4 /* Size of rip header before routes */
  65. #define MAXRIPPACKET RIPHEADER + (MAXRIPROUTES*RIPROUTE)
  66. /* RIP statistics counters */
  67. struct rip_stat {
  68. int32 output; /* Packets sent */
  69. int32 rcvd; /* Packets received */
  70. int32 request; /* Number of request packets received */
  71. int32 response; /* Number of responses received */
  72. int32 unknown; /* Number of unknown command pkts received */
  73. int32 version; /* Number of version errors */
  74. int32 addr_family; /* Number of address family errors */
  75. int32 refusals; /* Number of packets dropped from a host
  76. on the refuse list */
  77. };
  78. struct rip_refuse {
  79. struct rip_refuse *prev;
  80. struct rip_refuse *next;
  81. int32 target;
  82. };
  83. /* RIP primitives */
  84. int rip_init(void);
  85. void rt_timeout(void *s);
  86. void rip_trigger(void);
  87. int rip_add(int32 dest,int32 interval,int split,int us);
  88. int riprefadd(int32 gateway);
  89. int riprefdrop(int32 gateway);
  90. int ripreq(int32 dest,uint16 replyport);
  91. int rip_drop(int32 dest);
  92. int nbits(int32 target);
  93. void pullentry(struct rip_route *ep,struct mbuf **bpp);
  94. /* RIP Definition */
  95. extern uint16 Rip_trace;
  96. extern int Rip_merge;
  97. extern struct rip_stat Rip_stat;
  98. extern struct rip_list *Rip_list;
  99. extern struct rip_refuse *Rip_refuse;
  100. extern struct udp_cb *Rip_cb;
  101. #endif /* _RIP_H */