栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux的netlink路由的使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux的netlink路由的使用

接着 前面写过的netlink的简单应用层与内核通信的例子来说,本篇也是总结一下网上找到的一些使用netlink来添加静态路由的一个demo来进行。

linux的netlink机制_言xzZ義的博客-CSDN博客

本文参考到一下博客:linux使用 netlink 添加路由简单代码_greatox的博客-CSDN博客_netlink 路由

IPv4路由数据库之Netlink接口_fanxiaoyu321的博客-CSDN博客  

上面篇博客中有详细介绍到rtmsg的成员参数介绍,也有一系列的关于路由的内核部分的博客。

Netlink 介绍(译) - 走看看

先列一下需要使用的结构体。在进行路由的操作时,netlink中要用到的是struct rtmsg,从内核读取IPV4路由表信息为例。从上面表看,nlmsg_type一定使用RTM_xxxROUTE操作,对应的数据结构是rtmsg。既然是读取,那么应该是RTM_GETROUTE了

//nlmsg_type == RTM_NEWROUTE ||  RTM_DELROUTE
structrtmsg {
unsigned char rtm_family; 
unsigned char rtm_dst_len; 
unsigned char rtm_src_len;  (2.4.10头文件的注释标反了?)
unsigned char rtm_tos; 
 
unsigned char rtm_table; 
unsigned char rtm_protocol; 
unsigned char rtm_scope;
unsigned char rtm_type;
 
unsigned int rtm_flags;
};

对于RTM_GETROUTE操作来说,我们只需指定两个成员:rtm_family:AF_INET, rtm_table: RT_TABLE_MAIN。其他成员都初始化为0即可。将这个结构体跟nlmsghdr结合起来,得到我们自己的新结构体:
struct {
struct nlmsghdr nl;
struct rtmsg rt;
}req;

//RTM_NEWLINK   RTM_DELLINK

struct ifinfomsg *ifi;
struct ifinfomsg {
    unsigned char ifi_family;
    unsigned short ifi_type;
    int ifi index;
    unsigned int ifi_flags;
    unsigned int ifi_change;
};


 

//RTM_NEWADDR    RTM_DELADDR

 struct ifaddrmsg *ifa;

struct rtattr {
    unsigned short rta_len;
    unsigned short rta_type;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号