C代码:使用socket接口和XFRM_MSG_NEWSA添加xfrm_usersa_info
#include <linux/xfrm.h> #include <linux/socket.h>
int add_new_sa(int sockfd, struct xfrm_usersa_info *p) { struct { struct nlmsghdr nlh; struct xfrm_userpolicy_info info; } req;
memset(&req, 0, sizeof(req));
req.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct xfrm_usersa_info));
req.nlh.nlmsg_flags = NLM_F_CREATE | NLM_F_REQUEST;
req.nlh.nlmsg_type = XFRM_MSG_NEWSA;
memcpy(&req.info, p, sizeof(struct xfrm_usersa_info));
struct sockaddr_nl sa_nl = {
.nl_family = AF_NETLINK
};
struct iovec iov = {
.iov_base = &req.nlh,
.iov_len = req.nlh.nlmsg_len
};
struct msghdr msg = {
.msg_name = &sa_nl,
.msg_namelen = sizeof(sa_nl),
.msg_iov = &iov,
.msg_iovlen = 1,
};
int ret = sendmsg(sockfd, &msg, 0);
if (ret < 0) {
perror("sendmsg");
return ret;
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/ovxq 著作权归作者所有。请勿转载和采集!