Annotation of embedaddon/quagga/zebra/irdp.h, revision 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>