• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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