summaryrefslogtreecommitdiff
path: root/zebra/irdp.h
blob: 0fad581d21351444986ea4c1fb762f03c91965b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/* ICMP Router Discovery Messages
 * Copyright (C) 1997, 2000 Kunihiro Ishiguro
 *
 * This file is part of GNU Zebra.
 *
 * GNU Zebra is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 *
 * GNU Zebra is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GNU Zebra; see the file COPYING.  If not, write to the Free
 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.  
 */

/* ICMP Messages */
#ifndef ICMP_ROUTERADVERT
#define ICMP_ROUTERADVERT 9
#endif /* ICMP_ROUTERADVERT */

#ifndef ICMP_ROUTERSOLICIT
#define ICMP_ROUTERSOLICIT 10
#endif /* ICMP_ROUTERSOLICT */

/* Multicast groups */
#ifndef INADDR_ALLHOSTS_GROUP
#define INADDR_ALLHOSTS_GROUP 0xe0000001    /* 224.0.0.1 */
#endif /* INADDR_ALLHOSTS_GROUP */

#ifndef INADDR_ALLRTRS_GROUP
#define INADDR_ALLRTRS_GROUP  0xe0000002    /* 224.0.0.2 */
#endif /* INADDR_ALLRTRS_GROUP */

/* Comments comes from RFC1256 ICMP Router Discovery Messages. */
struct irdp_router_interface 
{
  /* The IP destination address to be used for multicast Router
     Advertisements sent from the interface.  The only permissible
     values are the all-systems multicast address, 224.0.0.1, or the
     limited-broadcast address, 255.255.255.255.  (The all-systems
     address is preferred wherever possible, i.e., on any link where
     all listening hosts support IP multicast.)

     Default: 224.0.0.1 if the router supports IP multicast on the
     interface, else 255.255.255.255 */

  struct in_addr AdvertisementAddress;

  /* The maximum time allowed between sending multicast Router
     Advertisements from the interface, in seconds.  Must be no less
     than 4 seconds and no greater than 1800 seconds.

     Default: 600 seconds */

  unsigned long MaxAdvertisementInterval;

  /* The minimum time allowed between sending unsolicited multicast
     Router Advertisements from the interface, in seconds.  Must be no
     less than 3 seconds and no greater than MaxAdvertisementInterval.

     Default: 0.75 * MaxAdvertisementInterval */

  unsigned long MinAdvertisementInterval;


  /* The value to be placed in the Lifetime field of Router
     Advertisements sent from the interface, in seconds.  Must be no
     less than MaxAdvertisementInterval and no greater than 9000
     seconds.

     Default: 3 * MaxAdvertisementInterval */

  unsigned long AdvertisementLifetime;

  /* A flag indicating whether or not the address is to be advertised.

     Default: TRUE */

  int Advertise;


  /* The preferability of the address as a default router address,
     relative to other router addresses on the same subnet.  A 32-bit,
     signed, twos-complement integer, with higher values meaning more
     preferable.  The minimum value (hex 80000000) is used to indicate
     that the address, even though it may be advertised, is not to be
     used by neighboring hosts as a default router address.

     Default: 0 */

  unsigned long PreferenceLevel;
};

struct irdp_host_interface 
{
  /* A flag indicating whether or not the host is to perform ICMP router
     discovery on the interface. */
  int PerformRouerDiscovery;
  
  /* The IP destination address to be used for sending Router
     Solicitations from the interface.  The only permissible values
     are the all-routers multicast address, 224.0.0.2, or the
     limited-broadcast address, 255.255.255.255.  (The all-routers
     address is preferred wherever possible, i.e., on any link where
     all advertising routers support IP multicast.)  */
  unsigned long SolicitationAddress;
};


/* Route preference structure */
struct irdp 
{
  struct in_addr prefix;
  long pref;		/* preference level */
  long timer;			/* lifetime timer */

  struct irdp *next;		/* doubly linked list */
  struct irdp *prev;		/* doubly linked list */
};

/* Default irdp packet interval */
#define IRDP_DEFAULT_INTERVAL 300

/* Router constants from RFC1256 */
#define MAX_INITIAL_ADVERT_INTERVAL 16
#define MAX_INITIAL_ADVERTISEMENTS   3
#define MAX_RESPONSE_DELAY           2

/* Host constants from RFC1256 */
#define MAX_SOLICITATION_DELAY       1
#define SOLICITATION_INTERVAL        3
#define MAX_SOLICITATIONS            3

enum
{
  IRDP_NONE,
  IRDP_ROUTER,
  IRDP_HOST,
};

/* default is host mode */
extern int irdp_mode;