core: misc style fixes to libnl compat code
[NetworkManager.git] / src / backends / NetworkManagerGeneric.c
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* NetworkManager -- Network link manager
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  *
18  * (C) Copyright 2004 - 2010 Red Hat, Inc.
19  * (C) Copyright 2006 Timothee Lecomte <timothee.lecomte@ens.fr>
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <errno.h>
27 #include <stdio.h>
28 #include <sys/types.h>
29 #include <signal.h>
30 #include <arpa/inet.h>
31 #include <string.h>
32
33 #include "NetworkManagerGeneric.h"
34 #include "nm-system.h"
35 #include "NetworkManagerUtils.h"
36 #include "nm-logging.h"
37 #include "nm-netlink-compat.h"
38 #include "nm-netlink-monitor.h"
39 #include "nm-netlink-utils.h"
40
41 /* Because of a bug in libnl, rtnl.h should be included before route.h */
42 #include <netlink/route/rtnl.h>
43
44 #include <netlink/route/addr.h>
45 #include <netlink/netlink.h>
46
47 /*
48  * nm_generic_enable_loopback
49  *
50  * Bring up the loopback interface
51  *
52  */
53 void nm_generic_enable_loopback (void)
54 {
55         struct nl_sock *        nlh = NULL;
56         struct rtnl_addr *      addr = NULL;
57         struct nl_addr *        nl_addr = NULL;
58         guint32                 binaddr = 0;
59         int                     iface_idx = -1;
60         int                     err;
61
62         nlh = nm_netlink_get_default_handle ();
63         if (!nlh)
64                 return;
65
66         iface_idx = nm_netlink_iface_to_index ("lo");
67         if (iface_idx < 0)
68                 return;
69
70         nm_system_iface_set_up (iface_idx, TRUE, NULL);
71
72         addr = rtnl_addr_alloc ();
73         if (!addr)
74                 return;
75
76         binaddr = htonl (0x7f000001); /* 127.0.0.1 */
77         nl_addr = nl_addr_build (AF_INET, &binaddr, sizeof(binaddr));
78         if (!nl_addr)
79                 goto out;
80         rtnl_addr_set_local (addr, nl_addr);
81         nl_addr_put (nl_addr);
82
83         binaddr = htonl (0x7fffffff); /* 127.255.255.255 */
84         nl_addr = nl_addr_build (AF_INET, &binaddr, sizeof(binaddr));
85         if (!nl_addr)
86                 goto out;
87         rtnl_addr_set_broadcast (addr, nl_addr);
88         nl_addr_put (nl_addr);
89
90         rtnl_addr_set_prefixlen (addr, 8);
91         rtnl_addr_set_ifindex (addr, iface_idx);
92         rtnl_addr_set_scope (addr, RT_SCOPE_HOST);
93         rtnl_addr_set_label (addr, "lo");
94
95         if ((err = rtnl_addr_add (nlh, addr, 0)) < 0) {
96                 if (err != -EEXIST) {
97                         nm_log_warn (LOGD_CORE, "error setting loopback address: (%d) %s",
98                                      err, nl_geterror (err));
99                 }
100         }
101 out:
102         if (addr)
103                 rtnl_addr_put (addr);
104 }
105
106 /*
107  * nm_generic_update_dns
108  *
109  * Make glibc/nscd aware of any changes to the resolv.conf file by
110  * restarting nscd.
111  *
112  */
113 void nm_generic_update_dns (void)
114 {
115 }
116