1 #include <net/if.h>
2 #include <netlink/route/link.h>
3
main(void)4 int main(void)
5 {
6 struct nl_sock *sk;
7 struct rtnl_link *link, *change;
8 struct nl_cache *cache;
9 int err = 0;
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 if ((err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &cache)) < 0) {
18 nl_perror(err, "Unable to allocate cache");
19 goto out;
20 }
21
22 if (!(link = rtnl_link_get_by_name(cache, "lo"))) {
23 fprintf(stderr, "Interface not found\n");
24 err = 1;
25 goto out;
26 }
27
28 /* exit if the loopback interface is already deactivated */
29 err = rtnl_link_get_flags(link);
30 if (!(err & IFF_UP)) {
31 err = 0;
32 goto out;
33 }
34
35 change = rtnl_link_alloc();
36 rtnl_link_unset_flags(change, IFF_UP);
37
38 if ((err = rtnl_link_change(sk, link, change, 0)) < 0) {
39 nl_perror(err, "Unable to deactivate lo");
40 goto out;
41 }
42
43 rtnl_link_set_flags(change, IFF_UP);
44 if ((err = rtnl_link_change(sk, link, change, 0)) < 0) {
45 nl_perror(err, "Unable to activate lo");
46 goto out;
47 }
48
49 err = 0;
50
51 out:
52 nl_socket_free(sk);
53 return err;
54 }
55