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)
{
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_ */
struct delta_v4 v4;
struct delta_v6 v6;
} delta;
+ char buffer[INET6_ADDRSTRLEN];
switch (vrp->addr_fam) {
case AF_INET:
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
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
* 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);