问题标签 [netlink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 通用网络链接中策略和属性的概念是什么?
我是netlink
编程新手。我正在编写一个generic
netlink
用于创建netlink
协议族的程序。我在互联网上搜索了许多文件,发现了一些“属性和政策”,比如定义netlink
家庭的东西。
我对这些事情完全感到困惑。
我发现了类似下面关于属性的内容linux/netlink.h
政策是一系列nla_policy
结构。我的问题是:
- 标题和属性之间有什么关系?请解释“属性”。
- 什么是策略,它的需求是什么,为什么我们要为此使用数组?
我发现了一些关于“它定义属性类型”之类的策略,
这是什么意思?我的意思是“属性类型的含义是什么?”
这可能是一个无意义的问题,但我完全糊涂了。我已经尝试了解这些东西超过三天了,请帮助我。
谢谢..
c - 使用 rtnetlink,回复消息类型到 RTM_GETROUTE 消息?
我已经使用 netlink 套接字向内核发送了 RTM_GETROUTE 消息。现在我正在听内核消息。
内核通过 netlink 套接字发送nlmsghdr结构作为回复。我需要知道它的消息类型(nlmsg_type)是什么?(我的代码也在监听 rout 删除/创建事件,我要区分)。
又是 RTM_GETROUTE 回复吗?任何示例代码或链接表示赞赏。
对于路由,我只能找到 NEWROUTE、DELROUTE 和 GETROUTE 消息,但所有 3 个似乎都有其他用途。(第一个创建路由时,第二个删除一个路由,第三个用于请求我使用的。)
这是我发送消息的代码。
有一个解析接收到的消息的示例,但我需要知道我需要的消息类型(nlmsg_type)才能过滤掉其他消息。
c - 无法使用 NETLINK_ROUTE 通道接收从内核模块发送到用户应用程序的自定义消息
我正在使用 Netlink 套接字将有关以太网接口状态的自定义通知从内核模块发送到NETLINK_ROUTE
通道上的用户空间应用程序。我浏览了几篇文章和论文,但它们都展示了一种方法,您需要在其中定义自己的系列,例如在netlink.h
标题中定义 NETLINK_TEST 或使用NETLINK_GENERIC
. 我知道使用 NETLINK_ROUTE 的套接字已经归内核所有,因此无法在内核模块中创建它。我无法在用户空间接收消息。任何指导将不胜感激。所以这里有两个代码:
内核模块:
用户空间应用:
linux-kernel - netlink 和通用 netlink 协议
我已经阅读了通用 netlink How-To,我发现 netlink 的唯一主要缺点是协议族的数量限制为 MAX_LINKS (32),因此他们创建了通用 netlink 协议。这是唯一的原因吗?这是否意味着它建议使用 genl 而不是 netlink,例如作为用户和内核空间之间的通信?与传统的网络链接相比,genl 是否被认为更具可扩展性和可管理性?
谢谢。
c - 如何从 strace 输出中解码此信息
我编写了一个小的 go 脚本并使用 strace 跟踪它,虽然这个脚本,我正在尝试使用 netlink 协议从内核获取审计消息,就像 auditd 一样。
以下是我的 go 脚本上的 strace 输出 - http://paste.ubuntu.com/8272760/
我试图找到 auditd 提供给 sendto 函数的参数。当我在 auditd 上运行 strace 时,我得到以下输出
当我 strace 我的 go 文件时,我得到以下输出。我正在寻找解码此语句的第二个参数
再具体一点
现在我想将其转换为字符串或字节数组,有没有办法将其转换为字符串或字节数组?
在我实际的 go 代码中,这个参数是一个字节数组。
https://github.com/mozilla/Audit-Go/blob/testing/netlink_old.go#L58
c - 在内核和用户端保持 Netlink Socket 打开
在我阅读了一些关于 netlink 套接字的文章后,我尝试在Netlink SO采用这个答案。
我在用户空间程序中添加了一个无限循环:
获取更多消息(链接答案中的程序在收到一条消息后停止)。
我还在我的内核模块中添加了一个计时器,它每 60 秒从内核模块向用户空间程序发送一条消息(下一步是:发送回复)。这行得通,因为我不仅要发送消息,还要使用 printk 写入内核日志,以查看内核模块是否还活着!
我的用户空间程序现在正在收听消息(我希望如此),但没有收到内核发送的任何定时消息。
所以我的问题是:是否可以保持两边的套接字打开并让用户空间程序监听内核模块的消息?
linux - 有人使用netlink进行IPC吗?
我计划使用 netlink 在两个用户态进程之间进行通信。对 netlink 如此挑剔的部分原因是 - 一个进程的大部分处理最终将进入内核空间,并且可以按原样使用基于 netlink 的通信(希望如此)。
我正在采取的方法是 - 定义一个新的 Generic Netlink 系列(我将不得不编写一个内核模块来支持该系列 - 目前看起来如此)。很好,我正在查看一些示例代码,其中内核本质上只是在不同进程之间路由消息,并没有真正做任何工作——这些消息的实际数量是由进程处理的。
我的问题是 - 是否有人在任何项目中以类似的方式使用 netlink?另外-上述方法有意义吗?
我读到了关于基于 netlink 的 DBUS 的提案。但还没有找到任何实现。这最接近我的要求。
谢谢。
c - Netlink 组播内核组
我试图实现的任务实际上非常简单(将字符串“TEST”多播到用户级守护程序),但内核模块无法编译。它因错误而停止:
但不应该只是我定义的多播组吗?
这是“澄清”的代码:
谢谢你的帮助。
编辑
这是客户端代码:
linux - 获取和设置接口地址
有没有办法以与家庭无关的方式在接口上获取和设置 IP 地址?
我发现了有关 getifaddrs 的信息。是否有类似的东西但用于设置地址,或者我需要使用ioclt?
这是我的情况:我需要扩展 IPv4 应用程序管理接口以支持 IPv6 地址。此应用程序将 ioctl 用于 AF_INET。我的问题是,对我来说,为支持 IPv6 的接口添加/删除/状态的最佳方法是什么 - 为 IPv6 添加另一个 ioctl 层,或者将 IPv6 的 netlink 与 IPv4 的 ioctl 混合?
谢谢!
c - 通过通用 netlink 从内核到用户态接收具有 2 个以上字段的结构时出现问题
我正在尝试根据此示例http://www.electronicsfaq.com/2014/02/generic-netlink-sockets-example-code将结构从 LKM 发送/接收到用户区(反之亦然) 。 .html _
我向内核发送一个结构。它接收到结构体,处理信息,并将结构体发送回用户区。但是,如果结构有 2 个字段,我可以发送和接收,但是当我再添加一个字段时,我会收到一个空结构。自 2 天前以来,我已经探索了一些变体,但没有成功。我很困惑,我不确定问题出在哪里?这是代码:
nl_user.c:
}
nl_kernel.c:
全局.h
注意:我在 Oracle VB 中使用的是 Debian 2.6.32-5(这是必要的)。