On Fri, Mar 06, 2020 at 05:53:59PM +0100, Sebastian Benoit wrote:
> Hi,
>
> generate 3 different outputs for BIRD:
> - bird v1 with IPv4 routes
> - bird v1 with IPv6 routes
> - bird v2
> when using command line option -B.
> BIRD v2 output from Robert Scheck, robert AT fedoraproject DOT org
>
>
> Note that I haven't tried this with bird 1 or 2 yet ;)
> comments, oks?
>
>
> (benno_rpki_bird.diff)
>
> diff --git usr.sbin/rpki-client/extern.h usr.sbin/rpki-client/extern.h
> index 127db60fa37..6592ea83b5e 100644
> --- usr.sbin/rpki-client/extern.h
> +++ usr.sbin/rpki-client/extern.h
> @@ -374,7 +374,9 @@ FILE *output_createtmp(char *);
> void output_cleantmp(void);
> void output_finish(FILE *);
> int output_bgpd(FILE *, struct vrp_tree *);
> -int output_bird(FILE *, struct vrp_tree *);
> +int output_bird1v4(FILE *, struct vrp_tree *);
> +int output_bird1v6(FILE *, struct vrp_tree *);
> +int output_bird2(FILE *, struct vrp_tree *);
> int output_csv(FILE *, struct vrp_tree *);
> int output_json(FILE *, struct vrp_tree *);
>
> diff --git usr.sbin/rpki-client/output-bird.c
> usr.sbin/rpki-client/output-bird.c
> index a15faa69164..0299018f8af 100644
> --- usr.sbin/rpki-client/output-bird.c
> +++ usr.sbin/rpki-client/output-bird.c
> @@ -1,6 +1,7 @@
> /* $OpenBSD: output-bird.c,v 1.6 2019/12/04 23:03:05 benno Exp $ */
> /*
> * Copyright (c) 2019 Claudio Jeker <[email protected]>
> + * Copyright (c) 2020 Robert Scheck <[email protected]>
> *
> * Permission to use, copy, modify, and distribute this software for any
> * purpose with or without fee is hereby granted, provided that the above
> @@ -21,7 +22,7 @@
> #include "extern.h"
>
> int
> -output_bird(FILE *out, struct vrp_tree *vrps)
> +output_bird1v4(FILE *out, struct vrp_tree *vrps)
> {
> extern const char *bird_tablename;
> char buf[64];
> @@ -31,10 +32,78 @@ output_bird(FILE *out, struct vrp_tree *vrps)
> return -1;
>
> RB_FOREACH(v, vrp_tree, vrps) {
> - ip_addr_print(&v->addr, v->afi, buf, sizeof(buf));
> - if (fprintf(out, "\troa %s max %u as %u;\n", buf, v->maxlength,
> - v->asid) < 0)
> + if (v->afi == AFI_IPV4) {
> + ip_addr_print(&v->addr, v->afi, buf, sizeof(buf));
> + if (fprintf(out, "\troa %s max %u as %u;\n", buf,
> + v->maxlength, v->asid) < 0)
> + return -1;
> + }
> + }
> +
> + if (fprintf(out, "}\n") < 0)
> return -1;
> + return 0;
> +}
> +
> +int
> +output_bird1v6(FILE *out, struct vrp_tree *vrps)
> +{
> + extern const char *bird_tablename;
> + char buf[64];
> + struct vrp *v;
> +
> + if (fprintf(out, "roa table %s {\n", bird_tablename) < 0)
> + return -1;
> +
> + RB_FOREACH(v, vrp_tree, vrps) {
> + if (v->afi == AFI_IPV6) {
> + ip_addr_print(&v->addr, v->afi, buf, sizeof(buf));
> + if (fprintf(out, "\troa %s max %u as %u;\n", buf,
> + v->maxlength, v->asid) < 0)
> + return -1;
> + }
> + }
> +
> + if (fprintf(out, "}\n") < 0)
> + return -1;
> + return 0;
> +}
> +
> +int
> +output_bird2(FILE *out, struct vrp_tree *vrps)
> +{
> + extern const char *bird_tablename;
> + char buf[64];
> + struct vrp *v;
> + time_t now = time(NULL);
> +
> + if (fprintf(out, "define force_roa_table_update = %lld;\n\n"
> + "roa4 table %s4;\nroa6 table %s6;\n\n"
> + "protocol static {\n\troa4 { table %s4; };\n\n",
> + (long long) now, bird_tablename, bird_tablename,
> + bird_tablename) < 0)
> + return -1;
> +
> + RB_FOREACH(v, vrp_tree, vrps) {
> + if (v->afi == AFI_IPV4) {
> + ip_addr_print(&v->addr, v->afi, buf, sizeof(buf));
> + if (fprintf(out, "\troute %s max %u as %u;\n", buf,
> + v->maxlength, v->asid) < 0)
> + return -1;
> + }
> + }
> +
> + if (fprintf(out, "}\n\nprotocol static {\n\troa6 { table %s6; };\n\n",
> + bird_tablename) < 0)
> + return -1;
> +
> + RB_FOREACH(v, vrp_tree, vrps) {
> + if (v->afi == AFI_IPV6) {
> + ip_addr_print(&v->addr, v->afi, buf, sizeof(buf));
> + if (fprintf(out, "\troute %s max %u as %u;\n", buf,
> + v->maxlength, v->asid) < 0)
> + return -1;
> + }
> }
>
> if (fprintf(out, "}\n") < 0)
> diff --git usr.sbin/rpki-client/output.c usr.sbin/rpki-client/output.c
> index adafc5c0b53..b26b964eeaa 100644
> --- usr.sbin/rpki-client/output.c
> +++ usr.sbin/rpki-client/output.c
> @@ -39,10 +39,12 @@ struct outputs {
> char *name;
> int (*fn)(FILE *, struct vrp_tree *);
> } outputs[] = {
> - { FORMAT_OPENBGPD, "openbgpd", output_bgpd },
> - { FORMAT_BIRD, "bird", output_bird },
> - { FORMAT_CSV, "csv", output_csv },
> - { FORMAT_JSON, "json", output_json },
> + { FORMAT_OPENBGPD, "openbgpd", output_bgpd },
> + { FORMAT_BIRD, "bird1v4", output_bird1v4 },
> + { FORMAT_BIRD, "bird1v6", output_bird1v6 },
> + { FORMAT_BIRD, "bird", output_bird2 },
> + { FORMAT_CSV, "csv", output_csv },
> + { FORMAT_JSON, "json", output_json },
Spaces, my god so many spaces.
> { 0, NULL }
> };
>
Apart from that OK claudio@, we can tweak and fix it more in tree :)
--
:wq Claudio