forked from Mirror/frr

A new keyword permits changing the BGP as-notation output: - [no] router bgp <> [vrf BLABLA] [as-notation [<dot|plain|dot+>]] At the BGP instance creation, the output will inherit the way the BGP instance is declared. For instance, the 'router bgp 1.1' command will configure the output in the dot format. However, if the client wants to choose an alternate output, he will have to add the extra command: 'router bgp 1.1 as-notation dot+'. Also, if the user wants to have plain format, even if the BGP instance is declared in dot format, the keyword can also be used for that. The as-notation output is only taken into account at the BGP instance creation. In the case where VPN instances are used, a separate instance may be dynamically created. In that case, the real as-notation format will be taken into acccount at the first configuration. Linking the as-notation format with the BGP instance makes sense, as the operators want to keep consistency of what they configure. One technical reason why to link the as-notation output with the BGP instance creation is that the as-path segment lists stored in the BGP updates use a string representation to handle aspath operations (by using regexp for instance). Changing on the fly the output needs to regenerate this string representation to the correct format. Linking the configuration to the BGP instance creation avoids refreshing the BGP updates. A similar mechanism is put in place in junos too. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
/*
|
|
* AS number structure
|
|
* Copyright 2022 6WIND
|
|
*
|
|
* This file is part of GNU Zebra.
|
|
*
|
|
* GNU Zebra is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published
|
|
* by the Free Software Foundation; either version 2, or (at your
|
|
* option) any later version.
|
|
*
|
|
* GNU Zebra is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; see the file COPYING; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _FRR_ASN_H
|
|
#define _FRR_ASN_H
|
|
|
|
#include "zebra.h"
|
|
#include "command_match.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define ASN_STRING_MAX_SIZE 12
|
|
|
|
enum asnotation_mode {
|
|
ASNOTATION_PLAIN = 0,
|
|
ASNOTATION_DOT,
|
|
ASNOTATION_DOTPLUS,
|
|
ASNOTATION_UNDEFINED,
|
|
};
|
|
|
|
typedef uint32_t as_t;
|
|
|
|
extern bool asn_str2asn(const char *asstring, as_t *asn);
|
|
extern const char *asn_asn2asplain(as_t asn);
|
|
extern const char *asn_str2asn_parse(const char *asstring, as_t *asn,
|
|
bool *found_ptr);
|
|
extern enum match_type asn_str2asn_match(const char *str);
|
|
extern bool asn_str2asn_notation(const char *asstring, as_t *asn,
|
|
enum asnotation_mode *asnotation);
|
|
extern const char *asn_mode2str(enum asnotation_mode asnotation);
|
|
/* for test */
|
|
extern void asn_relax_as_zero(bool relax);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _FRR_ASN_H */
|