home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / network / src_1218.zip / RIP.H < prev    next >
C/C++ Source or Header  |  1990-11-16  |  3KB  |  120 lines

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