File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / zebra / irdp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    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>