Annotation of embedaddon/quagga/bgpd/bgp_clist.h, revision 1.1

1.1     ! misho       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>