• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <netlink/route/link/xfrmi.h>
2 #include <netlink-private/netlink.h>
3 
main(int argc,char * argv[])4 int main(int argc, char *argv[])
5 {
6 	struct nl_cache *link_cache;
7 	struct rtnl_link *link;
8 	struct nl_sock *sk;
9 	int err, if_index;
10 
11 	sk = nl_socket_alloc();
12 	if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
13 		nl_perror(err, "Unable to connect socket");
14 		return err;
15 	}
16 
17 	err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache);
18 	if (err < 0) {
19 		nl_perror(err, "Unable to allocate cache");
20 		return err;
21 	}
22 
23 	if_index = rtnl_link_name2i(link_cache, "eth0");
24 	if (!if_index) {
25 		fprintf(stderr, "Unable to lookup eth0");
26 		return -1;
27 	}
28 
29 	link = rtnl_link_xfrmi_alloc();
30 	if (!link) {
31 		nl_perror(err, "Unable to allocate link");
32 		return -1;
33 
34 	}
35 
36 	rtnl_link_set_name(link, "ipsec0");
37 	rtnl_link_xfrmi_set_link(link, if_index);
38 	rtnl_link_xfrmi_set_if_id(link, 16);
39 
40 	err = rtnl_link_add(sk, link, NLM_F_CREATE);
41 	if (err < 0) {
42 		nl_perror(err, "Unable to add link");
43 		return err;
44 	}
45 
46 	rtnl_link_put(link);
47 	nl_close(sk);
48 	return 0;
49 }
50