Annotation of embedaddon/quagga/zebra/irdp.h, revision 1.1.1.1

1.1       misho       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: 
                     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: 
                     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
                     46: #define INADDR_ALLHOSTS_GROUP 0xe0000001U    /* 224.0.0.1 */
                     47: #endif /* INADDR_ALLHOSTS_GROUP */
                     48: 
                     49: #ifndef INADDR_ALLRTRS_GROUP
                     50: #define INADDR_ALLRTRS_GROUP  0xe0000002U    /* 224.0.0.2 */
                     51: #endif /* INADDR_ALLRTRS_GROUP */
                     52: 
                     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
                     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
                     83:      interface, else 255.255.255.255 
                     84: 
                     85:      The maximum time allowed between sending multicast Router
                     86:      Advertisements from the interface, in seconds.  Must be no less
                     87:      than 4 seconds and no greater than 1800 seconds.
                     88: 
                     89:      Default: 600 seconds 
                     90: 
                     91:      The minimum time allowed between sending unsolicited multicast
                     92:      Router Advertisements from the interface, in seconds.  Must be no
                     93:      less than 3 seconds and no greater than MaxAdvertisementInterval.
                     94: 
                     95:      Default: 0.75 * MaxAdvertisementInterval 
                     96: 
                     97:      The value to be placed in the Lifetime field of Router
                     98:      Advertisements sent from the interface, in seconds.  Must be no
                     99:      less than MaxAdvertisementInterval and no greater than 9000
                    100:      seconds.
                    101: 
                    102:      Default: 3 * MaxAdvertisementInterval 
                    103: 
                    104:      The preferability of the address as a default router address,
                    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: 
                    111:      Default: 0 
                    112: */
                    113: 
                    114: struct irdp_interface 
                    115: {
                    116:   unsigned long MaxAdvertInterval;
                    117:   unsigned long MinAdvertInterval;
                    118:   unsigned long Preference;
                    119: 
                    120:   u_int32_t flags;
                    121: 
                    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) 
                    129: 
                    130:   struct interface *ifp;
                    131:   struct thread *t_advertise;
                    132:   unsigned long irdp_sent;
                    133:   u_int16_t Lifetime;
                    134: 
                    135:  struct list *AdvPrefList;
                    136: 
                    137: };
                    138: 
                    139: struct Adv 
                    140: {
                    141:   struct in_addr ip;
                    142:   int pref;
                    143: };
                    144: 
                    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 *);
                    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: 
                    156: 
                    157: #endif /* _IRDP_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>