#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;

}

C代码:使用socket接口和XFRM_MSG_NEWSA添加xfrm_usersa_info

原文地址: https://www.cveoy.top/t/topic/ovxq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录