netlink 库函数:

http://www.infradead.org/~tgr/libnl/doc/core.html#core_netlink_fundamentals

#define NETLINK_TEST            (31)

static
int s_send_ack_to_test(struct lua_nl_ack *ack)
{
struct sk_buff *nl_skb;
struct nlmsghdr *nlh; int ret;
int len = sizeof(*ack); nl_skb = nlmsg_new(len, GFP_ATOMIC);
if (!nl_skb) {
pr_err("netlink: nlmsg_new fail\n");
return -1;
} nlh = nlmsg_put(nl_skb, 0, 0, NETLINK_WNS, len, 0);
if(nlh == NULL) {
pr_err("netlink: nlmsg_put fail\n");
nlmsg_free(nl_skb);
return -1;
} memcpy(nlmsg_data(nlh), (void *)ack, len);
ret = netlink_unicast(nlsk, nl_skb, NETLINK_WNS_LUA, MSG_DONTWAIT); return ret;
} static
void test_input_cb(struct sk_buff *skb)
{
struct nlmsghdr *nlh = NULL;
struct lua_nl_req *req = NULL;
struct lua_nl_ack ack; nlh = (struct nlmsghdr *)skb->data; if (NLMSG_OK(nlh, skb->len) && skb->len >= NLMSG_HDRLEN + sizeof(struct lua_nl_req)) {
req = (struct lua_nl_req *)NLMSG_DATA(nlh); (void)s_get_ip_mac(req, &ack); if (s_send_ack_to_test(&ack) < 0) {
pr_err("netlink: s_send_ack_to_lua error\n");
} //TODO: netlink消息失败的情况需要再仔细考虑下,可能导致阻塞 }
else {
pr_err("netlink: parameters error\n");
} return ;
} static struct netlink_kernel_cfg cfg = {
.input = test_input_cb,
}; static
int s_init_netlink()
{
nlsk = netlink_kernel_create(&init_net, NETLINK_TEST, THIS_MODULE, &cfg);
if (!nlsk) {
pr_err("netlink: init fail\n");
return -1;
} return 0;
}

Netlink 内核实现分析 4的更多相关文章

  1. Netlink 内核实现分析(二):通信

    在前一篇博文<Netlink 内核实现分析(一):创建>中已经较为具体的分析了Linux内核netlink子系统的初始化流程.内核netlink套接字的创建.应用层netlink套接字的创 ...

  2. Netlink 内核实现分析 3

    Netlink IPC 数据结构 #define NETLINK_ROUTE 0 /* Routing/device hook */ #define NETLINK_UNUSED 1 /* Unuse ...

  3. Netlink 内核实现分析 2

    netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...

  4. Netlink 内核实现分析 1

    Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,在一般情况下,用户态和内核态通信会使用传统的Ioctl.sysfs属性文件 ...

  5. MINIX3 内核时钟分析

    MINIX3 内核时钟分析  4.1 内核时钟概要  先想想为什么 OS 需要时钟?时钟是异步的一个非常重要的标志,设想一下,如 果我们的应用程序需要在多少秒后将触发某个程序或者进程,我们该怎么做到? ...

  6. mkimage工具 加载地址和入口地址 内核启动分析

    第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...

  7. 第3阶段——内核启动分析之start_kernel初始化函数(5)

    内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...

  8. 几个常用内核函数(《Windows内核情景分析》)

    参考:<Windows内核情景分析> 0x01  ObReferenceObjectByHandle 这个函数从句柄得到对应的内核对象,并递增其引用计数. NTSTATUS ObRefer ...

  9. [1]windows 内核情景分析---说明

    本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神. 说明 本文结合<Windows内核情景分析>(毛德操著).< ...

随机推荐

  1. JSX 详解

    一 jsx 的本质是什么? jsx是语法糖,需要被编译成js才能运行. jsx 看似是html 结构,实质是js结构的语法糖,在代码编译阶段被编译成js结构.所以jsx的本质可描述为看似html结构的 ...

  2. CLion 控制台输出内容乱码问题的解决方法

    问题再现 #include "stdio.h" #include "stdlib.h" int main() { printf("嘤嘤嘤") ...

  3. day22 Pyhton学习 re模块和正则表达式

    正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个" ...

  4. python程序整理(1)

    ''' 用户登录验证 要求: 1. 系统⾃动⽣成4位随机数. 作为登录验证码. 直接用就好. 这里不用纠结 提示. 生成随机数的办法. from random import randint num = ...

  5. mysql 操作数据库

    创建数据库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name(数据库名字) #添加 IF NOT EXISTS,如果已有数据库,将会提醒,不会出现错 ...

  6. 【全网免费VIP观看】哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新

    哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新 前言 突然想看电视,结果 没有VIP 又不想花钱,这免费的不久来啦. 示 ...

  7. day69:Vue:组件化开发&Vue-Router&Vue-client

    目录 组件化开发 1.什么是组件? 2.局部组件 3.全局组件 4.父组件向子组件传值 5.子组件往父组件传值 6.平行组件传值 Vue-Router的使用 Vue自动化工具:Vue-Client 组 ...

  8. python爬虫 -掘金

    import json from time import sleep import requests url = "https://web-api.juejin.im/query" ...

  9. C# 面试前的准备_基础知识点的回顾_02

    1.数据库的范式 这算入门问题了吧,但凡是个数据库类的,都得问吧, 但我们在回答的时候开始背书啦 第一范式(1NF)无重复的列 第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ] 第三范 ...

  10. Curl可以模拟浏览器

    curl直接访问被拒绝 [22:10:00 root@C7 ~]#curl -I www.163.com HTTP/1.1 403 Forbidden Date: Wed, 24 Jun 2020 0 ...