commit 946a622209924d863da5124a288e2b76ef4d9230 Author: lumos Date: Sat Jun 7 23:26:20 2025 +0800 Add Makefile and netlink_logger module for custom netlink messaging diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f38c828 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +obj-m += netlink_logger.o + +KDIR := /lib/modules/$(shell uname -r)/build +PWD := $(shell pwd) + +all: + $(MAKE) -C $(KDIR) M=$(PWD) modules + +clean: + $(MAKE) -C $(KDIR) M=$(PWD) clean + +load: + sudo insmod netlink_logger.ko + +unload: + sudo rmmod netlink_logger \ No newline at end of file diff --git a/netlink_logger.c b/netlink_logger.c new file mode 100644 index 0000000..665bbee --- /dev/null +++ b/netlink_logger.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include +#include +#include + +#define NETLINK_USER_CUSTOM 31 + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Leo"); +MODULE_DESCRIPTION("Netlink message logger for custom protocol"); + +static struct sock *nl_sk = NULL; + +static void netlink_recv_msg(struct sk_buff *skb) +{ + struct nlmsghdr *nlh; + char *payload; + + if (!skb) + return; + + nlh = nlmsg_hdr(skb); + payload = (char *)nlmsg_data(nlh); + + pr_info("[netlink_logger] Received netlink msg: %s\n", payload); +} + +static int __init netlink_logger_init(void) +{ + struct netlink_kernel_cfg cfg = { + .input = netlink_recv_msg, + }; + + nl_sk = netlink_kernel_create(&init_net, NETLINK_USER_CUSTOM, &cfg); + if (!nl_sk) { + pr_err("[netlink_logger] Failed to create netlink socket\n"); + return -ENOMEM; + } + + pr_info("[netlink_logger] Netlink logger module loaded (protocol: %d)\n", NETLINK_USER_CUSTOM); + return 0; +} + +static void __exit netlink_logger_exit(void) +{ + if (nl_sk) + netlink_kernel_release(nl_sk); + pr_info("[netlink_logger] Module unloaded\n"); +} + +module_init(netlink_logger_init); +module_exit(netlink_logger_exit);