diff options
Diffstat (limited to 'zebra/irdp.h')
-rw-r--r-- | zebra/irdp.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/zebra/irdp.h b/zebra/irdp.h new file mode 100644 index 000000000..0fad581d2 --- /dev/null +++ b/zebra/irdp.h @@ -0,0 +1,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; |