bgp_damp.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:4k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* BGP flap dampening
  2.    Copyright (C) 2001 IP Infusion Inc.
  3. This file is part of GNU Zebra.
  4. GNU Zebra is free software; you can redistribute it and/or modify it
  5. under the terms of the GNU General Public License as published by the
  6. Free Software Foundation; either version 2, or (at your option) any
  7. later version.
  8. GNU Zebra is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11. General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GNU Zebra; see the file COPYING.  If not, write to the Free
  14. Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15. 02111-1307, USA.  */
  16. /* Structure maintained on a per-route basis. */
  17. struct bgp_damp_info
  18. {
  19.   /* Doubly linked list.  This information must be linked to
  20.      reuse_list or no_reuse_list.  */
  21.   struct bgp_damp_info *next;
  22.   struct bgp_damp_info *prev;
  23.   /* Figure-of-merit.  */
  24.   int penalty;
  25.   /* Number of flapping.  */
  26.   int flap;
  27.   /* First flap time  */
  28.   time_t start_time;
  29.  
  30.   /* Last time penalty was updated.  */
  31.   time_t t_updated;
  32.   /* Time of route start to be suppressed.  */
  33.   time_t suppress_time;
  34.   /* Back reference to bgp_info. */
  35.   struct bgp_info *binfo;
  36.   /* Back reference to bgp_node. */
  37.   struct bgp_node *rn;
  38.   /* Current index in the reuse_list. */
  39.   int index;
  40.   /* Last time message type. */
  41.   u_char lastrecord;
  42. #define BGP_RECORD_UPDATE 1
  43. #define BGP_RECORD_WITHDRAW 2
  44.   afi_t afi;
  45.   safi_t safi;
  46. };
  47. /* Specified parameter set configuration. */
  48. struct bgp_damp_config
  49. {
  50.   /* Value over which routes suppressed.  */
  51.   int suppress_value;
  52.   /* Value below which suppressed routes reused.  */
  53.   int reuse_limit;    
  54.   /* Max time a route can be suppressed.  */
  55.   int max_suppress_time;      
  56.   /* Time during which accumulated penalty reduces by half.  */
  57.   int half_life; 
  58.   /* Non-configurable parameters but fixed at implementation time.
  59.    * To change this values, init_bgp_damp() should be modified.
  60.    */
  61.   int tmax;   /* Max time previous instability retained */
  62.   int reuse_list_size; /* Number of reuse lists */
  63.   int reuse_index_size; /* Size of reuse index array */
  64.   /* Non-configurable parameters.  Most of these are calculated from
  65.    * the configurable parameters above.
  66.    */
  67.   unsigned int ceiling; /* Max value a penalty can attain */
  68.   int decay_rate_per_tick; /* Calculated from half-life */
  69.   int decay_array_size; /* Calculated using config parameters */
  70.   double scale_factor;
  71.   int reuse_scale_factor; 
  72.          
  73.   /* Decay array per-set based. */ 
  74.   double *decay_array;
  75.   /* Reuse index array per-set based. */ 
  76.   int *reuse_index;
  77.   /* Reuse list array per-set based. */  
  78.   struct bgp_damp_info **reuse_list;
  79.   int reuse_offset;
  80.         
  81.   /* All dampening information which is not on reuse list.  */
  82.   struct bgp_damp_info *no_reuse_list;
  83.   /* Reuse timer thread per-set base. */
  84.   struct thread* t_reuse;
  85. };
  86. #define BGP_DAMP_NONE           0
  87. #define BGP_DAMP_USED 1
  88. #define BGP_DAMP_SUPPRESSED 2
  89. /* Time granularity for reuse lists */
  90. #define DELTA_REUSE           10
  91. /* Time granularity for decay arrays */
  92. #define DELTA_T             5
  93. #define DEFAULT_PENALTY         1000
  94. #define DEFAULT_HALF_LIFE         15
  95. #define DEFAULT_REUSE           750
  96. #define DEFAULT_SUPPRESS  2000
  97. #define REUSE_LIST_SIZE          256
  98. #define REUSE_ARRAY_SIZE        1024
  99. int bgp_damp_enable (struct bgp *, afi_t, safi_t, int, int, int, int);
  100. int bgp_damp_disable (struct bgp *, afi_t, safi_t);
  101. int bgp_damp_withdraw (struct bgp_info *, struct bgp_node *,
  102.        afi_t, safi_t, int);
  103. int bgp_damp_update (struct bgp_info *, struct bgp_node *, afi_t, safi_t);
  104. int bgp_damp_scan (struct bgp_info *, afi_t, safi_t);
  105. void bgp_damp_info_free (struct bgp_damp_info *, int);
  106. void bgp_damp_info_clean ();
  107. char * bgp_get_reuse_time (int, char*, size_t);
  108. int bgp_damp_decay (time_t, int);
  109. int bgp_config_write_damp (struct vty *);
  110. void bgp_damp_info_vty (struct vty *, struct bgp_info *);
  111. char * bgp_damp_reuse_time_vty (struct vty *, struct bgp_info *);