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

网络

开发平台:

Unix_Linux

  1. /* BGP Community list.
  2.    Copyright (C) 1999 Kunihiro Ishiguro
  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. /* Master Community-list. */
  17. #define COMMUNITY_LIST_MASTER          0
  18. #define EXTCOMMUNITY_LIST_MASTER       1
  19. /* Community-list deny and permit.  */
  20. #define COMMUNITY_DENY                 0
  21. #define COMMUNITY_PERMIT               1
  22. /* Number and string based community-list name.  */
  23. #define COMMUNITY_LIST_STRING          0
  24. #define COMMUNITY_LIST_NUMBER          1
  25. /* Community-list entry types.  */
  26. #define COMMUNITY_LIST_STANDARD        0 /* Standard community-list.  */
  27. #define COMMUNITY_LIST_EXPANDED        1 /* Expanded community-list.  */
  28. #define EXTCOMMUNITY_LIST_STANDARD     2 /* Standard extcommunity-list.  */
  29. #define EXTCOMMUNITY_LIST_EXPANDED     3 /* Expanded extcommunity-list.  */
  30. /* Community-list.  */
  31. struct community_list
  32. {
  33.   /* Name of the community-list.  */
  34.   char *name;
  35.   /* String or number.  */
  36.   int sort;
  37.   /* Link to upper list.  */
  38.   struct community_list_list *parent;
  39.   /* Linked list for other community-list.  */
  40.   struct community_list *next;
  41.   struct community_list *prev;
  42.   /* Community-list entry in this community-list.  */
  43.   struct community_entry *head;
  44.   struct community_entry *tail;
  45. };
  46. /* Each entry in community-list.  */
  47. struct community_entry
  48. {
  49.   struct community_entry *next;
  50.   struct community_entry *prev;
  51.   /* Permit or deny.  */
  52.   u_char direct;
  53.   /* Standard or expanded.  */
  54.   u_char style;
  55.   /* Any match.  */
  56.   u_char any;
  57.   /* Community structure.  */
  58.   union
  59.   {
  60.     struct community *com;
  61.     struct ecommunity *ecom;
  62.   } u;
  63.   /* Configuration string.  */
  64.   char *config;
  65.   /* Expanded community-list regular expression.  */
  66.   regex_t *reg;
  67. };
  68. /* Linked list of community-list.  */
  69. struct community_list_list
  70. {
  71.   struct community_list *head;
  72.   struct community_list *tail;
  73. };
  74. /* Master structure of community-list and extcommunity-list.  */
  75. struct community_list_master
  76. {
  77.   struct community_list_list num;
  78.   struct community_list_list str;
  79. };
  80. /* Community-list handler.  community_list_init() returns this
  81.    structure as handler.  */
  82. struct community_list_handler
  83. {
  84.   /* Community-list.  */
  85.   struct community_list_master community_list;
  86.   /* Exteded community-list.  */
  87.   struct community_list_master extcommunity_list;
  88. };
  89. /* Error code of community-list.  */
  90. #define COMMUNITY_LIST_ERR_CANT_FIND_LIST        -1
  91. #define COMMUNITY_LIST_ERR_MALFORMED_VAL         -2
  92. #define COMMUNITY_LIST_ERR_STANDARD_CONFLICT     -3
  93. #define COMMUNITY_LIST_ERR_EXPANDED_CONFLICT     -4
  94. /* Handler.  */
  95. extern struct community_list_handler *bgp_clist;
  96. /* Prototypes.  */
  97. struct community_list_handler *community_list_init ();
  98. int community_list_set (struct community_list_handler *ch,
  99. char *name, char *str, int direct, int style);
  100. int community_list_unset (struct community_list_handler *ch,
  101.   char *name, char *str, int direct, int style);
  102. int extcommunity_list_set (struct community_list_handler *ch,
  103.    char *name, char *str, int direct, int style);
  104. int extcommunity_list_unset (struct community_list_handler *ch,
  105.      char *name, char *str, int direct, int style);
  106. struct community_list_master *
  107. community_list_master_lookup (struct community_list_handler *, int);
  108. struct community_list *
  109. community_list_lookup (struct community_list_handler *, char *, int);
  110. int community_list_match (struct community *, struct community_list *);
  111. int ecommunity_list_match (struct ecommunity *, struct community_list *);
  112. int community_list_exact_match (struct community *, struct community_list *);
  113. struct community *
  114. community_list_match_delete (struct community *,
  115.      struct community_list *);