1 netlink
netlink可以提供了接口可以向内核增加,删除,查找与接口、地址、路由、arp等相关信息。
具体可以参考的资料有:
rfc3549-Linux Netlink as an IP Services Protocol
man 7 netlink
man 7 rtnetlink
与路由相关的netlink协议族为NETLINK_ROUTE。
函数原型:
netlink_socket = socket(AF_NETLINK, socket_type, netlink_family);
常用消息类型:
typedef enum
{
RTM_BASE = 15,
RTM_NEWLINK = 16,
RTM_DELLINK,
RTM_GETLINK,
RTM_SETLINK,
RTM_NEWADDR = 20,
RTM_DELADDR,
RTM_GETADDR,
RTM_NEWROUTE = 24,
RTM_DELROUTE,
RTM_GETROUTE,
RTM_NEWNEIGH = 28,
RTM_DELNEIGH,
RTM_GETNEIGH,
RTM_NEWVRF = 88,
RTM_DELVRF,
RTM_GETVRF,
} rtm_type_t;
2 ioctl
函数原型:
int ioctl(int fd, unsigned long request, ...);
第二个参数是设备相关的请求码。与路由相关的请求码有:
SIOCSIFVLAN 设置vlan虚接口
SIOCSIFADDR 设置接口地址
SIOCGIFADDR 获取接口地址
SIOCSIFFLAGS 设置接口标志
SIOCGIFFLAGS 获取接口标志
3 system
函数原型:
int system(const char *command);
通过system函数直接下发net-tools或iproute2相关命令下内核