Annotation of embedaddon/quagga/bgpd/bgp_damp.h, revision 1.1.1.1

1.1       misho       1: /* BGP flap dampening
                      2:    Copyright (C) 2001 IP Infusion Inc.
                      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: #ifndef _QUAGGA_BGP_DAMP_H
                     22: #define _QUAGGA_BGP_DAMP_H
                     23: 
                     24: /* Structure maintained on a per-route basis. */
                     25: struct bgp_damp_info
                     26: {
                     27:   /* Doubly linked list.  This information must be linked to
                     28:      reuse_list or no_reuse_list.  */
                     29:   struct bgp_damp_info *next;
                     30:   struct bgp_damp_info *prev;
                     31: 
                     32:   /* Figure-of-merit.  */
                     33:   unsigned int penalty;
                     34: 
                     35:   /* Number of flapping.  */
                     36:   unsigned int flap;
                     37:        
                     38:   /* First flap time  */
                     39:   time_t start_time;
                     40:  
                     41:   /* Last time penalty was updated.  */
                     42:   time_t t_updated;
                     43: 
                     44:   /* Time of route start to be suppressed.  */
                     45:   time_t suppress_time;
                     46: 
                     47:   /* Back reference to bgp_info. */
                     48:   struct bgp_info *binfo;
                     49: 
                     50:   /* Back reference to bgp_node. */
                     51:   struct bgp_node *rn;
                     52: 
                     53:   /* Current index in the reuse_list. */
                     54:   int index;
                     55: 
                     56:   /* Last time message type. */
                     57:   u_char lastrecord;
                     58: #define BGP_RECORD_UPDATE      1U
                     59: #define BGP_RECORD_WITHDRAW    2U
                     60: 
                     61:   afi_t afi;
                     62:   safi_t safi;
                     63: };
                     64: 
                     65: /* Specified parameter set configuration. */
                     66: struct bgp_damp_config
                     67: {
                     68:   /* Value over which routes suppressed.  */
                     69:   unsigned int suppress_value;
                     70: 
                     71:   /* Value below which suppressed routes reused.  */
                     72:   unsigned int reuse_limit;
                     73: 
                     74:   /* Max time a route can be suppressed.  */
                     75:   time_t max_suppress_time;      
                     76: 
                     77:   /* Time during which accumulated penalty reduces by half.  */
                     78:   time_t half_life;
                     79: 
                     80:   /* Non-configurable parameters but fixed at implementation time.
                     81:    * To change this values, init_bgp_damp() should be modified.
                     82:    */
                     83:   time_t tmax;                  /* Max time previous instability retained */
                     84:   unsigned int reuse_list_size;         /* Number of reuse lists */
                     85:   unsigned int reuse_index_size; /* Size of reuse index array */
                     86: 
                     87:   /* Non-configurable parameters.  Most of these are calculated from
                     88:    * the configurable parameters above.
                     89:    */
                     90:   unsigned int ceiling;                        /* Max value a penalty can attain */
                     91:   unsigned int decay_rate_per_tick;    /* Calculated from half-life */
                     92:   unsigned int decay_array_size; /* Calculated using config parameters */
                     93:   double scale_factor;
                     94:   unsigned int reuse_scale_factor; 
                     95:          
                     96:   /* Decay array per-set based. */ 
                     97:   double *decay_array; 
                     98: 
                     99:   /* Reuse index array per-set based. */ 
                    100:   int *reuse_index;
                    101: 
                    102:   /* Reuse list array per-set based. */  
                    103:   struct bgp_damp_info **reuse_list;
                    104:   int reuse_offset;
                    105:         
                    106:   /* All dampening information which is not on reuse list.  */
                    107:   struct bgp_damp_info *no_reuse_list;
                    108: 
                    109:   /* Reuse timer thread per-set base. */
                    110:   struct thread* t_reuse;
                    111: };
                    112: 
                    113: #define BGP_DAMP_NONE           0
                    114: #define BGP_DAMP_USED          1
                    115: #define BGP_DAMP_SUPPRESSED    2
                    116: 
                    117: /* Time granularity for reuse lists */
                    118: #define DELTA_REUSE              10
                    119: 
                    120: /* Time granularity for decay arrays */
                    121: #define DELTA_T                   5
                    122: 
                    123: #define DEFAULT_PENALTY         1000
                    124: 
                    125: #define DEFAULT_HALF_LIFE         15
                    126: #define DEFAULT_REUSE           750
                    127: #define DEFAULT_SUPPRESS       2000
                    128: 
                    129: #define REUSE_LIST_SIZE          256
                    130: #define REUSE_ARRAY_SIZE        1024
                    131: 
                    132: extern int bgp_damp_enable (struct bgp *, afi_t, safi_t, time_t, unsigned int, 
                    133:                      unsigned int, time_t);
                    134: extern int bgp_damp_disable (struct bgp *, afi_t, safi_t);
                    135: extern int bgp_damp_withdraw (struct bgp_info *, struct bgp_node *,
                    136:                       afi_t, safi_t, int);
                    137: extern int bgp_damp_update (struct bgp_info *, struct bgp_node *, afi_t, safi_t);
                    138: extern int bgp_damp_scan (struct bgp_info *, afi_t, safi_t);
                    139: extern void bgp_damp_info_free (struct bgp_damp_info *, int);
                    140: extern void bgp_damp_info_clean (void);
                    141: extern int bgp_damp_decay (time_t, int);
                    142: extern void bgp_config_write_damp (struct vty *);
                    143: extern void bgp_damp_info_vty (struct vty *, struct bgp_info *);
                    144: extern const char * bgp_damp_reuse_time_vty (struct vty *, struct bgp_info *,
                    145:                                              char *, size_t);
                    146: 
                    147: #endif /* _QUAGGA_BGP_DAMP_H */

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