]>
Commit | Line | Data |
---|---|---|
718e3744 | 1 | /* ICMP Router Discovery Messages |
2 | * Copyright (C) 1997, 2000 Kunihiro Ishiguro | |
3 | * | |
4 | * This file is part of GNU Zebra. | |
5 | * | |
6 | * GNU Zebra is free software; you can redistribute it and/or modify it | |
7 | * under the terms of the GNU General Public License as published by the | |
8 | * Free Software Foundation; either version 2, or (at your option) any | |
9 | * later version. | |
10 | * | |
11 | * GNU Zebra is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with GNU Zebra; see the file COPYING. If not, write to the Free | |
18 | * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
19 | * 02111-1307, USA. | |
20 | */ | |
21 | ||
ca776988 | 22 | /* |
23 | * This file is modified and completed for the Zebra IRDP implementation | |
24 | * by Robert Olsson, Swedish University of Agricultural Sciences | |
25 | */ | |
26 | ||
27 | #ifndef _IRDP_H | |
28 | #define _IRDP_H | |
29 | ||
30 | #include "lib/vty.h" | |
31 | ||
32 | #define TRUE 1 | |
33 | #define FALSE 0 | |
34 | ||
718e3744 | 35 | /* ICMP Messages */ |
36 | #ifndef ICMP_ROUTERADVERT | |
37 | #define ICMP_ROUTERADVERT 9 | |
38 | #endif /* ICMP_ROUTERADVERT */ | |
39 | ||
40 | #ifndef ICMP_ROUTERSOLICIT | |
41 | #define ICMP_ROUTERSOLICIT 10 | |
42 | #endif /* ICMP_ROUTERSOLICT */ | |
43 | ||
44 | /* Multicast groups */ | |
45 | #ifndef INADDR_ALLHOSTS_GROUP | |
ca776988 | 46 | #define INADDR_ALLHOSTS_GROUP 0xe0000001U /* 224.0.0.1 */ |
718e3744 | 47 | #endif /* INADDR_ALLHOSTS_GROUP */ |
48 | ||
49 | #ifndef INADDR_ALLRTRS_GROUP | |
ca776988 | 50 | #define INADDR_ALLRTRS_GROUP 0xe0000002U /* 224.0.0.2 */ |
718e3744 | 51 | #endif /* INADDR_ALLRTRS_GROUP */ |
52 | ||
ca776988 | 53 | /* Default irdp packet interval */ |
54 | #define IRDP_DEFAULT_INTERVAL 300 | |
55 | ||
56 | /* Router constants from RFC1256 */ | |
57 | #define MAX_INITIAL_ADVERT_INTERVAL 16 | |
58 | #define MAX_INITIAL_ADVERTISEMENTS 3 | |
59 | #define MAX_RESPONSE_DELAY 2 | |
60 | ||
61 | #define IRDP_MAXADVERTINTERVAL 600 | |
62 | #define IRDP_MINADVERTINTERVAL 450 /* 0.75*600 */ | |
63 | #define IRDP_LIFETIME 1350 /* 3*450 */ | |
64 | #define IRDP_PREFERENCE 0 | |
65 | ||
66 | #define ICMP_MINLEN 8 | |
67 | ||
68 | #define IRDP_LAST_ADVERT_MESSAGES 2 /* The last adverts with Holdtime 0 */ | |
69 | ||
70 | #define IRDP_RX_BUF 1500 | |
71 | ||
72 | /* | |
73 | Comments comes from RFC1256 ICMP Router Discovery Messages. | |
74 | ||
75 | The IP destination address to be used for multicast Router | |
718e3744 | 76 | Advertisements sent from the interface. The only permissible |
77 | values are the all-systems multicast address, 224.0.0.1, or the | |
78 | limited-broadcast address, 255.255.255.255. (The all-systems | |
79 | address is preferred wherever possible, i.e., on any link where | |
80 | all listening hosts support IP multicast.) | |
81 | ||
82 | Default: 224.0.0.1 if the router supports IP multicast on the | |
ca776988 | 83 | interface, else 255.255.255.255 |
718e3744 | 84 | |
ca776988 | 85 | The maximum time allowed between sending multicast Router |
718e3744 | 86 | Advertisements from the interface, in seconds. Must be no less |
87 | than 4 seconds and no greater than 1800 seconds. | |
88 | ||
ca776988 | 89 | Default: 600 seconds |
718e3744 | 90 | |
ca776988 | 91 | The minimum time allowed between sending unsolicited multicast |
718e3744 | 92 | Router Advertisements from the interface, in seconds. Must be no |
93 | less than 3 seconds and no greater than MaxAdvertisementInterval. | |
94 | ||
ca776988 | 95 | Default: 0.75 * MaxAdvertisementInterval |
718e3744 | 96 | |
ca776988 | 97 | The value to be placed in the Lifetime field of Router |
718e3744 | 98 | Advertisements sent from the interface, in seconds. Must be no |
99 | less than MaxAdvertisementInterval and no greater than 9000 | |
100 | seconds. | |
101 | ||
ca776988 | 102 | Default: 3 * MaxAdvertisementInterval |
718e3744 | 103 | |
ca776988 | 104 | The preferability of the address as a default router address, |
718e3744 | 105 | relative to other router addresses on the same subnet. A 32-bit, |
106 | signed, twos-complement integer, with higher values meaning more | |
107 | preferable. The minimum value (hex 80000000) is used to indicate | |
108 | that the address, even though it may be advertised, is not to be | |
109 | used by neighboring hosts as a default router address. | |
110 | ||
ca776988 | 111 | Default: 0 |
112 | */ | |
718e3744 | 113 | |
ca776988 | 114 | struct irdp_interface |
718e3744 | 115 | { |
ca776988 | 116 | unsigned long MaxAdvertInterval; |
117 | unsigned long MinAdvertInterval; | |
118 | unsigned long Preference; | |
718e3744 | 119 | |
ca776988 | 120 | u_int32_t flags; |
718e3744 | 121 | |
ca776988 | 122 | #define IF_ACTIVE (1<<0) /* ICMP Active */ |
123 | #define IF_BROADCAST (1<<1) /* 255.255.255.255 */ | |
124 | #define IF_SOLICIT (1<<2) /* Solicit active */ | |
125 | #define IF_DEBUG_MESSAGES (1<<3) | |
126 | #define IF_DEBUG_PACKET (1<<4) | |
127 | #define IF_DEBUG_MISC (1<<5) | |
128 | #define IF_SHUTDOWN (1<<6) | |
718e3744 | 129 | |
ca776988 | 130 | struct interface *ifp; |
131 | struct thread *t_advertise; | |
132 | unsigned long irdp_sent; | |
133 | u_int16_t Lifetime; | |
718e3744 | 134 | |
52dc7ee6 | 135 | struct list *AdvPrefList; |
718e3744 | 136 | |
ca776988 | 137 | }; |
718e3744 | 138 | |
ca776988 | 139 | struct Adv |
718e3744 | 140 | { |
ca776988 | 141 | struct in_addr ip; |
142 | int pref; | |
718e3744 | 143 | }; |
144 | ||
2da40f49 | 145 | extern void irdp_init(void); |
146 | extern int irdp_sock_init(void); | |
147 | extern void irdp_finish(void); | |
148 | extern void irdp_config_write (struct vty *, struct interface *); | |
ab0f6155 SH |
149 | extern int irdp_send_thread(struct thread *t_advert); |
150 | extern void irdp_advert_off(struct interface *ifp); | |
151 | extern void process_solicit (struct interface *ifp); | |
152 | extern int irdp_read_raw(struct thread *r); | |
153 | extern void send_packet(struct interface *ifp, struct stream *s, | |
154 | u_int32_t dst, struct prefix *p, u_int32_t ttl); | |
155 | ||
ca776988 | 156 | |
2da40f49 | 157 | #endif /* _IRDP_H */ |