diff options
Diffstat (limited to 'mmss/mmss.cpp')
-rw-r--r-- | mmss/mmss.cpp | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/mmss/mmss.cpp b/mmss/mmss.cpp index 8447e5e..cb50329 100644 --- a/mmss/mmss.cpp +++ b/mmss/mmss.cpp @@ -28,7 +28,6 @@ #include <cassert> #include <cstdio> -#include <cstdlib> gmrf_time_t gmrf_now(gmrf_t *gmrf) { @@ -43,6 +42,7 @@ void gmrf_random_bytes(gmrf_t *gmrf, void *buffer, size_t len) { data[i] = rand_r(&gmrf->rand_seed); } +namespace MMSS { static void init_nodes(gmrf_t *nodes) { gmrf_t *node; @@ -62,27 +62,30 @@ static inline int timeout_min(int a, int b) { } -static int get_queue_timeout(const mmss_t *mmss) { - return timeout_min(mmss_queue_timeout(mmss, &mmss->packet_queue), mmss_queue_timeout(mmss, &mmss->scheduled_queue)); +static int get_queue_timeout(const context_t *mmss) { + return timeout_min(mmss->packet_queue.timeout(), mmss->scheduled_queue.timeout()); } +uint64_t now(const context_t *mmss) { + return mmss->now; +} -int main(int argc, char *argv[]) { +void main(int argc, char *argv[]) { if (argc != 2) { - fprintf(stderr, "usage: %s protocol_module\n", argv[0]); - return 1; + std::fprintf(stderr, "usage: %s protocol_module\n", argv[0]); + std::exit(1); } - const mmss_protocol_t *proto = mmss_load_protocol(argv[1]); + const protocol_t *proto = load_protocol(argv[1]); if (!proto) - return 1; + std::exit(1); - mmss_t mmss = { .now = 0 }; - mmss_config_t conf = {}; + context_t mmss; + config_t conf = {}; - mmss_read_config(&mmss, &conf, "babel_test.mmss"); + read_config(&mmss, &conf, "babel_test.mmss"); - mmss_network_t net0 = { .mtu = 1500 }, net1 = { .mtu = 1500 }; + network_t net0 = { .mtu = 1500 }, net1 = { .mtu = 1500 }; gmrf_t node1 = { .name = strdup("node1"), .mmss = &mmss, .rand_seed = 1, .proto = proto }; gmrf_t node2 = { .name = strdup("node2"), .mmss = &mmss, .rand_seed = 2, .proto = proto }; gmrf_t node3 = { .name = strdup("node3"), .mmss = &mmss, .rand_seed = 3, .proto = proto }; @@ -94,10 +97,10 @@ int main(int argc, char *argv[]) { init_nodes(nodes); gmrf_addr_t addr1 = {{1}}, addr2 = {{2}}, addr3 = {{3}}, addr4 = {{4}}; - mmss_add_iface(&node1, &net0, "mmss0", &addr1); - mmss_add_iface(&node2, &net0, "mmss0", &addr2); - mmss_add_iface(&node2, &net1, "mmss1", &addr3); - mmss_add_iface(&node3, &net1, "mmss1", &addr4); + add_iface(&node1, &net0, "mmss0", &addr1); + add_iface(&node2, &net0, "mmss0", &addr2); + add_iface(&node2, &net1, "mmss1", &addr3); + add_iface(&node3, &net1, "mmss1", &addr4); while (true) { int timeout = get_queue_timeout(&mmss); @@ -108,8 +111,8 @@ int main(int argc, char *argv[]) { } if (timeout > 0) { - assert(!mmss_queue_get(&mmss, &mmss.packet_queue)); - assert(!mmss_queue_get(&mmss, &mmss.scheduled_queue)); + assert(!mmss.packet_queue.get()); + assert(!mmss.scheduled_queue.get()); mmss.now += timeout; timeout = get_queue_timeout(&mmss); @@ -118,20 +121,26 @@ int main(int argc, char *argv[]) { assert(timeout == 0); while (timeout == 0) { - mmss_packet_t *packet = reinterpret_cast<mmss_packet_t*>(mmss_queue_get(&mmss, &mmss.packet_queue)); - mmss_scheduled_t *scheduled = reinterpret_cast<mmss_scheduled_t*>(mmss_queue_get(&mmss, &mmss.scheduled_queue)); + std::shared_ptr<packet_t> packet = mmss.packet_queue.get(); + std::shared_ptr<scheduled_t> scheduled = mmss.scheduled_queue.get(); assert(packet || scheduled); if (packet) - mmss_dispatch(packet); + dispatch(packet); if (scheduled) - mmss_run_scheduled(scheduled); + run_scheduled(scheduled); timeout = get_queue_timeout(&mmss); } } +} + +} + +int main(int argc, char *argv[]) { + MMSS::main(argc, argv); return 0; } |