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