From 6c8c0a3ece10938d4b9cc28c9e7e940b01cae7e8 Mon Sep 17 00:00:00 2001
From: "ruben.otto" <ruben.otto@informatik.hs-fulda.de>
Date: Sun, 9 Feb 2025 20:53:14 +0100
Subject: [PATCH] feat: send daemon message to kernel

---
 daemon/src/main.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/daemon/src/main.c b/daemon/src/main.c
index 3f0106a..6c9187b 100644
--- a/daemon/src/main.c
+++ b/daemon/src/main.c
@@ -1,6 +1,10 @@
 #include "../../common/include/message.h"
+#include "../../common/include/userspace_comm.h"
 #include "../include/receive.h"
+#include "../include/send.h"
+#include <errno.h>
 #include <stddef.h>
+#include <string.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -11,8 +15,11 @@
 #include <signal.h>
 
 userspace_receive_handle_t userspace_receive_handle;
+kernel_send_handle_t kernel_send_handle;
+
 void signal_handler(int sig) {
     destroy_userspace_receive_handle(&userspace_receive_handle);
+    destroy_kernel_send_handle(&kernel_send_handle);
     exit(1);
 }
 
@@ -65,7 +72,17 @@ void print_message_data(message_t* message) {
 
 int main() {
     if (create_userspace_receive_handle(&userspace_receive_handle) != 0) {
-        perror("Failed to create receive module");
+        if (errno == EEXIST) {
+            fprintf(stderr, "Failed to create message queue (file '%s' exists, has another process already created the message queue?): %s\n", MSG_QUEUE_KEY, strerror(errno));
+        } else {
+            perror("Failed to create message queue");
+        }
+        return EXIT_FAILURE;
+    }
+
+    if (create_kernel_send_handle(&kernel_send_handle) != 0) {
+        destroy_userspace_receive_handle(&userspace_receive_handle);
+        perror("Failed to create kernel connection (is the kernel module loaded?)");
         return EXIT_FAILURE;
     }
 
@@ -85,6 +102,9 @@ int main() {
 
         printf("Received data from %d with length %d: ", message.measurement_id, message.length);
         print_message_data(&message);
+        if (send_kernel_message(&kernel_send_handle, &message) == -1) {
+            printf(" (failed to send to kernel)");
+        }
         printf("\n");
     }
 
-- 
GitLab