File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / bgpd / bgp_clist.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:12 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: /* BGP Community list.
    2:    Copyright (C) 1999 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 _QUAGGA_BGP_CLIST_H
   22: #define _QUAGGA_BGP_CLIST_H
   23: 
   24: /* Master Community-list. */
   25: #define COMMUNITY_LIST_MASTER          0
   26: #define EXTCOMMUNITY_LIST_MASTER       1
   27: 
   28: /* Community-list deny and permit.  */
   29: #define COMMUNITY_DENY                 0
   30: #define COMMUNITY_PERMIT               1
   31: 
   32: /* Number and string based community-list name.  */
   33: #define COMMUNITY_LIST_STRING          0
   34: #define COMMUNITY_LIST_NUMBER          1
   35: 
   36: /* Community-list entry types.  */
   37: #define COMMUNITY_LIST_STANDARD        0 /* Standard community-list.  */
   38: #define COMMUNITY_LIST_EXPANDED        1 /* Expanded community-list.  */
   39: #define EXTCOMMUNITY_LIST_STANDARD     2 /* Standard extcommunity-list.  */
   40: #define EXTCOMMUNITY_LIST_EXPANDED     3 /* Expanded extcommunity-list.  */
   41: 
   42: /* Community-list.  */
   43: struct community_list
   44: {
   45:   /* Name of the community-list.  */
   46:   char *name;
   47: 
   48:   /* String or number.  */
   49:   int sort;
   50: 
   51:   /* Link to upper list.  */
   52:   struct community_list_list *parent;
   53: 
   54:   /* Linked list for other community-list.  */
   55:   struct community_list *next;
   56:   struct community_list *prev;
   57: 
   58:   /* Community-list entry in this community-list.  */
   59:   struct community_entry *head;
   60:   struct community_entry *tail;
   61: };
   62: 
   63: /* Each entry in community-list.  */
   64: struct community_entry
   65: {
   66:   struct community_entry *next;
   67:   struct community_entry *prev;
   68: 
   69:   /* Permit or deny.  */
   70:   u_char direct;
   71: 
   72:   /* Standard or expanded.  */
   73:   u_char style;
   74: 
   75:   /* Any match.  */
   76:   u_char any;
   77: 
   78:   /* Community structure.  */
   79:   union
   80:   {
   81:     struct community *com;
   82:     struct ecommunity *ecom;
   83:   } u;
   84: 
   85:   /* Configuration string.  */
   86:   char *config;
   87: 
   88:   /* Expanded community-list regular expression.  */
   89:   regex_t *reg;
   90: };
   91: 
   92: /* Linked list of community-list.  */
   93: struct community_list_list
   94: {
   95:   struct community_list *head;
   96:   struct community_list *tail;
   97: };
   98: 
   99: /* Master structure of community-list and extcommunity-list.  */
  100: struct community_list_master
  101: {
  102:   struct community_list_list num;
  103:   struct community_list_list str;
  104: };
  105: 
  106: /* Community-list handler.  community_list_init() returns this
  107:    structure as handler.  */
  108: struct community_list_handler
  109: {
  110:   /* Community-list.  */
  111:   struct community_list_master community_list;
  112: 
  113:   /* Exteded community-list.  */
  114:   struct community_list_master extcommunity_list;
  115: };
  116: 
  117: /* Error code of community-list.  */
  118: #define COMMUNITY_LIST_ERR_CANT_FIND_LIST        -1
  119: #define COMMUNITY_LIST_ERR_MALFORMED_VAL         -2
  120: #define COMMUNITY_LIST_ERR_STANDARD_CONFLICT     -3
  121: #define COMMUNITY_LIST_ERR_EXPANDED_CONFLICT     -4
  122: 
  123: /* Handler.  */
  124: extern struct community_list_handler *bgp_clist;
  125: 
  126: /* Prototypes.  */
  127: extern struct community_list_handler *community_list_init (void);
  128: extern void community_list_terminate (struct community_list_handler *);
  129: 
  130: extern int community_list_set (struct community_list_handler *ch,
  131: 			       const char *name, const char *str, int direct,
  132: 			       int style);
  133: extern int community_list_unset (struct community_list_handler *ch,
  134: 				 const char *name, const char *str,
  135: 				 int direct, int style);
  136: extern int extcommunity_list_set (struct community_list_handler *ch,
  137: 				  const char *name, const char *str,
  138: 				  int direct, int style);
  139: extern int extcommunity_list_unset (struct community_list_handler *ch,
  140: 				    const char *name, const char *str,
  141: 				    int direct, int style);
  142: 
  143: extern struct community_list_master *
  144: community_list_master_lookup (struct community_list_handler *, int);
  145: 
  146: extern struct community_list *
  147: community_list_lookup (struct community_list_handler *, const char *, int);
  148: 
  149: extern int community_list_match (struct community *, struct community_list *);
  150: extern int ecommunity_list_match (struct ecommunity *, struct community_list *);
  151: extern int community_list_exact_match (struct community *,
  152: 				       struct community_list *);
  153: extern struct community *
  154: community_list_match_delete (struct community *, struct community_list *);
  155: 
  156: #endif /* _QUAGGA_BGP_CLIST_H */

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