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

网络

开发平台:

Unix_Linux

  1. /* BGP Extended Communities Attribute.
  2.    Copyright (C) 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
  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. /* Extended Communities Transitive flag. */
  17. #define ECOMMUNITY_FLAG_NON_TRANSITIVE      0x40  
  18. /* High-order octet of the Extended Communities type field.  */
  19. #define ECOMMUNITY_ENCODE_AS                0x00
  20. #define ECOMMUNITY_ENCODE_IP                0x01
  21. #define ECOMMUNITY_ENCODE_4OCTET_AS         0x02
  22. #define ECOMMUNITY_ENCODE_OPAQUE            0x03
  23. /* Low-order octet of the Extended Communityes type field.  */
  24. #define ECOMMUNITY_TYPE_COST_COMMUNITY      0x01
  25. #define ECOMMUNITY_TYPE_ROUTE_TARGET        0x02
  26. #define ECOMMUNITY_TYPE_SITE_ORIGIN         0x03
  27. /* High-order octet and Low-order octet of the Extended Communityes type field.  */
  28. #define ECOMMUNITY_COST_COMMUNITY         0x4301
  29. /* Extended communities attribute string format.  */
  30. #define ECOMMUNITY_FORMAT_CONFIG               0
  31. #define ECOMMUNITY_FORMAT_DISPLAY              1
  32. #define ECOMMUNITY_FORMAT_RMAP                 2
  33. /* Extended communities Cost Community */
  34. #define ECOMMUNITY_COST_POI_IGP              129
  35. /* Extended Communities value is eight octet long. */
  36. #define ECOMMUNITY_SIZE                        8
  37.  
  38. /* Cost community default value. */
  39. #define COST_COMMUNITY_DEFAULT_COST   0x7FFFFFFF
  40. /* Extended Communities attribute.  */
  41. struct ecommunity
  42. {
  43.   /* Reference counter.  */
  44.   unsigned long refcnt;
  45.   /* Size of Extended Communities attribute.  */
  46.   int size;
  47.   /* Extended Communities value.  */
  48.   u_char *val;
  49.   /* Human readable format string.  */
  50.   char *str;
  51. };
  52. /* Extended community value is eight octet.  */
  53. struct ecommunity_val
  54. {
  55.   char val[ECOMMUNITY_SIZE];
  56. };
  57. struct ecommunity_cost
  58. {
  59.   u_int16_t type;
  60.   u_char poi;
  61.   u_char id;
  62.   u_int32_t val;
  63. };
  64. #define ecom_length(X)    ((X)->size * ECOMMUNITY_SIZE)
  65. void ecommunity_init (void);
  66. void ecommunity_free (struct ecommunity *);
  67. struct ecommunity *ecommunity_new (void);
  68. struct ecommunity *ecommunity_parse (char *, u_short);
  69. struct ecommunity *ecommunity_dup (struct ecommunity *);
  70. struct ecommunity *ecommunity_merge (struct ecommunity *, struct ecommunity *);
  71. struct ecommunity *ecommunity_intern (struct ecommunity *);
  72. int ecommunity_cmp (struct ecommunity *, struct ecommunity *);
  73. void ecommunity_unintern (struct ecommunity *);
  74. unsigned int ecommunity_hash_make (struct ecommunity *);
  75. struct ecommunity *ecommunity_str2com (char *, int, int);
  76. char *ecommunity_ecom2str (struct ecommunity *, int);
  77. int ecommunity_match (struct ecommunity *, struct ecommunity *);
  78. char *ecommunity_str (struct ecommunity *);
  79. struct ecommunity *ecommunity_cost_str2com (char *, u_char);
  80. int ecommunity_cost_cmp (struct ecommunity *, struct ecommunity *, u_char);