#include #include #include #include #include #include #include "libnetlinku.h" #include "policyconf.h" #include "commuapinl.h" struct upmnl_handle cfgnlh; int set_user_policy() { unsigned char debug[]={"debug"};/*需要发送的数据*/ int debug_len = strlen((const char *)debug); struct { struct nlmsghdr n; struct policyconfmsg ncm; char buf[1024]; } req = { .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct policyconfmsg)), .n.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK, .n.nlmsg_type = COMMNMSG_DEBUGFS, .ncm.policy_id =17, .n.nlmsg_pid = getpid(), }; /*可选属性*/ commnl_addattr_l(&req.n, sizeof(req), POLICYCONFA_SRCIP, debug, debug_len); /*发送组装好的netlink消息*/ if (pdeliv_talk(1,&req.n, NULL) < 0) return -2; return 0; } int main( int argc, char **argv) { int ret = -1; printf("cfgchannel main begin:\r\n"); /*创建通道*/ ret = pdelivnl_open(); if(ret < 0) { printf("pdelivnl_open fail,exit.\r\n"); return -1; } /*下发配置到内核态*/ ret = set_user_policy(); if(ret < 0) { printf("set_user_policy failed.\r\n"); return -1; } /*关闭netlink通道*/ pdelivnl_close(); printf("cfgchannel main exit!\r\n"); return 0; }