routed.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // Copyright 2026 Aarav Ravindra Kharade
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. /*-
  17. * Copyright (c) 1983, 1989, 1993
  18. * The Regents of the University of California. All rights reserved.
  19. *
  20. * Redistribution and use in source and binary forms, with or without
  21. * modification, are permitted provided that the following conditions
  22. * are met:
  23. * 1. Redistributions of source code must retain the above copyright
  24. * notice, this list of conditions and the following disclaimer.
  25. * 2. Redistributions in binary form must reproduce the above copyright
  26. * notice, this list of conditions and the following disclaimer in the
  27. * documentation and/or other materials provided with the distribution.
  28. * 4. Neither the name of the University nor the names of its contributors
  29. * may be used to endorse or promote products derived from this software
  30. * without specific prior written permission.
  31. *
  32. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  33. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  34. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  35. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  36. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  37. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  38. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  39. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  40. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  41. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  42. * SUCH DAMAGE.
  43. *
  44. * @(#)routed.h 8.1 (Berkeley) 6/2/93
  45. */
  46. #ifndef _PROTOCOLS_ROUTED_H
  47. #define _PROTOCOLS_ROUTED_H 1
  48. #include <sys/socket.h>
  49. /*
  50. * Routing Information Protocol
  51. *
  52. * Derived from Xerox NS Routing Information Protocol
  53. * by changing 32-bit net numbers to sockaddr's and
  54. * padding stuff to 32-bit boundaries.
  55. */
  56. #define RIPVERSION 1
  57. struct netinfo {
  58. struct sockaddr rip_dst; /* destination net/host */
  59. int rip_metric; /* cost of route */
  60. };
  61. struct rip {
  62. unsigned char rip_cmd; /* request/response */
  63. unsigned char rip_vers; /* protocol version # */
  64. unsigned char rip_res1[2]; /* pad to 32-bit boundary */
  65. union {
  66. struct netinfo ru_nets[1]; /* variable length... */
  67. char ru_tracefile[1]; /* ditto ... */
  68. } ripun;
  69. #define rip_nets ripun.ru_nets
  70. #define rip_tracefile ripun.ru_tracefile
  71. };
  72. /*
  73. * Packet types.
  74. */
  75. #define RIPCMD_REQUEST 1 /* want info */
  76. #define RIPCMD_RESPONSE 2 /* responding to request */
  77. #define RIPCMD_TRACEON 3 /* turn tracing on */
  78. #define RIPCMD_TRACEOFF 4 /* turn it off */
  79. #define RIPCMD_MAX 5
  80. #ifdef RIPCMDS
  81. char *ripcmds[RIPCMD_MAX] =
  82. { "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF" };
  83. #endif
  84. #define HOPCNT_INFINITY 16 /* per Xerox NS */
  85. #define MAXPACKETSIZE 512 /* max broadcast size */
  86. /*
  87. * Timer values used in managing the routing table.
  88. * Complete tables are broadcast every SUPPLY_INTERVAL seconds.
  89. * If changes occur between updates, dynamic updates containing only changes
  90. * may be sent. When these are sent, a timer is set for a random value
  91. * between MIN_WAITTIME and MAX_WAITTIME, and no additional dynamic updates
  92. * are sent until the timer expires.
  93. *
  94. * Every update of a routing entry forces an entry's timer to be reset.
  95. * After EXPIRE_TIME without updates, the entry is marked invalid,
  96. * but held onto until GARBAGE_TIME so that others may
  97. * see it "be deleted".
  98. */
  99. #define TIMER_RATE 30 /* alarm clocks every 30 seconds */
  100. #define SUPPLY_INTERVAL 30 /* time to supply tables */
  101. #define MIN_WAITTIME 2 /* min. interval to broadcast changes */
  102. #define MAX_WAITTIME 5 /* max. time to delay changes */
  103. #define EXPIRE_TIME 180 /* time to mark entry invalid */
  104. #define GARBAGE_TIME 240 /* time to garbage collect */
  105. #endif /* protocols/routed.h */