]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Issue #83: Add first iteration of debugging messages
authorAlberto Leiva Popper <ydahhrk@gmail.com>
Thu, 21 Jul 2022 20:58:02 +0000 (15:58 -0500)
committerAlberto Leiva Popper <ydahhrk@gmail.com>
Thu, 21 Jul 2022 20:58:02 +0000 (15:58 -0500)
src/rtr/db/db_table.c
src/rtr/db/db_table.h
src/rtr/db/delta.c
src/rtr/db/vrps.c

index f18ee15bba6ae0739bfd614eada4b343d8e03539..8fbe21ce9ea5aeaac32000ac49f7beec80c9ba99 100644 (file)
@@ -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)
 {
index 8562567ade7c11b019a931f0f0389d7fd9d50975..8ad9acc9cd1b33e32b1d0578d93cbb7c7e462d9a 100644 (file)
@@ -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_ */
index 345bb6862ce8c4d6e2394d3fc32461dcd7588b60..957b0f8dd389f7ee089f891d181e30b86283d7b9 100644 (file)
@@ -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
index 59a9875d6471e727cc381967fda9750b43615416..0e49faf0f080b2bd9611fc9f88291630733ccb99 100644 (file)
@@ -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);