From: Alberto Leiva Popper Date: Thu, 28 Oct 2021 01:53:21 +0000 (-0500) Subject: Core: Relocate basic data types X-Git-Tag: 1.5.3~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7d75b40a50bedd6b8c356b264050a946dc32057b;p=thirdparty%2FFORT-validator.git Core: Relocate basic data types 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. --- diff --git a/src/Makefile.am b/src/Makefile.am index cc01d632..7d227a19 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 diff --git a/src/asn1/content_info.h b/src/asn1/content_info.h index ce7e93a4..862510bd 100644 --- a/src/asn1/content_info.h +++ b/src/asn1/content_info.h @@ -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 **); diff --git a/src/cert_stack.h b/src/cert_stack.h index 631573ae..61c209f4 100644 --- a/src/cert_stack.h +++ b/src/cert_stack.h @@ -4,9 +4,9 @@ #include #include #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 diff --git a/src/crypto/hash.h b/src/crypto/hash.h index d9f31af2..31ae305d 100644 --- a/src/crypto/hash.h +++ b/src/crypto/hash.h @@ -3,7 +3,7 @@ #include #include -#include "uri.h" +#include "types/uri.h" #include "asn1/asn1c/BIT_STRING.h" int hash_validate_mft_file(char const *, struct rpki_uri *uri, diff --git a/src/http/http.h b/src/http/http.h index 717119d9..1dc40221 100644 --- a/src/http/http.h +++ b/src/http/http.h @@ -3,7 +3,7 @@ #include #include -#include "uri.h" +#include "types/uri.h" /* Init on the main process */ int http_init(void); diff --git a/src/object/certificate.h b/src/object/certificate.h index d5bad771..b6a18b59 100644 --- a/src/object/certificate.h +++ b/src/object/certificate.h @@ -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" diff --git a/src/object/crl.h b/src/object/crl.h index b71fa7f8..3c80d470 100644 --- a/src/object/crl.h +++ b/src/object/crl.h @@ -2,7 +2,7 @@ #define SRC_OBJECT_CRL_H_ #include -#include "uri.h" +#include "types/uri.h" int crl_load(struct rpki_uri *uri, X509_CRL **); diff --git a/src/object/ghostbusters.h b/src/object/ghostbusters.h index e6b04666..f93db38b 100644 --- a/src/object/ghostbusters.h +++ b/src/object/ghostbusters.h @@ -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 *); diff --git a/src/object/manifest.h b/src/object/manifest.h index dbfc0bd6..e127cd54 100644 --- a/src/object/manifest.h +++ b/src/object/manifest.h @@ -2,7 +2,6 @@ #define SRC_OBJECT_MANIFEST_H_ #include -#include "uri.h" #include "rpp.h" int handle_manifest(struct rpki_uri *, bool, struct rpp **); diff --git a/src/object/roa.h b/src/object/roa.h index 09183026..e8de49b5 100644 --- a/src/object/roa.h +++ b/src/object/roa.h @@ -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 *); diff --git a/src/object/tal.h b/src/object/tal.h index 4acc9162..aa376dfb 100644 --- a/src/object/tal.h +++ b/src/object/tal.h @@ -4,7 +4,7 @@ /* This is RFC 8630. */ #include -#include "uri.h" +#include "types/uri.h" #include "rtr/db/db_table.h" #include "thread/thread_pool.h" diff --git a/src/output_printer.c b/src/output_printer.c index 0803828b..34edcf86 100644 --- a/src/output_printer.c +++ b/src/output_printer.c @@ -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]; diff --git a/src/resource.c b/src/resource.c index 228b255a..92c8f11f 100644 --- a/src/resource.c +++ b/src/resource.c @@ -3,10 +3,10 @@ #include #include /* 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 diff --git a/src/resource.h b/src/resource.h index 450c8c2e..23055fd2 100644 --- a/src/resource.h +++ b/src/resource.h @@ -2,8 +2,8 @@ #define SRC_RESOURCE_H_ #include -#include "address.h" #include "resource/asn.h" +#include "types/address.h" #include "asn1/asn1c/ASIdentifiers.h" #include "asn1/asn1c/IPAddressFamily.h" diff --git a/src/resource/ip4.h b/src/resource/ip4.h index bf4db9b4..861e888f 100644 --- a/src/resource/ip4.h +++ b/src/resource/ip4.h @@ -2,7 +2,7 @@ #define SRC_RESOURCE_IP4_H_ #include -#include "address.h" +#include "types/address.h" struct resources_ipv4; diff --git a/src/resource/ip6.h b/src/resource/ip6.h index 6e78c805..ce962110 100644 --- a/src/resource/ip6.h +++ b/src/resource/ip6.h @@ -2,7 +2,7 @@ #define SRC_RESOURCE_IP6_H_ #include -#include "address.h" +#include "types/address.h" struct resources_ipv6; diff --git a/src/rpp.c b/src/rpp.c index f7bdd34d..cd9ea95c 100644 --- 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" diff --git a/src/rpp.h b/src/rpp.h index 546ad684..ba75d256 100644 --- 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; diff --git a/src/rrdp/rrdp_loader.h b/src/rrdp/rrdp_loader.h index 2cf8f8b0..838e4fab 100644 --- a/src/rrdp/rrdp_loader.h +++ b/src/rrdp/rrdp_loader.h @@ -2,7 +2,7 @@ #define SRC_RRDP_RRDP_LOADER_H_ #include -#include "uri.h" +#include "types/uri.h" int rrdp_load(struct rpki_uri *, bool *); int rrdp_reload_snapshot(struct rpki_uri *); diff --git a/src/rrdp/rrdp_parser.h b/src/rrdp/rrdp_parser.h index c774ba40..3aff4708 100644 --- a/src/rrdp/rrdp_parser.h +++ b/src/rrdp/rrdp_parser.h @@ -2,8 +2,8 @@ #define SRC_RRDP_RRDP_PARSER_H_ #include +#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, diff --git a/src/rsync/rsync.h b/src/rsync/rsync.h index a19682be..b5f8e6ed 100644 --- a/src/rsync/rsync.h +++ b/src/rsync/rsync.h @@ -2,7 +2,7 @@ #define SRC_RSYNC_RSYNC_H_ #include -#include "uri.h" +#include "types/uri.h" struct uri_list; diff --git a/src/rtr/db/db_table.c b/src/rtr/db/db_table.c index 60f21841..21af1b3d 100644 --- a/src/rtr/db/db_table.c +++ b/src/rtr/db/db_table.c @@ -2,6 +2,8 @@ #include /* AF_INET, AF_INET6 (needed in OpenBSD) */ #include /* 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; } diff --git a/src/rtr/db/db_table.h b/src/rtr/db/db_table.h index 8574244d..603bd702 100644 --- a/src/rtr/db/db_table.h +++ b/src/rtr/db/db_table.h @@ -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; diff --git a/src/rtr/db/delta.c b/src/rtr/db/delta.c index d8ecf917..345bb686 100644 --- a/src/rtr/db/delta.c +++ b/src/rtr/db/delta.c @@ -3,6 +3,7 @@ #include #include /* AF_INET, AF_INET6 (needed in OpenBSD) */ #include /* 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) diff --git a/src/rtr/db/delta.h b/src/rtr/db/delta.h index 693b9d81..f88aae34 100644 --- a/src/rtr/db/delta.h +++ b/src/rtr/db/delta.h @@ -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 *); diff --git a/src/rtr/db/deltas_array.c b/src/rtr/db/deltas_array.c index ce035b2d..63bb1dd6 100644 --- a/src/rtr/db/deltas_array.c +++ b/src/rtr/db/deltas_array.c @@ -1,5 +1,9 @@ #include "rtr/db/deltas_array.h" +#include +#include +#include "config.h" + struct deltas_array { struct deltas **array; /* It's a circular array. */ unsigned int len; /* Occupied slots. */ diff --git a/src/rtr/db/deltas_array.h b/src/rtr/db/deltas_array.h index 5866682d..085b5078 100644 --- a/src/rtr/db/deltas_array.h +++ b/src/rtr/db/deltas_array.h @@ -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 index 9537a09b..00000000 --- a/src/rtr/db/roa.c +++ /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 index e49f735c..00000000 --- a/src/rtr/db/roa.h +++ /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 index f7f10549..00000000 --- a/src/rtr/db/vrp.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef SRC_RTR_DB_VRP_H_ -#define SRC_RTR_DB_VRP_H_ - -#include -#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_ */ diff --git a/src/rtr/db/vrps.c b/src/rtr/db/vrps.c index cb42ff36..f8ff3b7a 100644 --- a/src/rtr/db/vrps.c +++ b/src/rtr/db/vrps.c @@ -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); diff --git a/src/rtr/db/vrps.h b/src/rtr/db/vrps.h index 79681f13..f3698bb0 100644 --- a/src/rtr/db/vrps.h +++ b/src/rtr/db/vrps.h @@ -8,7 +8,7 @@ */ #include - +#include "types/address.h" #include "rtr/db/deltas_array.h" int vrps_init(void); diff --git a/src/rtr/pdu.c b/src/rtr/pdu.c index 0aa29114..add22f56 100644 --- a/src/rtr/pdu.c +++ b/src/rtr/pdu.c @@ -5,9 +5,9 @@ #include #include -#include "address.h" #include "common.h" #include "log.h" +#include "types/address.h" #include "rtr/err_pdu.h" #include "rtr/pdu_handler.h" diff --git a/src/rtr/pdu.h b/src/rtr/pdu.h index b5c9b6aa..281b8d2f 100644 --- a/src/rtr/pdu.h +++ b/src/rtr/pdu.h @@ -5,7 +5,7 @@ #include #include "common.h" -#include "object/router_key.h" +#include "types/router_key.h" #include "rtr/primitive_reader.h" #include "rtr/rtr.h" diff --git a/src/rtr/pdu_sender.h b/src/rtr/pdu_sender.h index 113b3a91..7036e4b9 100644 --- a/src/rtr/pdu_sender.h +++ b/src/rtr/pdu_sender.h @@ -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); diff --git a/src/rtr/rtr.c b/src/rtr/rtr.c index b2aa367d..606f1db6 100644 --- a/src/rtr/rtr.c +++ b/src/rtr/rtr.c @@ -12,8 +12,8 @@ #include #include -#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" diff --git a/src/slurm/db_slurm.c b/src/slurm/db_slurm.c index aa16eaa8..393f09b3 100644 --- a/src/slurm/db_slurm.c +++ b/src/slurm/db_slurm.c @@ -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); } /* diff --git a/src/slurm/db_slurm.h b/src/slurm/db_slurm.h index 76abea2f..9e693eeb 100644 --- a/src/slurm/db_slurm.h +++ b/src/slurm/db_slurm.h @@ -4,8 +4,8 @@ #include #include #include - -#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 diff --git a/src/slurm/slurm_parser.c b/src/slurm/slurm_parser.c index 6d37fb0b..e5426d51 100644 --- a/src/slurm/slurm_parser.c +++ b/src/slurm/slurm_parser.c @@ -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 */ diff --git a/src/address.c b/src/types/address.c similarity index 96% rename from src/address.c rename to src/types/address.c index 3316ae4a..4eeb2065 100644 --- a/src/address.c +++ b/src/types/address.c @@ -1,4 +1,4 @@ -#include "address.h" +#include "types/address.h" #include /* strtoul() */ #include /* 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; diff --git a/src/address.h b/src/types/address.h similarity index 85% rename from src/address.h rename to src/types/address.h index 8fbf7a71..9ac41263 100644 --- a/src/address.h +++ b/src/types/address.h @@ -1,5 +1,5 @@ -#ifndef SRC_ADDRESS_H_ -#define SRC_ADDRESS_H_ +#ifndef SRC_TYPES_ADDRESS_H_ +#define SRC_TYPES_ADDRESS_H_ #include #include @@ -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_ */ diff --git a/src/rtr/db/vrp.c b/src/types/delta.c similarity index 53% rename from src/rtr/db/vrp.c rename to src/types/delta.c index 659aae22..dacdf195 100644 --- a/src/rtr/db/vrp.c +++ b/src/types/delta.c @@ -1,6 +1,6 @@ -#include "rtr/db/vrp.h" +#include "types/delta.h" -#include +#include 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 index 00000000..9b7914ea --- /dev/null +++ b/src/types/delta.h @@ -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_ */ diff --git a/src/object/router_key.c b/src/types/router_key.c similarity index 58% rename from src/object/router_key.c rename to src/types/router_key.c index bc714c09..ceda4756 100644 --- a/src/object/router_key.c +++ b/src/types/router_key.c @@ -1,5 +1,6 @@ -#include "object/router_key.h" +#include "types/router_key.h" +#include #include 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; +} diff --git a/src/object/router_key.h b/src/types/router_key.h similarity index 79% rename from src/object/router_key.h rename to src/types/router_key.h index 26278a6c..9609981a 100644 --- a/src/object/router_key.h +++ b/src/types/router_key.h @@ -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 #include @@ -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_ */ diff --git a/src/serial.c b/src/types/serial.c similarity index 90% rename from src/serial.c rename to src/types/serial.c index b364ec90..9fbe6558 100644 --- a/src/serial.c +++ b/src/types/serial.c @@ -1,4 +1,4 @@ -#include "serial.h" +#include "types/serial.h" /* * Returns s1 < s2 , according to RFC 1982 serial arithmetic. diff --git a/src/serial.h b/src/types/serial.h similarity index 56% rename from src/serial.h rename to src/types/serial.h index 32e421a2..a9b1683d 100644 --- a/src/serial.h +++ b/src/types/serial.h @@ -1,5 +1,5 @@ -#ifndef SRC_SERIAL_H_ -#define SRC_SERIAL_H_ +#ifndef SRC_TYPES_SERIAL_H_ +#define SRC_TYPES_SERIAL_H_ #include #include @@ -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_ */ diff --git a/src/uri.c b/src/types/uri.c similarity index 99% rename from src/uri.c rename to src/types/uri.c index da92e8e6..52e76f4a 100644 --- a/src/uri.c +++ b/src/types/uri.c @@ -1,4 +1,4 @@ -#include "uri.h" +#include "types/uri.h" #include #include @@ -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); } - diff --git a/src/uri.h b/src/types/uri.h similarity index 94% rename from src/uri.h rename to src/types/uri.h index 6e2d7c1f..c9d59bbf 100644 --- a/src/uri.h +++ b/src/types/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 #include @@ -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 index 00000000..b2548a47 --- /dev/null +++ b/src/types/vrp.c @@ -0,0 +1,53 @@ +#include "types/vrp.h" + +#include +#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 index 00000000..3be86f8e --- /dev/null +++ b/src/types/vrp.h @@ -0,0 +1,32 @@ +#ifndef SRC_TYPES_VRP_H_ +#define SRC_TYPES_VRP_H_ + +#include +#include +#include + +/* + * 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_ */ diff --git a/src/validation_handler.h b/src/validation_handler.h index cb3a2a51..542a64f0 100644 --- a/src/validation_handler.h +++ b/src/validation_handler.h @@ -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. diff --git a/test/Makefile.am b/test/Makefile.am index bb523143..8cc0bbd4 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -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 diff --git a/test/rsync_test.c b/test/rsync_test.c index 53c3be05..81e102dc 100644 --- a/test/rsync_test.c +++ b/test/rsync_test.c @@ -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" diff --git a/test/rtr/db/db_table_test.c b/test/rtr/db/db_table_test.c index eb1cfb1d..2122f9b7 100644 --- a/test/rtr/db/db_table_test.c +++ b/test/rtr/db/db_table_test.c @@ -1,12 +1,13 @@ #include #include -#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" diff --git a/test/rtr/db/deltas_array_test.c b/test/rtr/db/deltas_array_test.c index b20d0089..2ad2316f 100644 --- a/test/rtr/db/deltas_array_test.c +++ b/test/rtr/db/deltas_array_test.c @@ -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" diff --git a/test/rtr/db/rtr_db_impersonator.c b/test/rtr/db/rtr_db_impersonator.c index 84ff9745..b9e9c5a3 100644 --- a/test/rtr/db/rtr_db_impersonator.c +++ b/test/rtr/db/rtr_db_impersonator.c @@ -1,7 +1,7 @@ #include #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, diff --git a/test/rtr/db/vrps_test.c b/test/rtr/db/vrps_test.c index c5a1d72d..d96b1eec 100644 --- a/test/rtr/db/vrps_test.c +++ b/test/rtr/db/vrps_test.c @@ -10,9 +10,10 @@ #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 diff --git a/test/rtr/pdu_handler_test.c b/test/rtr/pdu_handler_test.c index 3fca9f42..29694df7 100644 --- a/test/rtr/pdu_handler_test.c +++ b/test/rtr/pdu_handler_test.c @@ -10,15 +10,16 @@ #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" diff --git a/test/tal_test.c b/test/tal_test.c index 795d7a3d..0f7399ab 100644 --- a/test/tal_test.c +++ b/test/tal_test.c @@ -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" diff --git a/test/address_test.c b/test/types/address_test.c similarity index 99% rename from test/address_test.c rename to test/types/address_test.c index d370294e..7636386e 100644 --- a/test/address_test.c +++ b/test/types/address_test.c @@ -2,10 +2,10 @@ #include #include -#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) diff --git a/test/serial_test.c b/test/types/serial_test.c similarity index 99% rename from test/serial_test.c rename to test/types/serial_test.c index e3c253e3..494e8db9 100644 --- a/test/serial_test.c +++ b/test/types/serial_test.c @@ -1,7 +1,7 @@ #include #include -#include "serial.c" +#include "types/serial.c" START_TEST(pivot_0) { diff --git a/test/uri_test.c b/test/types/uri_test.c similarity index 98% rename from test/uri_test.c rename to test/types/uri_test.c index be5c1b9b..e022d917 100644 --- a/test/uri_test.c +++ b/test/types/uri_test.c @@ -2,10 +2,10 @@ #include #include -#include "uri.c" #include "common.c" #include "log.c" #include "impersonator.c" +#include "types/uri.c" static int test_validate(char const *src)