summaryrefslogtreecommitdiff
path: root/lib/asn.c
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2022-11-18 13:49:53 +0100
committerPhilippe Guibert <philippe.guibert@6wind.com>2023-02-10 10:27:23 +0100
commite84c7c12f224f27ae430f2929a9fd121b133c2b3 (patch)
tree4957646b5b93635e3b9cab8281f591cda750a89d /lib/asn.c
parent17571c4ae7fa294e031b3e614a4fa62f834d0b3d (diff)
bgpd: modify bgp as number output
A json AS number API is created in order to output a given AS number. In order to keep backward compatibility, if the as-notation uses a number, then the json is encoded as an integer, otherwise the encoding will be a string. For what is not relevant to running-configuration, the as-notation mode is the one used for the BGP instance. Also, the vty completion gets the configured 'as_pretty' string value, when an user wants to get the available BGP instances. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'lib/asn.c')
-rw-r--r--lib/asn.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/asn.c b/lib/asn.c
index 4c37cca1f6..27bff1884d 100644
--- a/lib/asn.c
+++ b/lib/asn.c
@@ -183,6 +183,20 @@ const char *asn_mode2str(enum asnotation_mode asnotation)
"Unrecognized AS notation mode");
}
+void asn_asn2json(json_object *json, const char *attr,
+ as_t asn, enum asnotation_mode asnotation)
+{
+ static char as_str[ASN_STRING_MAX_SIZE];
+
+ if ((asnotation == ASNOTATION_PLAIN) ||
+ ((asnotation == ASNOTATION_DOT) && asn < UINT16_MAX))
+ json_object_int_add(json, attr, asn);
+ else {
+ asn_asn2asdot(asn, as_str, sizeof(as_str));
+ json_object_string_add(json, attr, as_str);
+ }
+}
+
void asn_asn2json_array(json_object *jseg_list, as_t asn,
enum asnotation_mode asnotation)
{