- 浏览: 1443431 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
getelephantbyid:
make 无法通过.....
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
getelephantbyid:
patch -p1 ../php-5.4.7_thttpd-2 ...
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
zander:
zander 写道c 语言是静态类型语言还是动态类型语言阅读理 ...
什么是动态语言和静态语言? -
zander:
c 语言是静态类型语言还是动态类型语言
什么是动态语言和静态语言? -
lunajiayou:
很有道理,赞一个
跟着苍蝇会找到厕所,跟着蜜蜂会找到花朵
转至:http://blogold.chinaunix.net/u/15993/showart_90109.html
rtnetlink就是一组操作rtnetlink消息的宏。
在netlink中,初始化一个netlink_route套接字时,最后一个字段使用NETLINK_ROUTE时就是rtnetlink_socket。
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>
rtnetlink_socket = socket(PF_NETLINK, int socket_type, NETLINK_ROUTE);
这组宏包括:
int RTA_OK(struct rtattr *rta, int rtabuflen);
void *RTA_DATA(struct rtattr *rta);
unsigned int RTA_PAYLOAD(struct rtattr *rta);
struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int rtabuflen);
unsigned int RTA_LENGTH(unsigned int length);
unsigned int RTA_SPACE(unsigned int length);
使用这一组宏可以对路由表进行读写和修改。不仅对路由表,还有很多网络参数都可以通过rtnetlink来修改。
路由属性:
一些rtnetlink消息在初始化头后面有附加的属性:
struct rtattr
{
unsigned short rta_len; /* Length of option */
unsigned short rta_type; /* Type of option */
/* Data follows */
};
一些rtnetlink消息在初始化头后面有附加的属性:
struct rtattr
{
unsigned short rta_len; /* Length of option */
unsigned short rta_type; /* Type of option */
/* Data follows */
};
除了标准的netlink消息之外,rtnetlink由这些消息类型组成。
RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK
创建或者删除一个特定的网络接口,或者从一个特定的网络接口上获得信息。这些消息含有一个ifinfomsg类型的结构,紧跟在后面的是一系列的rtattr结构。
struct ifinfomsg
{
unsigned char ifi_family; /* AF_UNSPEC */
unsigned char __ifi_pad; /* unused */
unsigned short ifi_type; /* Device type */
int ifi_index; /* Interface index */
unsigned int ifi_flags; /* Device flags */
unsigned int ifi_change; /* change mask */
}
其中ifi_change是为将来预留的,总是被设为0xFFFFFFFF
rta_type value type description
--------------------------------------------------------------
IFLA_UNSPEC - unspecified.
IFLA_ADDRESS hardware address interface L2 address
IFLA_BROADCAST hardware address L2 broadcast address.
IFLA_IFNAME asciiz string Device name.
IFLA_MTU unsigned int MTU of the device.
IFLA_LINK int Link type.
IFLA_QDISC asciiz string Queueing discipline.
IFLA_STATS struct Interface Statistics.
net_device_stats
RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
添加,删除或者接收一个和接口相关的IP地址的信息。在linux2.2中,一个网口是可以有多个IP地址信息的。这些消息含有一个ifaddrmsg类型的结构,紧跟在后面的是一系列的rtattr结构。
struct ifaddrmsg
{
unsigned char ifa_family; /* Address type */
unsigned char ifa_prefixlen;/* Prefixlength of the address */
unsigned char ifa_flags; /* Address flags */
unsigned char ifa_scope; /* Address scope */
int ifa_index; /* Interface index */
};
rta_type value type description
-------------------------------------------------------------
IFA_UNSPEC - unspecified.
IFA_ADDRESS raw protocol address interface address
IFA_LOCAL raw protocol address local address
IFA_LABEL asciiz string name of the interface
IFA_BROADCAST raw protocol address broadcast address.
IFA_ANYCAST raw protocol address anycast address
IFA_CACHEINFO struct ifa_cacheinfo Address information.
RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK
创建或者删除一个特定的网络接口,或者从一个特定的网络接口上获得信息。这些消息含有一个ifinfomsg类型的结构,紧跟在后面的是一系列的rtattr结构。
struct ifinfomsg
{
unsigned char ifi_family; /* AF_UNSPEC */
unsigned char __ifi_pad; /* unused */
unsigned short ifi_type; /* Device type */
int ifi_index; /* Interface index */
unsigned int ifi_flags; /* Device flags */
unsigned int ifi_change; /* change mask */
}
其中ifi_change是为将来预留的,总是被设为0xFFFFFFFF
rta_type value type description
--------------------------------------------------------------
IFLA_UNSPEC - unspecified.
IFLA_ADDRESS hardware address interface L2 address
IFLA_BROADCAST hardware address L2 broadcast address.
IFLA_IFNAME asciiz string Device name.
IFLA_MTU unsigned int MTU of the device.
IFLA_LINK int Link type.
IFLA_QDISC asciiz string Queueing discipline.
IFLA_STATS struct Interface Statistics.
net_device_stats
RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
添加,删除或者接收一个和接口相关的IP地址的信息。在linux2.2中,一个网口是可以有多个IP地址信息的。这些消息含有一个ifaddrmsg类型的结构,紧跟在后面的是一系列的rtattr结构。
struct ifaddrmsg
{
unsigned char ifa_family; /* Address type */
unsigned char ifa_prefixlen;/* Prefixlength of the address */
unsigned char ifa_flags; /* Address flags */
unsigned char ifa_scope; /* Address scope */
int ifa_index; /* Interface index */
};
rta_type value type description
-------------------------------------------------------------
IFA_UNSPEC - unspecified.
IFA_ADDRESS raw protocol address interface address
IFA_LOCAL raw protocol address local address
IFA_LABEL asciiz string name of the interface
IFA_BROADCAST raw protocol address broadcast address.
IFA_ANYCAST raw protocol address anycast address
IFA_CACHEINFO struct ifa_cacheinfo Address information.
RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
创建,删除一个网络路由或者从一个网络路由上获得信息。这些消息包含了一个rtmsg结构,紧跟着的是一系列的rtattr结构,这是可选的。
struct rtmsg
{
unsigned char rtm_family; /* Address family of route */
unsigned char rtm_dst_len; /* Length of source */
unsigned char rtm_src_len; /* Length of destination */
unsigned char rtm_tos; /* TOS filter */
创建,删除一个网络路由或者从一个网络路由上获得信息。这些消息包含了一个rtmsg结构,紧跟着的是一系列的rtattr结构,这是可选的。
struct rtmsg
{
unsigned char rtm_family; /* Address family of route */
unsigned char rtm_dst_len; /* Length of source */
unsigned char rtm_src_len; /* Length of destination */
unsigned char rtm_tos; /* TOS filter */
unsigned char rtm_table; /* Routing table id */
unsigned char rtm_protocol;/* Routing protocol; see below */
unsigned char rtm_scope; /* See below */
unsigned char rtm_type; /* See below */
unsigned char rtm_protocol;/* Routing protocol; see below */
unsigned char rtm_scope; /* See below */
unsigned char rtm_type; /* See below */
unsigned int rtm_flags;
};
};
rtm_type Route type
-----------------------------------------------------------
RTN_UNSPEC unknown route
RTN_UNICAST a gateway or direct route
RTN_LOCAL a local interface route
RTN_BROADCAST a local broadcast route (sent as a
broadcast)
RTN_ANYCAST a local broadcast route (sent as a uni-
cast)
RTN_MULTICAST a multicast route
RTN_BLACKHOLE a packet dropping route
RTN_UNREACHABLE an unreachable destination
RTN_PROHIBIT a packet rejection route
RTN_THROW continue routing lookup in another table
RTN_NAT a network address translation rule
RTN_XRESOLVE refer to an external resolver (not
implemented)
-----------------------------------------------------------
RTN_UNSPEC unknown route
RTN_UNICAST a gateway or direct route
RTN_LOCAL a local interface route
RTN_BROADCAST a local broadcast route (sent as a
broadcast)
RTN_ANYCAST a local broadcast route (sent as a uni-
cast)
RTN_MULTICAST a multicast route
RTN_BLACKHOLE a packet dropping route
RTN_UNREACHABLE an unreachable destination
RTN_PROHIBIT a packet rejection route
RTN_THROW continue routing lookup in another table
RTN_NAT a network address translation rule
RTN_XRESOLVE refer to an external resolver (not
implemented)
rtm_protocol Route origin.
-----------------------------------------
RTPROT_UNSPEC unknown
RTPROT_REDIRECT by an ICMP redirect
(currently unused)
RTPROT_KERNEL by the kernel
RTPROT_BOOT during boot
RTPROT_STATIC by the administrator
比RTPROT_STATIC大的值就不会再被kernel解释了,他们就只是用于用户信息了。
-----------------------------------------
RTPROT_UNSPEC unknown
RTPROT_REDIRECT by an ICMP redirect
(currently unused)
RTPROT_KERNEL by the kernel
RTPROT_BOOT during boot
RTPROT_STATIC by the administrator
比RTPROT_STATIC大的值就不会再被kernel解释了,他们就只是用于用户信息了。
rtm_scope为到目标的距离
RT_SCOPE_UNIVERSE global route
RT_SCOPE_SITE interior route in the
local autonomous system
RT_SCOPE_LINK route on this link
RT_SCOPE_HOST route on the local host
RT_SCOPE_NOWHERE destination doesn't exist
RT_SCOPE_UNIVERSE global route
RT_SCOPE_SITE interior route in the
local autonomous system
RT_SCOPE_LINK route on this link
RT_SCOPE_HOST route on the local host
RT_SCOPE_NOWHERE destination doesn't exist
RT_SCOPE_UNIVERSE到RT_SCOPE_SITE之间的值是对用户可得的。
The rtm_flags有以下一些含义:
RTM_F_NOTIFY if the route changes, notify the user via
rtnetlink
RTM_F_CLONED route is cloned from another route
RTM_F_EQUALIZE a multicast equalizer (not yet implemented)
RTM_F_NOTIFY if the route changes, notify the user via
rtnetlink
RTM_F_CLONED route is cloned from another route
RTM_F_EQUALIZE a multicast equalizer (not yet implemented)
rtm_table表明了路由表
RT_TABLE_UNSPEC an unspecified routing table
RT_TABLE_DEFAULT the default table
RT_TABLE_MAIN the main table
RT_TABLE_LOCAL the local table
RT_TABLE_UNSPEC an unspecified routing table
RT_TABLE_DEFAULT the default table
RT_TABLE_MAIN the main table
RT_TABLE_LOCAL the local table
用户可以分配RT_TABLE_UNSPEC和RT_TABLE_DEFAULT之间任意的值。
属性
rta_type value type description
--------------------------------------------------------------
RTA_UNSPEC - ignored.
RTA_DST protocol address Route destination address.
RTA_SRC protocol address Route source address.
RTA_IIF int Input interface index.
RTA_OIF int Output interface index.
RTA_GATEWAY protocol address The gateway of the route
RTA_PRIORITY int Priority of route.
RTA_PREFSRC
RTA_METRICS int Route metric
RTA_MULTIPATH
RTA_PROTOINFO
RTA_FLOW
RTA_CACHEINFO
rta_type value type description
--------------------------------------------------------------
RTA_UNSPEC - ignored.
RTA_DST protocol address Route destination address.
RTA_SRC protocol address Route source address.
RTA_IIF int Input interface index.
RTA_OIF int Output interface index.
RTA_GATEWAY protocol address The gateway of the route
RTA_PRIORITY int Priority of route.
RTA_PREFSRC
RTA_METRICS int Route metric
RTA_MULTIPATH
RTA_PROTOINFO
RTA_FLOW
RTA_CACHEINFO
RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
这四组宏我就不一一介绍了,大家可以man一下。
发表评论
-
使用strongswan建立基于ikev2 eap-mschapv2的ipsec服务器
2017-04-17 23:14 3113sudo apt-get install strongsw ... -
使用strongswan/xl2tpd建立ipsec/l2tp服务器
2017-04-17 22:32 6048sudo apt-get install strongsw ... -
SecureFX中文件名乱码的解决
2014-08-28 03:23 3287原始贴子:https://forums.vandyke.c ... -
为Linux编译atheros ar1111(设备ID:168c:0037,AW-NB100H – AR5B225 Atheros half size)网卡驱动
2012-07-15 22:57 4500买了个zotac h61itx-a-e wifi主板,从zot ... -
PHY管理接口(MDIO)
2012-01-17 17:01 4162对吉比特以太网而言,串行通信总线称为管理数据输入输出 (MDI ... -
理解ipsec身份标识和认证选项
2012-01-11 15:42 6799This article is part of the Ide ... -
netfiletr和iptables的状态和连接跟踪机制
2012-01-11 15:38 3299Como se lleva a cabo el rastreo ... -
编译安装iw
2011-11-09 13:31 2346ubuntu安装build-essentials libnl- ... -
从ip addr add和ifconfig的区别看linux网卡ip地址的结构
2011-09-24 13:06 1630转至:http://blog.csdn.net/dog25 ... -
DLNA中的UPnP技术浅析
2011-09-22 18:39 5023说到DLNA,UPn ... -
Linux 用户态与内核态的交互——netlink 篇
2011-09-19 01:39 3478转至:http://bbs.chinaunix.net/thr ... -
netlink和rtnetlink(一)
2011-09-19 01:35 5179转到:http://blogold.chinaunix.net ... -
Linux——Netlink
2011-09-19 01:24 9583转载:http://blog.csdn.net/firo_ba ... -
linux notification chains
2011-08-13 00:26 1023linux内核由各个不同的子系统构成,比如网络子系统、存储 ... -
内核中的notification chain浅析
2011-08-13 00:25 1350内核中的很多子系统都是联系很紧密的,因此有可能某个子系统的某些 ... -
Linux Notification chains
2011-08-13 00:24 2813Notifier是Linux 中提供一种在内核子系统 中共 ... -
printk 使用方法
2011-08-12 22:28 9809内核通过 printk() 输出的信息具有日志级别,日志级 ... -
WEXT/mac80211/nl80211/cfg80211
2011-07-29 02:32 11162Wireless-Extensions--旧的无 ... -
fedora上wpa_supplicant上网配置
2011-07-29 01:28 35071,vi /etc/sysconfig/wpa_supplic ... -
vi替换命令用法详解
2011-07-19 01:06 2171vi替换命令用法详解 : ranges /pat1/ ...
相关推荐
重点针对跨三层转发交换路由的情况下,如何通过netlink获取gateway的二层地址,将netlink的使用接口话,C语言编写
linux内核态与用户态通信机制-netlink,有实例解析+源码,推荐~
这个库提供了如下模块:Netlink协议实现(RTNetlink, TaskStats等)rtnl, 网络设置 --- 地址(addresses), 路由(routes), 传输控制(traffic controls)nl80211 --- 无线功能相关的API(开发中)nfnetlink --- netfilter ...
Linux 用户空间使用Netlink监听uevent,不是原理介绍,而是实战demo
netlink文档资料收集 netlink文档资料收集 netlink文档资料收集
netlink提供了一种很好很强大的的用户与内核之间的通讯机制,本文通过静态的新增一个netlink协议类型,并使用这个新的netlink类型实现用户态和内核态的双向通讯,对linux的netlink通讯方式有了一个初步的认识。...
rtnetlink 软件包rtnetlink允许读取和更改内核的路由表。 网络路由,IP地址,... nlmod是一个特殊的内核模块,它允许您捕获内核内部的所有netlink(而不仅仅是rtnetlink)流量。 请注意,这可能在具有大量netlink流
参考网络资料,整理出来的使用netlink的说明。用在linux系统下实时获得usb设备的状态的改变。
linux下netlink机制实现usb热插拔事件并获取诸如厂商编号、协议号等获取相关信息,在不采用udev机制的情况下,可以参考的一种实现方式
本文主要介绍linux中内核态与用户态通信的netlink机制。介绍了netlink的程序流程,特点,和具体实现代码
• 在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核的交互就全部使用了netlink,著名的内核包过滤框架Netfilter在与用户...
netlink socket编程why & how netlink socekt是一种用于在内核态和用户态进程之间进行数据传输的特殊的IPC。它通过为内核模块提 供一组特殊的API,并为用户程序提供了一组标准的socket 接口的方式,实现了一种全双工...
通过netlink增加路由条目,测试环境ubuntu 10
通过netlink检测设备热插拔, gcc -o netlink_test.c netlink编译
内核态与用户态通信---netlink通信的一些实例!!!
eunetlink.c -用户程序源码 eknetlink.c -内核程序源码 netlink提供了一种很好很强大的的用户与内核之间的通讯机制,本文通过静态的新增一个netlink协议类型,并使用这个新的netlink类型实现用户态和内核态的双向...
linux2.6.X以上用的netlink用户端代码
基于Linux Netlink快速写入路由方法的设计与实现,刘鹏展,李昕,本文介绍了linux中一种用户程序与内核通信的一种方式:netlink,对比了netlink与其他内核通信方式的优点;给出了一种基于netlink通信方式来
与和集成是可选的。 每个netlink协议都有一个netlink-packet-板条箱,用于提供该协议的数据包: 提供有关消息提供有关协议的消息提供有关协议的消息是所有其他netlink-packet-*包装箱的胶水。 它提供了...