#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);