Netlink 内核实现分析 4
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的更多相关文章
- Netlink 内核实现分析(二):通信
在前一篇博文<Netlink 内核实现分析(一):创建>中已经较为具体的分析了Linux内核netlink子系统的初始化流程.内核netlink套接字的创建.应用层netlink套接字的创 ...
- Netlink 内核实现分析 3
Netlink IPC 数据结构 #define NETLINK_ROUTE 0 /* Routing/device hook */ #define NETLINK_UNUSED 1 /* Unuse ...
- Netlink 内核实现分析 2
netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...
- Netlink 内核实现分析 1
Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,在一般情况下,用户态和内核态通信会使用传统的Ioctl.sysfs属性文件 ...
- MINIX3 内核时钟分析
MINIX3 内核时钟分析 4.1 内核时钟概要 先想想为什么 OS 需要时钟?时钟是异步的一个非常重要的标志,设想一下,如 果我们的应用程序需要在多少秒后将触发某个程序或者进程,我们该怎么做到? ...
- mkimage工具 加载地址和入口地址 内核启动分析
第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...
- 第3阶段——内核启动分析之start_kernel初始化函数(5)
内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...
- 几个常用内核函数(《Windows内核情景分析》)
参考:<Windows内核情景分析> 0x01 ObReferenceObjectByHandle 这个函数从句柄得到对应的内核对象,并递增其引用计数. NTSTATUS ObRefer ...
- [1]windows 内核情景分析---说明
本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神. 说明 本文结合<Windows内核情景分析>(毛德操著).< ...
随机推荐
- 如何让矢量瓦片配图神器maputnik支持 geoserver
关键词:maputnik.geoserver.矢量地图.矢量瓦片.mapbox.mapboxgl.地图配图.地图配色 一直想搞一个类似百度.高德地图那样的矢量地图配图工具 百度个性化地图配图工具: 高 ...
- element中过滤器filters的使用(开发小记)
之前在开发过程中遇到这么一个问题,一串数据需要在el-table中展示,其中含有金额字段,需要将其转换成标准数据格式,即三位一个逗号间隔. 今年刚毕业就上手项目了,第一次接触的Vue,开发经验少,也忘 ...
- MeteoInfo家族的新产品:MeteoInfoLab
为了更方便地处理各种数据并绘图,尝试开发了一个新的软件产品MeteoInfoLab,软件设计上参考了MatLab和Spider.软件以脚本程序和命令行交互为主,基于MeteoInfo库并利用Jytho ...
- Hugo+Github 搭建个人博客(Windows环境下)
目录 Hugo+Github 搭建个人博客(Windows环境下) 1.前言 2.Differences 2.1 https vs SSH 2.2 新建的github的仓库名必须为 用户名+githu ...
- spring-boot-route(二十一)quartz实现动态定时任务
Quartz是一个定时任务的调度框架,涉及到的主要概念有以下几个: Scheduler:调度器,所有的调度都由它控制,所有的任务都由它管理. Job:任务,定义业务逻辑. JobDetail:基于Jo ...
- 面试题 02.02. [链表][双指针]返回倒数第 k 个节点
面试题 02.02. 返回倒数第 k 个节点 方法一:使用外部空间 // 执行用时: 1 ms , 在所有 Java 提交中击败了 16.75% 的用户 // 内存消耗: 36.8 MB , 在所有 ...
- R语言学习网站(分享)
1. https://www.r-bloggers.com/ 2. https://www.kaggle.com/datasets 3. RStudio download: https://www.r ...
- 编写shell脚本的规范
目录 编写shell脚本的一些规范 解释器 添加脚本版本和注释功能 添加脚本调试 变量命名 全局变量和局部变量 命名规范 函数命名 脚本命名 函数 引用模块或文件 脚本日志 配置文件 其他 编写she ...
- Luogu P3846 [TJOI2007] 可爱的质数/【模板】BSGS
题意 给定 \(y,z,p\),求最小的正整数 \(x\) 满足 \(y^x\equiv z\bmod p\),保证 \(p\) 是质数. \(\texttt{Data Range:}2\leq y, ...
- vue-cli中使用swiper
1.当前项目配置 cnpm install swiper vue-awesome-swiper --save 或指定版本下载 cnpm install swiper@5.4.5 vue-awesome ...