Print the ASPA validation state (avs) in various show rib outputs.
authorclaudio <claudio@openbsd.org>
Tue, 24 Jan 2023 11:29:34 +0000 (11:29 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 24 Jan 2023 11:29:34 +0000 (11:29 +0000)
OK tb@

usr.sbin/bgpctl/bgpctl.c
usr.sbin/bgpctl/bgpctl.h
usr.sbin/bgpctl/output.c
usr.sbin/bgpctl/output_json.c

index a221e21..e8de3be 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bgpctl.c,v 1.288 2023/01/17 16:09:34 claudio Exp $ */
+/*     $OpenBSD: bgpctl.c,v 1.289 2023/01/24 11:29:34 claudio Exp $ */
 
 /*
  * Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -771,6 +771,19 @@ fmt_ovs(uint8_t validation_state, int sum)
        }
 }
 
+const char *
+fmt_avs(uint8_t validation_state, int sum)
+{
+       switch (validation_state) {
+       case ASPA_INVALID:
+               return (sum ? "!" : "invalid");
+       case ASPA_VALID:
+               return (sum ? "V" : "valid");
+       default:
+               return (sum ? "?" : "unknown");
+       }
+}
+
 const char *
 fmt_mem(long long num)
 {
index e911bd5..1f1788e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: bgpctl.h,v 1.18 2022/11/09 14:20:11 claudio Exp $ */
+/*     $OpenBSD: bgpctl.h,v 1.19 2023/01/24 11:29:34 claudio Exp $ */
 
 /*
  * Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
@@ -50,6 +50,7 @@ const char    *fmt_fib_flags(uint16_t);
 const char     *fmt_origin(uint8_t, int);
 const char     *fmt_flags(uint32_t, int);
 const char     *fmt_ovs(uint8_t, int);
+const char     *fmt_avs(uint8_t, int);
 const char     *fmt_auth_method(enum auth_method);
 const char     *fmt_mem(long long);
 const char     *fmt_errstr(uint8_t, uint8_t);
index 6c0b4b3..b1fa1df 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: output.c,v 1.33 2023/01/17 16:09:34 claudio Exp $ */
+/*     $OpenBSD: output.c,v 1.34 2023/01/24 11:29:34 claudio Exp $ */
 
 /*
  * Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -71,9 +71,11 @@ show_head(struct parse_result *res)
                    "       S = Stale, E = Error\n");
                printf("origin validation state: "
                    "N = not-found, V = valid, ! = invalid\n");
+               printf("aspa validation state: "
+                   "? = unknown, V = valid, ! = invalid\n");
                printf("origin: i = IGP, e = EGP, ? = Incomplete\n\n");
                printf("%-5s %3s %-20s %-15s  %5s %5s %s\n",
-                   "flags", "ovs", "destination", "gateway", "lpref", "med",
+                   "flags", "vs", "destination", "gateway", "lpref", "med",
                    "aspath origin");
                break;
        case SHOW_SET:
@@ -918,8 +920,9 @@ show_rib_brief(struct ctl_show_rib *r, u_char *asdata, size_t aslen)
 
        if (asprintf(&p, "%s/%u", log_addr(&r->prefix), r->prefixlen) == -1)
                err(1, NULL);
-       printf("%s %3s %-20s %-15s %5u %5u ",
-           fmt_flags(r->flags, 1), fmt_ovs(r->validation_state, 1), p,
+       printf("%s %s-%s %-20s %-15s %5u %5u ",
+           fmt_flags(r->flags, 1), fmt_ovs(r->roa_validation_state, 1),
+           fmt_avs(r->aspa_validation_state, 1), p,
            log_addr(&r->exit_nexthop), r->local_pref, r->med);
        free(p);
 
@@ -961,8 +964,9 @@ show_rib_detail(struct ctl_show_rib *r, u_char *asdata, size_t aslen,
 
        printf("    Origin %s, metric %u, localpref %u, weight %u, ovs %s, ",
            fmt_origin(r->origin, 0), r->med, r->local_pref, r->weight,
-           fmt_ovs(r->validation_state, 0));
-       printf("%s", fmt_flags(r->flags, 0));
+           fmt_ovs(r->roa_validation_state, 0));
+       printf("avs %s, %s", fmt_avs(r->roa_validation_state, 0),
+           fmt_flags(r->flags, 0));
 
        printf("%c    Last update: %s ago%c", EOL0(flag0),
            fmt_timeframe(r->age), EOL0(flag0));
index 115b1d3..72d2cb9 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: output_json.c,v 1.28 2023/01/17 16:09:34 claudio Exp $ */
+/*     $OpenBSD: output_json.c,v 1.29 2023/01/24 11:29:34 claudio Exp $ */
 
 /*
  * Copyright (c) 2020 Claudio Jeker <claudio@openbsd.org>
@@ -894,7 +894,8 @@ json_rib(struct ctl_show_rib *r, u_char *asdata, size_t aslen,
                json_do_bool("announced", 1);
 
        /* various attribibutes */
-       json_do_printf("ovs", "%s", fmt_ovs(r->validation_state, 0));
+       json_do_printf("ovs", "%s", fmt_ovs(r->roa_validation_state, 0));
+       json_do_printf("avs", "%s", fmt_avs(r->aspa_validation_state, 0));
        json_do_printf("origin", "%s", fmt_origin(r->origin, 0));
        json_do_uint("metric", r->med);
        json_do_uint("localpref", r->local_pref);