admin管理员组文章数量:1532440
2024年5月5日发(作者:)
Rtnetlink描述
针对路由控制的netlink接口,Linux IPv4 routing sockets
Rtnetlink基于netlink,允许对内核的路由表进行读写。主要用来进行内核与用户空间的
通信以及内核中子系统间的通信。Rtnetlink是Linux2.2及其以后的版本中的一个新的特征。
Rtnetlink消息在初始头后可以有一些属性。结构:
struct
{
unsigned short rta_len; //属性的长度
unsigned short rta_type; //属性类型
/*属性数据跟随在这个结构之后*/
}
这些属性用RTA_*宏或者libnetlink来进行修改。
RTA_*宏:
#define RTA_ALIGNTO 4
#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) ) /*对齐*/
#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) &&
(rta)->rta_len >= sizeof(struct rtattr) &&
(rta)->rta_len <= (len)) /*判断长度是否有len长*/
#define RTA_NEXT(rta,attrlen) ((attrlen) -= RTA_ALIGN((rta)->rta_len),
(struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len))) /*下一个的
首地址*/
#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len)) /*计算总长度*/
#define RTA_SPACE(len) RTA_ALIGN(RTA_LENGTH(len)) /*返回数据的对齐的最小
数值*/
#define RTA_DATA(rta) ((void*)(((char*)(rta)) + RTA_LENGTH(0))) /*取得数据部分首地
址*/
#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0)) /*payload总长度*/
除了标准的netlink消息外,rtnetlink主要由以下的消息类型组成:
1、RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK 创建,删除或者获取网络设备的信
息
这些消息包含一个ifinfomsg结构以及多个rtattr结构。
struct ifinfomsg
{
unsigned char ifi_family;//接口的地址类型,IPv6时为AF_INET6,否则AF_UNSPEC
unsigned char __ifi_pad;
unsigned short ifi_type; //通常设为ARPHRD_EHTER
int ifi_index;//接口的ID号,只与接口相关,与接口的名字无关
unsigned int ifi_flags;
unsigned int ifi_change;//保留,通常设置成0xffffffff
}
ifi_type代表硬件设备的类型:
ARPHRD_ETHER
ARPHRD_PPP
ARPHRDLOOPBACK
10M以太网
PPP拨号
环路设备
ifi_flags包含设备的一些标志:
IFF_UP
IFF_BROADCAST
IFF_DEBUG
IFF_LOOPBACK
IFF_POINTOPOINT
IFF_RUNNING
IFF_NOARP
IFF_PROMISC
IFF_NOTRAILERS
IFF_ALLMULTI
IFF_MASTER
IFF_SLAVE
IFF_MULTICAST
IFF_PORTSEL
IFF_AUTOMEDIA
IFF_DYNAMIC
接口正在运行
有效的广播地址集
内部调试标志
这是自环接口
这是点到点的链路设备
资源已分配
无arp协议,没有设置第二层目的地址
接口为杂凑(promiscuous)模式
避免使用trailer
接收所有组播(multicast)报文
主负载平衡群(bundle)
从负载平衡群(bundle)
支持组播(multicast)
可以通过ifmap选择介质(media)类型
自动选择介质
接口关闭时丢弃地址
2、RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR 创建,删除或者获取网络设备的
ifinfo数据结构后跟可选择数量的属性rtattr,其中的rta_type可能为:
IFLA_UNSPEC 0
IFLA_ADDRESS 1 硬件MAC地址
IFLA_BROADCAST 2 硬件MAC广播地址
IFLA_IFNAME 3 接口名称
IFLA_MTU 4 最大传输单元
IFLA_LINK 5 连接类型
IFLA_QDISC 6 队列规则
IFLA_STATS 7 接口统计
IFLA_COST 8
IFLA_PRIORITY 9
IFLA_MASTER 10
IFLA_WIRELESS 11 /* Wireless Extension event - see wireless.h */
IFLA_PROTINFO 12 /* Protocol specific information for a link */
IFLA_TXQLEN 13
IFLA_MAP 14
IFLA_WEIGHT 15
IFLA_OPERSTATE 16
IFLA_LINKMODE 17
版权声明:本文标题:Rtnetlink描述 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1714915566a425424.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论