1:参考网址
2:netlink相关socket API
netlink用于程序与内核模块之间进行通信。用户态使用netlink与内核态使用netlink方式不同,Linux container在网络管理这一块处于用户空间。netlink 在用户态的API与tcp/ip通信使用的socket api 类似,主要api为socket()、bind()、sendmsg()、recvmsg().
- socket()
使用netlink需要包含的头文件为linux/netlink.h和sys/socket.h(socket api头文件)。创建socket函数。
int socket(AF_NETLNK,SOCK_RAW,netlink_type)
创建socket时地址族选择AF_NETLINK或者PF_NETLINK。第二个参数还可以是SOCK_DGRAM。第三个参数指定netlink协议类型。socket所有的地址族有以下所有类型:
AF_INET IPv4协议族 AF_INET6 IPv6协议族 AF_LOCAL Unix域协议 AF_ROUTE 路由套接字 AF_KEY 密钥套接字
有时AF也用PF代替,PF代表 Protocol Family(协议族),AF代表Address Familiy(地址族)。
第二个参数指明通信字节流类型,其取值如SOCK_STREAM(tcp方式),SOCK_DGRAM(udp方式)、SOCK_RAW(原始套接口)、SOCK_PACKET(支持数据链路访问)。
netlink_type类型如下:
#define NETLINK_ROUTE 0 /* Routing/device hook */ #define NETLINK_W1 1 /* 1-wire subsystem */ #define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */ #define NETLINK_FIREWALL 3 /* Firewalling hook */ #define NETLINK_INET_DIAG 4 /* INET socket monitoring */ #define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */ #define NETLINK_XFRM 6 /* ipsec */ #define NETLINK_SELINUX 7 /* SELinux event notifications */ #define NETLINK_ISCSI 8 /* Open-iSCSI */ #define NETLINK_AUDIT 9 /* auditing */ #define NETLINK_FIB_LOOKUP 10 #define NETLINK_CONNECTOR 11 #define NETLINK_NETFILTER 12 /* netfilter subsystem */ #define NETLINK_IP6_FW 13 #define NETLINK_DNRTMSG 14 /* DECnet routing messages */ #define NETLINK_KOBJECT_UEVENT 15 /* Kernel messages to userspace */ #define NETLINK_GENERIC 16
时间: 2024-11-05 15:52:07