From 2a443c48bde3ad11c17e31cbf66aff9e04acc7f2 Mon Sep 17 00:00:00 2001 From: fdai7354 <alan.muhemad@informatik.hs-fulda.de> Date: Wed, 12 Feb 2025 11:30:31 +0100 Subject: [PATCH] CRC32 added --- Kernel/kernel_M.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Kernel/kernel_M.c b/Kernel/kernel_M.c index fcd60ec..67a1fa5 100644 --- a/Kernel/kernel_M.c +++ b/Kernel/kernel_M.c @@ -6,6 +6,7 @@ #include <linux/cdev.h> // For cdev #include <linux/device.h> // For device_create, class_create #include <linux/slab.h> // For kmalloc, kfree +#include <linux/crc32.h> // Include CRC32 #define DEVICE_NAME "packet_receiver" #define CLASS_NAME "packet_class" @@ -51,6 +52,11 @@ static struct file_operations fops = { .release = packet_release, //not used }; +// CRC32 Calculation Function +static u32 calculate_crc32(const char *data, size_t len) { + return crc32(0, data, len); +} + // ====================== Device Open ====================== static int packet_open(struct inode *inode, struct file *file) { printk(KERN_INFO "packet_receiver: Device opened.\n"); @@ -124,6 +130,17 @@ static ssize_t packet_write(struct file *filp, const char __user *buf, size_t le printk(KERN_INFO " value_id_1=%d value_1=\"%s\"\n", value_id_1, value_str_1); printk(KERN_INFO " crc=0x%lX\n", crc_val); + // Calculate CRC32 for the received data excluding the CRC field + size_t crc_len = strrchr(recv_buffer, 'C') - recv_buffer; + u32 calculated_crc = calculate_crc32(recv_buffer, crc_len); + + if (calculated_crc == received_crc) { + printk(KERN_INFO "packet_receiver: CRC check passed!\n"); + } else { + printk(KERN_ERR "packet_receiver: CRC mismatch! Expected: 0x%08X, Received: 0x%08lX\n", + calculated_crc, received_crc); + } + // Return the number of bytes written return len; } -- GitLab