1/* AS path related definitions. 2 Copyright (C) 1997, 98, 99 Kunihiro Ishiguro 3 4This file is part of GNU Zebra. 5 6GNU Zebra is free software; you can redistribute it and/or modify it 7under the terms of the GNU General Public License as published by the 8Free Software Foundation; either version 2, or (at your option) any 9later version. 10 11GNU Zebra is distributed in the hope that it will be useful, but 12WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14General Public License for more details. 15 16You should have received a copy of the GNU General Public License 17along with GNU Zebra; see the file COPYING. If not, write to the Free 18Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 1902111-1307, USA. */ 20 21/* AS path segment type. */ 22#define AS_SET 1 23#define AS_SEQUENCE 2 24#define AS_CONFED_SEQUENCE 3 25#define AS_CONFED_SET 4 26 27/* Private AS range defined in RFC2270. */ 28#define BGP_PRIVATE_AS_MIN 64512 29#define BGP_PRIVATE_AS_MAX 65535 30 31/* AS path may be include some AsSegments. */ 32struct aspath 33{ 34 /* Reference count to this aspath. */ 35 unsigned long refcnt; 36 37 /* Rawdata length. */ 38 int length; 39 40 /* AS count. */ 41 int count; 42 43 /* Rawdata. */ 44 caddr_t data; 45 46 /* String expression of AS path. This string is used by vty output 47 and AS path regular expression match. */ 48 char *str; 49}; 50 51#define ASPATH_STR_DEFAULT_LEN 32 52 53/* Prototypes. */ 54void aspath_init (); 55struct aspath *aspath_parse (); 56struct aspath *aspath_dup (struct aspath *); 57struct aspath *aspath_aggregate (struct aspath *, struct aspath *); 58struct aspath *aspath_prepend (struct aspath *, struct aspath *); 59struct aspath *aspath_add_seq (struct aspath *, as_t); 60struct aspath *aspath_add_confed_seq (struct aspath *, as_t); 61int aspath_cmp_left (struct aspath *, struct aspath *); 62int aspath_cmp_left_confed (struct aspath *, struct aspath *); 63struct aspath *aspath_delete_confed_seq (struct aspath *); 64struct aspath *aspath_empty (); 65struct aspath *aspath_empty_get (); 66struct aspath *aspath_str2aspath (char *); 67void aspath_free (struct aspath *); 68struct aspath *aspath_intern (struct aspath *); 69void aspath_unintern (struct aspath *); 70const char *aspath_print (struct aspath *); 71void aspath_print_vty (struct vty *, struct aspath *); 72void aspath_print_all_vty (struct vty *); 73unsigned int aspath_key_make (struct aspath *); 74int aspath_loop_check (struct aspath *, as_t); 75int aspath_private_as_check (struct aspath *); 76int aspath_firstas_check (struct aspath *, as_t); 77unsigned long aspath_count (); 78