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

网络

开发平台:

Unix_Linux

  1. /* Route map function.
  2.  * Copyright (C) 1998 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. #ifndef _ZEBRA_ROUTEMAP_H
  22. #define _ZEBRA_ROUTEMAP_H
  23. /* Route map's type. */
  24. enum route_map_type
  25. {
  26.   RMAP_PERMIT,
  27.   RMAP_DENY,
  28.   RMAP_ANY
  29. };
  30. typedef enum 
  31. {
  32.   RMAP_MATCH,
  33.   RMAP_DENYMATCH,
  34.   RMAP_NOMATCH,
  35.   RMAP_ERROR,
  36.   RMAP_OKAY
  37. } route_map_result_t;
  38. typedef enum
  39. {
  40.   RMAP_RIP,
  41.   RMAP_RIPNG,
  42.   RMAP_OSPF,
  43.   RMAP_OSPF6,
  44.   RMAP_BGP
  45. } route_map_object_t;
  46. typedef enum
  47. {
  48.   RMAP_EXIT,
  49.   RMAP_GOTO,
  50.   RMAP_NEXT
  51. } route_map_end_t;
  52. typedef enum
  53. {
  54.   RMAP_EVENT_SET_ADDED,
  55.   RMAP_EVENT_SET_DELETED,
  56.   RMAP_EVENT_SET_REPLACED,
  57.   RMAP_EVENT_MATCH_ADDED,
  58.   RMAP_EVENT_MATCH_DELETED,
  59.   RMAP_EVENT_MATCH_REPLACED,
  60.   RMAP_EVENT_INDEX_ADDED,
  61.   RMAP_EVENT_INDEX_DELETED
  62. } route_map_event_t;
  63. /* Route map rule structure for matching and setting. */
  64. struct route_map_rule_cmd
  65. {
  66.   /* Route map rule name (e.g. as-path, metric) */
  67.   char *str;
  68.   /* Function for value set or match. */
  69.   route_map_result_t (*func_apply)(void *, struct prefix *, 
  70.    route_map_object_t, void *);
  71.   /* Compile argument and return result as void *. */
  72.   void *(*func_compile)(char *);
  73.   /* Free allocated value by func_compile (). */
  74.   void (*func_free)(void *);
  75. };
  76. /* Route map apply error. */
  77. enum
  78. {
  79.   /* Route map rule is missing. */
  80.   RMAP_RULE_MISSING = 1,
  81.   /* Route map rule can't compile */
  82.   RMAP_COMPILE_ERROR
  83. };
  84. /* Route map rule list. */
  85. struct route_map_rule_list
  86. {
  87.   struct route_map_rule *head;
  88.   struct route_map_rule *tail;
  89. };
  90. /* Route map index structure. */
  91. struct route_map_index
  92. {
  93.   struct route_map *map;
  94.   /* Preference of this route map rule. */
  95.   int pref;
  96.   /* Route map type permit or deny. */
  97.   enum route_map_type type;
  98.   /* Do we follow old rules, or hop forward? */
  99.   route_map_end_t exitpolicy;
  100.   /* If we're using "GOTO", to where do we go? */
  101.   int nextpref;
  102.   /* Matching rule list. */
  103.   struct route_map_rule_list match_list;
  104.   struct route_map_rule_list set_list;
  105.   /* Make linked list. */
  106.   struct route_map_index *next;
  107.   struct route_map_index *prev;
  108. };
  109. /* Route map list structure. */
  110. struct route_map
  111. {
  112.   /* Name of route map. */
  113.   char *name;
  114.   /* Route map's rule. */
  115.   struct route_map_index *head;
  116.   struct route_map_index *tail;
  117.   /* Make linked list. */
  118.   struct route_map *next;
  119.   struct route_map *prev;
  120. };
  121. /* Prototypes. */
  122. void route_map_init ();
  123. void route_map_init_vty ();
  124. /* Add match statement to route map. */
  125. int
  126. route_map_add_match (struct route_map_index *index,
  127.      char *match_name,
  128.      char *match_arg);
  129. /* Delete specified route match rule. */
  130. int
  131. route_map_delete_match (struct route_map_index *index,
  132. char *match_name,
  133. char *match_arg);
  134. /* Add route-map set statement to the route map. */
  135. int
  136. route_map_add_set (struct route_map_index *index, 
  137.    char *set_name,
  138.    char *set_arg);
  139. /* Delete route map set rule. */
  140. int
  141. route_map_delete_set (struct route_map_index *index, char *set_name,
  142.                       char *set_arg);
  143. /* Install rule command to the match list. */
  144. void
  145. route_map_install_match (struct route_map_rule_cmd *cmd);
  146. /* Install rule command to the set list. */
  147. void
  148. route_map_install_set (struct route_map_rule_cmd *cmd);
  149. /* Lookup route map by name. */
  150. struct route_map *
  151. route_map_lookup_by_name (char *name);
  152. /* Apply route map to the object. */
  153. route_map_result_t
  154. route_map_apply (struct route_map *map, struct prefix *, 
  155.  route_map_object_t object_type, void *object);
  156. void route_map_add_hook (void (*func) (char *));
  157. void route_map_delete_hook (void (*func) (char *));
  158. void route_map_event_hook (void (*func) (route_map_event_t, char *));
  159. #endif /* _ZEBRA_ROUTEMAP_H */