Annotation of embedaddon/quagga/bgpd/bgp_ecommunity.h, revision 1.1
1.1 ! misho 1: /* BGP Extended Communities Attribute.
! 2: Copyright (C) 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
! 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_ECOMMUNITY_H
! 22: #define _QUAGGA_BGP_ECOMMUNITY_H
! 23:
! 24: /* High-order octet of the Extended Communities type field. */
! 25: #define ECOMMUNITY_ENCODE_AS 0x00
! 26: #define ECOMMUNITY_ENCODE_IP 0x01
! 27: #define ECOMMUNITY_ENCODE_AS4 0x02
! 28:
! 29: /* Low-order octet of the Extended Communityes type field. */
! 30: #define ECOMMUNITY_ROUTE_TARGET 0x02
! 31: #define ECOMMUNITY_SITE_ORIGIN 0x03
! 32:
! 33: /* Extended communities attribute string format. */
! 34: #define ECOMMUNITY_FORMAT_ROUTE_MAP 0
! 35: #define ECOMMUNITY_FORMAT_COMMUNITY_LIST 1
! 36: #define ECOMMUNITY_FORMAT_DISPLAY 2
! 37:
! 38: /* Extended Communities value is eight octet long. */
! 39: #define ECOMMUNITY_SIZE 8
! 40:
! 41: /* Extended Communities type flag. */
! 42: #define ECOMMUNITY_FLAG_NON_TRANSITIVE 0x40
! 43:
! 44: /* Extended Communities attribute. */
! 45: struct ecommunity
! 46: {
! 47: /* Reference counter. */
! 48: unsigned long refcnt;
! 49:
! 50: /* Size of Extended Communities attribute. */
! 51: int size;
! 52:
! 53: /* Extended Communities value. */
! 54: u_int8_t *val;
! 55:
! 56: /* Human readable format string. */
! 57: char *str;
! 58: };
! 59:
! 60: /* Extended community value is eight octet. */
! 61: struct ecommunity_val
! 62: {
! 63: char val[ECOMMUNITY_SIZE];
! 64: };
! 65:
! 66: #define ecom_length(X) ((X)->size * ECOMMUNITY_SIZE)
! 67:
! 68: extern void ecommunity_init (void);
! 69: extern void ecommunity_finish (void);
! 70: extern void ecommunity_free (struct ecommunity **);
! 71: extern struct ecommunity *ecommunity_parse (u_int8_t *, u_short);
! 72: extern struct ecommunity *ecommunity_dup (struct ecommunity *);
! 73: extern struct ecommunity *ecommunity_merge (struct ecommunity *, struct ecommunity *);
! 74: extern struct ecommunity *ecommunity_intern (struct ecommunity *);
! 75: extern int ecommunity_cmp (const void *, const void *);
! 76: extern void ecommunity_unintern (struct ecommunity **);
! 77: extern unsigned int ecommunity_hash_make (void *);
! 78: extern struct ecommunity *ecommunity_str2com (const char *, int, int);
! 79: extern char *ecommunity_ecom2str (struct ecommunity *, int);
! 80: extern int ecommunity_match (const struct ecommunity *, const struct ecommunity *);
! 81: extern char *ecommunity_str (struct ecommunity *);
! 82:
! 83: #endif /* _QUAGGA_BGP_ECOMMUNITY_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>