]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Core: Relocate basic data types
authorAlberto Leiva Popper <ydahhrk@gmail.com>
Thu, 28 Oct 2021 01:53:21 +0000 (20:53 -0500)
committerAlberto Leiva Popper <ydahhrk@gmail.com>
Thu, 28 Oct 2021 16:48:31 +0000 (11:48 -0500)
Helps the code review. Some structs and functions (such as
struct delta_router_key and router_key_print()) were bleeding into
mostly unrelated modules, and there were a couple of data types (struct
v4_address and struct v6_address) that were only used once, and induced
needless copying.

63 files changed:
src/Makefile.am
src/asn1/content_info.h
src/cert_stack.h
src/crypto/hash.h
src/http/http.h
src/object/certificate.h
src/object/crl.h
src/object/ghostbusters.h
src/object/manifest.h
src/object/roa.h
src/object/tal.h
src/output_printer.c
src/resource.c
src/resource.h
src/resource/ip4.h
src/resource/ip6.h
src/rpp.c
src/rpp.h
src/rrdp/rrdp_loader.h
src/rrdp/rrdp_parser.h
src/rsync/rsync.h
src/rtr/db/db_table.c
src/rtr/db/db_table.h
src/rtr/db/delta.c
src/rtr/db/delta.h
src/rtr/db/deltas_array.c
src/rtr/db/deltas_array.h
src/rtr/db/roa.c [deleted file]
src/rtr/db/roa.h [deleted file]
src/rtr/db/vrp.h [deleted file]
src/rtr/db/vrps.c
src/rtr/db/vrps.h
src/rtr/pdu.c
src/rtr/pdu.h
src/rtr/pdu_sender.h
src/rtr/rtr.c
src/slurm/db_slurm.c
src/slurm/db_slurm.h
src/slurm/slurm_parser.c
src/types/address.c [moved from src/address.c with 96% similarity]
src/types/address.h [moved from src/address.h with 85% similarity]
src/types/delta.c [moved from src/rtr/db/vrp.c with 53% similarity]
src/types/delta.h [new file with mode: 0644]
src/types/router_key.c [moved from src/object/router_key.c with 58% similarity]
src/types/router_key.h [moved from src/object/router_key.h with 79% similarity]
src/types/serial.c [moved from src/serial.c with 90% similarity]
src/types/serial.h [moved from src/serial.h with 56% similarity]
src/types/uri.c [moved from src/uri.c with 99% similarity]
src/types/uri.h [moved from src/uri.h with 94% similarity]
src/types/vrp.c [new file with mode: 0644]
src/types/vrp.h [new file with mode: 0644]
src/validation_handler.h
test/Makefile.am
test/rsync_test.c
test/rtr/db/db_table_test.c
test/rtr/db/deltas_array_test.c
test/rtr/db/rtr_db_impersonator.c
test/rtr/db/vrps_test.c
test/rtr/pdu_handler_test.c
test/tal_test.c
test/types/address_test.c [moved from test/address_test.c with 99% similarity]
test/types/serial_test.c [moved from test/serial_test.c with 99% similarity]
test/types/uri_test.c [moved from test/uri_test.c with 98% similarity]

index cc01d63282148b07134cc2bce0735c834f169077..7d227a196b1c00670b2de726a6572ef906663dc6 100644 (file)
@@ -6,7 +6,6 @@ bin_PROGRAMS = fort
 
 fort_SOURCES  = main.c
 
-fort_SOURCES += address.h address.c
 fort_SOURCES += algorithm.h algorithm.c
 fort_SOURCES += certificate_refs.h certificate_refs.c
 fort_SOURCES += cert_stack.h cert_stack.c
@@ -28,12 +27,10 @@ fort_SOURCES += random.h random.c
 fort_SOURCES += reqs_errors.h reqs_errors.c
 fort_SOURCES += resource.h resource.c
 fort_SOURCES += rpp.h rpp.c
-fort_SOURCES += serial.h serial.c
 fort_SOURCES += sorted_array.h sorted_array.c
 fort_SOURCES += state.h state.c
 fort_SOURCES += str_token.h str_token.c
 fort_SOURCES += thread_var.h thread_var.c
-fort_SOURCES += uri.h uri.c
 fort_SOURCES += json_handler.h json_handler.c
 fort_SOURCES += validation_handler.h validation_handler.c
 fort_SOURCES += validation_run.h validation_run.c
@@ -44,6 +41,13 @@ fort_SOURCES += asn1/decode.h asn1/decode.c
 fort_SOURCES += asn1/oid.h asn1/oid.c
 fort_SOURCES += asn1/signed_data.h asn1/signed_data.c
 
+fort_SOURCES += types/address.h types/address.c
+fort_SOURCES += types/delta.c types/delta.h
+fort_SOURCES += types/router_key.c types/router_key.h
+fort_SOURCES += types/serial.h types/serial.c
+fort_SOURCES += types/uri.h types/uri.c
+fort_SOURCES += types/vrp.c types/vrp.h
+
 fort_SOURCES += config/boolean.c config/boolean.h
 fort_SOURCES += config/filename_format.h config/filename_format.c
 fort_SOURCES += config/log_conf.h config/log_conf.c
@@ -80,7 +84,6 @@ fort_SOURCES += object/ghostbusters.h object/ghostbusters.c
 fort_SOURCES += object/manifest.h object/manifest.c
 fort_SOURCES += object/name.h object/name.c
 fort_SOURCES += object/roa.h object/roa.c
-fort_SOURCES += object/router_key.c object/router_key.h
 fort_SOURCES += object/signed_object.h object/signed_object.c
 fort_SOURCES += object/tal.h object/tal.c
 fort_SOURCES += object/vcard.h object/vcard.c
@@ -110,8 +113,7 @@ fort_SOURCES += rtr/rtr.c rtr/rtr.h
 fort_SOURCES += rtr/db/db_table.c rtr/db/db_table.h
 fort_SOURCES += rtr/db/delta.c rtr/db/delta.h
 fort_SOURCES += rtr/db/deltas_array.c rtr/db/deltas_array.h
-fort_SOURCES += rtr/db/roa.c rtr/db/roa.h
-fort_SOURCES += rtr/db/vrp.c rtr/db/vrp.h
+fort_SOURCES += rtr/db/roa.h
 fort_SOURCES += rtr/db/vrps.c rtr/db/vrps.h
 
 fort_SOURCES += slurm/db_slurm.c slurm/db_slurm.h
index ce7e93a444cc249c3fd36895b8bb8e3671891e13..862510bde1c788cb7bfa3978b21c440bcd51e68c 100644 (file)
@@ -3,7 +3,7 @@
 
 /* Some wrappers for asn1/asn1c/ContentInfo.h. */
 
-#include "uri.h"
+#include "types/uri.h"
 #include "asn1/asn1c/ContentInfo.h"
 
 int content_info_load(struct rpki_uri *, struct ContentInfo **);
index 631573ae38dcb49f41e28cd1f54e97e55f1d2a11..61c209f4c4f37b7d2790c000ff8aa41fff78d9b6 100644 (file)
@@ -4,9 +4,9 @@
 #include <openssl/x509.h>
 #include <stdbool.h>
 #include "resource.h"
-#include "uri.h"
 #include "object/certificate.h"
 #include "object/name.h"
+#include "types/uri.h"
 
 /*
  * One certificate stack is allocated per validation cycle, and it is used
index d9f31af2dcfd7fad066f937da6317e4ce2e52b6b..31ae305dd56cf957c66dace1d6cd85505c84a8a2 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <stdbool.h>
 #include <stddef.h>
-#include "uri.h"
+#include "types/uri.h"
 #include "asn1/asn1c/BIT_STRING.h"
 
 int hash_validate_mft_file(char const *, struct rpki_uri *uri,
index 717119d90c969e78763982e559ff102d8b5e8b9d..1dc40221a403f7035d77ed04171d22c450e95e87 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <stdbool.h>
 #include <stddef.h>
-#include "uri.h"
+#include "types/uri.h"
 
 /* Init on the main process */
 int http_init(void);
index d5bad7716585b71f170fb292ab528a77e4769795..b6a18b5954eeb3221ca4e9c0c38a8103b322061c 100644 (file)
@@ -6,7 +6,7 @@
 #include "certificate_refs.h"
 #include "resource.h"
 #include "rpp.h"
-#include "uri.h"
+#include "types/uri.h"
 #include "asn1/asn1c/ANY.h"
 #include "asn1/asn1c/SignatureValue.h"
 
index b71fa7f83158bd3568e9dc12f84790715636486a..3c80d470c48d0caead6d22ee047900e1ae8de357 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_OBJECT_CRL_H_
 
 #include <openssl/x509.h>
-#include "uri.h"
+#include "types/uri.h"
 
 int crl_load(struct rpki_uri *uri, X509_CRL **);
 
index e6b04666b95217c923415be0fa6f4163a3ea8b48..f93db38b954f291071fcf6defa4e8d1e67a1d1b8 100644 (file)
@@ -1,8 +1,8 @@
 #ifndef SRC_OBJECT_GHOSTBUSTERS_H_
 #define SRC_OBJECT_GHOSTBUSTERS_H_
 
-#include "uri.h"
 #include "rpp.h"
+#include "types/uri.h"
 
 int ghostbusters_traverse(struct rpki_uri *, struct rpp *);
 
index dbfc0bd68eb13dda2c6e1782ef55fcd9ea1aa2fe..e127cd5407736b3c76be12b88e3452192998b5ac 100644 (file)
@@ -2,7 +2,6 @@
 #define SRC_OBJECT_MANIFEST_H_
 
 #include <stdbool.h>
-#include "uri.h"
 #include "rpp.h"
 
 int handle_manifest(struct rpki_uri *, bool, struct rpp **);
index 09183026258b6d93161511affe13c5126f4e248f..e8de49b541f08afe39a06de3282da3aedcdcae07 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef SRC_OBJECT_ROA_H_
 #define SRC_OBJECT_ROA_H_
 
-#include "address.h"
 #include "rpp.h"
-#include "uri.h"
+#include "types/address.h"
+#include "types/uri.h"
 
 int roa_traverse(struct rpki_uri *, struct rpp *);
 
index 4acc91624928bf679e9f27ceafa0712f60a15654..aa376dfb3f58fcc645571721bbd5cdc3ee57ed66 100644 (file)
@@ -4,7 +4,7 @@
 /* This is RFC 8630. */
 
 #include <stddef.h>
-#include "uri.h"
+#include "types/uri.h"
 #include "rtr/db/db_table.h"
 #include "thread/thread_pool.h"
 
index 0803828b9344d0c86f6116c07f2fbfdb095e8717..34edcf869412e08960925c975a9930647a5b8bcd 100644 (file)
@@ -6,7 +6,7 @@
 #include "file.h"
 #include "log.h"
 #include "crypto/base64.h"
-#include "rtr/db/vrp.h"
+#include "types/vrp.h"
 
 static char addr_buf[INET6_ADDRSTRLEN];
 
index 228b255a222daa1fc8f59145f760f7b3db1608e6..92c8f11fb36d581579d477645b5293f1b34d0bdc 100644 (file)
@@ -3,10 +3,10 @@
 #include <errno.h>
 #include <stdint.h> /* UINT32_MAX */
 
-#include "address.h"
 #include "log.h"
 #include "sorted_array.h"
 #include "thread_var.h"
+#include "types/address.h"
 #include "resource/ip4.h"
 #include "resource/ip6.h"
 #include <sys/socket.h>
index 450c8c2ed55f0e68dd3b1f75392c28c2ccc12031..23055fd2875117f9d6bbd6859e405f89a026ff04 100644 (file)
@@ -2,8 +2,8 @@
 #define SRC_RESOURCE_H_
 
 #include <stdbool.h>
-#include "address.h"
 #include "resource/asn.h"
+#include "types/address.h"
 #include "asn1/asn1c/ASIdentifiers.h"
 #include "asn1/asn1c/IPAddressFamily.h"
 
index bf4db9b45bf77286a5c4b3f34699e7b763df5440..861e888f749e0e05a51cf5ad1a30e7503469541b 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_RESOURCE_IP4_H_
 
 #include <stdbool.h>
-#include "address.h"
+#include "types/address.h"
 
 struct resources_ipv4;
 
index 6e78c805cb89be9645bb5b8fa5d6323b527dfae5..ce962110e7ce9ef9cb3db756cb68238ec4139380 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_RESOURCE_IP6_H_
 
 #include <stdbool.h>
-#include "address.h"
+#include "types/address.h"
 
 struct resources_ipv6;
 
index f7bdd34d832f9507042616495e8fed947704b7e0..cd9ea95cd319f7ea7f0bd050b240b70ada81d6bc 100644 (file)
--- a/src/rpp.c
+++ b/src/rpp.c
@@ -4,7 +4,7 @@
 #include "cert_stack.h"
 #include "log.h"
 #include "thread_var.h"
-#include "uri.h"
+#include "types/uri.h"
 #include "data_structure/array_list.h"
 #include "object/certificate.h"
 #include "object/crl.h"
index 546ad684d7e72713153b89656c5dd17e3242932b..ba75d256c5a6125ae01771b7b069467bdb7bbd05 100644 (file)
--- a/src/rpp.h
+++ b/src/rpp.h
@@ -1,7 +1,7 @@
 #ifndef SRC_RPP_H_
 #define SRC_RPP_H_
 
-#include "uri.h"
+#include "types/uri.h"
 
 struct rpp;
 
index 2cf8f8b0f9690d0e7cb9d6cb78470a7fe40549bc..838e4fab1f26d1986a6b46d0e9fffd9a89ea7427 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_RRDP_RRDP_LOADER_H_
 
 #include <stdbool.h>
-#include "uri.h"
+#include "types/uri.h"
 
 int rrdp_load(struct rpki_uri *, bool *);
 int rrdp_reload_snapshot(struct rpki_uri *);
index c774ba40dd6bdc768b9ad65f7b030a6570e1edfb..3aff47087c2950e63de253b3eb8b57d73e98f9d1 100644 (file)
@@ -2,8 +2,8 @@
 #define SRC_RRDP_RRDP_PARSER_H_
 
 #include <stdbool.h>
+#include "types/uri.h"
 #include "rrdp/rrdp_objects.h"
-#include "uri.h"
 #include "visited_uris.h"
 
 int rrdp_parse_notification(struct rpki_uri *, bool, bool,
index a19682be67f3fcddf6745b2e74100b5cfe257cac..b5f8e6edcf0898b554287ef487e4608277b94e48 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_RSYNC_RSYNC_H_
 
 #include <stdbool.h>
-#include "uri.h"
+#include "types/uri.h"
 
 struct uri_list;
 
index 60f218412db81677a86fcc59379d588025a5e027..21af1b3d9263a782242506d3383e63c29995ebd6 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <sys/types.h> /* AF_INET, AF_INET6 (needed in OpenBSD) */
 #include <sys/socket.h> /* AF_INET, AF_INET6 (needed in OpenBSD) */
+
+#include "log.h"
 #include "data_structure/uthash_nonfatal.h"
 
 struct hashable_roa {
@@ -231,30 +233,6 @@ rtrhandler_handle_router_key(struct db_table *table,
        return error;
 }
 
-static int
-add_roa_delta(struct deltas *deltas, struct hashable_roa *roa, int op)
-{
-       union {
-               struct v4_address v4;
-               struct v6_address v6;
-       } addr;
-
-       switch (roa->data.addr_fam) {
-       case AF_INET:
-               addr.v4.prefix.addr = roa->data.prefix.v4;
-               addr.v4.prefix.len = roa->data.prefix_length;
-               addr.v4.max_length = roa->data.max_prefix_length;
-               return deltas_add_roa_v4(deltas, roa->data.asn, &addr.v4, op);
-       case AF_INET6:
-               addr.v6.prefix.addr = roa->data.prefix.v6;
-               addr.v6.prefix.len = roa->data.prefix_length;
-               addr.v6.max_length = roa->data.max_prefix_length;
-               return deltas_add_roa_v6(deltas, roa->data.asn, &addr.v6, op);
-       }
-
-       pr_crit("Unknown address family: %d", roa->data.addr_fam);
-}
-
 /*
  * Copies `@roas1 - roas2` into @deltas.
  *
@@ -271,7 +249,7 @@ add_roa_deltas(struct hashable_roa *roas1, struct hashable_roa *roas2,
        for (n1 = roas1; n1 != NULL; n1 = n1->hh.next) {
                HASH_FIND(hh, roas2, &n1->data, sizeof(n1->data), n2);
                if (n2 == NULL) {
-                       error = add_roa_delta(deltas, n1, op);
+                       error = deltas_add_roa(deltas, &n1->data, op);
                        if (error)
                                return error;
                }
index 8574244d9f650164eff62586c41e515e75b9c096..603bd702928c6e156e9fb6f627a86fb855680fc0 100644 (file)
@@ -1,8 +1,9 @@
 #ifndef SRC_RTR_DB_DB_TABLE_H_
 #define SRC_RTR_DB_DB_TABLE_H_
 
+#include "types/address.h"
+#include "types/vrp.h"
 #include "rtr/db/delta.h"
-#include "rtr/db/vrp.h"
 
 struct db_table;
 
index d8ecf9174d2d7cec9d0645d61bb54aef6a12e986..345bb6862ce8c4d6e2394d3fc32461dcd7588b60 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdatomic.h>
 #include <sys/types.h> /* AF_INET, AF_INET6 (needed in OpenBSD) */
 #include <sys/socket.h> /* AF_INET, AF_INET6 (needed in OpenBSD) */
+#include "types/address.h"
 #include "data_structure/array_list.h"
 
 struct delta_v4 {
@@ -89,46 +90,58 @@ deltas_refput(struct deltas *deltas)
        }
 }
 
-int
-deltas_add_roa_v4(struct deltas *deltas, uint32_t as,
-    struct v4_address const *addr, int op)
+static struct deltas_v4 *
+get_deltas_array4(struct deltas *deltas, int op)
 {
-       struct delta_v4 delta = {
-               .as = as,
-               .prefix = addr->prefix,
-               .max_length = addr->max_length,
-       };
-
        switch (op) {
        case FLAG_ANNOUNCEMENT:
-               return deltas_v4_add(&deltas->v4.adds, &delta);
+               return &deltas->v4.adds;
        case FLAG_WITHDRAWAL:
-               return deltas_v4_add(&deltas->v4.removes, &delta);
+               return &deltas->v4.removes;
        }
 
        pr_crit("Unknown delta operation: %d", op);
 }
 
-int
-deltas_add_roa_v6(struct deltas *deltas, uint32_t as,
-    struct v6_address const *addr, int op)
+static struct deltas_v6 *
+get_deltas_array6(struct deltas *deltas, int op)
 {
-       struct delta_v6 delta = {
-               .as = as,
-               .prefix = addr->prefix,
-               .max_length = addr->max_length,
-       };
-
        switch (op) {
        case FLAG_ANNOUNCEMENT:
-               return deltas_v6_add(&deltas->v6.adds, &delta);
+               return &deltas->v6.adds;
        case FLAG_WITHDRAWAL:
-               return deltas_v6_add(&deltas->v6.removes, &delta);
+               return &deltas->v6.removes;
        }
 
        pr_crit("Unknown delta operation: %d", op);
 }
 
+int
+deltas_add_roa(struct deltas *deltas, struct vrp const *vrp, int op)
+{
+       union {
+               struct delta_v4 v4;
+               struct delta_v6 v6;
+       } delta;
+
+       switch (vrp->addr_fam) {
+       case AF_INET:
+               delta.v4.as = vrp->asn;
+               delta.v4.prefix.addr = vrp->prefix.v4;
+               delta.v4.prefix.len = vrp->prefix_length;
+               delta.v4.max_length = vrp->max_prefix_length;
+               return deltas_v4_add(get_deltas_array4(deltas, op), &delta.v4);
+       case AF_INET6:
+               delta.v6.as = vrp->asn;
+               delta.v6.prefix.addr = vrp->prefix.v6;
+               delta.v6.prefix.len = vrp->prefix_length;
+               delta.v6.max_length = vrp->max_prefix_length;
+               return deltas_v6_add(get_deltas_array6(deltas, op), &delta.v6);
+       }
+
+       pr_crit("Unknown protocol: %d", vrp->addr_fam);
+}
+
 int
 deltas_add_router_key(struct deltas *deltas, struct router_key const *key,
     int op)
index 693b9d815a5e4a42451ec352c303144223a0278e..f88aae34ab7b00d07d16fd2a4fb8a533e2aef31f 100644 (file)
@@ -1,9 +1,7 @@
 #ifndef SRC_DELTA_H_
 #define SRC_DELTA_H_
 
-#include "object/router_key.h"
-#include "rtr/db/roa.h"
-#include "rtr/db/vrp.h"
+#include "types/delta.h"
 
 struct deltas;
 
@@ -11,8 +9,7 @@ int deltas_create(struct deltas **);
 void deltas_refget(struct deltas *);
 void deltas_refput(struct deltas *);
 
-int deltas_add_roa_v4(struct deltas *, uint32_t, struct v4_address const *, int);
-int deltas_add_roa_v6(struct deltas *, uint32_t, struct v6_address const *, int);
+int deltas_add_roa(struct deltas *, struct vrp const *, int);
 int deltas_add_router_key(struct deltas *, struct router_key const *, int);
 
 bool deltas_is_empty(struct deltas *);
index ce035b2d64801191d916dcd9ca0903120dee1f08..63bb1dd62ef52e61ab6813e2a79b963692163728 100644 (file)
@@ -1,5 +1,9 @@
 #include "rtr/db/deltas_array.h"
 
+#include <limits.h>
+#include <errno.h>
+#include "config.h"
+
 struct deltas_array {
        struct deltas **array; /* It's a circular array. */
        unsigned int len; /* Occupied slots. */
index 5866682db7b0157341380187cb3d9b28cf52d6c7..085b50784ee1018524af464e34cbfced10f23fc2 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef SRC_RTR_DB_DELTAS_ARRAY_H_
 #define SRC_RTR_DB_DELTAS_ARRAY_H_
 
-#include "serial.h"
+#include "types/serial.h"
 #include "rtr/db/delta.h"
 
 struct deltas_array;
diff --git a/src/rtr/db/roa.c b/src/rtr/db/roa.c
deleted file mode 100644 (file)
index 9537a09..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "rtr/db/roa.h"
-
-DEFINE_ARRAY_LIST_FUNCTIONS(v4_addresses, struct v4_address, static)
-DEFINE_ARRAY_LIST_FUNCTIONS(v6_addresses, struct v6_address, static)
-
-int
-roa_create(uint32_t as, struct roa **_result)
-{
-       struct roa *result;
-
-       result = malloc(sizeof(struct roa));
-       if (result == NULL)
-               return pr_enomem();
-
-       result->as = as;
-       v4_addresses_init(&result->addrs4);
-       v6_addresses_init(&result->addrs6);
-
-       *_result = result;
-       return 0;
-}
-
-void
-roa_destroy(struct roa *roa)
-{
-       v4_addresses_cleanup(&roa->addrs4, NULL);
-       v6_addresses_cleanup(&roa->addrs6, NULL);
-}
-
-int
-roa_add_v4(struct roa *roa, uint32_t as, struct ipv4_prefix const *prefix,
-    uint8_t max_length)
-{
-       struct v4_address addr;
-
-       if (roa->as != as) {
-               return pr_val_err("ROA has more than one ASN. (%u and %u)",
-                   roa->as, as);
-       }
-
-       addr.prefix = *prefix;
-       addr.max_length = max_length;
-       return v4_addresses_add(&roa->addrs4, &addr);
-}
-
-int
-roa_add_v6(struct roa *roa, uint32_t as, struct ipv6_prefix const *prefix,
-    uint8_t max_length)
-{
-       struct v6_address addr;
-
-       if (roa->as != as) {
-               return pr_val_err("ROA has more than one ASN. (%u and %u)",
-                   roa->as, as);
-       }
-
-       addr.prefix = *prefix;
-       addr.max_length = max_length;
-       return v6_addresses_add(&roa->addrs6, &addr);
-}
diff --git a/src/rtr/db/roa.h b/src/rtr/db/roa.h
deleted file mode 100644 (file)
index e49f735..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef SRC_RTR_DB_ROA_H_
-#define SRC_RTR_DB_ROA_H_
-
-#include "address.h"
-#include "data_structure/array_list.h"
-
-struct v4_address {
-       struct ipv4_prefix prefix;
-       uint8_t max_length;
-};
-
-struct v6_address {
-       struct ipv6_prefix prefix;
-       uint8_t max_length;
-};
-
-DEFINE_ARRAY_LIST_STRUCT(v4_addresses, struct v4_address);
-DEFINE_ARRAY_LIST_STRUCT(v6_addresses, struct v6_address);
-
-struct roa {
-       uint32_t as;
-       struct v4_addresses addrs4;
-       struct v6_addresses addrs6;
-};
-
-int roa_create(uint32_t, struct roa **);
-void roa_destroy(struct roa *);
-
-int roa_add_v4(struct roa *, uint32_t, struct ipv4_prefix const *, uint8_t);
-int roa_add_v6(struct roa *, uint32_t, struct ipv6_prefix const *, uint8_t);
-
-#endif /* SRC_RTR_DB_ROA_H_ */
diff --git a/src/rtr/db/vrp.h b/src/rtr/db/vrp.h
deleted file mode 100644 (file)
index f7f1054..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef SRC_RTR_DB_VRP_H_
-#define SRC_RTR_DB_VRP_H_
-
-#include <netinet/in.h>
-#include "address.h"
-#include "object/router_key.h"
-
-#define FLAG_WITHDRAWAL                0
-#define FLAG_ANNOUNCEMENT      1
-
-#define VRP_ASN_EQ(a, b)                                               \
-       (a)->asn == (b)->asn
-
-#define VRP_MAX_PREFIX_LEN_EQ(a, b)                                    \
-       (a)->max_prefix_length == (b)->max_prefix_length
-
-#define SAME_ADDR_FAM(a, b, fam)                                       \
-       (a)->addr_fam == fam &&                                         \
-       (b)->addr_fam == fam
-
-#define VRP_PREFIX_V4_EQ(a, b)                                         \
-       (SAME_ADDR_FAM(a, b, AF_INET) &&                                \
-       (a)->prefix.v4.s_addr == (b)->prefix.v4.s_addr &&               \
-       (a)->prefix_length == (b)->prefix_length)
-
-#define VRP_PREFIX_V4_COV(a, b)                                                \
-       (SAME_ADDR_FAM(a, b, AF_INET) &&                                \
-       ipv4_covered(&(a)->prefix.v4, (a)->prefix_length,               \
-           &(b)->prefix.v4) &&                                         \
-       (a)->prefix_length <= (b)->prefix_length)
-
-#define VRP_PREFIX_V6_EQ(a, b)                                         \
-       (SAME_ADDR_FAM(a, b, AF_INET6) &&                               \
-       IN6_ARE_ADDR_EQUAL(&(a)->prefix.v6, &(b)->prefix.v6) &&         \
-       (a)->prefix_length == (b)->prefix_length)
-
-#define VRP_PREFIX_V6_COV(a, b)                                                \
-       (SAME_ADDR_FAM(a, b, AF_INET6) &&                               \
-       ipv6_covered(&(a)->prefix.v6, (a)->prefix_length,               \
-           &(b)->prefix.v6) &&                                         \
-       (a)->prefix_length <= (b)->prefix_length)
-
-#define VRP_PREFIX_EQ(a, b)                                            \
-       (VRP_PREFIX_V4_EQ(a, b) || VRP_PREFIX_V6_EQ(a, b))
-
-/* Checks if 'a' equals or covers 'b' */
-#define VRP_PREFIX_COV(a, b)                                           \
-       (VRP_PREFIX_V4_COV(a, b) || VRP_PREFIX_V6_COV(a, b))
-
-#define VRP_EQ(a, b)                                                   \
-       (VRP_ASN_EQ(a, b) && VRP_PREFIX_EQ(a, b) && VRP_MAX_PREFIX_LEN_EQ(a, b))
-
-/*
- * A ROA.
- *
- * I think it's called "VRP" ("Validated ROA Payload") because it was originally
- * meant to represent an already validated ROA, and used exclusively by the RTR
- * code. But it doesn't matter anymore.
- */
-struct vrp {
-       uint32_t asn;
-       union {
-               struct in_addr v4;
-               struct in6_addr v6;
-       } prefix;
-       uint8_t prefix_length;
-       uint8_t max_prefix_length;
-       uint8_t addr_fam;
-};
-
-struct delta_vrp {
-       struct vrp vrp;
-       uint8_t flags;
-};
-
-struct delta_router_key {
-       struct router_key router_key;
-       uint8_t flags;
-};
-
-typedef int (*vrp_foreach_cb)(struct vrp const *, void *);
-typedef int (*router_key_foreach_cb)(struct router_key const *, void *);
-
-typedef int (*delta_vrp_foreach_cb)(struct delta_vrp const *, void *);
-typedef int (*delta_router_key_foreach_cb)(struct delta_router_key const *,
-    void *);
-
-int vrp_print(struct vrp const *, void *);
-int delta_vrp_print(struct delta_vrp const *, void *);
-int router_key_print(struct router_key const *, void *);
-int delta_rk_print(struct delta_router_key const *, void *);
-
-#endif /* SRC_RTR_DB_VRP_H_ */
index cb42ff364b1259bf61ddbcd2f94ab554ba42aeaf..f8ff3b7abebcc623438b68308df06b72f5e55e01 100644 (file)
@@ -9,8 +9,8 @@
 #include "common.h"
 #include "output_printer.h"
 #include "validation_handler.h"
+#include "types/router_key.h"
 #include "data_structure/array_list.h"
-#include "object/router_key.h"
 #include "object/tal.h"
 #include "rtr/rtr.h"
 #include "rtr/db/db_table.h"
@@ -413,7 +413,7 @@ vrp_ovrd_remove(struct delta_vrp const *delta, void *arg)
 
        filtered_vrps = &lists->prefixes;
        SLIST_FOREACH(ptr, filtered_vrps, next)
-               if (VRP_EQ(&delta->vrp, &ptr->delta.vrp) &&
+               if (vrp_equals(&delta->vrp, &ptr->delta.vrp) &&
                    delta->flags != ptr->delta.flags) {
                        SLIST_REMOVE(filtered_vrps, ptr, vrp_node, next);
                        free(ptr);
index 79681f13307026ed8a4a538068595d99dfd938db..f3698bb09797549768464cfb81a766e933071e84 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #include <stdbool.h>
-
+#include "types/address.h"
 #include "rtr/db/deltas_array.h"
 
 int vrps_init(void);
index 0aa29114c8b45738e61c27ab4989a97005bdbb5b..add22f5612473f80fc881d8cc294f893dad3b723 100644 (file)
@@ -5,9 +5,9 @@
 #include <string.h>
 #include <syslog.h>
 
-#include "address.h"
 #include "common.h"
 #include "log.h"
+#include "types/address.h"
 #include "rtr/err_pdu.h"
 #include "rtr/pdu_handler.h"
 
index b5c9b6aa397bacc24af7c30f41c94867e8020f66..281b8d2fb9c34db74d77920d519a767ac8c9ca7a 100644 (file)
@@ -5,7 +5,7 @@
 #include <netinet/in.h>
 
 #include "common.h"
-#include "object/router_key.h"
+#include "types/router_key.h"
 #include "rtr/primitive_reader.h"
 #include "rtr/rtr.h"
 
index 113b3a91c8d29528741ea699bd3459ac83e281e3..7036e4b9edbef6d8928ead169c57c6a6b3e9d9c3 100644 (file)
@@ -2,7 +2,7 @@
 #define SRC_RTR_PDU_SENDER_H_
 
 #include "pdu.h"
-#include "object/router_key.h"
+#include "types/router_key.h"
 #include "rtr/db/vrps.h"
 
 int send_serial_notify_pdu(int, uint8_t, serial_t);
index b2aa367da8cfc9e5a0b0e9ee16ce76620b925c5b..606f1db634f7f9b97aa0071555b3348b98b0b362 100644 (file)
@@ -12,8 +12,8 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 
-#include "address.h"
 #include "config.h"
+#include "types/address.h"
 #include "data_structure/array_list.h"
 #include "rtr/pdu.h"
 #include "thread/thread_pool.h"
index aa16eaa8a70f07bdc0a67e60795d1b90f783bdcb..393f09b307ae08d9e0b8f9b6ca26bc759eb3bc55 100644 (file)
@@ -7,7 +7,7 @@
 #include "common.h"
 #include "crypto/base64.h"
 #include "data_structure/array_list.h"
-#include "object/router_key.h"
+#include "types/router_key.h"
 
 struct slurm_prefix_wrap {
        struct slurm_prefix element;
@@ -155,18 +155,18 @@ prefix_filtered_by(struct slurm_prefix_wrap *filter_wrap,
                /* The filter has ASN and prefix */
                if ((filter->data_flag & ~SLURM_COM_FLAG_COMMENT) ==
                    (SLURM_COM_FLAG_ASN | SLURM_PFX_FLAG_PREFIX))
-                       return VRP_ASN_EQ(filter_vrp, prefix_vrp) &&
-                           VRP_PREFIX_COV(filter_vrp, prefix_vrp);
+                       return (filter_vrp->asn == prefix_vrp->asn) &&
+                           vrp_prefix_cov(filter_vrp, prefix_vrp);
 
                /* Both have ASN */
                if ((filter->data_flag & SLURM_COM_FLAG_ASN) > 0 &&
                    (prefix->data_flag & SLURM_COM_FLAG_ASN) > 0)
-                       return VRP_ASN_EQ(filter_vrp, prefix_vrp);
+                       return filter_vrp->asn == prefix_vrp->asn;
 
                /* Both have a prefix of the same type */
                if ((filter->data_flag & SLURM_PFX_FLAG_PREFIX) > 0 &&
                    (prefix->data_flag & SLURM_PFX_FLAG_PREFIX) > 0)
-                       return VRP_PREFIX_COV(filter_vrp, prefix_vrp);
+                       return vrp_prefix_cov(filter_vrp, prefix_vrp);
 
                return false;
        }
@@ -174,10 +174,10 @@ prefix_filtered_by(struct slurm_prefix_wrap *filter_wrap,
        /* It has the same data, compare it */
        equal = true;
        if (equal && (filter->data_flag & SLURM_COM_FLAG_ASN) > 0)
-               equal = VRP_ASN_EQ(filter_vrp, prefix_vrp);
+               equal = filter_vrp->asn == prefix_vrp->asn;
 
        if (equal && (filter->data_flag & SLURM_PFX_FLAG_PREFIX) > 0)
-               equal = VRP_PREFIX_COV(filter_vrp, prefix_vrp);
+               equal = vrp_prefix_cov(filter_vrp, prefix_vrp);
 
        return equal;
 }
@@ -261,7 +261,7 @@ prefix_contained(struct slurm_prefix *left, struct slurm_prefix *right)
 
        return (left->data_flag & SLURM_PFX_FLAG_PREFIX) > 0 &&
            (right->data_flag & SLURM_PFX_FLAG_PREFIX) > 0 &&
-           VRP_PREFIX_COV(left_vrp, right_vrp);
+           vrp_prefix_cov(left_vrp, right_vrp);
 }
 
 /*
index 76abea2fc7b410ce75385e5113febebf60f34671..9e693eeb77d45a38b10f6e74816f0e69b000d5de 100644 (file)
@@ -4,8 +4,8 @@
 #include <stdbool.h>
 #include <sys/queue.h>
 #include <openssl/evp.h>
-
-#include "rtr/db/vrp.h"
+#include "types/vrp.h"
+#include "types/router_key.h"
 
 /* Flags to get data from structs */
 #define SLURM_COM_FLAG_NONE            0x00
index 6d37fb0bc035e0ed76cb73385c29273fa0d1f21c..e5426d511bf97cc8be3536e5519b5b0fcbbc93d4 100644 (file)
@@ -11,9 +11,9 @@
 #include "crypto/base64.h"
 #include "algorithm.h"
 #include "log.h"
-#include "address.h"
 #include "json_parser.h"
-#include "object/router_key.h"
+#include "types/address.h"
+#include "types/router_key.h"
 #include "slurm/db_slurm.h"
 
 /* JSON members */
similarity index 96%
rename from src/address.c
rename to src/types/address.c
index 3316ae4a6ac8d682110c2d17042034ab4aea8b29..4eeb20652922442a8b2d7b0486c58130eff547e0 100644 (file)
@@ -1,4 +1,4 @@
-#include "address.h"
+#include "types/address.h"
 
 #include <stdlib.h> /* strtoul() */
 #include <string.h> /* memset(), memcpy() */
@@ -45,7 +45,7 @@ u32_suffix_mask(unsigned int prefix_len)
  * Same as u32_suffix_mask(), except the result is in network byte order
  * ("be", for "big endian").
  */
-uint32_t
+static uint32_t
 be32_suffix_mask(unsigned int prefix_len)
 {
        return htonl(u32_suffix_mask(prefix_len));
@@ -135,24 +135,13 @@ ipv6_suffix_mask(unsigned int prefix_len, struct in6_addr *result)
 bool
 prefix4_equals(struct ipv4_prefix const *a, struct ipv4_prefix const *b)
 {
-       return (a->addr.s_addr == b->addr.s_addr) && (a->len == b->len);
+       return (a->len == b->len) && (a->addr.s_addr == b->addr.s_addr);
 }
 
 bool
 prefix6_equals(struct ipv6_prefix const *a, struct ipv6_prefix const *b)
 {
-       unsigned int i;
-
-       /*
-        * Not sure if I can use a memcmp() instead.
-        * I feel like in6_addr's union could cause padding in weird
-        * implementations.
-        */
-       for (i = 0; i < 16; i++)
-               if (a->addr.s6_addr[i] != b->addr.s6_addr[i])
-                       return false;
-
-       return a->len == b->len;
+       return (a->len == b->len) && IN6_ARE_ADDR_EQUAL(&a->addr, &b->addr);
 }
 
 /**
@@ -488,7 +477,8 @@ ipv6_prefix_validate(struct ipv6_prefix *prefix)
  * Check if @son_addr is covered by @f_addr prefix of @f_len length
  */
 bool
-ipv4_covered(struct in_addr *f_addr, uint8_t f_len, struct in_addr *son_addr)
+ipv4_covered(struct in_addr const *f_addr, uint8_t f_len,
+    struct in_addr const *son_addr)
 {
        return (son_addr->s_addr & ~be32_suffix_mask(f_len)) == f_addr->s_addr;
 }
@@ -497,7 +487,8 @@ ipv4_covered(struct in_addr *f_addr, uint8_t f_len, struct in_addr *son_addr)
  * Check if @son_addr is covered by @f_addr prefix of @f_len length
  */
 bool
-ipv6_covered(struct in6_addr *f_addr, uint8_t f_len, struct in6_addr *son_addr)
+ipv6_covered(struct in6_addr const *f_addr, uint8_t f_len,
+    struct in6_addr const *son_addr)
 {
        struct in6_addr suffix;
        unsigned int i;
similarity index 85%
rename from src/address.h
rename to src/types/address.h
index 8fbf7a71a36406480bf2bb34ac8e26e4c51250a8..9ac412633df2abbe06d5091574cda0df6246039c 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef SRC_ADDRESS_H_
-#define SRC_ADDRESS_H_
+#ifndef SRC_TYPES_ADDRESS_H_
+#define SRC_TYPES_ADDRESS_H_
 
 #include <stdbool.h>
 #include <netinet/in.h>
@@ -30,7 +30,6 @@ struct ipv6_range {
 void in6_addr_init(struct in6_addr *, uint32_t, uint32_t, uint32_t, uint32_t);
 
 uint32_t u32_suffix_mask(unsigned int);
-uint32_t be32_suffix_mask(unsigned int);
 void ipv6_suffix_mask(unsigned int, struct in6_addr *);
 
 bool prefix4_equals(struct ipv4_prefix const *, struct ipv4_prefix const *);
@@ -48,11 +47,11 @@ int prefix_length_parse(const char *, uint8_t *, uint8_t);
 int ipv4_prefix_validate(struct ipv4_prefix *);
 int ipv6_prefix_validate(struct ipv6_prefix *);
 
-bool ipv4_covered(struct in_addr *, uint8_t, struct in_addr *);
-bool ipv6_covered(struct in6_addr *, uint8_t, struct in6_addr *);
+bool ipv4_covered(struct in_addr const *, uint8_t, struct in_addr const *);
+bool ipv6_covered(struct in6_addr const *, uint8_t, struct in6_addr const *);
 
 char const *addr2str4(struct in_addr const *, char *);
 char const *addr2str6(struct in6_addr const *, char *);
 void sockaddr2str(struct sockaddr_storage *, char *buffer);
 
-#endif /* SRC_ADDRESS_H_ */
+#endif /* SRC_TYPES_ADDRESS_H_ */
similarity index 53%
rename from src/rtr/db/vrp.c
rename to src/types/delta.c
index 659aae227ce5792db3a17fb02302f4bff8dd896e..dacdf1952b956683a7231b0204c69dcbca7802c2 100644 (file)
@@ -1,6 +1,6 @@
-#include "rtr/db/vrp.h"
+#include "types/delta.h"
 
-#include <arpa/inet.h>
+#include <stdio.h>
 
 static void
 print_flag(uint8_t flag)
@@ -18,16 +18,6 @@ print_flag(uint8_t flag)
        }
 }
 
-int
-vrp_print(struct vrp const *roa, void *arg)
-{
-       char buffer[INET6_ADDRSTRLEN];
-       printf("- [ROA ASN:%u Prefix:%s/(%u-%u)]\n", roa->asn,
-           inet_ntop(roa->addr_fam, &roa->prefix, buffer, INET6_ADDRSTRLEN),
-           roa->prefix_length, roa->max_prefix_length);
-       return 0;
-}
-
 int
 delta_vrp_print(struct delta_vrp const *delta, void *arg)
 {
@@ -35,13 +25,6 @@ delta_vrp_print(struct delta_vrp const *delta, void *arg)
        return vrp_print(&delta->vrp, arg);
 }
 
-int
-router_key_print(struct router_key const *rk, void *arg)
-{
-       printf("- [RK  ASN:%u]\n", rk->as);
-       return 0;
-}
-
 int
 delta_rk_print(struct delta_router_key const *delta, void *arg)
 {
diff --git a/src/types/delta.h b/src/types/delta.h
new file mode 100644 (file)
index 0000000..9b7914e
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef SRC_TYPES_DELTA_H_
+#define SRC_TYPES_DELTA_H_
+
+#include "types/router_key.h"
+#include "types/vrp.h"
+
+#define FLAG_WITHDRAWAL                0
+#define FLAG_ANNOUNCEMENT      1
+
+struct delta_vrp {
+       struct vrp vrp;
+       uint8_t flags;
+};
+
+struct delta_router_key {
+       struct router_key router_key;
+       uint8_t flags;
+};
+
+typedef int (*delta_vrp_foreach_cb)(struct delta_vrp const *, void *);
+typedef int (*delta_router_key_foreach_cb)(struct delta_router_key const *,
+    void *);
+
+int delta_vrp_print(struct delta_vrp const *, void *);
+int delta_rk_print(struct delta_router_key const *, void *);
+
+#endif /* SRC_TYPES_DELTA_H_ */
similarity index 58%
rename from src/object/router_key.c
rename to src/types/router_key.c
index bc714c095c79d27e96777bebb36dd18f2fd47ce0..ceda475612163e6d48b7162f8f5d436779f85c50 100644 (file)
@@ -1,5 +1,6 @@
-#include "object/router_key.h"
+#include "types/router_key.h"
 
+#include <stdio.h>
 #include <string.h>
 
 void
@@ -10,3 +11,10 @@ router_key_init(struct router_key *key, unsigned char const *ski,
        memcpy(key->spk, spk, RK_SPKI_LEN);
        key->as = as;
 }
+
+int
+router_key_print(struct router_key const *rk, void *arg)
+{
+       printf("- [RK  ASN:%u]\n", rk->as);
+       return 0;
+}
similarity index 79%
rename from src/object/router_key.h
rename to src/types/router_key.h
index 26278a6cba1609e12540d8171ec42d0f97ce93ff..9609981a3f8168c70d9e87599d99a227ecfd1575 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef SRC_OBJECT_ROUTER_KEY_H_
-#define SRC_OBJECT_ROUTER_KEY_H_
+#ifndef SRC_TYPES_ROUTER_KEY_H_
+#define SRC_TYPES_ROUTER_KEY_H_
 
 #include <stdint.h>
 #include <stdlib.h>
@@ -30,7 +30,10 @@ struct router_key {
        unsigned char   spk[RK_SPKI_LEN];
 };
 
+typedef int (*router_key_foreach_cb)(struct router_key const *, void *);
+
 void router_key_init(struct router_key *, unsigned char const *, uint32_t,
     unsigned char const *);
+int router_key_print(struct router_key const *, void *);
 
-#endif /* SRC_OBJECT_ROUTER_KEY_H_ */
+#endif /* SRC_TYPES_ROUTER_KEY_H_ */
similarity index 90%
rename from src/serial.c
rename to src/types/serial.c
index b364ec90d1b61615b75e42bba811277052b267c7..9fbe6558682e5c8df0e409783e1f4bff65d1aea8 100644 (file)
@@ -1,4 +1,4 @@
-#include "serial.h"
+#include "types/serial.h"
 
 /*
  * Returns s1 < s2 , according to RFC 1982 serial arithmetic.
similarity index 56%
rename from src/serial.h
rename to src/types/serial.h
index 32e421a2ed6a22b61ebf37a595323fd214bd1e92..a9b1683d455979aeae360ddfede4fffe3198ed32 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef SRC_SERIAL_H_
-#define SRC_SERIAL_H_
+#ifndef SRC_TYPES_SERIAL_H_
+#define SRC_TYPES_SERIAL_H_
 
 #include <stdbool.h>
 #include <stdint.h>
@@ -8,4 +8,4 @@ typedef uint32_t serial_t;
 
 bool serial_lt(serial_t s1, serial_t s2);
 
-#endif /* SRC_SERIAL_H_ */
+#endif /* SRC_TYPES_SERIAL_H_ */
similarity index 99%
rename from src/uri.c
rename to src/types/uri.c
index da92e8e64db8cf4e2afcfa291c779502209e9599..52e76f4a7a4b1000670348b3d96c0a3704821db3 100644 (file)
--- a/src/uri.c
@@ -1,4 +1,4 @@
-#include "uri.h"
+#include "types/uri.h"
 
 #include <errno.h>
 #include <strings.h>
@@ -638,4 +638,3 @@ uri_op_get_printable(struct rpki_uri *uri)
        format = config_get_op_log_filename_format();
        return uri_get_printable(uri, format);
 }
-
similarity index 94%
rename from src/uri.h
rename to src/types/uri.h
index 6e2d7c1f43b1ff2c2127969e9a80af568719494c..c9d59bbfe2f7d4c4e732be0cf9b01b3e0061276e 100644 (file)
--- a/src/uri.h
@@ -1,5 +1,5 @@
-#ifndef SRC_URI_H_
-#define SRC_URI_H_
+#ifndef SRC_TYPES_URI_H_
+#define SRC_TYPES_URI_H_
 
 #include <stdbool.h>
 #include <openssl/x509v3.h>
@@ -41,4 +41,4 @@ bool uri_is_rsync(struct rpki_uri *);
 char const *uri_val_get_printable(struct rpki_uri *);
 char const *uri_op_get_printable(struct rpki_uri *);
 
-#endif /* SRC_URI_H_ */
+#endif /* SRC_TYPES_URI_H_ */
diff --git a/src/types/vrp.c b/src/types/vrp.c
new file mode 100644 (file)
index 0000000..b2548a4
--- /dev/null
@@ -0,0 +1,53 @@
+#include "types/vrp.h"
+
+#include <arpa/inet.h>
+#include "log.h"
+#include "types/address.h"
+
+bool
+vrp_equals(struct vrp const *a, struct vrp const *b)
+{
+       if ((a->addr_fam != b->addr_fam) ||
+           (a->asn != b->asn) ||
+           (a->prefix_length != b->prefix_length) ||
+           (a->max_prefix_length != b->max_prefix_length))
+               return false;
+
+       switch (a->addr_fam) {
+       case AF_INET:
+               return a->prefix.v4.s_addr == b->prefix.v4.s_addr;
+       case AF_INET6:
+               return IN6_ARE_ADDR_EQUAL(&a->prefix.v6, &b->prefix.v6);
+       }
+
+       pr_crit("Unknown address family: %u", a->addr_fam);
+}
+
+/* Checks if a's prefix equals or covers b's prefix */
+bool
+vrp_prefix_cov(struct vrp const *a, struct vrp const *b)
+{
+       if (a->addr_fam != b->addr_fam)
+               return false;
+
+       switch (a->addr_fam) {
+       case AF_INET:
+               return ipv4_covered(&a->prefix.v4, a->prefix_length, &b->prefix.v4)
+                   && (a->prefix_length <= b->prefix_length);
+       case AF_INET6:
+               return ipv6_covered(&a->prefix.v6, a->prefix_length, &b->prefix.v6)
+                   && (a->prefix_length <= b->prefix_length);
+       }
+
+       pr_crit("Unknown address family: %u", a->addr_fam);
+}
+
+int
+vrp_print(struct vrp const *roa, void *arg)
+{
+       char buffer[INET6_ADDRSTRLEN];
+       printf("- [ROA ASN:%u Prefix:%s/(%u-%u)]\n", roa->asn,
+           inet_ntop(roa->addr_fam, &roa->prefix, buffer, INET6_ADDRSTRLEN),
+           roa->prefix_length, roa->max_prefix_length);
+       return 0;
+}
diff --git a/src/types/vrp.h b/src/types/vrp.h
new file mode 100644 (file)
index 0000000..3be86f8
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef SRC_TYPES_VRP_H_
+#define SRC_TYPES_VRP_H_
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <netinet/in.h>
+
+/*
+ * A ROA.
+ *
+ * I think it's called "VRP" ("Validated ROA Payload") because it was originally
+ * meant to represent an already validated ROA, and used exclusively by the RTR
+ * code. But it doesn't matter anymore.
+ */
+struct vrp {
+       uint32_t asn;
+       union {
+               struct in_addr v4;
+               struct in6_addr v6;
+       } prefix;
+       uint8_t prefix_length;
+       uint8_t max_prefix_length;
+       uint8_t addr_fam;
+};
+
+typedef int (*vrp_foreach_cb)(struct vrp const *, void *);
+
+bool vrp_equals(struct vrp const *, struct vrp const *);
+bool vrp_prefix_cov(struct vrp const *, struct vrp const *);
+int vrp_print(struct vrp const *, void *);
+
+#endif /* SRC_TYPES_VRP_H_ */
index cb3a2a51d355328b844f0c582ac090604a731228..542a64f03da98e890308145b42607fbfb5ca1016 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef SRC_VALIDATION_HANDLER_H_
 #define SRC_VALIDATION_HANDLER_H_
 
-#include "address.h"
+#include "types/address.h"
+#include "types/router_key.h"
 #include "object/name.h"
-#include "object/router_key.h"
 
 /**
  * Functions that handle validation results.
index bb5231439dfd61e79c3aa464a9dcab38f1f3aa12..8cc0bbd492793e579e80bc38773589450af73d2b 100644 (file)
@@ -37,7 +37,7 @@ check_PROGRAMS += rtr/pdu.test
 check_PROGRAMS += rtr/primitive_reader.test
 TESTS = ${check_PROGRAMS}
 
-address_test_SOURCES = address_test.c
+address_test_SOURCES = types/address_test.c
 address_test_LDADD = ${MY_LDADD}
 
 deltas_array_test_SOURCES = rtr/db/deltas_array_test.c
@@ -58,7 +58,7 @@ rrdp_objects_test_LDADD = ${MY_LDADD} ${JANSSON_LIBS} ${XML2_LIBS}
 rsync_test_SOURCES = rsync_test.c
 rsync_test_LDADD = ${MY_LDADD}
 
-serial_test_SOURCES = serial_test.c
+serial_test_SOURCES = types/serial_test.c
 serial_test_LDADD = ${MY_LDADD}
 
 tal_test_SOURCES = tal_test.c
@@ -67,7 +67,7 @@ tal_test_LDADD = ${MY_LDADD}
 thread_pool_test_SOURCES = thread_pool_test.c
 thread_pool_test_LDADD = ${MY_LDADD}
 
-uri_test_SOURCES = uri_test.c
+uri_test_SOURCES = types/uri_test.c
 uri_test_LDADD = ${MY_LDADD}
 
 vcard_test_SOURCES = vcard_test.c
index 53c3be05b08c8a3f6e569da326c53f5d3290a6dd..81e102dc01cba42fedc3d31d9c0a32a01fcb0476 100644 (file)
@@ -6,7 +6,7 @@
 #include "log.c"
 #include "impersonator.c"
 #include "str_token.c"
-#include "uri.c"
+#include "types/uri.c"
 #include "rsync/rsync.c"
 
 
index eb1cfb1d1bbd0da14577e988e415aa8a3c4a2ed6..2122f9b799fbf9338adae831d2eeef370b3bab78 100644 (file)
@@ -1,12 +1,13 @@
 #include <check.h>
 #include <stdlib.h>
 
-#include "address.c"
 #include "common.c"
 #include "log.c"
 #include "impersonator.c"
-#include "object/router_key.c"
-#include "rtr/db/vrp.c"
+#include "types/address.c"
+#include "types/delta.c"
+#include "types/router_key.c"
+#include "types/vrp.c"
 #include "rtr/db/delta.c"
 #include "rtr/db/db_table.c"
 
index b20d00894960e0a9f7c183bf4e81da15d4ddfd60..2ad2316f2262437a6e436f5797af2799332400ff 100644 (file)
@@ -3,7 +3,10 @@
 
 #include "log.c"
 #include "impersonator.c"
-#include "rtr/db/vrp.c"
+#include "types/address.c"
+#include "types/delta.c"
+#include "types/router_key.c"
+#include "types/vrp.c"
 #include "rtr/db/delta.c"
 #include "rtr/db/deltas_array.c"
 
index 84ff9745af0a2b3dd475fa9a8196a889c01dab50..b9e9c5a39ab1d1b2a4f99fb579dbb52cac672917 100644 (file)
@@ -1,7 +1,7 @@
 #include <check.h>
 #include "object/tal.h"
 
-#include "address.c"
+#include "types/address.c"
 
 static unsigned char db_imp_ski[] = {
     0x0e, 0xe9, 0x6a, 0x8e, 0x2f, 0xac, 0x50, 0xce, 0x6c, 0x5f,
index c5a1d72d9f36f2dd8220fe3b62277a5a5a72c8f0..d96b1eec868711c587afafdc9dedbd611581bd5f 100644 (file)
 #include "json_parser.c"
 #include "log.c"
 #include "output_printer.c"
-#include "serial.c"
-#include "object/router_key.c"
-#include "rtr/db/vrp.c"
+#include "types/delta.c"
+#include "types/router_key.c"
+#include "types/serial.c"
+#include "types/vrp.c"
 #include "rtr/db/delta.c"
 #include "rtr/db/deltas_array.c"
 #include "rtr/db/db_table.c"
@@ -271,27 +272,7 @@ check_base(serial_t expected_serial, bool const *expected_base)
 static int
 vrp_add(struct delta_vrp const *delta, void *arg)
 {
-       union {
-               struct v4_address v4;
-               struct v6_address v6;
-       } addr;
-
-       switch (delta->vrp.addr_fam) {
-       case AF_INET:
-               addr.v4.prefix.len = delta->vrp.prefix_length;
-               addr.v4.prefix.addr = delta->vrp.prefix.v4;
-               addr.v4.max_length = delta->vrp.max_prefix_length;
-               return deltas_add_roa_v4(arg, delta->vrp.asn, &addr.v4,
-                   delta->flags);
-       case AF_INET6:
-               addr.v6.prefix.len = delta->vrp.prefix_length;
-               addr.v6.prefix.addr = delta->vrp.prefix.v6;
-               addr.v6.max_length = delta->vrp.max_prefix_length;
-               return deltas_add_roa_v6(arg, delta->vrp.asn, &addr.v6,
-                   delta->flags);
-       }
-
-       ck_abort_msg("Unknown family: %u", delta->vrp.addr_fam);
+       return deltas_add_roa(arg, &delta->vrp, delta->flags);
 }
 
 static int
index 3fca9f42c1f7b674ae0947a6231745d414bf7049..29694df7164b5ae2e23362129e8b4b43baf8d6aa 100644 (file)
 #include "json_parser.c"
 #include "log.c"
 #include "output_printer.c"
-#include "serial.c"
 #include "crypto/base64.c"
-#include "object/router_key.c"
+#include "types/delta.c"
+#include "types/router_key.c"
+#include "types/serial.c"
+#include "types/vrp.c"
 #include "rtr/pdu.c"
 #include "rtr/pdu_handler.c"
 #include "rtr/primitive_reader.c"
 #include "rtr/primitive_writer.c"
 #include "rtr/err_pdu.c"
-#include "rtr/db/vrp.c"
 #include "rtr/db/delta.c"
 #include "rtr/db/deltas_array.c"
 #include "rtr/db/db_table.c"
index 795d7a3d1fcf1a72c15a088b7b537720e8a1d78c..0f7399aba1b11e620dc1548b7f044ce56ed4672b 100644 (file)
@@ -11,8 +11,8 @@
 #include "log.c"
 #include "state.h"
 #include "str_token.c"
-#include "uri.c"
 #include "random.c"
+#include "types/uri.c"
 #include "crypto/base64.c"
 #include "rsync/rsync.c"
 #include "thread/thread_pool.c"
similarity index 99%
rename from test/address_test.c
rename to test/types/address_test.c
index d370294efca4569f3b95be1535ec8a0e183c7665..7636386e2296a271a4db26dd6ab568644ce910ec 100644 (file)
@@ -2,10 +2,10 @@
 #include <errno.h>
 #include <stdlib.h>
 
-#include "address.c"
 #include "common.c"
 #include "log.c"
 #include "impersonator.c"
+#include "types/address.c"
 
 static void
 test_range4(uint32_t min, uint32_t max, bool valid)
similarity index 99%
rename from test/serial_test.c
rename to test/types/serial_test.c
index e3c253e33ec408b80ec67891f7720022e40a97b2..494e8db9ad60b53873caf2551dfe9496b4ef21c1 100644 (file)
@@ -1,7 +1,7 @@
 #include <check.h>
 #include <stdlib.h>
 
-#include "serial.c"
+#include "types/serial.c"
 
 START_TEST(pivot_0)
 {
similarity index 98%
rename from test/uri_test.c
rename to test/types/uri_test.c
index be5c1b9b9dfb7f7f3bbc0e21dd2458ef17ef47f1..e022d9172525fb7c8d98469dbc211c40abcd0886 100644 (file)
@@ -2,10 +2,10 @@
 #include <errno.h>
 #include <stdint.h>
 
-#include "uri.c"
 #include "common.c"
 #include "log.c"
 #include "impersonator.c"
+#include "types/uri.c"
 
 static int
 test_validate(char const *src)