From: Alberto Leiva Popper Date: Thu, 21 Jul 2022 20:58:02 +0000 (-0500) Subject: Issue #83: Add first iteration of debugging messages X-Git-Tag: 1.5.4~11^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfc2955ac9c4b520d3e2cb076bbaa9b036efba68;p=thirdparty%2FFORT-validator.git Issue #83: Add first iteration of debugging messages --- diff --git a/src/rtr/db/db_table.c b/src/rtr/db/db_table.c index f18ee15b..8fbe21ce 100644 --- a/src/rtr/db/db_table.c +++ b/src/rtr/db/db_table.c @@ -269,6 +269,25 @@ add_roa_deltas(struct hashable_roa *roas1, struct hashable_roa *roas2, return 0; } +void +find_bad_vrp(char const *prefix, struct db_table *table) +{ + struct hashable_roa *cursor; + struct hashable_roa *tmp; + uint8_t family; + + if (table == NULL) + return; + + HASH_ITER(hh, table->roas, cursor, tmp) { + family = cursor->data.addr_fam; + if (family != AF_INET && family != AF_INET6) { + pr_val_err("%s: VRP corrupted!", prefix); + return; + } + } +} + static int add_router_key_delta(struct deltas *deltas, struct hashable_key *key, int op) { diff --git a/src/rtr/db/db_table.h b/src/rtr/db/db_table.h index 8562567a..8ad9acc9 100644 --- a/src/rtr/db/db_table.h +++ b/src/rtr/db/db_table.h @@ -28,4 +28,6 @@ int rtrhandler_handle_router_key(struct db_table *, unsigned char const *, uint32_t, unsigned char const *); int compute_deltas(struct db_table *, struct db_table *, struct deltas **); +void find_bad_vrp(char const *, struct db_table *); + #endif /* SRC_RTR_DB_DB_TABLE_H_ */ diff --git a/src/rtr/db/delta.c b/src/rtr/db/delta.c index 345bb686..957b0f8d 100644 --- a/src/rtr/db/delta.c +++ b/src/rtr/db/delta.c @@ -123,6 +123,7 @@ deltas_add_roa(struct deltas *deltas, struct vrp const *vrp, int op) struct delta_v4 v4; struct delta_v6 v6; } delta; + char buffer[INET6_ADDRSTRLEN]; switch (vrp->addr_fam) { case AF_INET: @@ -139,7 +140,13 @@ deltas_add_roa(struct deltas *deltas, struct vrp const *vrp, int op) return deltas_v6_add(get_deltas_array6(deltas, op), &delta.v6); } - pr_crit("Unknown protocol: %d", vrp->addr_fam); + pr_val_err("Unknown protocol: [%u %s/%u-%u %u]", + vrp->asn, + addr2str6(&vrp->prefix.v6, buffer), + vrp->prefix_length, + vrp->max_prefix_length, + vrp->addr_fam); + return 0; } int diff --git a/src/rtr/db/vrps.c b/src/rtr/db/vrps.c index 59a9875d..0e49faf0 100644 --- a/src/rtr/db/vrps.c +++ b/src/rtr/db/vrps.c @@ -261,16 +261,20 @@ __vrps_update(bool *notify_clients) if (notify_clients) *notify_clients = false; old_base = state.base; + find_bad_vrp("Old base", old_base); new_base = NULL; error = __perform_standalone_validation(&new_base); if (error) return error; + find_bad_vrp("After standalone", new_base); + error = slurm_apply(new_base, &state.slurm); if (error) { db_table_destroy(new_base); return error; } + find_bad_vrp("After SLURM", new_base); /* * At this point, new_base is completely valid. Even if we error out @@ -280,6 +284,7 @@ __vrps_update(bool *notify_clients) * duplicate ROAs. */ output_print_data(new_base); + find_bad_vrp("After CSV", new_base); error = __compute_deltas(old_base, new_base, notify_clients, &new_deltas);