summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-09-25 14:23:36 -0400
committerIan Moffett <ian@osmora.org>2025-09-25 14:23:36 -0400
commitafcdcf6ae6d95eb828733994c7de30f8ab095dcc (patch)
treee45ee28dc7bff6da7ab0d5f6a3e2b27c6ac36aa8 /src/main.c
parent25872d593fc4f9d2845ef6f676ce4ec3d55e9aac (diff)
dgram: Add support for data reception
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 5cdcc63..c2087e7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -35,6 +35,7 @@
#include <net/ethernet.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include "if_ether.h"
@@ -44,6 +45,7 @@
#define TEST_STR "Hello from o.1p!! Meow meow!"
static const char *iface = NULL;
+static bool do_recv = false;
static void
help(char **argv)
@@ -78,10 +80,36 @@ data_send(void)
return 0;
}
+static int
+data_recv(void)
+{
+ char buf[sizeof(TEST_STR) + 8];
+ struct onet_link link;
+ int error;
+
+ /* Open a link */
+ error = onet_open(iface, &link);
+ if (error < 0) {
+ return error;
+ }
+
+ memset(buf, 0, sizeof(buf));
+
+ /* Recv data */
+ dgram_recv(
+ &link, buf,
+ sizeof(TEST_STR)
+ );
+
+ printf("%s\n", buf);
+ onet_close(&link);
+ return 0;
+}
+
int
main(int argc, char **argv)
{
- int opt;
+ int opt, error;
if (argc < 2) {
printf("error: too few arguments!\n");
@@ -89,7 +117,7 @@ main(int argc, char **argv)
return -1;
}
- while ((opt = getopt(argc, argv, "i:h")) != -1) {
+ while ((opt = getopt(argc, argv, "i:hr")) != -1) {
switch (opt) {
case 'h':
help(argv);
@@ -97,6 +125,9 @@ main(int argc, char **argv)
case 'i':
iface = optarg;
break;
+ case 'r':
+ do_recv = true;
+ break;
}
}
@@ -106,5 +137,6 @@ main(int argc, char **argv)
return -1;
}
- return data_send();
+ error = do_recv ? data_recv() : data_send();
+ return error;
}