netlink demo

本文介绍了如何使用Netlink进行用户空间与内核空间通信。通过示例代码展示了kernel mode的netlink_test_kmode.c和user mode的netlink_demo_umode.c,详细解释了发送和接收消息的过程。编译并运行这两个模块,可以实现双向通信。
摘要由CSDN通过智能技术生成

最近在学习linux netlink相关内容,发现这是一个用户空间和内核空间通信的好办法,于是写一个demo体验一下,一下代码基于linux kernel 3.19。

kernel mode的代码netlink_demo_kmode.c如下:

----------------------------------------------------------------------------------------------------------------

#include <linux/kernel.h>
#include <linux/module.h>
#include <net/net_namespace.h>
#include <linux/netlink.h>
#include <net/sock.h>

#define NETLINK_TEST 20

static struct sock *netlink_test_sk;

static void netlink_test_rcv(struct sk_buff *skb)
{
struct sk_buff *skb_in, *skb_out;
struct nlmsghdr *nlh;
char message[32] = {0};
int seq, pid;
unsigned int datalength;

skb_in = skb_get(skb);
if (skb_in->len >= nlmsg_total_size(0)) {
nlh = nlmsg_hdr(skb_in);

pid = nlh->nlmsg_pid;
seq = nlh->nlmsg_seq;
printk("message received from process %d: %s\n", pid, (char*)NLMSG_DATA(nlh));

sprintf(message, "hello, process %d", pid);
datalength = strlen(message) + 1;

skb_out = nlmsg_new(NLMSG_LENGTH(datalength), GFP_KERNEL);

nlh = nlmsg_put(skb_out, pid, seq, 0, NLMSG_ALIGN(datalength), 0);

memcpy(nlmsg_data(nlh), message, datalength);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值