Articles of netlink

从C ++使用netlink的最好方法是什么?

在C ++中用户空间发送和接收netlink消息的最佳方式是什么? 我不想用C.我想连接inet_diag模块。

使用libnl-3发送Netlink Taskstats消息

我想用netlink socket和taskstats读出一个线程的linux内核统计信息。 我可以得到taskstats工作使用python包装( https://github.com/facebook/gnlpy ),但我想做一个C实现。 设置套接字后,消息参数和发送,接收 nl_recvmsgs_default(sock) 总是返回错误代码-7(“无效的input数据或参数”)或-12(“找不到对象”),具体取决于我如何创build要发送的消息。 我检查了nl_recvmsgs_default(袜子)之前的所有方法调用,但没有得到任何错误。 我想我错过了设置消息或套接字的一部分,但不知道它是什么部分。 #include <stdlib.h> #include <unistd.h> #include <linux/taskstats.h> #include <netlink/netlink.h> #include <netlink/genl/genl.h> #include <netlink/genl/ctrl.h> int callback_message(struct nl_msg *, void *); int main(int argc, char ** argv) { struct nl_sock * sock; struct nl_msg * msg; int family; sock = nl_socket_alloc(); // Connect to generic netlink socket on […]

当在导入包中定义struct时如何使用go receiver

目前与vishvananda/netns软件包一起尝试从特定的networking命名空间中提取路由。 有一个定义的Handle结构体,当我为特定的networking命名空间请求一个“句柄”时返回。 因此: func NewHandleAt(ns netns.NsHandle, nlFamilies …int) (*Handle, error) 然后这是一个接收器参数(?)到一个需要该句柄的函数, func (h *Handle) LinkList() ([]Link, error) 我是新来的,不知道如何把这些联系在一起。 我坚持: func (h *Handle) showInts() { int, err := h.netlink.LinkList() if err != nil { log.Fatal(err) } for i, r := range int { log.Printf("%d: %s", i, r.Attrs().Name) } } func main() { ints, err := netlink.LinkList() […]

Linux载波检测通知

Linux中是否有一个接口来获取networking接口载体更改的通知? 我知道它可能轮询与SIOCETHTOOL接口,但想知道是否有任何方式获得通知或任何阻塞的电话,将返回载波检测的变化?

是否可以通过netlink在两个linux内核模块之间进行通信?

众所周知,netlink是用户/内核空间的通讯机制。 我想从我的内核模块通信到另一个。 另一个内核模块已经有了netlink接口。 是否有可能从内核模块连接到netlink,就像我们在用户空间中做的那样?

授予用户使用netlink套接字设置qdisc的权限

我有一个使用Libnl的程序,并尝试通过netlink套接字设置一些qdisc。 我如何pipe理程序以获得设置qdisc的权限? 我知道我可以用sudo运行它,但这不是我的select。 是否有任何configuration文件像limits.conf授予特定用户的权限?

Net Link Linux用户代码绑定套接字调用总是失败的多播组Id(非零值)

你好,我试图实现networking链接的用户代码和内核代码的每件事情工作正常的单播(src_addr.nl_groups = 0;)。 对于多播,对于非零src_addr.nl_groups值,用户代码绑定调用总是失败。 真的不知道多播的价值,以及如何进一步发展。 我在内核源码树中检查了netlink_broadcast的用法,所以我在这里放了相同的组ID值(RTMGRP_LINK)。 对于单播,我在互联网上find了很多帮助,但对于多播,我不这么认为。 所以请帮我进一步处理。 错误是越来越是: 绑定:没有这样的文件或目录 ./a.out:无法绑定套接字(3),错误:-1:没有这样的文件或目录 #include <sys/socket.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <stdio.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #define NETLINK_TEST 28 #define GROUP_IB 1 #define MAX_PAYLOAD 1024 struct sockaddr_nl src_addr, dst_addr; struct nlmsghdr *nlh = NULL; struct msghdr msg; struct iovec iov; int sock_fd; int main(int […]

哪里可以获得设备types常量说明?

我通过netlink套接字获取有关系统networking设备的信息。 我正在parsing在ifinfomsg结构中定义的三种消息typesRTM_NEWLINK , RTM_DELLINK , RTM_GETLINK 。 struct ifinfomsg { unsigned char ifi_family; /* AF_UNSPEC */ unsigned short ifi_type; /* Device type */ int ifi_index; /* Interface index */ unsigned int ifi_flags; /* Device flags */ unsigned int ifi_change; /* change mask */ }; 定义从这里http://www.kernel.org/doc/man-pages/online/pages/man7/rtnetlink.7.html 但是设备types字段ifi_type没有描述,我可以在哪里find描述可能值的常量? 这里甚至没有说明http://www.foxprofr.com/rfc/RFC3549-LINUX-NETLINK-AS-AN-IP-SERVICES-PROTOCOL/3549.aspx 现在我知道1是以太网和772是回环,但我想知道所有可能的值。 可能的答案是非常明显的,但谷歌不想告诉我任何有用的东西。

使用NETLINK的Vlan接口详细信息

我知道,新的接口添加可以使用NETLINK中的RTE_NEWLINK消息types进行检测。 Netlink使用(if_indextoname&if_nametoindex)发送一个消息,我们可以使用它获取接口的索引和名称。 我的问题是,如果我们添加一个VLAN接口,它会发送一个带有接口名称的消息(例如:eth1.10)。 这个vlan号码只能在接口名称中使用,还是可以在NL_MSG结构中的任何地方使用。 我不想parsing接口名称和获得VLAN号码 我执行了下面的代码,并添加了一个vlan子接口,但从属性结构中找不到vlan信息。 即使RTM_NEWLINK检测到新界面,它也没有打印任何内容。 请纠正我,如果我在代码中错误的地方查找VLAN信息。 if(nl_msg_hdr->nlmsg_type == RTM_NEWLINK) { struct ifinfomsg *ifi; struct rtattr *rt_attr; int rtattrlen; ifi = (struct ifinfomsg *) NLMSG_DATA(nl_msg_hdr); printf("RTM_NEWLINK"); for (;RTA_OK(rt_attr, rtattrlen); rt_attr = RTA_NEXT(rt_attr, rtattrlen)) { if (rt_attr->rta_type == IFLA_LINKINFO) printf(" IFLA_LINKINFO \n"); if (rt_attr->rta_type == IFLA_LINK) printf(" IFLA_LINK \n"); if (rt_attr->rta_type == IFLA_INFO_DATA) printf(" IFLA_INFO_DATA\n"); […]

在NETLINK消息中添加MPLS属性

最新的Linux Kernel 4.1.4支持MPLS数据通路,我们可以通过NETLINK Socket在内核中编写MPLS路由表。 在socket.h中定义了一个新的地址族AF_MPLS。 我试了一些代码来写 – req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); req.n.nlmsg_flags = NLM_F_REQUEST|NLM_F_CREATE; req.n.nlmsg_type = RTM_NEWROUTE; req.r.rtm_family = AF_MPLS; req.r.rtm_table = RT_TABLE_MAIN; req.r.rtm_protocol = RTPROT_BOOT; req.r.rtm_scope = RT_SCOPE_UNIVERSE; req.r.rtm_type = RTN_UNICAST; 但是我无法弄清楚如何在Netlink属性中添加MPLS标签。 请帮我一下