summaryrefslogtreecommitdiffstats
path: root/mmss/mmss.c
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/mmss.c')
-rw-r--r--mmss/mmss.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/mmss/mmss.c b/mmss/mmss.c
index eca99ad..abb4835 100644
--- a/mmss/mmss.c
+++ b/mmss/mmss.c
@@ -31,11 +31,19 @@
#include <stdlib.h>
+static void init_nodes(gmrf_t *nodes) {
+ gmrf_t *node;
+ for (node = nodes; node; node = node->next) {
+ node->ctx = node->proto->init(node);
+ }
+}
+
+
int main() {
- mmss_context_t ctx = { .now = 0 };
+ mmss_t mmss = { .now = 0 };
mmss_network_t net = { .mtu = 1500 };
- gmrf_context_t node1 = { .mmss = &ctx }, node2 = { .mmss = &ctx };
+ gmrf_t node1 = { .mmss = &mmss }, node2 = { .mmss = &mmss };
gmrf_iface_t iface1 = {}, iface2 = {};
iface1.net = &net;
@@ -53,10 +61,12 @@ int main() {
net.interfaces = &iface2;
node2.next = &node1;
- gmrf_context_t *nodes = &node2;
+ gmrf_t *nodes = &node2;
+
+ init_nodes(nodes);
while (true) {
- int timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue);
+ int timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue);
if (timeout < 0) {
fprintf(stderr, "Nothing queued, deadlock occured.\n");
@@ -64,25 +74,24 @@ int main() {
}
if (timeout > 0) {
- assert(!mmss_queue_get(&ctx, &ctx.packet_queue));
+ assert(!mmss_queue_get(&mmss, &mmss.packet_queue));
- ctx.now += timeout;
- timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue);
+ mmss.now += timeout;
+ timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue);
}
assert(timeout == 0);
while (timeout == 0) {
- mmss_packet_t *packet = mmss_queue_get(&ctx, &ctx.packet_queue);
+ mmss_packet_t *packet = mmss_queue_get(&mmss, &mmss.packet_queue);
assert(packet);
- packet->dest->node->handle_packet(packet->dest->node, packet->dest,
- &packet->source->address, packet->data,
- packet->len);
+ packet->dest->node->proto->handle_packet(packet->dest->node, packet->dest->node->ctx, packet->dest,
+ &packet->source->address, packet->data, packet->len);
free(packet);
- timeout = mmss_queue_timeout(&ctx, &ctx.packet_queue);
+ timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue);
}
}