]> git.proxmox.com Git - mirror_frr.git/blame - zebra/irdp.h
lib: ZEBRA_NUM_OF -> array_size
[mirror_frr.git] / zebra / irdp.h
CommitLineData
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 *
896014f4
DL
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
718e3744 19 */
20
d62a17ae 21/*
ca776988 22 * This file is modified and completed for the Zebra IRDP implementation
23 * by Robert Olsson, Swedish University of Agricultural Sciences
24 */
25
26#ifndef _IRDP_H
27#define _IRDP_H
28
29#include "lib/vty.h"
30
51e94aa7
EDP
31#ifdef __cplusplus
32extern "C" {
33#endif
34
ca776988 35#define TRUE 1
36#define FALSE 0
37
718e3744 38/* ICMP Messages */
39#ifndef ICMP_ROUTERADVERT
40#define ICMP_ROUTERADVERT 9
41#endif /* ICMP_ROUTERADVERT */
42
43#ifndef ICMP_ROUTERSOLICIT
44#define ICMP_ROUTERSOLICIT 10
45#endif /* ICMP_ROUTERSOLICT */
46
47/* Multicast groups */
48#ifndef INADDR_ALLHOSTS_GROUP
ca776988 49#define INADDR_ALLHOSTS_GROUP 0xe0000001U /* 224.0.0.1 */
718e3744 50#endif /* INADDR_ALLHOSTS_GROUP */
51
52#ifndef INADDR_ALLRTRS_GROUP
ca776988 53#define INADDR_ALLRTRS_GROUP 0xe0000002U /* 224.0.0.2 */
718e3744 54#endif /* INADDR_ALLRTRS_GROUP */
55
ca776988 56/* Default irdp packet interval */
57#define IRDP_DEFAULT_INTERVAL 300
58
59/* Router constants from RFC1256 */
60#define MAX_INITIAL_ADVERT_INTERVAL 16
61#define MAX_INITIAL_ADVERTISEMENTS 3
62#define MAX_RESPONSE_DELAY 2
63
64#define IRDP_MAXADVERTINTERVAL 600
65#define IRDP_MINADVERTINTERVAL 450 /* 0.75*600 */
66#define IRDP_LIFETIME 1350 /* 3*450 */
67#define IRDP_PREFERENCE 0
68
69#define ICMP_MINLEN 8
70
71#define IRDP_LAST_ADVERT_MESSAGES 2 /* The last adverts with Holdtime 0 */
72
73#define IRDP_RX_BUF 1500
74
d62a17ae 75/*
76 Comments comes from RFC1256 ICMP Router Discovery Messages.
ca776988 77
78 The IP destination address to be used for multicast Router
718e3744 79 Advertisements sent from the interface. The only permissible
80 values are the all-systems multicast address, 224.0.0.1, or the
81 limited-broadcast address, 255.255.255.255. (The all-systems
82 address is preferred wherever possible, i.e., on any link where
83 all listening hosts support IP multicast.)
84
85 Default: 224.0.0.1 if the router supports IP multicast on the
d62a17ae 86 interface, else 255.255.255.255
718e3744 87
ca776988 88 The maximum time allowed between sending multicast Router
718e3744 89 Advertisements from the interface, in seconds. Must be no less
90 than 4 seconds and no greater than 1800 seconds.
91
d62a17ae 92 Default: 600 seconds
718e3744 93
ca776988 94 The minimum time allowed between sending unsolicited multicast
718e3744 95 Router Advertisements from the interface, in seconds. Must be no
96 less than 3 seconds and no greater than MaxAdvertisementInterval.
97
d62a17ae 98 Default: 0.75 * MaxAdvertisementInterval
718e3744 99
ca776988 100 The value to be placed in the Lifetime field of Router
718e3744 101 Advertisements sent from the interface, in seconds. Must be no
102 less than MaxAdvertisementInterval and no greater than 9000
103 seconds.
104
d62a17ae 105 Default: 3 * MaxAdvertisementInterval
718e3744 106
ca776988 107 The preferability of the address as a default router address,
718e3744 108 relative to other router addresses on the same subnet. A 32-bit,
109 signed, twos-complement integer, with higher values meaning more
110 preferable. The minimum value (hex 80000000) is used to indicate
111 that the address, even though it may be advertised, is not to be
112 used by neighboring hosts as a default router address.
113
d62a17ae 114 Default: 0
ca776988 115*/
718e3744 116
d62a17ae 117struct irdp_interface {
e92044cd
DS
118 bool started;
119
d62a17ae 120 unsigned long MaxAdvertInterval;
121 unsigned long MinAdvertInterval;
122 unsigned long Preference;
718e3744 123
d7c0a89a 124 uint32_t flags;
718e3744 125
ca776988 126#define IF_ACTIVE (1<<0) /* ICMP Active */
127#define IF_BROADCAST (1<<1) /* 255.255.255.255 */
128#define IF_SOLICIT (1<<2) /* Solicit active */
129#define IF_DEBUG_MESSAGES (1<<3)
130#define IF_DEBUG_PACKET (1<<4)
131#define IF_DEBUG_MISC (1<<5)
132#define IF_SHUTDOWN (1<<6)
718e3744 133
d62a17ae 134 struct interface *ifp;
135 struct thread *t_advertise;
136 unsigned long irdp_sent;
d7c0a89a 137 uint16_t Lifetime;
718e3744 138
d62a17ae 139 struct list *AdvPrefList;
ca776988 140};
718e3744 141
d62a17ae 142struct Adv {
143 struct in_addr ip;
144 int pref;
718e3744 145};
146
2eb27eec 147extern void irdp_if_init(void);
2da40f49 148extern int irdp_sock_init(void);
2eb27eec 149extern int irdp_config_write(struct vty *, struct interface *);
ab0f6155
SH
150extern int irdp_send_thread(struct thread *t_advert);
151extern void irdp_advert_off(struct interface *ifp);
d62a17ae 152extern void process_solicit(struct interface *ifp);
ab0f6155 153extern int irdp_read_raw(struct thread *r);
d7c0a89a
QY
154extern void send_packet(struct interface *ifp, struct stream *s, uint32_t dst,
155 struct prefix *p, uint32_t ttl);
ab0f6155 156
51e94aa7
EDP
157#ifdef __cplusplus
158}
159#endif
ca776988 160
2da40f49 161#endif /* _IRDP_H */