From cd7b005519ade8ab6c97fcb21590b71b7d1be6e3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 11:54:46 +0200 Subject: Adding upstream version 0.8.0. Signed-off-by: Daniel Baumann --- doxygen/examples/rtr_mgr.c | 110 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 doxygen/examples/rtr_mgr.c (limited to 'doxygen/examples/rtr_mgr.c') diff --git a/doxygen/examples/rtr_mgr.c b/doxygen/examples/rtr_mgr.c new file mode 100644 index 0000000..30d05b9 --- /dev/null +++ b/doxygen/examples/rtr_mgr.c @@ -0,0 +1,110 @@ +#include "rtrlib/rtrlib.h" + +#include +#include +#include +#include + +int main() +{ + //create a SSH transport socket + char ssh_host[] = "123.231.123.221"; + char ssh_user[] = "rpki_user"; + char ssh_hostkey[] = "/etc/rpki-rtr/hostkey"; + char ssh_privkey[] = "/etc/rpki-rtr/client.priv"; + struct tr_socket tr_ssh; + struct tr_ssh_config config = { + ssh_host, //IP + 22, //Port + NULL, //Source address + ssh_user, + ssh_hostkey, //Server hostkey + ssh_privkey, //Private key + NULL, // data + NULL, // new_socket() + 0, // connect timeout + NULL, // password + }; + tr_ssh_init(&config, &tr_ssh); + + //create a TCP transport socket + struct tr_socket tr_tcp; + char tcp_host[] = "rpki-validator.realmv6.org"; + char tcp_port[] = "8282"; + + struct tr_tcp_config tcp_config = { + tcp_host, //IP + tcp_port, //Port + NULL, //Source address + NULL, //data + NULL, //get_socket() + 0, // connect timeout + }; + tr_tcp_init(&tcp_config, &tr_tcp); + + //create 3 rtr_sockets and associate them with the transprort sockets + struct rtr_socket rtr_ssh, rtr_tcp; + rtr_ssh.tr_socket = &tr_ssh; + rtr_tcp.tr_socket = &tr_tcp; + + //create a rtr_mgr_group array with 2 elements + struct rtr_mgr_group groups[2]; + + //The first group contains both TCP RTR sockets + groups[0].sockets = malloc(sizeof(struct rtr_socket *)); + groups[0].sockets_len = 1; + groups[0].sockets[0] = &rtr_tcp; + groups[0].preference = 1; //Preference value of this group + + //The seconds group contains only the SSH RTR socket + groups[1].sockets = malloc(1 * sizeof(struct rtr_socket *)); + groups[1].sockets_len = 1; + groups[1].sockets[0] = &rtr_ssh; + groups[1].preference = 2; + + //create a rtr_mgr_config struct that stores the group + + //initialize all rtr_sockets in the server pool with the same settings + struct rtr_mgr_config *conf; + rtr_mgr_init(&conf, groups, 2, 30, 600, 600, NULL, NULL, NULL, NULL); + + //start the connection manager + rtr_mgr_start(conf); + + //wait till at least one rtr_mgr_group is fully synchronized with the server + while (!rtr_mgr_conf_in_sync(conf)) { + sleep(1); + } + + //validate the BGP-Route 10.10.0.0/24, origin ASN: 12345 + struct lrtr_ip_addr pref; + lrtr_ip_str_to_addr("10.10.0.0", &pref); + enum pfxv_state result; + const uint8_t mask = 24; + rtr_mgr_validate(conf, 12345, &pref, mask, &result); + + //output the result of the prefix validation above + //to showcase the returned states. + char buffer[INET_ADDRSTRLEN]; + lrtr_ip_addr_to_str(&pref, buffer, sizeof(buffer)); + + printf("RESULT: The prefix %s/%i ", buffer, mask); + switch (result) { + case BGP_PFXV_STATE_VALID: + printf("is valid.\n"); + break; + case BGP_PFXV_STATE_INVALID: + printf("is invalid.\n"); + break; + case BGP_PFXV_STATE_NOT_FOUND: + printf("was not found.\n"); + break; + default: + break; + } + + rtr_mgr_stop(conf); + rtr_mgr_free(conf); + free(groups[0].sockets); + free(groups[1].sockets); +} -- cgit v1.2.3