summaryrefslogtreecommitdiffstats
path: root/mmss/mmss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/mmss.cpp')
-rw-r--r--mmss/mmss.cpp53
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;
}