Codebase list network-manager / 511e948
Merge tag 'upstream/1.2.4' Upstream version 1.2.4 Michael Biebl 7 years ago
296 changed file(s) with 4768 addition(s) and 2586 deletion(s). Raw diff Collapse all Expand all
215215 $(top_srcdir)/build-aux/tap-driver.sh ABOUT-NLS AUTHORS \
216216 COPYING ChangeLog INSTALL NEWS README TODO build-aux/compile \
217217 build-aux/config.guess build-aux/config.rpath \
218 build-aux/config.sub build-aux/depcomp build-aux/install-sh \
219 build-aux/ltmain.sh build-aux/missing
218 build-aux/config.sub build-aux/install-sh build-aux/ltmain.sh \
219 build-aux/missing
220220 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
221221 distdir = $(PACKAGE)-$(VERSION)
222222 top_distdir = $(distdir)
392392 NM = @NM@
393393 NMEDIT = @NMEDIT@
394394 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
395 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
395396 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
396397 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
397398 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
0 ==============================================
1 NetworkManager-1.2.4
2 Overview of changes since NetworkManager-1.2.2
3 ==============================================
4
5 This is a new stable release of NetworkManager. Notable changes include:
6
7 * The timeout for requests of secrets to agents has been increased from 25 to
8 120 seconds.
9 * NetworkManager now follows symlinks when accessing resolv.conf and
10 'rc-manager=file'.
11 * Added new values 'symlink' and 'unmanaged' to rc-manager configuration option.
12 * It is now possible to configure the default rc-manager option at compile time.
13 * Name servers passed to dnsmasq now specify an egress interface to avoid
14 problems with multiple active connections.
15 * Reverse DNS entries for IPv6 are now added to dnsmasq, and IPv4 reverse
16 entries now honor the network prefix.
17 * A new 'dns-priority' property of ipv4 and ipv6 settings can be used to tweak
18 the order of servers in resolv.conf when multiple connections are active.
19 * Added a 'Reload' D-Bus method to reload configuration and reapply DNS
20 configuration.
21 * Now devices are disconnected before the system suspends, executing dispatcher
22 scripts. This allows external applications to be notified of the change in
23 connectivity.
24 * Devices without L3 configuration are not more put in DOWN state on shutdown.
25 * MTU settings are now applied also to devices without IPv4 configuration.
26 * Improved VPN support in nmcli.
27 * Many bug fixes.
28
029 ============================================
130 NetworkManager-1.2.2
231 Overview of changes since NetworkManager-1.2
2150
2251 This is a new stable release of NetworkManager. Notable changes include:
2352
24 * Added an option to enable use of random MAC addresses for Wi-Fi access
25 point scanning (defaults to disabled). Controlled with
26 'wifi.mac-address-randomization' property (MAC_ADDRESS_RANDOMIZATION key in
27 ifcfg files).
53 * MAC addresses during Wi-Fi access point scanning are now randomized
54 if wpa_supplicant supports PreassocMacAddr.
55 * Added an option to enable random MAC addresses for association to Wi-Fi access
56 point (defaults to disabled). Controlled with 'wifi.mac-address-randomization'
57 property (MAC_ADDRESS_RANDOMIZATION key in ifcfg files). Requires support from
58 wpa_supplicant.
2859 * Wi-Fi scanning now utilizes wpa_supplicant's AP list.
2960 * Added support for Wi-Fi powersave, configured with POWERSAVE key in ifcfg
3061 files.
405405 NM = @NM@
406406 NMEDIT = @NMEDIT@
407407 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
408 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
408409 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
409410 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
410411 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
525525 NM = @NM@
526526 NMEDIT = @NMEDIT@
527527 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
528 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
528529 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
529530 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
530531 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
359359 NM = @NM@
360360 NMEDIT = @NMEDIT@
361361 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
362 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
362363 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
363364 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
364365 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
340340 NM = @NM@
341341 NMEDIT = @NMEDIT@
342342 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
343 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
343344 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
344345 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
345346 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
414414 char *dest = NULL, *plen = NULL;
415415 const char *next_hop = NULL;
416416 const char *canon_dest;
417 long int prefix = max_prefix, metric = -1;
417 long int prefix = max_prefix;
418 unsigned long int tmp_ulong;
418419 NMIPRoute *route = NULL;
419420 gboolean success = FALSE;
420421 GError *local = NULL;
422 gint64 metric = -1;
421423
422424 g_return_val_if_fail (family == AF_INET || family == AF_INET6, FALSE);
423425 g_return_val_if_fail (first != NULL, FALSE);
443445 next_hop = second;
444446 else {
445447 /* 'second' can be a metric */
446 if (!nmc_string_to_int (second, TRUE, 0, G_MAXUINT32, &metric)) {
448 if (!nmc_string_to_uint (second, TRUE, 0, G_MAXUINT32, &tmp_ulong)) {
447449 g_set_error (error, 1, 0, _("the second component of route ('%s') is neither "
448450 "a next hop address nor a metric"), second);
449451 goto finish;
450452 }
453 metric = tmp_ulong;
451454 }
452455 }
453456
454457 if (third) {
455 if (!nmc_string_to_int (third, TRUE, 0, G_MAXUINT32, &metric)) {
458 if (!nmc_string_to_uint (third, TRUE, 0, G_MAXUINT32, &tmp_ulong)) {
456459 g_set_error (error, 1, 0, _("invalid metric '%s'"), third);
457460 goto finish;
458461 }
462 metric = tmp_ulong;
459463 }
460464
461465 route = nm_ip_route_new (family, dest, prefix, next_hop, metric, &local);
5151 #define PROMPT_ACTIVE_CONNECTIONS _("Connection(s) (name, UUID, path or apath): ")
5252 #define PROMPT_IP_TUNNEL_MODE _("Tunnel mode: ")
5353 #define PROMPT_MACVLAN_MODE _("MACVLAN mode: ")
54
55 static const char *nmc_known_vpns[] = {
56 "openvpn",
57 "vpnc",
58 "pptp",
59 "openconnect",
60 "openswan",
61 "libreswan",
62 "strongswan",
63 "ssh",
64 "l2tp",
65 "iodine",
66 "fortisslvpn",
67 NULL
68 };
6954
7055 /* Available fields for 'connection show' */
7156 static NmcOutputField nmc_fields_con_show[] = {
19771962 && state == NM_DEVICE_STATE_FAILED) {
19781963 if (nmc->print_output == NMC_PRINT_PRETTY)
19791964 nmc_terminal_erase_line ();
1980 g_print (_("Error: Connection activation failed."));
1965 g_print (_("Error: Connection activation failed.\n"));
19811966 quit ();
19821967 } else if (active && ac_state != NM_ACTIVE_CONNECTION_STATE_ACTIVATING) {
19831968 g_string_printf (nmc->return_text, _("Error: Connection activation failed."));
29302915 GError *tmp_err = NULL;
29312916 int i;
29322917
2933 g_return_val_if_fail (val, NULL);
29342918 g_return_val_if_fail (array, NULL);
29352919
29362920 /* Create a temporary array that can be used in nmc_string_is_valid() */
59035887 const char *user_c = NULL;
59045888 char *user = NULL;
59055889 const char *st;
5906 char *service_type = NULL;
5890 gs_free char *service_type_free = NULL;
5891 const char *service_type = NULL;
59075892 nmc_arg_t exp_args[] = { {"vpn-type", TRUE, &vpn_type, !ask},
59085893 {"user", TRUE, &user_c, FALSE},
59095894 {NULL} };
5895 gs_free const char **plugin_names = NULL;
59105896
59115897 if (!nmc_parse_args (exp_args, FALSE, &argc, &argv, error))
59125898 return FALSE;
59215907 if (vpn_type_ask)
59225908 vpn_type = g_strstrip (vpn_type_ask);
59235909
5924 if (!(st = nmc_string_is_valid (vpn_type, nmc_known_vpns, NULL))) {
5910 plugin_names = nm_vpn_get_plugin_names (FALSE);
5911 if (!(st = nmc_string_is_valid (vpn_type, plugin_names, NULL))) {
59255912 g_print (_("Warning: 'vpn-type': %s not known.\n"), vpn_type);
59265913 st = vpn_type;
59275914 }
5928 service_type = g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, st);
5915
5916 service_type = nm_vpn_get_service_for_name (st);
5917 if (!service_type)
5918 service_type = service_type_free = nm_vpn_get_service_for_name_default (st);
59295919
59305920 /* Also ask for all optional arguments if '--ask' is specified. */
59315921 user = g_strdup (user_c);
59425932 success = TRUE;
59435933 cleanup_vpn:
59445934 g_free (vpn_type_ask);
5945 g_free (service_type);
59465935 g_free (user);
59475936 if (!success)
59485937 return FALSE;
67106699 static char *
67116700 gen_func_vpn_types (const char *text, int state)
67126701 {
6713 return nmc_rl_gen_func_basic (text, state, nmc_known_vpns);
6702 gs_free const char **plugin_names = NULL;
6703
6704 plugin_names = nm_vpn_get_plugin_names (FALSE);
6705 return nmc_rl_gen_func_basic (text, state, plugin_names);
67146706 }
67156707
67166708 static char *
1068910681 }
1069010682
1069110683 /* Import VPN configuration */
10692 plugin = nm_vpn_get_plugin_by_service (type, &error);
10684 plugin = nm_vpn_lookup_plugin (type, NULL, &error);
1069310685 if (!plugin) {
1069410686 g_string_printf (nmc->return_text, _("Error: failed to load VPN plugin: %s."),
1069510687 error->message);
1079610788 type = nm_setting_vpn_get_service_type (nm_connection_get_setting_vpn (connection));
1079710789
1079810790 /* Export VPN configuration */
10799 plugin = nm_vpn_get_plugin_by_service (type, &error);
10791 plugin = nm_vpn_lookup_plugin (type, NULL, &error);
1080010792 if (!plugin) {
1080110793 g_string_printf (nmc->return_text, _("Error: failed to load VPN plugin: %s."),
1080210794 error->message);
17151715 nmc->nowait_flag = (nmc->timeout == 0);
17161716 nmc->should_wait++;
17171717
1718 nmc->connections = nm_client_get_connections (nmc->client);
1719
17181720 /* Create secret agent */
17191721 nmc->secret_agent = nm_secret_agent_simple_new ("nmcli-connect");
17201722 if (nmc->secret_agent)
2424 #include "polkit-agent.h"
2525 #include "utils.h"
2626 #include "general.h"
27 #include "nm-common-macros.h"
2728
2829 #include "devices.h"
2930 #include "connections.h"
386387 return TRUE;
387388 }
388389
389 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
390 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
391 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
392 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
393 #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
394 #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
395 #define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
396 #define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
397 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
398 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
399 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
400
401390 static const char *
402391 permission_to_string (NMClientPermission perm)
403392 {
424413 return NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
425414 case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME:
426415 return NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
416 case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS:
417 return NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
418 case NM_CLIENT_PERMISSION_RELOAD:
419 return NM_AUTH_PERMISSION_RELOAD;
427420 default:
428421 return _("unknown");
429422 }
432425 static const char *
433426 permission_result_to_string (NMClientPermissionResult perm_result)
434427 {
435
436428 switch (perm_result) {
437429 case NM_CLIENT_PERMISSION_RESULT_YES:
438430 return _("yes");
493493 ;;
494494 vpn-type)
495495 if [[ "${#words[@]}" -eq 2 ]]; then
496 _nmcli_list "vpnc openvpn pptp openconnect openswan libreswan ssh l2tp iodine"
496 _nmcli_list "vpnc openvpn pptp openconnect openswan libreswan strongswan ssh l2tp iodine fortisslvpn"
497497 return 0
498498 fi
499499 ;;
578578 user| \
579579 username| \
580580 service| \
581 password| \
581 password)
582 if [[ "${#words[@]}" -eq 2 ]]; then
583 return 0
584 fi
585 ;;
582586 passwd-file| \
583587 file)
584588 if [[ "${#words[@]}" -eq 2 ]]; then
589 compopt -o default
590 COMPREPLY=()
585591 return 0
586592 fi
587593 ;;
13781384
13791385 OPTIONS=(type file)
13801386 OPTIONS_MANDATORY=(type file)
1381 ALIASES=("type:vpn-type")
1382 _nmcli_compl_ARGS ${ALIASES[@]}
1387 _nmcli_compl_ARGS type:vpn-type
13831388 return 0
13841389 fi
13851390 ;;
250250 { "dhcp-timeout", "A timeout for a DHCP transaction in seconds." },
251251 { "dns", "Array of IP addresses of DNS servers." },
252252 { "dns-options", "Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." },
253 { "dns-priority", "DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." },
253254 { "dns-search", "Array of DNS search domains." },
254255 { "gateway", "The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set." },
255256 { "ignore-auto-dns", "When \"method\" is set to \"auto\" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the \"dns\" and \"dns-search\" properties, if any, are used." },
271272 { "dhcp-timeout", "A timeout for a DHCP transaction in seconds." },
272273 { "dns", "Array of IP addresses of DNS servers." },
273274 { "dns-options", "Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." },
275 { "dns-priority", "DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." },
274276 { "dns-search", "Array of DNS search domains." },
275277 { "gateway", "The gateway associated with this configuration. This is only meaningful if \"addresses\" is also set." },
276278 { "ignore-auto-dns", "When \"method\" is set to \"auto\" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the \"dns\" and \"dns-search\" properties, if any, are used." },
422424 { "gsm", setting_gsm, 13 },
423425 { "infiniband", setting_infiniband, 6 },
424426 { "ip-tunnel", setting_ip_tunnel, 13 },
425 { "ipv4", setting_ipv4, 19 },
426 { "ipv6", setting_ipv6, 19 },
427 { "ipv4", setting_ipv4, 20 },
428 { "ipv6", setting_ipv6, 20 },
427429 { "macvlan", setting_macvlan, 5 },
428430 { "ppp", setting_ppp, 19 },
429431 { "pppoe", setting_pppoe, 5 },
271271 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS), /* 2 */
272272 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH), /* 3 */
273273 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_OPTIONS), /* 4 */
274 SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 5 */
275 SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 6 */
276 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 7 */
277 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 8 */
278 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 9 */
279 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 10 */
280 SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID), /* 11 */
281 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_TIMEOUT), /* 12 */
282 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 13 */
283 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 14 */
284 SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_FQDN), /* 15 */
285 SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 16 */
286 SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 17 */
287 SETTING_FIELD (NM_SETTING_IP_CONFIG_DAD_TIMEOUT), /* 18 */
274 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_PRIORITY), /* 5 */
275 SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 6 */
276 SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 7 */
277 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 8 */
278 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 9 */
279 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 10 */
280 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 11 */
281 SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID), /* 12 */
282 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_TIMEOUT), /* 13 */
283 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 14 */
284 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 15 */
285 SETTING_FIELD (NM_SETTING_IP4_CONFIG_DHCP_FQDN), /* 16 */
286 SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 17 */
287 SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 18 */
288 SETTING_FIELD (NM_SETTING_IP_CONFIG_DAD_TIMEOUT), /* 19 */
288289 {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
289290 };
290291 #define NMC_FIELDS_SETTING_IP4_CONFIG_ALL "name"","\
292293 NM_SETTING_IP_CONFIG_DNS","\
293294 NM_SETTING_IP_CONFIG_DNS_SEARCH","\
294295 NM_SETTING_IP_CONFIG_DNS_OPTIONS","\
296 NM_SETTING_IP_CONFIG_DNS_PRIORITY","\
295297 NM_SETTING_IP_CONFIG_ADDRESSES","\
296298 NM_SETTING_IP_CONFIG_GATEWAY","\
297299 NM_SETTING_IP_CONFIG_ROUTES","\
314316 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS), /* 2 */
315317 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_SEARCH), /* 3 */
316318 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_OPTIONS), /* 4 */
317 SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 5 */
318 SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 6 */
319 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 7 */
320 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 8 */
321 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 9 */
322 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 10 */
323 SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 11 */
324 SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 12 */
325 SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY), /* 13 */
326 SETTING_FIELD (NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE), /* 14 */
327 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 15 */
328 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 16 */
319 SETTING_FIELD (NM_SETTING_IP_CONFIG_DNS_PRIORITY), /* 5 */
320 SETTING_FIELD (NM_SETTING_IP_CONFIG_ADDRESSES), /* 6 */
321 SETTING_FIELD (NM_SETTING_IP_CONFIG_GATEWAY), /* 7 */
322 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTES), /* 8 */
323 SETTING_FIELD (NM_SETTING_IP_CONFIG_ROUTE_METRIC), /* 9 */
324 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES), /* 10 */
325 SETTING_FIELD (NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS), /* 11 */
326 SETTING_FIELD (NM_SETTING_IP_CONFIG_NEVER_DEFAULT), /* 12 */
327 SETTING_FIELD (NM_SETTING_IP_CONFIG_MAY_FAIL), /* 13 */
328 SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY), /* 14 */
329 SETTING_FIELD (NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE), /* 15 */
330 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME), /* 16 */
331 SETTING_FIELD (NM_SETTING_IP_CONFIG_DHCP_HOSTNAME), /* 17 */
329332 {NULL, NULL, 0, NULL, FALSE, FALSE, 0}
330333 };
331334 #define NMC_FIELDS_SETTING_IP6_CONFIG_ALL "name"","\
333336 NM_SETTING_IP_CONFIG_DNS","\
334337 NM_SETTING_IP_CONFIG_DNS_SEARCH","\
335338 NM_SETTING_IP_CONFIG_DNS_OPTIONS","\
339 NM_SETTING_IP_CONFIG_DNS_PRIORITY","\
336340 NM_SETTING_IP_CONFIG_ADDRESSES","\
337341 NM_SETTING_IP_CONFIG_GATEWAY","\
338342 NM_SETTING_IP_CONFIG_ROUTES","\
10401044 }
10411045
10421046 static char *
1043 nmc_property_802_1X_get_client_cert (NMSetting *setting, NmcPropertyGetType get_type)
1047 nmc_property_802_1X_get_client_cert (NMSetting *setting,
1048 NmcPropertyGetType get_type,
1049 gboolean show_secrets)
10441050 {
10451051 NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
10461052 NMSetting8021xCKScheme scheme;
1047 char *client_cert_str = NULL;
1053 char *cert_str = NULL;
10481054
10491055 scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021X);
1050 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
1051 client_cert_str = bytes_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X));
1052 if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1053 client_cert_str = g_strdup (nm_setting_802_1x_get_client_cert_path (s_8021X));
1054
1055 return client_cert_str;
1056 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
1057 if (show_secrets)
1058 cert_str = bytes_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X));
1059 else
1060 cert_str = g_strdup (_("<hidden>"));
1061 } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1062 cert_str = g_strdup (nm_setting_802_1x_get_client_cert_path (s_8021X));
1063
1064 return cert_str;
1065 }
1066
1067 static char *
1068 nmc_property_802_1X_get_client_cert_full (NMSetting *setting, NmcPropertyGetType get_type)
1069 {
1070 return nmc_property_802_1X_get_client_cert (setting, get_type, TRUE);
10561071 }
10571072
10581073 static char *
10721087 }
10731088
10741089 static char *
1075 nmc_property_802_1X_get_phase2_client_cert (NMSetting *setting, NmcPropertyGetType get_type)
1090 nmc_property_802_1X_get_phase2_client_cert (NMSetting *setting,
1091 NmcPropertyGetType get_type,
1092 gboolean show_secrets)
10761093 {
10771094 NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
10781095 NMSetting8021xCKScheme scheme;
1079 char *phase2_client_cert_str = NULL;
1096 char *cert_str = NULL;
10801097
10811098 scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021X);
1082 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
1083 phase2_client_cert_str = bytes_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X));
1084 if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1085 phase2_client_cert_str = g_strdup (nm_setting_802_1x_get_phase2_client_cert_path (s_8021X));
1086
1087 return phase2_client_cert_str;
1099 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
1100 if (show_secrets)
1101 cert_str = bytes_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X));
1102 else
1103 cert_str = g_strdup (_("<hidden>"));
1104 } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1105 cert_str = g_strdup (nm_setting_802_1x_get_phase2_client_cert_path (s_8021X));
1106
1107 return cert_str;
1108 }
1109
1110 static char *
1111 nmc_property_802_1X_get_phase2_client_cert_full (NMSetting *setting, NmcPropertyGetType get_type)
1112 {
1113 return nmc_property_802_1X_get_phase2_client_cert (setting, get_type, TRUE);
10881114 }
10891115
10901116 static char *
10951121 }
10961122
10971123 static char *
1098 nmc_property_802_1X_get_private_key (NMSetting *setting, NmcPropertyGetType get_type)
1124 nmc_property_802_1X_get_private_key (NMSetting *setting,
1125 NmcPropertyGetType get_type,
1126 gboolean show_secrets)
10991127 {
11001128 NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
11011129 NMSetting8021xCKScheme scheme;
1102 char *private_key_str = NULL;
1130 char *key_str = NULL;
11031131
11041132 scheme = nm_setting_802_1x_get_private_key_scheme (s_8021X);
1105 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
1106 private_key_str = bytes_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X));
1107 if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1108 private_key_str = g_strdup (nm_setting_802_1x_get_private_key_path (s_8021X));
1109
1110 return private_key_str;
1133 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
1134 if (show_secrets)
1135 key_str = bytes_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X));
1136 else
1137 key_str = g_strdup (_("<hidden>"));
1138 } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1139 key_str = g_strdup (nm_setting_802_1x_get_private_key_path (s_8021X));
1140
1141 return key_str;
11111142 }
11121143
11131144 static char *
1114 nmc_property_802_1X_get_phase2_private_key (NMSetting *setting, NmcPropertyGetType get_type)
1145 nmc_property_802_1X_get_private_key_full (NMSetting *setting, NmcPropertyGetType get_type)
1146 {
1147 return nmc_property_802_1X_get_private_key (setting, get_type, TRUE);
1148 }
1149
1150 static char *
1151 nmc_property_802_1X_get_phase2_private_key (NMSetting *setting,
1152 NmcPropertyGetType get_type,
1153 gboolean show_secrets)
11151154 {
11161155 NMSetting8021x *s_8021X = NM_SETTING_802_1X (setting);
11171156 NMSetting8021xCKScheme scheme;
1118 char *phase2_private_key_str = NULL;
1157 char *key_str = NULL;
11191158
11201159 scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021X);
1121 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
1122 phase2_private_key_str = bytes_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X));
1123 if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1124 phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X));
1125
1126 return phase2_private_key_str;
1160 if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB) {
1161 if (show_secrets)
1162 key_str = bytes_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X));
1163 else
1164 key_str = g_strdup (_("<hidden>"));
1165 } else if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
1166 key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X));
1167
1168 return key_str;
1169 }
1170
1171 static char *
1172 nmc_property_802_1X_get_phase2_private_key_full (NMSetting *setting, NmcPropertyGetType get_type)
1173 {
1174 return nmc_property_802_1X_get_phase2_private_key (setting, get_type, TRUE);
11271175 }
11281176
11291177 /* --- NM_SETTING_ADSL_SETTING_NAME property get functions --- */
14431491 DEFINE_GETTER (nmc_property_ipv4_get_dns, NM_SETTING_IP_CONFIG_DNS)
14441492 DEFINE_GETTER (nmc_property_ipv4_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH)
14451493 DEFINE_GETTER_WITH_DEFAULT (nmc_property_ipv4_get_dns_options, NM_SETTING_IP_CONFIG_DNS_OPTIONS, !nm_setting_ip_config_has_dns_options ((NMSettingIPConfig *) setting))
1494 DEFINE_GETTER (nmc_property_ipv4_get_dns_priority, NM_SETTING_IP_CONFIG_DNS_PRIORITY)
14461495
14471496 static char *
14481497 nmc_property_ip_get_addresses (NMSetting *setting, NmcPropertyGetType get_type)
15631612 DEFINE_GETTER (nmc_property_ipv6_get_dns, NM_SETTING_IP_CONFIG_DNS)
15641613 DEFINE_GETTER (nmc_property_ipv6_get_dns_search, NM_SETTING_IP_CONFIG_DNS_SEARCH)
15651614 DEFINE_GETTER_WITH_DEFAULT (nmc_property_ipv6_get_dns_options, NM_SETTING_IP_CONFIG_DNS_OPTIONS, !nm_setting_ip_config_has_dns_options ((NMSettingIPConfig *) setting))
1615 DEFINE_GETTER (nmc_property_ipv6_get_dns_priority, NM_SETTING_IP_CONFIG_DNS_PRIORITY)
15661616
15671617 static char *
15681618 nmc_property_ipv6_get_routes (NMSetting *setting, NmcPropertyGetType get_type)
57085758 NULL,
57095759 NULL);
57105760 nmc_add_prop_funcs (GLUE (802_1X, CLIENT_CERT),
5711 nmc_property_802_1X_get_client_cert,
5761 nmc_property_802_1X_get_client_cert_full,
57125762 nmc_property_802_1X_set_client_cert,
57135763 NULL,
57145764 nmc_property_802_1X_describe_client_cert,
57855835 NULL,
57865836 NULL);
57875837 nmc_add_prop_funcs (GLUE (802_1X, PHASE2_CLIENT_CERT),
5788 nmc_property_802_1X_get_phase2_client_cert,
5838 nmc_property_802_1X_get_phase2_client_cert_full,
57895839 nmc_property_802_1X_set_phase2_client_cert,
57905840 NULL,
57915841 nmc_property_802_1X_describe_phase2_client_cert,
58205870 NULL,
58215871 NULL);
58225872 nmc_add_prop_funcs (GLUE (802_1X, PRIVATE_KEY),
5823 nmc_property_802_1X_get_private_key,
5873 nmc_property_802_1X_get_private_key_full,
58245874 nmc_property_802_1X_set_private_key,
58255875 NULL,
58265876 nmc_property_802_1X_describe_private_key,
58415891 NULL,
58425892 NULL);
58435893 nmc_add_prop_funcs (GLUE (802_1X, PHASE2_PRIVATE_KEY),
5844 nmc_property_802_1X_get_phase2_private_key,
5894 nmc_property_802_1X_get_phase2_private_key_full,
58455895 nmc_property_802_1X_set_phase2_private_key,
58465896 NULL,
58475897 nmc_property_802_1X_describe_private_key,
64516501 NULL,
64526502 NULL,
64536503 NULL);
6504 nmc_add_prop_funcs (GLUE_IP (4, DNS_PRIORITY),
6505 nmc_property_ipv4_get_dns_priority,
6506 nmc_property_set_int,
6507 NULL,
6508 NULL,
6509 NULL,
6510 NULL);
64546511 nmc_add_prop_funcs (GLUE_IP (4, ADDRESSES),
64556512 nmc_property_ip_get_addresses,
64566513 nmc_property_ipv4_set_addresses,
65766633 nmc_property_ipv6_get_dns_options,
65776634 nmc_property_ipv6_set_dns_options,
65786635 nmc_property_ipv6_remove_dns_option,
6636 NULL,
6637 NULL,
6638 NULL);
6639 nmc_add_prop_funcs (GLUE_IP (6, DNS_PRIORITY),
6640 nmc_property_ipv6_get_dns_priority,
6641 nmc_property_set_int,
6642 NULL,
65796643 NULL,
65806644 NULL,
65816645 NULL);
79988062 set_val_str (arr, 7, nmc_property_802_1X_get_subject_match (setting, NMC_PROPERTY_GET_PRETTY));
79998063 set_val_str (arr, 8, nmc_property_802_1X_get_altsubject_matches (setting, NMC_PROPERTY_GET_PRETTY));
80008064 set_val_str (arr, 9, nmc_property_802_1X_get_domain_suffix_match (setting, NMC_PROPERTY_GET_PRETTY));
8001 set_val_str (arr, 10, nmc_property_802_1X_get_client_cert (setting, NMC_PROPERTY_GET_PRETTY));
8065 set_val_str (arr, 10, nmc_property_802_1X_get_client_cert (setting, NMC_PROPERTY_GET_PRETTY, secrets));
80028066 set_val_str (arr, 11, nmc_property_802_1X_get_phase1_peapver (setting, NMC_PROPERTY_GET_PRETTY));
80038067 set_val_str (arr, 12, nmc_property_802_1X_get_phase1_peaplabel (setting, NMC_PROPERTY_GET_PRETTY));
80048068 set_val_str (arr, 13, nmc_property_802_1X_get_phase1_fast_provisioning (setting, NMC_PROPERTY_GET_PRETTY));
80098073 set_val_str (arr, 18, nmc_property_802_1X_get_phase2_subject_match (setting, NMC_PROPERTY_GET_PRETTY));
80108074 set_val_str (arr, 19, nmc_property_802_1X_get_phase2_altsubject_matches (setting, NMC_PROPERTY_GET_PRETTY));
80118075 set_val_str (arr, 20, nmc_property_802_1X_get_phase2_domain_suffix_match (setting, NMC_PROPERTY_GET_PRETTY));
8012 set_val_str (arr, 21, nmc_property_802_1X_get_phase2_client_cert (setting, NMC_PROPERTY_GET_PRETTY));
8076 set_val_str (arr, 21, nmc_property_802_1X_get_phase2_client_cert (setting, NMC_PROPERTY_GET_PRETTY, secrets));
80138077 set_val_str (arr, 22, GET_SECRET (secrets, setting, nmc_property_802_1X_get_password));
80148078 set_val_str (arr, 23, nmc_property_802_1X_get_password_flags (setting, NMC_PROPERTY_GET_PRETTY));
80158079 set_val_str (arr, 24, GET_SECRET (secrets, setting, nmc_property_802_1X_get_password_raw));
80168080 set_val_str (arr, 25, nmc_property_802_1X_get_password_raw_flags (setting, NMC_PROPERTY_GET_PRETTY));
8017 set_val_str (arr, 26, nmc_property_802_1X_get_private_key (setting, NMC_PROPERTY_GET_PRETTY));
8081 set_val_str (arr, 26, nmc_property_802_1X_get_private_key (setting, NMC_PROPERTY_GET_PRETTY, secrets));
80188082 set_val_str (arr, 27, GET_SECRET (secrets, setting, nmc_property_802_1X_get_private_key_password));
80198083 set_val_str (arr, 28, nmc_property_802_1X_get_private_key_password_flags (setting, NMC_PROPERTY_GET_PRETTY));
8020 set_val_str (arr, 29, nmc_property_802_1X_get_phase2_private_key (setting, NMC_PROPERTY_GET_PRETTY));
8084 set_val_str (arr, 29, nmc_property_802_1X_get_phase2_private_key (setting, NMC_PROPERTY_GET_PRETTY, secrets));
80218085 set_val_str (arr, 30, GET_SECRET (secrets, setting, nmc_property_802_1X_get_phase2_private_key_password));
80228086 set_val_str (arr, 31, nmc_property_802_1X_get_phase2_private_key_password_flags (setting, NMC_PROPERTY_GET_PRETTY));
80238087 set_val_str (arr, 32, GET_SECRET (secrets, setting, nmc_property_802_1X_get_pin));
81348198 set_val_str (arr, 2, nmc_property_ipv4_get_dns (setting, NMC_PROPERTY_GET_PRETTY));
81358199 set_val_str (arr, 3, nmc_property_ipv4_get_dns_search (setting, NMC_PROPERTY_GET_PRETTY));
81368200 set_val_str (arr, 4, nmc_property_ipv4_get_dns_options (setting, NMC_PROPERTY_GET_PRETTY));
8137 set_val_str (arr, 5, nmc_property_ip_get_addresses (setting, NMC_PROPERTY_GET_PRETTY));
8138 set_val_str (arr, 6, nmc_property_ipv4_get_gateway (setting, NMC_PROPERTY_GET_PRETTY));
8139 set_val_str (arr, 7, nmc_property_ipv4_get_routes (setting, NMC_PROPERTY_GET_PRETTY));
8140 set_val_str (arr, 8, nmc_property_ipv4_get_route_metric (setting, NMC_PROPERTY_GET_PRETTY));
8141 set_val_str (arr, 9, nmc_property_ipv4_get_ignore_auto_routes (setting, NMC_PROPERTY_GET_PRETTY));
8142 set_val_str (arr, 10, nmc_property_ipv4_get_ignore_auto_dns (setting, NMC_PROPERTY_GET_PRETTY));
8143 set_val_str (arr, 11, nmc_property_ipv4_get_dhcp_client_id (setting, NMC_PROPERTY_GET_PRETTY));
8144 set_val_str (arr, 12, nmc_property_ipv4_get_dhcp_timeout (setting, NMC_PROPERTY_GET_PRETTY));
8145 set_val_str (arr, 13, nmc_property_ipv4_get_dhcp_send_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8146 set_val_str (arr, 14, nmc_property_ipv4_get_dhcp_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8147 set_val_str (arr, 15, nmc_property_ipv4_get_dhcp_fqdn (setting, NMC_PROPERTY_GET_PRETTY));
8148 set_val_str (arr, 16, nmc_property_ipv4_get_never_default (setting, NMC_PROPERTY_GET_PRETTY));
8149 set_val_str (arr, 17, nmc_property_ipv4_get_may_fail (setting, NMC_PROPERTY_GET_PRETTY));
8150 set_val_str (arr, 18, nmc_property_ipv4_get_dad_timeout (setting, NMC_PROPERTY_GET_PRETTY));
8201 set_val_str (arr, 5, nmc_property_ipv4_get_dns_priority (setting, NMC_PROPERTY_GET_PRETTY));
8202 set_val_str (arr, 6, nmc_property_ip_get_addresses (setting, NMC_PROPERTY_GET_PRETTY));
8203 set_val_str (arr, 7, nmc_property_ipv4_get_gateway (setting, NMC_PROPERTY_GET_PRETTY));
8204 set_val_str (arr, 8, nmc_property_ipv4_get_routes (setting, NMC_PROPERTY_GET_PRETTY));
8205 set_val_str (arr, 9, nmc_property_ipv4_get_route_metric (setting, NMC_PROPERTY_GET_PRETTY));
8206 set_val_str (arr, 10, nmc_property_ipv4_get_ignore_auto_routes (setting, NMC_PROPERTY_GET_PRETTY));
8207 set_val_str (arr, 11, nmc_property_ipv4_get_ignore_auto_dns (setting, NMC_PROPERTY_GET_PRETTY));
8208 set_val_str (arr, 12, nmc_property_ipv4_get_dhcp_client_id (setting, NMC_PROPERTY_GET_PRETTY));
8209 set_val_str (arr, 13, nmc_property_ipv4_get_dhcp_timeout (setting, NMC_PROPERTY_GET_PRETTY));
8210 set_val_str (arr, 14, nmc_property_ipv4_get_dhcp_send_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8211 set_val_str (arr, 15, nmc_property_ipv4_get_dhcp_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8212 set_val_str (arr, 16, nmc_property_ipv4_get_dhcp_fqdn (setting, NMC_PROPERTY_GET_PRETTY));
8213 set_val_str (arr, 17, nmc_property_ipv4_get_never_default (setting, NMC_PROPERTY_GET_PRETTY));
8214 set_val_str (arr, 18, nmc_property_ipv4_get_may_fail (setting, NMC_PROPERTY_GET_PRETTY));
8215 set_val_str (arr, 19, nmc_property_ipv4_get_dad_timeout (setting, NMC_PROPERTY_GET_PRETTY));
81518216 g_ptr_array_add (nmc->output_data, arr);
81528217
81538218 print_data (nmc); /* Print all data */
81778242 set_val_str (arr, 2, nmc_property_ipv6_get_dns (setting, NMC_PROPERTY_GET_PRETTY));
81788243 set_val_str (arr, 3, nmc_property_ipv6_get_dns_search (setting, NMC_PROPERTY_GET_PRETTY));
81798244 set_val_str (arr, 4, nmc_property_ipv6_get_dns_options (setting, NMC_PROPERTY_GET_PRETTY));
8180 set_val_str (arr, 5, nmc_property_ip_get_addresses (setting, NMC_PROPERTY_GET_PRETTY));
8181 set_val_str (arr, 6, nmc_property_ipv6_get_gateway (setting, NMC_PROPERTY_GET_PRETTY));
8182 set_val_str (arr, 7, nmc_property_ipv6_get_routes (setting, NMC_PROPERTY_GET_PRETTY));
8183 set_val_str (arr, 8, nmc_property_ipv6_get_route_metric (setting, NMC_PROPERTY_GET_PRETTY));
8184 set_val_str (arr, 9, nmc_property_ipv6_get_ignore_auto_routes (setting, NMC_PROPERTY_GET_PRETTY));
8185 set_val_str (arr, 10, nmc_property_ipv6_get_ignore_auto_dns (setting, NMC_PROPERTY_GET_PRETTY));
8186 set_val_str (arr, 11, nmc_property_ipv6_get_never_default (setting, NMC_PROPERTY_GET_PRETTY));
8187 set_val_str (arr, 12, nmc_property_ipv6_get_may_fail (setting, NMC_PROPERTY_GET_PRETTY));
8188 set_val_str (arr, 13, nmc_property_ipv6_get_ip6_privacy (setting, NMC_PROPERTY_GET_PRETTY));
8189 set_val_str (arr, 14, nmc_property_ipv6_get_addr_gen_mode (setting, NMC_PROPERTY_GET_PRETTY));
8190 set_val_str (arr, 15, nmc_property_ipv6_get_dhcp_send_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8191 set_val_str (arr, 16, nmc_property_ipv6_get_dhcp_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8245 set_val_str (arr, 5, nmc_property_ipv6_get_dns_priority (setting, NMC_PROPERTY_GET_PRETTY));
8246 set_val_str (arr, 6, nmc_property_ip_get_addresses (setting, NMC_PROPERTY_GET_PRETTY));
8247 set_val_str (arr, 7, nmc_property_ipv6_get_gateway (setting, NMC_PROPERTY_GET_PRETTY));
8248 set_val_str (arr, 8, nmc_property_ipv6_get_routes (setting, NMC_PROPERTY_GET_PRETTY));
8249 set_val_str (arr, 9, nmc_property_ipv6_get_route_metric (setting, NMC_PROPERTY_GET_PRETTY));
8250 set_val_str (arr, 10, nmc_property_ipv6_get_ignore_auto_routes (setting, NMC_PROPERTY_GET_PRETTY));
8251 set_val_str (arr, 11, nmc_property_ipv6_get_ignore_auto_dns (setting, NMC_PROPERTY_GET_PRETTY));
8252 set_val_str (arr, 12, nmc_property_ipv6_get_never_default (setting, NMC_PROPERTY_GET_PRETTY));
8253 set_val_str (arr, 13, nmc_property_ipv6_get_may_fail (setting, NMC_PROPERTY_GET_PRETTY));
8254 set_val_str (arr, 14, nmc_property_ipv6_get_ip6_privacy (setting, NMC_PROPERTY_GET_PRETTY));
8255 set_val_str (arr, 15, nmc_property_ipv6_get_addr_gen_mode (setting, NMC_PROPERTY_GET_PRETTY));
8256 set_val_str (arr, 16, nmc_property_ipv6_get_dhcp_send_hostname (setting, NMC_PROPERTY_GET_PRETTY));
8257 set_val_str (arr, 17, nmc_property_ipv6_get_dhcp_hostname (setting, NMC_PROPERTY_GET_PRETTY));
81928258 g_ptr_array_add (nmc->output_data, arr);
81938259
81948260 print_data (nmc); /* Print all data */
3535 static GSList *plugins = NULL;
3636
3737 NMVpnEditorPlugin *
38 nm_vpn_get_plugin_by_service (const char *service, GError **error)
38 nm_vpn_lookup_plugin (const char *name, const char *service, GError **error)
3939 {
4040 NMVpnEditorPlugin *plugin = NULL;
4141 NMVpnPluginInfo *plugin_info;
42 char *type = NULL;
43
44 g_return_val_if_fail (service != NULL, NULL);
42 gs_free_error GError *local = NULL;
43
44 g_return_val_if_fail (!service ^ !name, NULL);
4545 g_return_val_if_fail (error == NULL || *error == NULL, NULL);
4646
4747 if (G_UNLIKELY (!plugins_loaded))
4848 nm_vpn_get_plugins ();
4949
50 if (!g_str_has_prefix (service, NM_DBUS_INTERFACE))
51 service = type = g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, service);
52
53 plugin_info = nm_vpn_plugin_info_list_find_by_service (plugins, service);
54 if (plugin_info) {
55 plugin = nm_vpn_plugin_info_get_editor_plugin (plugin_info);
56 if (!plugin)
57 plugin = nm_vpn_plugin_info_load_editor_plugin (plugin_info, error);
58 } else
59 g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED,
60 _("could not get VPN plugin info"));
61 g_free (type);
50 if (service)
51 plugin_info = nm_vpn_plugin_info_list_find_by_service (plugins, service);
52 else
53 plugin_info = nm_vpn_plugin_info_list_find_by_name (plugins, name);
54
55 if (!plugin_info) {
56 g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED,
57 _("unknown VPN plugin \"%s\""), service ?: name);
58 return NULL;
59 }
60 plugin = nm_vpn_plugin_info_get_editor_plugin (plugin_info);
61 if (!plugin)
62 plugin = nm_vpn_plugin_info_load_editor_plugin (plugin_info, &local);
63
64 if (!plugin) {
65 if ( !nm_vpn_plugin_info_get_plugin (plugin_info)
66 && nm_vpn_plugin_info_lookup_property (plugin_info, NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME, "properties")) {
67 g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED,
68 _("cannot cannot load legacy-only VPN plugin \"%s\" for \"%s\""),
69 nm_vpn_plugin_info_get_name (plugin_info),
70 nm_vpn_plugin_info_get_filename (plugin_info));
71 } else if (g_error_matches (local, G_FILE_ERROR, G_FILE_ERROR_NOENT)) {
72 g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED,
73 _("cannot load VPN plugin \"%s\" due to missing \"%s\". Missing client plugin?"),
74 nm_vpn_plugin_info_get_name (plugin_info),
75 nm_vpn_plugin_info_get_plugin (plugin_info));
76 } else {
77 g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_FAILED,
78 _("failed to load VPN plugin \"%s\": %s"),
79 nm_vpn_plugin_info_get_name (plugin_info),
80 local->message);
81 }
82 return NULL;
83 }
84
6285 return plugin;
6386 }
6487
7295 return plugins;
7396 }
7497
98 static int
99 _strcmp_data (gconstpointer a, gconstpointer b, gpointer unused)
100 {
101 return strcmp (a, b);
102 }
103
104 const char **
105 nm_vpn_get_plugin_names (gboolean only_available_plugins)
106 {
107 GSList *p;
108 const char **list;
109 const char *known_names[] = {
110 "openvpn",
111 "vpnc",
112 "pptp",
113 "openconnect",
114 "openswan",
115 "libreswan",
116 "strongswan",
117 "ssh",
118 "l2tp",
119 "iodine",
120 "fortisslvpn",
121 };
122 guint i, j, k;
123
124 p = nm_vpn_get_plugins ();
125 list = g_new0 (const char *, g_slist_length (p) + G_N_ELEMENTS (known_names) + 1);
126
127 i = 0;
128 for (i = 0; p; p = p->next)
129 list[i++] = nm_vpn_plugin_info_get_name (p->data);
130 if (!only_available_plugins) {
131 for (j = 0; j < G_N_ELEMENTS (known_names); j++)
132 list[i++] = known_names[j];
133 }
134
135 g_qsort_with_data (list, i, sizeof (gpointer), _strcmp_data, NULL);
136
137 /* remove duplicates */
138 for (k = 0, j = 1; j < i; j++) {
139 if (nm_streq (list[k], list[j]))
140 continue;
141 list[k++] = list[j];
142 }
143 list[k++] = NULL;
144
145 return list;
146 }
147
148 const char *
149 nm_vpn_get_service_for_name (const char *name)
150 {
151 NMVpnPluginInfo *plugin_info;
152
153 g_return_val_if_fail (name, NULL);
154
155 plugin_info = nm_vpn_plugin_info_list_find_by_name (nm_vpn_get_plugins (), name);
156 if (plugin_info) {
157 /* this only means we have a .name file (NMVpnPluginInfo). Possibly the
158 * NMVpnEditorPlugin is not loadable. */
159 return nm_vpn_plugin_info_lookup_property (plugin_info,
160 NM_VPN_PLUGIN_INFO_KF_GROUP_CONNECTION,
161 "service");
162 }
163 return NULL;
164 }
165
166 char *
167 nm_vpn_get_service_for_name_default (const char *name)
168 {
169 return g_strdup_printf ("%s.%s", NM_DBUS_INTERFACE, name);
170 }
171
75172 gboolean
76173 nm_vpn_supports_ipv6 (NMConnection *connection)
77174 {
84181 g_return_val_if_fail (s_vpn != NULL, FALSE);
85182
86183 service_type = nm_setting_vpn_get_service_type (s_vpn);
87 g_return_val_if_fail (service_type != NULL, FALSE);
88
89 plugin = nm_vpn_get_plugin_by_service (service_type, NULL);
90 g_return_val_if_fail (plugin != NULL, FALSE);
184 if (!service_type)
185 return FALSE;
186
187 plugin = nm_vpn_lookup_plugin (NULL, service_type, NULL);
188 if (!plugin)
189 return FALSE;
91190
92191 capabilities = nm_vpn_editor_plugin_get_capabilities (plugin);
93192 return NM_FLAGS_HAS (capabilities, NM_VPN_EDITOR_PLUGIN_CAPABILITY_IPV6);
2929
3030 GSList *nm_vpn_get_plugins (void);
3131
32 NMVpnEditorPlugin *nm_vpn_get_plugin_by_service (const char *service, GError **error);
32 const char **nm_vpn_get_plugin_names (gboolean only_available_plugins);
33
34 const char *nm_vpn_get_service_for_name (const char *name);
35 char * nm_vpn_get_service_for_name_default (const char *name);
36
37 NMVpnEditorPlugin *nm_vpn_lookup_plugin (const char *name, const char *service, GError **error);
3338
3439 gboolean nm_vpn_supports_ipv6 (NMConnection *connection);
3540
428428 NM = @NM@
429429 NMEDIT = @NMEDIT@
430430 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
431 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
431432 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
432433 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
433434 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
329329 NM = @NM@
330330 NMEDIT = @NMEDIT@
331331 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
332 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
332333 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
333334 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
334335 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
183183 connection = nm_editor_utils_create_connection (type, priv->master, nm_client);
184184 nmt_edit_connection (connection);
185185 g_object_unref (connection);
186
186 }
187
188 static void
189 create_connection_and_quit (NmtNewtWidget *widget, gpointer list)
190 {
191 create_connection (widget, list);
187192 nmt_newt_form_quit (list);
188193 }
189194
202207
203208 listbox = nmt_newt_listbox_new (5, NMT_NEWT_LISTBOX_SCROLL);
204209 priv->listbox = NMT_NEWT_LISTBOX (listbox);
205 g_signal_connect (priv->listbox, "activated", G_CALLBACK (create_connection), form);
210 g_signal_connect (priv->listbox, "activated", G_CALLBACK (create_connection_and_quit), form);
206211 nmt_newt_grid_add (grid, listbox, 0, 1);
207212 nmt_newt_widget_set_padding (listbox, 0, 1, 0, 0);
208213 nmt_newt_grid_set_flags (grid, listbox, NMT_NEWT_GRID_EXPAND_X);
222227 NMT_NEWT_GRID_FILL_Y);
223228
224229 button = g_object_ref_sink (nmt_newt_button_new (_("Create")));
225 g_signal_connect (button, "clicked", G_CALLBACK (create_connection), form);
230 g_signal_connect (button, "clicked", G_CALLBACK (create_connection_and_quit), form);
226231 nmt_newt_grid_add (NMT_NEWT_GRID (buttons), button, 1, 0);
227232
228233 nmt_newt_form_set_content (NMT_NEWT_FORM (form), NMT_NEWT_WIDGET (grid));
147147
148148 /* The default value of the auth-polkit configuration option */
149149 #undef NM_CONFIG_DEFAULT_AUTH_POLKIT
150
151 /* Default value for main.rc-manager setting
152 (--with-config-dns-rc-manager-default) */
153 #undef NM_CONFIG_DEFAULT_DNS_RC_MANAGER
150154
151155 /* The default value of the logging.audit configuration option */
152156 #undef NM_CONFIG_DEFAULT_LOGGING_AUDIT
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for NetworkManager 1.2.2.
2 # Generated by GNU Autoconf 2.69 for NetworkManager 1.2.4.
33 #
44 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager>.
55 #
590590 # Identity of this package.
591591 PACKAGE_NAME='NetworkManager'
592592 PACKAGE_TARNAME='NetworkManager'
593 PACKAGE_VERSION='1.2.2'
594 PACKAGE_STRING='NetworkManager 1.2.2'
593 PACKAGE_VERSION='1.2.4'
594 PACKAGE_STRING='NetworkManager 1.2.4'
595595 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'
596596 PACKAGE_URL=''
597597
697697 DNSSEC_TRIGGER_SCRIPT
698698 DNSMASQ_PATH
699699 IPTABLES_PATH
700 NM_CONFIG_DEFAULT_DNS_RC_MANAGER
700701 with_netconfig
701702 with_resolvconf
702703 DHCPCD_PATH
10591060 with_dhcpcd
10601061 with_resolvconf
10611062 with_netconfig
1063 with_config_dns_rc_manager_default
10621064 with_iptables
10631065 with_dnsmasq
10641066 with_dnssec_trigger
16841686 # Omit some internal or obsolete options to make the list less imposing.
16851687 # This message is too long to be a string in the A/UX 3.1 sh.
16861688 cat <<_ACEOF
1687 \`configure' configures NetworkManager 1.2.2 to adapt to many kinds of systems.
1689 \`configure' configures NetworkManager 1.2.4 to adapt to many kinds of systems.
16881690
16891691 Usage: $0 [OPTION]... [VAR=VALUE]...
16901692
17541756
17551757 if test -n "$ac_init_help"; then
17561758 case $ac_init_help in
1757 short | recursive ) echo "Configuration of NetworkManager 1.2.2:";;
1759 short | recursive ) echo "Configuration of NetworkManager 1.2.4:";;
17581760 esac
17591761 cat <<\_ACEOF
17601762
18821884 --with-resolvconf=yes|no|path
18831885 Enable resolvconf support
18841886 --with-netconfig=yes|no Enable SUSE netconfig support
1887 --with-config-dns-rc-manager-default=symlink|file|netconfig|resolvconf
1888 Configure default value for main.rc-manager setting
18851889 --with-iptables=/path/to/iptables
18861890 path to iptables
18871891 --with-dnsmasq=/path/to/dnsmasq
20612065 test -n "$ac_init_help" && exit $ac_status
20622066 if $ac_init_version; then
20632067 cat <<\_ACEOF
2064 NetworkManager configure 1.2.2
2068 NetworkManager configure 1.2.4
20652069 generated by GNU Autoconf 2.69
20662070
20672071 Copyright (C) 2012 Free Software Foundation, Inc.
27882792 This file contains any messages produced by compilers while
27892793 running configure, to aid debugging if configure makes a mistake.
27902794
2791 It was created by NetworkManager $as_me 1.2.2, which was
2795 It was created by NetworkManager $as_me 1.2.4, which was
27922796 generated by GNU Autoconf 2.69. Invocation command line was
27932797
27942798 $ $0 $@
36583662
36593663 # Define the identity of the package.
36603664 PACKAGE='NetworkManager'
3661 VERSION='1.2.2'
3665 VERSION='1.2.4'
36623666
36633667
36643668 cat >>confdefs.h <<_ACEOF
1753917543
1754017544 NM_MAJOR_VERSION=1
1754117545 NM_MINOR_VERSION=2
17542 NM_MICRO_VERSION=2
17543 NM_VERSION=1.2.2
17544 NM_GIT_SHA=8f6d416768cf69932999b1fc2ab4231321761657
17546 NM_MICRO_VERSION=4
17547 NM_VERSION=1.2.4
17548 NM_GIT_SHA=54a84c6b3bd04123ee0831ae371d795ddd694cf9
1754517549
1754617550
1754717551
2446624470 withval=$with_netconfig;
2446724471 fi
2446824472
24473
24474 # Check whether --with-config-dns-rc-manager-default was given.
24475 if test "${with_config_dns_rc_manager_default+set}" = set; then :
24476 withval=$with_config_dns_rc_manager_default; config_dns_rc_manager_default=$withval
24477 fi
24478
24479 if test "$config_dns_rc_manager_default" != symlink -a "$config_dns_rc_manager_default" != file -a "$config_dns_rc_manager_default" != netconfig -a "$config_dns_rc_manager_default" != resolvconf; then
24480 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown --with-config-dns-rc-manager-default=$config_dns_rc_manager_default setting." >&5
24481 $as_echo "$as_me: WARNING: Unknown --with-config-dns-rc-manager-default=$config_dns_rc_manager_default setting." >&2;}
24482 config_dns_rc_manager_default=
24483 fi
2446924484 # Use netconfig by default on SUSE
2447024485 if test -z "$with_netconfig"; then :
2447124486 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /etc/SuSE-release" >&5
2454524560 test -n "$with_resolvconf" || with_resolvconf="no"
2454624561
2454724562 fi
24563 if test "$with_resolvconf" != "no"; then
24564 if test -z "$config_dns_rc_manager_default"; then :
24565 config_dns_rc_manager_default=resolvconf
24566 fi
24567 fi
2454824568 if test "$with_netconfig" = "yes"; then
2454924569 for ac_prog in netconfig
2455024570 do
2459424614 test -n "$with_netconfig" || with_netconfig="no"
2459524615
2459624616 fi
24617 if test "$with_netconfig" != "no"; then
24618 if test -z "$config_dns_rc_manager_default"; then :
24619 config_dns_rc_manager_default=netconfig
24620 fi
24621 fi
24622 if test -z "$config_dns_rc_manager_default"; then :
24623 config_dns_rc_manager_default=symlink
24624 fi
2459724625 # Define resolvconf and netconfig paths
2459824626 if test "$with_resolvconf" != "no"; then
2459924627
2460924637 _ACEOF
2461024638
2461124639 fi
24640
24641 cat >>confdefs.h <<_ACEOF
24642 #define NM_CONFIG_DEFAULT_DNS_RC_MANAGER "$config_dns_rc_manager_default"
24643 _ACEOF
24644
24645 NM_CONFIG_DEFAULT_DNS_RC_MANAGER=$config_dns_rc_manager_default
24646
2461224647
2461324648 # iptables path
2461424649
2729727332 # report actual input values of CONFIG_FILES etc. instead of their
2729827333 # values after options handling.
2729927334 ac_log="
27300 This file was extended by NetworkManager $as_me 1.2.2, which was
27335 This file was extended by NetworkManager $as_me 1.2.4, which was
2730127336 generated by GNU Autoconf 2.69. Invocation command line was
2730227337
2730327338 CONFIG_FILES = $CONFIG_FILES
2736327398 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2736427399 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2736527400 ac_cs_version="\\
27366 NetworkManager config.status 1.2.2
27401 NetworkManager config.status 1.2.4
2736727402 configured by $0, generated by GNU Autoconf 2.69,
2736827403 with options \\"\$ac_cs_config\\"
2736927404
2974229777 echo "Handlers for /etc/resolv.conf:"
2974329778 echo " resolvconf: ${with_resolvconf}"
2974429779 echo " netconfig: ${with_netconfig}"
29780 echo " config-dns-rc-manager-default: ${config_dns_rc_manager_default}"
2974529781 echo
2974629782
2974729783 echo "DHCP clients:"
22 dnl The NM version number
33 m4_define([nm_major_version], [1])
44 m4_define([nm_minor_version], [2])
5 m4_define([nm_micro_version], [2])
5 m4_define([nm_micro_version], [4])
66 m4_define([nm_version],
77 [nm_major_version.nm_minor_version.nm_micro_version])
88 m4_define([nm_git_sha], [m4_esyscmd([ ( [ -d ./.git/ ] && [ "$(readlink -f ./.git/)" = "$(readlink -f "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null)" ] && git rev-parse --verify -q HEAD 2>/dev/null ) || true ])])
762762 # resolvconf and netconfig support
763763 AC_ARG_WITH(resolvconf, AS_HELP_STRING([--with-resolvconf=yes|no|path], [Enable resolvconf support]))
764764 AC_ARG_WITH(netconfig, AS_HELP_STRING([--with-netconfig=yes|no], [Enable SUSE netconfig support]))
765 AC_ARG_WITH(config-dns-rc-manager-default, AS_HELP_STRING([--with-config-dns-rc-manager-default=symlink|file|netconfig|resolvconf], [Configure default value for main.rc-manager setting]), [config_dns_rc_manager_default=$withval])
766 if test "$config_dns_rc_manager_default" != symlink -a "$config_dns_rc_manager_default" != file -a "$config_dns_rc_manager_default" != netconfig -a "$config_dns_rc_manager_default" != resolvconf; then
767 AC_MSG_WARN([Unknown --with-config-dns-rc-manager-default=$config_dns_rc_manager_default setting.])
768 config_dns_rc_manager_default=
769 fi
765770 # Use netconfig by default on SUSE
766771 AS_IF([test -z "$with_netconfig"], AC_CHECK_FILE(/etc/SuSE-release, with_netconfig=yes))
767772 # Otherwise default to "no"
771776 if test "$with_resolvconf" = "yes"; then
772777 AC_PATH_PROGS(with_resolvconf, resolvconf, no, /sbin:/usr/sbin:/usr/local/sbin)
773778 fi
779 if test "$with_resolvconf" != "no"; then
780 AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=resolvconf)
781 fi
774782 if test "$with_netconfig" = "yes"; then
775783 AC_PATH_PROGS(with_netconfig, netconfig, no, /sbin:/usr/sbin:/usr/local/sbin)
776784 fi
785 if test "$with_netconfig" != "no"; then
786 AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=netconfig)
787 fi
788 AS_IF([test -z "$config_dns_rc_manager_default"], config_dns_rc_manager_default=symlink)
777789 # Define resolvconf and netconfig paths
778790 if test "$with_resolvconf" != "no"; then
779791 AC_DEFINE_UNQUOTED(RESOLVCONF_PATH, "$with_resolvconf", [Path to resolvconf])
781793 if test "$with_netconfig" != "no"; then
782794 AC_DEFINE_UNQUOTED(NETCONFIG_PATH, "$with_netconfig", [Path to netconfig])
783795 fi
796 AC_DEFINE_UNQUOTED(NM_CONFIG_DEFAULT_DNS_RC_MANAGER, "$config_dns_rc_manager_default", [Default value for main.rc-manager setting (--with-config-dns-rc-manager-default)])
797 AC_SUBST(NM_CONFIG_DEFAULT_DNS_RC_MANAGER, $config_dns_rc_manager_default)
784798
785799 # iptables path
786800 AC_ARG_WITH(iptables, AS_HELP_STRING([--with-iptables=/path/to/iptables], [path to iptables]))
11631177 echo "Handlers for /etc/resolv.conf:"
11641178 echo " resolvconf: ${with_resolvconf}"
11651179 echo " netconfig: ${with_netconfig}"
1180 echo " config-dns-rc-manager-default: ${config_dns_rc_manager_default}"
11661181 echo
11671182
11681183 echo "DHCP clients:"
296296 NM = @NM@
297297 NMEDIT = @NMEDIT@
298298 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
299 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
299300 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
300301 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
301302 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
00 [Unit]
11 Description=Network Manager Wait Online
2 Documentation=man:nm-online(1)
23 Requisite=NetworkManager.service
34 After=NetworkManager.service
45 Wants=network.target
78 [Service]
89 Type=oneshot
910 ExecStart=@bindir@/nm-online -s -q --timeout=30
11 RemainAfterExit=yes
1012
1113 [Install]
1214 WantedBy=network.target
00 [Unit]
11 Description=Network Manager Wait Online
2 Documentation=man:nm-online(1)
23 Requisite=NetworkManager.service
34 After=NetworkManager.service
45 Before=network-online.target
67 [Service]
78 Type=oneshot
89 ExecStart=@bindir@/nm-online -s -q --timeout=30
10 RemainAfterExit=yes
911
1012 [Install]
1113 WantedBy=network-online.target
00 [Unit]
11 Description=Network Manager
2 Documentation=man:NetworkManager(8)
23 Wants=network.target
34 After=network-pre.target dbus.service
45 Before=network.target @DISTRO_NETWORK_SERVICE@
67 [Service]
78 Type=dbus
89 BusName=org.freedesktop.NetworkManager
10 #ExecReload=/usr/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32:0
911 ExecReload=/bin/kill -HUP $MAINPID
1012 ExecStart=@sbindir@/NetworkManager --no-daemon
1113 Restart=on-failure
327327 NM = @NM@
328328 NMEDIT = @NMEDIT@
329329 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
330 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
330331 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
331332 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
332333 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
273273 NM = @NM@
274274 NMEDIT = @NMEDIT@
275275 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
276 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
276277 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
277278 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
278279 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
6363 This file is not intended to be modified by the user, but it is read last and can shadow
6464 user configuration from <code class="literal">NetworkManager.conf</code>.
6565 </p>
66 <p>
67 Certain settings from the configuration can be reloaded at runtime either by sending SIGHUP signal or via
68 D-Bus' Reload call.
69 </p>
6670 </div>
6771 <div class="refsect1">
6872 <a name="id-1.2.5.6"></a><h2>File Format</h2>
295299 configuration with DNSSEC support. The /etc/resolv.conf
296300 will be managed by dnssec-trigger daemon.</p>
297301 <p><code class="literal">none</code>: NetworkManager will not
298 modify resolv.conf.</p>
302 modify resolv.conf. This implies <code class="varname">rc-manager</code>
303 <code class="literal">unmanaged</code></p>
299304 </td>
300305 </tr>
301306 <tr>
303308 <td>
304309 <p>Set the <code class="filename">resolv.conf</code>
305310 management mode. The default value depends on how NetworkManager
306 was built. Regardless of this setting, NetworkManager will
311 was built, whereas this version of NetworkManager was build with
312 a default of "<code class="literal">symlink</code>".
313 Regardless of this setting, NetworkManager will
307314 always write resolv.conf to its runtime state directory.</p>
308 <p><code class="literal">none</code>: NetworkManager will symlink
315 <p><code class="literal">symlink</code>: NetworkManager will symlink
309316 <code class="filename">/etc/resolv.conf</code> to its private
310317 resolv.conf file in the runtime state directory.</p>
311318 <p><code class="literal">file</code>: NetworkManager will write
312 <code class="filename">/etc/resolv.conf</code> as file.</p>
319 <code class="filename">/etc/resolv.conf</code> as file. If it finds
320 a symlink, it will follow the symlink and update the target
321 instead.</p>
313322 <p><code class="literal">resolvconf</code>: NetworkManager will run
314323 resolvconf to update the DNS configuration.</p>
315324 <p><code class="literal">netconfig</code>: NetworkManager will run
316325 netconfig to update the DNS configuration.</p>
326 <p><code class="literal">unmanaged</code>: don't touch
327 <code class="filename">resolv.conf</code>.</p>
328 <p><code class="literal">none</code>: deprecated alias for
329 <code class="literal">symlink</code>.</p>
317330 </td>
318331 </tr>
319332 <tr>
362375 <tr>
363376 <td><p><span class="term"><code class="varname">path</code></span></p></td>
364377 <td><p>The location where keyfiles are read and stored.
365 This defaults to "<code class="filename">/etc/NetworkManager/conf.d</code>".
378 This defaults to "<code class="filename">${prefix}/etc/NetworkManager/conf.d</code>".
366379 </p></td>
367380 </tr>
368381 <tr>
648661 considered even if the property in question is not present. In
649662 the example above, if <code class="literal">[connection-wifi-wlan0]</code> would
650663 have <code class="literal">stop-match</code> set to <code class="literal">yes</code>,
651 its <code class="literal">ipv6.ip6-privacy</code> value would be
652 unspecified.
664 the device <code class="literal">wlan0</code> would have <code class="literal">ipv6.ip6-privacy</code>
665 property unspecified. That is, the search for the property would not continue
666 in the connection sections <code class="literal">[connection-wifi-other]</code>
667 or <code class="literal">[connection]</code>.
653668 </p></td>
654669 </tr>
655670 </tbody>
6060 <sub name="License" link="license.html"/>
6161 </chapters>
6262 <functions>
63 <keyword type="method" name="The Reload() method" link="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.Reload"/>
6364 <keyword type="method" name="The GetDevices() method" link="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDevices"/>
6465 <keyword type="method" name="The GetAllDevices() method" link="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetAllDevices"/>
6566 <keyword type="method" name="The GetDeviceByIpIface() method" link="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDeviceByIpIface"/>
316317 <keyword type="property" name="The &quot;Domains&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains"/>
317318 <keyword type="property" name="The &quot;Searches&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Searches"/>
318319 <keyword type="property" name="The &quot;DnsOptions&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions"/>
320 <keyword type="property" name="The &quot;DnsPriority&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority"/>
319321 <keyword type="property" name="The &quot;WinsServers&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers"/>
320322 <keyword type="signal" name="The &quot;PropertiesChanged&quot; signal" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-signal-org-freedesktop-NetworkManager-IP6Config.PropertiesChanged"/>
321323 <keyword type="property" name="The &quot;Addresses&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Addresses"/>
327329 <keyword type="property" name="The &quot;Domains&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains"/>
328330 <keyword type="property" name="The &quot;Searches&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Searches"/>
329331 <keyword type="property" name="The &quot;DnsOptions&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions"/>
332 <keyword type="property" name="The &quot;DnsPriority&quot; property" link="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority"/>
330333 <keyword type="method" name="The Connect() method" link="gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html#gdbus-method-org-freedesktop-NetworkManager-VPN-Plugin.Connect"/>
331334 <keyword type="method" name="The ConnectInteractive() method" link="gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html#gdbus-method-org-freedesktop-NetworkManager-VPN-Plugin.ConnectInteractive"/>
332335 <keyword type="method" name="The NeedSecrets() method" link="gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html#gdbus-method-org-freedesktop-NetworkManager-VPN-Plugin.NeedSecrets"/>
435435 The signal causes a reload of NetworkManager's configuration.
436436 Note that not all configuration parameters can be changed at
437437 runtime and therefore some changes may be applied only after
438 the next restart of the daemon. The signal also forces a
439 rewrite of DNS configuration.
438 the next restart of the daemon.
439 A SIGHUP also involves further reloading actions, like doing
440 a DNS update and restarting the DNS plugin. The latter can be
441 useful for example when using the dnsmasq plugin and changing
442 its configuration in /etc/NetworkManager/dnsmasq.d. However,
443 it also means this will shortly interrupt name resolution.
444 In the future, there may be further actions added.
445 A SIGHUP means to update NetworkManager configuration and reload
446 everything that is supported. Note that this does not reload
447 connections from disk. For that there is a D-Bus API and
448 nmcli's reload action
440449 </p></td>
441450 </tr>
442451 <tr>
443452 <td><p><span class="term"><code class="varname">SIGUSR1</code></span></p></td>
444453 <td><p>
445 The signal forces a rewrite of DNS configuration.
454 The signal forces a rewrite of DNS configuration. Contrary to
455 SIGHUP, this does not restart the DNS plugin and will not interrupt
456 name resolution.
457 In the future, further actions may be added. A SIGUSR1
458 means to write out data like resolv.conf, or refresh a cache.
459 It is a subset of what is done for SIGHUP without reloading
460 configuration from disk.
446461 </p></td>
447462 </tr>
448463 <tr>
449464 <td><p><span class="term"><code class="varname">SIGUSR2</code></span></p></td>
450465 <td><p>
451 The signal has no effect at the moment.
466 The signal has no effect at the moment but is reserved for future
467 use.
452468 </p></td>
453469 </tr>
454470 </tbody>
455471 </table></div>
456472 <p>
473 </p>
474 <p>
475 An alternative to a signal to reload configuration is the Reload D-Bus call.
476 It allows for more fine-grained selection of what to reload, it only returns
477 after the reload is complete, and it is guarded by PolicyKit.
457478 </p>
458479 </div>
459480 <div class="refsect1">
5050 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains" title='The "Domains" property'>Domains</a> readable as
5151 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Searches" title='The "Searches" property'>Searches</a> readable as
5252 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions" title='The "DnsOptions" property'>DnsOptions</a> readable as
53 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority" title='The "DnsPriority" property'>DnsPriority</a> readable i
5354 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers" title='The "WinsServers" property'>WinsServers</a> readable au
5455 </pre>
5556 </div>
172173 </div>
173174 <hr>
174175 <div class="refsect2">
176 <a name="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority"></a><h3>The "DnsPriority" property</h3>
177 <pre class="programlisting">
178 DnsPriority readable i
179 </pre>
180 <p> The relative priority of DNS servers.
181 </p>
182 </div>
183 <hr>
184 <div class="refsect2">
175185 <a name="gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers"></a><h3>The "WinsServers" property</h3>
176186 <pre class="programlisting">
177187 WinsServers readable au
5050 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains" title='The "Domains" property'>Domains</a> readable as
5151 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Searches" title='The "Searches" property'>Searches</a> readable as
5252 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions" title='The "DnsOptions" property'>DnsOptions</a> readable as
53 <a class="link" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority" title='The "DnsPriority" property'>DnsPriority</a> readable i
5354 </pre>
5455 </div>
5556 <div class="refsect1">
164165 resolv.conf(5) manual page for the list of supported options.
165166 </p>
166167 </div>
168 <hr>
169 <div class="refsect2">
170 <a name="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority"></a><h3>The "DnsPriority" property</h3>
171 <pre class="programlisting">
172 DnsPriority readable i
173 </pre>
174 <p> The relative priority of DNS servers.
175 </p>
176 </div>
167177 </div>
168178 </div>
169179 <div class="footer">
3535 <div class="refsynopsisdiv">
3636 <h2>Methods</h2>
3737 <pre class="synopsis">
38 <a class="link" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.Reload" title="The Reload() method">Reload</a> (IN u flags);
3839 <a class="link" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDevices" title="The GetDevices() method">GetDevices</a> (OUT ao devices);
3940 <a class="link" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetAllDevices" title="The GetAllDevices() method">GetAllDevices</a> (OUT ao devices);
4041 <a class="link" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDeviceByIpIface" title="The GetDeviceByIpIface() method">GetDeviceByIpIface</a> (IN s iface,
101102 <div class="refsect1">
102103 <a name="gdbus-methods-org.freedesktop.NetworkManager"></a><h2>Method Details</h2>
103104 <div class="refsect2">
105 <a name="gdbus-method-org-freedesktop-NetworkManager.Reload"></a><h3>The Reload() method</h3>
106 <pre class="programlisting">
107 Reload (IN u flags);
108 </pre>
109 <p> Reload NetworkManager's configuration and perform certain updates, like flushing a cache or
110 rewriting external state to disk. This is similar to sending SIGHUP to NetworkManager but it
111 allows for more fine-grained control over what to reload (see <em class="parameter"><code>flags</code></em>). It also allows
112 non-root access via PolicyKit and contrary to signals it is synchronous.
113 </p>
114 <p> No flags (0x00) means to reload everything that is supported which is identical to
115 sending a SIGHUP.
116 (0x01) means to reload the NetworkManager.conf configuration from disk. Note that this
117 does not include connections, which can be reloaded via Setting's ReloadConnections.
118 (0x02) means to update DNS configuration, which usually involves writing /etc/resolv.conf
119 anew.
120 (0x04) means to restart the DNS plugin. This is for example useful when using
121 dnsmasq plugin, which uses additional configuration in /etc/NetworkManager/dnsmasq.d.
122 If you edit those files, you can restart the DNS plugin. This action shortly interrupts
123 rename resolution.
124 Note that flags may affect each other. For example, restarting the DNS plugin (0x04)
125 implicitly updates DNS too (0x02). Or when reloading the configuration (0x01), changes
126 to DNS setting also cause a DNS update (0x02). However, (0x01) does not involve restarting
127 the DNS plugin (0x02), unless an entirely different plugin is selected.
128 </p>
129 <div class="variablelist"><table border="0" class="variablelist">
130 <colgroup>
131 <col align="left" valign="top">
132 <col>
133 </colgroup>
134 <tbody><tr>
135 <td><p><span class="term"><code class="literal">IN u <em class="parameter"><code>flags</code></em></code>:</span></p></td>
136 <td><p>optional flags to specify which parts shall be reloaded.</p></td>
137 </tr></tbody>
138 </table></div>
139 </div>
140 <hr>
141 <div class="refsect2">
104142 <a name="gdbus-method-org-freedesktop-NetworkManager.GetDevices"></a><h3>The GetDevices() method</h3>
105143 <pre class="programlisting">
106144 GetDevices (OUT ao devices);
1313 <div class="titlepage">
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">NetworkManager Reference Manual</p></th></tr></table></div>
16 <div><p class="releaseinfo">Version 1.2.2
16 <div><p class="releaseinfo">Version 1.2.4
1717 </p></div>
1818 <div><p class="copyright">Copyright © 2012, 2013, 2014, 2015, 2016 The NetworkManager Authors</p></div>
1919 <div><div class="legalnotice">
5252 <ANCHOR id="gdbus-org.freedesktop.NetworkManager" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html">
5353 <ANCHOR id="gdbus-interface-org-freedesktop-NetworkManager" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-interface-org-freedesktop-NetworkManager">
5454 <ANCHOR id="gdbus-methods-org.freedesktop.NetworkManager" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-methods-org.freedesktop.NetworkManager">
55 <ANCHOR id="gdbus-method-org-freedesktop-NetworkManager.Reload" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.Reload">
5556 <ANCHOR id="gdbus-method-org-freedesktop-NetworkManager.GetDevices" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDevices">
5657 <ANCHOR id="gdbus-method-org-freedesktop-NetworkManager.GetAllDevices" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetAllDevices">
5758 <ANCHOR id="gdbus-method-org-freedesktop-NetworkManager.GetDeviceByIpIface" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetDeviceByIpIface">
429430 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains">
430431 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.Searches" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Searches">
431432 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions">
433 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority">
432434 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers">
433435 <ANCHOR id="gdbus-org.freedesktop.NetworkManager.IP6Config" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html">
434436 <ANCHOR id="gdbus-interface-org-freedesktop-NetworkManager-IP6Config" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-interface-org-freedesktop-NetworkManager-IP6Config">
444446 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains">
445447 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP6Config.Searches" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Searches">
446448 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions">
449 <ANCHOR id="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority">
447450 <ANCHOR id="gdbus-org.freedesktop.NetworkManager.VPN.Plugin" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html">
448451 <ANCHOR id="gdbus-interface-org-freedesktop-NetworkManager-VPN-Plugin" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html#gdbus-interface-org-freedesktop-NetworkManager-VPN-Plugin">
449452 <ANCHOR id="gdbus-methods-org.freedesktop.NetworkManager.VPN.Plugin" href="NetworkManager/gdbus-org.freedesktop.NetworkManager.VPN.Plugin.html#gdbus-methods-org.freedesktop.NetworkManager.VPN.Plugin">
349349 </dt>
350350 <dt>org.freedesktop.NetworkManager.IP4Config:DnsOptions, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions">The "DnsOptions" property</a>
351351 </dt>
352 <dt>org.freedesktop.NetworkManager.IP4Config:DnsPriority, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority">The "DnsPriority" property</a>
353 </dt>
352354 <dt>org.freedesktop.NetworkManager.IP4Config:Domains, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains">The "Domains" property</a>
353355 </dt>
354356 <dt>org.freedesktop.NetworkManager.IP4Config:Gateway, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP4Config.html#gdbus-property-org-freedesktop-NetworkManager-IP4Config.Gateway">The "Gateway" property</a>
372374 <dt>org.freedesktop.NetworkManager.IP6Config:Addresses, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Addresses">The "Addresses" property</a>
373375 </dt>
374376 <dt>org.freedesktop.NetworkManager.IP6Config:DnsOptions, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions">The "DnsOptions" property</a>
377 </dt>
378 <dt>org.freedesktop.NetworkManager.IP6Config:DnsPriority, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority">The "DnsPriority" property</a>
375379 </dt>
376380 <dt>org.freedesktop.NetworkManager.IP6Config:Domains, <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.IP6Config.html#gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains">The "Domains" property</a>
377381 </dt>
572576 </dt>
573577 <dt>org.freedesktop.NetworkManager.GetPermissions(), <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.GetPermissions">The GetPermissions() method</a>
574578 </dt>
579 <dt>org.freedesktop.NetworkManager.Reload(), <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.Reload">The Reload() method</a>
580 </dt>
575581 <dt>org.freedesktop.NetworkManager.SetLogging(), <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.SetLogging">The SetLogging() method</a>
576582 </dt>
577583 <dt>org.freedesktop.NetworkManager.Sleep(), <a class="indexterm" href="gdbus-org.freedesktop.NetworkManager.html#gdbus-method-org-freedesktop-NetworkManager.Sleep">The Sleep() method</a>
11271127 <td>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</td>
11281128 </tr>
11291129 <tr>
1130 <td align="left">dns-priority</td>
1131 <td align="left">int32</td>
1132 <td align="left">0</td>
1133 <td>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</td>
1134 </tr>
1135 <tr>
11301136 <td align="left">dns-search</td>
11311137 <td align="left">array of string</td>
11321138 <td align="left">[]</td>
12641270 <td align="left">array of string</td>
12651271 <td align="left">[]</td>
12661272 <td>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</td>
1273 </tr>
1274 <tr>
1275 <td align="left">dns-priority</td>
1276 <td align="left">int32</td>
1277 <td align="left">0</td>
1278 <td>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</td>
12671279 </tr>
12681280 <tr>
12691281 <td align="left">dns-search</td>
126126 org.freedesktop.NetworkManager.wifi.share.open yes
127127 org.freedesktop.NetworkManager.settings.modify.system yes
128128 org.freedesktop.NetworkManager.settings.modify.own yes
129 org.freedesktop.NetworkManager.settings.modify.hostname auth</pre>
129 org.freedesktop.NetworkManager.settings.modify.hostname auth
130 org.freedesktop.NetworkManager.reload no</pre>
130131 <p>
131132 This command shows configured polkit permissions for various NetworkManager
132133 operations. These permissions or actions (using polkit language) are configured
10821082 <td>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</td>
10831083 </tr>
10841084 <tr>
1085 <td><pre class="screen">dns-priority</pre></td>
1086 <td><pre class="screen">int32</pre></td>
1087 <td><pre class="screen">0</pre></td>
1088 <td>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</td>
1089 </tr>
1090 <tr>
10851091 <td><pre class="screen">dns-search</pre></td>
10861092 <td><pre class="screen">array of string</pre></td>
10871093 <td><pre class="screen">[]</pre></td>
12221228 <td>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</td>
12231229 </tr>
12241230 <tr>
1231 <td><pre class="screen">dns-priority</pre></td>
1232 <td><pre class="screen">int32</pre></td>
1233 <td><pre class="screen">0</pre></td>
1234 <td>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</td>
1235 </tr>
1236 <tr>
12251237 <td><pre class="screen">dns-search</pre></td>
12261238 <td><pre class="screen">array of string</pre></td>
12271239 <td><pre class="screen">[]</pre></td>
157157 <row><entry><screen>dhcp-timeout</screen></entry><entry><screen>int32</screen></entry><entry><screen>0</screen></entry><entry>A timeout for a DHCP transaction in seconds.</entry></row>
158158 <row><entry><screen>dns</screen></entry><entry><screen>array of uint32</screen></entry><entry><screen>[]</screen></entry><entry>Array of IP addresses of DNS servers (as network-byte-order integers)</entry></row>
159159 <row><entry><screen>dns-options</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</entry></row>
160 <row><entry><screen>dns-priority</screen></entry><entry><screen>int32</screen></entry><entry><screen>0</screen></entry><entry>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</entry></row>
160161 <row><entry><screen>dns-search</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS search domains.</entry></row>
161162 <row><entry><screen>gateway</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
162163 <row><entry><screen>ignore-auto-dns</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "method" is set to "auto" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the "dns" and "dns-search" properties, if any, are used.</entry></row>
179180 <row><entry><screen>dhcp-timeout</screen></entry><entry><screen>int32</screen></entry><entry><screen>0</screen></entry><entry>A timeout for a DHCP transaction in seconds.</entry></row>
180181 <row><entry><screen>dns</screen></entry><entry><screen>array of byte array</screen></entry><entry><screen>[]</screen></entry><entry>Array of IP addresses of DNS servers (in network byte order)</entry></row>
181182 <row><entry><screen>dns-options</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</entry></row>
183 <row><entry><screen>dns-priority</screen></entry><entry><screen>int32</screen></entry><entry><screen>0</screen></entry><entry>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</entry></row>
182184 <row><entry><screen>dns-search</screen></entry><entry><screen>array of string</screen></entry><entry><screen>[]</screen></entry><entry>Array of DNS search domains.</entry></row>
183185 <row><entry><screen>gateway</screen></entry><entry><screen>string</screen></entry><entry><screen/></entry><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
184186 <row><entry><screen>ignore-auto-dns</screen></entry><entry><screen>boolean</screen></entry><entry><screen>FALSE</screen></entry><entry>When "method" is set to "auto" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the "dns" and "dns-search" properties, if any, are used.</entry></row>
0 1.2.2
0 1.2.4
270270 NM = @NM@
271271 NMEDIT = @NMEDIT@
272272 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
273 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
273274 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
274275 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
275276 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
797797 </div>
798798 <div class="refsect1">
799799 <a name="NMClient.object-hierarchy"></a><h2>Object Hierarchy</h2>
800 <pre class="screen"> GEnum
800 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
801801 <span class="lineart">├──</span> NMClientError
802802 <span class="lineart">├──</span> NMClientPermission
803803 <span class="lineart">╰──</span> NMClientPermissionResult
32503250 <td class="enum_member_annotations"> </td>
32513251 </tr>
32523252 <tr>
3253 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS"></a>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS</p></td>
3254 <td class="enum_member_description">
3255 <p>modify persistent global
3256 DNS configuration</p>
3257 </td>
3258 <td class="enum_member_annotations"> </td>
3259 </tr>
3260 <tr>
3261 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RELOAD:CAPS"></a>NM_CLIENT_PERMISSION_RELOAD</p></td>
3262 <td class="enum_member_description">
3263 <p>controls access to Reload.</p>
3264 </td>
3265 <td class="enum_member_annotations"> </td>
3266 </tr>
3267 <tr>
32533268 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-LAST:CAPS"></a>NM_CLIENT_PERMISSION_LAST</p></td>
32543269 <td class="enum_member_description">
32553270 <p>a reserved boundary value</p>
541541 </div>
542542 <div class="refsect1">
543543 <a name="NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
544 <pre class="screen"> GFlags
544 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
545545 <span class="lineart">╰──</span> NMConnectionSerializationFlags
546546 </pre>
547547 </div>
790790 </div>
791791 <div class="refsect1">
792792 <a name="NMDevice.object-hierarchy"></a><h2>Object Hierarchy</h2>
793 <pre class="screen"> GBoxed
793 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
794794 <span class="lineart">╰──</span> NMLldpNeighbor
795795 GObject
796796 <span class="lineart">╰──</span> <a class="link" href="NMObject.html" title="NMObject">NMObject</a>
218218 </div>
219219 <div class="refsect1">
220220 <a name="NMSetting.object-hierarchy"></a><h2>Object Hierarchy</h2>
221 <pre class="screen"> GEnum
221 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
222222 <span class="lineart">├──</span> NMSettingCompareFlags
223223 <span class="lineart">├──</span> NMSettingDiffResult
224224 <span class="lineart">╰──</span> NMSettingMacRandomization
225 GFlags
225 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
226226 <span class="lineart">╰──</span> NMSettingSecretFlags
227227 GObject
228228 <span class="lineart">╰──</span> NMSetting
960960 </div>
961961 <div class="refsect1">
962962 <a name="NMSetting8021x.object-hierarchy"></a><h2>Object Hierarchy</h2>
963 <pre class="screen"> GEnum
963 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
964964 <span class="lineart">├──</span> NMSetting8021xCKFormat
965965 <span class="lineart">╰──</span> NMSetting8021xCKScheme
966966 GObject
472472 </div>
473473 <div class="refsect1">
474474 <a name="NMSettingConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
475 <pre class="screen"> GEnum
475 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
476476 <span class="lineart">├──</span> NMSettingConnectionAutoconnectSlaves
477477 <span class="lineart">╰──</span> NMSettingConnectionLldp
478478 GObject
405405 </div>
406406 <div class="refsect1">
407407 <a name="NMSettingDcb.object-hierarchy"></a><h2>Object Hierarchy</h2>
408 <pre class="screen"> GFlags
408 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
409409 <span class="lineart">╰──</span> NMSettingDcbFlags
410410 GObject
411411 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
150150 </div>
151151 <div class="refsect1">
152152 <a name="NMSettingIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
153 <pre class="screen"> GEnum
153 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
154154 <span class="lineart">├──</span> NMSettingIP6ConfigAddrGenMode
155155 <span class="lineart">╰──</span> NMSettingIP6ConfigPrivacy
156156 GObject
508508 </tr>
509509 <tr>
510510 <td class="function_type">
511 <span class="returnvalue">gint</span>
512 </td>
513 <td class="function_name">
514 <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-priority" title="nm_setting_ip_config_get_dns_priority ()">nm_setting_ip_config_get_dns_priority</a> <span class="c_punctuation">()</span>
515 </td>
516 </tr>
517 <tr>
518 <td class="function_type">
511519 <span class="returnvalue">guint</span>
512520 </td>
513521 <td class="function_name">
730738 <td class="property_flags">Read / Write</td>
731739 </tr>
732740 <tr>
741 <td class="property_type"><span class="type">gint</span></td>
742 <td class="property_name"><a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-priority" title="The “dns-priority” property">dns-priority</a></td>
743 <td class="property_flags">Read / Write / Construct</td>
744 </tr>
745 <tr>
733746 <td class="property_type"><span class="type">GStrv</span></td>
734747 <td class="property_name"><a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-search" title="The “dns-search” property">dns-search</a></td>
735748 <td class="property_flags">Read / Write</td>
810823 </tr>
811824 <tr>
812825 <td class="define_keyword">#define</td>
826 <td class="function_name"><a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS" title="NM_SETTING_IP_CONFIG_DNS_PRIORITY">NM_SETTING_IP_CONFIG_DNS_PRIORITY</a></td>
827 </tr>
828 <tr>
829 <td class="define_keyword">#define</td>
813830 <td class="function_name"><a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS" title="NM_SETTING_IP_CONFIG_ADDRESSES">NM_SETTING_IP_CONFIG_ADDRESSES</a></td>
814831 </tr>
815832 <tr>
925942 </div>
926943 <div class="refsect1">
927944 <a name="NMSettingIPConfig.object-hierarchy"></a><h2>Object Hierarchy</h2>
928 <pre class="screen"> GBoxed
945 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
929946 <span class="lineart">├──</span> NMIPAddress
930947 <span class="lineart">╰──</span> NMIPRoute
931948 GObject
28872904 </div>
28882905 <hr>
28892906 <div class="refsect2">
2907 <a name="nm-setting-ip-config-get-dns-priority"></a><h3>nm_setting_ip_config_get_dns_priority ()</h3>
2908 <pre class="programlisting"><span class="returnvalue">gint</span>
2909 nm_setting_ip_config_get_dns_priority (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
2910 <div class="refsect3">
2911 <a name="id-1.4.19.11.61.4"></a><h4>Parameters</h4>
2912 <div class="informaltable"><table width="100%" border="0">
2913 <colgroup>
2914 <col width="150px" class="parameters_name">
2915 <col class="parameters_description">
2916 <col width="200px" class="parameters_annotations">
2917 </colgroup>
2918 <tbody><tr>
2919 <td class="parameter_name"><p>setting</p></td>
2920 <td class="parameter_description"><p>the <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a></p></td>
2921 <td class="parameter_annotations"> </td>
2922 </tr></tbody>
2923 </table></div>
2924 </div>
2925 <div class="refsect3">
2926 <a name="id-1.4.19.11.61.5"></a><h4>Returns</h4>
2927 <p> the priority of DNS servers</p>
2928 </div>
2929 <p class="since">Since: 1.2.4</p>
2930 </div>
2931 <hr>
2932 <div class="refsect2">
28902933 <a name="nm-setting-ip-config-get-num-addresses"></a><h3>nm_setting_ip_config_get_num_addresses ()</h3>
28912934 <pre class="programlisting"><span class="returnvalue">guint</span>
28922935 nm_setting_ip_config_get_num_addresses
28932936 (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
28942937 <div class="refsect3">
2895 <a name="id-1.4.19.11.61.4"></a><h4>Parameters</h4>
2938 <a name="id-1.4.19.11.62.4"></a><h4>Parameters</h4>
28962939 <div class="informaltable"><table width="100%" border="0">
28972940 <colgroup>
28982941 <col width="150px" class="parameters_name">
29072950 </table></div>
29082951 </div>
29092952 <div class="refsect3">
2910 <a name="id-1.4.19.11.61.5"></a><h4>Returns</h4>
2953 <a name="id-1.4.19.11.62.5"></a><h4>Returns</h4>
29112954 <p> the number of configured addresses</p>
29122955 </div>
29132956 </div>
29182961 nm_setting_ip_config_get_address (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
29192962 <em class="parameter"><code><span class="type">int</span> idx</code></em>);</pre>
29202963 <div class="refsect3">
2921 <a name="id-1.4.19.11.62.4"></a><h4>Parameters</h4>
2964 <a name="id-1.4.19.11.63.4"></a><h4>Parameters</h4>
29222965 <div class="informaltable"><table width="100%" border="0">
29232966 <colgroup>
29242967 <col width="150px" class="parameters_name">
29402983 </table></div>
29412984 </div>
29422985 <div class="refsect3">
2943 <a name="id-1.4.19.11.62.5"></a><h4>Returns</h4>
2986 <a name="id-1.4.19.11.63.5"></a><h4>Returns</h4>
29442987 <p> the address at index <em class="parameter"><code>idx</code></em>
29452988 . </p>
29462989 <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
29552998 <p>Adds a new IP address and associated information to the setting. The
29562999 given address is duplicated internally and is not changed by this function.</p>
29573000 <div class="refsect3">
2958 <a name="id-1.4.19.11.63.5"></a><h4>Parameters</h4>
3001 <a name="id-1.4.19.11.64.5"></a><h4>Parameters</h4>
29593002 <div class="informaltable"><table width="100%" border="0">
29603003 <colgroup>
29613004 <col width="150px" class="parameters_name">
29773020 </table></div>
29783021 </div>
29793022 <div class="refsect3">
2980 <a name="id-1.4.19.11.63.6"></a><h4>Returns</h4>
3023 <a name="id-1.4.19.11.64.6"></a><h4>Returns</h4>
29813024 <p> <code class="literal">TRUE</code> if the address was added; <code class="literal">FALSE</code> if the address was already
29823025 known.</p>
29833026 </div>
29913034 <p>Removes the address at index <em class="parameter"><code>idx</code></em>
29923035 .</p>
29933036 <div class="refsect3">
2994 <a name="id-1.4.19.11.64.5"></a><h4>Parameters</h4>
3037 <a name="id-1.4.19.11.65.5"></a><h4>Parameters</h4>
29953038 <div class="informaltable"><table width="100%" border="0">
29963039 <colgroup>
29973040 <col width="150px" class="parameters_name">
30233066 <p>Removes the address <em class="parameter"><code>address</code></em>
30243067 .</p>
30253068 <div class="refsect3">
3026 <a name="id-1.4.19.11.65.5"></a><h4>Parameters</h4>
3069 <a name="id-1.4.19.11.66.5"></a><h4>Parameters</h4>
30273070 <div class="informaltable"><table width="100%" border="0">
30283071 <colgroup>
30293072 <col width="150px" class="parameters_name">
30453088 </table></div>
30463089 </div>
30473090 <div class="refsect3">
3048 <a name="id-1.4.19.11.65.6"></a><h4>Returns</h4>
3091 <a name="id-1.4.19.11.66.6"></a><h4>Returns</h4>
30493092 <p> <code class="literal">TRUE</code> if the address was found and removed; <code class="literal">FALSE</code> if it was not.</p>
30503093 </div>
30513094 </div>
30563099 nm_setting_ip_config_clear_addresses (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
30573100 <p>Removes all configured addresses.</p>
30583101 <div class="refsect3">
3059 <a name="id-1.4.19.11.66.5"></a><h4>Parameters</h4>
3102 <a name="id-1.4.19.11.67.5"></a><h4>Parameters</h4>
30603103 <div class="informaltable"><table width="100%" border="0">
30613104 <colgroup>
30623105 <col width="150px" class="parameters_name">
30773120 <pre class="programlisting">const <span class="returnvalue">char</span> *
30783121 nm_setting_ip_config_get_gateway (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
30793122 <div class="refsect3">
3080 <a name="id-1.4.19.11.67.4"></a><h4>Parameters</h4>
3123 <a name="id-1.4.19.11.68.4"></a><h4>Parameters</h4>
30813124 <div class="informaltable"><table width="100%" border="0">
30823125 <colgroup>
30833126 <col width="150px" class="parameters_name">
30923135 </table></div>
30933136 </div>
30943137 <div class="refsect3">
3095 <a name="id-1.4.19.11.67.5"></a><h4>Returns</h4>
3138 <a name="id-1.4.19.11.68.5"></a><h4>Returns</h4>
30963139 <p> the IP address of the gateway associated with this configuration, or
30973140 <code class="literal">NULL</code>.</p>
30983141 </div>
31033146 <pre class="programlisting"><span class="returnvalue">guint</span>
31043147 nm_setting_ip_config_get_num_routes (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
31053148 <div class="refsect3">
3106 <a name="id-1.4.19.11.68.4"></a><h4>Parameters</h4>
3149 <a name="id-1.4.19.11.69.4"></a><h4>Parameters</h4>
31073150 <div class="informaltable"><table width="100%" border="0">
31083151 <colgroup>
31093152 <col width="150px" class="parameters_name">
31183161 </table></div>
31193162 </div>
31203163 <div class="refsect3">
3121 <a name="id-1.4.19.11.68.5"></a><h4>Returns</h4>
3164 <a name="id-1.4.19.11.69.5"></a><h4>Returns</h4>
31223165 <p> the number of configured routes</p>
31233166 </div>
31243167 </div>
31293172 nm_setting_ip_config_get_route (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>,
31303173 <em class="parameter"><code><span class="type">int</span> idx</code></em>);</pre>
31313174 <div class="refsect3">
3132 <a name="id-1.4.19.11.69.4"></a><h4>Parameters</h4>
3175 <a name="id-1.4.19.11.70.4"></a><h4>Parameters</h4>
31333176 <div class="informaltable"><table width="100%" border="0">
31343177 <colgroup>
31353178 <col width="150px" class="parameters_name">
31513194 </table></div>
31523195 </div>
31533196 <div class="refsect3">
3154 <a name="id-1.4.19.11.69.5"></a><h4>Returns</h4>
3197 <a name="id-1.4.19.11.70.5"></a><h4>Returns</h4>
31553198 <p> the route at index <em class="parameter"><code>idx</code></em>
31563199 . </p>
31573200 <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
31663209 <p>Adds a new route and associated information to the setting. The
31673210 given route is duplicated internally and is not changed by this function.</p>
31683211 <div class="refsect3">
3169 <a name="id-1.4.19.11.70.5"></a><h4>Parameters</h4>
3212 <a name="id-1.4.19.11.71.5"></a><h4>Parameters</h4>
31703213 <div class="informaltable"><table width="100%" border="0">
31713214 <colgroup>
31723215 <col width="150px" class="parameters_name">
31883231 </table></div>
31893232 </div>
31903233 <div class="refsect3">
3191 <a name="id-1.4.19.11.70.6"></a><h4>Returns</h4>
3234 <a name="id-1.4.19.11.71.6"></a><h4>Returns</h4>
31923235 <p> <code class="literal">TRUE</code> if the route was added; <code class="literal">FALSE</code> if the route was already known.</p>
31933236 </div>
31943237 </div>
32013244 <p>Removes the route at index <em class="parameter"><code>idx</code></em>
32023245 .</p>
32033246 <div class="refsect3">
3204 <a name="id-1.4.19.11.71.5"></a><h4>Parameters</h4>
3247 <a name="id-1.4.19.11.72.5"></a><h4>Parameters</h4>
32053248 <div class="informaltable"><table width="100%" border="0">
32063249 <colgroup>
32073250 <col width="150px" class="parameters_name">
32333276 <p>Removes the route <em class="parameter"><code>route</code></em>
32343277 .</p>
32353278 <div class="refsect3">
3236 <a name="id-1.4.19.11.72.5"></a><h4>Parameters</h4>
3279 <a name="id-1.4.19.11.73.5"></a><h4>Parameters</h4>
32373280 <div class="informaltable"><table width="100%" border="0">
32383281 <colgroup>
32393282 <col width="150px" class="parameters_name">
32553298 </table></div>
32563299 </div>
32573300 <div class="refsect3">
3258 <a name="id-1.4.19.11.72.6"></a><h4>Returns</h4>
3301 <a name="id-1.4.19.11.73.6"></a><h4>Returns</h4>
32593302 <p> <code class="literal">TRUE</code> if the route was found and removed; <code class="literal">FALSE</code> if it was not.</p>
32603303 </div>
32613304 </div>
32663309 nm_setting_ip_config_clear_routes (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
32673310 <p>Removes all configured routes.</p>
32683311 <div class="refsect3">
3269 <a name="id-1.4.19.11.73.5"></a><h4>Parameters</h4>
3312 <a name="id-1.4.19.11.74.5"></a><h4>Parameters</h4>
32703313 <div class="informaltable"><table width="100%" border="0">
32713314 <colgroup>
32723315 <col width="150px" class="parameters_name">
32893332 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title="The “route-metric” property"><span class="type">“route-metric”</span></a>
32903333 property.</p>
32913334 <div class="refsect3">
3292 <a name="id-1.4.19.11.74.5"></a><h4>Parameters</h4>
3335 <a name="id-1.4.19.11.75.5"></a><h4>Parameters</h4>
32933336 <div class="informaltable"><table width="100%" border="0">
32943337 <colgroup>
32953338 <col width="150px" class="parameters_name">
33043347 </table></div>
33053348 </div>
33063349 <div class="refsect3">
3307 <a name="id-1.4.19.11.74.6"></a><h4>Returns</h4>
3350 <a name="id-1.4.19.11.75.6"></a><h4>Returns</h4>
33083351 <p> the route metric that is used for routes that don't explicitly
33093352 specify a metric. See <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--route-metric" title="The “route-metric” property"><span class="type">“route-metric”</span></a> for more details.</p>
33103353 </div>
33183361 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-routes" title="The “ignore-auto-routes” property"><span class="type">“ignore-auto-routes”</span></a>
33193362 property.</p>
33203363 <div class="refsect3">
3321 <a name="id-1.4.19.11.75.5"></a><h4>Parameters</h4>
3364 <a name="id-1.4.19.11.76.5"></a><h4>Parameters</h4>
33223365 <div class="informaltable"><table width="100%" border="0">
33233366 <colgroup>
33243367 <col width="150px" class="parameters_name">
33333376 </table></div>
33343377 </div>
33353378 <div class="refsect3">
3336 <a name="id-1.4.19.11.75.6"></a><h4>Returns</h4>
3379 <a name="id-1.4.19.11.76.6"></a><h4>Returns</h4>
33373380 <p> <code class="literal">TRUE</code> if automatically configured (ie via DHCP) routes should be
33383381 ignored.</p>
33393382 </div>
33473390 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns" title="The “ignore-auto-dns” property"><span class="type">“ignore-auto-dns”</span></a>
33483391 property.</p>
33493392 <div class="refsect3">
3350 <a name="id-1.4.19.11.76.5"></a><h4>Parameters</h4>
3393 <a name="id-1.4.19.11.77.5"></a><h4>Parameters</h4>
33513394 <div class="informaltable"><table width="100%" border="0">
33523395 <colgroup>
33533396 <col width="150px" class="parameters_name">
33623405 </table></div>
33633406 </div>
33643407 <div class="refsect3">
3365 <a name="id-1.4.19.11.76.6"></a><h4>Returns</h4>
3408 <a name="id-1.4.19.11.77.6"></a><h4>Returns</h4>
33663409 <p> <code class="literal">TRUE</code> if automatically configured (ie via DHCP) DNS information
33673410 should be ignored.</p>
33683411 </div>
33763419 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-hostname" title="The “dhcp-hostname” property"><span class="type">“dhcp-hostname”</span></a>
33773420 property.</p>
33783421 <div class="refsect3">
3379 <a name="id-1.4.19.11.77.5"></a><h4>Parameters</h4>
3422 <a name="id-1.4.19.11.78.5"></a><h4>Parameters</h4>
33803423 <div class="informaltable"><table width="100%" border="0">
33813424 <colgroup>
33823425 <col width="150px" class="parameters_name">
33913434 </table></div>
33923435 </div>
33933436 <div class="refsect3">
3394 <a name="id-1.4.19.11.77.6"></a><h4>Returns</h4>
3437 <a name="id-1.4.19.11.78.6"></a><h4>Returns</h4>
33953438 <p> the configured hostname to send to the DHCP server</p>
33963439 </div>
33973440 </div>
34043447 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-send-hostname" title="The “dhcp-send-hostname” property"><span class="type">“dhcp-send-hostname”</span></a>
34053448 property.</p>
34063449 <div class="refsect3">
3407 <a name="id-1.4.19.11.78.5"></a><h4>Parameters</h4>
3450 <a name="id-1.4.19.11.79.5"></a><h4>Parameters</h4>
34083451 <div class="informaltable"><table width="100%" border="0">
34093452 <colgroup>
34103453 <col width="150px" class="parameters_name">
34193462 </table></div>
34203463 </div>
34213464 <div class="refsect3">
3422 <a name="id-1.4.19.11.78.6"></a><h4>Returns</h4>
3465 <a name="id-1.4.19.11.79.6"></a><h4>Returns</h4>
34233466 <p> <code class="literal">TRUE</code> if NetworkManager should send the machine hostname to the
34243467 DHCP server when requesting addresses to allow the server to automatically
34253468 update DNS information for this machine.</p>
34343477 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--never-default" title="The “never-default” property"><span class="type">“never-default”</span></a>
34353478 property.</p>
34363479 <div class="refsect3">
3437 <a name="id-1.4.19.11.79.5"></a><h4>Parameters</h4>
3480 <a name="id-1.4.19.11.80.5"></a><h4>Parameters</h4>
34383481 <div class="informaltable"><table width="100%" border="0">
34393482 <colgroup>
34403483 <col width="150px" class="parameters_name">
34493492 </table></div>
34503493 </div>
34513494 <div class="refsect3">
3452 <a name="id-1.4.19.11.79.6"></a><h4>Returns</h4>
3495 <a name="id-1.4.19.11.80.6"></a><h4>Returns</h4>
34533496 <p> <code class="literal">TRUE</code> if this connection should never be the default
34543497 connection</p>
34553498 </div>
34623505 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--may-fail" title="The “may-fail” property"><span class="type">“may-fail”</span></a>
34633506 property.</p>
34643507 <div class="refsect3">
3465 <a name="id-1.4.19.11.80.5"></a><h4>Parameters</h4>
3508 <a name="id-1.4.19.11.81.5"></a><h4>Parameters</h4>
34663509 <div class="informaltable"><table width="100%" border="0">
34673510 <colgroup>
34683511 <col width="150px" class="parameters_name">
34773520 </table></div>
34783521 </div>
34793522 <div class="refsect3">
3480 <a name="id-1.4.19.11.80.6"></a><h4>Returns</h4>
3523 <a name="id-1.4.19.11.81.6"></a><h4>Returns</h4>
34813524 <p> <code class="literal">TRUE</code> if this connection doesn't require this type of IP
34823525 addressing to complete for the connection to succeed.</p>
34833526 </div>
34883531 <pre class="programlisting"><span class="returnvalue">gint</span>
34893532 nm_setting_ip_config_get_dad_timeout (<em class="parameter"><code><a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig"><span class="type">NMSettingIPConfig</span></a> *setting</code></em>);</pre>
34903533 <div class="refsect3">
3491 <a name="id-1.4.19.11.81.4"></a><h4>Parameters</h4>
3534 <a name="id-1.4.19.11.82.4"></a><h4>Parameters</h4>
34923535 <div class="informaltable"><table width="100%" border="0">
34933536 <colgroup>
34943537 <col width="150px" class="parameters_name">
35033546 </table></div>
35043547 </div>
35053548 <div class="refsect3">
3506 <a name="id-1.4.19.11.81.5"></a><h4>Returns</h4>
3549 <a name="id-1.4.19.11.82.5"></a><h4>Returns</h4>
35073550 <p> the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dad-timeout" title="The “dad-timeout” property"><span class="type">“dad-timeout”</span></a> property.</p>
35083551 </div>
35093552 <p class="since">Since: 1.2</p>
35163559 <p>Returns the value contained in the <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-timeout" title="The “dhcp-timeout” property"><span class="type">“dhcp-timeout”</span></a>
35173560 property.</p>
35183561 <div class="refsect3">
3519 <a name="id-1.4.19.11.82.5"></a><h4>Parameters</h4>
3562 <a name="id-1.4.19.11.83.5"></a><h4>Parameters</h4>
35203563 <div class="informaltable"><table width="100%" border="0">
35213564 <colgroup>
35223565 <col width="150px" class="parameters_name">
35313574 </table></div>
35323575 </div>
35333576 <div class="refsect3">
3534 <a name="id-1.4.19.11.82.6"></a><h4>Returns</h4>
3577 <a name="id-1.4.19.11.83.6"></a><h4>Returns</h4>
35353578 <p> the configured DHCP timeout in seconds. 0 = default for
35363579 the particular kind of device.</p>
35373580 </div>
35673610 <div class="refsect2">
35683611 <a name="NM-SETTING-IP-CONFIG-DNS-OPTIONS:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DNS_OPTIONS</h3>
35693612 <pre class="programlisting">#define NM_SETTING_IP_CONFIG_DNS_OPTIONS "dns-options"
3613 </pre>
3614 </div>
3615 <hr>
3616 <div class="refsect2">
3617 <a name="NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS"></a><h3>NM_SETTING_IP_CONFIG_DNS_PRIORITY</h3>
3618 <pre class="programlisting">#define NM_SETTING_IP_CONFIG_DNS_PRIORITY "dns-priority"
35703619 </pre>
35713620 </div>
35723621 <hr>
38103859 distinct from an empty list of properties.</p>
38113860 <p>Flags: Read / Write</p>
38123861 <p class="since">Since: 1.2</p>
3862 </div>
3863 <hr>
3864 <div class="refsect2">
3865 <a name="NMSettingIPConfig--dns-priority"></a><h3>The <code class="literal">“dns-priority”</code> property</h3>
3866 <pre class="programlisting"> “dns-priority” <span class="type">gint</span></pre>
3867 <p>DNS priority.</p>
3868 <p>The relative priority to be used when determining the order of DNS
3869 servers in resolv.conf. A lower value means that servers will be on top
3870 of the file. Zero selects the default value, which is 50 for VPNs and
3871 100 for other connections. When multiple devices have configurations
3872 with the same priority, the one with an active default route will be
3873 preferred. Note that when using dns=dnsmasq the order is meaningless
3874 since dnsmasq forwards queries to all known servers at the same time.</p>
3875 <p>Negative values have the special effect of excluding other configurations
3876 with a greater priority value; so in presence of at least a negative
3877 priority, only DNS servers from configurations with the lowest priority
3878 value will be used.</p>
3879 <p>Flags: Read / Write / Construct</p>
3880 <p>Default value: 0</p>
3881 <p class="since">Since: 1.2.4</p>
38133882 </div>
38143883 <hr>
38153884 <div class="refsect2">
156156 </div>
157157 <div class="refsect1">
158158 <a name="NMSettingMacvlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
159 <pre class="screen"> GEnum
159 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
160160 <span class="lineart">╰──</span> NMSettingMacvlanMode
161161 GObject
162162 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
174174 </div>
175175 <div class="refsect1">
176176 <a name="NMSettingSerial.object-hierarchy"></a><h2>Object Hierarchy</h2>
177 <pre class="screen"> GEnum
177 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
178178 <span class="lineart">╰──</span> NMSettingSerialParity
179179 GObject
180180 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
190190 </div>
191191 <div class="refsect1">
192192 <a name="NMSettingTun.object-hierarchy"></a><h2>Object Hierarchy</h2>
193 <pre class="screen"> GEnum
193 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
194194 <span class="lineart">╰──</span> NMSettingTunMode
195195 GObject
196196 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
229229 </div>
230230 <div class="refsect1">
231231 <a name="NMSettingVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
232 <pre class="screen"> GEnum
232 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
233233 <span class="lineart">╰──</span> NMVlanPriorityMap
234 GFlags
234 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
235235 <span class="lineart">╰──</span> NMVlanFlags
236236 GObject
237237 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
393393 </div>
394394 <div class="refsect1">
395395 <a name="NMSettingWired.object-hierarchy"></a><h2>Object Hierarchy</h2>
396 <pre class="screen"> GFlags
396 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
397397 <span class="lineart">╰──</span> NMSettingWiredWakeOnLan
398398 GObject
399399 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
425425 </div>
426426 <div class="refsect1">
427427 <a name="NMSettingWireless.object-hierarchy"></a><h2>Object Hierarchy</h2>
428 <pre class="screen"> GEnum
428 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
429429 <span class="lineart">╰──</span> NMSettingWirelessPowersave
430430 GObject
431431 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
482482 </div>
483483 <div class="refsect1">
484484 <a name="NMSettingWirelessSecurity.object-hierarchy"></a><h2>Object Hierarchy</h2>
485 <pre class="screen"> GEnum
485 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
486486 <span class="lineart">╰──</span> NMWepKeyType
487487 GObject
488488 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
191191 </div>
192192 <div class="refsect1">
193193 <a name="NMVpnEditorPlugin.object-hierarchy"></a><h2>Object Hierarchy</h2>
194 <pre class="screen"> GFlags
194 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
195195 <span class="lineart">╰──</span> NMVpnEditorPluginCapability
196 GInterface
196 <a href="/usr/share/gtk-doc/html/gobject/GTypeModule.html">GInterface</a>
197197 <span class="lineart">├──</span> NMVpnEditor
198198 <span class="lineart">╰──</span> NMVpnEditorPlugin
199199 </pre>
414414 </dt>
415415 <dd></dd>
416416 <dt>
417 <a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-4:CAPS" title="NM_AVAILABLE_IN_1_4">NM_AVAILABLE_IN_1_4</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
417 <a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-2-4:CAPS" title="NM_AVAILABLE_IN_1_2_4">NM_AVAILABLE_IN_1_2_4</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
418418 </dt>
419419 <dd></dd>
420420 <a name="idxB"></a><h3 class="title">B</h3>
14691469 </dt>
14701470 <dd></dd>
14711471 <dt>
1472 <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-4:CAPS" title="NM_DEPRECATED_IN_1_4">NM_DEPRECATED_IN_1_4</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
1473 </dt>
1474 <dd></dd>
1475 <dt>
1476 <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-4-FOR:CAPS" title="NM_DEPRECATED_IN_1_4_FOR()">NM_DEPRECATED_IN_1_4_FOR</a>, macro in <a class="link" href="libnm-nm-version.html" title="nm-version">nm-version</a>
1477 </dt>
1478 <dd></dd>
1479 <dt>
14801472 <a class="link" href="NMDevice.html#NMDevice-struct" title="NMDevice">NMDevice</a>, struct in nm-types
14811473 </dt>
14821474 <dd></dd>
42994291 </dt>
43004292 <dd></dd>
43014293 <dt>
4294 <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-priority" title="The “dns-priority” property">NMSettingIPConfig:dns-priority</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
4295 </dt>
4296 <dd></dd>
4297 <dt>
43024298 <a class="link" href="NMSettingIPConfig.html#NMSettingIPConfig--dns-search" title="The “dns-search” property">NMSettingIPConfig:dns-search</a>, object property in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
43034299 </dt>
43044300 <dd></dd>
65676563 </dt>
65686564 <dd></dd>
65696565 <dt>
6566 <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS" title="NM_SETTING_IP_CONFIG_DNS_PRIORITY">NM_SETTING_IP_CONFIG_DNS_PRIORITY</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
6567 </dt>
6568 <dd></dd>
6569 <dt>
65706570 <a class="link" href="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS" title="NM_SETTING_IP_CONFIG_DNS_SEARCH">NM_SETTING_IP_CONFIG_DNS_SEARCH</a>, macro in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
65716571 </dt>
65726572 <dd></dd>
66006600 <dd></dd>
66016601 <dt>
66026602 <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-option" title="nm_setting_ip_config_get_dns_option ()">nm_setting_ip_config_get_dns_option</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
6603 </dt>
6604 <dd></dd>
6605 <dt>
6606 <a class="link" href="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-priority" title="nm_setting_ip_config_get_dns_priority ()">nm_setting_ip_config_get_dns_priority</a>, function in <a class="link" href="NMSettingIPConfig.html" title="NMSettingIPConfig">NMSettingIPConfig</a>
66036607 </dt>
66046608 <dd></dd>
66056609 <dt>
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for libnm 1.2.2
17 for libnm 1.2.4
1818
1919 The latest version of this documentation can be found on-line at
2020 <a class="ulink" href="https://developer.gnome.org/libnm/stable/" target="_top">https://developer.gnome.org/libnm/stable/</a>.
103103 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS">
104104 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS">
105105 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS">
106 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS">
107 <ANCHOR id="NM-CLIENT-PERMISSION-RELOAD:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RELOAD:CAPS">
106108 <ANCHOR id="NM-CLIENT-PERMISSION-LAST:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS">
107109 <ANCHOR id="NMClientPermissionResult" href="libnm/NMClient.html#NMClientPermissionResult">
108110 <ANCHOR id="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS" href="libnm/NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS">
263265 <ANCHOR id="NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS">
264266 <ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS">
265267 <ANCHOR id="NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS">
268 <ANCHOR id="NM-MANAGER-ERROR-INVALID-ARGUMENTS:CAPS" href="libnm/libnm-nm-errors.html#NM-MANAGER-ERROR-INVALID-ARGUMENTS:CAPS">
266269 <ANCHOR id="NMSecretAgentError" href="libnm/libnm-nm-errors.html#NMSecretAgentError">
267270 <ANCHOR id="NM-SECRET-AGENT-ERROR-FAILED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-FAILED:CAPS">
268271 <ANCHOR id="NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS" href="libnm/libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS">
14091412 <ANCHOR id="nm-setting-ip-config-remove-dns-option" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-option">
14101413 <ANCHOR id="nm-setting-ip-config-remove-dns-option-by-value" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-option-by-value">
14111414 <ANCHOR id="nm-setting-ip-config-clear-dns-options" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-options">
1415 <ANCHOR id="nm-setting-ip-config-get-dns-priority" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-dns-priority">
14121416 <ANCHOR id="nm-setting-ip-config-get-num-addresses" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses">
14131417 <ANCHOR id="nm-setting-ip-config-get-address" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-get-address">
14141418 <ANCHOR id="nm-setting-ip-config-add-address" href="libnm/NMSettingIPConfig.html#nm-setting-ip-config-add-address">
14371441 <ANCHOR id="NM-SETTING-IP-CONFIG-DNS:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS">
14381442 <ANCHOR id="NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS">
14391443 <ANCHOR id="NM-SETTING-IP-CONFIG-DNS-OPTIONS:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-OPTIONS:CAPS">
1444 <ANCHOR id="NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS">
14401445 <ANCHOR id="NM-SETTING-IP-CONFIG-ADDRESSES:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS">
14411446 <ANCHOR id="NM-SETTING-IP-CONFIG-GATEWAY:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS">
14421447 <ANCHOR id="NM-SETTING-IP-CONFIG-ROUTES:CAPS" href="libnm/NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS">
14731478 <ANCHOR id="NMSettingIPConfig--dhcp-timeout" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dhcp-timeout">
14741479 <ANCHOR id="NMSettingIPConfig--dns" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns">
14751480 <ANCHOR id="NMSettingIPConfig--dns-options" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns-options">
1481 <ANCHOR id="NMSettingIPConfig--dns-priority" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns-priority">
14761482 <ANCHOR id="NMSettingIPConfig--dns-search" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--dns-search">
14771483 <ANCHOR id="NMSettingIPConfig--gateway" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--gateway">
14781484 <ANCHOR id="NMSettingIPConfig--ignore-auto-dns" href="libnm/NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns">
30673073 <ANCHOR id="NM-DEPRECATED-IN-0-9-10-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS">
30683074 <ANCHOR id="NM-DEPRECATED-IN-1-0-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS">
30693075 <ANCHOR id="NM-DEPRECATED-IN-1-2-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-2-FOR:CAPS">
3070 <ANCHOR id="NM-DEPRECATED-IN-1-4-FOR:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-4-FOR:CAPS">
30713076 <ANCHOR id="libnm-nm-version.other_details" href="libnm/libnm-nm-version.html#libnm-nm-version.other_details">
30723077 <ANCHOR id="NM-DEPRECATED-IN-0-9-10:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS">
30733078 <ANCHOR id="NM-AVAILABLE-IN-0-9-10:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS">
30753080 <ANCHOR id="NM-AVAILABLE-IN-1-0:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS">
30763081 <ANCHOR id="NM-DEPRECATED-IN-1-2:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-2:CAPS">
30773082 <ANCHOR id="NM-AVAILABLE-IN-1-2:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-1-2:CAPS">
3078 <ANCHOR id="NM-DEPRECATED-IN-1-4:CAPS" href="libnm/libnm-nm-version.html#NM-DEPRECATED-IN-1-4:CAPS">
3079 <ANCHOR id="NM-AVAILABLE-IN-1-4:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-1-4:CAPS">
3083 <ANCHOR id="NM-AVAILABLE-IN-1-2-4:CAPS" href="libnm/libnm-nm-version.html#NM-AVAILABLE-IN-1-2-4:CAPS">
30803084 <ANCHOR id="libnm-nm-vpn-dbus-interface" href="libnm/libnm-nm-vpn-dbus-interface.html">
30813085 <ANCHOR id="libnm-nm-vpn-dbus-interface.other" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.other">
30823086 <ANCHOR id="libnm-nm-vpn-dbus-interface.object-hierarchy" href="libnm/libnm-nm-vpn-dbus-interface.html#libnm-nm-vpn-dbus-interface.object-hierarchy">
352352 </div>
353353 <div class="refsect1">
354354 <a name="libnm-nm-dbus-interface.object-hierarchy"></a><h2>Object Hierarchy</h2>
355 <pre class="screen"> GEnum
355 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
356356 <span class="lineart">├──</span> NM80211Mode
357357 <span class="lineart">├──</span> NMActiveConnectionState
358358 <span class="lineart">├──</span> NMConnectivityState
363363 <span class="lineart">├──</span> NMMetered
364364 <span class="lineart">├──</span> NMState
365365 <span class="lineart">╰──</span> NMWimaxNspNetworkType
366 GFlags
366 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
367367 <span class="lineart">├──</span> NM80211ApFlags
368368 <span class="lineart">├──</span> NM80211ApSecurityFlags
369369 <span class="lineart">├──</span> NMBluetoothCapabilities
183183 </div>
184184 <div class="refsect1">
185185 <a name="libnm-nm-errors.object-hierarchy"></a><h2>Object Hierarchy</h2>
186 <pre class="screen"> GEnum
186 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
187187 <span class="lineart">├──</span> NMAgentManagerError
188188 <span class="lineart">├──</span> NMConnectionError
189189 <span class="lineart">├──</span> NMCryptoError
710710 <td class="enum_member_name"><p><a name="NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS"></a>NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN</p></td>
711711 <td class="enum_member_description">
712712 <p>Unknown log domain in SetLogging</p>
713 </td>
714 <td class="enum_member_annotations"> </td>
715 </tr>
716 <tr>
717 <td class="enum_member_name"><p><a name="NM-MANAGER-ERROR-INVALID-ARGUMENTS:CAPS"></a>NM_MANAGER_ERROR_INVALID_ARGUMENTS</p></td>
718 <td class="enum_member_description">
719 <p>Invalid arguments for D-Bus request</p>
713720 </td>
714721 <td class="enum_member_annotations"> </td>
715722 </tr>
550550 </div>
551551 <div class="refsect1">
552552 <a name="libnm-nm-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
553 <pre class="screen"> GEnum
553 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
554554 <span class="lineart">╰──</span> NMUtilsSecurityType
555555 </pre>
556556 </div>
6464 <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-2-FOR:CAPS" title="NM_DEPRECATED_IN_1_2_FOR()">NM_DEPRECATED_IN_1_2_FOR</a><span class="c_punctuation">()</span>
6565 </td>
6666 </tr>
67 <tr>
68 <td class="define_keyword">#define</td>
69 <td class="function_name">
70 <a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-4-FOR:CAPS" title="NM_DEPRECATED_IN_1_4_FOR()">NM_DEPRECATED_IN_1_4_FOR</a><span class="c_punctuation">()</span>
71 </td>
72 </tr>
7367 </tbody>
7468 </table></div>
7569 </div>
107101 </tr>
108102 <tr>
109103 <td class="define_keyword">#define</td>
110 <td class="function_name"><a class="link" href="libnm-nm-version.html#NM-DEPRECATED-IN-1-4:CAPS" title="NM_DEPRECATED_IN_1_4">NM_DEPRECATED_IN_1_4</a></td>
111 </tr>
112 <tr>
113 <td class="define_keyword">#define</td>
114 <td class="function_name"><a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-4:CAPS" title="NM_AVAILABLE_IN_1_4">NM_AVAILABLE_IN_1_4</a></td>
104 <td class="function_name"><a class="link" href="libnm-nm-version.html#NM-AVAILABLE-IN-1-2-4:CAPS" title="NM_AVAILABLE_IN_1_2_4">NM_AVAILABLE_IN_1_2_4</a></td>
115105 </tr>
116106 </tbody>
117107 </table></div>
148138 <div class="refsect2">
149139 <a name="NM-DEPRECATED-IN-1-2-FOR:CAPS"></a><h3>NM_DEPRECATED_IN_1_2_FOR()</h3>
150140 <pre class="programlisting"># define NM_DEPRECATED_IN_1_2_FOR(f) G_DEPRECATED_FOR(f)
151 </pre>
152 </div>
153 <hr>
154 <div class="refsect2">
155 <a name="NM-DEPRECATED-IN-1-4-FOR:CAPS"></a><h3>NM_DEPRECATED_IN_1_4_FOR()</h3>
156 <pre class="programlisting"># define NM_DEPRECATED_IN_1_4_FOR(f) G_DEPRECATED_FOR(f)
157141 </pre>
158142 </div>
159143 </div>
195179 </div>
196180 <hr>
197181 <div class="refsect2">
198 <a name="NM-DEPRECATED-IN-1-4:CAPS"></a><h3>NM_DEPRECATED_IN_1_4</h3>
199 <pre class="programlisting"># define NM_DEPRECATED_IN_1_4 G_DEPRECATED
200 </pre>
201 </div>
202 <hr>
203 <div class="refsect2">
204 <a name="NM-AVAILABLE-IN-1-4:CAPS"></a><h3>NM_AVAILABLE_IN_1_4</h3>
205 <pre class="programlisting"># define NM_AVAILABLE_IN_1_4 G_UNAVAILABLE(1,4)
182 <a name="NM-AVAILABLE-IN-1-2-4:CAPS"></a><h3>NM_AVAILABLE_IN_1_2_4</h3>
183 <pre class="programlisting"># define NM_AVAILABLE_IN_1_2_4 G_UNAVAILABLE(1.2,4)
206184 </pre>
207185 </div>
208186 </div>
292292 </div>
293293 <div class="refsect1">
294294 <a name="libnm-nm-vpn-dbus-interface.object-hierarchy"></a><h2>Object Hierarchy</h2>
295 <pre class="screen"> GEnum
295 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
296296 <span class="lineart">├──</span> NMVpnConnectionState
297297 <span class="lineart">├──</span> NMVpnConnectionStateReason
298298 <span class="lineart">├──</span> NMVpnPluginFailure
978978 <keyword type="function" name="nm_setting_ip_config_remove_dns_option ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-option" since="1.2"/>
979979 <keyword type="function" name="nm_setting_ip_config_remove_dns_option_by_value ()" link="NMSettingIPConfig.html#nm-setting-ip-config-remove-dns-option-by-value" since="1.2"/>
980980 <keyword type="function" name="nm_setting_ip_config_clear_dns_options ()" link="NMSettingIPConfig.html#nm-setting-ip-config-clear-dns-options" since="1.2"/>
981 <keyword type="function" name="nm_setting_ip_config_get_dns_priority ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-dns-priority" since="1.2.4"/>
981982 <keyword type="function" name="nm_setting_ip_config_get_num_addresses ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-num-addresses"/>
982983 <keyword type="function" name="nm_setting_ip_config_get_address ()" link="NMSettingIPConfig.html#nm-setting-ip-config-get-address"/>
983984 <keyword type="function" name="nm_setting_ip_config_add_address ()" link="NMSettingIPConfig.html#nm-setting-ip-config-add-address"/>
10051006 <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS:CAPS"/>
10061007 <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS_SEARCH" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-SEARCH:CAPS"/>
10071008 <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS_OPTIONS" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-OPTIONS:CAPS"/>
1009 <keyword type="macro" name="NM_SETTING_IP_CONFIG_DNS_PRIORITY" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-DNS-PRIORITY:CAPS"/>
10081010 <keyword type="macro" name="NM_SETTING_IP_CONFIG_ADDRESSES" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ADDRESSES:CAPS"/>
10091011 <keyword type="macro" name="NM_SETTING_IP_CONFIG_GATEWAY" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-GATEWAY:CAPS"/>
10101012 <keyword type="macro" name="NM_SETTING_IP_CONFIG_ROUTES" link="NMSettingIPConfig.html#NM-SETTING-IP-CONFIG-ROUTES:CAPS"/>
10401042 <keyword type="property" name="The “dhcp-timeout” property" link="NMSettingIPConfig.html#NMSettingIPConfig--dhcp-timeout"/>
10411043 <keyword type="property" name="The “dns” property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns"/>
10421044 <keyword type="property" name="The “dns-options” property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns-options"/>
1045 <keyword type="property" name="The “dns-priority” property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns-priority"/>
10431046 <keyword type="property" name="The “dns-search” property" link="NMSettingIPConfig.html#NMSettingIPConfig--dns-search"/>
10441047 <keyword type="property" name="The “gateway” property" link="NMSettingIPConfig.html#NMSettingIPConfig--gateway"/>
10451048 <keyword type="property" name="The “ignore-auto-dns” property" link="NMSettingIPConfig.html#NMSettingIPConfig--ignore-auto-dns"/>
21672170 <keyword type="macro" name="NM_DEPRECATED_IN_0_9_10_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10-FOR:CAPS"/>
21682171 <keyword type="macro" name="NM_DEPRECATED_IN_1_0_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-0-FOR:CAPS"/>
21692172 <keyword type="macro" name="NM_DEPRECATED_IN_1_2_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-2-FOR:CAPS"/>
2170 <keyword type="macro" name="NM_DEPRECATED_IN_1_4_FOR()" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-4-FOR:CAPS"/>
21712173 <keyword type="macro" name="NM_DEPRECATED_IN_0_9_10" link="libnm-nm-version.html#NM-DEPRECATED-IN-0-9-10:CAPS"/>
21722174 <keyword type="macro" name="NM_AVAILABLE_IN_0_9_10" link="libnm-nm-version.html#NM-AVAILABLE-IN-0-9-10:CAPS"/>
21732175 <keyword type="macro" name="NM_DEPRECATED_IN_1_0" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-0:CAPS"/>
21742176 <keyword type="macro" name="NM_AVAILABLE_IN_1_0" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-0:CAPS"/>
21752177 <keyword type="macro" name="NM_DEPRECATED_IN_1_2" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-2:CAPS"/>
21762178 <keyword type="macro" name="NM_AVAILABLE_IN_1_2" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-2:CAPS"/>
2177 <keyword type="macro" name="NM_DEPRECATED_IN_1_4" link="libnm-nm-version.html#NM-DEPRECATED-IN-1-4:CAPS"/>
2178 <keyword type="macro" name="NM_AVAILABLE_IN_1_4" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-4:CAPS"/>
2179 <keyword type="macro" name="NM_AVAILABLE_IN_1_2_4" link="libnm-nm-version.html#NM-AVAILABLE-IN-1-2-4:CAPS"/>
21792180 <keyword type="macro" name="NM_DBUS_PATH_VPN" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN:CAPS"/>
21802181 <keyword type="macro" name="NM_DBUS_INTERFACE_VPN" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-INTERFACE-VPN:CAPS"/>
21812182 <keyword type="macro" name="NM_DBUS_PATH_VPN_CONNECTION" link="libnm-nm-vpn-dbus-interface.html#NM-DBUS-PATH-VPN-CONNECTION:CAPS"/>
22682269 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS"/>
22692270 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS"/>
22702271 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS"/>
2272 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS"/>
2273 <keyword type="constant" name="NM_CLIENT_PERMISSION_RELOAD" link="NMClient.html#NM-CLIENT-PERMISSION-RELOAD:CAPS"/>
22712274 <keyword type="constant" name="NM_CLIENT_PERMISSION_LAST" link="NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS"/>
22722275 <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_UNKNOWN" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS"/>
22732276 <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_YES" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS"/>
23172320 <keyword type="constant" name="NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED" link="libnm-nm-errors.html#NM-MANAGER-ERROR-ALREADY-ENABLED-OR-DISABLED:CAPS"/>
23182321 <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-LEVEL:CAPS"/>
23192322 <keyword type="constant" name="NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN" link="libnm-nm-errors.html#NM-MANAGER-ERROR-UNKNOWN-LOG-DOMAIN:CAPS"/>
2323 <keyword type="constant" name="NM_MANAGER_ERROR_INVALID_ARGUMENTS" link="libnm-nm-errors.html#NM-MANAGER-ERROR-INVALID-ARGUMENTS:CAPS"/>
23202324 <keyword type="constant" name="NM_SECRET_AGENT_ERROR_FAILED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-FAILED:CAPS"/>
23212325 <keyword type="constant" name="NM_SECRET_AGENT_ERROR_PERMISSION_DENIED" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-PERMISSION-DENIED:CAPS"/>
23222326 <keyword type="constant" name="NM_SECRET_AGENT_ERROR_INVALID_CONNECTION" link="libnm-nm-errors.html#NM-SECRET-AGENT-ERROR-INVALID-CONNECTION:CAPS"/>
8484 <span class="lineart">├──</span> <a class="link" href="NMClient.html" title="NMClient">NMClient</a>
8585 <span class="lineart">├──</span> <a class="link" href="NMSecretAgentOld.html" title="NMSecretAgentOld">NMSecretAgentOld</a>
8686 <span class="lineart">╰──</span> <a class="link" href="NMSimpleConnection.html" title="NMSimpleConnection">NMSimpleConnection</a>
87 GInterface
87 <a href="/usr/share/gtk-doc/html/gobject/GTypeModule.html">GInterface</a>
8888 <span class="lineart">├──</span> <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
8989 <span class="lineart">├──</span> <a class="link" href="NMVpnEditorPlugin.html#NMVpnEditor">NMVpnEditor</a>
9090 <span class="lineart">╰──</span> <a class="link" href="NMVpnEditorPlugin.html" title="NMVpnEditorPlugin">NMVpnEditorPlugin</a>
91 GFlags
91 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GFlags</a>
9292 <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApFlags" title="enum NM80211ApFlags">NM80211ApFlags</a>
9393 <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NM80211ApSecurityFlags" title="enum NM80211ApSecurityFlags">NM80211ApSecurityFlags</a>
9494 <span class="lineart">├──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMBluetoothCapabilities" title="enum NMBluetoothCapabilities">NMBluetoothCapabilities</a>
103103 <span class="lineart">├──</span> <a class="link" href="NMSettingWired.html#NMSettingWiredWakeOnLan" title="enum NMSettingWiredWakeOnLan">NMSettingWiredWakeOnLan</a>
104104 <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags">NMVlanFlags</a>
105105 <span class="lineart">╰──</span> <a class="link" href="NMVpnEditorPlugin.html#NMVpnEditorPluginCapability" title="enum NMVpnEditorPluginCapability">NMVpnEditorPluginCapability</a>
106 GEnum
106 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
107107 <span class="lineart">├──</span> <a class="link" href="libnm-nm-errors.html#NMAgentManagerError" title="enum NMAgentManagerError">NMAgentManagerError</a>
108108 <span class="lineart">├──</span> <a class="link" href="libnm-nm-errors.html#NMConnectionError" title="enum NMConnectionError">NMConnectionError</a>
109109 <span class="lineart">├──</span> <a class="link" href="libnm-nm-errors.html#NMDeviceError" title="enum NMDeviceError">NMDeviceError</a>
145145 <span class="lineart">├──</span> <a class="link" href="libnm-nm-vpn-dbus-interface.html#NMVpnServiceState" title="enum NMVpnServiceState">NMVpnServiceState</a>
146146 <span class="lineart">├──</span> <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a>
147147 <span class="lineart">╰──</span> <a class="link" href="libnm-nm-dbus-interface.html#NMWimaxNspNetworkType" title="enum NMWimaxNspNetworkType">NMWimaxNspNetworkType</a>
148 GBoxed
148 <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
149149 <span class="lineart">├──</span> <a class="link" href="NMSettingIPConfig.html#NMIPAddress">NMIPAddress</a>
150150 <span class="lineart">├──</span> <a class="link" href="NMSettingIPConfig.html#NMIPRoute">NMIPRoute</a>
151151 <span class="lineart">╰──</span> <a class="link" href="NMDevice.html#NMLldpNeighbor">NMLldpNeighbor</a>
18031803 NM_SETTING_IP_CONFIG_DNS
18041804 NM_SETTING_IP_CONFIG_DNS_SEARCH
18051805 NM_SETTING_IP_CONFIG_DNS_OPTIONS
1806 NM_SETTING_IP_CONFIG_DNS_PRIORITY
18061807 NM_SETTING_IP_CONFIG_ADDRESSES
18071808 NM_SETTING_IP_CONFIG_GATEWAY
18081809 NM_SETTING_IP_CONFIG_ROUTES
18521853 nm_setting_ip_config_remove_dns_option
18531854 nm_setting_ip_config_remove_dns_option_by_value
18541855 nm_setting_ip_config_clear_dns_options
1856 nm_setting_ip_config_get_dns_priority
18551857 nm_setting_ip_config_get_num_addresses
18561858 nm_setting_ip_config_get_address
18571859 nm_setting_ip_config_add_address
26632665 NM_DEPRECATED_IN_1_2
26642666 NM_DEPRECATED_IN_1_2_FOR
26652667 NM_AVAILABLE_IN_1_2
2666 NM_DEPRECATED_IN_1_4
2667 NM_DEPRECATED_IN_1_4_FOR
2668 NM_AVAILABLE_IN_1_4
2668 NM_AVAILABLE_IN_1_2_4
26692669 </SECTION>
26702670
26712671 <SECTION>
270270 NM = @NM@
271271 NMEDIT = @NMEDIT@
272272 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
273 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
273274 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
274275 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
275276 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
20922092 <td class="enum_member_annotations"> </td>
20932093 </tr>
20942094 <tr>
2095 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS"></a>NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS</p></td>
2096 <td class="enum_member_description">
2097 <p>modify persistent global
2098 DNS configuration</p>
2099 </td>
2100 <td class="enum_member_annotations"> </td>
2101 </tr>
2102 <tr>
2103 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-RELOAD:CAPS"></a>NM_CLIENT_PERMISSION_RELOAD</p></td>
2104 <td class="enum_member_description">
2105 <p>controls access to Reload.
2106 persistent hostname can be changed</p>
2107 </td>
2108 <td class="enum_member_annotations"> </td>
2109 </tr>
2110 <tr>
20952111 <td class="enum_member_name"><p><a name="NM-CLIENT-PERMISSION-LAST:CAPS"></a>NM_CLIENT_PERMISSION_LAST</p></td>
20962112 <td class="enum_member_description">
20972113 <p>a reserved boundary value</p>
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm-glib Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for libnm-glib 1.2.2
17 for libnm-glib 1.2.4
1818
1919 The latest version of this documentation can be found on-line at
2020 <a class="ulink" href="https://developer.gnome.org/libnm-glib/stable/" target="_top">https://developer.gnome.org/libnm-glib/stable/</a>.
7575 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS">
7676 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS">
7777 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS">
78 <ANCHOR id="NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS">
79 <ANCHOR id="NM-CLIENT-PERMISSION-RELOAD:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RELOAD:CAPS">
7880 <ANCHOR id="NM-CLIENT-PERMISSION-LAST:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS">
7981 <ANCHOR id="NMClientPermissionResult" href="libnm-glib/NMClient.html#NMClientPermissionResult">
8082 <ANCHOR id="NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS" href="libnm-glib/NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS">
714714 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-SYSTEM:CAPS"/>
715715 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-OWN:CAPS"/>
716716 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-HOSTNAME:CAPS"/>
717 <keyword type="constant" name="NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS" link="NMClient.html#NM-CLIENT-PERMISSION-SETTINGS-MODIFY-GLOBAL-DNS:CAPS"/>
718 <keyword type="constant" name="NM_CLIENT_PERMISSION_RELOAD" link="NMClient.html#NM-CLIENT-PERMISSION-RELOAD:CAPS"/>
717719 <keyword type="constant" name="NM_CLIENT_PERMISSION_LAST" link="NMClient.html#NM-CLIENT-PERMISSION-LAST:CAPS"/>
718720 <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_UNKNOWN" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-UNKNOWN:CAPS"/>
719721 <keyword type="constant" name="NM_CLIENT_PERMISSION_RESULT_YES" link="NMClient.html#NM-CLIENT-PERMISSION-RESULT-YES:CAPS"/>
270270 NM = @NM@
271271 NMEDIT = @NMEDIT@
272272 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
273 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
273274 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
274275 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
275276 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
597597 </div>
598598 <div class="refsect1">
599599 <a name="NMConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
600 <pre class="screen"> GEnum
600 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
601601 <span class="lineart">╰──</span> NMConnectionError
602602 GObject
603603 <span class="lineart">╰──</span> NMConnection
270270 </div>
271271 <div class="refsect1">
272272 <a name="NMSetting.object-hierarchy"></a><h2>Object Hierarchy</h2>
273 <pre class="screen"> GEnum
273 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
274274 <span class="lineart">├──</span> NMSettingCompareFlags
275275 <span class="lineart">├──</span> NMSettingDiffResult
276276 <span class="lineart">├──</span> NMSettingError
922922 </div>
923923 <div class="refsect1">
924924 <a name="NMSetting8021x.object-hierarchy"></a><h2>Object Hierarchy</h2>
925 <pre class="screen"> GEnum
925 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
926926 <span class="lineart">├──</span> NMSetting8021xCKFormat
927927 <span class="lineart">├──</span> NMSetting8021xCKScheme
928928 <span class="lineart">╰──</span> NMSetting8021xError
235235 </div>
236236 <div class="refsect1">
237237 <a name="NMSettingAdsl.object-hierarchy"></a><h2>Object Hierarchy</h2>
238 <pre class="screen"> GEnum
238 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
239239 <span class="lineart">╰──</span> NMSettingAdslError
240240 GObject
241241 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
138138 </div>
139139 <div class="refsect1">
140140 <a name="NMSettingBluetooth.object-hierarchy"></a><h2>Object Hierarchy</h2>
141 <pre class="screen"> GEnum
141 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
142142 <span class="lineart">╰──</span> NMSettingBluetoothError
143143 GObject
144144 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
243243 </div>
244244 <div class="refsect1">
245245 <a name="NMSettingBond.object-hierarchy"></a><h2>Object Hierarchy</h2>
246 <pre class="screen"> GEnum
246 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
247247 <span class="lineart">╰──</span> NMSettingBondError
248248 GObject
249249 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
232232 </div>
233233 <div class="refsect1">
234234 <a name="NMSettingBridge.object-hierarchy"></a><h2>Object Hierarchy</h2>
235 <pre class="screen"> GEnum
235 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
236236 <span class="lineart">╰──</span> NMSettingBridgeError
237237 GObject
238238 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
147147 </div>
148148 <div class="refsect1">
149149 <a name="NMSettingBridgePort.object-hierarchy"></a><h2>Object Hierarchy</h2>
150 <pre class="screen"> GEnum
150 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
151151 <span class="lineart">╰──</span> NMSettingBridgePortError
152152 GObject
153153 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
164164 </div>
165165 <div class="refsect1">
166166 <a name="NMSettingCdma.object-hierarchy"></a><h2>Object Hierarchy</h2>
167 <pre class="screen"> GEnum
167 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
168168 <span class="lineart">╰──</span> NMSettingCdmaError
169169 GObject
170170 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
402402 </div>
403403 <div class="refsect1">
404404 <a name="NMSettingConnection.object-hierarchy"></a><h2>Object Hierarchy</h2>
405 <pre class="screen"> GEnum
405 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
406406 <span class="lineart">╰──</span> NMSettingConnectionError
407407 GObject
408408 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
417417 </div>
418418 <div class="refsect1">
419419 <a name="NMSettingDcb.object-hierarchy"></a><h2>Object Hierarchy</h2>
420 <pre class="screen"> GEnum
420 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
421421 <span class="lineart">├──</span> NMSettingDcbError
422422 <span class="lineart">╰──</span> NMSettingDcbFlags
423423 GObject
8383 </div>
8484 <div class="refsect1">
8585 <a name="NMSettingGeneric.object-hierarchy"></a><h2>Object Hierarchy</h2>
86 <pre class="screen"> GEnum
86 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
8787 <span class="lineart">╰──</span> NMSettingGenericError
8888 GObject
8989 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
295295 </div>
296296 <div class="refsect1">
297297 <a name="NMSettingGsm.object-hierarchy"></a><h2>Object Hierarchy</h2>
298 <pre class="screen"> GEnum
298 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
299299 <span class="lineart">├──</span> NMSettingGsmError
300300 <span class="lineart">├──</span> NMSettingGsmNetworkBand
301301 <span class="lineart">╰──</span> NMSettingGsmNetworkType
709709 </div>
710710 <div class="refsect1">
711711 <a name="NMSettingIP4Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
712 <pre class="screen"> GBoxed
712 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
713713 <span class="lineart">├──</span> NMIP4Address
714714 <span class="lineart">╰──</span> NMIP4Route
715 GEnum
715 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
716716 <span class="lineart">╰──</span> NMSettingIP4ConfigError
717717 GObject
718718 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
676676 </div>
677677 <div class="refsect1">
678678 <a name="NMSettingIP6Config.object-hierarchy"></a><h2>Object Hierarchy</h2>
679 <pre class="screen"> GBoxed
679 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
680680 <span class="lineart">├──</span> NMIP6Address
681681 <span class="lineart">╰──</span> NMIP6Route
682 GEnum
682 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
683683 <span class="lineart">├──</span> NMSettingIP6ConfigError
684684 <span class="lineart">╰──</span> NMSettingIP6ConfigPrivacy
685685 GObject
181181 </div>
182182 <div class="refsect1">
183183 <a name="NMSettingInfiniband.object-hierarchy"></a><h2>Object Hierarchy</h2>
184 <pre class="screen"> GEnum
184 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
185185 <span class="lineart">╰──</span> NMSettingInfinibandError
186186 GObject
187187 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
147147 </div>
148148 <div class="refsect1">
149149 <a name="NMSettingOlpcMesh.object-hierarchy"></a><h2>Object Hierarchy</h2>
150 <pre class="screen"> GEnum
150 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
151151 <span class="lineart">╰──</span> NMSettingOlpcMeshError
152152 GObject
153153 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
403403 </div>
404404 <div class="refsect1">
405405 <a name="NMSettingPPP.object-hierarchy"></a><h2>Object Hierarchy</h2>
406 <pre class="screen"> GEnum
406 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
407407 <span class="lineart">╰──</span> NMSettingPPPError
408408 GObject
409409 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
164164 </div>
165165 <div class="refsect1">
166166 <a name="NMSettingPPPOE.object-hierarchy"></a><h2>Object Hierarchy</h2>
167 <pre class="screen"> GEnum
167 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
168168 <span class="lineart">╰──</span> NMSettingPPPOEError
169169 GObject
170170 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
182182 </div>
183183 <div class="refsect1">
184184 <a name="NMSettingSerial.object-hierarchy"></a><h2>Object Hierarchy</h2>
185 <pre class="screen"> GEnum
185 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
186186 <span class="lineart">╰──</span> NMSettingSerialError
187187 GObject
188188 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
130130 </div>
131131 <div class="refsect1">
132132 <a name="NMSettingTeam.object-hierarchy"></a><h2>Object Hierarchy</h2>
133 <pre class="screen"> GEnum
133 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
134134 <span class="lineart">╰──</span> NMSettingTeamError
135135 GObject
136136 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
111111 </div>
112112 <div class="refsect1">
113113 <a name="NMSettingTeamPort.object-hierarchy"></a><h2>Object Hierarchy</h2>
114 <pre class="screen"> GEnum
114 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
115115 <span class="lineart">╰──</span> NMSettingTeamPortError
116116 GObject
117117 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
255255 </div>
256256 <div class="refsect1">
257257 <a name="NMSettingVPN.object-hierarchy"></a><h2>Object Hierarchy</h2>
258 <pre class="screen"> GEnum
258 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
259259 <span class="lineart">╰──</span> NMSettingVpnError
260260 GObject
261261 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
260260 </div>
261261 <div class="refsect1">
262262 <a name="NMSettingVlan.object-hierarchy"></a><h2>Object Hierarchy</h2>
263 <pre class="screen"> GEnum
263 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
264264 <span class="lineart">├──</span> NMSettingVlanError
265265 <span class="lineart">├──</span> NMVlanFlags
266266 <span class="lineart">╰──</span> NMVlanPriorityMap
130130 </div>
131131 <div class="refsect1">
132132 <a name="NMSettingWimax.object-hierarchy"></a><h2>Object Hierarchy</h2>
133 <pre class="screen"> GEnum
133 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
134134 <span class="lineart">╰──</span> NMSettingWimaxError
135135 GObject
136136 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
368368 </div>
369369 <div class="refsect1">
370370 <a name="NMSettingWired.object-hierarchy"></a><h2>Object Hierarchy</h2>
371 <pre class="screen"> GEnum
371 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
372372 <span class="lineart">╰──</span> NMSettingWiredError
373373 GObject
374374 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
434434 </div>
435435 <div class="refsect1">
436436 <a name="NMSettingWireless.object-hierarchy"></a><h2>Object Hierarchy</h2>
437 <pre class="screen"> GEnum
437 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
438438 <span class="lineart">╰──</span> NMSettingWirelessError
439439 GObject
440440 <span class="lineart">╰──</span> <a class="link" href="NMSetting.html" title="NMSetting">NMSetting</a>
497497 </div>
498498 <div class="refsect1">
499499 <a name="NMSettingWirelessSecurity.object-hierarchy"></a><h2>Object Hierarchy</h2>
500 <pre class="screen"> GEnum
500 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
501501 <span class="lineart">├──</span> NMSettingWirelessSecurityError
502502 <span class="lineart">╰──</span> NMWepKeyType
503503 GObject
1414 <div>
1515 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libnm-util Reference Manual</p></th></tr></table></div>
1616 <div><p class="releaseinfo">
17 for libnm-util 1.2.2
17 for libnm-util 1.2.4
1818
1919 The latest version of this documentation can be found on-line at
2020 <a class="ulink" href="https://developer.gnome.org/libnm-util/stable/" target="_top">https://developer.gnome.org/libnm-util/stable/</a>.
479479 </div>
480480 <div class="refsect1">
481481 <a name="libnm-util-nm-utils.object-hierarchy"></a><h2>Object Hierarchy</h2>
482 <pre class="screen"> GEnum
482 <pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
483483 <span class="lineart">╰──</span> NMUtilsSecurityType
484484 </pre>
485485 </div>
5151 <span class="lineart">│</span> <span class="lineart">├──</span> <a class="link" href="NMSettingWirelessSecurity.html" title="NMSettingWirelessSecurity">NMSettingWirelessSecurity</a>
5252 <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="NMSettingVPN.html" title="NMSettingVPN">NMSettingVPN</a>
5353 <span class="lineart">╰──</span> <a class="link" href="NMConnection.html" title="NMConnection">NMConnection</a>
54 GEnum
54 <a href="/usr/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html">GEnum</a>
5555 <span class="lineart">├──</span> <a class="link" href="NMConnection.html#NMConnectionError" title="enum NMConnectionError">NMConnectionError</a>
5656 <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xCKFormat" title="enum NMSetting8021xCKFormat">NMSetting8021xCKFormat</a>
5757 <span class="lineart">├──</span> <a class="link" href="NMSetting8021x.html#NMSetting8021xCKScheme" title="enum NMSetting8021xCKScheme">NMSetting8021xCKScheme</a>
9494 <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMVlanFlags" title="enum NMVlanFlags">NMVlanFlags</a>
9595 <span class="lineart">├──</span> <a class="link" href="NMSettingVlan.html#NMVlanPriorityMap" title="enum NMVlanPriorityMap">NMVlanPriorityMap</a>
9696 <span class="lineart">╰──</span> <a class="link" href="NMSettingWirelessSecurity.html#NMWepKeyType" title="enum NMWepKeyType">NMWepKeyType</a>
97 GBoxed
97 <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html">GBoxed</a>
9898 <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html#NMIP4Address">NMIP4Address</a>
9999 <span class="lineart">├──</span> <a class="link" href="NMSettingIP4Config.html#NMIP4Route">NMIP4Route</a>
100100 <span class="lineart">├──</span> <a class="link" href="NMSettingIP6Config.html#NMIP6Address">NMIP6Address</a>
324324 NM = @NM@
325325 NMEDIT = @NMEDIT@
326326 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
327 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
327328 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
328329 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
329330 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
362362 NM = @NM@
363363 NMEDIT = @NMEDIT@
364364 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
365 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
365366 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
366367 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
367368 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
334334 NM = @NM@
335335 NMEDIT = @NMEDIT@
336336 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
337 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
337338 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
338339 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
339340 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
329329 NM = @NM@
330330 NMEDIT = @NMEDIT@
331331 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
332 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
332333 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
333334 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
334335 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
7676 <property name="DnsOptions" type="as" access="read"/>
7777
7878 <!--
79 DnsPriority:
80
81 The relative priority of DNS servers.
82 -->
83 <property name="DnsPriority" type="i" access="read"/>
84
85 <!--
7986 WinsServers:
8087
8188 The Windows Internet Name Service servers associated with the connection.
7676 <property name="DnsOptions" type="as" access="read"/>
7777
7878 <!--
79 DnsPriority:
80
81 The relative priority of DNS servers.
82 -->
83 <property name="DnsPriority" type="i" access="read"/>
84
85 <!--
7986 PropertiesChanged:
8087 @properties: A dictionary mapping property names to variant boxed values
8188 -->
11 <node name="/org/freedesktop/NetworkManager">
22 <interface name="org.freedesktop.NetworkManager">
33 <annotation name="org.gtk.GDBus.C.Name" value="Manager"/>
4
5 <!--
6 Reload:
7 @flags: optional flags to specify which parts shall be reloaded.
8
9 Reload NetworkManager's configuration and perform certain updates, like flushing a cache or
10 rewriting external state to disk. This is similar to sending SIGHUP to NetworkManager but it
11 allows for more fine-grained control over what to reload (see @flags). It also allows
12 non-root access via PolicyKit and contrary to signals it is synchronous.
13
14 No flags (0x00) means to reload everything that is supported which is identical to
15 sending a SIGHUP.
16 (0x01) means to reload the NetworkManager.conf configuration from disk. Note that this
17 does not include connections, which can be reloaded via Setting's ReloadConnections.
18 (0x02) means to update DNS configuration, which usually involves writing /etc/resolv.conf
19 anew.
20 (0x04) means to restart the DNS plugin. This is for example useful when using
21 dnsmasq plugin, which uses additional configuration in /etc/NetworkManager/dnsmasq.d.
22 If you edit those files, you can restart the DNS plugin. This action shortly interrupts
23 rename resolution.
24 Note that flags may affect each other. For example, restarting the DNS plugin (0x04)
25 implicitly updates DNS too (0x02). Or when reloading the configuration (0x01), changes
26 to DNS setting also cause a DNS update (0x02). However, (0x01) does not involve restarting
27 the DNS plugin (0x02), unless an entirely different plugin is selected.
28 -->
29 <method name="Reload">
30 <arg name="flags" type="u" direction="in"/>
31 </method>
432
533 <!--
634 GetDevices:
2222 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP4Config.Domains">Domains</link> readable as
2323 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP4Config.Searches">Searches</link> readable as
2424 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsOptions">DnsOptions</link> readable as
25 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority">DnsPriority</link> readable i
2526 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers">WinsServers</link> readable au
2627 </synopsis>
2728 </refsect1>
140141 resolv.conf(5) manual page for the list of supported options.
141142 </para>
142143 </refsect2>
144 <refsect2 role="property" id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority">
145 <title>The "DnsPriority" property</title>
146 <indexterm zone="gdbus-property-org-freedesktop-NetworkManager-IP4Config.DnsPriority"><primary sortas=".IP4Config:DnsPriority">org.freedesktop.NetworkManager.IP4Config:DnsPriority</primary></indexterm>
147 <programlisting>
148 DnsPriority readable i
149 </programlisting>
150 <para> The relative priority of DNS servers.
151 </para>
152 </refsect2>
143153 <refsect2 role="property" id="gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers">
144154 <title>The "WinsServers" property</title>
145155 <indexterm zone="gdbus-property-org-freedesktop-NetworkManager-IP4Config.WinsServers"><primary sortas=".IP4Config:WinsServers">org.freedesktop.NetworkManager.IP4Config:WinsServers</primary></indexterm>
2222 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP6Config.Domains">Domains</link> readable as
2323 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP6Config.Searches">Searches</link> readable as
2424 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsOptions">DnsOptions</link> readable as
25 <link linkend="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority">DnsPriority</link> readable i
2526 </synopsis>
2627 </refsect1>
2728 <refsect1 role="desc" id="gdbus-interface-org-freedesktop-NetworkManager-IP6Config">
134135 resolv.conf(5) manual page for the list of supported options.
135136 </para>
136137 </refsect2>
138 <refsect2 role="property" id="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority">
139 <title>The "DnsPriority" property</title>
140 <indexterm zone="gdbus-property-org-freedesktop-NetworkManager-IP6Config.DnsPriority"><primary sortas=".IP6Config:DnsPriority">org.freedesktop.NetworkManager.IP6Config:DnsPriority</primary></indexterm>
141 <programlisting>
142 DnsPriority readable i
143 </programlisting>
144 <para> The relative priority of DNS servers.
145 </para>
146 </refsect2>
137147 </refsect1>
138148 </refentry>
139149
77 </refmeta> <refnamediv> <refname>org.freedesktop.NetworkManager</refname> <refpurpose></refpurpose> </refnamediv> <refsynopsisdiv role="synopsis">
88 <title role="synopsis.title">Methods</title>
99 <synopsis>
10 <link linkend="gdbus-method-org-freedesktop-NetworkManager.Reload">Reload</link> (IN u flags);
1011 <link linkend="gdbus-method-org-freedesktop-NetworkManager.GetDevices">GetDevices</link> (OUT ao devices);
1112 <link linkend="gdbus-method-org-freedesktop-NetworkManager.GetAllDevices">GetAllDevices</link> (OUT ao devices);
1213 <link linkend="gdbus-method-org-freedesktop-NetworkManager.GetDeviceByIpIface">GetDeviceByIpIface</link> (IN s iface,
7273 </refsect1>
7374 <refsect1 role="details" id="gdbus-methods-org.freedesktop.NetworkManager">
7475 <title role="details.title">Method Details</title>
76 <refsect2 role="method" id="gdbus-method-org-freedesktop-NetworkManager.Reload">
77 <title>The Reload() method</title>
78 <indexterm zone="gdbus-method-org-freedesktop-NetworkManager.Reload"><primary sortas="Manager.Reload">org.freedesktop.NetworkManager.Reload()</primary></indexterm>
79 <programlisting>
80 Reload (IN u flags);
81 </programlisting>
82 <para> Reload NetworkManager's configuration and perform certain updates, like flushing a cache or
83 rewriting external state to disk. This is similar to sending SIGHUP to NetworkManager but it
84 allows for more fine-grained control over what to reload (see <parameter>flags</parameter>). It also allows
85 non-root access via PolicyKit and contrary to signals it is synchronous.
86 </para><para> No flags (0x00) means to reload everything that is supported which is identical to
87 sending a SIGHUP.
88 (0x01) means to reload the NetworkManager.conf configuration from disk. Note that this
89 does not include connections, which can be reloaded via Setting's ReloadConnections.
90 (0x02) means to update DNS configuration, which usually involves writing /etc/resolv.conf
91 anew.
92 (0x04) means to restart the DNS plugin. This is for example useful when using
93 dnsmasq plugin, which uses additional configuration in /etc/NetworkManager/dnsmasq.d.
94 If you edit those files, you can restart the DNS plugin. This action shortly interrupts
95 rename resolution.
96 Note that flags may affect each other. For example, restarting the DNS plugin (0x04)
97 implicitly updates DNS too (0x02). Or when reloading the configuration (0x01), changes
98 to DNS setting also cause a DNS update (0x02). However, (0x01) does not involve restarting
99 the DNS plugin (0x02), unless an entirely different plugin is selected.
100 </para>
101 <variablelist role="params">
102 <varlistentry>
103 <term><literal>IN u <parameter>flags</parameter></literal>:</term>
104 <listitem><para>optional flags to specify which parts shall be reloaded.</para></listitem>
105 </varlistentry>
106 </variablelist>
107 </refsect2>
75108 <refsect2 role="method" id="gdbus-method-org-freedesktop-NetworkManager.GetDevices">
76109 <title>The GetDevices() method</title>
77110 <indexterm zone="gdbus-method-org-freedesktop-NetworkManager.GetDevices"><primary sortas="Manager.GetDevices">org.freedesktop.NetworkManager.GetDevices()</primary></indexterm>
136136 libnm_la_LIBADD = \
137137 $(top_builddir)/libnm-core/libnm-core.la \
138138 $(top_builddir)/introspection/libnmdbus.la \
139 $(LIBDL) \
139140 $(GLIB_LIBS) \
140141 $(UUID_LIBS) \
141142 $(GUDEV_LIBS)
155155 libnm_la_DEPENDENCIES = $(top_builddir)/libnm-core/libnm-core.la \
156156 $(top_builddir)/introspection/libnmdbus.la \
157157 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
158 $(am__DEPENDENCIES_1)
158 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
159159 am__objects_1 = nm-access-point.lo nm-active-connection.lo \
160160 nm-client.lo nm-dbus-helpers.lo nm-device-adsl.lo \
161161 nm-device-bond.lo nm-device-bridge.lo nm-device-bt.lo \
422422 NM = @NM@
423423 NMEDIT = @NMEDIT@
424424 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
425 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
425426 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
426427 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
427428 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
789790 libnm_la_LIBADD = \
790791 $(top_builddir)/libnm-core/libnm-core.la \
791792 $(top_builddir)/introspection/libnmdbus.la \
793 $(LIBDL) \
792794 $(GLIB_LIBS) \
793795 $(UUID_LIBS) \
794796 $(GUDEV_LIBS)
10571057 nm_vpn_service_plugin_set_ip6_config;
10581058 nm_vpn_service_plugin_set_login_banner;
10591059 } libnm_1_0_0;
1060
1061 libnm_1_2_4 {
1062 nm_setting_ip_config_get_dns_priority;
1063 } libnm_1_2_0;
9191 * owned by the current user can be modified
9292 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
9393 * persistent hostname can be changed
94 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
95 * DNS configuration
96 * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
9497 * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
9598 *
9699 * #NMClientPermission values indicate various permissions that NetworkManager
109112 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
110113 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
111114 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
112
113 NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
115 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12,
116 NM_CLIENT_PERMISSION_RELOAD = 13,
117
118 NM_CLIENT_PERMISSION_LAST = 13,
114119 } NMClientPermission;
115120
116121 /**
17211721 char *pdown;
17221722 char *vdown;
17231723 GString *str;
1724 GParamSpec *name_prop;
17241725
17251726 dev_product = nm_device_get_product (device);
17261727 priv->short_product = fixup_desc_string (dev_product);
17271728
17281729 dev_vendor = nm_device_get_vendor (device);
17291730 priv->short_vendor = fixup_desc_string (dev_vendor);
1731
1732 /* Grab device's preferred name, if any */
1733 name_prop = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (device)), "name");
1734 if (name_prop) {
1735 g_object_get (device, "name", &priv->description, NULL);
1736 if (priv->description && priv->description[0])
1737 return;
1738 g_clear_pointer (&priv->description, g_free);
1739 }
17301740
17311741 if (!dev_product || !dev_vendor) {
17321742 priv->description = g_strdup (nm_device_get_iface (device));
6262 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM", "settings-modify-system" },
6363 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN", "settings-modify-own" },
6464 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME", "settings-modify-hostname" },
65 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS", "settings-modify-global-dns" },
66 { NM_CLIENT_PERMISSION_RELOAD, "NM_CLIENT_PERMISSION_RELOAD", "reload" },
6567 { NM_CLIENT_PERMISSION_LAST, "NM_CLIENT_PERMISSION_LAST", "last" },
6668 { 0, NULL, NULL }
6769 };
2525 #include <string.h>
2626
2727 #include "nm-utils.h"
28 #include "nm-common-macros.h"
2829 #include "nm-device-ethernet.h"
2930 #include "nm-device-wifi.h"
3031 #include "nm-device-private.h"
200201 g_signal_connect (priv->manager_proxy, "check-permissions",
201202 G_CALLBACK (manager_recheck_permissions), object);
202203 }
203
204 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
205 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
206 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
207 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
208 #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
209 #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
210 #define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
211 #define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
212 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
213 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
214 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
215204
216205 static NMClientPermission
217206 nm_permission_to_client (const char *nm)
238227 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
239228 else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
240229 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
230 else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS))
231 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
232 else if (!strcmp (nm, NM_AUTH_PERMISSION_RELOAD))
233 return NM_CLIENT_PERMISSION_RELOAD;
241234
242235 return NM_CLIENT_PERMISSION_NONE;
243236 }
156156 <property name="dhcp-timeout" type="int32" default="0" description="A timeout for a DHCP transaction in seconds." />
157157 <property name="dns" type="array of uint32" default="[]" description="Array of IP addresses of DNS servers." />
158158 <property name="dns-options" type="array of string" default="[]" description="Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." />
159 <property name="dns-priority" type="int32" default="0" description="DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." />
159160 <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
160161 <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
161162 <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
176177 <property name="dhcp-timeout" type="int32" default="0" description="A timeout for a DHCP transaction in seconds." />
177178 <property name="dns" type="array of byte array" default="[]" description="Array of IP addresses of DNS servers." />
178179 <property name="dns-options" type="array of string" default="[]" description="Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." />
180 <property name="dns-priority" type="int32" default="0" description="DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." />
179181 <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
180182 <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
181183 <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
159159 <property name="dhcp-timeout" type="int32" default="0" description="A timeout for a DHCP transaction in seconds." />
160160 <property name="dns" type="array of uint32" default="[]" description="Array of IP addresses of DNS servers (as network-byte-order integers)" />
161161 <property name="dns-options" type="array of string" default="[]" description="Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." />
162 <property name="dns-priority" type="int32" default="0" description="DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." />
162163 <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
163164 <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
164165 <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
181182 <property name="dhcp-timeout" type="int32" default="0" description="A timeout for a DHCP transaction in seconds." />
182183 <property name="dns" type="array of byte array" default="[]" description="Array of IP addresses of DNS servers (in network byte order)" />
183184 <property name="dns-options" type="array of string" default="[]" description="Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties." />
185 <property name="dns-priority" type="int32" default="0" description="DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used." />
184186 <property name="dns-search" type="array of string" default="[]" description="Array of DNS search domains." />
185187 <property name="gateway" type="string" description="The gateway associated with this configuration. This is only meaningful if &quot;addresses&quot; is also set." />
186188 <property name="ignore-auto-dns" type="boolean" default="FALSE" description="When &quot;method&quot; is set to &quot;auto&quot; and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the &quot;dns&quot; and &quot;dns-search&quot; properties, if any, are used." />
562562 NM = @NM@
563563 NMEDIT = @NMEDIT@
564564 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
565 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
565566 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
566567 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
567568 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
457457 NM = @NM@
458458 NMEDIT = @NMEDIT@
459459 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
460 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
460461 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
461462 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
462463 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
723723 const char *default_ip6_method = NULL;
724724 NMSettingIPConfig *s_ip4, *s_ip6;
725725 NMSetting *setting;
726 gboolean changed = FALSE;
726727
727728 if (parameters)
728729 default_ip6_method = g_hash_table_lookup (parameters, NM_CONNECTION_NORMALIZE_PARAM_IP6_CONFIG_METHOD);
755756 NM_SETTING_IP_CONFIG_METHOD, default_ip4_method,
756757 NULL);
757758 nm_connection_add_setting (self, setting);
759 } else {
760 if ( nm_setting_ip_config_get_gateway (s_ip4)
761 && nm_setting_ip_config_get_never_default (s_ip4)) {
762 g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, NULL, NULL);
763 changed = TRUE;
764 }
765
766 if ( nm_streq0 (nm_setting_ip_config_get_method (s_ip4),
767 NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
768 && !nm_setting_ip_config_get_may_fail (s_ip4)) {
769 g_object_set (s_ip4, NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE, NULL);
770 changed = TRUE;
771 }
758772 }
759773 if (!s_ip6) {
760774 setting = nm_setting_ip6_config_new ();
764778 NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
765779 NULL);
766780 nm_connection_add_setting (self, setting);
781 } else {
782 if ( nm_setting_ip_config_get_gateway (s_ip6)
783 && nm_setting_ip_config_get_never_default (s_ip6)) {
784 g_object_set (s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, NULL, NULL);
785 changed = TRUE;
786 }
787
788 if ( nm_streq0 (nm_setting_ip_config_get_method (s_ip6),
789 NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
790 && !nm_setting_ip_config_get_may_fail (s_ip6)) {
791 g_object_set (s_ip6, NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE, NULL);
792 changed = TRUE;
793 }
767794 }
768 return !s_ip4 || !s_ip6;
795 return !s_ip4 || !s_ip6 || changed;
769796 }
770797 }
771798
677677 { NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, "NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED", "AlreadyEnabledOrDisabled" },
678678 { NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, "NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL", "UnknownLogLevel" },
679679 { NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, "NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN", "UnknownLogDomain" },
680 { NM_MANAGER_ERROR_INVALID_ARGUMENTS, "NM_MANAGER_ERROR_INVALID_ARGUMENTS", "InvalidArguments" },
680681 { 0, NULL, NULL }
681682 };
682683 GType g_define_type_id =
184184 * enabled/disabled.
185185 * @NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL: Unknown log level in SetLogging
186186 * @NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN: Unknown log domain in SetLogging
187 * @NM_MANAGER_ERROR_INVALID_ARGUMENTS: Invalid arguments for D-Bus request
187188 *
188189 * Errors related to the main "network management" interface of NetworkManager.
189190 * These may be returned from #NMClient methods that invoke D-Bus operations on
203204 NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*< nick=AlreadyEnabledOrDisabled >*/
204205 NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, /*< nick=UnknownLogLevel >*/
205206 NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, /*< nick=UnknownLogDomain >*/
207 NM_MANAGER_ERROR_INVALID_ARGUMENTS, /*< nick=InvalidArguments >*/
206208 } NMManagerError;
207209
208210 GQuark nm_manager_error_quark (void);
11191119 GPtrArray *dns; /* array of IP address strings */
11201120 GPtrArray *dns_search; /* array of domain name strings */
11211121 GPtrArray *dns_options;/* array of DNS options */
1122 gint dns_priority;
11221123 GPtrArray *addresses; /* array of NMIPAddress */
11231124 GPtrArray *routes; /* array of NMIPRoute */
11241125 gint64 route_metric;
11391140 PROP_DNS,
11401141 PROP_DNS_SEARCH,
11411142 PROP_DNS_OPTIONS,
1143 PROP_DNS_PRIORITY,
11421144 PROP_ADDRESSES,
11431145 PROP_GATEWAY,
11441146 PROP_ROUTES,
16801682 }
16811683 }
16821684 g_object_notify (G_OBJECT (setting), NM_SETTING_IP_CONFIG_DNS_OPTIONS);
1685 }
1686
1687 /**
1688 * nm_setting_ip_config_get_dns_priority:
1689 * @setting: the #NMSettingIPConfig
1690 *
1691 * Returns: the priority of DNS servers
1692 *
1693 * Since: 1.2.4
1694 **/
1695 gint
1696 nm_setting_ip_config_get_dns_priority (NMSettingIPConfig *setting)
1697 {
1698 g_return_val_if_fail (NM_IS_SETTING_IP_CONFIG (setting), 0);
1699
1700 return NM_SETTING_IP_CONFIG_GET_PRIVATE (setting)->dns_priority;
16831701 }
16841702
16851703 /**
22732291 }
22742292 }
22752293
2294 if (priv->gateway && priv->never_default) {
2295 g_set_error (error,
2296 NM_CONNECTION_ERROR,
2297 NM_CONNECTION_ERROR_INVALID_PROPERTY,
2298 _("a gateway is incompatible with '%s'"),
2299 NM_SETTING_IP_CONFIG_NEVER_DEFAULT);
2300 g_prefix_error (error, "%s.%s: ", nm_setting_get_name (setting), NM_SETTING_IP_CONFIG_GATEWAY);
2301 return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
2302 }
2303
22762304 return TRUE;
22772305 }
22782306
23512379 }
23522380 }
23532381 break;
2382 case PROP_DNS_PRIORITY:
2383 priv->dns_priority = g_value_get_int (value);
2384 break;
23542385 case PROP_ADDRESSES:
23552386 g_ptr_array_unref (priv->addresses);
23562387 priv->addresses = _nm_utils_copy_array (g_value_get_boxed (value),
24222453 break;
24232454 case PROP_DNS_OPTIONS:
24242455 g_value_take_boxed (value, priv->dns_options ? _nm_utils_ptrarray_to_strv (priv->dns_options) : NULL);
2456 break;
2457 case PROP_DNS_PRIORITY:
2458 g_value_set_int (value, priv->dns_priority);
24252459 break;
24262460 case PROP_ADDRESSES:
24272461 g_value_take_boxed (value, _nm_utils_copy_array (priv->addresses,
25732607 G_TYPE_STRV,
25742608 G_PARAM_READWRITE |
25752609 G_PARAM_STATIC_STRINGS));
2610
2611 /**
2612 * NMSettingIPConfig:dns-priority:
2613 *
2614 * DNS priority.
2615 *
2616 * The relative priority to be used when determining the order of DNS
2617 * servers in resolv.conf. A lower value means that servers will be on top
2618 * of the file. Zero selects the default value, which is 50 for VPNs and
2619 * 100 for other connections. When multiple devices have configurations
2620 * with the same priority, the one with an active default route will be
2621 * preferred. Note that when using dns=dnsmasq the order is meaningless
2622 * since dnsmasq forwards queries to all known servers at the same time.
2623 *
2624 * Negative values have the special effect of excluding other configurations
2625 * with a greater priority value; so in presence of at least a negative
2626 * priority, only DNS servers from configurations with the lowest priority
2627 * value will be used.
2628 *
2629 * Since: 1.2.4
2630 **/
2631 g_object_class_install_property
2632 (object_class, PROP_DNS_PRIORITY,
2633 g_param_spec_int (NM_SETTING_IP_CONFIG_DNS_PRIORITY, "", "",
2634 G_MININT32, G_MAXINT32, 0,
2635 G_PARAM_READWRITE |
2636 G_PARAM_CONSTRUCT |
2637 G_PARAM_STATIC_STRINGS));
25762638
25772639 /**
25782640 * NMSettingIPConfig:addresses:
135135 #define NM_SETTING_IP_CONFIG_DNS "dns"
136136 #define NM_SETTING_IP_CONFIG_DNS_SEARCH "dns-search"
137137 #define NM_SETTING_IP_CONFIG_DNS_OPTIONS "dns-options"
138 #define NM_SETTING_IP_CONFIG_DNS_PRIORITY "dns-priority"
138139 #define NM_SETTING_IP_CONFIG_ADDRESSES "addresses"
139140 #define NM_SETTING_IP_CONFIG_GATEWAY "gateway"
140141 #define NM_SETTING_IP_CONFIG_ROUTES "routes"
218219 const char *dns_option);
219220 void nm_setting_ip_config_clear_dns_options (NMSettingIPConfig *setting, gboolean is_set);
220221
222 NM_AVAILABLE_IN_1_2_4
223 gint nm_setting_ip_config_get_dns_priority (NMSettingIPConfig *setting);
224
221225 guint nm_setting_ip_config_get_num_addresses (NMSettingIPConfig *setting);
222226 NMIPAddress *nm_setting_ip_config_get_address (NMSettingIPConfig *setting,
223227 int idx);
224224 return FALSE;
225225 }
226226
227 /* Failures from here on are NORMALIZABLE... */
228
229 if ( !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
230 && !nm_setting_ip_config_get_may_fail (s_ip)) {
231 g_set_error_literal (error,
232 NM_CONNECTION_ERROR,
233 NM_CONNECTION_ERROR_INVALID_PROPERTY,
234 _("property should be TRUE when method is set to disabled"));
235 g_prefix_error (error, "%s.%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_MAY_FAIL);
236 return NM_SETTING_VERIFY_NORMALIZABLE;
237 }
238
227239 return TRUE;
228240 }
229241
200200 return FALSE;
201201 }
202202
203 /* Failures from here on are NORMALIZABLE... */
204
205 if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
206 && !nm_setting_ip_config_get_may_fail (s_ip)) {
207 g_set_error_literal (error,
208 NM_CONNECTION_ERROR,
209 NM_CONNECTION_ERROR_INVALID_PROPERTY,
210 _("property should be TRUE when method is set to ignore"));
211 g_prefix_error (error, "%s.%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP_CONFIG_MAY_FAIL);
212 return NM_SETTING_VERIFY_NORMALIZABLE;
213 }
214
203215 return TRUE;
204216 }
205217
944944 }
945945 }
946946
947 return nm_unauto (&setting);
947 return g_steal_pointer (&setting);
948948 }
949949
950950 /**
23982398 const char *extensions[] = { ".der", ".pem", ".p12", ".key", NULL };
23992399
24002400 g_return_val_if_fail (filename != NULL, FALSE);
2401 g_return_val_if_fail (out_encrypted == NULL || *out_encrypted == FALSE, FALSE);
2402
2401
2402 NM_SET_OUT (out_encrypted, FALSE);
24032403 if (!file_has_extension (filename, extensions))
24042404 return FALSE;
24052405
8989 # define NM_AVAILABLE_IN_1_2
9090 #endif
9191
92 #if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_4
93 # define NM_DEPRECATED_IN_1_4 G_DEPRECATED
94 # define NM_DEPRECATED_IN_1_4_FOR(f) G_DEPRECATED_FOR(f)
92 #if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_2_4
93 # define NM_AVAILABLE_IN_1_2_4 G_UNAVAILABLE(1.2,4)
9594 #else
96 # define NM_DEPRECATED_IN_1_4
97 # define NM_DEPRECATED_IN_1_4_FOR(f)
98 #endif
99
100 #if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_4
101 # define NM_AVAILABLE_IN_1_4 G_UNAVAILABLE(1,4)
102 #else
103 # define NM_AVAILABLE_IN_1_4
95 # define NM_AVAILABLE_IN_1_2_4
10496 #endif
10597
10698 #endif /* NM_VERSION_H */
205205 return NULL;
206206 }
207207
208 return nm_unauto (&editor_plugin);
208 return g_steal_pointer (&editor_plugin);
209209 }
210210
211211 /**
585585 NM = @NM@
586586 NMEDIT = @NMEDIT@
587587 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
588 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
588589 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
589590 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
590591 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
19671967 { NM_SETTING_IP_CONFIG_NEVER_DEFAULT, NM_SETTING_DIFF_RESULT_IN_A },
19681968 { NM_SETTING_IP_CONFIG_MAY_FAIL, NM_SETTING_DIFF_RESULT_IN_A },
19691969 { NM_SETTING_IP_CONFIG_DAD_TIMEOUT, NM_SETTING_DIFF_RESULT_IN_A },
1970 { NM_SETTING_IP_CONFIG_DNS_PRIORITY, NM_SETTING_DIFF_RESULT_IN_A },
19701971 { NULL, NM_SETTING_DIFF_RESULT_UNKNOWN },
19711972 } },
19721973 };
37133714 nmtst_assert_connection_verifies_after_normalization (con, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY);
37143715 nmtst_connection_normalize (con);
37153716 g_assert_cmpint (65520, ==, nm_setting_infiniband_get_mtu (s_infini));
3717 }
3718
3719 static void
3720 test_connection_normalize_gateway_never_default (void)
3721 {
3722 gs_unref_object NMConnection *con = NULL;
3723 NMSettingIPConfig *s_ip4, *s_ip6;
3724 NMIPAddress *addr;
3725 gs_free_error GError *error = NULL;
3726
3727 con = nmtst_create_minimal_connection ("test1", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
3728 nmtst_assert_connection_verifies_and_normalizable (con);
3729
3730 s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
3731 g_object_set (G_OBJECT (s_ip4),
3732 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
3733 NULL);
3734
3735 addr = nm_ip_address_new (AF_INET, "1.1.1.1", 24, &error);
3736 g_assert_no_error (error);
3737 nm_setting_ip_config_add_address (s_ip4, addr);
3738 nm_ip_address_unref (addr);
3739
3740 g_object_set (s_ip4,
3741 NM_SETTING_IP_CONFIG_GATEWAY, "1.1.1.254",
3742 NM_SETTING_IP_CONFIG_NEVER_DEFAULT, FALSE,
3743 NULL);
3744
3745 s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
3746 g_object_set (s_ip6,
3747 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
3748 NULL);
3749
3750 nm_connection_add_setting (con, (NMSetting *) s_ip4);
3751 nm_connection_add_setting (con, (NMSetting *) s_ip6);
3752
3753 nmtst_assert_connection_verifies_without_normalization (con);
3754 g_assert_cmpstr ("1.1.1.254", ==, nm_setting_ip_config_get_gateway (s_ip4));
3755
3756 /* Now set never-default to TRUE and check that the gateway is
3757 * removed during normalization
3758 * */
3759 g_object_set (s_ip4,
3760 NM_SETTING_IP_CONFIG_NEVER_DEFAULT, TRUE,
3761 NULL);
3762
3763 nmtst_assert_connection_verifies_after_normalization (con,
3764 NM_CONNECTION_ERROR,
3765 NM_CONNECTION_ERROR_INVALID_PROPERTY);
3766 nmtst_connection_normalize (con);
3767 g_assert_cmpstr (NULL, ==, nm_setting_ip_config_get_gateway (s_ip4));
3768 }
3769
3770 static void
3771 test_connection_normalize_may_fail (void)
3772 {
3773 gs_unref_object NMConnection *con = NULL;
3774 NMSettingIPConfig *s_ip4, *s_ip6;
3775 gs_free_error GError *error = NULL;
3776
3777 con = nmtst_create_minimal_connection ("test2", NULL, NM_SETTING_WIRED_SETTING_NAME, NULL);
3778 nmtst_assert_connection_verifies_and_normalizable (con);
3779
3780 s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new ();
3781 g_object_set (G_OBJECT (s_ip4),
3782 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
3783 NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
3784 NULL);
3785
3786 s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
3787 g_object_set (s_ip6,
3788 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
3789 NM_SETTING_IP_CONFIG_MAY_FAIL, FALSE,
3790 NULL);
3791
3792 nm_connection_add_setting (con, (NMSetting *) s_ip4);
3793 nm_connection_add_setting (con, (NMSetting *) s_ip6);
3794
3795 nmtst_assert_connection_verifies_without_normalization (con);
3796
3797 /* Now set method=disabled/ignore and check that may-fail becomes TRUE
3798 * after normalization
3799 * */
3800 g_object_set (s_ip4,
3801 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
3802 NULL);
3803 g_object_set (s_ip6,
3804 NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
3805 NULL);
3806
3807 nmtst_assert_connection_verifies (con);
3808 nmtst_connection_normalize (con);
3809 g_assert_cmpint (nm_setting_ip_config_get_may_fail (s_ip4), ==, TRUE);
3810 g_assert_cmpint (nm_setting_ip_config_get_may_fail (s_ip6), ==, TRUE);
37163811 }
37173812
37183813 static void
50095104 g_test_add_func ("/core/general/test_connection_normalize_slave_type_1", test_connection_normalize_slave_type_1);
50105105 g_test_add_func ("/core/general/test_connection_normalize_slave_type_2", test_connection_normalize_slave_type_2);
50115106 g_test_add_func ("/core/general/test_connection_normalize_infiniband_mtu", test_connection_normalize_infiniband_mtu);
5107 g_test_add_func ("/core/general/test_connection_normalize_gateway_never_default", test_connection_normalize_gateway_never_default);
5108 g_test_add_func ("/core/general/test_connection_normalize_may_fail", test_connection_normalize_may_fail);
50125109
50135110 g_test_add_func ("/core/general/test_setting_connection_permissions_helpers", test_setting_connection_permissions_helpers);
50145111 g_test_add_func ("/core/general/test_setting_connection_permissions_property", test_setting_connection_permissions_property);
462462 NM = @NM@
463463 NMEDIT = @NMEDIT@
464464 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
465 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
465466 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
466467 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
467468 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
2626 #include <string.h>
2727
2828 #include "nm-utils.h"
29 #include "nm-common-macros.h"
2930
3031 #include "nm-device-ethernet.h"
3132 #include "nm-device-wifi.h"
206207 priv->client_proxy,
207208 property_info);
208209 }
209
210 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
211 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
212 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
213 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
214 #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
215 #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
216 #define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
217 #define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
218 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
219 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
220 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
221210
222211 static NMClientPermission
223212 nm_permission_to_client (const char *nm)
244233 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
245234 else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
246235 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
236 else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS))
237 return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
238 else if (!strcmp (nm, NM_AUTH_PERMISSION_RELOAD))
239 return NM_CLIENT_PERMISSION_RELOAD;
247240
248241 return NM_CLIENT_PERMISSION_NONE;
249242 }
8383 * owned by the current user can be modified
8484 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
8585 * persistent hostname can be changed
86 * @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
87 * DNS configuration
88 * @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
89 * persistent hostname can be changed
8690 * @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
8791 *
8892 * #NMClientPermission values indicate various permissions that NetworkManager
101105 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
102106 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
103107 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
104
105 NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
108 NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12,
109 NM_CLIENT_PERMISSION_RELOAD = 13,
110
111 NM_CLIENT_PERMISSION_LAST = 13,
106112 } NMClientPermission;
107113
108114 /**
17681768 char *pdown;
17691769 char *vdown;
17701770 GString *str;
1771 GParamSpec *name_prop;
17711772
17721773 dev_product = nm_device_get_product (device);
17731774 priv->short_product = fixup_desc_string (dev_product);
17741775
17751776 dev_vendor = nm_device_get_vendor (device);
17761777 priv->short_vendor = fixup_desc_string (dev_vendor);
1778
1779 /* Grab device's preferred name, if any */
1780 name_prop = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (device)), "name");
1781 if (name_prop) {
1782 g_object_get (device, "name", &priv->description, NULL);
1783 if (priv->description && priv->description[0])
1784 return;
1785 g_clear_pointer (&priv->description, g_free);
1786 }
17771787
17781788 if (!dev_product || !dev_vendor) {
17791789 priv->description = g_strdup (nm_device_get_iface (device));
7474 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM", "settings-modify-system" },
7575 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN", "settings-modify-own" },
7676 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME", "settings-modify-hostname" },
77 { NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS, "NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS", "settings-modify-global-dns" },
78 { NM_CLIENT_PERMISSION_RELOAD, "NM_CLIENT_PERMISSION_RELOAD", "reload" },
7779 { NM_CLIENT_PERMISSION_LAST, "NM_CLIENT_PERMISSION_LAST", "last" },
7880 { 0, NULL, NULL }
7981 };
546546 NM = @NM@
547547 NMEDIT = @NMEDIT@
548548 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
549 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
549550 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
550551 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
551552 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
454454 NM = @NM@
455455 NMEDIT = @NMEDIT@
456456 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
457 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
457458 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
458459 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
459460 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
8989 # define NM_AVAILABLE_IN_1_2
9090 #endif
9191
92 #if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_4
93 # define NM_DEPRECATED_IN_1_4 G_DEPRECATED
94 # define NM_DEPRECATED_IN_1_4_FOR(f) G_DEPRECATED_FOR(f)
95 #else
96 # define NM_DEPRECATED_IN_1_4
97 # define NM_DEPRECATED_IN_1_4_FOR(f)
98 #endif
99
100 #if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_4
101 # define NM_AVAILABLE_IN_1_4 G_UNAVAILABLE(1,4)
102 #else
103 # define NM_AVAILABLE_IN_1_4
104 #endif
105
10692 #endif /* NM_VERSION_H */
580580 NM = @NM@
581581 NMEDIT = @NMEDIT@
582582 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
583 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
583584 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
584585 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
585586 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
313313 NM = @NM@
314314 NMEDIT = @NMEDIT@
315315 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
316 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
316317 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
317318 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
318319 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
11 .\" Title: NetworkManager
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Network management daemons
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.2\&.2" "Network management daemons"
9 .TH "NETWORKMANAGER" "8" "" "NetworkManager 1\&.2\&.4" "Network management daemons"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
273273 .PP
274274 \fISIGHUP\fR
275275 .RS 4
276 The signal causes a reload of NetworkManager\*(Aqs configuration\&. Note that not all configuration parameters can be changed at runtime and therefore some changes may be applied only after the next restart of the daemon\&. The signal also forces a rewrite of DNS configuration\&.
276 The signal causes a reload of NetworkManager\*(Aqs configuration\&. Note that not all configuration parameters can be changed at runtime and therefore some changes may be applied only after the next restart of the daemon\&. A SIGHUP also involves further reloading actions, like doing a DNS update and restarting the DNS plugin\&. The latter can be useful for example when using the dnsmasq plugin and changing its configuration in /etc/NetworkManager/dnsmasq\&.d\&. However, it also means this will shortly interrupt name resolution\&. In the future, there may be further actions added\&. A SIGHUP means to update NetworkManager configuration and reload everything that is supported\&. Note that this does not reload connections from disk\&. For that there is a D\-Bus API and nmcli\*(Aqs reload action
277277 .RE
278278 .PP
279279 \fISIGUSR1\fR
280280 .RS 4
281 The signal forces a rewrite of DNS configuration\&.
281 The signal forces a rewrite of DNS configuration\&. Contrary to SIGHUP, this does not restart the DNS plugin and will not interrupt name resolution\&. In the future, further actions may be added\&. A SIGUSR1 means to write out data like resolv\&.conf, or refresh a cache\&. It is a subset of what is done for SIGHUP without reloading configuration from disk\&.
282282 .RE
283283 .PP
284284 \fISIGUSR2\fR
285285 .RS 4
286 The signal has no effect at the moment\&.
287 .RE
286 The signal has no effect at the moment but is reserved for future use\&.
287 .RE
288 .PP
289 An alternative to a signal to reload configuration is the Reload D\-Bus call\&. It allows for more fine\-grained selection of what to reload, it only returns after the reload is complete, and it is guarded by PolicyKit\&.
288290 .SH "DEBUGGING"
289291 .PP
290292 The following environment variables are supported to help debugging\&. When used in conjunction with the
11 .\" Title: NetworkManager.conf
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Configuration
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NETWORKMANAGER\&.CON" "5" "" "NetworkManager 1\&.2\&.2" "Configuration"
9 .TH "NETWORKMANAGER\&.CON" "5" "" "NetworkManager 1\&.2\&.4" "Configuration"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
6060 NetworkManager can overwrite certain user configuration options via D\-Bus or other internal operations\&. In this case it writes those changes to
6161 /var/lib/NetworkManager/NetworkManager\-intern\&.conf\&. This file is not intended to be modified by the user, but it is read last and can shadow user configuration from
6262 NetworkManager\&.conf\&.
63 .PP
64 Certain settings from the configuration can be reloaded at runtime either by sending SIGHUP signal or via D\-Bus\*(Aq Reload call\&.
6365 .SH "FILE FORMAT"
6466 .PP
6567 The configuration file format is so\-called key file (sort of ini\-style format)\&. It consists of sections (groups) of key\-value pairs\&. Lines beginning with a \*(Aq#\*(Aq and blank lines are considered comments\&. Sections are started by a header line containing the section enclosed in \*(Aq[\*(Aq and \*(Aq]\*(Aq, and ended implicitly by the start of the next section or the end of the file\&. Each key\-value pair must be contained in a section\&.
210212 .sp
211213 unbound: NetworkManager will talk to unbound and dnssec\-triggerd, providing a "split DNS" configuration with DNSSEC support\&. The /etc/resolv\&.conf will be managed by dnssec\-trigger daemon\&.
212214 .sp
213 none: NetworkManager will not modify resolv\&.conf\&.
215 none: NetworkManager will not modify resolv\&.conf\&. This implies
216 \fIrc\-manager\fRunmanaged
214217 .RE
215218 .PP
216219 \fIrc\-manager\fR
217220 .RS 4
218221 Set the
219222 resolv\&.conf
220 management mode\&. The default value depends on how NetworkManager was built\&. Regardless of this setting, NetworkManager will always write resolv\&.conf to its runtime state directory\&.
221 .sp
222 none: NetworkManager will symlink
223 management mode\&. The default value depends on how NetworkManager was built, whereas this version of NetworkManager was build with a default of "symlink"\&. Regardless of this setting, NetworkManager will always write resolv\&.conf to its runtime state directory\&.
224 .sp
225 symlink: NetworkManager will symlink
223226 /etc/resolv\&.conf
224227 to its private resolv\&.conf file in the runtime state directory\&.
225228 .sp
226229 file: NetworkManager will write
227230 /etc/resolv\&.conf
228 as file\&.
231 as file\&. If it finds a symlink, it will follow the symlink and update the target instead\&.
229232 .sp
230233 resolvconf: NetworkManager will run resolvconf to update the DNS configuration\&.
231234 .sp
232235 netconfig: NetworkManager will run netconfig to update the DNS configuration\&.
236 .sp
237 unmanaged: don\*(Aqt touch
238 resolv\&.conf\&.
239 .sp
240 none: deprecated alias for
241 symlink\&.
233242 .RE
234243 .PP
235244 \fIdebug\fR
253262 .PP
254263 \fIpath\fR
255264 .RS 4
256 The location where keyfiles are read and stored\&. This defaults to "/etc/NetworkManager/conf\&.d"\&.
265 The location where keyfiles are read and stored\&. This defaults to "${prefix}/etc/NetworkManager/conf\&.d"\&.
257266 .RE
258267 .PP
259268 \fIunmanaged\-devices\fR
604613 would have
605614 stop\-match
606615 set to
607 yes, its
616 yes, the device
617 wlan0
618 would have
608619 ipv6\&.ip6\-privacy
609 value would be unspecified\&.
620 property unspecified\&. That is, the search for the property would not continue in the connection sections
621 [connection\-wifi\-other]
622 or
623 [connection]\&.
610624 .RE
611625 .SH "CONNECTIVITY SECTION"
612626 .PP
7676 operations. In this case it writes those changes to <literal>/var/lib/NetworkManager/NetworkManager-intern.conf</literal>.
7777 This file is not intended to be modified by the user, but it is read last and can shadow
7878 user configuration from <literal>NetworkManager.conf</literal>.
79 </para>
80 <para>
81 Certain settings from the configuration can be reloaded at runtime either by sending SIGHUP signal or via
82 D-Bus' Reload call.
7983 </para>
8084
8185 </refsect1>
302306 configuration with DNSSEC support. The /etc/resolv.conf
303307 will be managed by dnssec-trigger daemon.</para>
304308 <para><literal>none</literal>: NetworkManager will not
305 modify resolv.conf.</para>
309 modify resolv.conf. This implies <varname>rc-manager</varname>
310 <literal>unmanaged</literal></para>
306311 </listitem>
307312 </varlistentry>
308313
310315 <term><varname>rc-manager</varname></term>
311316 <listitem><para>Set the <filename>resolv.conf</filename>
312317 management mode. The default value depends on how NetworkManager
313 was built. Regardless of this setting, NetworkManager will
318 was built, whereas this version of NetworkManager was build with
319 a default of "<literal>&NM_CONFIG_DEFAULT_DNS_RC_MANAGER;</literal>".
320 Regardless of this setting, NetworkManager will
314321 always write resolv.conf to its runtime state directory.</para>
315 <para><literal>none</literal>: NetworkManager will symlink
322 <para><literal>symlink</literal>: NetworkManager will symlink
316323 <filename>/etc/resolv.conf</filename> to its private
317324 resolv.conf file in the runtime state directory.</para>
318325 <para><literal>file</literal>: NetworkManager will write
319 <filename>/etc/resolv.conf</filename> as file.</para>
326 <filename>/etc/resolv.conf</filename> as file. If it finds
327 a symlink, it will follow the symlink and update the target
328 instead.</para>
320329 <para><literal>resolvconf</literal>: NetworkManager will run
321330 resolvconf to update the DNS configuration.</para>
322331 <para><literal>netconfig</literal>: NetworkManager will run
323332 netconfig to update the DNS configuration.</para>
333 <para><literal>unmanaged</literal>: don't touch
334 <filename>resolv.conf</filename>.</para>
335 <para><literal>none</literal>: deprecated alias for
336 <literal>symlink</literal>.</para>
324337 </listitem>
325338 </varlistentry>
326339
656669 considered even if the property in question is not present. In
657670 the example above, if <literal>[connection-wifi-wlan0]</literal> would
658671 have <literal>stop-match</literal> set to <literal>yes</literal>,
659 its <literal>ipv6.ip6-privacy</literal> value would be
660 unspecified.
672 the device <literal>wlan0</literal> would have <literal>ipv6.ip6-privacy</literal>
673 property unspecified. That is, the search for the property would not continue
674 in the connection sections <literal>[connection-wifi-other]</literal>
675 or <literal>[connection]</literal>.
661676 </para></listitem>
662677 </varlistentry>
663678 </variablelist>
427427 The signal causes a reload of NetworkManager's configuration.
428428 Note that not all configuration parameters can be changed at
429429 runtime and therefore some changes may be applied only after
430 the next restart of the daemon. The signal also forces a
431 rewrite of DNS configuration.
430 the next restart of the daemon.
431 A SIGHUP also involves further reloading actions, like doing
432 a DNS update and restarting the DNS plugin. The latter can be
433 useful for example when using the dnsmasq plugin and changing
434 its configuration in /etc/NetworkManager/dnsmasq.d. However,
435 it also means this will shortly interrupt name resolution.
436 In the future, there may be further actions added.
437 A SIGHUP means to update NetworkManager configuration and reload
438 everything that is supported. Note that this does not reload
439 connections from disk. For that there is a D-Bus API and
440 nmcli's reload action
432441 </para></listitem>
433442 </varlistentry>
434443 <varlistentry>
435444 <term><varname>SIGUSR1</varname></term>
436445 <listitem><para>
437 The signal forces a rewrite of DNS configuration.
446 The signal forces a rewrite of DNS configuration. Contrary to
447 SIGHUP, this does not restart the DNS plugin and will not interrupt
448 name resolution.
449 In the future, further actions may be added. A SIGUSR1
450 means to write out data like resolv.conf, or refresh a cache.
451 It is a subset of what is done for SIGHUP without reloading
452 configuration from disk.
438453 </para></listitem>
439454 </varlistentry>
440455 <varlistentry>
441456 <term><varname>SIGUSR2</varname></term>
442457 <listitem><para>
443 The signal has no effect at the moment.
458 The signal has no effect at the moment but is reserved for future
459 use.
444460 </para></listitem>
445461 </varlistentry>
446462 </variablelist>
463 </para>
464 <para>
465 An alternative to a signal to reload configuration is the Reload D-Bus call.
466 It allows for more fine-grained selection of what to reload, it only returns
467 after the reload is complete, and it is guarded by PolicyKit.
447468 </para>
448469 </refsect1>
449470
33 <!ENTITY NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT "@NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@">
44 <!ENTITY NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT "@NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@">
55 <!ENTITY NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT "@NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@">
6 <!ENTITY NM_CONFIG_DEFAULT_DNS_RC_MANAGER "@NM_CONFIG_DEFAULT_DNS_RC_MANAGER@">
11 .\" Title: nm-online
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: General Commands Manual
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.2\&.2" "General Commands Manual"
9 .TH "NM\-ONLINE" "1" "" "NetworkManager 1\&.2\&.4" "General Commands Manual"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
11 .\" Title: nm-settings-ifcfg-rh
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Configuration
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NM\-SETTINGS\-IFCFG\" "5" "" "NetworkManager 1\&.2\&.2" "Configuration"
9 .TH "NM\-SETTINGS\-IFCFG\" "5" "" "NetworkManager 1\&.2\&.4" "Configuration"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
00 <?xml version="1.0"?>
11 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
2 <refentry id="nm-settings-ifcfg-rh"><refentryinfo><title>nm-settings-ifcfg-rh</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings-ifcfg-rh</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.2</refmiscinfo></refmeta><refnamediv><refname>nm-settings-ifcfg-rh</refname><refpurpose>Description of <emphasis>ifcfg-rh</emphasis> settings plugin</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
2 <refentry id="nm-settings-ifcfg-rh"><refentryinfo><title>nm-settings-ifcfg-rh</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings-ifcfg-rh</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.4</refmiscinfo></refmeta><refnamediv><refname>nm-settings-ifcfg-rh</refname><refpurpose>Description of <emphasis>ifcfg-rh</emphasis> settings plugin</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
33 NetworkManager is based on the concept of connection profiles that contain
44 network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
55 stored in various formats. NetworkManager uses plugins for reading and writing
11 .\" Title: nm-settings-keyfile
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Configuration
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NM\-SETTINGS\-KEYFIL" "5" "" "NetworkManager 1\&.2\&.2" "Configuration"
9 .TH "NM\-SETTINGS\-KEYFIL" "5" "" "NetworkManager 1\&.2\&.4" "Configuration"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
00 <?xml version="1.0"?>
11 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
2 <refentry id="nm-settings-keyfile"><refentryinfo><title>nm-settings-keyfile</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings-keyfile</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.2</refmiscinfo></refmeta><refnamediv><refname>nm-settings-keyfile</refname><refpurpose>Description of <emphasis>keyfile</emphasis> settings plugin</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
2 <refentry id="nm-settings-keyfile"><refentryinfo><title>nm-settings-keyfile</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings-keyfile</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.4</refmiscinfo></refmeta><refnamediv><refname>nm-settings-keyfile</refname><refpurpose>Description of <emphasis>keyfile</emphasis> settings plugin</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
33 NetworkManager is based on the concept of connection profiles that contain
44 network configuration (see <citerefentry><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details). The profiles can be
55 stored in various formats. NetworkManager uses plugins for reading and writing
11 .\" Title: nm-settings
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Configuration
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NM\-SETTINGS" "5" "" "NetworkManager 1\&.2\&.2" "Configuration"
9 .TH "NM\-SETTINGS" "5" "" "NetworkManager 1\&.2\&.4" "Configuration"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
15681568 l l l l
15691569 l l l l
15701570 l l l l
1571 l l l l
15711572 l l l l.
15721573 T{
15731574 address\-data
16581659 []
16591660 T}:T{
16601661 Array of DNS options\&. NULL means that the options are unset and left at the default\&. In this case NetworkManager will use default options\&. This is distinct from an empty list of properties\&.
1662 T}
1663 T{
1664 dns\-priority
1665 T}:T{
1666 int32
1667 T}:T{
1668 0
1669 T}:T{
1670 DNS priority\&. The relative priority to be used when determining the order of DNS servers in resolv\&.conf\&. A lower value means that servers will be on top of the file\&. Zero selects the default value, which is 50 for VPNs and 100 for other connections\&. When multiple devices have configurations with the same priority, the one with an active default route will be preferred\&. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time\&. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used\&.
16611671 T}
16621672 T{
16631673 dns\-search
17991809 l l l l
18001810 l l l l
18011811 l l l l
1812 l l l l
18021813 l l l l.
18031814 T{
18041815 addr\-gen\-mode
18801891 []
18811892 T}:T{
18821893 Array of DNS options\&. NULL means that the options are unset and left at the default\&. In this case NetworkManager will use default options\&. This is distinct from an empty list of properties\&.
1894 T}
1895 T{
1896 dns\-priority
1897 T}:T{
1898 int32
1899 T}:T{
1900 0
1901 T}:T{
1902 DNS priority\&. The relative priority to be used when determining the order of DNS servers in resolv\&.conf\&. A lower value means that servers will be on top of the file\&. Zero selects the default value, which is 50 for VPNs and 100 for other connections\&. When multiple devices have configurations with the same priority, the one with an active default route will be preferred\&. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time\&. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used\&.
18831903 T}
18841904 T{
18851905 dns\-search
00 <?xml version="1.0"?>
11 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
2 <refentry id="nm-settings"><refentryinfo><title>nm-settings</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.2</refmiscinfo></refmeta><refnamediv><refname>nm-settings</refname><refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
2 <refentry id="nm-settings"><refentryinfo><title>nm-settings</title><author>NetworkManager developers</author></refentryinfo><refmeta><refentrytitle>nm-settings</refentrytitle><manvolnum>5</manvolnum><refmiscinfo class="source">NetworkManager</refmiscinfo><refmiscinfo class="manual">Configuration</refmiscinfo><refmiscinfo class="version">1.2.4</refmiscinfo></refmeta><refnamediv><refname>nm-settings</refname><refpurpose>Description of settings and properties of NetworkManager connection profiles</refpurpose></refnamediv><refsect1 id="description"><title>Description</title><para>
33 NetworkManager is based on a concept of connection profiles, sometimes referred to as
44 connections only. These connection profiles contain a network configuration. When
55 NetworkManager activates a connection profile on a network device the configuration will
189189 <row><entry align="left">dhcp-timeout</entry><entry align="left">int32</entry><entry align="left">0</entry><entry>A timeout for a DHCP transaction in seconds.</entry></row>
190190 <row><entry align="left">dns</entry><entry align="left">array of uint32</entry><entry align="left">[]</entry><entry>Array of IP addresses of DNS servers (as network-byte-order integers)</entry></row>
191191 <row><entry align="left">dns-options</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</entry></row>
192 <row><entry align="left">dns-priority</entry><entry align="left">int32</entry><entry align="left">0</entry><entry>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</entry></row>
192193 <row><entry align="left">dns-search</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS search domains.</entry></row>
193194 <row><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left"/><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
194195 <row><entry align="left">ignore-auto-dns</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "method" is set to "auto" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the "dns" and "dns-search" properties, if any, are used.</entry></row>
211212 <row><entry align="left">dhcp-timeout</entry><entry align="left">int32</entry><entry align="left">0</entry><entry>A timeout for a DHCP transaction in seconds.</entry></row>
212213 <row><entry align="left">dns</entry><entry align="left">array of byte array</entry><entry align="left">[]</entry><entry>Array of IP addresses of DNS servers (in network byte order)</entry></row>
213214 <row><entry align="left">dns-options</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS options. NULL means that the options are unset and left at the default. In this case NetworkManager will use default options. This is distinct from an empty list of properties.</entry></row>
215 <row><entry align="left">dns-priority</entry><entry align="left">int32</entry><entry align="left">0</entry><entry>DNS priority. The relative priority to be used when determining the order of DNS servers in resolv.conf. A lower value means that servers will be on top of the file. Zero selects the default value, which is 50 for VPNs and 100 for other connections. When multiple devices have configurations with the same priority, the one with an active default route will be preferred. Note that when using dns=dnsmasq the order is meaningless since dnsmasq forwards queries to all known servers at the same time. Negative values have the special effect of excluding other configurations with a greater priority value; so in presence of at least a negative priority, only DNS servers from configurations with the lowest priority value will be used.</entry></row>
214216 <row><entry align="left">dns-search</entry><entry align="left">array of string</entry><entry align="left">[]</entry><entry>Array of DNS search domains.</entry></row>
215217 <row><entry align="left">gateway</entry><entry align="left">string</entry><entry align="left"/><entry>The gateway associated with this configuration. This is only meaningful if "addresses" is also set.</entry></row>
216218 <row><entry align="left">ignore-auto-dns</entry><entry align="left">boolean</entry><entry align="left">FALSE</entry><entry>When "method" is set to "auto" and this property to TRUE, automatically configured nameservers and search domains are ignored and only nameservers and search domains specified in the "dns" and "dns-search" properties, if any, are used.</entry></row>
11 .\" Title: nmcli-examples
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: Examples
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.2\&.2" "Examples"
9 .TH "NMCLI\-EXAMPLES" "7" "" "NetworkManager 1\&.2\&.4" "Examples"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
138138 org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.system yes
139139 org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.own yes
140140 org\&.freedesktop\&.NetworkManager\&.settings\&.modify\&.hostname auth
141 org\&.freedesktop\&.NetworkManager\&.reload no
141142 .fi
142143 .if n \{\
143144 .RE
139139 org.freedesktop.NetworkManager.wifi.share.open yes
140140 org.freedesktop.NetworkManager.settings.modify.system yes
141141 org.freedesktop.NetworkManager.settings.modify.own yes
142 org.freedesktop.NetworkManager.settings.modify.hostname auth</screen>
142 org.freedesktop.NetworkManager.settings.modify.hostname auth
143 org.freedesktop.NetworkManager.reload no</screen>
143144 <para>
144145 This command shows configured polkit permissions for various NetworkManager
145146 operations. These permissions or actions (using polkit language) are configured
11 .\" Title: nmcli
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: General Commands Manual
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NMCLI" "1" "" "NetworkManager 1\&.2\&.2" "General Commands Manual"
9 .TH "NMCLI" "1" "" "NetworkManager 1\&.2\&.4" "General Commands Manual"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
11 .\" Title: nmtui
22 .\" Author:
33 .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
4 .\" Date: 05/11/2016
4 .\" Date: 08/03/2016
55 .\" Manual: General Commands Manual
6 .\" Source: NetworkManager 1.2.2
6 .\" Source: NetworkManager 1.2.4
77 .\" Language: English
88 .\"
9 .TH "NMTUI" "1" "" "NetworkManager 1\&.2\&.2" "General Commands Manual"
9 .TH "NMTUI" "1" "" "NetworkManager 1\&.2\&.4" "General Commands Manual"
1010 .\" -----------------------------------------------------------------
1111 .\" * Define some portability stuff
1212 .\" -----------------------------------------------------------------
169169 src/nm-iface-helper.c
170170 src/nm-logging.c
171171 src/nm-manager.c
172 src/nm-sleep-monitor-systemd.c
173172 src/settings/plugins/ibft/plugin.c
174173 src/settings/plugins/ifcfg-rh/reader.c
0 data/NetworkManager.service.in
01 examples/python/NetworkManager.py
12 examples/python/systray/eggtrayicon.c
23 policy/org.freedesktop.NetworkManager.policy.in
294294 NM = @NM@
295295 NMEDIT = @NMEDIT@
296296 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
297 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
297298 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
298299 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
299300 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
1414 <defaults>
1515 <allow_inactive>no</allow_inactive>
1616 <allow_active>yes</allow_active>
17 </defaults>
18 </action>
19
20 <action id="org.freedesktop.NetworkManager.reload">
21 <_description>Reload NetworkManager configuration</_description>
22 <_message>System policy prevents reloading NetworkManager</_message>
23 <defaults>
24 <allow_any>auth_admin_keep</allow_any>
25 <allow_inactive>auth_admin_keep</allow_inactive>
26 <allow_active>auth_admin_keep</allow_active>
1727 </defaults>
1828 </action>
1929
00 EXTRA_DIST = \
11 gsystem-local-alloc.h \
2 nm-common-macros.h \
23 nm-dbus-compat.h \
34 nm-default.h \
45 nm-glib.h \
264264 NM = @NM@
265265 NMEDIT = @NMEDIT@
266266 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
267 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
267268 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
268269 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
269270 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
396397 with_valgrind = @with_valgrind@
397398 EXTRA_DIST = \
398399 gsystem-local-alloc.h \
400 nm-common-macros.h \
399401 nm-dbus-compat.h \
400402 nm-default.h \
401403 nm-glib.h \
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* NetworkManager -- Network link manager
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 * Boston, MA 02110-1301 USA.
17 *
18 * (C) Copyright 2016 Red Hat, Inc.
19 */
20
21 #ifndef __NM_COMMON_MACROS_H__
22 #define __NM_COMMON_MACROS_H__
23
24 /******************************************************************************/
25
26 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
27 #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
28 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
29 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
30 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
31 #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
32 #define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
33 #define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
34 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
35 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
36 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
37 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS "org.freedesktop.NetworkManager.settings.modify.global-dns"
38 #define NM_AUTH_PERMISSION_RELOAD "org.freedesktop.NetworkManager.reload"
39
40 /******************************************************************************/
41
42 #endif /* __NM_COMMON_MACROS_H__ */
373373 __VA_ARGS__)
374374 #endif
375375
376 #if !GLIB_CHECK_VERSION(2, 44, 0)
377 static inline gpointer
378 g_steal_pointer (gpointer pp)
379 {
380 gpointer *ptr = (gpointer *) pp;
381 gpointer ref;
382
383 ref = *ptr;
384 *ptr = NULL;
385
386 return ref;
387 }
388
389 /* type safety */
390 #define g_steal_pointer(pp) \
391 (0 ? (*(pp)) : (g_steal_pointer) (pp))
392 #endif
393
376394 #endif /* __NM_GLIB_H__ */
2626 /********************************************************/
2727
2828 #define _nm_packed __attribute__ ((packed))
29 #define _nm_unused __attribute__ ((unused))
2930
3031 #define nm_auto(fcn) __attribute__ ((cleanup(fcn)))
3132
4344 g_value_unset (v);
4445 }
4546 #define nm_auto_unset_gvalue nm_auto(_nm_auto_unset_gvalue_impl)
47
48 static inline void
49 _nm_auto_free_gstring_impl (GString **str)
50 {
51 if (*str)
52 g_string_free (*str, TRUE);
53 }
54 #define nm_auto_free_gstring nm_auto(_nm_auto_free_gstring_impl)
4655
4756 /********************************************************/
4857
325334
326335 /*****************************************************************************/
327336
328 #define nm_unauto(pp) \
329 ({ \
330 G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer)); \
331 gpointer *_pp = (gpointer *) (pp); \
332 gpointer _p = *_pp; \
333 \
334 *_pp = NULL; \
335 _p; \
336 })
337
338 /*****************************************************************************/
339
340337 static inline gpointer
341338 nm_g_object_ref (gpointer obj)
342339 {
4444 * Evaluates to the micro version number of NetworkManager which this source
4545 * compiled against.
4646 */
47 #define NM_MICRO_VERSION (2)
47 #define NM_MICRO_VERSION (4)
4848
4949 /**
5050 * NM_CHECK_VERSION:
6969 #define NM_VERSION_1_2 (NM_ENCODE_VERSION (1, 2, 0))
7070 #define NM_VERSION_1_2_2 (NM_ENCODE_VERSION (1, 2, 2))
7171 #define NM_VERSION_1_2_4 (NM_ENCODE_VERSION (1, 2, 4))
72 #define NM_VERSION_1_2_6 (NM_ENCODE_VERSION (1, 2, 6))
7273 #define NM_VERSION_1_4 (NM_ENCODE_VERSION (1, 4, 0))
7374
74 #define NM_VERSION_CUR_STABLE NM_VERSION_1_2_2
75 #define NM_VERSION_NEXT_STABLE NM_VERSION_1_2_4
75 #define NM_VERSION_CUR_STABLE NM_VERSION_1_2_4
76 #define NM_VERSION_NEXT_STABLE NM_VERSION_1_2_6
7677
7778 #endif /* __NM_VERSION_MACROS_H__ */
6969 #define NM_VERSION_1_2 (NM_ENCODE_VERSION (1, 2, 0))
7070 #define NM_VERSION_1_2_2 (NM_ENCODE_VERSION (1, 2, 2))
7171 #define NM_VERSION_1_2_4 (NM_ENCODE_VERSION (1, 2, 4))
72 #define NM_VERSION_1_2_6 (NM_ENCODE_VERSION (1, 2, 6))
7273 #define NM_VERSION_1_4 (NM_ENCODE_VERSION (1, 4, 0))
7374
74 #define NM_VERSION_CUR_STABLE NM_VERSION_1_2_2
75 #define NM_VERSION_NEXT_STABLE NM_VERSION_1_2_4
75 #define NM_VERSION_CUR_STABLE NM_VERSION_1_2_4
76 #define NM_VERSION_NEXT_STABLE NM_VERSION_1_2_6
7677
7778 #endif /* __NM_VERSION_MACROS_H__ */
304304 dns-manager/nm-dns-manager.h \
305305 dns-manager/nm-dns-plugin.c \
306306 dns-manager/nm-dns-plugin.h \
307 dns-manager/nm-dns-utils.c \
308 dns-manager/nm-dns-utils.h \
309307 \
310308 dnsmasq-manager/nm-dnsmasq-manager.c \
311309 dnsmasq-manager/nm-dnsmasq-manager.h \
437435 nm-rfkill-manager.h \
438436 nm-session-monitor.h \
439437 nm-session-monitor.c \
438 nm-sleep-monitor.c \
440439 nm-sleep-monitor.h \
441440 nm-types.h \
442441 nm-core-utils.c \
444443 NetworkManagerUtils.c \
445444 NetworkManagerUtils.h
446445
447
448 if SUSPEND_RESUME_UPOWER
449 libNetworkManager_la_SOURCES += nm-sleep-monitor-upower.c
450 else
451 # systemd/consolekit suspend/resume used whenever upower is not enabled
452 libNetworkManager_la_SOURCES += nm-sleep-monitor-systemd.c
453 endif
454446
455447 if WITH_WEXT
456448 libNetworkManager_la_SOURCES += \
109109 @ENABLE_TESTS_TRUE@ libNetworkManager-base.la
110110
111111 sbin_PROGRAMS = NetworkManager$(EXEEXT)
112 @SUSPEND_RESUME_UPOWER_TRUE@am__append_6 = nm-sleep-monitor-upower.c
113 # systemd/consolekit suspend/resume used whenever upower is not enabled
114 @SUSPEND_RESUME_UPOWER_FALSE@am__append_7 = nm-sleep-monitor-systemd.c
115 @WITH_WEXT_TRUE@am__append_8 = \
112 @WITH_WEXT_TRUE@am__append_6 = \
116113 @WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.c \
117114 @WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.h
118115
119 @WITH_LIBSOUP_TRUE@am__append_9 = $(LIBSOUP_LIBS)
120 @WITH_WEXT_TRUE@am__append_10 = \
116 @WITH_LIBSOUP_TRUE@am__append_7 = $(LIBSOUP_LIBS)
117 @WITH_WEXT_TRUE@am__append_8 = \
121118 @WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.c \
122119 @WITH_WEXT_TRUE@ platform/wifi/wifi-utils-wext.h
123120
196193 dns-manager/nm-dns-dnsmasq.h dns-manager/nm-dns-unbound.c \
197194 dns-manager/nm-dns-unbound.h dns-manager/nm-dns-manager.c \
198195 dns-manager/nm-dns-manager.h dns-manager/nm-dns-plugin.c \
199 dns-manager/nm-dns-plugin.h dns-manager/nm-dns-utils.c \
200 dns-manager/nm-dns-utils.h \
196 dns-manager/nm-dns-plugin.h \
201197 dnsmasq-manager/nm-dnsmasq-manager.c \
202198 dnsmasq-manager/nm-dnsmasq-manager.h \
203199 dnsmasq-manager/nm-dnsmasq-utils.c \
261257 nm-auth-subject.h nm-auth-utils.c nm-auth-utils.h nm-manager.c \
262258 nm-manager.h nm-multi-index.c nm-multi-index.h nm-policy.c \
263259 nm-policy.h nm-rfkill-manager.c nm-rfkill-manager.h \
264 nm-session-monitor.h nm-session-monitor.c nm-sleep-monitor.h \
265 nm-types.h nm-core-utils.c nm-core-utils.h \
260 nm-session-monitor.h nm-session-monitor.c nm-sleep-monitor.c \
261 nm-sleep-monitor.h nm-types.h nm-core-utils.c nm-core-utils.h \
266262 NetworkManagerUtils.c NetworkManagerUtils.h \
267 nm-sleep-monitor-upower.c nm-sleep-monitor-systemd.c \
268263 platform/wifi/wifi-utils-wext.c \
269264 platform/wifi/wifi-utils-wext.h
270265 am__objects_1 =
271 @SUSPEND_RESUME_UPOWER_TRUE@am__objects_2 = \
272 @SUSPEND_RESUME_UPOWER_TRUE@ nm-sleep-monitor-upower.lo
273 @SUSPEND_RESUME_UPOWER_FALSE@am__objects_3 = \
274 @SUSPEND_RESUME_UPOWER_FALSE@ nm-sleep-monitor-systemd.lo
275 @WITH_WEXT_TRUE@am__objects_4 = wifi-utils-wext.lo
266 @WITH_WEXT_TRUE@am__objects_2 = wifi-utils-wext.lo
276267 am_libNetworkManager_la_OBJECTS = $(am__objects_1) $(am__objects_1) \
277268 nm-device.lo nm-lldp-listener.lo nm-arping-manager.lo \
278269 nm-device-ethernet-utils.lo nm-device-factory.lo \
279270 nm-device-generic.lo nm-dhcp-client.lo nm-dhcp-utils.lo \
280271 nm-dhcp-listener.lo nm-dhcp-manager.lo nm-dns-dnsmasq.lo \
281272 nm-dns-unbound.lo nm-dns-manager.lo nm-dns-plugin.lo \
282 nm-dns-utils.lo nm-dnsmasq-manager.lo nm-dnsmasq-utils.lo \
283 nmp-netns.lo nmp-object.lo nm-platform-utils.lo nm-platform.lo \
273 nm-dnsmasq-manager.lo nm-dnsmasq-utils.lo nmp-netns.lo \
274 nmp-object.lo nm-platform-utils.lo nm-platform.lo \
284275 nm-linux-platform.lo nm-fake-platform.lo wifi-utils-nl80211.lo \
285276 wifi-utils.lo nm-fake-rdisc.lo nm-lndp-rdisc.lo nm-rdisc.lo \
286277 nm-ppp-manager.lo nm-agent-manager.lo nm-inotify-helper.lo \
299290 nm-ip6-config.lo nm-logging.lo nm-auth-manager.lo \
300291 nm-auth-subject.lo nm-auth-utils.lo nm-manager.lo \
301292 nm-multi-index.lo nm-policy.lo nm-rfkill-manager.lo \
302 nm-session-monitor.lo nm-core-utils.lo NetworkManagerUtils.lo \
303 $(am__objects_2) $(am__objects_3) $(am__objects_4)
293 nm-session-monitor.lo nm-sleep-monitor.lo nm-core-utils.lo \
294 NetworkManagerUtils.lo $(am__objects_2)
304295 libNetworkManager_la_OBJECTS = $(am_libNetworkManager_la_OBJECTS)
305296 libnm_iface_helper_la_DEPENDENCIES = \
306297 $(top_builddir)/libnm-core/libnm-core.la \
339330 nm-lndp-rdisc.lo nm-rdisc.lo nm-route-manager.lo \
340331 nm-exported-object.lo nm-ip4-config.lo nm-ip6-config.lo \
341332 nm-enum-types.lo nm-logging.lo nm-multi-index.lo \
342 nm-core-utils.lo NetworkManagerUtils.lo $(am__objects_4)
333 nm-core-utils.lo NetworkManagerUtils.lo $(am__objects_2)
343334 libnm_iface_helper_la_OBJECTS = $(am_libnm_iface_helper_la_OBJECTS)
344335 libsystemd_nm_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
345336 am_libsystemd_nm_la_OBJECTS = libsystemd_nm_la-nm-sd.lo \
378369 am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(sbindir)" \
379370 "$(DESTDIR)$(dbusservicedir)"
380371 PROGRAMS = $(libexec_PROGRAMS) $(sbin_PROGRAMS)
381 am__objects_5 = nm-device-bond.$(OBJEXT) nm-device-bridge.$(OBJEXT) \
372 am__objects_3 = nm-device-bond.$(OBJEXT) nm-device-bridge.$(OBJEXT) \
382373 nm-device-ethernet.$(OBJEXT) nm-device-infiniband.$(OBJEXT) \
383374 nm-device-ip-tunnel.$(OBJEXT) nm-device-macvlan.$(OBJEXT) \
384375 nm-device-tun.$(OBJEXT) nm-device-veth.$(OBJEXT) \
385376 nm-device-vlan.$(OBJEXT) nm-device-vxlan.$(OBJEXT)
386 am__objects_6 = nm-dhcp-dhclient.$(OBJEXT) \
377 am__objects_4 = nm-dhcp-dhclient.$(OBJEXT) \
387378 nm-dhcp-dhclient-utils.$(OBJEXT) nm-dhcp-dhcpcd.$(OBJEXT) \
388379 nm-dhcp-systemd.$(OBJEXT)
389 am_NetworkManager_OBJECTS = $(am__objects_5) $(am__objects_1) \
390 $(am__objects_6) $(am__objects_1) main-utils.$(OBJEXT) \
380 am_NetworkManager_OBJECTS = $(am__objects_3) $(am__objects_1) \
381 $(am__objects_4) $(am__objects_1) main-utils.$(OBJEXT) \
391382 main.$(OBJEXT)
392383 NetworkManager_OBJECTS = $(am_NetworkManager_OBJECTS)
393384 NetworkManager_DEPENDENCIES = libNetworkManager.la
684675 NM = @NM@
685676 NMEDIT = @NMEDIT@
686677 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
678 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
687679 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
688680 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
689681 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
10641056 dns-manager/nm-dns-dnsmasq.h dns-manager/nm-dns-unbound.c \
10651057 dns-manager/nm-dns-unbound.h dns-manager/nm-dns-manager.c \
10661058 dns-manager/nm-dns-manager.h dns-manager/nm-dns-plugin.c \
1067 dns-manager/nm-dns-plugin.h dns-manager/nm-dns-utils.c \
1068 dns-manager/nm-dns-utils.h \
1059 dns-manager/nm-dns-plugin.h \
10691060 dnsmasq-manager/nm-dnsmasq-manager.c \
10701061 dnsmasq-manager/nm-dnsmasq-manager.h \
10711062 dnsmasq-manager/nm-dnsmasq-utils.c \
11291120 nm-auth-subject.h nm-auth-utils.c nm-auth-utils.h nm-manager.c \
11301121 nm-manager.h nm-multi-index.c nm-multi-index.h nm-policy.c \
11311122 nm-policy.h nm-rfkill-manager.c nm-rfkill-manager.h \
1132 nm-session-monitor.h nm-session-monitor.c nm-sleep-monitor.h \
1133 nm-types.h nm-core-utils.c nm-core-utils.h \
1134 NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_6) \
1135 $(am__append_7) $(am__append_8)
1123 nm-session-monitor.h nm-session-monitor.c nm-sleep-monitor.c \
1124 nm-sleep-monitor.h nm-types.h nm-core-utils.c nm-core-utils.h \
1125 NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_6)
11361126 GLIB_GENERATED = nm-enum-types.h nm-enum-types.c
11371127 GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM --fhead '\#include <nm-core-enum-types.h>\n'
11381128 GLIB_MKENUMS_C_FLAGS = --identifier-prefix NM
11501140 $(top_builddir)/introspection/libnmdbus.la libsystemd-nm.la \
11511141 $(GLIB_LIBS) $(GUDEV_LIBS) $(LIBNL_LIBS) $(SYSTEMD_LOGIN_LIBS) \
11521142 $(SYSTEMD_JOURNAL_LIBS) $(LIBNDP_LIBS) $(LIBDL) $(LIBM) \
1153 $(SELINUX_LIBS) $(LIBAUDIT_LIBS) $(am__append_9)
1143 $(SELINUX_LIBS) $(LIBAUDIT_LIBS) $(am__append_7)
11541144 NetworkManager_LDFLAGS = \
11551145 -rdynamic \
11561146 -Wl,--version-script="$(srcdir)/NetworkManager.ver"
11781168 nm-ip6-config.c nm-ip6-config.h nm-enum-types.c \
11791169 nm-enum-types.h nm-logging.c nm-logging.h nm-multi-index.c \
11801170 nm-multi-index.h nm-core-utils.c nm-core-utils.h \
1181 NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_10)
1171 NetworkManagerUtils.c NetworkManagerUtils.h $(am__append_8)
11821172 libnm_iface_helper_la_LIBADD = \
11831173 $(top_builddir)/libnm-core/libnm-core.la \
11841174 $(top_builddir)/introspection/libnmdbus.la \
14901480 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-manager.Plo@am__quote@
14911481 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-plugin.Plo@am__quote@
14921482 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-unbound.Plo@am__quote@
1493 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dns-utils.Plo@am__quote@
14941483 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dnsmasq-manager.Plo@am__quote@
14951484 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-dnsmasq-utils.Plo@am__quote@
14961485 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-enum-types.Plo@am__quote@
15211510 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-connection.Plo@am__quote@
15221511 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings-plugin.Plo@am__quote@
15231512 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-settings.Plo@am__quote@
1524 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-sleep-monitor-systemd.Plo@am__quote@
1525 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-sleep-monitor-upower.Plo@am__quote@
1513 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-sleep-monitor.Plo@am__quote@
15261514 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-config.Plo@am__quote@
15271515 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-interface.Plo@am__quote@
15281516 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm-supplicant-manager.Plo@am__quote@
16711659 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-plugin.c' object='nm-dns-plugin.lo' libtool=yes @AMDEPBACKSLASH@
16721660 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
16731661 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-plugin.lo `test -f 'dns-manager/nm-dns-plugin.c' || echo '$(srcdir)/'`dns-manager/nm-dns-plugin.c
1674
1675 nm-dns-utils.lo: dns-manager/nm-dns-utils.c
1676 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dns-utils.lo -MD -MP -MF $(DEPDIR)/nm-dns-utils.Tpo -c -o nm-dns-utils.lo `test -f 'dns-manager/nm-dns-utils.c' || echo '$(srcdir)/'`dns-manager/nm-dns-utils.c
1677 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nm-dns-utils.Tpo $(DEPDIR)/nm-dns-utils.Plo
1678 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dns-manager/nm-dns-utils.c' object='nm-dns-utils.lo' libtool=yes @AMDEPBACKSLASH@
1679 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1680 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nm-dns-utils.lo `test -f 'dns-manager/nm-dns-utils.c' || echo '$(srcdir)/'`dns-manager/nm-dns-utils.c
16811662
16821663 nm-dnsmasq-manager.lo: dnsmasq-manager/nm-dnsmasq-manager.c
16831664 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nm-dnsmasq-manager.lo -MD -MP -MF $(DEPDIR)/nm-dnsmasq-manager.Tpo -c -o nm-dnsmasq-manager.lo `test -f 'dnsmasq-manager/nm-dnsmasq-manager.c' || echo '$(srcdir)/'`dnsmasq-manager/nm-dnsmasq-manager.c
2222
2323 #include "NetworkManagerUtils.h"
2424
25 #include "nm-common-macros.h"
2526 #include "nm-utils.h"
2627 #include "nm-setting-connection.h"
2728 #include "nm-setting-ip4-config.h"
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
350350 NM = @NM@
351351 NMEDIT = @NMEDIT@
352352 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
353 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
353354 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
354355 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
355356 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
371371 NM = @NM@
372372 NMEDIT = @NMEDIT@
373373 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
374 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
374375 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
375376 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
376377 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
5353 gboolean usable;
5454 NMBluetoothCapabilities connection_bt_type;
5555
56 guint check_emit_usable_id;
57
5658 char *adapter_address;
5759 char *address;
5860 char *name;
256258 g_free (uuid);
257259 }
258260
259 static void
261 static gboolean
260262 check_emit_usable (NMBluezDevice *self)
261263 {
262264 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
263265 gboolean new_usable;
264266
265267 /* only expect the supported capabilities set. */
266 g_assert ((priv->capabilities & ~(NM_BT_CAPABILITY_NAP | NM_BT_CAPABILITY_DUN)) == NM_BT_CAPABILITY_NONE );
268 nm_assert ((priv->capabilities & ~(NM_BT_CAPABILITY_NAP | NM_BT_CAPABILITY_DUN)) == NM_BT_CAPABILITY_NONE );
267269
268270 new_usable = (priv->initialized && priv->capabilities && priv->name &&
269271 ((priv->bluez_version == 4) ||
290292 priv->usable = new_usable;
291293 g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_USABLE);
292294 }
295
296 return G_SOURCE_REMOVE;
297 }
298
299 static void
300 check_emit_usable_schedule (NMBluezDevice *self)
301 {
302 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
303
304 if (priv->check_emit_usable_id == 0)
305 priv->check_emit_usable_id = g_idle_add ((GSourceFunc) check_emit_usable, self);
293306 }
294307
295308 /********************************************************************/
330343 return TRUE;
331344 }
332345
333 static void
334 _internal_add_connection (NMBluezDevice *self, NMConnection *connection)
335 {
336 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
337
338 if (!g_slist_find (priv->connections, connection)) {
346 static gboolean
347 _internal_track_connection (NMBluezDevice *self, NMConnection *connection, gboolean tracked)
348 {
349 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
350 gboolean was_tracked;
351
352 was_tracked = !!g_slist_find (priv->connections, connection);
353 if (was_tracked == !!tracked)
354 return FALSE;
355
356 if (tracked)
339357 priv->connections = g_slist_prepend (priv->connections, g_object_ref (connection));
340 check_emit_usable (self);
341 }
342 }
343
344 static void
345 cp_connection_added (NMConnectionProvider *provider,
346 NMConnection *connection,
347 NMBluezDevice *self)
348 {
349 if (connection_compatible (self, connection))
350 _internal_add_connection (self, connection);
351 }
352
353 static void
354 cp_connection_removed (NMConnectionProvider *provider,
355 NMConnection *connection,
356 NMBluezDevice *self)
357 {
358 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
359
360 if (g_slist_find (priv->connections, connection)) {
358 else {
361359 priv->connections = g_slist_remove (priv->connections, connection);
362360 if (priv->pan_connection == connection)
363361 priv->pan_connection = NULL;
364362 g_object_unref (connection);
363 }
364
365 return TRUE;
366 }
367
368 static void
369 cp_connection_added (NMConnectionProvider *provider,
370 NMConnection *connection,
371 NMBluezDevice *self)
372 {
373 if (connection_compatible (self, connection)) {
374 if (_internal_track_connection (self, connection, TRUE))
375 check_emit_usable (self);
376 }
377 }
378
379 static void
380 cp_connection_removed (NMConnectionProvider *provider,
381 NMConnection *connection,
382 NMBluezDevice *self)
383 {
384 if (_internal_track_connection (self, connection, FALSE))
365385 check_emit_usable (self);
366 }
367386 }
368387
369388 static void
371390 NMConnection *connection,
372391 NMBluezDevice *self)
373392 {
374 if (connection_compatible (self, connection))
375 _internal_add_connection (self, connection);
376 else
377 cp_connection_removed (provider, connection, self);
393 if (_internal_track_connection (self, connection,
394 connection_compatible (self, connection)))
395 check_emit_usable_schedule (self);
378396 }
379397
380398 static void
382400 {
383401 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
384402 const GSList *connections, *iter;
403 gboolean changed = FALSE;
385404
386405 connections = nm_connection_provider_get_connections (priv->provider);
387 for (iter = connections; iter; iter = g_slist_next (iter))
388 cp_connection_added (priv->provider, NM_CONNECTION (iter->data), self);
406 for (iter = connections; iter; iter = g_slist_next (iter)) {
407 NMConnection *connection = iter->data;
408
409 if (connection_compatible (self, connection))
410 changed |= _internal_track_connection (self, connection, TRUE);
411 }
412 if (changed)
413 check_emit_usable (self);
389414 }
390415
391416 /***********************************************************/
10301055 if (adapter_address)
10311056 set_adapter_address (self, adapter_address);
10321057
1033 g_signal_connect (priv->provider,
1034 NM_CP_SIGNAL_CONNECTION_ADDED,
1035 G_CALLBACK (cp_connection_added),
1036 self);
1037
1038 g_signal_connect (priv->provider,
1039 NM_CP_SIGNAL_CONNECTION_REMOVED,
1040 G_CALLBACK (cp_connection_removed),
1041 self);
1042
1043 g_signal_connect (priv->provider,
1044 NM_CP_SIGNAL_CONNECTION_UPDATED,
1045 G_CALLBACK (cp_connection_updated),
1046 self);
1058 g_signal_connect (priv->provider, NM_CP_SIGNAL_CONNECTION_ADDED, G_CALLBACK (cp_connection_added), self);
1059 g_signal_connect (priv->provider, NM_CP_SIGNAL_CONNECTION_REMOVED, G_CALLBACK (cp_connection_removed), self);
1060 g_signal_connect (priv->provider, NM_CP_SIGNAL_CONNECTION_UPDATED, G_CALLBACK (cp_connection_updated), self);
10471061
10481062 g_bus_get (G_BUS_TYPE_SYSTEM,
10491063 NULL,
10821096 NMBluezDevice *self = NM_BLUEZ_DEVICE (object);
10831097 NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self);
10841098 NMConnection *to_delete = NULL;
1099
1100 nm_clear_g_source (&priv->check_emit_usable_id);
10851101
10861102 if (priv->pan_connection) {
10871103 /* Check whether we want to remove the created connection. If so, we take a reference
315315 if (NM_IN_STRSET (mode, "active-backup", "balance-alb", "balance-tlb")) {
316316 value = nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
317317 set_bond_attr (device, "primary", value ? value : "");
318 set_simple_option (device, "lp_internal", s_bond, NM_SETTING_BOND_OPTION_LP_INTERVAL);
318 set_simple_option (device, "lp_interval", s_bond, NM_SETTING_BOND_OPTION_LP_INTERVAL);
319319 }
320320
321321 /* Clear ARP targets */
103103 g_object_thaw_notify (object);
104104 }
105105
106 static NMDeviceCapabilities
107 get_generic_capabilities (NMDevice *dev)
108 {
109 return NM_DEVICE_CAP_IS_SOFTWARE;
110 }
111
106112 static void
107113 link_changed (NMDevice *device, NMPlatformLink *info)
108114 {
429435 device_class->complete_connection = complete_connection;
430436 device_class->check_connection_compatible = check_connection_compatible;
431437 device_class->create_and_realize = create_and_realize;
438 device_class->get_generic_capabilities = get_generic_capabilities;
432439 device_class->realize_start_notify = realize_start_notify;
433440 device_class->unrealize_notify = unrealize_notify;
434441 device_class->update_connection = update_connection;
135135 g_object_thaw_notify (object);
136136 }
137137
138 static NMDeviceCapabilities
139 get_generic_capabilities (NMDevice *dev)
140 {
141 return NM_DEVICE_CAP_IS_SOFTWARE;
142 }
143
138144 static void
139145 link_changed (NMDevice *device, NMPlatformLink *info)
140146 {
646652 device_class->create_and_realize = create_and_realize;
647653 device_class->check_connection_compatible = check_connection_compatible;
648654 device_class->complete_connection = complete_connection;
655 device_class->get_generic_capabilities = get_generic_capabilities;
649656 device_class->update_connection = update_connection;
650657 device_class->act_stage1_prepare = act_stage1_prepare;
651658 device_class->ip4_config_pre_commit = ip4_config_pre_commit;
3333 #include <netlink/route/addr.h>
3434 #include <linux/if_addr.h>
3535
36 #include "nm-device.h"
36 #include "nm-common-macros.h"
3737 #include "nm-device-private.h"
3838 #include "NetworkManagerUtils.h"
3939 #include "nm-manager.h"
386386 gboolean commit,
387387 gboolean routes_full_sync,
388388 NMDeviceStateReason *reason);
389 static gboolean ip6_config_merge_and_apply (NMDevice *self,
390 gboolean commit,
391 NMDeviceStateReason *out_reason);
389392
390393 static void nm_device_master_add_slave (NMDevice *self, NMDevice *slave, gboolean configure);
391394 static void nm_device_slave_notify_enslave (NMDevice *self, gboolean success);
412415 static gboolean dhcp6_start (NMDevice *self, gboolean wait_for_ll, NMDeviceStateReason *reason);
413416 static void nm_device_start_ip_check (NMDevice *self);
414417 static void realize_start_setup (NMDevice *self, const NMPlatformLink *plink);
418 static void nm_device_set_mtu (NMDevice *self, guint32 mtu);
415419
416420 /***********************************************************/
417421
519523
520524 /***********************************************************/
521525
526 static void
527 init_ip4_config_dns_priority (NMDevice *self, NMIP4Config *config)
528 {
529 gs_free char *value = NULL;
530 gint priority;
531
532 value = nm_config_data_get_connection_default (NM_CONFIG_GET_DATA,
533 "ipv4.dns-priority",
534 self);
535 priority = _nm_utils_ascii_str_to_int64 (value, 10, G_MININT, G_MAXINT, 0);
536 nm_ip4_config_set_dns_priority (config, priority ?: NM_DNS_PRIORITY_DEFAULT_NORMAL);
537 }
538
539 static void
540 init_ip6_config_dns_priority (NMDevice *self, NMIP6Config *config)
541 {
542 gs_free char *value = NULL;
543 gint priority;
544
545 value = nm_config_data_get_connection_default (NM_CONFIG_GET_DATA,
546 "ipv6.dns-priority",
547 self);
548 priority = _nm_utils_ascii_str_to_int64 (value, 10, G_MININT, G_MAXINT, 0);
549 nm_ip6_config_set_dns_priority (config, priority ?: NM_DNS_PRIORITY_DEFAULT_NORMAL);
550 }
551
552 /***********************************************************/
553
522554 gboolean
523555 nm_device_ipv6_sysctl_set (NMDevice *self, const char *property, const char *value)
524556 {
10901122 return NULL;
10911123 }
10921124
1125 static void
1126 apply_mtu_from_config (NMDevice *self)
1127 {
1128 const char *method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
1129 NMSettingIPConfig *s_ip4;
1130 NMSettingWired *s_wired;
1131 guint32 mtu;
1132
1133 /* Devices having an IPv4 configuration will set MTU during the commit
1134 * stage, so it is an error to call this function if the IPv4 method is not
1135 * 'disabled'.
1136 */
1137 s_ip4 = (NMSettingIPConfig *)
1138 nm_device_get_applied_setting (self, NM_TYPE_SETTING_IP4_CONFIG);
1139 if (s_ip4)
1140 method = nm_setting_ip_config_get_method (s_ip4);
1141 g_return_if_fail (nm_streq (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED));
1142
1143 s_wired = (NMSettingWired *)
1144 nm_device_get_applied_setting (self, NM_TYPE_SETTING_WIRED);
1145
1146 if (s_wired) {
1147 mtu = nm_setting_wired_get_mtu (s_wired);
1148 if (mtu) {
1149 _LOGD (LOGD_DEVICE | LOGD_IP,
1150 "setting MTU of device without IP4 config to %u",
1151 mtu);
1152 nm_device_set_mtu (self, mtu);
1153 }
1154 }
1155 }
1156
10931157 /**
10941158 * nm_device_master_enslave_slave:
10951159 * @self: the master device
11461210 if (NM_DEVICE_GET_PRIVATE (self)->ip6_state == IP_WAIT)
11471211 nm_device_activate_stage3_ip6_start (self);
11481212 }
1213
1214 /* Since slave devices don't have their own IP configuration,
1215 * set the MTU here.
1216 */
1217 apply_mtu_from_config (slave);
11491218
11501219 return success;
11511220 }
14991568 NMPlatformLink info;
15001569 const NMPlatformLink *pllink;
15011570 int ifindex;
1571 gboolean was_up;
15021572
15031573 priv->device_link_changed_id = 0;
15041574
15711641 if (ip_ifname_changed)
15721642 nm_device_update_dynamic_ip_setup (self);
15731643
1644 was_up = priv->up;
15741645 priv->up = NM_FLAGS_HAS (info.n_ifi_flags, IFF_UP);
15751646
15761647 if ( info.initialized
15981669 set_unmanaged_external_down (self, FALSE);
15991670
16001671 device_recheck_slave_status (self, &info);
1672
1673 if (priv->up && !was_up) {
1674 /* the link was down and just came up. That happens for example, while changing MTU.
1675 * We must restore IP configuration. */
1676 if (priv->ip4_state == IP_DONE) {
1677 if (!ip4_config_merge_and_apply (self, NULL, TRUE, NULL))
1678 _LOGW (LOGD_IP4, "failed applying IP4 config after link comes up again");
1679 }
1680 if (priv->ip6_state == IP_DONE) {
1681 if (!ip6_config_merge_and_apply (self, TRUE, NULL))
1682 _LOGW (LOGD_IP6, "failed applying IP6 config after link comes up again");
1683 }
1684 }
1685
16011686 return G_SOURCE_REMOVE;
16021687 }
16031688
42864371 gboolean routes_full_sync;
42874372 gboolean ignore_auto_routes = FALSE;
42884373 gboolean ignore_auto_dns = FALSE;
4374 gboolean auto_method = FALSE;
42894375
42904376 /* Merge all the configs into the composite config */
42914377 if (config) {
43014387 if (s_ip4) {
43024388 ignore_auto_routes = nm_setting_ip_config_get_ignore_auto_routes (s_ip4);
43034389 ignore_auto_dns = nm_setting_ip_config_get_ignore_auto_dns (s_ip4);
4390
4391 if (nm_streq0 (nm_setting_ip_config_get_method (s_ip4),
4392 NM_SETTING_IP4_CONFIG_METHOD_AUTO))
4393 auto_method = TRUE;
43044394 }
43054395 }
43064396
43074397 composite = nm_ip4_config_new (nm_device_get_ip_ifindex (self));
4398 init_ip4_config_dns_priority (self, composite);
43084399
43094400 if (commit)
43104401 ensure_con_ip4_config (self);
43564447 goto END_ADD_DEFAULT_ROUTE;
43574448 }
43584449
4359 if (nm_device_uses_generated_assumed_connection (self)) {
4360 /* a generate-assumed-connection always detects the default route from platform */
4450 /* a generated-assumed connection detects the default route from the platform,
4451 * but if the IP method is automatic we need to update the default route to
4452 * maintain connectivity.
4453 */
4454 if (nm_device_uses_generated_assumed_connection (self) && !auto_method)
43614455 goto END_ADD_DEFAULT_ROUTE;
4362 }
43634456
43644457 /* At this point, we treat assumed and non-assumed connections alike.
43654458 * For assumed connections we do that because we still manage RA and DHCP
49455038 } else
49465039 ret = NM_ACT_STAGE_RETURN_FAILURE;
49475040 } else if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0) {
4948 /* Nothing to do... */
5041 apply_mtu_from_config (self);
5042 /* Nothing else to do... */
49495043 ret = NM_ACT_STAGE_RETURN_STOP;
49505044 } else
49515045 _LOGW (LOGD_IP4, "unhandled IPv4 config method '%s'; will fail", method);
50085102 gboolean routes_full_sync;
50095103 gboolean ignore_auto_routes = FALSE;
50105104 gboolean ignore_auto_dns = FALSE;
5105 gboolean auto_method = FALSE;
50115106
50125107 /* Apply ignore-auto-routes and ignore-auto-dns settings */
50135108 connection = nm_device_get_applied_connection (self);
50175112 if (s_ip6) {
50185113 ignore_auto_routes = nm_setting_ip_config_get_ignore_auto_routes (s_ip6);
50195114 ignore_auto_dns = nm_setting_ip_config_get_ignore_auto_dns (s_ip6);
5115
5116 if (NM_IN_STRSET (nm_setting_ip_config_get_method (s_ip6),
5117 NM_SETTING_IP6_CONFIG_METHOD_AUTO,
5118 NM_SETTING_IP6_CONFIG_METHOD_DHCP))
5119 auto_method = TRUE;
50205120 }
50215121 }
50225122
50235123 /* If no config was passed in, create a new one */
50245124 composite = nm_ip6_config_new (nm_device_get_ip_ifindex (self));
5125 init_ip6_config_dns_priority (self, composite);
50255126
50265127 if (commit)
50275128 ensure_con_ip6_config (self);
5129
50285130 g_assert (composite);
50295131
50305132 /* Merge all the IP configs into the composite config */
50805182 goto END_ADD_DEFAULT_ROUTE;
50815183 }
50825184
5083 if (nm_device_uses_generated_assumed_connection (self)) {
5084 /* a generate-assumed-connection always detects the default route from platform */
5185 /* a generated-assumed connection detects the default route from the platform,
5186 * but if the IP method is automatic we need to update the default route to
5187 * maintain connectivity.
5188 */
5189 if (nm_device_uses_generated_assumed_connection (self) && !auto_method)
50855190 goto END_ADD_DEFAULT_ROUTE;
5086 }
50875191
50885192 /* At this point, we treat assumed and non-assumed connections alike.
50895193 * For assumed connections we do that because we still manage RA and DHCP
78947998
78957999 g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
78968000
8001 _LOGD (LOGD_IP4, "ip4-config: update (commit=%d, routes-full-sync=%d, new-config=%p)",
8002 commit, routes_full_sync, new_config);
8003
78978004 priv = NM_DEVICE_GET_PRIVATE (self);
78988005 ip_ifindex = nm_device_get_ip_ifindex (self);
78998006
79278034 * this causes a re-read and reset. This should only happen for relevant changes */
79288035 nm_ip4_config_replace (old_config, new_config, &has_changes);
79298036 if (has_changes) {
7930 _LOGD (LOGD_IP4, "update IP4Config instance (%s)",
8037 _LOGD (LOGD_IP4, "ip4-config: update IP4Config instance (%s)",
79318038 nm_exported_object_get_path (NM_EXPORTED_OBJECT (old_config)));
79328039 }
79338040 } else {
79378044 if (success && !nm_exported_object_is_exported (NM_EXPORTED_OBJECT (new_config)))
79388045 nm_exported_object_export (NM_EXPORTED_OBJECT (new_config));
79398046
7940 _LOGD (LOGD_IP4, "set IP4Config instance (%s)",
8047 _LOGD (LOGD_IP4, "ip4-config: set IP4Config instance (%s)",
79418048 nm_exported_object_get_path (NM_EXPORTED_OBJECT (new_config)));
79428049 }
79438050 } else if (old_config) {
79448051 has_changes = TRUE;
79458052 priv->ip4_config = NULL;
7946 _LOGD (LOGD_IP4, "clear IP4Config instance (%s)",
8053 _LOGD (LOGD_IP4, "ip4-config: clear IP4Config instance (%s)",
79478054 nm_exported_object_get_path (NM_EXPORTED_OBJECT (old_config)));
79488055 /* Device config is invalid if combined config is invalid */
79498056 g_clear_object (&priv->dev_ip4_config);
79628069 nm_exported_object_clear_and_unexport (&old_config);
79638070
79648071 if (nm_device_uses_generated_assumed_connection (self)) {
7965 NMConnection *connection = nm_device_get_applied_connection (self);
79668072 NMConnection *settings_connection = NM_CONNECTION (nm_device_get_settings_connection (self));
79678073 NMSetting *s_ip4;
79688074
7969 g_object_freeze_notify (G_OBJECT (connection));
79708075 g_object_freeze_notify (G_OBJECT (settings_connection));
79718076
79728077 nm_connection_remove_setting (settings_connection, NM_TYPE_SETTING_IP4_CONFIG);
79738078 s_ip4 = nm_ip4_config_create_setting (priv->ip4_config);
79748079 nm_connection_add_setting (settings_connection, s_ip4);
79758080
7976 nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP4_CONFIG);
7977 s_ip4 = nm_ip4_config_create_setting (priv->ip4_config);
7978 nm_connection_add_setting (connection, s_ip4);
7979
79808081 g_object_thaw_notify (G_OBJECT (settings_connection));
7981 g_object_thaw_notify (G_OBJECT (connection));
79828082 }
79838083
79848084 nm_device_queue_recheck_assume (self);
80698169
80708170 g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
80718171
8172 _LOGD (LOGD_IP6, "ip6-config: update (commit=%d, routes-full-sync=%d, new-config=%p)",
8173 commit, routes_full_sync, new_config);
8174
80728175 priv = NM_DEVICE_GET_PRIVATE (self);
80738176 ip_ifindex = nm_device_get_ip_ifindex (self);
80748177
80968199 * this causes a re-read and reset. This should only happen for relevant changes */
80978200 nm_ip6_config_replace (old_config, new_config, &has_changes);
80988201 if (has_changes) {
8099 _LOGD (LOGD_IP6, "update IP6Config instance (%s)",
8202 _LOGD (LOGD_IP6, "ip6-config: update IP6Config instance (%s)",
81008203 nm_exported_object_get_path (NM_EXPORTED_OBJECT (old_config)));
81018204 }
81028205 } else {
81068209 if (success && !nm_exported_object_is_exported (NM_EXPORTED_OBJECT (new_config)))
81078210 nm_exported_object_export (NM_EXPORTED_OBJECT (new_config));
81088211
8109 _LOGD (LOGD_IP6, "set IP6Config instance (%s)",
8212 _LOGD (LOGD_IP6, "ip6-config: set IP6Config instance (%s)",
81108213 nm_exported_object_get_path (NM_EXPORTED_OBJECT (new_config)));
81118214 }
81128215 } else if (old_config) {
81138216 has_changes = TRUE;
81148217 priv->ip6_config = NULL;
8115 _LOGD (LOGD_IP6, "clear IP6Config instance (%s)",
8218 _LOGD (LOGD_IP6, "ip6-config: clear IP6Config instance (%s)",
81168219 nm_exported_object_get_path (NM_EXPORTED_OBJECT (old_config)));
81178220 }
81188221
81278230 nm_exported_object_clear_and_unexport (&old_config);
81288231
81298232 if (nm_device_uses_generated_assumed_connection (self)) {
8130 NMConnection *connection = nm_device_get_applied_connection (self);
81318233 NMConnection *settings_connection = NM_CONNECTION (nm_device_get_settings_connection (self));
81328234 NMSetting *s_ip6;
81338235
8134 g_object_freeze_notify (G_OBJECT (connection));
81358236 g_object_freeze_notify (G_OBJECT (settings_connection));
81368237
81378238 nm_connection_remove_setting (settings_connection, NM_TYPE_SETTING_IP6_CONFIG);
81388239 s_ip6 = nm_ip6_config_create_setting (priv->ip6_config);
81398240 nm_connection_add_setting (settings_connection, s_ip6);
81408241
8141 nm_connection_remove_setting (connection, NM_TYPE_SETTING_IP6_CONFIG);
8142 s_ip6 = nm_ip6_config_create_setting (priv->ip6_config);
8143 nm_connection_add_setting (connection, s_ip6);
8144
81458242 g_object_thaw_notify (G_OBJECT (settings_connection));
8146 g_object_thaw_notify (G_OBJECT (connection));
81478243 }
81488244
81498245 nm_device_queue_recheck_assume (self);
85448640 nm_device_update_hw_address (self);
85458641
85468642 _update_ip4_address (self);
8643
8644 /* when the link comes up, we must restore IP configuration if necessary. */
8645 if (priv->ip4_state == IP_DONE) {
8646 if (!ip4_config_merge_and_apply (self, NULL, TRUE, NULL))
8647 _LOGW (LOGD_IP4, "failed applying IP4 config after bringing link up");
8648 }
8649 if (priv->ip6_state == IP_DONE) {
8650 if (!ip6_config_merge_and_apply (self, TRUE, NULL))
8651 _LOGW (LOGD_IP6, "failed applying IP6 config after bringing link up");
8652 }
8653
85478654 return TRUE;
85488655 }
85498656
87818888 NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
87828889 int ifindex;
87838890 gboolean capture_resolv_conf;
8784 NMDnsManagerResolvConfMode resolv_conf_mode;
87858891
87868892 /* If a commit is scheduled, this function would potentially interfere with
87878893 * it changing IP configurations before they are applied. Postpone the
88008906 if (!ifindex)
88018907 return;
88028908
8803 resolv_conf_mode = nm_dns_manager_get_resolv_conf_mode (nm_dns_manager_get ());
8804 capture_resolv_conf = initial && (resolv_conf_mode == NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT);
8909 capture_resolv_conf = initial
8910 && nm_dns_manager_get_resolv_conf_explicit (nm_dns_manager_get ());
88058911
88068912 /* IPv4 */
88078913 g_clear_object (&priv->ext_ip4_config);
88728978 NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
88738979 int ifindex;
88748980 gboolean capture_resolv_conf;
8875 NMDnsManagerResolvConfMode resolv_conf_mode;
88768981
88778982 /* If a commit is scheduled, this function would potentially interfere with
88788983 * it changing IP configurations before they are applied. Postpone the
88918996 if (!ifindex)
88928997 return;
88938998
8894 resolv_conf_mode = nm_dns_manager_get_resolv_conf_mode (nm_dns_manager_get ());
8895 capture_resolv_conf = initial && (resolv_conf_mode == NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT);
8999 capture_resolv_conf = initial
9000 && nm_dns_manager_get_resolv_conf_explicit (nm_dns_manager_get ());
88969001
88979002 /* IPv6 */
88989003 g_clear_object (&priv->ext_ip6_config);
89939098 g_object_ref (self);
89949099 update_ip6_config (self, FALSE);
89959100
8996 if ( nm_platform_link_get (NM_PLATFORM_GET, priv->ifindex)
8997 && priv->state < NM_DEVICE_STATE_DEACTIVATING) {
8998 /* Handle DAD falures */
9101 if ( priv->state < NM_DEVICE_STATE_DEACTIVATING
9102 && nm_platform_link_get (NM_PLATFORM_GET, priv->ifindex)) {
9103 /* Handle DAD failures */
89999104 for (iter = priv->dad6_failed_addrs; iter; iter = g_slist_next (iter)) {
90009105 NMPlatformIP6Address *addr = iter->data;
90019106
92769381 * @allow_state_transition: if %FALSE, setting flags never triggers a device
92779382 * state change. If %TRUE, the device can change state, if it is real and
92789383 * switches from managed to unmanaged (or vice versa).
9384 * @now: whether the state change should be immediate or delayed
92799385 * @reason: the device state reason passed to nm_device_state_changed() if
92809386 * the device becomes managed/unmanaged. This is only relevant if the
92819387 * device switches state and if @allow_state_transition is %TRUE.
92879393 NMUnmanagedFlags flags,
92889394 NMUnmanFlagOp set_op,
92899395 gboolean allow_state_transition,
9396 gboolean now,
92909397 NMDeviceStateReason reason)
92919398 {
92929399 NMDevicePrivate *priv;
92939400 gboolean was_managed, transition_state;
92949401 NMUnmanagedFlags old_flags, old_mask;
9402 NMDeviceState new_state;
92959403 const char *operation = NULL;
92969404 char str1[512];
92979405 char str2[512];
93639471 #undef _FMT
93649472
93659473 if (transition_state) {
9366 if (was_managed)
9367 nm_device_state_changed (self, NM_DEVICE_STATE_UNMANAGED, reason);
9474 new_state = was_managed ? NM_DEVICE_STATE_UNMANAGED : NM_DEVICE_STATE_UNAVAILABLE;
9475 if (now)
9476 nm_device_state_changed (self, new_state, reason);
93689477 else
9369 nm_device_state_changed (self, NM_DEVICE_STATE_UNAVAILABLE, reason);
9478 nm_device_queue_state (self, new_state, reason);
93709479 }
93719480 }
93729481
93849493 NMUnmanagedFlags flags,
93859494 NMUnmanFlagOp set_op)
93869495 {
9387 _set_unmanaged_flags (self, flags, set_op, FALSE, NM_DEVICE_STATE_REASON_NONE);
9496 _set_unmanaged_flags (self, flags, set_op, FALSE, FALSE, NM_DEVICE_STATE_REASON_NONE);
93889497 }
93899498
93909499 /**
94059514 NMUnmanFlagOp set_op,
94069515 NMDeviceStateReason reason)
94079516 {
9408 _set_unmanaged_flags (self, flags, set_op, TRUE, reason);
9517 _set_unmanaged_flags (self, flags, set_op, TRUE, TRUE, reason);
9518 }
9519
9520 void
9521 nm_device_set_unmanaged_by_flags_queue (NMDevice *self,
9522 NMUnmanagedFlags flags,
9523 NMUnmanFlagOp set_op,
9524 NMDeviceStateReason reason)
9525 {
9526 _set_unmanaged_flags (self, flags, set_op, TRUE, FALSE, reason);
94099527 }
94109528
94119529 void
97099827 return available;
97109828 }
97119829
9712 static void
9713 available_connections_notify (NMDevice *self)
9714 {
9715 _notify (self, PROP_AVAILABLE_CONNECTIONS);
9716 }
9717
97189830 static gboolean
97199831 available_connections_del_all (NMDevice *self)
97209832 {
98149926 }
98159927
98169928 if (changed)
9817 available_connections_notify (self);
9929 _notify (self, PROP_AVAILABLE_CONNECTIONS);
98189930 available_connections_check_delete_unrealized (self);
98199931 }
98209932
988810000 changed = available_connections_del (self, connection);
988910001
989010002 if (changed) {
9891 available_connections_notify (self);
10003 _notify (self, PROP_AVAILABLE_CONNECTIONS);
989210004 available_connections_check_delete_unrealized (self);
989310005 }
989410006 }
990110013 g_return_if_fail (NM_IS_DEVICE (self));
990210014
990310015 if (available_connections_del (self, connection)) {
9904 available_connections_notify (self);
10016 _notify (self, PROP_AVAILABLE_CONNECTIONS);
990510017 available_connections_check_delete_unrealized (self);
990610018 }
990710019 }
1052310635
1052410636 if (state <= NM_DEVICE_STATE_UNAVAILABLE) {
1052510637 if (available_connections_del_all (self))
10526 available_connections_notify (self);
10638 _notify (self, PROP_AVAILABLE_CONNECTIONS);
1052710639 if (old_state > NM_DEVICE_STATE_UNAVAILABLE)
1052810640 _clear_queued_act_request (priv);
1052910641 }
488488 NMUnmanagedFlags flags,
489489 NMUnmanFlagOp set_op,
490490 NMDeviceStateReason reason);
491 void nm_device_set_unmanaged_by_flags_queue (NMDevice *self,
492 NMUnmanagedFlags flags,
493 NMUnmanFlagOp set_op,
494 NMDeviceStateReason reason);
491495 void nm_device_set_unmanaged_by_user_config (NMDevice *self, const GSList *unmanaged_specs);
492496 void nm_device_set_unmanaged_by_user_udev (NMDevice *self);
493497 void nm_device_set_unmanaged_by_quitting (NMDevice *device);
530530 neigh->valid = TRUE;
531531
532532 out:
533 return nm_unauto (&neigh);
533 return g_steal_pointer (&neigh);
534534 }
535535
536536 static GVariant *
693693 LOG_NEIGH_ARG (neigh));
694694
695695 changed = TRUE;
696 g_hash_table_add (priv->lldp_neighbors, nm_unauto (&neigh));
696 g_hash_table_add (priv->lldp_neighbors, g_steal_pointer (&neigh));
697697
698698 done:
699699 if (changed)
354354 NM = @NM@
355355 NMEDIT = @NMEDIT@
356356 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
357 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
357358 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
358359 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
359360 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
317317 2000,
318318 NULL,
319319 NULL);
320 g_variant_get (ret, "(u)", &pid);
321
322 if (pid != priv->teamd_pid)
323 teamd_cleanup (device, FALSE);
320
321 if (ret) {
322 g_variant_get (ret, "(u)", &pid);
323 if (pid != priv->teamd_pid)
324 teamd_cleanup (device, FALSE);
325 } else {
326 _LOGW (LOGD_TEAM, "failed to determine D-Bus name owner");
327 /* If we can't determine the bus name owner, don't kill our
328 * teamd instance. Hopefully another existing teamd just died and
329 * our instance will be able to grab the bus name.
330 */
331 }
324332 }
325333
326334 /* Grab a teamd control handle even if we aren't going to use it
526526 NM = @NM@
527527 NMEDIT = @NMEDIT@
528528 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
529 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
529530 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
530531 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
531532 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
393393 NM = @NM@
394394 NMEDIT = @NMEDIT@
395395 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
396 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
396397 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
397398 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
398399 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
2525 #include <unistd.h>
2626 #include <errno.h>
2727
28 #include "nm-common-macros.h"
2829 #include "nm-device.h"
2930 #include "nm-device-wifi.h"
3031 #include "nm-device-private.h"
695696 "WLAN",
696697 "ALICE-WLAN",
697698 "Speedport W 501V",
699 "TURBONETT",
698700 };
699701
700702 #define ARRAY_SIZE(a) (sizeof (a) / sizeof (a[0]))
521521 NM = @NM@
522522 NMEDIT = @NMEDIT@
523523 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
524 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
524525 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
525526 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
526527 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
362362 NM = @NM@
363363 NMEDIT = @NMEDIT@
364364 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
365 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
365366 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
366367 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
367368 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
316316 NM = @NM@
317317 NMEDIT = @NMEDIT@
318318 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
319 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
319320 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
320321 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
321322 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
883883
884884 g_clear_pointer (&priv->iface, g_free);
885885 g_clear_pointer (&priv->hostname, g_free);
886 g_clear_pointer (&priv->fqdn, g_free);
886887 g_clear_pointer (&priv->uuid, g_free);
888 g_clear_pointer (&priv->client_id, g_bytes_unref);
887889
888890 if (priv->hwaddr) {
889891 g_byte_array_free (priv->hwaddr, TRUE);
3535 #define HOSTNAME4_TAG "send host-name"
3636 #define HOSTNAME4_FORMAT HOSTNAME4_TAG " \"%s\"; # added by NetworkManager"
3737
38 #define FQDN_TAG "send fqdn.fqdn"
39 #define FQDN_FORMAT FQDN_TAG " \"%s\"; # added by NetworkManager"
38 #define FQDN_TAG_PREFIX "send fqdn."
39 #define FQDN_TAG FQDN_TAG_PREFIX "fqdn"
40 #define FQDN_FORMAT FQDN_TAG " \"%s\"; # added by NetworkManager"
4041
4142 #define ALSOREQ_TAG "also request "
4243
204205 GBytes **out_new_client_id)
205206 {
206207 GString *new_contents;
207 GPtrArray *alsoreq;
208 GPtrArray *alsoreq, *fqdn_opts;
208209 int i;
209210
210211 g_return_val_if_fail (!anycast_addr || nm_utils_hwaddr_valid (anycast_addr, ETH_ALEN), NULL);
211212
212213 new_contents = g_string_new (_("# Created by NetworkManager\n"));
213214 alsoreq = g_ptr_array_sized_new (5);
215 fqdn_opts = g_ptr_array_sized_new (5);
214216
215217 if (orig_contents) {
216218 char **lines, **line;
241243 continue;
242244 if (strncmp (p, FQDN_TAG, strlen (FQDN_TAG)) == 0)
243245 continue;
246 }
247
248 /* To let user's FQDN options (except "fqdn.fqdn") override the
249 * default ones set by NM, add them later
250 */
251 if (!strncmp (p, FQDN_TAG_PREFIX, NM_STRLEN (FQDN_TAG_PREFIX))) {
252 g_ptr_array_add (fqdn_opts, g_strdup (p + NM_STRLEN (FQDN_TAG_PREFIX)));
253 continue;
244254 }
245255
246256 /* Ignore 'script' since we pass our own */
318328 g_free (t);
319329 }
320330 g_ptr_array_free (alsoreq, TRUE);
331
332 for (i = 0; i < fqdn_opts->len; i++) {
333 char *t = g_ptr_array_index (fqdn_opts, i);
334
335 if (i == 0)
336 g_string_append_printf (new_contents, "\n# FQDN options from %s\n", orig_path);
337 g_string_append_printf (new_contents, FQDN_TAG_PREFIX "%s\n", t);
338 g_free (t);
339 }
340 g_ptr_array_free (fqdn_opts, TRUE);
321341
322342 g_string_append_c (new_contents, '\n');
323343
5151 const char *def_leasefile;
5252 char *lease_file;
5353 char *pid_file;
54 NMDhcpListener *dhcp_listener;
5455 } NMDhcpDhclientPrivate;
5556
5657 static const char *
621622 if (!priv->def_leasefile)
622623 priv->def_leasefile = SYSCONFDIR "/dhclient6.leases";
623624
624 g_signal_connect (nm_dhcp_listener_get (),
625 priv->dhcp_listener = g_object_ref (nm_dhcp_listener_get ());
626 g_signal_connect (priv->dhcp_listener,
625627 NM_DHCP_LISTENER_EVENT,
626628 G_CALLBACK (nm_dhcp_client_handle_event),
627629 self);
632634 {
633635 NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (object);
634636
635 g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
636 G_CALLBACK (nm_dhcp_client_handle_event),
637 NM_DHCP_DHCLIENT (object));
637 if (priv->dhcp_listener) {
638 g_signal_handlers_disconnect_by_func (priv->dhcp_listener,
639 G_CALLBACK (nm_dhcp_client_handle_event),
640 NM_DHCP_DHCLIENT (object));
641 g_clear_object (&priv->dhcp_listener);
642 }
638643
639644 g_free (priv->pid_file);
640645 g_free (priv->conf_file);
4343
4444 typedef struct {
4545 char *pid_file;
46 NMDhcpListener *dhcp_listener;
4647 } NMDhcpDhcpcdPrivate;
4748
4849 static const char *
190191 static void
191192 nm_dhcp_dhcpcd_init (NMDhcpDhcpcd *self)
192193 {
193 g_signal_connect (nm_dhcp_listener_get (),
194 NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (self);
195
196 priv->dhcp_listener = g_object_ref (nm_dhcp_listener_get ());
197 g_signal_connect (priv->dhcp_listener,
194198 NM_DHCP_LISTENER_EVENT,
195199 G_CALLBACK (nm_dhcp_client_handle_event),
196200 self);
201205 {
202206 NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (object);
203207
204 g_signal_handlers_disconnect_by_func (nm_dhcp_listener_get (),
205 G_CALLBACK (nm_dhcp_client_handle_event),
206 NM_DHCP_DHCPCD (object));
208 if (priv->dhcp_listener) {
209 g_signal_handlers_disconnect_by_func (priv->dhcp_listener,
210 G_CALLBACK (nm_dhcp_client_handle_event),
211 NM_DHCP_DHCPCD (object));
212 g_clear_object (&priv->dhcp_listener);
213 }
207214
208215 g_free (priv->pid_file);
209216
526526 NM = @NM@
527527 NMEDIT = @NMEDIT@
528528 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
529 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
529530 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
530531 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
531532 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
333333 NULL);
334334 }
335335
336 static const char *fqdn_options_override_orig = \
337 "\n"
338 "send fqdn.fqdn \"foobar.com\"\n" /* NM must ignore this ... */
339 "send fqdn.encoded off;\n" /* ... and honor these */
340 "send fqdn.server-update off;\n";
341
342 static const char *fqdn_options_override_expected = \
343 "# Created by NetworkManager\n"
344 "# Merged from /path/to/dhclient.conf\n"
345 "\n"
346 "send fqdn.fqdn \"example2.com\"; # added by NetworkManager\n"
347 "send fqdn.encoded on;\n"
348 "send fqdn.server-update on;\n"
349 "\n"
350 "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n"
351 "option ms-classless-static-routes code 249 = array of unsigned integer 8;\n"
352 "option wpad code 252 = string;\n"
353 "\n"
354 "also request rfc3442-classless-static-routes;\n"
355 "also request ms-classless-static-routes;\n"
356 "also request static-routes;\n"
357 "also request wpad;\n"
358 "also request ntp-servers;\n"
359 "\n"
360 "# FQDN options from /path/to/dhclient.conf\n"
361 "send fqdn.encoded off;\n"
362 "send fqdn.server-update off;\n\n";
363
364 static void
365 test_fqdn_options_override (void)
366 {
367 test_config (fqdn_options_override_orig,
368 fqdn_options_override_expected,
369 FALSE, NULL,
370 "example2.com", NULL,
371 NULL,
372 "eth0",
373 NULL);
374 }
375
336376 /*******************************************/
337377
338378 static const char *override_hostname_orig = \
803843 g_test_add_func ("/dhcp/dhclient/existing-hex-client-id", test_existing_hex_client_id);
804844 g_test_add_func ("/dhcp/dhclient/existing-ascii-client-id", test_existing_ascii_client_id);
805845 g_test_add_func ("/dhcp/dhclient/fqdn", test_fqdn);
846 g_test_add_func ("/dhcp/dhclient/fqdn_options_override", test_fqdn_options_override);
806847 g_test_add_func ("/dhcp/dhclient/override_hostname", test_override_hostname);
807848 g_test_add_func ("/dhcp/dhclient/override_hostname6", test_override_hostname6);
808849 g_test_add_func ("/dhcp/dhclient/nonfqdn_hostname6", test_nonfqdn_hostname6);
2525 #include <sys/wait.h>
2626 #include <arpa/inet.h>
2727 #include <sys/stat.h>
28 #include <linux/if.h>
2829
2930 #include "nm-dns-dnsmasq.h"
31 #include "nm-core-internal.h"
32 #include "nm-platform.h"
3033 #include "nm-utils.h"
3134 #include "nm-ip4-config.h"
3235 #include "nm-ip6-config.h"
33 #include "nm-dns-utils.h"
3436 #include "nm-bus-manager.h"
3537 #include "NetworkManagerUtils.h"
3638
4749 typedef struct {
4850 GDBusProxy *dnsmasq;
4951 GCancellable *dnsmasq_cancellable;
52 GCancellable *update_cancellable;
5053 gboolean running;
5154
5255 GVariant *set_server_ex_args;
6770
6871 /*****************************************************************************/
6972
73 static char **
74 get_ip4_rdns_domains (NMIP4Config *ip4)
75 {
76 char **strv;
77 GPtrArray *domains = NULL;
78 int i;
79
80 g_return_val_if_fail (ip4 != NULL, NULL);
81
82 domains = g_ptr_array_sized_new (5);
83
84 for (i = 0; i < nm_ip4_config_get_num_addresses (ip4); i++) {
85 const NMPlatformIP4Address *address = nm_ip4_config_get_address (ip4, i);
86
87 nm_utils_get_reverse_dns_domains_ip4 (address->address, address->plen, domains);
88 }
89
90 for (i = 0; i < nm_ip4_config_get_num_routes (ip4); i++) {
91 const NMPlatformIP4Route *route = nm_ip4_config_get_route (ip4, i);
92
93 nm_utils_get_reverse_dns_domains_ip4 (route->network, route->plen, domains);
94 }
95
96 /* Terminating NULL so we can use g_strfreev() to free it */
97 g_ptr_array_add (domains, NULL);
98
99 /* Free the array and return NULL if the only element was the ending NULL */
100 strv = (char **) g_ptr_array_free (domains, (domains->len == 1));
101
102 return _nm_utils_strv_cleanup (strv, FALSE, FALSE, TRUE);
103 }
104
105 static char **
106 get_ip6_rdns_domains (NMIP6Config *ip6)
107 {
108 char **strv;
109 GPtrArray *domains = NULL;
110 int i;
111
112 g_return_val_if_fail (ip6 != NULL, NULL);
113
114 domains = g_ptr_array_sized_new (5);
115
116 for (i = 0; i < nm_ip6_config_get_num_addresses (ip6); i++) {
117 const NMPlatformIP6Address *address = nm_ip6_config_get_address (ip6, i);
118
119 nm_utils_get_reverse_dns_domains_ip6 (&address->address, address->plen, domains);
120 }
121
122 for (i = 0; i < nm_ip6_config_get_num_routes (ip6); i++) {
123 const NMPlatformIP6Route *route = nm_ip6_config_get_route (ip6, i);
124
125 nm_utils_get_reverse_dns_domains_ip6 (&route->network, route->plen, domains);
126 }
127
128 /* Terminating NULL so we can use g_strfreev() to free it */
129 g_ptr_array_add (domains, NULL);
130
131 /* Free the array and return NULL if the only element was the ending NULL */
132 strv = (char **) g_ptr_array_free (domains, (domains->len == 1));
133
134 return _nm_utils_strv_cleanup (strv, FALSE, FALSE, TRUE);
135 }
136
70137 static void
71138 add_dnsmasq_nameserver (NMDnsDnsmasq *self,
72139 GVariantBuilder *servers,
88155 }
89156
90157 static gboolean
91 add_ip4_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP4Config *ip4, gboolean split)
92 {
93 char buf[INET_ADDRSTRLEN];
158 add_ip4_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP4Config *ip4,
159 const char *iface, gboolean split)
160 {
161 char buf[INET_ADDRSTRLEN + 1 + IFNAMSIZ];
162 char buf2[INET_ADDRSTRLEN];
94163 in_addr_t addr;
95164 int nnameservers, i_nameserver, n, i;
96165 gboolean added = FALSE;
97166
167 g_return_val_if_fail (iface, FALSE);
98168 nnameservers = nm_ip4_config_get_num_nameservers (ip4);
99169
100170 if (split) {
105175
106176 for (i_nameserver = 0; i_nameserver < nnameservers; i_nameserver++) {
107177 addr = nm_ip4_config_get_nameserver (ip4, i_nameserver);
108 nm_utils_inet4_ntop (addr, buf);
178 g_snprintf (buf, sizeof (buf), "%s@%s",
179 nm_utils_inet4_ntop (addr, buf2), iface);
109180
110181 /* searches are preferred over domains */
111182 n = nm_ip4_config_get_num_searches (ip4);
132203 /* Ensure reverse-DNS works by directing queries for in-addr.arpa
133204 * domains to the split domain's nameserver.
134205 */
135 domains = nm_dns_utils_get_ip4_rdns_domains (ip4);
206 domains = get_ip4_rdns_domains (ip4);
136207 if (domains) {
137208 for (iter = domains; iter && *iter; iter++)
138209 add_dnsmasq_nameserver (self, servers, buf, *iter);
139210 g_strfreev (domains);
140 added = TRUE;
141211 }
142212 }
143213 }
144214
145 /* If no searches or domains, just add the namservers */
215 /* If no searches or domains, just add the nameservers */
146216 if (!added) {
147217 for (i = 0; i < nnameservers; i++) {
148218 addr = nm_ip4_config_get_nameserver (ip4, i);
149 add_dnsmasq_nameserver (self, servers,
150 nm_utils_inet4_ntop (addr, NULL), NULL);
219 g_snprintf (buf, sizeof (buf), "%s@%s",
220 nm_utils_inet4_ntop (addr, buf2), iface);
221 add_dnsmasq_nameserver (self, servers, buf, NULL);
151222 }
152223 }
153224
157228 static char *
158229 ip6_addr_to_string (const struct in6_addr *addr, const char *iface)
159230 {
160 char *buf;
161
162 if (IN6_IS_ADDR_V4MAPPED (addr)) {
163 buf = g_malloc (INET_ADDRSTRLEN);
231 char buf[NM_UTILS_INET_ADDRSTRLEN];
232
233 if (IN6_IS_ADDR_V4MAPPED (addr))
164234 nm_utils_inet4_ntop (addr->s6_addr32[3], buf);
165 } else if (!iface || !iface[0] || !IN6_IS_ADDR_LINKLOCAL (addr)) {
166 buf = g_malloc (INET6_ADDRSTRLEN);
235 else
167236 nm_utils_inet6_ntop (addr, buf);
168 } else {
169 /* Need to scope the address with %<zone-id>. Before dnsmasq 2.58,
170 * only '@' was supported as delimiter. Since 2.58, '@' and '%'
171 * are supported. Due to a bug, since 2.73 only '%' works properly
172 * as "server" address.
173 */
174 buf = g_strconcat (nm_utils_inet6_ntop (addr, NULL), "%", iface, NULL);
175 }
176 return buf;
237
238 /* Need to scope link-local addresses with %<zone-id>. Before dnsmasq 2.58,
239 * only '@' was supported as delimiter. Since 2.58, '@' and '%' are
240 * supported. Due to a bug, since 2.73 only '%' works properly as "server"
241 * address.
242 */
243 return g_strdup_printf ("%s%c%s",
244 buf,
245 IN6_IS_ADDR_LINKLOCAL (addr) ? '%' : '@',
246 iface);
177247 }
178248
179249 static void
201271 }
202272
203273 static gboolean
204 add_ip6_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP6Config *ip6, gboolean split)
274 add_ip6_config (NMDnsDnsmasq *self, GVariantBuilder *servers, NMIP6Config *ip6,
275 const char *iface, gboolean split)
205276 {
206277 const struct in6_addr *addr;
207278 char *buf = NULL;
208279 int nnameservers, i_nameserver, n, i;
209280 gboolean added = FALSE;
210 const char *iface;
211
281
282 g_return_val_if_fail (iface, FALSE);
212283 nnameservers = nm_ip6_config_get_num_nameservers (ip6);
213284
214 iface = g_object_get_data (G_OBJECT (ip6), IP_CONFIG_IFACE_TAG);
215 g_assert (iface);
216
217285 if (split) {
286 char **domains, **iter;
287
218288 if (nnameservers == 0)
219289 return FALSE;
220290
244314 }
245315 }
246316
317 /* Ensure reverse-DNS works by directing queries for ip6.arpa
318 * domains to the split domain's nameserver.
319 */
320 domains = get_ip6_rdns_domains (ip6);
321 if (domains) {
322 for (iter = domains; iter && *iter; iter++)
323 add_dnsmasq_nameserver (self, servers, buf, *iter);
324 g_strfreev (domains);
325 }
326
247327 g_free (buf);
248328 }
249329 }
250330
251 /* If no searches or domains, just add the namservers */
331 /* If no searches or domains, just add the nameservers */
252332 if (!added) {
253333 for (i = 0; i < nnameservers; i++) {
254334 addr = nm_ip6_config_get_nameserver (ip6, i);
263343 return TRUE;
264344 }
265345
266 static void
267 dnsmasq_update_done (GObject *source, GAsyncResult *res, gpointer user_data)
268 {
269 NMDnsDnsmasq *self = NM_DNS_DNSMASQ (user_data);
270 NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
346 static gboolean
347 add_ip_config_data (NMDnsDnsmasq *self, GVariantBuilder *servers, const NMDnsIPConfigData *data)
348 {
349 if (NM_IS_IP4_CONFIG (data->config)) {
350 return add_ip4_config (self,
351 servers,
352 (NMIP4Config *) data->config,
353 data->iface,
354 data->type == NM_DNS_IP_CONFIG_TYPE_VPN);
355 } else if (NM_IS_IP6_CONFIG (data->config)) {
356 return add_ip6_config (self,
357 servers,
358 (NMIP6Config *) data->config,
359 data->iface,
360 data->type == NM_DNS_IP_CONFIG_TYPE_VPN);
361 } else
362 g_return_val_if_reached (FALSE);
363 }
364
365 static void
366 dnsmasq_clear_cache_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
367 {
368 NMDnsDnsmasq *self;
271369 gs_free_error GError *error = NULL;
272370 gs_unref_variant GVariant *response = NULL;
273371
274 response = g_dbus_proxy_call_finish (priv->dnsmasq, res, &error);
372 response = g_dbus_proxy_call_finish (proxy, res, &error);
373 if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
374 return;
375
376 self = NM_DNS_DNSMASQ (user_data);
377
378 if (!response)
379 _LOGW ("dnsmasq cache clear failed: %s", error->message);
380 else
381 _LOGD ("dnsmasq update successful, cache cleared");
382 }
383
384 static void
385 dnsmasq_update_done (GDBusProxy *proxy, GAsyncResult *res, gpointer user_data)
386 {
387 NMDnsDnsmasq *self;
388 NMDnsDnsmasqPrivate *priv;
389 gs_free_error GError *error = NULL;
390 gs_unref_variant GVariant *response = NULL;
391
392 response = g_dbus_proxy_call_finish (proxy, res, &error);
393 if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
394 return;
395
396 self = NM_DNS_DNSMASQ (user_data);
397 priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
398
275399 if (!response)
276400 _LOGW ("dnsmasq update failed: %s", error->message);
277 else
278 _LOGD ("dnsmasq update successful");
401 else {
402 g_dbus_proxy_call (priv->dnsmasq,
403 "ClearCache",
404 NULL,
405 G_DBUS_CALL_FLAGS_NONE,
406 -1,
407 priv->update_cancellable,
408 (GAsyncReadyCallback) dnsmasq_clear_cache_done,
409 self);
410 }
279411 }
280412
281413 static void
288420
289421 if (priv->running) {
290422 _LOGD ("trying to update dnsmasq nameservers");
423
424 nm_clear_g_cancellable (&priv->update_cancellable);
425 priv->update_cancellable = g_cancellable_new ();
291426
292427 g_dbus_proxy_call (priv->dnsmasq,
293428 "SetServersEx",
294429 priv->set_server_ex_args,
295430 G_DBUS_CALL_FLAGS_NONE,
296431 -1,
297 NULL,
432 priv->update_cancellable,
298433 (GAsyncReadyCallback) dnsmasq_update_done,
299434 self);
300435 g_clear_pointer (&priv->set_server_ex_args, g_variant_unref);
372507 NMBusManager *dbus_mgr;
373508 GDBusConnection *connection;
374509
375
376 if ( priv->running
377 || priv->dnsmasq
378 || priv->dnsmasq_cancellable)
379 return;
510 if (priv->running) {
511 /* the dnsmasq process is running. Nothing to do. */
512 return;
513 }
514
515 if (nm_dns_plugin_child_pid ((NMDnsPlugin *) self) > 0) {
516 /* if we already have a child process spawned, don't do
517 * it again. */
518 return;
519 }
380520
381521 dm_binary = nm_utils_find_helper ("dnsmasq", DNSMASQ_PATH, NULL);
382522 if (!dm_binary) {
408548 if (!pid)
409549 return;
410550
551 if ( priv->dnsmasq
552 || priv->dnsmasq_cancellable) {
553 /* we already have a proxy or are about to create it.
554 * We are done. */
555 return;
556 }
557
411558 dbus_mgr = nm_bus_manager_get ();
412559 g_return_if_fail (dbus_mgr);
413560
428575
429576 static gboolean
430577 update (NMDnsPlugin *plugin,
431 const GSList *vpn_configs,
432 const GSList *dev_configs,
433 const GSList *other_configs,
578 const NMDnsIPConfigData **configs,
434579 const NMGlobalDnsConfig *global_config,
435580 const char *hostname)
436581 {
437582 NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
438583 NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
439 const GSList *iter;
440584 GVariantBuilder servers;
441585
442586 start_dnsmasq (self);
446590 if (global_config)
447591 add_global_config (self, &servers, global_config);
448592 else {
449 /* Use split DNS for VPN configs */
450 for (iter = vpn_configs; iter; iter = g_slist_next (iter)) {
451 if (NM_IS_IP4_CONFIG (iter->data))
452 add_ip4_config (self, &servers, iter->data, TRUE);
453 else if (NM_IS_IP6_CONFIG (iter->data))
454 add_ip6_config (self, &servers, iter->data, TRUE);
455 }
456
457 /* Now add interface configs without split DNS */
458 for (iter = dev_configs; iter; iter = g_slist_next (iter)) {
459 if (NM_IS_IP4_CONFIG (iter->data))
460 add_ip4_config (self, &servers, iter->data, FALSE);
461 else if (NM_IS_IP6_CONFIG (iter->data))
462 add_ip6_config (self, &servers, iter->data, FALSE);
463 }
464
465 /* And any other random configs */
466 for (iter = other_configs; iter; iter = g_slist_next (iter)) {
467 if (NM_IS_IP4_CONFIG (iter->data))
468 add_ip4_config (self, &servers, iter->data, FALSE);
469 else if (NM_IS_IP6_CONFIG (iter->data))
470 add_ip6_config (self, &servers, iter->data, FALSE);
593 while (*configs) {
594 add_ip_config_data (self, &servers, *configs);
595 configs++;
471596 }
472597 }
473598
481606
482607 /****************************************************************/
483608
484 static const char *
485 dm_exit_code_to_msg (int status)
486 {
487 if (status == 1)
488 return "Configuration problem";
489 else if (status == 2)
490 return "Network access problem (address in use; permissions; etc)";
491 else if (status == 3)
492 return "Filesystem problem (missing file/directory; permissions; etc)";
493 else if (status == 4)
494 return "Memory allocation failure";
495 else if (status == 5)
496 return "Other problem";
497 else if (status >= 11)
498 return "Lease-script 'init' process failure";
499 return "Unknown error";
500 }
501
502609 static void
503610 child_quit (NMDnsPlugin *plugin, gint status)
504611 {
505612 NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
613 NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
506614 gboolean failed = TRUE;
507615 int err;
508616
509617 if (WIFEXITED (status)) {
510618 err = WEXITSTATUS (status);
511619 if (err) {
512 _LOGW ("dnsmasq exited with error: %s (%d)",
513 dm_exit_code_to_msg (err),
514 err);
515 } else
620 _LOGW ("dnsmasq exited with error: %s",
621 nm_utils_dnsmasq_status_to_string (err, NULL, 0));
622 } else {
623 _LOGD ("dnsmasq exited normally");
516624 failed = FALSE;
625 }
517626 } else if (WIFSTOPPED (status))
518627 _LOGW ("dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
519628 else if (WIFSIGNALED (status))
521630 else
522631 _LOGW ("dnsmasq died from an unknown cause");
523632
633 priv->running = FALSE;
634
524635 if (failed)
525636 g_signal_emit_by_name (self, NM_DNS_PLUGIN_FAILED);
526637 }
558669 NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (object);
559670
560671 nm_clear_g_cancellable (&priv->dnsmasq_cancellable);
672 nm_clear_g_cancellable (&priv->update_cancellable);
561673
562674 g_clear_object (&priv->dnsmasq);
563675
6060 #define DOMAIN_IS_VALID(domain) (*(domain))
6161 #endif
6262
63 G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
64
65 #define NM_DNS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
66 NM_TYPE_DNS_MANAGER, \
67 NMDnsManagerPrivate))
68
6963 #define HASH_LEN 20
7064
71 #ifdef RESOLVCONF_PATH
72 #define RESOLVCONF_SELECTED
73 #else
65 #ifndef RESOLVCONF_PATH
7466 #define RESOLVCONF_PATH "/sbin/resolvconf"
7567 #endif
7668
77 #ifdef NETCONFIG_PATH
78 #define NETCONFIG_SELECTED
79 #else
69 #ifndef NETCONFIG_PATH
8070 #define NETCONFIG_PATH "/sbin/netconfig"
8171 #endif
8272
8474 #define PLUGIN_RATELIMIT_BURST 5
8575 #define PLUGIN_RATELIMIT_DELAY 300
8676
87 NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager);
77 enum {
78 CONFIG_CHANGED,
79
80 LAST_SIGNAL
81 };
82
83 static guint signals[LAST_SIGNAL] = { 0 };
84
85 typedef enum {
86 SR_SUCCESS,
87 SR_NOTFOUND,
88 SR_ERROR
89 } SpawnResult;
8890
8991 /*********************************************************************************************/
9092
111113 /*********************************************************************************************/
112114
113115 typedef struct {
114 NMIP4Config *ip4_vpn_config;
115 NMIP4Config *ip4_device_config;
116 NMIP6Config *ip6_vpn_config;
117 NMIP6Config *ip6_device_config;
118 GSList *configs;
116 GPtrArray *configs;
117 NMDnsIPConfigData *best_conf4, *best_conf6;
118 gboolean need_sort;
119
119120 char *hostname;
120121 guint updates_queue;
121122
122123 guint8 hash[HASH_LEN]; /* SHA1 hash of current DNS config */
123124 guint8 prev_hash[HASH_LEN]; /* Hash when begin_updates() was called */
124125
125 NMDnsManagerResolvConfMode resolv_conf_mode;
126126 NMDnsManagerResolvConfManager rc_manager;
127 char *last_mode;
128 bool last_immutable:1;
129 bool mode_initialized:1;
130127 NMDnsPlugin *plugin;
131128
132129 NMConfig *config;
140137 } plugin_ratelimit;
141138 } NMDnsManagerPrivate;
142139
143 enum {
144 CONFIG_CHANGED,
145
146 LAST_SIGNAL
140 struct _NMDnsManager {
141 GObject parent;
142 NMDnsManagerPrivate _priv;
147143 };
148144
149 typedef enum {
150 SR_SUCCESS,
151 SR_NOTFOUND,
152 SR_ERROR
153 } SpawnResult;
154
155 static guint signals[LAST_SIGNAL] = { 0 };
156
145 struct _NMDnsManagerClass {
146 GObjectClass parent;
147 };
148
149 G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
150
151 NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager);
152
153 #define NM_DNS_MANAGER_GET_PRIVATE(self) \
154 ({ \
155 /* preserve the const-ness of self. Unfortunately, that
156 * way, @self cannot be a void pointer */ \
157 typeof (self) _self = (self); \
158 \
159 /* Get compiler error if variable is of wrong type */ \
160 _nm_unused const NMDnsManager *_self2 = (_self); \
161 \
162 nm_assert (NM_IS_DNS_MANAGER (_self)); \
163 &_self->_priv; \
164 })
165
166 /*****************************************************************************/
157167
158168 typedef struct {
159169 GPtrArray *nameservers;
165175
166176 NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_rc_manager_to_string, NMDnsManagerResolvConfManager,
167177 NM_UTILS_LOOKUP_DEFAULT_WARN (NULL),
168 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE, "none"),
169 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "file"),
170 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "resolvconf"),
171 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "netconfig"),
172 NM_UTILS_LOOKUP_ITEM_IGNORE (_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY),
178 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN, "unknown"),
179 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED, "unmanaged"),
180 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE, "immutable"),
181 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK, "symlink"),
182 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "file"),
183 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "resolvconf"),
184 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "netconfig"),
173185 );
186
187 NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_config_type_to_string, NMDnsIPConfigType,
188 NM_UTILS_LOOKUP_DEFAULT_WARN ("<unknown>"),
189 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_IP_CONFIG_TYPE_DEFAULT, "default"),
190 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE, "best"),
191 NM_UTILS_LOOKUP_STR_ITEM (NM_DNS_IP_CONFIG_TYPE_VPN, "vpn"),
192 );
193
194 static NMDnsIPConfigData *
195 ip_config_data_new (gpointer config, NMDnsIPConfigType type, const char *iface)
196 {
197 NMDnsIPConfigData *data;
198
199 data = g_slice_new0 (NMDnsIPConfigData);
200 data->config = g_object_ref (config);
201 data->iface = g_strdup (iface);
202 data->type = type;
203
204 return data;
205 }
206
207 static void
208 ip_config_data_destroy (gpointer ptr)
209 {
210 NMDnsIPConfigData *data = ptr;
211
212 if (!data)
213 return;
214
215 g_object_unref (data->config);
216 g_free (data->iface);
217 g_slice_free (NMDnsIPConfigData, data);
218 }
219
220 static gint
221 ip_config_data_compare (const NMDnsIPConfigData *a, const NMDnsIPConfigData *b)
222 {
223 gboolean a_v4, b_v4;
224 gint a_prio, b_prio;
225
226 a_v4 = NM_IS_IP4_CONFIG (a->config);
227 b_v4 = NM_IS_IP4_CONFIG (b->config);
228
229 a_prio = a_v4 ?
230 nm_ip4_config_get_dns_priority ((NMIP4Config *) a->config) :
231 nm_ip6_config_get_dns_priority ((NMIP6Config *) a->config);
232
233 b_prio = b_v4 ?
234 nm_ip4_config_get_dns_priority ((NMIP4Config *) b->config) :
235 nm_ip6_config_get_dns_priority ((NMIP6Config *) b->config);
236
237 /* Configurations with lower priority value first */
238 if (a_prio < b_prio)
239 return -1;
240 else if (a_prio > b_prio)
241 return 1;
242
243 /* Sort also according to type */
244 if (a->type > b->type)
245 return -1;
246 else if (a->type < b->type)
247 return 1;
248
249 return 0;
250 }
251
252 static gint
253 ip_config_data_ptr_compare (gconstpointer a, gconstpointer b)
254 {
255 const NMDnsIPConfigData *const *ptr_a = a, *const *ptr_b = b;
256
257 return ip_config_data_compare (*ptr_a, *ptr_b);
258 }
174259
175260 static void
176261 add_string_item (GPtrArray *array, const char *str)
256341 }
257342
258343 static void
259 merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src)
344 merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src, const char *iface)
260345 {
261346 guint32 num, num_domains, num_searches, i;
262 const char *iface;
263
264 iface = g_object_get_data (G_OBJECT (src), IP_CONFIG_IFACE_TAG);
265347
266348 num = nm_ip6_config_get_num_nameservers (src);
267349 for (i = 0; i < num; i++) {
275357 nm_utils_inet4_ntop (addr->s6_addr32[3], buf);
276358 else {
277359 nm_utils_inet6_ntop (addr, buf);
278 if (iface && IN6_IS_ADDR_LINKLOCAL (addr)) {
360 if (IN6_IS_ADDR_LINKLOCAL (addr)) {
279361 g_strlcat (buf, "%", sizeof (buf));
280362 g_strlcat (buf, iface, sizeof (buf));
281363 }
313395 option = nm_ip6_config_get_dns_option (src, i);
314396 add_dns_option_item (rc->options, option, TRUE);
315397 }
398 }
399
400 static void
401 merge_one_ip_config_data (NMDnsManager *self,
402 NMResolvConfData *rc,
403 NMDnsIPConfigData *data)
404 {
405 if (NM_IS_IP4_CONFIG (data->config))
406 merge_one_ip4_config (rc, (NMIP4Config *) data->config);
407 else if (NM_IS_IP6_CONFIG (data->config))
408 merge_one_ip6_config (rc, (NMIP6Config *) data->config, data->iface);
409 else
410 g_return_if_reached ();
316411 }
317412
318413 static GPid
469564 const char *content,
470565 GError **error)
471566 {
567 int errsv;
568
472569 if (fprintf (f, "%s", content) < 0) {
570 errsv = errno;
473571 g_set_error (error,
474572 NM_MANAGER_ERROR,
475573 NM_MANAGER_ERROR_FAILED,
476574 "Could not write " _PATH_RESCONF ": %s",
477 g_strerror (errno));
575 g_strerror (errsv));
576 errno = errsv;
478577 return FALSE;
479578 }
480579
573672 gboolean success;
574673 gs_free char *content = NULL;
575674 SpawnResult write_file_result = SR_SUCCESS;
675 int errsv;
676 const char *rc_path = _PATH_RESCONF;
677 nm_auto_free char *rc_path_real = NULL;
576678
577679 /* If we are not managing /etc/resolv.conf and it points to
578680 * MY_RESOLV_CONF, don't write the private DNS configuration to
581683 *
582684 * This is the only situation, where we don't try to update our
583685 * internal resolv.conf file. */
584 if (rc_manager == _NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY) {
686 if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED) {
585687 gs_free char *path = g_file_read_link (_PATH_RESCONF, NULL);
586688
587689 if (g_strcmp0 (path, MY_RESOLV_CONF) == 0) {
588 _LOGD ("not updating " MY_RESOLV_CONF
589 " since it points to " _PATH_RESCONF);
690 _LOGD ("update-resolv-conf: not updating " _PATH_RESCONF
691 " since it points to " MY_RESOLV_CONF);
590692 return SR_SUCCESS;
591693 }
592694 }
594696 content = create_resolv_conf (searches, nameservers, options);
595697
596698 if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE) {
699 GError *local = NULL;
700
701 rc_path_real = realpath (rc_path, NULL);
702 if (rc_path_real)
703 rc_path = rc_path_real;
704
597705 /* we first write to /etc/resolv.conf directly. If that fails,
598706 * we still continue to write to runstatedir but remember the
599707 * error. */
600 if (!g_file_set_contents (_PATH_RESCONF, content, -1, error)) {
708 if (!g_file_set_contents (rc_path, content, -1, &local)) {
709 _LOGT ("update-resolv-conf: write to %s failed (rc-manager=%s, %s)",
710 rc_path, _rc_manager_to_string (rc_manager), local->message);
601711 write_file_result = SR_ERROR;
712 g_propagate_error (error, local);
602713 error = NULL;
714 } else {
715 _LOGT ("update-resolv-conf: write to %s succeeded (rc-manager=%s)",
716 rc_path, _rc_manager_to_string (rc_manager));
603717 }
604718 }
605719
606720 if ((f = fopen (MY_RESOLV_CONF_TMP, "w")) == NULL) {
721 errsv = errno;
607722 g_set_error (error,
608723 NM_MANAGER_ERROR,
609724 NM_MANAGER_ERROR_FAILED,
610725 "Could not open %s: %s",
611726 MY_RESOLV_CONF_TMP,
612 g_strerror (errno));
727 g_strerror (errsv));
728 _LOGT ("update-resolv-conf: open temporary file %s failed (%s)",
729 MY_RESOLV_CONF_TMP, g_strerror (errsv));
613730 return SR_ERROR;
614731 }
615732
616733 success = write_resolv_conf_contents (f, content, error);
734 if (!success) {
735 errsv = errno;
736 _LOGT ("update-resolv-conf: write temporary file %s failed (%s)",
737 MY_RESOLV_CONF_TMP, g_strerror (errsv));
738 }
617739
618740 if (fclose (f) < 0) {
619741 if (success) {
742 errsv = errno;
620743 /* only set an error here if write_resolv_conf() was successful,
621744 * since its error is more important.
622745 */
625748 NM_MANAGER_ERROR_FAILED,
626749 "Could not close %s: %s",
627750 MY_RESOLV_CONF_TMP,
628 g_strerror (errno));
751 g_strerror (errsv));
752 _LOGT ("update-resolv-conf: close temporary file %s failed (%s)",
753 MY_RESOLV_CONF_TMP, g_strerror (errsv));
629754 }
630755 return SR_ERROR;
631756 } else if (!success)
632757 return SR_ERROR;
633758
634759 if (rename (MY_RESOLV_CONF_TMP, MY_RESOLV_CONF) < 0) {
760 errsv = errno;
635761 g_set_error (error,
636762 NM_MANAGER_ERROR,
637763 NM_MANAGER_ERROR_FAILED,
638764 "Could not replace %s: %s",
639765 MY_RESOLV_CONF,
640766 g_strerror (errno));
767 _LOGT ("update-resolv-conf: failed to rename temporary file %s to %s (%s)",
768 MY_RESOLV_CONF_TMP, MY_RESOLV_CONF, g_strerror (errsv));
641769 return SR_ERROR;
642770 }
643771
644 if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE)
772 if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE) {
773 _LOGT ("update-resolv-conf: write internal file %s succeeded (rc-manager=%s)",
774 rc_path, _rc_manager_to_string (rc_manager));
645775 return write_file_result;
646
647 if (rc_manager != NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE)
776 }
777
778 if (rc_manager != NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK) {
779 _LOGT ("update-resolv-conf: write internal file %s succeeded", MY_RESOLV_CONF);
648780 return SR_SUCCESS;
781 }
649782
650783 /* A symlink pointing to NM's own resolv.conf (MY_RESOLV_CONF) is always
651784 * overwritten to ensure that changes are indicated with inotify. Symlinks
652785 * pointing to any other file are never overwritten.
653786 */
654 if (lstat (_PATH_RESCONF, &st) != -1) {
787 if (lstat (_PATH_RESCONF, &st) != 0) {
788 errsv = errno;
789 if (errsv != ENOENT) {
790 /* NM cannot read /etc/resolv.conf */
791 _LOGT ("update-resolv-conf: write internal file %s succeeded but lstat(%s) failed (%s)",
792 MY_RESOLV_CONF, _PATH_RESCONF, g_strerror (errsv));
793 g_set_error (error,
794 NM_MANAGER_ERROR,
795 NM_MANAGER_ERROR_FAILED,
796 "Could not lstat %s: %s",
797 _PATH_RESCONF,
798 g_strerror (errsv));
799 return SR_ERROR;
800 }
801 } else {
655802 if (S_ISLNK (st.st_mode)) {
656803 if (stat (_PATH_RESCONF, &st) != -1) {
657804 gs_free char *path = g_file_read_link (_PATH_RESCONF, NULL);
658805
659 if (g_strcmp0 (path, MY_RESOLV_CONF) != 0) {
806 if (!path || !nm_streq (path, MY_RESOLV_CONF)) {
660807 /* It's not NM's symlink; do nothing */
808 _LOGT ("update-resolv-conf: write internal file %s succeeded "
809 "but don't update %s as it points to %s",
810 MY_RESOLV_CONF, _PATH_RESCONF, path ?: "");
661811 return SR_SUCCESS;
662812 }
663813
668818 * some other program is probably managing resolv.conf and
669819 * NM should not touch it.
670820 */
821 _LOGT ("update-resolv-conf: write internal file %s succeeded "
822 "but don't update %s as the symlinks points somewhere else",
823 MY_RESOLV_CONF, _PATH_RESCONF);
671824 return SR_SUCCESS;
672825 }
673826 }
674 } else if (errno != ENOENT) {
675 /* NM cannot read /etc/resolv.conf */
676 g_set_error (error,
677 NM_MANAGER_ERROR,
678 NM_MANAGER_ERROR_FAILED,
679 "Could not lstat %s: %s",
680 _PATH_RESCONF,
681 g_strerror (errno));
682 return SR_ERROR;
683827 }
684828
685829 /* By this point, either /etc/resolv.conf does not exist, is a regular
686830 * file, or is a symlink already owned by NM. In all cases /etc/resolv.conf
687831 * is replaced with a symlink pointing to NM's resolv.conf in /var/run/.
688832 */
689 if (unlink (RESOLV_CONF_TMP) == -1 && errno != ENOENT) {
833 if ( unlink (RESOLV_CONF_TMP) != 0
834 && ((errsv = errno) != ENOENT)) {
690835 g_set_error (error,
691836 NM_MANAGER_ERROR,
692837 NM_MANAGER_ERROR_FAILED,
693838 "Could not unlink %s: %s",
694839 RESOLV_CONF_TMP,
695 g_strerror (errno));
840 g_strerror (errsv));
841 _LOGT ("update-resolv-conf: write internal file %s succeeded "
842 "but canot delete temporary file %s: %s",
843 MY_RESOLV_CONF, RESOLV_CONF_TMP, g_strerror (errsv));
696844 return SR_ERROR;
697845 }
698846
699847 if (symlink (MY_RESOLV_CONF, RESOLV_CONF_TMP) == -1) {
848 errsv = errno;
700849 g_set_error (error,
701850 NM_MANAGER_ERROR,
702851 NM_MANAGER_ERROR_FAILED,
703852 "Could not create symlink %s pointing to %s: %s",
704853 RESOLV_CONF_TMP,
705854 MY_RESOLV_CONF,
706 g_strerror (errno));
855 g_strerror (errsv));
856 _LOGT ("update-resolv-conf: write internal file %s succeeded "
857 "but failed to symlink %s: %s",
858 MY_RESOLV_CONF, RESOLV_CONF_TMP, g_strerror (errsv));
707859 return SR_ERROR;
708860 }
709861
710862 if (rename (RESOLV_CONF_TMP, _PATH_RESCONF) == -1) {
863 errsv = errno;
711864 g_set_error (error,
712865 NM_MANAGER_ERROR,
713866 NM_MANAGER_ERROR_FAILED,
714867 "Could not rename %s to %s: %s",
715868 RESOLV_CONF_TMP,
716869 _PATH_RESCONF,
717 g_strerror (errno));
870 g_strerror (errsv));
871 _LOGT ("update-resolv-conf: write internal file %s succeeded "
872 "but failed to rename temporary symlink %s to %s: %s",
873 MY_RESOLV_CONF, RESOLV_CONF_TMP, _PATH_RESCONF, g_strerror (errsv));
718874 return SR_ERROR;
719875 }
720876
877 _LOGT ("update-resolv-conf: write internal file %s succeeded and update symlink %s",
878 MY_RESOLV_CONF, _PATH_RESCONF);
721879 return SR_SUCCESS;
722880 }
723881
726884 {
727885 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
728886 GChecksum *sum;
729 GSList *iter;
730887 gsize len = HASH_LEN;
888 guint i;
731889
732890 sum = g_checksum_new (G_CHECKSUM_SHA1);
733891 g_assert (len == g_checksum_type_get_length (G_CHECKSUM_SHA1));
734892
735893 if (global)
736894 nm_global_dns_config_update_checksum (global, sum);
737
738 if (priv->ip4_vpn_config)
739 nm_ip4_config_hash (priv->ip4_vpn_config, sum, TRUE);
740 if (priv->ip4_device_config)
741 nm_ip4_config_hash (priv->ip4_device_config, sum, TRUE);
742
743 if (priv->ip6_vpn_config)
744 nm_ip6_config_hash (priv->ip6_vpn_config, sum, TRUE);
745 if (priv->ip6_device_config)
746 nm_ip6_config_hash (priv->ip6_device_config, sum, TRUE);
747
748 /* add any other configs we know about */
749 for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
750 if (NM_IN_SET (iter->data, priv->ip4_vpn_config,
751 priv->ip4_device_config,
752 priv->ip6_vpn_config,
753 priv->ip6_device_config))
754 continue;
755
756 if (NM_IS_IP4_CONFIG (iter->data))
757 nm_ip4_config_hash (NM_IP4_CONFIG (iter->data), sum, TRUE);
758 else if (NM_IS_IP6_CONFIG (iter->data))
759 nm_ip6_config_hash (NM_IP6_CONFIG (iter->data), sum, TRUE);
895 else {
896 for (i = 0; i < priv->configs->len; i++) {
897 NMDnsIPConfigData *data = priv->configs->pdata[i];
898
899 if (NM_IS_IP4_CONFIG (data->config))
900 nm_ip4_config_hash ((NMIP4Config *) data->config, sum, TRUE);
901 else if (NM_IS_IP6_CONFIG (data->config))
902 nm_ip6_config_hash ((NMIP6Config *) data->config, sum, TRUE);
903 }
760904 }
761905
762906 g_checksum_get_digest (sum, buffer, &len);
763907 g_checksum_free (sum);
764 }
765
766 static void
767 build_plugin_config_lists (NMDnsManager *self,
768 GSList **out_vpn_configs,
769 GSList **out_dev_configs,
770 GSList **out_other_configs)
771 {
772 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
773 GSList *iter;
774
775 g_return_if_fail (out_vpn_configs && !*out_vpn_configs);
776 g_return_if_fail (out_dev_configs && !*out_dev_configs);
777 g_return_if_fail (out_other_configs && !*out_other_configs);
778
779 /* Build up config lists for plugins; we use the raw configs here, not the
780 * merged information that we write to resolv.conf so that the plugins can
781 * still use the domain information in each config to provide split DNS if
782 * they want to.
783 */
784 if (priv->ip4_vpn_config)
785 *out_vpn_configs = g_slist_append (*out_vpn_configs, priv->ip4_vpn_config);
786 if (priv->ip6_vpn_config)
787 *out_vpn_configs = g_slist_append (*out_vpn_configs, priv->ip6_vpn_config);
788 if (priv->ip4_device_config)
789 *out_dev_configs = g_slist_append (*out_dev_configs, priv->ip4_device_config);
790 if (priv->ip6_device_config)
791 *out_dev_configs = g_slist_append (*out_dev_configs, priv->ip6_device_config);
792
793 for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
794 if (!NM_IN_SET (iter->data, priv->ip4_vpn_config,
795 priv->ip4_device_config,
796 priv->ip6_vpn_config,
797 priv->ip6_device_config))
798 *out_other_configs = g_slist_append (*out_other_configs, iter->data);
799 }
800908 }
801909
802910 static gboolean
831939 return TRUE;
832940 }
833941
942 static const char *
943 get_nameserver_list (void *config, GString **str)
944 {
945 NMIP4Config *ip4;
946 NMIP6Config *ip6;
947 guint num, i;
948
949 nm_assert (str);
950
951 if (*str)
952 g_string_truncate (*str, 0);
953 else
954 *str = g_string_sized_new (64);
955
956 if (NM_IS_IP4_CONFIG (config)) {
957 ip4 = (NMIP4Config *) config;
958 num = nm_ip4_config_get_num_nameservers (ip4);
959 for (i = 0; i < num; i++) {
960 g_string_append (*str,
961 nm_utils_inet4_ntop (nm_ip4_config_get_nameserver (ip4, i),
962 NULL));
963 g_string_append_c (*str, ' ');
964 }
965 } else if (NM_IS_IP6_CONFIG (config)) {
966 ip6 = (NMIP6Config *) config;
967 num = nm_ip6_config_get_num_nameservers (ip6);
968 for (i = 0; i < num; i++) {
969 g_string_append (*str,
970 nm_utils_inet6_ntop (nm_ip6_config_get_nameserver (ip6, i),
971 NULL));
972 g_string_append_c (*str, ' ');
973 }
974 } else
975 g_return_val_if_reached (NULL);
976
977 return (*str)->str;
978 }
979
834980 static gboolean
835981 update_dns (NMDnsManager *self,
836982 gboolean no_caching,
838984 {
839985 NMDnsManagerPrivate *priv;
840986 NMResolvConfData rc;
841 GSList *iter;
842987 const char *nis_domain = NULL;
843988 char **searches = NULL;
844989 char **options = NULL;
850995 SpawnResult result = SR_ERROR;
851996 NMConfigData *data;
852997 NMGlobalDnsConfig *global_config;
998 gs_free NMDnsIPConfigData **plugin_confs = NULL;
999 nm_auto_free_gstring GString *tmp_gstring = NULL;
8531000
8541001 g_return_val_if_fail (!error || !*error, FALSE);
8551002
8561003 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
8571004 nm_clear_g_source (&priv->plugin_ratelimit.timer);
8581005
859 if (priv->resolv_conf_mode == NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED) {
1006 if (NM_IN_SET (priv->rc_manager, NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED,
1007 NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE)) {
8601008 update = FALSE;
8611009 _LOGD ("update-dns: not updating resolv.conf");
8621010 } else {
8671015 data = nm_config_get_data (priv->config);
8681016 global_config = nm_config_data_get_global_dns_config (data);
8691017
1018 if (priv->need_sort) {
1019 g_ptr_array_sort (priv->configs, ip_config_data_ptr_compare);
1020 priv->need_sort = FALSE;
1021 }
1022
8701023 /* Update hash with config we're applying */
8711024 compute_hash (self, global_config, priv->hash);
8721025
8791032 if (global_config)
8801033 merge_global_dns_config (&rc, global_config);
8811034 else {
882 if (priv->ip4_vpn_config)
883 merge_one_ip4_config (&rc, priv->ip4_vpn_config);
884 if (priv->ip4_device_config)
885 merge_one_ip4_config (&rc, priv->ip4_device_config);
886
887 if (priv->ip6_vpn_config)
888 merge_one_ip6_config (&rc, priv->ip6_vpn_config);
889 if (priv->ip6_device_config)
890 merge_one_ip6_config (&rc, priv->ip6_device_config);
891
892 for (iter = priv->configs; iter; iter = g_slist_next (iter)) {
893 if (NM_IN_SET (iter->data, priv->ip4_vpn_config,
894 priv->ip4_device_config,
895 priv->ip6_vpn_config,
896 priv->ip6_device_config))
897 continue;
898
899 if (NM_IS_IP4_CONFIG (iter->data)) {
900 NMIP4Config *config = NM_IP4_CONFIG (iter->data);
901
902 merge_one_ip4_config (&rc, config);
903 } else if (NM_IS_IP6_CONFIG (iter->data)) {
904 NMIP6Config *config = NM_IP6_CONFIG (iter->data);
905
906 merge_one_ip6_config (&rc, config);
907 } else
908 g_assert_not_reached ();
909 }
1035 int prio, prev_prio = 0;
1036 NMDnsIPConfigData *current;
1037 gboolean skip = FALSE, v4;
1038
1039 plugin_confs = g_new (NMDnsIPConfigData *, priv->configs->len + 1);
1040
1041 for (i = 0; i < priv->configs->len; i++) {
1042 current = priv->configs->pdata[i];
1043 v4 = NM_IS_IP4_CONFIG (current->config);
1044
1045 prio = v4 ?
1046 nm_ip4_config_get_dns_priority ((NMIP4Config *) current->config) :
1047 nm_ip6_config_get_dns_priority ((NMIP6Config *) current->config);
1048
1049 if (prev_prio < 0 && prio != prev_prio) {
1050 skip = TRUE;
1051 plugin_confs[i] = NULL;
1052 }
1053
1054 prev_prio = prio;
1055
1056 _LOGT ("config: %8d %-7s v%c %-16s %s: %s",
1057 prio,
1058 _config_type_to_string (current->type),
1059 v4 ? '4' : '6',
1060 current->iface,
1061 skip ? "<SKIP>" : "",
1062 get_nameserver_list (current->config, &tmp_gstring));
1063
1064 if (!skip) {
1065 merge_one_ip_config_data (self, &rc, current);
1066 plugin_confs[i] = current;
1067 }
1068 }
1069 plugin_confs[i] = NULL;
9101070 }
9111071
9121072 /* If the hostname is a FQDN ("dcbw.example.com"), then add the domain part of it
9691129 if (priv->plugin) {
9701130 NMDnsPlugin *plugin = priv->plugin;
9711131 const char *plugin_name = nm_dns_plugin_get_name (plugin);
972 GSList *vpn_configs = NULL, *dev_configs = NULL, *other_configs = NULL;
9731132
9741133 if (nm_dns_plugin_is_caching (plugin)) {
9751134 if (no_caching) {
9801139 caching = TRUE;
9811140 }
9821141
983 if (!global_config)
984 build_plugin_config_lists (self, &vpn_configs, &dev_configs, &other_configs);
985
9861142 _LOGD ("update-dns: updating plugin %s", plugin_name);
9871143 if (!nm_dns_plugin_update (plugin,
988 vpn_configs,
989 dev_configs,
990 other_configs,
1144 (const NMDnsIPConfigData **) plugin_confs,
9911145 global_config,
9921146 priv->hostname)) {
9931147 _LOGW ("update-dns: plugin %s update failed", plugin_name);
9971151 */
9981152 caching = FALSE;
9991153 }
1000 g_slist_free (vpn_configs);
1001 g_slist_free (dev_configs);
1002 g_slist_free (other_configs);
10031154
10041155 skip:
10051156 ;
10181169
10191170 if (update) {
10201171 switch (priv->rc_manager) {
1021 case NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE:
1172 case NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK:
10221173 case NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE:
10231174 result = update_resolv_conf (self, searches, nameservers, options, error, priv->rc_manager);
10241175 resolv_conf_updated = TRUE;
10371188 if (result == SR_NOTFOUND) {
10381189 _LOGD ("update-dns: program not available, writing to resolv.conf");
10391190 g_clear_error (error);
1040 result = update_resolv_conf (self, searches, nameservers, options, error, NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE);
1191 result = update_resolv_conf (self, searches, nameservers, options, error, NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK);
10411192 resolv_conf_updated = TRUE;
10421193 }
10431194 }
10451196 /* Unless we've already done it, update private resolv.conf in NMRUNDIR
10461197 ignoring any errors */
10471198 if (!resolv_conf_updated)
1048 update_resolv_conf (self, searches, nameservers, options, NULL, _NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY);
1199 update_resolv_conf (self, searches, nameservers, options, NULL, NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED);
10491200
10501201 /* signal that resolv.conf was changed */
10511202 if (update && result == SR_SUCCESS)
11231274 plugin_child_quit_update_dns (self);
11241275 }
11251276
1277 static void
1278 ip_config_dns_priority_changed (gpointer config,
1279 GParamSpec *pspec,
1280 NMDnsManager *self)
1281 {
1282 NM_DNS_MANAGER_GET_PRIVATE (self)->need_sort = TRUE;
1283 }
1284
1285 static void
1286 forget_data (NMDnsManager *self, NMDnsIPConfigData *data)
1287 {
1288 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1289
1290 if (data == priv->best_conf4)
1291 priv->best_conf4 = NULL;
1292 else if (data == priv->best_conf6)
1293 priv->best_conf6 = NULL;
1294
1295 g_signal_handlers_disconnect_by_func (data->config, ip_config_dns_priority_changed, self);
1296 }
1297
1298 static gboolean
1299 nm_dns_manager_add_ip_config (NMDnsManager *self,
1300 const char *iface,
1301 gpointer config,
1302 NMDnsIPConfigType cfg_type)
1303 {
1304 NMDnsManagerPrivate *priv;
1305 GError *error = NULL;
1306 NMDnsIPConfigData *data;
1307 gboolean v4 = NM_IS_IP4_CONFIG (config);
1308 guint i;
1309
1310 g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
1311 g_return_val_if_fail (config, FALSE);
1312 g_return_val_if_fail (iface && iface[0], FALSE);
1313
1314 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1315
1316 for (i = 0; i < priv->configs->len; i++) {
1317 data = priv->configs->pdata[i];
1318 if (data->config == config) {
1319 if ( nm_streq (data->iface, iface)
1320 && data->type == cfg_type)
1321 return FALSE;
1322 else {
1323 forget_data (self, data);
1324 g_ptr_array_remove_index_fast (priv->configs, i);
1325 break;
1326 }
1327 }
1328 }
1329
1330 data = ip_config_data_new (config, cfg_type, iface);
1331 g_ptr_array_add (priv->configs, data);
1332 g_signal_connect (config,
1333 v4 ?
1334 "notify::" NM_IP4_CONFIG_DNS_PRIORITY :
1335 "notify::" NM_IP6_CONFIG_DNS_PRIORITY,
1336 (GCallback) ip_config_dns_priority_changed, self);
1337 priv->need_sort = TRUE;
1338
1339 if (cfg_type == NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE) {
1340 /* Only one best-device per IP version is allowed */
1341 if (v4) {
1342 if (priv->best_conf4)
1343 priv->best_conf4->type = NM_DNS_IP_CONFIG_TYPE_DEFAULT;
1344 priv->best_conf4 = data;
1345 } else {
1346 if (priv->best_conf6)
1347 priv->best_conf6->type = NM_DNS_IP_CONFIG_TYPE_DEFAULT;
1348 priv->best_conf6 = data;
1349 }
1350 }
1351
1352 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1353 _LOGW ("could not commit DNS changes: %s", error->message);
1354 g_clear_error (&error);
1355 }
1356
1357 return TRUE;
1358 }
1359
11261360 gboolean
11271361 nm_dns_manager_add_ip4_config (NMDnsManager *self,
11281362 const char *iface,
11291363 NMIP4Config *config,
11301364 NMDnsIPConfigType cfg_type)
11311365 {
1132 NMDnsManagerPrivate *priv;
1133 GError *error = NULL;
1134
1135 g_return_val_if_fail (self != NULL, FALSE);
1136 g_return_val_if_fail (config != NULL, FALSE);
1137
1138 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1139
1140 g_object_set_data_full (G_OBJECT (config), IP_CONFIG_IFACE_TAG, g_strdup (iface), g_free);
1141
1142 switch (cfg_type) {
1143 case NM_DNS_IP_CONFIG_TYPE_VPN:
1144 priv->ip4_vpn_config = config;
1145 break;
1146 case NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE:
1147 priv->ip4_device_config = config;
1148 break;
1149 default:
1150 break;
1151 }
1152
1153 /* Don't allow the same zone added twice */
1154 if (!g_slist_find (priv->configs, config))
1155 priv->configs = g_slist_append (priv->configs, g_object_ref (config));
1156
1157 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1158 _LOGW ("could not commit DNS changes: %s", error->message);
1159 g_clear_error (&error);
1160 }
1161
1162 return TRUE;
1163 }
1164
1165 gboolean
1166 nm_dns_manager_remove_ip4_config (NMDnsManager *self, NMIP4Config *config)
1167 {
1168 NMDnsManagerPrivate *priv;
1169 GError *error = NULL;
1170
1171 g_return_val_if_fail (self != NULL, FALSE);
1172 g_return_val_if_fail (config != NULL, FALSE);
1173
1174 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1175
1176 /* Can't remove it if it wasn't in the list to begin with */
1177 if (!g_slist_find (priv->configs, config))
1178 return FALSE;
1179
1180 priv->configs = g_slist_remove (priv->configs, config);
1181
1182 if (config == priv->ip4_vpn_config)
1183 priv->ip4_vpn_config = NULL;
1184 if (config == priv->ip4_device_config)
1185 priv->ip4_device_config = NULL;
1186
1187 g_object_unref (config);
1188
1189 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1190 _LOGW ("could not commit DNS changes: %s", error->message);
1191 g_clear_error (&error);
1192 }
1193
1194 g_object_set_data (G_OBJECT (config), IP_CONFIG_IFACE_TAG, NULL);
1195
1196 return TRUE;
1366 return nm_dns_manager_add_ip_config (self, iface, config, cfg_type);
11971367 }
11981368
11991369 gboolean
12021372 NMIP6Config *config,
12031373 NMDnsIPConfigType cfg_type)
12041374 {
1375 return nm_dns_manager_add_ip_config (self, iface, config, cfg_type);
1376 }
1377
1378 static gboolean
1379 nm_dns_manager_remove_ip_config (NMDnsManager *self, gpointer config)
1380 {
12051381 NMDnsManagerPrivate *priv;
12061382 GError *error = NULL;
1207
1208 g_return_val_if_fail (self != NULL, FALSE);
1209 g_return_val_if_fail (config != NULL, FALSE);
1383 NMDnsIPConfigData *data;
1384 guint i;
1385
1386 g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
1387 g_return_val_if_fail (config, FALSE);
12101388
12111389 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
12121390
1213 g_object_set_data_full (G_OBJECT (config), IP_CONFIG_IFACE_TAG, g_strdup (iface), g_free);
1214
1215 switch (cfg_type) {
1216 case NM_DNS_IP_CONFIG_TYPE_VPN:
1217 priv->ip6_vpn_config = config;
1218 break;
1219 case NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE:
1220 priv->ip6_device_config = config;
1221 break;
1222 default:
1223 break;
1224 }
1225
1226 /* Don't allow the same zone added twice */
1227 if (!g_slist_find (priv->configs, config))
1228 priv->configs = g_slist_append (priv->configs, g_object_ref (config));
1229
1230 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1231 _LOGW ("could not commit DNS changes: %s", error->message);
1232 g_clear_error (&error);
1233 }
1234
1235 return TRUE;
1391 for (i = 0; i < priv->configs->len; i++) {
1392 data = priv->configs->pdata[i];
1393
1394 if (data->config == config) {
1395 forget_data (self, data);
1396 g_ptr_array_remove_index (priv->configs, i);
1397
1398 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1399 _LOGW ("could not commit DNS changes: %s", error->message);
1400 g_clear_error (&error);
1401 }
1402
1403 return TRUE;
1404 }
1405 }
1406 return FALSE;
1407 }
1408
1409 gboolean
1410 nm_dns_manager_remove_ip4_config (NMDnsManager *self, NMIP4Config *config)
1411 {
1412 return nm_dns_manager_remove_ip_config (self, config);
12361413 }
12371414
12381415 gboolean
12391416 nm_dns_manager_remove_ip6_config (NMDnsManager *self, NMIP6Config *config)
12401417 {
1241 NMDnsManagerPrivate *priv;
1242 GError *error = NULL;
1243
1244 g_return_val_if_fail (self != NULL, FALSE);
1245 g_return_val_if_fail (config != NULL, FALSE);
1246
1247 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1248
1249 /* Can't remove it if it wasn't in the list to begin with */
1250 if (!g_slist_find (priv->configs, config))
1251 return FALSE;
1252
1253 priv->configs = g_slist_remove (priv->configs, config);
1254
1255 if (config == priv->ip6_vpn_config)
1256 priv->ip6_vpn_config = NULL;
1257 if (config == priv->ip6_device_config)
1258 priv->ip6_device_config = NULL;
1259
1260 g_object_unref (config);
1261
1262 if (!priv->updates_queue && !update_dns (self, FALSE, &error)) {
1263 _LOGW ("could not commit DNS changes: %s", error->message);
1264 g_clear_error (&error);
1265 }
1266
1267 g_object_set_data (G_OBJECT (config), IP_CONFIG_IFACE_TAG, NULL);
1268
1269 return TRUE;
1418 return nm_dns_manager_remove_ip_config (self, config);
12701419 }
12711420
12721421 void
13071456 }
13081457 }
13091458
1310 NMDnsManagerResolvConfMode
1311 nm_dns_manager_get_resolv_conf_mode (NMDnsManager *self)
1312 {
1313 return NM_DNS_MANAGER_GET_PRIVATE (self)->resolv_conf_mode;
1459 gboolean
1460 nm_dns_manager_get_resolv_conf_explicit (NMDnsManager *self)
1461 {
1462 NMDnsManagerPrivate *priv;
1463
1464 g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
1465
1466 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1467
1468 if ( NM_IN_SET (priv->rc_manager, NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED,
1469 NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE)
1470 || priv->plugin)
1471 return FALSE;
1472
1473 return TRUE;
13141474 }
13151475
13161476 void
13421502
13431503 priv = NM_DNS_MANAGER_GET_PRIVATE (self);
13441504 g_return_if_fail (priv->updates_queue > 0);
1505
1506 if (priv->need_sort) {
1507 g_ptr_array_sort (priv->configs, ip_config_data_ptr_compare);
1508 priv->need_sort = FALSE;
1509 }
13451510
13461511 compute_hash (self, nm_config_data_get_global_dns_config (nm_config_get_data (priv->config)), new);
13471512 changed = (memcmp (new, priv->prev_hash, sizeof (new)) != 0) ? TRUE : FALSE;
13651530
13661531 /******************************************************************/
13671532
1368 static bool
1369 _get_resconf_immutable (int *immutable_cached)
1370 {
1533 static gboolean
1534 _clear_plugin (NMDnsManager *self)
1535 {
1536 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1537
1538 if (priv->plugin) {
1539 g_signal_handlers_disconnect_by_func (priv->plugin, plugin_failed, self);
1540 g_signal_handlers_disconnect_by_func (priv->plugin, plugin_child_quit, self);
1541 nm_dns_plugin_stop (priv->plugin);
1542 g_clear_object (&priv->plugin);
1543 return TRUE;
1544 }
1545 priv->plugin_ratelimit.ts = 0;
1546 nm_clear_g_source (&priv->plugin_ratelimit.timer);
1547 return FALSE;
1548 }
1549
1550 static NMDnsManagerResolvConfManager
1551 _check_resconf_immutable (NMDnsManagerResolvConfManager rc_manager)
1552 {
1553 struct stat st;
13711554 int fd, flags;
1372 int immutable;
1373
1374 immutable = *immutable_cached;
1375 if (!NM_IN_SET (immutable, FALSE, TRUE)) {
1376 immutable = FALSE;
1555 bool immutable = FALSE;
1556
1557 switch (rc_manager) {
1558 case NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN:
1559 case NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE:
1560 nm_assert_not_reached ();
1561 /* fall-through */
1562 case NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED:
1563 return NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED;
1564 default:
1565
1566 if (lstat (_PATH_RESCONF, &st) != 0)
1567 return rc_manager;
1568
1569 if (S_ISLNK (st.st_mode)) {
1570 /* only regular files and directories can have extended file attributes. */
1571 switch (rc_manager) {
1572 case NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK:
1573 /* we don't care whether the link-target is immutable.
1574 * If the symlink points to another file, rc-manager=symlink anyway backs off.
1575 * Otherwise, we would only check whether our internal resolv.conf is immutable. */
1576 return NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK;
1577 case NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN:
1578 case NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED:
1579 case NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE:
1580 nm_assert_not_reached ();
1581 /* fall-through */
1582 case NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE:
1583 case NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF:
1584 case NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG:
1585 break;
1586 }
1587 }
1588
13771589 fd = open (_PATH_RESCONF, O_RDONLY);
13781590 if (fd != -1) {
13791591 if (ioctl (fd, FS_IOC_GETFLAGS, &flags) != -1)
13801592 immutable = NM_FLAGS_HAS (flags, FS_IMMUTABLE_FL);
13811593 close (fd);
13821594 }
1383 *immutable_cached = immutable;
1384 }
1385 return immutable;
1595 return immutable ? NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE : rc_manager;
1596 }
13861597 }
13871598
13881599 NM_DEFINE_SINGLETON_GETTER (NMDnsManager, nm_dns_manager_get, NM_TYPE_DNS_MANAGER);
13891600
13901601 static void
1391 init_resolv_conf_mode (NMDnsManager *self)
1602 init_resolv_conf_mode (NMDnsManager *self, gboolean force_reload_plugin)
13921603 {
13931604 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1394 const char *mode, *mode_unknown;
1395 int immutable = -1;
1605 NMDnsManagerResolvConfManager rc_manager;
1606 const char *mode;
1607 gboolean plugin_changed = FALSE;
13961608
13971609 mode = nm_config_data_get_dns_mode (nm_config_get_data (priv->config));
13981610
1399 if ( priv->mode_initialized
1400 && nm_streq0 (mode, priv->last_mode)
1401 && ( nm_streq0 (mode, "none")
1402 || priv->last_immutable == _get_resconf_immutable (&immutable))) {
1403 /* we call init_resolv_conf_mode() on every SIGHUP to possibly reload
1404 * when either "mode" or "immutable" changed. However, we don't want to
1405 * re-create the plugin, when the paramters didn't actually change. So
1406 * detect that we would recreate the same plugin and return early. */
1407 return;
1408 }
1409
1410 priv->mode_initialized = TRUE;
1411 g_free (priv->last_mode);
1412 priv->last_mode = g_strdup (mode);
1413 priv->last_immutable = FALSE;
1414 g_clear_object (&priv->plugin);
1415 priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED;
1416
1417 if (nm_streq0 (mode, "none")) {
1418 _LOGI ("%s%s", "set resolv-conf-mode: ", "none");
1419 return;
1420 }
1421
1422 priv->last_immutable = _get_resconf_immutable (&immutable);
1423
1424 if (NM_IN_STRSET (mode, "dnsmasq", "unbound")) {
1425 if (!immutable)
1426 priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_PROXY;
1427 if (nm_streq (mode, "dnsmasq"))
1611 if (nm_streq0 (mode, "none"))
1612 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED;
1613 else {
1614 const char *man;
1615
1616 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN;
1617 man = nm_config_data_get_rc_manager (nm_config_get_data (priv->config));
1618
1619 again:
1620 if (!man) {
1621 /* nop */
1622 } else if (NM_IN_STRSET (man, "symlink", "none"))
1623 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK;
1624 else if (nm_streq (man, "file"))
1625 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE;
1626 else if (nm_streq (man, "resolvconf"))
1627 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF;
1628 else if (nm_streq (man, "netconfig"))
1629 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG;
1630 else if (nm_streq (man, "unmanaged"))
1631 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED;
1632
1633 if (rc_manager == NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN) {
1634 if (man) {
1635 _LOGW ("init: unknown resolv.conf manager \"%s\", fallback to \"%s\"",
1636 man, ""NM_CONFIG_DEFAULT_DNS_RC_MANAGER);
1637 }
1638 man = ""NM_CONFIG_DEFAULT_DNS_RC_MANAGER;
1639 rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK;
1640 goto again;
1641 }
1642 }
1643
1644 rc_manager = _check_resconf_immutable (rc_manager);
1645
1646 if (nm_streq0 (mode, "dnsmasq")) {
1647 if (force_reload_plugin || !NM_IS_DNS_DNSMASQ (priv->plugin)) {
1648 _clear_plugin (self);
14281649 priv->plugin = nm_dns_dnsmasq_new ();
1429 else
1650 plugin_changed = TRUE;
1651 }
1652 } else if (nm_streq0 (mode, "unbound")) {
1653 if (force_reload_plugin || !NM_IS_DNS_UNBOUND (priv->plugin)) {
1654 _clear_plugin (self);
14301655 priv->plugin = nm_dns_unbound_new ();
1431
1656 plugin_changed = TRUE;
1657 }
1658 } else {
1659 if (!NM_IN_STRSET (mode, "none", "default")) {
1660 if (mode)
1661 _LOGW ("init: unknown dns mode '%s'", mode);
1662 mode = "default";
1663 }
1664 if (_clear_plugin (self))
1665 plugin_changed = TRUE;
1666 }
1667
1668 if (plugin_changed && priv->plugin) {
14321669 g_signal_connect (priv->plugin, NM_DNS_PLUGIN_FAILED, G_CALLBACK (plugin_failed), self);
14331670 g_signal_connect (priv->plugin, NM_DNS_PLUGIN_CHILD_QUIT, G_CALLBACK (plugin_child_quit), self);
1434
1435 _NMLOG (immutable ? LOGL_WARN : LOGL_INFO,
1436 "%s%s%s%s%s%s",
1437 "set resolv-conf-mode: ",
1438 immutable ? "none" : mode,
1439 ", plugin=\"", nm_dns_plugin_get_name (priv->plugin), "\"",
1440 immutable ? ", resolv.conf immutable" : "");
1441 return;
1442 }
1443
1444 if (!immutable)
1445 priv->resolv_conf_mode = NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT;
1446
1447 mode_unknown = mode && !nm_streq (mode, "default") ? mode : NULL;
1448 _NMLOG (mode_unknown ? LOGL_WARN : LOGL_INFO,
1449 "%s%s%s%s%s%s",
1450 "set resolv-conf-mode: ",
1451 immutable ? "none" : "default",
1452 NM_PRINT_FMT_QUOTED (mode_unknown, " -- unknown configuration '", mode_unknown, "'", ""),
1453 immutable ? ", resolv.conf immutable" : "");
1454 }
1455
1456 static void
1457 init_resolv_conf_manager (NMDnsManager *self)
1458 {
1459 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1460 const char *man;
1461
1462 man = nm_config_data_get_rc_manager (nm_config_get_data (priv->config));
1463 if (!g_strcmp0 (man, "none"))
1464 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE;
1465 else if (nm_streq0 (man, "file"))
1466 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE;
1467 else if (!g_strcmp0 (man, "resolvconf"))
1468 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF;
1469 else if (!g_strcmp0 (man, "netconfig"))
1470 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG;
1471 else {
1472 #if defined(RESOLVCONF_SELECTED)
1473 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF;
1474 #elif defined(NETCONFIG_SELECTED)
1475 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG;
1476 #else
1477 priv->rc_manager = NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE;
1478 #endif
1479 if (man)
1480 _LOGW ("unknown resolv.conf manager '%s'", man);
1481 }
1482
1483 _LOGI ("using resolv.conf manager '%s'", _rc_manager_to_string (priv->rc_manager));
1671 }
1672
1673 if ( plugin_changed
1674 || priv->rc_manager != rc_manager) {
1675 priv->rc_manager = rc_manager;
1676 _LOGI ("init: dns=%s, rc-manager=%s%s%s%s",
1677 mode, _rc_manager_to_string (rc_manager),
1678 NM_PRINT_FMT_QUOTED (priv->plugin, ", plugin=", nm_dns_plugin_get_name (priv->plugin), "", ""));
1679 }
14841680 }
14851681
14861682 static void
14931689 GError *error = NULL;
14941690
14951691 if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_DNS_MODE |
1496 NM_CONFIG_CHANGE_SIGHUP)) {
1692 NM_CONFIG_CHANGE_RC_MANAGER |
1693 NM_CONFIG_CHANGE_CAUSE_SIGHUP |
1694 NM_CONFIG_CHANGE_CAUSE_DNS_FULL)) {
14971695 /* reload the resolv-conf mode also on SIGHUP (when DNS_MODE didn't change).
14981696 * The reason is, that the configuration also depends on whether resolv.conf
14991697 * is immutable, thus, without the configuration changing, we always want to
15001698 * re-configure the mode. */
1501 init_resolv_conf_mode (self);
1502 }
1503
1504 if (NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_RC_MANAGER))
1505 init_resolv_conf_manager (self);
1506
1507 if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_SIGHUP |
1508 NM_CONFIG_CHANGE_SIGUSR1 |
1699 init_resolv_conf_mode (self,
1700 NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP
1701 | NM_CONFIG_CHANGE_CAUSE_DNS_FULL));
1702 }
1703
1704 if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP |
1705 NM_CONFIG_CHANGE_CAUSE_SIGUSR1 |
1706 NM_CONFIG_CHANGE_CAUSE_DNS_RC |
1707 NM_CONFIG_CHANGE_CAUSE_DNS_FULL |
15091708 NM_CONFIG_CHANGE_DNS_MODE |
15101709 NM_CONFIG_CHANGE_RC_MANAGER |
15111710 NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG)) {
1512 if (!update_dns (self, TRUE, &error)) {
1711 if (!update_dns (self, FALSE, &error)) {
15131712 _LOGW ("could not commit DNS changes: %s", error->message);
15141713 g_clear_error (&error);
15151714 }
15241723 _LOGT ("creating...");
15251724
15261725 priv->config = g_object_ref (nm_config_get ());
1726 priv->configs = g_ptr_array_new_full (8, ip_config_data_destroy);
1727
15271728 /* Set the initial hash */
1528 compute_hash (self, nm_config_data_get_global_dns_config (nm_config_get_data (priv->config)),
1529 NM_DNS_MANAGER_GET_PRIVATE (self)->hash);
1729 compute_hash (self, NULL, NM_DNS_MANAGER_GET_PRIVATE (self)->hash);
15301730
15311731 g_signal_connect (G_OBJECT (priv->config),
15321732 NM_CONFIG_SIGNAL_CONFIG_CHANGED,
15331733 G_CALLBACK (config_changed_cb),
15341734 self);
1535 init_resolv_conf_mode (self);
1536 init_resolv_conf_manager (self);
1735 init_resolv_conf_mode (self, TRUE);
15371736 }
15381737
15391738 static void
15411740 {
15421741 NMDnsManager *self = NM_DNS_MANAGER (object);
15431742 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1743 NMDnsIPConfigData *data;
15441744 GError *error = NULL;
1745 guint i;
15451746
15461747 _LOGT ("disposing");
15471748
1548 if (priv->plugin) {
1549 g_signal_handlers_disconnect_by_func (priv->plugin, plugin_failed, self);
1550 g_signal_handlers_disconnect_by_func (priv->plugin, plugin_child_quit, self);
1551 g_clear_object (&priv->plugin);
1552 }
1553
1554 g_clear_pointer (&priv->last_mode, g_free);
1749 _clear_plugin (self);
15551750
15561751 /* If we're quitting, leave a valid resolv.conf in place, not one
15571752 * pointing to 127.0.0.1 if any plugins were active. Thus update
15691764 g_clear_object (&priv->config);
15701765 }
15711766
1572 g_slist_free_full (priv->configs, g_object_unref);
1573 priv->configs = NULL;
1767 if (priv->configs) {
1768 for (i = 0; i < priv->configs->len; i++) {
1769 data = priv->configs->pdata[i];
1770 forget_data (self, data);
1771 }
1772 g_ptr_array_free (priv->configs, TRUE);
1773 priv->configs = NULL;
1774 }
1775
1776 nm_clear_g_source (&priv->plugin_ratelimit.timer);
15741777
15751778 G_OBJECT_CLASS (nm_dns_manager_parent_class)->dispose (object);
15761779 }
15781781 static void
15791782 finalize (GObject *object)
15801783 {
1581 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (object);
1784 NMDnsManager *self = NM_DNS_MANAGER (object);
1785 NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
15821786
15831787 g_free (priv->hostname);
15841788
15891793 nm_dns_manager_class_init (NMDnsManagerClass *klass)
15901794 {
15911795 GObjectClass *object_class = G_OBJECT_CLASS (klass);
1592
1593 g_type_class_add_private (object_class, sizeof (NMDnsManagerPrivate));
15941796
15951797 /* virtual methods */
15961798 object_class->dispose = dispose;
16011803 g_signal_new (NM_DNS_MANAGER_CONFIG_CHANGED,
16021804 G_OBJECT_CLASS_TYPE (object_class),
16031805 G_SIGNAL_RUN_FIRST,
1604 G_STRUCT_OFFSET (NMDnsManagerClass, config_changed),
1605 NULL, NULL,
1806 0, NULL, NULL,
16061807 g_cclosure_marshal_VOID__VOID,
16071808 G_TYPE_NONE, 0);
16081809 }
2727 #include "nm-ip4-config.h"
2828 #include "nm-ip6-config.h"
2929
30 G_BEGIN_DECLS
31
3032 typedef enum {
3133 NM_DNS_IP_CONFIG_TYPE_DEFAULT = 0,
3234 NM_DNS_IP_CONFIG_TYPE_BEST_DEVICE,
3335 NM_DNS_IP_CONFIG_TYPE_VPN
3436 } NMDnsIPConfigType;
3537
36 G_BEGIN_DECLS
38 enum {
39 NM_DNS_PRIORITY_DEFAULT_NORMAL = 100,
40 NM_DNS_PRIORITY_DEFAULT_VPN = 50,
41 };
42
43 typedef struct {
44 gpointer config;
45 NMDnsIPConfigType type;
46 char *iface;
47 } NMDnsIPConfigData;
3748
3849 #define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ())
3950 #define NM_DNS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NM_TYPE_DNS_MANAGER, NMDnsManager))
4455
4556 #define NM_DNS_MANAGER_CONFIG_CHANGED "config-changed"
4657
47 typedef struct {
48 GObject parent;
49 } NMDnsManager;
50
51 typedef struct {
52 GObjectClass parent;
53
54 /* Signals */
55 void (*config_changed) (NMDnsManager *mgr);
56 } NMDnsManagerClass;
58 typedef struct _NMDnsManager NMDnsManager;
59 typedef struct _NMDnsManagerClass NMDnsManagerClass;
5760
5861 GType nm_dns_manager_get_type (void);
5962
8386 const char *hostname);
8487
8588 /**
86 * NMDnsManagerResolvConfMode:
87 * @NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED: NM is not managing resolv.conf
88 * @NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT: NM is managing resolv.conf by
89 * adding and removing "nameserver" lines corresponding to the currently
90 * active connections
91 * @NM_DNS_MANAGER_RESOLV_CONF_PROXY: NM is managing resolv.conf by
92 * pointing it to some other service (eg, dnsmasq) that knows the
93 * nameservers corresponding to the currently active connections.
94 *
95 * NMDnsManager's behavior toward /etc/resolv.conf.
96 */
97 typedef enum {
98 NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED,
99 NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT,
100 NM_DNS_MANAGER_RESOLV_CONF_PROXY
101 } NMDnsManagerResolvConfMode;
102
103 /**
10489 * NMDnsManagerResolvConfManager
105 * @_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY: dummy-manager
106 * to not write resolv.conf at all, only the internal file in
107 * NM's run state directory.
108 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE: NM writes resolv.conf
90 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN: unspecified rc-manager.
91 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED: do not touch /etc/resolv.conf
92 * (but still write the internal copy -- unless it is symlinked by
93 * /etc/resolv.conf)
94 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE: similar to "unmanaged",
95 * but indicates that resolv.conf cannot be modified.
96 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK: NM writes resolv.conf
10997 * by symlinking it to the run state directory.
110 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE: Like NONE, but instead of symlinking
111 * resolv.conf, write it as a file.
98 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE: Like SYMLINK, but instead of
99 * symlinking /etc/resolv.conf, write it as a file.
112100 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF: NM is managing resolv.conf
113101 through resolvconf
114102 * @NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG: NM is managing resolv.conf
117105 * NMDnsManager's management of resolv.conf
118106 */
119107 typedef enum {
120 _NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY,
121 NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE,
108 NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN,
109 NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED,
110 NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE,
111 NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK,
122112 NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE,
123113 NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF,
124114 NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG,
125115 } NMDnsManagerResolvConfManager;
126116
127 NMDnsManagerResolvConfMode nm_dns_manager_get_resolv_conf_mode (NMDnsManager *self);
117 gboolean nm_dns_manager_get_resolv_conf_explicit (NMDnsManager *self);
128118
129119 G_END_DECLS
130120
7373
7474 gboolean
7575 nm_dns_plugin_update (NMDnsPlugin *self,
76 const GSList *vpn_configs,
77 const GSList *dev_configs,
78 const GSList *other_configs,
76 const NMDnsIPConfigData **configs,
7977 const NMGlobalDnsConfig *global_config,
8078 const char *hostname)
8179 {
8280 g_return_val_if_fail (NM_DNS_PLUGIN_GET_CLASS (self)->update != NULL, FALSE);
8381
8482 return NM_DNS_PLUGIN_GET_CLASS (self)->update (self,
85 vpn_configs,
86 dev_configs,
87 other_configs,
83 configs,
8884 global_config,
8985 hostname);
9086 }
178174 _clear_pidfile (self);
179175
180176 g_signal_emit (self, signals[CHILD_QUIT], 0, status);
177 }
178
179 GPid
180 nm_dns_plugin_child_pid (NMDnsPlugin *self)
181 {
182 NMDnsPluginPrivate *priv;
183
184 g_return_val_if_fail (NM_IS_DNS_PLUGIN (self), 0);
185
186 priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
187 return priv->pid;
181188 }
182189
183190 GPid
223230 _LOGD ("%s started with pid %d", progname, pid);
224231 priv->watch_id = g_child_watch_add (pid, (GChildWatchFunc) watch_cb, self);
225232 priv->pid = pid;
226 priv->progname = nm_unauto (&progname);
233 priv->progname = g_steal_pointer (&progname);
227234 priv->pidfile = g_strdup (pidfile);
228235
229236 return pid;
246253 return TRUE;
247254 }
248255
256 void
257 nm_dns_plugin_stop (NMDnsPlugin *self)
258 {
259 nm_dns_plugin_child_kill (self);
260 }
261
249262 /********************************************/
250263
251264 static void
258271 {
259272 NMDnsPlugin *self = NM_DNS_PLUGIN (object);
260273
261 nm_dns_plugin_child_kill (self);
274 nm_dns_plugin_stop (self);
262275
263276 G_OBJECT_CLASS (nm_dns_plugin_parent_class)->dispose (object);
264277 }
1919 #define __NETWORKMANAGER_DNS_PLUGIN_H__
2020
2121 #include "nm-default.h"
22 #include "nm-dns-manager.h"
2223
2324 #include "nm-config-data.h"
2425
3233 #define NM_DNS_PLUGIN_FAILED "failed"
3334 #define NM_DNS_PLUGIN_CHILD_QUIT "child-quit"
3435
35 #define IP_CONFIG_IFACE_TAG "dns-manager-iface"
36
3736 typedef struct {
3837 GObject parent;
3938 } NMDnsPlugin;
4342
4443 /* Methods */
4544
46 /* Called when DNS information is changed. 'vpn_configs' is a list of
47 * NMIP4Config or NMIP6Config objects from VPN connections, while
48 * 'dev_configs' is a list of NMPI4Config or NMIP6Config objects from
49 * active devices. 'other_configs' represent other IP configuration that
50 * may be in-use. 'global_config' is the optional global DNS
51 * configuration. Configs of the same IP version are sorted in priority
52 * order.
45 /* Called when DNS information is changed. 'configs' is an array
46 * of pointers to NMDnsIPConfigData sorted by priority.
47 * 'global_config' is the optional global DNS
48 * configuration.
5349 */
5450 gboolean (*update) (NMDnsPlugin *self,
55 const GSList *vpn_configs,
56 const GSList *dev_configs,
57 const GSList *other_configs,
51 const NMDnsIPConfigData **configs,
5852 const NMGlobalDnsConfig *global_config,
5953 const char *hostname);
6054
9185 const char *nm_dns_plugin_get_name (NMDnsPlugin *self);
9286
9387 gboolean nm_dns_plugin_update (NMDnsPlugin *self,
94 const GSList *vpn_configs,
95 const GSList *dev_configs,
96 const GSList *other_configs,
88 const NMDnsIPConfigData **configs,
9789 const NMGlobalDnsConfig *global_config,
9890 const char *hostname);
91
92 void nm_dns_plugin_stop (NMDnsPlugin *self);
9993
10094 /* For subclasses/plugins */
10195
110104 const char *pidfile,
111105 const char *kill_match);
112106
107 GPid nm_dns_plugin_child_pid (NMDnsPlugin *self);
108
113109 gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
114110
115111 #endif /* __NETWORKMANAGER_DNS_PLUGIN_H__ */
2727
2828 static gboolean
2929 update (NMDnsPlugin *plugin,
30 const GSList *vpn_configs,
31 const GSList *dev_configs,
32 const GSList *other_configs,
30 const NMDnsIPConfigData **configs,
3331 const NMGlobalDnsConfig *global_config,
3432 const char *hostname)
3533 {
+0
-105
src/dns-manager/nm-dns-utils.c less more
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2, or (at your option)
4 * any later version.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, write to the Free Software Foundation, Inc.,
13 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14 *
15 * Copyright (C) 2010 Red Hat, Inc.
16 *
17 */
18
19 #include "nm-default.h"
20
21 #include <arpa/inet.h>
22 #include <string.h>
23
24 #include "nm-dns-utils.h"
25 #include "nm-platform.h"
26 #include "nm-utils.h"
27
28 static void
29 add_ip4_to_rdns_array (guint32 ip, GPtrArray *domains) /* network byte order */
30 {
31 guint32 defprefix;
32 guchar *p;
33 char *str = NULL;
34 int i;
35
36 defprefix = nm_utils_ip4_get_default_prefix (ip);
37
38 /* Convert to host byte order, mask the host bits, and convert back */
39 ip = ntohl (ip);
40 ip &= 0xFFFFFFFF << (32 - defprefix);
41 ip = htonl (ip);
42 p = (guchar *) &ip;
43
44 if (defprefix == 8)
45 str = g_strdup_printf ("%u.in-addr.arpa", p[0] & 0xFF);
46 else if (defprefix == 16)
47 str = g_strdup_printf ("%u.%u.in-addr.arpa", p[1] & 0xFF, p[0] & 0xFF);
48 else if (defprefix == 24)
49 str = g_strdup_printf ("%u.%u.%u.in-addr.arpa", p[2] & 0xFF, p[1] & 0xFF, p[0] & 0xFF);
50
51 if (!str) {
52 g_return_if_fail (str != NULL);
53 return;
54 }
55
56 /* Suppress duplicates */
57 for (i = 0; i < domains->len; i++) {
58 if (strcmp (str, g_ptr_array_index (domains, i)) == 0)
59 break;
60 }
61
62 if (i == domains->len)
63 g_ptr_array_add (domains, str);
64 else
65 g_free (str);
66 }
67
68 char **
69 nm_dns_utils_get_ip4_rdns_domains (NMIP4Config *ip4)
70 {
71 GPtrArray *domains = NULL;
72 int i;
73
74 g_return_val_if_fail (ip4 != NULL, NULL);
75
76 domains = g_ptr_array_sized_new (5);
77
78 /* To calculate the reverse DNS domains for this IP4 config, we take
79 * all the IP addresses and routes in the config, calculate the network
80 * portion, and convert that to classful, and use the network bits for
81 * the final domain. FIXME: better handle classless routing, which might
82 * require us to add multiple domains for each actual network prefix to
83 * cover all the separate networks in that block.
84 */
85
86 for (i = 0; i < nm_ip4_config_get_num_addresses (ip4); i++) {
87 const NMPlatformIP4Address *address = nm_ip4_config_get_address (ip4, i);
88
89 add_ip4_to_rdns_array (address->address, domains);
90 }
91
92 for (i = 0; i < nm_ip4_config_get_num_routes (ip4); i++) {
93 const NMPlatformIP4Route *route = nm_ip4_config_get_route (ip4, i);
94
95 add_ip4_to_rdns_array (route->network, domains);
96 }
97
98 /* Terminating NULL so we can use g_strfreev() to free it */
99 g_ptr_array_add (domains, NULL);
100
101 /* Free the array and return NULL if the only element was the ending NULL */
102 return (char **) g_ptr_array_free (domains, (domains->len == 1));
103 }
104
+0
-28
src/dns-manager/nm-dns-utils.h less more
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2, or (at your option)
4 * any later version.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, write to the Free Software Foundation, Inc.,
13 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14 *
15 * Copyright (C) 2010 Red Hat, Inc.
16 *
17 */
18
19 #ifndef __NETWORKMANAGER_DNS_UTILS_H__
20 #define __NETWORKMANAGER_DNS_UTILS_H__
21
22 #include "nm-ip4-config.h"
23
24 char **nm_dns_utils_get_ip4_rdns_domains (NMIP4Config *ip4);
25
26 #endif /* NM_DNS_UTILS_H */
27
164164 /*******************************************/
165165
166166 static void
167 dm_exit_code (guint dm_exit_status)
168 {
169 char *msg = "Unknown error";
170
171 switch (dm_exit_status) {
172 case 1:
173 msg = "Configuration problem";
174 break;
175 case 2:
176 msg = "Network access problem (address in use; permissions; etc)";
177 break;
178 case 3:
179 msg = "Filesystem problem (missing file/directory; permissions; etc)";
180 break;
181 case 4:
182 msg = "Memory allocation failure";
183 break;
184 case 5:
185 msg = "Other problem";
186 break;
187 default:
188 if (dm_exit_status >= 11)
189 msg = "Lease-script 'init' process failure";
190 break;
191 }
192
193 _LOGW ("dnsmasq exited with error: %s (%d)", msg, dm_exit_status);
194 }
195
196 static void
197167 dm_watch_cb (GPid pid, gint status, gpointer user_data)
198168 {
199169 NMDnsMasqManager *manager = NM_DNSMASQ_MANAGER (user_data);
202172
203173 if (WIFEXITED (status)) {
204174 err = WEXITSTATUS (status);
205 if (err != 0)
206 dm_exit_code (err);
175 if (err != 0) {
176 _LOGW ("dnsmasq exited with error: %s",
177 nm_utils_dnsmasq_status_to_string (err, NULL, 0));
178 }
207179 } else if (WIFSTOPPED (status)) {
208180 _LOGW ("dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
209181 } else if (WIFSIGNALED (status)) {
520520 NM = @NM@
521521 NMEDIT = @NMEDIT@
522522 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
523 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
523524 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
524525 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
525526 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
187187 void
188188 nm_main_config_reload (int signal)
189189 {
190 NMConfigChangeFlags reload_flags;
191
192 switch (signal) {
193 case SIGHUP:
194 reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
195 break;
196 case SIGUSR1:
197 reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGUSR1;
198 break;
199 case SIGUSR2:
200 reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
201 break;
202 default:
203 g_return_if_reached ();
204 }
205
190206 nm_log_info (LOGD_CORE, "reload configuration (signal %s)...", strsignal (signal));
207
191208 /* The signal handler thread is only installed after
192209 * creating NMConfig instance, and on shut down we
193210 * no longer run the mainloop (to reach this point).
194211 *
195212 * Hence, a NMConfig singleton instance must always be
196213 * available. */
197 nm_config_reload (nm_config_get (), signal);
214 nm_config_reload (nm_config_get (), reload_flags);
198215 }
199216
200217 static void
2020 #include "nm-default.h"
2121
2222 #include "nm-active-connection.h"
23
24 #include "nm-common-macros.h"
2325 #include "nm-dbus-interface.h"
2426 #include "nm-device.h"
2527 #include "nm-settings-connection.h"
6971 gpointer user_data2;
7072 } NMActiveConnectionPrivate;
7173
72 enum {
73 PROP_0,
74 NM_GOBJECT_PROPERTIES_DEFINE (NMActiveConnection,
7475 PROP_CONNECTION,
7576 PROP_ID,
7677 PROP_UUID,
9293 PROP_INT_SUBJECT,
9394 PROP_INT_MASTER,
9495 PROP_INT_MASTER_READY,
95
96 LAST_PROP
97 };
96 );
9897
9998 enum {
10099 DEVICE_CHANGED,
136135
137136 /****************************************************************/
138137
138 static void
139 _settings_connection_updated (NMSettingsConnection *connection,
140 gboolean by_user,
141 gpointer user_data)
142 {
143 NMActiveConnection *self = user_data;
144
145 /* we don't know which properties actually changed. Just to be sure,
146 * notify about all possible properties. After all, an update of a
147 * connection is a rare event. */
148
149 _notify (self, PROP_ID);
150
151 /* it's a bit odd to update the TYPE of an active connection. But the alternative
152 * is unexpected too. */
153 _notify (self, PROP_TYPE);
154
155 /* currently, the UUID and the exported CONNECTION path cannot change. Later, we might
156 * want to support a re-link operation, which associates an active-connection with a different
157 * settings-connection. */
158 }
159
160 static void
161 _set_settings_connection (NMActiveConnection *self, NMSettingsConnection *connection)
162 {
163 NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
164
165 if (priv->settings_connection == connection)
166 return;
167 if (priv->settings_connection) {
168 g_signal_handlers_disconnect_by_func (priv->settings_connection, _settings_connection_updated, self);
169 g_clear_object (&priv->settings_connection);
170 }
171 if (connection) {
172 priv->settings_connection = g_object_ref (connection);
173 g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL, (GCallback) _settings_connection_updated, self);
174 }
175 }
176
139177 NMActiveConnectionState
140178 nm_active_connection_get_state (NMActiveConnection *self)
141179 {
163201 old_state = priv->state;
164202 priv->state = new_state;
165203 priv->state_set = TRUE;
166 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE);
204 _notify (self, PROP_STATE);
167205
168206 check_master_ready (self);
169207
185223
186224 if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED
187225 || old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) {
188 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP4_CONFIG);
189 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DHCP4_CONFIG);
190 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP6_CONFIG);
191 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DHCP6_CONFIG);
226 _notify (self, PROP_IP4_CONFIG);
227 _notify (self, PROP_DHCP4_CONFIG);
228 _notify (self, PROP_IP6_CONFIG);
229 _notify (self, PROP_DHCP6_CONFIG);
192230 }
193231
194232 if (priv->state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) {
197235 * which will be NULL due to conditions in get_property().
198236 */
199237 _device_cleanup (self);
200 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEVICES);
238 _notify (self, PROP_DEVICES);
201239 }
202240 }
203241
275313 * For example, we'd have to cancel all pending seret requests. */
276314 g_return_if_fail (!nm_exported_object_is_exported (NM_EXPORTED_OBJECT (self)));
277315
278 priv->settings_connection = g_object_ref (connection);
316 _set_settings_connection (self, connection);
279317 priv->applied_connection = nm_simple_connection_new_clone (NM_CONNECTION (priv->settings_connection));
280318 nm_connection_clear_secrets (priv->applied_connection);
281319 }
338376
339377 g_free (priv->specific_object);
340378 priv->specific_object = g_strdup (specific_object);
341 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT);
379 _notify (self, PROP_SPECIFIC_OBJECT);
342380 }
343381
344382 void
355393 return;
356394
357395 priv->is_default = is_default;
358 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEFAULT);
396 _notify (self, PROP_DEFAULT);
359397 }
360398
361399 gboolean
380418 return;
381419
382420 priv->is_default6 = is_default6;
383 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEFAULT6);
421 _notify (self, PROP_DEFAULT6);
384422 }
385423
386424 gboolean
523561 g_warn_if_fail (priv->state > NM_ACTIVE_CONNECTION_STATE_UNKNOWN);
524562 priv->device = NULL;
525563 }
526 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_INT_DEVICE);
564 _notify (self, PROP_INT_DEVICE);
527565
528566 g_signal_emit (self, signals[DEVICE_CHANGED], 0, priv->device, old_device);
529567
530 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_DEVICES);
568 _notify (self, PROP_DEVICES);
531569
532570 return TRUE;
533571 }
588626
589627 if (signalling) {
590628 priv->master_ready = TRUE;
591 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_INT_MASTER_READY);
629 _notify (self, PROP_INT_MASTER_READY);
592630
593631 /* Also notify clients to recheck the exported 'master' property to
594632 * ensure that if the master connection was created without a device
595633 * that we notify clients when the master device is known.
596634 */
597 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_MASTER);
635 _notify (self, PROP_MASTER);
598636 }
599637 }
600638
920958 set_property (GObject *object, guint prop_id,
921959 const GValue *value, GParamSpec *pspec)
922960 {
923 NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
961 NMActiveConnection *self = (NMActiveConnection *) object;
962 NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self);
924963 const char *tmp;
925964 NMSettingsConnection *con;
926965
929968 /* construct-only */
930969 con = g_value_get_object (value);
931970 if (con) {
932 priv->settings_connection = g_object_ref (con);
933 priv->applied_connection = nm_simple_connection_new_clone (NM_CONNECTION (con));
971 _set_settings_connection (self, con);
972 priv->applied_connection = nm_simple_connection_new_clone ((NMConnection *) priv->settings_connection);
934973 nm_connection_clear_secrets (priv->applied_connection);
935974 }
936975 break;
937976 case PROP_INT_DEVICE:
938977 /* construct-only */
939 nm_active_connection_set_device (NM_ACTIVE_CONNECTION (object), g_value_get_object (value));
978 nm_active_connection_set_device (self, g_value_get_object (value));
940979 break;
941980 case PROP_INT_SUBJECT:
942981 priv->subject = g_value_dup_object (value);
943982 break;
944983 case PROP_INT_MASTER:
945 nm_active_connection_set_master (NM_ACTIVE_CONNECTION (object), g_value_get_object (value));
984 nm_active_connection_set_master (self, g_value_get_object (value));
946985 break;
947986 case PROP_SPECIFIC_OBJECT:
948987 tmp = g_value_get_string (value);
10821121 g_free (priv->specific_object);
10831122 priv->specific_object = NULL;
10841123
1085 g_clear_object (&priv->settings_connection);
1124 _set_settings_connection (self, NULL);
10861125 g_clear_object (&priv->applied_connection);
10871126
10881127 _device_cleanup (self);
11191158 object_class->dispose = dispose;
11201159
11211160 /* D-Bus exported properties */
1122 g_object_class_install_property
1123 (object_class, PROP_CONNECTION,
1124 g_param_spec_string (NM_ACTIVE_CONNECTION_CONNECTION, "", "",
1125 NULL,
1126 G_PARAM_READABLE |
1127 G_PARAM_STATIC_STRINGS));
1128
1129 g_object_class_install_property
1130 (object_class, PROP_ID,
1131 g_param_spec_string (NM_ACTIVE_CONNECTION_ID, "", "",
1132 NULL,
1133 G_PARAM_READABLE |
1134 G_PARAM_STATIC_STRINGS));
1135
1136 g_object_class_install_property
1137 (object_class, PROP_UUID,
1138 g_param_spec_string (NM_ACTIVE_CONNECTION_UUID, "", "",
1139 NULL,
1140 G_PARAM_READABLE |
1141 G_PARAM_STATIC_STRINGS));
1142
1143 g_object_class_install_property
1144 (object_class, PROP_TYPE,
1145 g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE, "", "",
1146 NULL,
1147 G_PARAM_READABLE |
1148 G_PARAM_STATIC_STRINGS));
1149
1150 g_object_class_install_property
1151 (object_class, PROP_SPECIFIC_OBJECT,
1152 g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, "", "",
1153 NULL,
1154 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1155 G_PARAM_STATIC_STRINGS));
1156
1157 g_object_class_install_property
1158 (object_class, PROP_DEVICES,
1159 g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES, "", "",
1160 G_TYPE_STRV,
1161 G_PARAM_READABLE |
1162 G_PARAM_STATIC_STRINGS));
1163
1164 g_object_class_install_property
1165 (object_class, PROP_STATE,
1166 g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE, "", "",
1167 NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
1168 NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
1169 NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
1170 G_PARAM_READABLE |
1171 G_PARAM_STATIC_STRINGS));
1172
1173 g_object_class_install_property
1174 (object_class, PROP_DEFAULT,
1175 g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT, "", "",
1176 FALSE,
1177 G_PARAM_READWRITE |
1178 G_PARAM_STATIC_STRINGS));
1179
1180 g_object_class_install_property
1181 (object_class, PROP_IP4_CONFIG,
1182 g_param_spec_string (NM_ACTIVE_CONNECTION_IP4_CONFIG, "", "",
1183 NULL,
1184 G_PARAM_READABLE |
1185 G_PARAM_STATIC_STRINGS));
1186
1187 g_object_class_install_property
1188 (object_class, PROP_DHCP4_CONFIG,
1189 g_param_spec_string (NM_ACTIVE_CONNECTION_DHCP4_CONFIG, "", "",
1190 NULL,
1191 G_PARAM_READABLE |
1192 G_PARAM_STATIC_STRINGS));
1193
1194 g_object_class_install_property
1195 (object_class, PROP_DEFAULT6,
1196 g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6, "", "",
1197 FALSE,
1198 G_PARAM_READWRITE |
1199 G_PARAM_STATIC_STRINGS));
1200
1201 g_object_class_install_property
1202 (object_class, PROP_IP6_CONFIG,
1203 g_param_spec_string (NM_ACTIVE_CONNECTION_IP6_CONFIG, "", "",
1204 NULL,
1205 G_PARAM_READABLE |
1206 G_PARAM_STATIC_STRINGS));
1207
1208 g_object_class_install_property
1209 (object_class, PROP_DHCP6_CONFIG,
1210 g_param_spec_string (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
1211 NULL,
1212 G_PARAM_READABLE |
1213 G_PARAM_STATIC_STRINGS));
1214
1215 g_object_class_install_property
1216 (object_class, PROP_VPN,
1217 g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN, "", "",
1218 FALSE,
1219 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1220 G_PARAM_STATIC_STRINGS));
1221
1222 g_object_class_install_property
1223 (object_class, PROP_MASTER,
1224 g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER, "", "",
1225 NULL,
1226 G_PARAM_READABLE |
1227 G_PARAM_STATIC_STRINGS));
1161 obj_properties[PROP_CONNECTION] =
1162 g_param_spec_string (NM_ACTIVE_CONNECTION_CONNECTION, "", "",
1163 NULL,
1164 G_PARAM_READABLE |
1165 G_PARAM_STATIC_STRINGS);
1166
1167 obj_properties[PROP_ID] =
1168 g_param_spec_string (NM_ACTIVE_CONNECTION_ID, "", "",
1169 NULL,
1170 G_PARAM_READABLE |
1171 G_PARAM_STATIC_STRINGS);
1172
1173 obj_properties[PROP_UUID] =
1174 g_param_spec_string (NM_ACTIVE_CONNECTION_UUID, "", "",
1175 NULL,
1176 G_PARAM_READABLE |
1177 G_PARAM_STATIC_STRINGS);
1178
1179 obj_properties[PROP_TYPE] =
1180 g_param_spec_string (NM_ACTIVE_CONNECTION_TYPE, "", "",
1181 NULL,
1182 G_PARAM_READABLE |
1183 G_PARAM_STATIC_STRINGS);
1184
1185 obj_properties[PROP_SPECIFIC_OBJECT] =
1186 g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, "", "",
1187 NULL,
1188 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1189 G_PARAM_STATIC_STRINGS);
1190
1191 obj_properties[PROP_DEVICES] =
1192 g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES, "", "",
1193 G_TYPE_STRV,
1194 G_PARAM_READABLE |
1195 G_PARAM_STATIC_STRINGS);
1196
1197 obj_properties[PROP_STATE] =
1198 g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE, "", "",
1199 NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
1200 NM_ACTIVE_CONNECTION_STATE_DEACTIVATING,
1201 NM_ACTIVE_CONNECTION_STATE_UNKNOWN,
1202 G_PARAM_READABLE |
1203 G_PARAM_STATIC_STRINGS);
1204
1205 obj_properties[PROP_DEFAULT] =
1206 g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT, "", "",
1207 FALSE,
1208 G_PARAM_READWRITE |
1209 G_PARAM_STATIC_STRINGS);
1210
1211 obj_properties[PROP_IP4_CONFIG] =
1212 g_param_spec_string (NM_ACTIVE_CONNECTION_IP4_CONFIG, "", "",
1213 NULL,
1214 G_PARAM_READABLE |
1215 G_PARAM_STATIC_STRINGS);
1216
1217 obj_properties[PROP_DHCP4_CONFIG] =
1218 g_param_spec_string (NM_ACTIVE_CONNECTION_DHCP4_CONFIG, "", "",
1219 NULL,
1220 G_PARAM_READABLE |
1221 G_PARAM_STATIC_STRINGS);
1222
1223 obj_properties[PROP_DEFAULT6] =
1224 g_param_spec_boolean (NM_ACTIVE_CONNECTION_DEFAULT6, "", "",
1225 FALSE,
1226 G_PARAM_READWRITE |
1227 G_PARAM_STATIC_STRINGS);
1228
1229 obj_properties[PROP_IP6_CONFIG] =
1230 g_param_spec_string (NM_ACTIVE_CONNECTION_IP6_CONFIG, "", "",
1231 NULL,
1232 G_PARAM_READABLE |
1233 G_PARAM_STATIC_STRINGS);
1234
1235 obj_properties[PROP_DHCP6_CONFIG] =
1236 g_param_spec_string (NM_ACTIVE_CONNECTION_DHCP6_CONFIG, "", "",
1237 NULL,
1238 G_PARAM_READABLE |
1239 G_PARAM_STATIC_STRINGS);
1240
1241 obj_properties[PROP_VPN] =
1242 g_param_spec_boolean (NM_ACTIVE_CONNECTION_VPN, "", "",
1243 FALSE,
1244 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1245 G_PARAM_STATIC_STRINGS);
1246
1247 obj_properties[PROP_MASTER] =
1248 g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER, "", "",
1249 NULL,
1250 G_PARAM_READABLE |
1251 G_PARAM_STATIC_STRINGS);
12281252
12291253 /* Internal properties */
1230 g_object_class_install_property
1231 (object_class, PROP_INT_SETTINGS_CONNECTION,
1232 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, "", "",
1233 NM_TYPE_SETTINGS_CONNECTION,
1234 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
1235 G_PARAM_STATIC_STRINGS));
1236
1237 g_object_class_install_property
1238 (object_class, PROP_INT_DEVICE,
1239 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_DEVICE, "", "",
1240 NM_TYPE_DEVICE,
1241 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1242 G_PARAM_STATIC_STRINGS));
1243
1244 g_object_class_install_property
1245 (object_class, PROP_INT_SUBJECT,
1246 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SUBJECT, "", "",
1247 NM_TYPE_AUTH_SUBJECT,
1248 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1249 G_PARAM_STATIC_STRINGS));
1250
1251 g_object_class_install_property
1252 (object_class, PROP_INT_MASTER,
1253 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_MASTER, "", "",
1254 NM_TYPE_ACTIVE_CONNECTION,
1255 G_PARAM_READWRITE |
1256 G_PARAM_STATIC_STRINGS));
1257
1258 g_object_class_install_property
1259 (object_class, PROP_INT_MASTER_READY,
1260 g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_MASTER_READY, "", "",
1261 FALSE, G_PARAM_READABLE |
1262 G_PARAM_STATIC_STRINGS));
1254 obj_properties[PROP_INT_SETTINGS_CONNECTION] =
1255 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SETTINGS_CONNECTION, "", "",
1256 NM_TYPE_SETTINGS_CONNECTION,
1257 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
1258 G_PARAM_STATIC_STRINGS);
1259
1260 obj_properties[PROP_INT_DEVICE] =
1261 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_DEVICE, "", "",
1262 NM_TYPE_DEVICE,
1263 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1264 G_PARAM_STATIC_STRINGS);
1265
1266 obj_properties[PROP_INT_SUBJECT] =
1267 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_SUBJECT, "", "",
1268 NM_TYPE_AUTH_SUBJECT,
1269 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
1270 G_PARAM_STATIC_STRINGS);
1271
1272 obj_properties[PROP_INT_MASTER] =
1273 g_param_spec_object (NM_ACTIVE_CONNECTION_INT_MASTER, "", "",
1274 NM_TYPE_ACTIVE_CONNECTION,
1275 G_PARAM_READWRITE |
1276 G_PARAM_STATIC_STRINGS);
1277
1278 obj_properties[PROP_INT_MASTER_READY] =
1279 g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_MASTER_READY, "", "",
1280 FALSE, G_PARAM_READABLE |
1281 G_PARAM_STATIC_STRINGS);
1282
1283 g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
12631284
12641285 signals[DEVICE_CHANGED] =
1265 g_signal_new (NM_ACTIVE_CONNECTION_DEVICE_CHANGED,
1266 G_OBJECT_CLASS_TYPE (object_class),
1267 G_SIGNAL_RUN_FIRST,
1268 G_STRUCT_OFFSET (NMActiveConnectionClass, device_changed),
1269 NULL, NULL, NULL,
1270 G_TYPE_NONE, 2, NM_TYPE_DEVICE, NM_TYPE_DEVICE);
1286 g_signal_new (NM_ACTIVE_CONNECTION_DEVICE_CHANGED,
1287 G_OBJECT_CLASS_TYPE (object_class),
1288 G_SIGNAL_RUN_FIRST,
1289 G_STRUCT_OFFSET (NMActiveConnectionClass, device_changed),
1290 NULL, NULL, NULL,
1291 G_TYPE_NONE, 2, NM_TYPE_DEVICE, NM_TYPE_DEVICE);
12711292
12721293 signals[DEVICE_METERED_CHANGED] =
1273 g_signal_new (NM_ACTIVE_CONNECTION_DEVICE_METERED_CHANGED,
1274 G_OBJECT_CLASS_TYPE (object_class),
1275 G_SIGNAL_RUN_FIRST,
1276 G_STRUCT_OFFSET (NMActiveConnectionClass, device_metered_changed),
1277 NULL, NULL, NULL,
1278 G_TYPE_NONE, 1, G_TYPE_UINT);
1294 g_signal_new (NM_ACTIVE_CONNECTION_DEVICE_METERED_CHANGED,
1295 G_OBJECT_CLASS_TYPE (object_class),
1296 G_SIGNAL_RUN_FIRST,
1297 G_STRUCT_OFFSET (NMActiveConnectionClass, device_metered_changed),
1298 NULL, NULL, NULL,
1299 G_TYPE_NONE, 1, G_TYPE_UINT);
12791300
12801301 signals[PARENT_ACTIVE] =
1281 g_signal_new (NM_ACTIVE_CONNECTION_PARENT_ACTIVE,
1282 G_OBJECT_CLASS_TYPE (object_class),
1283 G_SIGNAL_RUN_FIRST,
1284 G_STRUCT_OFFSET (NMActiveConnectionClass, parent_active),
1285 NULL, NULL, NULL,
1286 G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
1302 g_signal_new (NM_ACTIVE_CONNECTION_PARENT_ACTIVE,
1303 G_OBJECT_CLASS_TYPE (object_class),
1304 G_SIGNAL_RUN_FIRST,
1305 G_STRUCT_OFFSET (NMActiveConnectionClass, parent_active),
1306 NULL, NULL, NULL,
1307 G_TYPE_NONE, 1, NM_TYPE_ACTIVE_CONNECTION);
12871308
12881309 nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (ac_class),
12891310 NMDBUS_TYPE_ACTIVE_CONNECTION_SKELETON,
5252 #define NM_AUDIT_OP_CONN_DEACTIVATE "connection-deactivate"
5353 #define NM_AUDIT_OP_CONN_CLEAR_SECRETS "connection-clear-secrets"
5454
55 #define NM_AUDIT_OP_RELOAD "reload"
5556 #define NM_AUDIT_OP_SLEEP_CONTROL "sleep-control"
5657 #define NM_AUDIT_OP_NET_CONTROL "networking-control"
5758 #define NM_AUDIT_OP_RADIO_CONTROL "radio-control"
1919
2020 #include "nm-default.h"
2121
22 #include "nm-auth-utils.h"
23
2224 #include <string.h>
2325
2426 #include "nm-setting-connection.h"
25 #include "nm-auth-utils.h"
2627 #include "nm-auth-subject.h"
2728 #include "nm-auth-manager.h"
2829 #include "nm-session-monitor.h"
2020 #ifndef __NETWORKMANAGER_MANAGER_AUTH_H__
2121 #define __NETWORKMANAGER_MANAGER_AUTH_H__
2222
23 #include <nm-connection.h>
24 #include "nm-default.h"
25
26 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
27 #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
28 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
29 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
30 #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
31 #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
32 #define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
33 #define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
34 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
35 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
36 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
37 #define NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS "org.freedesktop.NetworkManager.settings.modify.global-dns"
38
23 #include "nm-connection.h"
3924
4025 typedef struct NMAuthChain NMAuthChain;
4126
11991199
12001200 if (!global_dns_equal (priv_old->global_dns, priv_new->global_dns))
12011201 changes |= NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG;
1202
1203 nm_assert (!NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSES));
12021204
12031205 return changes;
12041206 }
1919
2020 #ifndef NM_CONFIG_DATA_H
2121 #define NM_CONFIG_DATA_H
22
23
24 #include "nm-default.h"
25
26 G_BEGIN_DECLS
2722
2823 #define NM_TYPE_CONFIG_DATA (nm_config_data_get_type ())
2924 #define NM_CONFIG_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG_DATA, NMConfigData))
4338 #define NM_CONFIG_DATA_NO_AUTO_DEFAULT "no-auto-default"
4439 #define NM_CONFIG_DATA_DNS_MODE "dns"
4540
46 typedef enum { /*<flags >*/
41 /* The flags for Reload. Currently these are internal defines,
42 * only their numeric value matters and must be stable as
43 * they are public API! Also, the enum must fit in uint32. */
44 enum { /*< skip >*/
45 NM_MANAGER_RELOAD_FLAGS_NONE = 0,
46
47 /* reload the configuration from disk */
48 NM_MANAGER_RELOAD_FLAGS_CONF = (1LL << 0),
49
50 /* write DNS configuration to resolv.conf */
51 NM_MANAGER_RELOAD_FLAGS_DNS_RC = (1LL << 1),
52
53 /* restart the DNS plugin (includes DNS_RC) */
54 NM_MANAGER_RELOAD_FLAGS_DNS_FULL = (1LL << 2),
55
56 _NM_MANAGER_RELOAD_FLAGS_ALL,
57 NM_MANAGER_RELOAD_FLAGS_ALL = ((_NM_MANAGER_RELOAD_FLAGS_ALL - 1) << 1) - 1,
58 };
59
60 typedef enum { /*< flags >*/
4761 NM_CONFIG_GET_VALUE_NONE = 0,
4862
4963 /* use g_key_file_get_value() instead of g_key_file_get_string(). */
6377 typedef enum { /*< flags >*/
6478 NM_CONFIG_CHANGE_NONE = 0,
6579
66 NM_CONFIG_CHANGE_SIGHUP = (1L << 0),
67 NM_CONFIG_CHANGE_SIGUSR1 = (1L << 1),
68 NM_CONFIG_CHANGE_SIGUSR2 = (1L << 2),
69
70 NM_CONFIG_CHANGE_CONFIG_FILES = (1L << 3),
71 NM_CONFIG_CHANGE_VALUES = (1L << 4),
72 NM_CONFIG_CHANGE_VALUES_USER = (1L << 5),
73 NM_CONFIG_CHANGE_VALUES_INTERN = (1L << 6),
74 NM_CONFIG_CHANGE_CONNECTIVITY = (1L << 7),
75 NM_CONFIG_CHANGE_NO_AUTO_DEFAULT = (1L << 8),
76 NM_CONFIG_CHANGE_DNS_MODE = (1L << 9),
77 NM_CONFIG_CHANGE_RC_MANAGER = (1L << 10),
78 NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG = (1L << 11),
79
80 _NM_CONFIG_CHANGE_LAST,
81 NM_CONFIG_CHANGE_ALL = ((_NM_CONFIG_CHANGE_LAST - 1) << 1) - 1,
80 /**************************************************************************
81 * The external cause which triggered the reload/configuration-change
82 *************************************************************************/
83
84 NM_CONFIG_CHANGE_CAUSE_SIGHUP = (1L << 0),
85 NM_CONFIG_CHANGE_CAUSE_SIGUSR1 = (1L << 1),
86 NM_CONFIG_CHANGE_CAUSE_SIGUSR2 = (1L << 2),
87 NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT = (1L << 3),
88 NM_CONFIG_CHANGE_CAUSE_SET_VALUES = (1L << 4),
89 NM_CONFIG_CHANGE_CAUSE_CONF = (1L << 5),
90 NM_CONFIG_CHANGE_CAUSE_DNS_RC = (1L << 6),
91 NM_CONFIG_CHANGE_CAUSE_DNS_FULL = (1L << 7),
92
93 NM_CONFIG_CHANGE_CAUSES = ((1L << 8) - 1),
94
95 /**************************************************************************
96 * Following flags describe which property of the configuration changed:
97 *************************************************************************/
98
99 /* main-file or config-description changed */
100 NM_CONFIG_CHANGE_CONFIG_FILES = (1L << 10),
101
102
103 /* any configuration on disk changed */
104 NM_CONFIG_CHANGE_VALUES = (1L << 11),
105
106 /* any user configuration on disk changed (NetworkManager.conf) */
107 NM_CONFIG_CHANGE_VALUES_USER = (1L << 12),
108
109 /* any internal configuration on disk changed (NetworkManager-intern.conf) */
110 NM_CONFIG_CHANGE_VALUES_INTERN = (1L << 13),
111
112
113 /* configuration regarding connectivity changed */
114 NM_CONFIG_CHANGE_CONNECTIVITY = (1L << 14),
115
116 /* configuration regarding no-auto-default changed */
117 NM_CONFIG_CHANGE_NO_AUTO_DEFAULT = (1L << 15),
118
119 /* configuration regarding dns-mode changed */
120 NM_CONFIG_CHANGE_DNS_MODE = (1L << 16),
121
122 /* configuration regarding rc-manager changed */
123 NM_CONFIG_CHANGE_RC_MANAGER = (1L << 17),
124
125 /* configuration regarding global dns-config changed */
126 NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG = (1L << 18),
127
82128 } NMConfigChangeFlags;
83129
84130 struct _NMConfigData {
163209 GKeyFile *_nm_config_data_get_keyfile_user (const NMConfigData *self);
164210 GKeyFile *_nm_config_data_get_keyfile_intern (const NMConfigData *self);
165211
166 G_END_DECLS
167
168212 #endif /* NM_CONFIG_DATA_H */
169213
2020
2121 #include "nm-default.h"
2222
23 #include "nm-config.h"
24
2325 #include <string.h>
2426 #include <stdio.h>
2527
26 #include "nm-config.h"
2728 #include "nm-utils.h"
2829 #include "nm-device.h"
2930 #include "NetworkManagerUtils.h"
108109
109110 /************************************************************************/
110111
111 static void _set_config_data (NMConfig *self, NMConfigData *new_data, int signal);
112 static void _set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags);
112113
113114 /************************************************************************/
114115
392393 /* unref no_auto_default_set here. Note that _set_config_data() probably invalidates the content of the array. */
393394 g_ptr_array_unref (no_auto_default_new);
394395
395 _set_config_data (self, new_data, 0);
396 _set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT);
396397 }
397398
398399 /************************************************************************/
633634
634635 kf = nm_config_create_keyfile ();
635636 if (!g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, error)) {
637 g_prefix_error (error, "%s: ", path);
636638 g_key_file_free (kf);
637639 return FALSE;
638640 }
645647 /* the config-group is internal to every configuration snippets. It doesn't make sense
646648 * to merge the into the global configuration, and it doesn't make sense to preserve the
647649 * group beyond this point. */
648 g_key_file_remove_group (keyfile, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL);
650 g_key_file_remove_group (kf, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL);
649651
650652 /* Override the current settings with the new ones */
651653 groups = g_key_file_get_groups (kf, &ngroups);
814816 }
815817
816818 if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
817 nm_log_warn (LOGD_CORE, "Old default config file %s invalid: %s\n",
818 DEFAULT_CONFIG_MAIN_FILE_OLD,
819 nm_log_warn (LOGD_CORE, "Old default config file invalid: %s\n",
819820 my_error->message);
820821 }
821822 g_clear_error (&my_error);
827828 }
828829
829830 if (!g_error_matches (my_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
830 nm_log_warn (LOGD_CORE, "Default config file %s invalid: %s\n",
831 DEFAULT_CONFIG_MAIN_FILE,
831 nm_log_warn (LOGD_CORE, "Default config file invalid: %s\n",
832832 my_error->message);
833833 g_propagate_error (error, my_error);
834834 return FALSE;
16391639 nm_log_dbg (LOGD_CORE, "don't persistate internal configuration (no file set, use --intern-config?)");
16401640 }
16411641 if (new_data)
1642 _set_config_data (self, new_data, 0);
1642 _set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_SET_VALUES);
16431643
16441644 g_key_file_unref (keyfile_new);
16451645 }
16471647 /************************************************************************/
16481648
16491649 void
1650 nm_config_reload (NMConfig *self, int signal)
1650 nm_config_reload (NMConfig *self, NMConfigChangeFlags reload_flags)
16511651 {
16521652 NMConfigPrivate *priv;
16531653 GError *error = NULL;
16591659 gboolean intern_config_needs_rewrite;
16601660
16611661 g_return_if_fail (NM_IS_CONFIG (self));
1662 g_return_if_fail ( reload_flags
1663 && !NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES)
1664 && !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT
1665 | NM_CONFIG_CHANGE_CAUSE_SET_VALUES));
16621666
16631667 priv = NM_CONFIG_GET_PRIVATE (self);
16641668
1665 if (signal != SIGHUP) {
1666 _set_config_data (self, NULL, signal);
1669 if (!NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_SIGHUP | NM_CONFIG_CHANGE_CAUSE_CONF)) {
1670 /* unless SIGHUP is specified, we don't reload the configuration from disc. */
1671 _set_config_data (self, NULL, reload_flags);
16671672 return;
16681673 }
16691674
16801685 if (!keyfile) {
16811686 nm_log_err (LOGD_CORE, "Failed to reload the configuration: %s", error->message);
16821687 g_clear_error (&error);
1683 _set_config_data (self, NULL, signal);
1688 _set_config_data (self, NULL, reload_flags);
16841689 return;
16851690 }
16861691
17021707 if (keyfile_intern)
17031708 g_key_file_unref (keyfile_intern);
17041709
1705 _set_config_data (self, new_data, signal);
1710 _set_config_data (self, new_data, reload_flags);
17061711 }
17071712
17081713 NM_UTILS_FLAGS2STR_DEFINE (nm_config_change_flags_to_string, NMConfigChangeFlags,
1709 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGHUP, "SIGHUP"),
1710 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR1, "SIGUSR1"),
1711 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR2, "SIGUSR2"),
1714
1715 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_CONF, "CONF"),
1716 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_RC, "DNS_RC"),
1717 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_FULL, "DNS_FULL"),
1718 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGHUP, "SIGHUP"),
1719 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR1, "SIGUSR1"),
1720 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR2, "SIGUSR2"),
1721 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, "NO_AUTO_DEFAULT"),
1722 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SET_VALUES, "SET_VALUES"),
1723
17121724 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CONFIG_FILES, "config-files"),
17131725 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES, "values"),
17141726 NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES_USER, "values-user"),
17211733 );
17221734
17231735 static void
1724 _set_config_data (NMConfig *self, NMConfigData *new_data, int signal)
1736 _set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags)
17251737 {
17261738 NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self);
17271739 NMConfigData *old_data = priv->config_data;
17281740 NMConfigChangeFlags changes, changes_diff;
17291741 gboolean had_new_data = !!new_data;
17301742
1731 switch (signal) {
1732 case SIGHUP:
1733 changes = NM_CONFIG_CHANGE_SIGHUP;
1734 break;
1735 case SIGUSR1:
1736 changes = NM_CONFIG_CHANGE_SIGUSR1;
1737 break;
1738 case SIGUSR2:
1739 changes = NM_CONFIG_CHANGE_SIGUSR2;
1740 break;
1741 default:
1742 changes = NM_CONFIG_CHANGE_NONE;
1743 break;
1744 }
1743 nm_assert (reload_flags);
1744 nm_assert (!NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES));
1745 nm_assert ( NM_IN_SET (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, NM_CONFIG_CHANGE_CAUSE_SET_VALUES)
1746 || !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT | NM_CONFIG_CHANGE_CAUSE_SET_VALUES));
1747
1748 changes = reload_flags;
17451749
17461750 if (new_data) {
17471751 changes_diff = nm_config_data_diff (old_data, new_data);
17511755 changes |= changes_diff;
17521756 }
17531757
1754 if (changes == NM_CONFIG_CHANGE_NONE)
1758 if ( NM_IN_SET (reload_flags,
1759 NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT,
1760 NM_CONFIG_CHANGE_CAUSE_SET_VALUES,
1761 NM_CONFIG_CHANGE_CAUSE_CONF)
1762 && !new_data) {
1763 /* no relevant changes that should be propagated. Return silently. */
17551764 return;
1765 }
17561766
17571767 if (new_data) {
1758 nm_log_info (LOGD_CORE, "config: update %s (%s)", nm_config_data_get_config_description (new_data),
1759 nm_config_change_flags_to_string (changes, NULL, 0));
1768 nm_log_info (LOGD_CORE, "config: signal %s (%s)",
1769 nm_config_change_flags_to_string (changes, NULL, 0),
1770 nm_config_data_get_config_description (new_data));
17601771 nm_config_data_log (new_data, "CONFIG: ", " ", NULL);
17611772 priv->config_data = new_data;
17621773 } else if (had_new_data)
2121 #ifndef __NETWORKMANAGER_CONFIG_H__
2222 #define __NETWORKMANAGER_CONFIG_H__
2323
24
25 #include "nm-default.h"
2624 #include "nm-config-data.h"
27
28 G_BEGIN_DECLS
2925
3026 #define NM_TYPE_CONFIG (nm_config_get_type ())
3127 #define NM_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG, NMConfig))
128124
129125 NMConfig *nm_config_new (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes, GError **error);
130126 NMConfig *nm_config_setup (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes, GError **error);
131 void nm_config_reload (NMConfig *config, int signal);
127 void nm_config_reload (NMConfig *config, NMConfigChangeFlags reload_flags);
132128
133129 gint nm_config_parse_boolean (const char *str, gint default_value);
134130
158154 extern guint _nm_config_match_nm_version;
159155 extern char *_nm_config_match_env;
160156
161 G_END_DECLS
162
163157 #endif /* __NETWORKMANAGER_CONFIG_H__ */
164158
105105 g_signal_new (NM_CP_SIGNAL_CONNECTION_ADDED,
106106 iface_type,
107107 G_SIGNAL_RUN_FIRST,
108 G_STRUCT_OFFSET (NMConnectionProviderInterface, connection_added),
109 NULL, NULL,
108 0, NULL, NULL,
110109 g_cclosure_marshal_VOID__OBJECT,
111110 G_TYPE_NONE, 1, G_TYPE_OBJECT);
112111
113112 g_signal_new (NM_CP_SIGNAL_CONNECTION_UPDATED,
114113 iface_type,
115114 G_SIGNAL_RUN_FIRST,
116 G_STRUCT_OFFSET (NMConnectionProviderInterface, connection_updated),
117 NULL, NULL,
115 0, NULL, NULL,
118116 g_cclosure_marshal_VOID__OBJECT,
119117 G_TYPE_NONE, 1, G_TYPE_OBJECT);
120118
121119 g_signal_new (NM_CP_SIGNAL_CONNECTION_REMOVED,
122120 iface_type,
123121 G_SIGNAL_RUN_FIRST,
124 G_STRUCT_OFFSET (NMConnectionProviderInterface, connection_removed),
125 NULL, NULL,
122 0, NULL, NULL,
126123 g_cclosure_marshal_VOID__OBJECT,
127124 G_TYPE_NONE, 1, G_TYPE_OBJECT);
128125 }
6262
6363 NMConnection * (*get_connection_by_uuid) (NMConnectionProvider *self,
6464 const char *uuid);
65
66 /* Signals */
67 void (*connection_added) (NMConnectionProvider *self, NMConnection *connection);
68
69 void (*connection_updated) (NMConnectionProvider *self, NMConnection *connection);
70
71 void (*connection_removed) (NMConnectionProvider *self, NMConnection *connection);
72
7365 } NMConnectionProviderInterface;
7466
7567 GType nm_connection_provider_get_type (void);
11401140 nm_utils_find_helper(const char *progname, const char *try_first, GError **error)
11411141 {
11421142 return nm_utils_file_search_in_paths (progname, try_first, NM_PATHS_DEFAULT, G_FILE_TEST_IS_EXECUTABLE, NULL, NULL, error);
1143 }
1144
1145 /******************************************************************************************/
1146
1147 /**
1148 * nm_utils_read_link_absolute:
1149 * @link_file: file name of the symbolic link
1150 * @error: error reason in case of failure
1151 *
1152 * Uses to g_file_read_link()/readlink() to read the symlink
1153 * and returns the result as absolute path.
1154 **/
1155 char *
1156 nm_utils_read_link_absolute (const char *link_file, GError **error)
1157 {
1158 char *ln, *dirname, *ln_abs;
1159
1160 ln = g_file_read_link (link_file, error);
1161 if (!ln)
1162 return NULL;
1163 if (g_path_is_absolute (ln))
1164 return ln;
1165
1166 dirname = g_path_get_dirname (link_file);
1167 if (!g_path_is_absolute (link_file)) {
1168 gs_free char *dirname_rel = dirname;
1169 gs_free char *current_dir = g_get_current_dir ();
1170
1171 dirname = g_build_filename (current_dir, dirname_rel, NULL);
1172 }
1173 ln_abs = g_build_filename (dirname, ln, NULL);
1174 g_free (dirname);
1175 g_free (ln);
1176 return ln_abs;
11431177 }
11441178
11451179 /******************************************************************************************/
26112645 if (contents[i] != '\0')
26122646 return FALSE;
26132647
2614 return nm_unauto (&contents);
2648 return g_steal_pointer (&contents);
26152649 }
26162650
26172651 /*****************************************************************************/
30843118 return TRUE;
30853119 }
30863120
3121 const char *
3122 nm_utils_dnsmasq_status_to_string (int status, char *dest, guint size)
3123 {
3124 static char buffer[128];
3125 char *msg, *ret;
3126 gs_free char *msg_free = NULL;
3127 int len;
3128
3129 if (status == 0)
3130 msg = "Success";
3131 else if (status == 1)
3132 msg = "Configuration problem";
3133 else if (status == 2)
3134 msg = "Network access problem (address in use, permissions)";
3135 else if (status == 3)
3136 msg = "Filesystem problem (missing file/directory, permissions)";
3137 else if (status == 4)
3138 msg = "Memory allocation failure";
3139 else if (status == 5)
3140 msg = "Other problem";
3141 else if (status >= 11)
3142 msg = msg_free = g_strdup_printf ("Lease script failed with error %d", status - 10);
3143 else
3144 msg = "Unknown problem";
3145
3146 if (dest) {
3147 ret = dest;
3148 len = size;
3149 } else {
3150 ret = buffer;
3151 len = sizeof (buffer);
3152 }
3153
3154 g_snprintf (ret, len, "%s (%d)", msg, status);
3155
3156 return ret;
3157 }
3158
3159 /**
3160 * nm_utils_get_reverse_dns_domains_ip4:
3161 * @addr: IP address in network order
3162 * @plen: prefix length
3163 * @domains: array for results
3164 *
3165 * Creates reverse DNS domains for the given address and prefix length, and
3166 * append them to @domains.
3167 */
3168 void
3169 nm_utils_get_reverse_dns_domains_ip4 (guint32 addr, guint8 plen, GPtrArray *domains)
3170 {
3171 guint32 ip, ip2, mask;
3172 guchar *p;
3173 guint octets;
3174 guint i;
3175 gsize len0, len;
3176 char *str, *s;
3177
3178 g_return_if_fail (domains);
3179 g_return_if_fail (plen <= 32);
3180
3181 if (!plen)
3182 return;
3183
3184 octets = (plen - 1) / 8 + 1;
3185 ip = ntohl (addr);
3186 mask = 0xFFFFFFFF << (32 - plen);
3187 ip &= mask;
3188 ip2 = ip;
3189
3190 len0 = NM_STRLEN ("in-addr.arpa") + (4 * octets) + 1;
3191 while ((ip2 & mask) == ip) {
3192 addr = htonl (ip2);
3193 p = (guchar *) &addr;
3194
3195 len = len0;
3196 str = s = g_malloc (len);
3197 for (i = octets; i > 0; i--)
3198 nm_utils_strbuf_append (&s, &len, "%u.", p[i - 1] & 0xff);
3199 nm_utils_strbuf_append_str (&s, &len, "in-addr.arpa");
3200
3201 g_ptr_array_add (domains, str);
3202
3203 ip2 += 1 << ((32 - plen) & ~7);
3204 }
3205 }
3206
3207 /**
3208 * nm_utils_get_reverse_dns_domains_ip6:
3209 * @addr: IPv6 address
3210 * @plen: prefix length
3211 * @domains: array for results
3212 *
3213 * Creates reverse DNS domains for the given address and prefix length, and
3214 * append them to @domains.
3215 */
3216 void
3217 nm_utils_get_reverse_dns_domains_ip6 (const struct in6_addr *ip, guint8 plen, GPtrArray *domains)
3218 {
3219 struct in6_addr addr;
3220 guint nibbles, bits, entries;
3221 int i, j;
3222 gsize len0, len;
3223 char *str, *s;
3224
3225 g_return_if_fail (domains);
3226 g_return_if_fail (plen <= 128);
3227
3228 if (!plen)
3229 return;
3230
3231 memcpy (&addr, ip, sizeof (struct in6_addr));
3232 nm_utils_ip6_address_clear_host_address (&addr, &addr, plen);
3233
3234 /* Number of nibbles to include in domains */
3235 nibbles = (plen - 1) / 4 + 1;
3236 /* Prefix length in nibble */
3237 bits = plen - ((plen - 1) / 4 * 4);
3238 /* Number of domains */
3239 entries = 1 << (4 - bits);
3240
3241 len0 = NM_STRLEN ("ip6.arpa") + (2 * nibbles) + 1;
3242
3243 #define N_SHIFT(x) ((x) % 2 ? 0 : 4)
3244
3245 for (i = 0; i < entries; i++) {
3246 len = len0;
3247 str = s = g_malloc (len);
3248
3249 for (j = nibbles - 1; j >= 0; j--)
3250 nm_utils_strbuf_append (&s,
3251 &len,
3252 "%x.",
3253 (addr.s6_addr[j / 2] >> N_SHIFT (j)) & 0xf);
3254 nm_utils_strbuf_append_str (&s, &len, "ip6.arpa");
3255
3256 g_ptr_array_add (domains, str);
3257
3258 addr.s6_addr[(nibbles - 1) / 2] += 1 << N_SHIFT (nibbles - 1);
3259 }
3260
3261 #undef N_SHIFT
3262 }
132132 const char *nm_utils_find_helper (const char *progname,
133133 const char *try_first,
134134 GError **error);
135
136 char *nm_utils_read_link_absolute (const char *link_file, GError **error);
135137
136138 typedef enum {
137139 NM_MATCH_SPEC_NO_MATCH = 0,
393395
394396 gboolean nm_utils_ip4_address_is_link_local (in_addr_t addr);
395397
398 const char *nm_utils_dnsmasq_status_to_string (int status, char *dest, guint size);
399
400 void nm_utils_get_reverse_dns_domains_ip4 (guint32 ip, guint8 plen, GPtrArray *domains);
401 void nm_utils_get_reverse_dns_domains_ip6 (const struct in6_addr *ip, guint8 plen, GPtrArray *domains);
402
396403 #endif /* __NM_CORE_UTILS_H__ */
726726
727727 if (device)
728728 ip_ifindex = nm_device_get_ip_ifindex (device);
729 else {
730 ip_ifindex = nm_vpn_connection_get_ip_ifindex (vpn);
731
732 if (ip_ifindex <= 0) {
733 NMDevice *parent = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (vpn));
734
735 if (parent)
736 ip_ifindex = nm_device_get_ip_ifindex (parent);
737 }
738 }
729 else
730 ip_ifindex = nm_vpn_connection_get_ip_ifindex (vpn, TRUE);
739731
740732 entries = vtable->get_entries (priv);
741733 entry = _entry_find_by_source (entries, source, &entry_idx);
817809 }
818810 }
819811 }
820 if (nm_vpn_connection_get_ip_ifindex (vpn) > 0)
812 if (nm_vpn_connection_get_ip_ifindex (vpn, FALSE) > 0)
821813 synced = TRUE;
822814 else {
823815 /* a VPN connection without tunnel device cannot have a non-synced, missing default route.
11481140 if (out_ac)
11491141 *out_ac = NM_ACTIVE_CONNECTION (vpn);
11501142 if (out_ip_iface)
1151 *out_ip_iface = nm_vpn_connection_get_ip_iface (vpn);
1143 *out_ip_iface = nm_vpn_connection_get_ip_iface (vpn, TRUE);
11521144 } else {
11531145 NMDevice *device = entry->source.device;
11541146 NMActRequest *req;
3434 #include "nm-dns-unbound.h"
3535 #include "nm-dns-manager.h"
3636 #include "nm-dns-plugin.h"
37 #include "nm-dns-utils.h"
3837 #include "nm-dnsmasq-manager.h"
3938 #include "nm-dnsmasq-utils.h"
4039 #include "nmp-netns.h"
187186 return g_define_type_id__volatile;
188187 }
189188 GType
190 nm_dns_manager_resolv_conf_mode_get_type (void)
191 {
192 static volatile gsize g_define_type_id__volatile = 0;
193
194 if (g_once_init_enter (&g_define_type_id__volatile))
195 {
196 static const GEnumValue values[] = {
197 { NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED, "NM_DNS_MANAGER_RESOLV_CONF_UNMANAGED", "unmanaged" },
198 { NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT, "NM_DNS_MANAGER_RESOLV_CONF_EXPLICIT", "explicit" },
199 { NM_DNS_MANAGER_RESOLV_CONF_PROXY, "NM_DNS_MANAGER_RESOLV_CONF_PROXY", "proxy" },
200 { 0, NULL, NULL }
201 };
202 GType g_define_type_id =
203 g_enum_register_static (g_intern_static_string ("NMDnsManagerResolvConfMode"), values);
204 g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
205 }
206
207 return g_define_type_id__volatile;
208 }
209 GType
210189 nm_dns_manager_resolv_conf_manager_get_type (void)
211190 {
212191 static volatile gsize g_define_type_id__volatile = 0;
214193 if (g_once_init_enter (&g_define_type_id__volatile))
215194 {
216195 static const GEnumValue values[] = {
217 { _NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY, "_NM_DNS_MANAGER_RESOLV_CONF_MAN_INTERNAL_ONLY", "-nm-dns-manager-resolv-conf-man-internal-only" },
218 { NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE, "NM_DNS_MANAGER_RESOLV_CONF_MAN_NONE", "nm-dns-manager-resolv-conf-man-none" },
219 { NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE", "nm-dns-manager-resolv-conf-man-file" },
220 { NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF", "nm-dns-manager-resolv-conf-man-resolvconf" },
221 { NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG", "nm-dns-manager-resolv-conf-man-netconfig" },
196 { NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN, "NM_DNS_MANAGER_RESOLV_CONF_MAN_UNKNOWN", "unknown" },
197 { NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED, "NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED", "unmanaged" },
198 { NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE, "NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE", "immutable" },
199 { NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK, "NM_DNS_MANAGER_RESOLV_CONF_MAN_SYMLINK", "symlink" },
200 { NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE, "NM_DNS_MANAGER_RESOLV_CONF_MAN_FILE", "file" },
201 { NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF, "NM_DNS_MANAGER_RESOLV_CONF_MAN_RESOLVCONF", "resolvconf" },
202 { NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG, "NM_DNS_MANAGER_RESOLV_CONF_MAN_NETCONFIG", "netconfig" },
222203 { 0, NULL, NULL }
223204 };
224205 GType g_define_type_id =
522503 if (g_once_init_enter (&g_define_type_id__volatile))
523504 {
524505 static const GFlagsValue values[] = {
525 { NM_CONFIG_CHANGE_NONE, "NM_CONFIG_CHANGE_NONE", "nm-config-change-none" },
526 { NM_CONFIG_CHANGE_SIGHUP, "NM_CONFIG_CHANGE_SIGHUP", "nm-config-change-sighup" },
527 { NM_CONFIG_CHANGE_SIGUSR1, "NM_CONFIG_CHANGE_SIGUSR1", "nm-config-change-sigusr1" },
528 { NM_CONFIG_CHANGE_SIGUSR2, "NM_CONFIG_CHANGE_SIGUSR2", "nm-config-change-sigusr2" },
529 { NM_CONFIG_CHANGE_CONFIG_FILES, "NM_CONFIG_CHANGE_CONFIG_FILES", "nm-config-change-config-files" },
530 { NM_CONFIG_CHANGE_VALUES, "NM_CONFIG_CHANGE_VALUES", "nm-config-change-values" },
531 { NM_CONFIG_CHANGE_VALUES_USER, "NM_CONFIG_CHANGE_VALUES_USER", "nm-config-change-values-user" },
532 { NM_CONFIG_CHANGE_VALUES_INTERN, "NM_CONFIG_CHANGE_VALUES_INTERN", "nm-config-change-values-intern" },
533 { NM_CONFIG_CHANGE_CONNECTIVITY, "NM_CONFIG_CHANGE_CONNECTIVITY", "nm-config-change-connectivity" },
534 { NM_CONFIG_CHANGE_NO_AUTO_DEFAULT, "NM_CONFIG_CHANGE_NO_AUTO_DEFAULT", "nm-config-change-no-auto-default" },
535 { NM_CONFIG_CHANGE_DNS_MODE, "NM_CONFIG_CHANGE_DNS_MODE", "nm-config-change-dns-mode" },
536 { NM_CONFIG_CHANGE_RC_MANAGER, "NM_CONFIG_CHANGE_RC_MANAGER", "nm-config-change-rc-manager" },
537 { NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG, "NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG", "nm-config-change-global-dns-config" },
538 { _NM_CONFIG_CHANGE_LAST, "_NM_CONFIG_CHANGE_LAST", "-nm-config-change-last" },
539 { NM_CONFIG_CHANGE_ALL, "NM_CONFIG_CHANGE_ALL", "nm-config-change-all" },
506 { NM_CONFIG_CHANGE_NONE, "NM_CONFIG_CHANGE_NONE", "none" },
507 { NM_CONFIG_CHANGE_CAUSE_SIGHUP, "NM_CONFIG_CHANGE_CAUSE_SIGHUP", "cause-sighup" },
508 { NM_CONFIG_CHANGE_CAUSE_SIGUSR1, "NM_CONFIG_CHANGE_CAUSE_SIGUSR1", "cause-sigusr1" },
509 { NM_CONFIG_CHANGE_CAUSE_SIGUSR2, "NM_CONFIG_CHANGE_CAUSE_SIGUSR2", "cause-sigusr2" },
510 { NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, "NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT", "cause-no-auto-default" },
511 { NM_CONFIG_CHANGE_CAUSE_SET_VALUES, "NM_CONFIG_CHANGE_CAUSE_SET_VALUES", "cause-set-values" },
512 { NM_CONFIG_CHANGE_CAUSE_CONF, "NM_CONFIG_CHANGE_CAUSE_CONF", "cause-conf" },
513 { NM_CONFIG_CHANGE_CAUSE_DNS_RC, "NM_CONFIG_CHANGE_CAUSE_DNS_RC", "cause-dns-rc" },
514 { NM_CONFIG_CHANGE_CAUSE_DNS_FULL, "NM_CONFIG_CHANGE_CAUSE_DNS_FULL", "cause-dns-full" },
515 { NM_CONFIG_CHANGE_CAUSES, "NM_CONFIG_CHANGE_CAUSES", "causes" },
516 { NM_CONFIG_CHANGE_CONFIG_FILES, "NM_CONFIG_CHANGE_CONFIG_FILES", "config-files" },
517 { NM_CONFIG_CHANGE_VALUES, "NM_CONFIG_CHANGE_VALUES", "values" },
518 { NM_CONFIG_CHANGE_VALUES_USER, "NM_CONFIG_CHANGE_VALUES_USER", "values-user" },
519 { NM_CONFIG_CHANGE_VALUES_INTERN, "NM_CONFIG_CHANGE_VALUES_INTERN", "values-intern" },
520 { NM_CONFIG_CHANGE_CONNECTIVITY, "NM_CONFIG_CHANGE_CONNECTIVITY", "connectivity" },
521 { NM_CONFIG_CHANGE_NO_AUTO_DEFAULT, "NM_CONFIG_CHANGE_NO_AUTO_DEFAULT", "no-auto-default" },
522 { NM_CONFIG_CHANGE_DNS_MODE, "NM_CONFIG_CHANGE_DNS_MODE", "dns-mode" },
523 { NM_CONFIG_CHANGE_RC_MANAGER, "NM_CONFIG_CHANGE_RC_MANAGER", "rc-manager" },
524 { NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG, "NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG", "global-dns-config" },
540525 { 0, NULL, NULL }
541526 };
542527 GType g_define_type_id =
1717 #define NM_TYPE_DHCP_STATE (nm_dhcp_state_get_type ())
1818 GType nm_dns_ip_config_type_get_type (void) G_GNUC_CONST;
1919 #define NM_TYPE_DNS_IP_CONFIG_TYPE (nm_dns_ip_config_type_get_type ())
20 GType nm_dns_manager_resolv_conf_mode_get_type (void) G_GNUC_CONST;
21 #define NM_TYPE_DNS_MANAGER_RESOLV_CONF_MODE (nm_dns_manager_resolv_conf_mode_get_type ())
2220 GType nm_dns_manager_resolv_conf_manager_get_type (void) G_GNUC_CONST;
2321 #define NM_TYPE_DNS_MANAGER_RESOLV_CONF_MANAGER (nm_dns_manager_resolv_conf_manager_get_type ())
2422 GType nm_dns_masq_status_get_type (void) G_GNUC_CONST;
5757 int ifindex;
5858 gint64 route_metric;
5959 gboolean metered;
60 gint dns_priority;
6061 } NMIP4ConfigPrivate;
6162
6263 /* internal guint32 are assigned to gobject properties of type uint. Ensure, that uint is large enough */
7576 PROP_SEARCHES,
7677 PROP_DNS_OPTIONS,
7778 PROP_WINS_SERVERS,
79 PROP_DNS_PRIORITY,
7880 );
7981
8082 NMIP4Config *
426428 {
427429 NMIP4ConfigPrivate *priv;
428430 guint naddresses, nroutes, nnameservers, nsearches;
429 int i;
431 int i, priority;
430432
431433 if (!setting)
432434 return;
525527 i++;
526528 }
527529
530 priority = nm_setting_ip_config_get_dns_priority (setting);
531 if (priority)
532 nm_ip4_config_set_dns_priority (config, priority);
533
528534 g_object_thaw_notify (G_OBJECT (config));
529535 }
530536
634640 nm_setting_ip_config_add_dns_option (s_ip4, option);
635641 }
636642
643 g_object_set (s_ip4,
644 NM_SETTING_IP_CONFIG_DNS_PRIORITY,
645 nm_ip4_config_get_dns_priority (config),
646 NULL);
647
637648 return NM_SETTING (s_ip4);
638649 }
639650
723734 /* metered flag */
724735 nm_ip4_config_set_metered (dst, nm_ip4_config_get_metered (dst) ||
725736 nm_ip4_config_get_metered (src));
737
738 /* DNS priority */
739 if (nm_ip4_config_get_dns_priority (src))
740 nm_ip4_config_set_dns_priority (dst, nm_ip4_config_get_dns_priority (src));
726741
727742 g_object_thaw_notify (G_OBJECT (dst));
728743 }
946961 if (idx >= 0)
947962 nm_ip4_config_del_wins (dst, idx);
948963 }
964
965 /* DNS priority */
966 if (nm_ip4_config_get_dns_priority (src) == nm_ip4_config_get_dns_priority (dst))
967 nm_ip4_config_set_dns_priority (dst, 0);
949968
950969 g_object_thaw_notify (G_OBJECT (dst));
951970 }
11871206 has_relevant_changes = TRUE;
11881207 }
11891208
1209 /* DNS priority */
1210 if (src_priv->dns_priority != dst_priv->dns_priority) {
1211 nm_ip4_config_set_dns_priority (dst, src_priv->dns_priority);
1212 has_minor_changes = TRUE;
1213 }
1214
11901215 /* mss */
11911216 if (src_priv->mss != dst_priv->mss) {
11921217 nm_ip4_config_set_mss (dst, src_priv->mss);
13101335 for (i = 0; i < nm_ip4_config_get_num_dns_options (config); i++)
13111336 g_message (" dnsopt: %s", nm_ip4_config_get_dns_option (config, i));
13121337
1338 g_message (" dnspri: %d", nm_ip4_config_get_dns_priority (config));
13131339
13141340 g_message (" mss: %"G_GUINT32_FORMAT, nm_ip4_config_get_mss (config));
13151341 g_message (" mtu: %"G_GUINT32_FORMAT, nm_ip4_config_get_mtu (config));
19001926 /******************************************************************/
19011927
19021928 void
1929 nm_ip4_config_set_dns_priority (NMIP4Config *config, gint priority)
1930 {
1931 NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
1932
1933 if (priority != priv->dns_priority) {
1934 priv->dns_priority = priority;
1935 _notify (config, PROP_DNS_PRIORITY);
1936 }
1937 }
1938
1939 gint
1940 nm_ip4_config_get_dns_priority (const NMIP4Config *config)
1941 {
1942 const NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
1943
1944 return priv->dns_priority;
1945 }
1946
1947 /******************************************************************/
1948
1949 void
19031950 nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss)
19041951 {
19051952 NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config);
21502197 s = nm_ip4_config_get_dns_option (config, i);
21512198 g_checksum_update (sum, (const guint8 *) s, strlen (s));
21522199 }
2153
21542200 }
21552201
21562202 /**
23842430 break;
23852431 case PROP_DNS_OPTIONS:
23862432 nm_utils_g_value_set_strv (value, priv->dns_options);
2433 break;
2434 case PROP_DNS_PRIORITY:
2435 g_value_set_int (value, priv->dns_priority);
23872436 break;
23882437 case PROP_WINS_SERVERS:
23892438 g_value_take_variant (value,
24872536 G_TYPE_STRV,
24882537 G_PARAM_READABLE |
24892538 G_PARAM_STATIC_STRINGS);
2490
2539 obj_properties[PROP_DNS_PRIORITY] =
2540 g_param_spec_int (NM_IP4_CONFIG_DNS_PRIORITY, "", "",
2541 G_MININT32, G_MAXINT32, 0,
2542 G_PARAM_READABLE |
2543 G_PARAM_STATIC_STRINGS);
24912544 obj_properties[PROP_WINS_SERVERS] =
24922545 g_param_spec_variant (NM_IP4_CONFIG_WINS_SERVERS, "", "",
24932546 G_VARIANT_TYPE ("au"),
5454 #define NM_IP4_CONFIG_DOMAINS "domains"
5555 #define NM_IP4_CONFIG_SEARCHES "searches"
5656 #define NM_IP4_CONFIG_DNS_OPTIONS "dns-options"
57 #define NM_IP4_CONFIG_DNS_PRIORITY "dns-priority"
5758 #define NM_IP4_CONFIG_WINS_SERVERS "wins-servers"
5859
5960 /* deprecated */
136137 guint32 nm_ip4_config_get_num_dns_options (const NMIP4Config *config);
137138 const char * nm_ip4_config_get_dns_option (const NMIP4Config *config, guint i);
138139
140 /* DNS priority */
141 void nm_ip4_config_set_dns_priority (NMIP4Config *config, gint priority);
142 gint nm_ip4_config_get_dns_priority (const NMIP4Config *config);
143
139144 /* MSS */
140145 void nm_ip4_config_set_mss (NMIP4Config *config, guint32 mss);
141146 guint32 nm_ip4_config_get_mss (const NMIP4Config *config);
4949 guint32 mss;
5050 int ifindex;
5151 gint64 route_metric;
52 gint dns_priority;
5253 } NMIP6ConfigPrivate;
5354
5455
6364 PROP_DOMAINS,
6465 PROP_SEARCHES,
6566 PROP_DNS_OPTIONS,
67 PROP_DNS_PRIORITY,
6668 );
6769
6870 NMIP6Config *
413415 NMIP6ConfigPrivate *priv;
414416 guint naddresses, nroutes, nnameservers, nsearches;
415417 const char *gateway_str;
416 int i;
418 int i, priority;
417419
418420 if (!setting)
419421 return;
507509 i++;
508510 }
509511
512 priority = nm_setting_ip_config_get_dns_priority (setting);
513 if (priority)
514 nm_ip6_config_set_dns_priority (config, priority);
515
510516 g_object_thaw_notify (G_OBJECT (config));
511517 }
512518
623629 nm_setting_ip_config_add_dns_option (s_ip6, option);
624630 }
625631
632 g_object_set (s_ip6,
633 NM_SETTING_IP_CONFIG_DNS_PRIORITY,
634 nm_ip6_config_get_dns_priority (config),
635 NULL);
626636
627637 return NM_SETTING (s_ip6);
628638 }
688698
689699 if (nm_ip6_config_get_mss (src))
690700 nm_ip6_config_set_mss (dst, nm_ip6_config_get_mss (src));
701
702 /* DNS priority */
703 if (nm_ip6_config_get_dns_priority (src))
704 nm_ip6_config_set_dns_priority (dst, nm_ip6_config_get_dns_priority (src));
691705
692706 g_object_thaw_notify (G_OBJECT (dst));
693707 }
881895
882896 if (nm_ip6_config_get_mss (src) == nm_ip6_config_get_mss (dst))
883897 nm_ip6_config_set_mss (dst, 0);
898
899 /* DNS priority */
900 if (nm_ip6_config_get_dns_priority (src) == nm_ip6_config_get_dns_priority (dst))
901 nm_ip6_config_set_dns_priority (dst, 0);
884902
885903 g_object_thaw_notify (G_OBJECT (dst));
886904 }
11281146 has_minor_changes = TRUE;
11291147 }
11301148
1149 /* DNS priority */
1150 if (src_priv->dns_priority != dst_priv->dns_priority) {
1151 nm_ip6_config_set_dns_priority (dst, src_priv->dns_priority);
1152 has_minor_changes = TRUE;
1153 }
1154
11311155 #if NM_MORE_ASSERTS
11321156 /* config_equal does not compare *all* the fields, therefore, we might have has_minor_changes
11331157 * regardless of config_equal. But config_equal must correspond to has_relevant_changes. */
11871211 /* dns options */
11881212 for (i = 0; i < nm_ip6_config_get_num_dns_options (config); i++)
11891213 g_message (" dnsopt: %s", nm_ip6_config_get_dns_option (config, i));
1214
1215 g_message (" dnspri: %d", nm_ip6_config_get_dns_priority (config));
11901216
11911217 g_message (" mss: %"G_GUINT32_FORMAT, nm_ip6_config_get_mss (config));
11921218 g_message (" n-dflt: %d", nm_ip6_config_get_never_default (config));
17601786 /******************************************************************/
17611787
17621788 void
1789 nm_ip6_config_set_dns_priority (NMIP6Config *config, gint priority)
1790 {
1791 NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
1792
1793 if (priority != priv->dns_priority) {
1794 priv->dns_priority = priority;
1795 _notify (config, PROP_DNS_PRIORITY);
1796 }
1797 }
1798
1799 gint
1800 nm_ip6_config_get_dns_priority (const NMIP6Config *config)
1801 {
1802 const NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
1803
1804 return priv->dns_priority;
1805 }
1806
1807 /******************************************************************/
1808
1809 void
17631810 nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss)
17641811 {
17651812 NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config);
18381885 s = nm_ip6_config_get_dns_option (config, i);
18391886 g_checksum_update (sum, (const guint8 *) s, strlen (s));
18401887 }
1841
18421888 }
18431889
18441890 /**
20772123 break;
20782124 case PROP_DNS_OPTIONS:
20792125 nm_utils_g_value_set_strv (value, priv->dns_options);
2126 break;
2127 case PROP_DNS_PRIORITY:
2128 g_value_set_int (value, priv->dns_priority);
20802129 break;
20812130 default:
20822131 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
21752224 G_TYPE_STRV,
21762225 G_PARAM_READABLE |
21772226 G_PARAM_STATIC_STRINGS);
2227 obj_properties[PROP_DNS_PRIORITY] =
2228 g_param_spec_int (NM_IP6_CONFIG_DNS_PRIORITY, "", "",
2229 G_MININT32, G_MAXINT32, 0,
2230 G_PARAM_READABLE |
2231 G_PARAM_STATIC_STRINGS);
21782232
21792233 g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
21802234
5656 #define NM_IP6_CONFIG_DOMAINS "domains"
5757 #define NM_IP6_CONFIG_SEARCHES "searches"
5858 #define NM_IP6_CONFIG_DNS_OPTIONS "dns-options"
59 #define NM_IP6_CONFIG_DNS_PRIORITY "dns-priority"
5960
6061 /* deprecated */
6162 #define NM_IP6_CONFIG_ADDRESSES "addresses"
138139 guint32 nm_ip6_config_get_num_dns_options (const NMIP6Config *config);
139140 const char * nm_ip6_config_get_dns_option (const NMIP6Config *config, guint i);
140141
142 /* DNS priority */
143 void nm_ip6_config_set_dns_priority (NMIP6Config *config, gint priority);
144 gint nm_ip6_config_get_dns_priority (const NMIP6Config *config);
145
141146 /* MSS */
142147 void nm_ip6_config_set_mss (NMIP6Config *config, guint32 mss);
143148 guint32 nm_ip6_config_get_mss (const NMIP6Config *config);
2727 #include <unistd.h>
2828
2929 #include "nm-manager.h"
30 #include "nm-common-macros.h"
3031 #include "nm-bus-manager.h"
3132 #include "nm-vpn-manager.h"
3233 #include "nm-device.h"
6768
6869 static void policy_activating_device_changed (GObject *object, GParamSpec *pspec, gpointer user_data);
6970
70 static void rfkill_change (const char *desc, RfKillType rtype, gboolean enabled);
71
7271 static gboolean find_master (NMManager *self,
7372 NMConnection *connection,
7473 NMDevice *device,
7978
8079 static void nm_manager_update_state (NMManager *manager);
8180
82 static void connection_changed (NMSettings *settings, NMConnection *connection,
83 NMManager *manager);
81 static void connection_changed (NMManager *self, NMConnection *connection);
82 static void device_sleep_cb (NMDevice *device,
83 GParamSpec *pspec,
84 NMManager *self);
8485
8586 #define TAG_ACTIVE_CONNETION_ADD_AND_ACTIVATE "act-con-add-and-activate"
8687
131132 NMSleepMonitor *sleep_monitor;
132133
133134 GSList *auth_chains;
135 GHashTable *sleep_devices;
134136
135137 /* Firmware dir monitor */
136138 GFileMonitor *fw_monitor;
456458 _notify (self, PROP_GLOBAL_DNS_CONFIGURATION);
457459 }
458460
461 static void
462 _reload_auth_cb (NMAuthChain *chain,
463 GError *error,
464 GDBusMethodInvocation *context,
465 gpointer user_data)
466 {
467 NMManager *self = NM_MANAGER (user_data);
468 NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
469 GError *ret_error = NULL;
470 NMAuthCallResult result;
471 guint32 flags;
472 NMAuthSubject *subject;
473 char s_buf[60];
474 NMConfigChangeFlags reload_type = NM_CONFIG_CHANGE_NONE;
475
476 g_assert (context);
477
478 priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
479 flags = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "flags"));
480
481 subject = nm_auth_chain_get_subject (chain);
482
483 result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_RELOAD);
484 if (error) {
485 _LOGD (LOGD_CORE, "Reload request failed: %s", error->message);
486 ret_error = g_error_new (NM_MANAGER_ERROR,
487 NM_MANAGER_ERROR_PERMISSION_DENIED,
488 "Reload request failed: %s",
489 error->message);
490 } else if (result != NM_AUTH_CALL_RESULT_YES) {
491 ret_error = g_error_new_literal (NM_MANAGER_ERROR,
492 NM_MANAGER_ERROR_PERMISSION_DENIED,
493 "Not authorized to reload configuration");
494 } else {
495 if (NM_FLAGS_ANY (flags, ~NM_MANAGER_RELOAD_FLAGS_ALL)) {
496 /* invalid flags */
497 } else if (flags == 0)
498 reload_type = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
499 else {
500 if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_CONF))
501 reload_type |= NM_CONFIG_CHANGE_CAUSE_CONF;
502 if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_DNS_RC))
503 reload_type |= NM_CONFIG_CHANGE_CAUSE_DNS_RC;
504 if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_DNS_FULL))
505 reload_type |= NM_CONFIG_CHANGE_CAUSE_DNS_FULL;
506 }
507
508 if (reload_type == NM_CONFIG_CHANGE_NONE) {
509 ret_error = g_error_new_literal (NM_MANAGER_ERROR,
510 NM_MANAGER_ERROR_INVALID_ARGUMENTS,
511 "Invalid flags for reload");
512 }
513 }
514
515 nm_audit_log_control_op (NM_AUDIT_OP_RELOAD,
516 nm_sprintf_buf (s_buf, "%u", flags),
517 ret_error == NULL, subject,
518 ret_error ? ret_error->message : NULL);
519
520 if (ret_error) {
521 g_dbus_method_invocation_take_error (context, ret_error);
522 goto out;
523 }
524
525 nm_config_reload (priv->config, reload_type);
526 g_dbus_method_invocation_return_value (context, NULL);
527
528 out:
529 nm_auth_chain_unref (chain);
530 }
531
532 static void
533 impl_manager_reload (NMManager *self,
534 GDBusMethodInvocation *context,
535 guint32 flags)
536 {
537 NMManagerPrivate *priv;
538 NMAuthChain *chain;
539 GError *error = NULL;
540
541 g_return_if_fail (NM_IS_MANAGER (self));
542
543 priv = NM_MANAGER_GET_PRIVATE (self);
544
545 chain = nm_auth_chain_new_context (context, _reload_auth_cb, self);
546 if (!chain) {
547 error = g_error_new_literal (NM_MANAGER_ERROR,
548 NM_MANAGER_ERROR_PERMISSION_DENIED,
549 "Unable to authenticate request");
550 g_dbus_method_invocation_take_error (context, error);
551 return;
552 }
553
554 priv->auth_chains = g_slist_append (priv->auth_chains, chain);
555 nm_auth_chain_set_data (chain, "flags", GUINT_TO_POINTER (flags), NULL);
556 nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, TRUE);
557 }
558
459559 /************************************************************************/
460560
461561 static NMDevice *
838938 nm_device_get_iface (device), allow_unmanage, nm_device_get_managed (device, FALSE));
839939
840940 if (allow_unmanage && nm_device_get_managed (device, FALSE)) {
841 NMActRequest *req = nm_device_get_act_request (device);
842
843 /* Leave activated interfaces up when quitting so their configuration
844 * can be taken over when NM restarts. This ensures connectivity while
845 * NM is stopped. Devices which do not support connection assumption
846 * cannot be left up.
847 */
848 if (!quitting) /* Forced removal; device already gone */
849 unmanage = TRUE;
850 else if (!nm_device_can_assume_active_connection (device))
851 unmanage = TRUE;
852 else if (!req)
853 unmanage = TRUE;
941 unmanage = TRUE;
942
943 if (!quitting) {
944 /* the device is already gone. Unmanage it. */
945 } else {
946 /* Leave certain devices alone when quitting so their configuration
947 * can be taken over when NM restarts. This ensures connectivity while
948 * NM is stopped.
949 */
950 if (nm_device_uses_assumed_connection (device)) {
951 /* An assume connection must be left alone */
952 unmanage = FALSE;
953 } else if (!nm_device_get_act_request (device)) {
954 /* a device without any active connection is either UNAVAILABLE or DISCONNECTED
955 * state. Since we don't know whether the device was upped by NetworkManager,
956 * we must leave it up on exit. */
957 unmanage = FALSE;
958 } else if (!nm_platform_link_can_assume (NM_PLATFORM_GET, nm_device_get_ifindex (device))) {
959 /* The device has no layer 3 configuration. Leave it up. */
960 unmanage = FALSE;
961 } else if (nm_device_can_assume_active_connection (device))
962 unmanage = FALSE;
963 }
854964
855965 if (unmanage) {
856966 if (quitting)
11611271 ifname = nm_manager_get_connection_iface (self, candidate, &parent, &error);
11621272 if (ifname) {
11631273 if (!nm_platform_link_get_by_ifname (NM_PLATFORM_GET, ifname))
1164 connection_changed (priv->settings, candidate, self);
1274 connection_changed (self, candidate);
11651275 }
11661276 }
11671277 }
11701280 }
11711281
11721282 static void
1173 connection_changed (NMSettings *settings,
1174 NMConnection *connection,
1175 NMManager *manager)
1283 connection_changed (NMManager *self,
1284 NMConnection *connection)
11761285 {
11771286 NMDevice *device;
11781287
11791288 if (!nm_connection_is_virtual (connection))
11801289 return;
11811290
1182 device = system_create_virtual_device (manager, connection);
1291 device = system_create_virtual_device (self, connection);
11831292 if (!device)
11841293 return;
11851294
11861295 /* Maybe the device that was created was needed by some other
11871296 * connection's device (parent of a VLAN). Let the connections
11881297 * can use the newly created device as a parent know. */
1189 retry_connections_for_parent_device (manager, device);
1190 }
1191
1192 static void
1193 connection_removed (NMSettings *settings,
1194 NMSettingsConnection *connection,
1195 NMManager *manager)
1196 {
1197 /*
1198 * Do not delete existing virtual devices to keep connectivity up.
1199 * Virtual devices are reused when NetworkManager is restarted.
1200 */
1298 retry_connections_for_parent_device (self, device);
1299 }
1300
1301 static void
1302 connection_added_cb (NMSettings *settings,
1303 NMConnection *connection,
1304 NMManager *self)
1305 {
1306 connection_changed (self, connection);
1307 }
1308
1309 static void
1310 connection_updated_cb (NMSettings *settings,
1311 NMConnection *connection,
1312 gboolean by_user,
1313 NMManager *self)
1314 {
1315 if (by_user)
1316 connection_changed (self, connection);
12011317 }
12021318
12031319 static void
27762892 /* We can now proceed to disconnected state so that activation proceeds. */
27772893 unmanaged_to_disconnected (device);
27782894 } else {
2779 nm_log_warn (LOGD_CORE, "Could not realize device '%s': %s",
2780 nm_device_get_iface (device), error->message);
2895 _LOGW (LOGD_CORE, "Could not realize device '%s': %s",
2896 nm_device_get_iface (device), error->message);
27812897 nm_active_connection_set_state (active, NM_ACTIVE_CONNECTION_STATE_DEACTIVATED);
27822898 }
27832899 } else {
2784 nm_log_warn (LOGD_CORE, "The parent connection device '%s' depended on disappeared.",
2785 nm_device_get_iface (device));
2900 _LOGW (LOGD_CORE, "The parent connection device '%s' depended on disappeared.",
2901 nm_device_get_iface (device));
27862902 nm_active_connection_set_state (active, NM_ACTIVE_CONNECTION_STATE_DEACTIVATED);
27872903 }
27882904 }
32673383 NM_MANAGER_ERROR,
32683384 NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE,
32693385 "Sharing IPv6 connections is not supported yet.");
3270 return NULL;
3386 goto error;
32713387 }
32723388
32733389 /* Check whether it's a VPN or not */
38483964 return nm_platform_link_get_wake_on_lan (NM_PLATFORM_GET, nm_device_get_ip_ifindex (device));
38493965 }
38503966
3967 static gboolean
3968 sleep_devices_add (NMManager *self, NMDevice *device, gboolean suspending)
3969 {
3970 NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
3971 NMSleepMonitorInhibitorHandle *handle = NULL;
3972
3973 if (g_hash_table_lookup_extended (priv->sleep_devices, device, NULL, (gpointer *) &handle)) {
3974 if (suspending) {
3975 /* if we are suspending, always insert a new handle in sleep_devices.
3976 * Even if we had an old handle, it might be stale by now. */
3977 g_hash_table_insert (priv->sleep_devices, device,
3978 nm_sleep_monitor_inhibit_take (priv->sleep_monitor));
3979 if (handle)
3980 nm_sleep_monitor_inhibit_release (priv->sleep_monitor, handle);
3981 }
3982 return FALSE;
3983 }
3984
3985 g_hash_table_insert (priv->sleep_devices,
3986 g_object_ref (device),
3987 suspending
3988 ? nm_sleep_monitor_inhibit_take (priv->sleep_monitor)
3989 : NULL);
3990 g_signal_connect (device, "notify::" NM_DEVICE_STATE, (GCallback) device_sleep_cb, self);
3991 return TRUE;
3992 }
3993
3994 static gboolean
3995 sleep_devices_remove (NMManager *self, NMDevice *device)
3996 {
3997 NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
3998 NMSleepMonitorInhibitorHandle *handle;
3999
4000 if (!g_hash_table_lookup_extended (priv->sleep_devices, device, NULL, (gpointer *) &handle))
4001 return FALSE;
4002
4003 if (handle)
4004 nm_sleep_monitor_inhibit_release (priv->sleep_monitor, handle);
4005
4006 /* Remove device from hash */
4007 g_signal_handlers_disconnect_by_func (device, device_sleep_cb, self);
4008 g_hash_table_remove (priv->sleep_devices, device);
4009 g_object_unref (device);
4010 return TRUE;
4011 }
4012
4013 static void
4014 sleep_devices_clear (NMManager *self)
4015 {
4016 NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
4017 NMDevice *device;
4018 NMSleepMonitorInhibitorHandle *handle;
4019 GHashTableIter iter;
4020
4021 if (!priv->sleep_devices)
4022 return;
4023
4024 g_hash_table_iter_init (&iter, priv->sleep_devices);
4025 while (g_hash_table_iter_next (&iter, (gpointer *) &device, (gpointer *) &handle)) {
4026 g_signal_handlers_disconnect_by_func (device, device_sleep_cb, self);
4027 if (handle)
4028 nm_sleep_monitor_inhibit_release (priv->sleep_monitor, handle);
4029 g_object_unref (device);
4030 g_hash_table_iter_remove (&iter);
4031 }
4032 }
4033
4034 static void
4035 device_sleep_cb (NMDevice *device,
4036 GParamSpec *pspec,
4037 NMManager *self)
4038 {
4039 switch (nm_device_get_state (device)) {
4040 case NM_DEVICE_STATE_DISCONNECTED:
4041 _LOGD (LOGD_SUSPEND, "sleep: unmanaging device %s", nm_device_get_ip_iface (device));
4042 nm_device_set_unmanaged_by_flags_queue (device,
4043 NM_UNMANAGED_SLEEPING,
4044 TRUE,
4045 NM_DEVICE_STATE_REASON_SLEEPING);
4046 break;
4047 case NM_DEVICE_STATE_UNMANAGED:
4048 _LOGD (LOGD_SUSPEND, "sleep: device %s is ready", nm_device_get_ip_iface (device));
4049
4050 if (!sleep_devices_remove (self, device))
4051 g_return_if_reached ();
4052
4053 break;
4054 default:
4055 return;
4056 }
4057 }
4058
38514059 static void
38524060 do_sleep_wake (NMManager *self, gboolean sleeping_changed)
38534061 {
38714079 if (nm_device_is_software (device))
38724080 continue;
38734081 /* Wake-on-LAN devices will be taken down post-suspend rather than pre- */
3874 if (suspending && device_is_wake_on_lan (device))
4082 if (suspending && device_is_wake_on_lan (device)) {
4083 _LOGD (LOGD_SUSPEND, "sleep: device %s has wake-on-lan, skipping",
4084 nm_device_get_ip_iface (device));
38754085 continue;
3876
3877 nm_device_set_unmanaged_by_flags (device, NM_UNMANAGED_SLEEPING, TRUE, NM_DEVICE_STATE_REASON_SLEEPING);
4086 }
4087
4088 if (nm_device_is_activating (device) ||
4089 nm_device_get_state (device) == NM_DEVICE_STATE_ACTIVATED) {
4090 _LOGD (LOGD_SUSPEND, "sleep: wait disconnection of device %s",
4091 nm_device_get_ip_iface (device));
4092
4093 if (sleep_devices_add (self, device, suspending))
4094 nm_device_queue_state (device, NM_DEVICE_STATE_DEACTIVATING, NM_DEVICE_STATE_REASON_SLEEPING);
4095 } else {
4096 nm_device_set_unmanaged_by_flags (device, NM_UNMANAGED_SLEEPING, TRUE, NM_DEVICE_STATE_REASON_SLEEPING);
4097 }
38784098 }
38794099 } else {
38804100 _LOGI (LOGD_SUSPEND, "%s...", waking_from_suspend ? "waking up" : "re-enabling");
38814101
38824102 if (waking_from_suspend) {
4103 sleep_devices_clear (self);
38834104 /* Belatedly take down Wake-on-LAN devices; ideally we wouldn't have to do this
38844105 * but for now it's the only way to make sure we re-check their connectivity.
38854106 */
39404161 static void
39414162 _internal_sleep (NMManager *self, gboolean do_sleep)
39424163 {
3943 NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
4164 NMManagerPrivate *priv;
4165
4166 g_return_if_fail (NM_IS_MANAGER (self));
4167
4168 priv = NM_MANAGER_GET_PRIVATE (self);
39444169
39454170 if (priv->sleeping == do_sleep)
39464171 return;
40534278 }
40544279
40554280 static void
4056 sleeping_cb (NMSleepMonitor *monitor, gpointer user_data)
4057 {
4058 nm_log_dbg (LOGD_SUSPEND, "Received sleeping signal");
4059 _internal_sleep (NM_MANAGER (user_data), TRUE);
4060 }
4061
4062 static void
4063 resuming_cb (NMSleepMonitor *monitor, gpointer user_data)
4064 {
4065 nm_log_dbg (LOGD_SUSPEND, "Received resuming signal");
4066 _internal_sleep (NM_MANAGER (user_data), FALSE);
4281 sleeping_cb (NMSleepMonitor *monitor, gboolean is_about_to_suspend, gpointer user_data)
4282 {
4283 NMManager *self = user_data;
4284
4285 _LOGD (LOGD_SUSPEND, "Received %s signal", is_about_to_suspend ? "sleeping" : "resuming");
4286 _internal_sleep (self, is_about_to_suspend);
40674287 }
40684288
40694289 static void
41854405 /* Permissions */
41864406
41874407 static void
4188 get_perm_add_result (NMAuthChain *chain, GVariantBuilder *results, const char *permission)
4408 get_perm_add_result (NMManager *self, NMAuthChain *chain, GVariantBuilder *results, const char *permission)
41894409 {
41904410 NMAuthCallResult result;
41914411
41974417 else if (result == NM_AUTH_CALL_RESULT_AUTH)
41984418 g_variant_builder_add (results, "{ss}", permission, "auth");
41994419 else {
4200 nm_log_dbg (LOGD_CORE, "unknown auth chain result %d", result);
4420 _LOGD (LOGD_CORE, "unknown auth chain result %d", result);
42014421 }
42024422 }
42034423
42254445 } else {
42264446 g_variant_builder_init (&results, G_VARIANT_TYPE ("a{ss}"));
42274447
4228 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK);
4229 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_SLEEP_WAKE);
4230 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI);
4231 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN);
4232 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX);
4233 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_NETWORK_CONTROL);
4234 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
4235 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
4236 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM);
4237 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN);
4238 get_perm_add_result (chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
4448 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK);
4449 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SLEEP_WAKE);
4450 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI);
4451 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN);
4452 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX);
4453 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_NETWORK_CONTROL);
4454 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED);
4455 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_WIFI_SHARE_OPEN);
4456 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM);
4457 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN);
4458 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
4459 get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_RELOAD);
42394460
42404461 g_dbus_method_invocation_return_value (context,
42414462 g_variant_new ("(a{ss})", &results));
42734494 nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM, FALSE);
42744495 nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN, FALSE);
42754496 nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, FALSE);
4497 nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, FALSE);
42764498 }
42774499
42784500 static void
44724694 _LOGD (LOGD_CORE, "creating virtual devices...");
44734695 connections = nm_settings_get_connections (priv->settings);
44744696 for (iter = connections; iter; iter = iter->next)
4475 connection_changed (priv->settings, NM_CONNECTION (iter->data), self);
4697 connection_changed (self, NM_CONNECTION (iter->data));
44764698 g_slist_free (connections);
44774699
44784700 priv->devices_inited = TRUE;
49645186 } __attribute__((packed));
49655187
49665188 static void
4967 rfkill_change (const char *desc, RfKillType rtype, gboolean enabled)
5189 rfkill_change (NMManager *self, const char *desc, RfKillType rtype, gboolean enabled)
49685190 {
49695191 int fd;
49705192 struct rfkill_event event;
49765198 fd = open ("/dev/rfkill", O_RDWR);
49775199 if (fd < 0) {
49785200 if (errno == EACCES)
4979 nm_log_warn (LOGD_RFKILL, "(%s): failed to open killswitch device", desc);
5201 _LOGW (LOGD_RFKILL, "(%s): failed to open killswitch device", desc);
49805202 return;
49815203 }
49825204
49835205 if (fcntl (fd, F_SETFL, O_NONBLOCK) < 0) {
4984 nm_log_warn (LOGD_RFKILL, "(%s): failed to set killswitch device for "
4985 "non-blocking operation", desc);
5206 _LOGW (LOGD_RFKILL, "(%s): failed to set killswitch device for "
5207 "non-blocking operation", desc);
49865208 close (fd);
49875209 return;
49885210 }
50035225
50045226 len = write (fd, &event, sizeof (event));
50055227 if (len < 0) {
5006 nm_log_warn (LOGD_RFKILL, "(%s): failed to change WiFi killswitch state: (%d) %s",
5007 desc, errno, g_strerror (errno));
5228 _LOGW (LOGD_RFKILL, "(%s): failed to change WiFi killswitch state: (%d) %s",
5229 desc, errno, g_strerror (errno));
50085230 } else if (len == sizeof (event)) {
5009 nm_log_info (LOGD_RFKILL, "%s hardware radio set %s",
5010 desc, enabled ? "enabled" : "disabled");
5231 _LOGI (LOGD_RFKILL, "%s hardware radio set %s",
5232 desc, enabled ? "enabled" : "disabled");
50115233 } else {
50125234 /* Failed to write full structure */
5013 nm_log_warn (LOGD_RFKILL, "(%s): failed to change WiFi killswitch state", desc);
5235 _LOGW (LOGD_RFKILL, "(%s): failed to change WiFi killswitch state", desc);
50145236 }
50155237
50165238 close (fd);
50635285 if (new_enabled != old_enabled) {
50645286 /* Try to change the kernel rfkill state */
50655287 if (rstate->rtype == RFKILL_TYPE_WLAN || rstate->rtype == RFKILL_TYPE_WWAN)
5066 rfkill_change (rstate->desc, rstate->rtype, new_enabled);
5288 rfkill_change (self, rstate->desc, rstate->rtype, new_enabled);
50675289
50685290 manager_update_radio_enabled (self, rstate, new_enabled);
50695291 }
51665388 g_signal_connect (priv->settings, "notify::" NM_SETTINGS_HOSTNAME,
51675389 G_CALLBACK (system_hostname_changed_cb), self);
51685390 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
5169 G_CALLBACK (connection_changed), self);
5170 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,
5171 G_CALLBACK (connection_changed), self);
5172 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
5173 G_CALLBACK (connection_removed), self);
5391 G_CALLBACK (connection_added_cb), self);
5392 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
5393 G_CALLBACK (connection_updated_cb), self);
5394 /*
5395 * Do not delete existing virtual devices to keep connectivity up.
5396 * Virtual devices are reused when NetworkManager is restarted.
5397 * Hence, don't react on NM_SETTINGS_SIGNAL_CONNECTION_REMOVED.
5398 */
51745399
51755400 priv->policy = nm_policy_new (self, priv->settings);
51765401 g_signal_connect (priv->policy, "notify::" NM_POLICY_DEFAULT_IP4_DEVICE,
52065431 * changes to the WirelessEnabled/WWANEnabled properties which toggle kernel
52075432 * rfkill.
52085433 */
5209 rfkill_change (priv->radio_states[RFKILL_TYPE_WLAN].desc, RFKILL_TYPE_WLAN, priv->radio_states[RFKILL_TYPE_WLAN].user_enabled);
5210 rfkill_change (priv->radio_states[RFKILL_TYPE_WWAN].desc, RFKILL_TYPE_WWAN, priv->radio_states[RFKILL_TYPE_WWAN].user_enabled);
5434 rfkill_change (self, priv->radio_states[RFKILL_TYPE_WLAN].desc, RFKILL_TYPE_WLAN, priv->radio_states[RFKILL_TYPE_WLAN].user_enabled);
5435 rfkill_change (self, priv->radio_states[RFKILL_TYPE_WWAN].desc, RFKILL_TYPE_WWAN, priv->radio_states[RFKILL_TYPE_WWAN].user_enabled);
52115436 }
52125437
52135438 static void
52485473 self);
52495474
52505475 /* sleep/wake handling */
5251 priv->sleep_monitor = g_object_ref (nm_sleep_monitor_get ());
5476 priv->sleep_monitor = nm_sleep_monitor_new ();
52525477 g_signal_connect (priv->sleep_monitor, NM_SLEEP_MONITOR_SLEEPING,
52535478 G_CALLBACK (sleeping_cb), self);
5254 g_signal_connect (priv->sleep_monitor, NM_SLEEP_MONITOR_RESUMING,
5255 G_CALLBACK (resuming_cb), self);
52565479
52575480 /* Listen for authorization changes */
52585481 g_signal_connect (nm_auth_manager_get (),
52835506 priv->timestamp_update_id = g_timeout_add_seconds (300, (GSourceFunc) periodic_update_active_connection_timestamps, self);
52845507
52855508 priv->metered = NM_METERED_UNKNOWN;
5509 priv->sleep_devices = g_hash_table_new (g_direct_hash, g_direct_equal);
52865510 }
52875511
52885512 static gboolean
54915715 g_signal_handlers_disconnect_by_func (priv->settings, settings_startup_complete_changed, manager);
54925716 g_signal_handlers_disconnect_by_func (priv->settings, system_unmanaged_devices_changed_cb, manager);
54935717 g_signal_handlers_disconnect_by_func (priv->settings, system_hostname_changed_cb, manager);
5494 g_signal_handlers_disconnect_by_func (priv->settings, connection_changed, manager);
5495 g_signal_handlers_disconnect_by_func (priv->settings, connection_removed, manager);
5718 g_signal_handlers_disconnect_by_func (priv->settings, connection_added_cb, manager);
5719 g_signal_handlers_disconnect_by_func (priv->settings, connection_updated_cb, manager);
54965720 g_clear_object (&priv->settings);
54975721 }
54985722
55065730 }
55075731 _set_prop_filter (manager, NULL);
55085732
5733 sleep_devices_clear (manager);
5734 g_clear_pointer (&priv->sleep_devices, g_hash_table_unref);
5735
55095736 if (priv->sleep_monitor) {
55105737 g_signal_handlers_disconnect_by_func (priv->sleep_monitor, sleeping_cb, manager);
5511 g_signal_handlers_disconnect_by_func (priv->sleep_monitor, resuming_cb, manager);
55125738 g_clear_object (&priv->sleep_monitor);
55135739 }
55145740
57856011
57866012 nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (manager_class),
57876013 NMDBUS_TYPE_MANAGER_SKELETON,
6014 "Reload", impl_manager_reload,
57886015 "GetDevices", impl_manager_get_devices,
57896016 "GetAllDevices", impl_manager_get_all_devices,
57906017 "GetDeviceByIpIface", impl_manager_get_device_by_ip_iface,
8282
8383 guint reset_retries_id; /* idle handler for resetting the retries count */
8484
85 guint schedule_activate_all_id; /* idle handler for schedule_activate_all(). */
86
8587 char *orig_hostname; /* hostname at NM start time */
8688 char *cur_hostname; /* hostname we want to assign */
8789 gboolean hostname_changed; /* TRUE if NM ever set the hostname */
912914 NM_DEVICE_STATE_REASON_USER_REQUESTED);
913915 }
914916 }
917 g_slist_free (connections);
915918 }
916919
917920 static void
10131016
10141017 return FALSE;
10151018 }
1016
1017 static void schedule_activate_all (NMPolicy *self);
10181019
10191020 static void
10201021 activate_slave_connections (NMPolicy *self, NMDevice *device)
14401441
14411442 nm_dns_manager_begin_updates (priv->dns_manager, __func__);
14421443
1443 ip_iface = nm_vpn_connection_get_ip_iface (vpn);
1444 ip_iface = nm_vpn_connection_get_ip_iface (vpn, TRUE);
14441445
14451446 /* Add the VPN connection's IP configs from DNS */
14461447
15781579
15791580 /**************************************************************************/
15801581
1582 static gboolean
1583 schedule_activate_all_cb (gpointer user_data)
1584 {
1585 NMPolicy *self = user_data;
1586 NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
1587 const GSList *iter;
1588
1589 priv->schedule_activate_all_id = 0;
1590
1591 for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter))
1592 schedule_activate_check (self, iter->data);
1593
1594 return G_SOURCE_REMOVE;
1595 }
1596
15811597 static void
15821598 schedule_activate_all (NMPolicy *self)
15831599 {
15841600 NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
1585 const GSList *iter;
1586
1587 for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter))
1588 schedule_activate_check (self, NM_DEVICE (iter->data));
1601
1602 /* always restart the idle handler. That way, we settle
1603 * all other events before restarting to activate them. */
1604 nm_clear_g_source (&priv->schedule_activate_all_id);
1605 priv->schedule_activate_all_id = g_idle_add (schedule_activate_all_cb, self);
15891606 }
15901607
15911608 static void
16471664
16481665 static void
16491666 connection_updated (NMSettings *settings,
1650 NMConnection *connection,
1667 NMSettingsConnection *connection,
1668 gboolean by_user,
16511669 gpointer user_data)
16521670 {
16531671 NMPolicyPrivate *priv = user_data;
16541672 NMPolicy *self = priv->self;
1655
1656 schedule_activate_all (self);
1657 }
1658
1659 static void
1660 connection_updated_by_user (NMSettings *settings,
1661 NMSettingsConnection *connection,
1662 gpointer user_data)
1663 {
1664 NMPolicyPrivate *priv = user_data;
16651673 const GSList *iter;
16661674 NMDevice *device = NULL;
16671675
1668 /* find device with given connection */
1669 for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
1670 NMDevice *dev = NM_DEVICE (iter->data);
1671
1672 if (nm_device_get_settings_connection (dev) == connection) {
1673 device = dev;
1674 break;
1675 }
1676 }
1677
1678 if (device)
1679 nm_device_reapply_settings_immediately (device);
1680
1681 /* Reset auto retries back to default since connection was updated */
1682 nm_settings_connection_reset_autoconnect_retries (connection);
1676 if (by_user) {
1677 /* find device with given connection */
1678 for (iter = nm_manager_get_devices (priv->manager); iter; iter = g_slist_next (iter)) {
1679 NMDevice *dev = NM_DEVICE (iter->data);
1680
1681 if (nm_device_get_settings_connection (dev) == connection) {
1682 device = dev;
1683 break;
1684 }
1685 }
1686
1687 if (device)
1688 nm_device_reapply_settings_immediately (device);
1689
1690 /* Reset auto retries back to default since connection was updated */
1691 nm_settings_connection_reset_autoconnect_retries (connection);
1692 }
1693
1694 schedule_activate_all (self);
16831695 }
16841696
16851697 static void
18751887
18761888 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_ADDED, (GCallback) connection_added, priv);
18771889 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED, (GCallback) connection_updated, priv);
1878 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER, (GCallback) connection_updated_by_user, priv);
18791890 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, (GCallback) connection_removed, priv);
18801891 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, (GCallback) connection_visibility_changed, priv);
18811892 g_signal_connect (priv->settings, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, (GCallback) secret_agent_registered, priv);
19401951 g_assert (connections == NULL);
19411952
19421953 nm_clear_g_source (&priv->reset_retries_id);
1954 nm_clear_g_source (&priv->schedule_activate_all_id);
19431955
19441956 g_clear_pointer (&priv->orig_hostname, g_free);
19451957 g_clear_pointer (&priv->cur_hostname, g_free);
+0
-258
src/nm-sleep-monitor-systemd.c less more
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2 of the License, or
4 * (at your option) any later version.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, write to the Free Software Foundation, Inc.,
13 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14 *
15 * (C) Copyright 2012 Red Hat, Inc.
16 * Author: Matthias Clasen <mclasen@redhat.com>
17 */
18
19 #include "nm-default.h"
20
21 #include <errno.h>
22 #include <string.h>
23 #include <sys/stat.h>
24 #include <gio/gunixfdlist.h>
25
26 #include "nm-core-internal.h"
27 #include "NetworkManagerUtils.h"
28
29 #include "nm-sleep-monitor.h"
30
31 #if defined (SUSPEND_RESUME_SYSTEMD) == defined (SUSPEND_RESUME_CONSOLEKIT)
32 #error either define SUSPEND_RESUME_SYSTEMD or SUSPEND_RESUME_CONSOLEKIT
33 #endif
34
35 #ifdef SUSPEND_RESUME_SYSTEMD
36
37 #define SUSPEND_DBUS_NAME "org.freedesktop.login1"
38 #define SUSPEND_DBUS_PATH "/org/freedesktop/login1"
39 #define SUSPEND_DBUS_INTERFACE "org.freedesktop.login1.Manager"
40
41 #else
42
43 /* ConsoleKit2 has added the same suspend/resume DBUS API that Systemd
44 * uses. http://consolekit2.github.io/ConsoleKit2/#Manager.Inhibit
45 */
46
47 #define SUSPEND_DBUS_NAME "org.freedesktop.ConsoleKit"
48 #define SUSPEND_DBUS_PATH "/org/freedesktop/ConsoleKit/Manager"
49 #define SUSPEND_DBUS_INTERFACE "org.freedesktop.ConsoleKit.Manager"
50
51 #endif
52
53 struct _NMSleepMonitor {
54 GObject parent_instance;
55
56 GDBusProxy *sd_proxy;
57 gint inhibit_fd;
58 };
59
60 struct _NMSleepMonitorClass {
61 GObjectClass parent_class;
62
63 void (*sleeping) (NMSleepMonitor *monitor);
64 void (*resuming) (NMSleepMonitor *monitor);
65 };
66
67
68 enum {
69 SLEEPING,
70 RESUMING,
71 LAST_SIGNAL,
72 };
73 static guint signals[LAST_SIGNAL] = {0};
74
75 G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT);
76
77 /********************************************************************/
78
79 static gboolean
80 drop_inhibitor (NMSleepMonitor *self)
81 {
82 if (self->inhibit_fd >= 0) {
83 nm_log_dbg (LOGD_SUSPEND, "Dropping systemd sleep inhibitor");
84 close (self->inhibit_fd);
85 self->inhibit_fd = -1;
86 return TRUE;
87 }
88 return FALSE;
89 }
90
91 static void
92 inhibit_done (GObject *source,
93 GAsyncResult *result,
94 gpointer user_data)
95 {
96 GDBusProxy *sd_proxy = G_DBUS_PROXY (source);
97 NMSleepMonitor *self = user_data;
98 GError *error = NULL;
99 GVariant *res;
100 GUnixFDList *fd_list;
101
102 res = g_dbus_proxy_call_with_unix_fd_list_finish (sd_proxy, &fd_list, result, &error);
103 if (!res) {
104 g_dbus_error_strip_remote_error (error);
105 nm_log_warn (LOGD_SUSPEND, "Inhibit failed: %s", error->message);
106 g_error_free (error);
107 } else {
108 if (!fd_list || g_unix_fd_list_get_length (fd_list) != 1)
109 nm_log_warn (LOGD_SUSPEND, "Didn't get a single fd back");
110
111 self->inhibit_fd = g_unix_fd_list_get (fd_list, 0, NULL);
112
113 nm_log_dbg (LOGD_SUSPEND, "Inhibitor fd is %d", self->inhibit_fd);
114 g_object_unref (fd_list);
115 g_variant_unref (res);
116 }
117 }
118
119 static void
120 take_inhibitor (NMSleepMonitor *self)
121 {
122 g_assert (self->inhibit_fd == -1);
123
124 nm_log_dbg (LOGD_SUSPEND, "Taking systemd sleep inhibitor");
125 g_dbus_proxy_call_with_unix_fd_list (self->sd_proxy,
126 "Inhibit",
127 g_variant_new ("(ssss)",
128 "sleep",
129 "NetworkManager",
130 _("NetworkManager needs to turn off networks"),
131 "delay"),
132 0,
133 G_MAXINT,
134 NULL,
135 NULL,
136 inhibit_done,
137 self);
138 }
139
140 static void
141 prepare_for_sleep_cb (GDBusProxy *proxy,
142 gboolean is_about_to_suspend,
143 gpointer data)
144 {
145 NMSleepMonitor *self = data;
146
147 nm_log_dbg (LOGD_SUSPEND, "Received PrepareForSleep signal: %d", is_about_to_suspend);
148
149 if (is_about_to_suspend) {
150 g_signal_emit (self, signals[SLEEPING], 0);
151 drop_inhibitor (self);
152 } else {
153 take_inhibitor (self);
154 g_signal_emit (self, signals[RESUMING], 0);
155 }
156 }
157
158 static void
159 name_owner_cb (GObject *object,
160 GParamSpec *pspec,
161 gpointer user_data)
162 {
163 GDBusProxy *proxy = G_DBUS_PROXY (object);
164 NMSleepMonitor *self = NM_SLEEP_MONITOR (user_data);
165 char *owner;
166
167 g_assert (proxy == self->sd_proxy);
168
169 owner = g_dbus_proxy_get_name_owner (proxy);
170 if (owner)
171 take_inhibitor (self);
172 else
173 drop_inhibitor (self);
174 g_free (owner);
175 }
176
177 static void
178 on_proxy_acquired (GObject *object,
179 GAsyncResult *res,
180 NMSleepMonitor *self)
181 {
182 GError *error = NULL;
183 char *owner;
184
185 self->sd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
186 if (!self->sd_proxy) {
187 nm_log_warn (LOGD_SUSPEND, "Failed to acquire logind proxy: %s", error->message);
188 g_clear_error (&error);
189 return;
190 }
191
192 g_signal_connect (self->sd_proxy, "notify::g-name-owner", G_CALLBACK (name_owner_cb), self);
193 _nm_dbus_signal_connect (self->sd_proxy, "PrepareForSleep", G_VARIANT_TYPE ("(b)"),
194 G_CALLBACK (prepare_for_sleep_cb), self);
195
196 owner = g_dbus_proxy_get_name_owner (self->sd_proxy);
197 if (owner)
198 take_inhibitor (self);
199 g_free (owner);
200 }
201
202 static void
203 nm_sleep_monitor_init (NMSleepMonitor *self)
204 {
205 self->inhibit_fd = -1;
206 g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
207 G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
208 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
209 NULL,
210 SUSPEND_DBUS_NAME, SUSPEND_DBUS_PATH, SUSPEND_DBUS_INTERFACE,
211 NULL,
212 (GAsyncReadyCallback) on_proxy_acquired, self);
213 }
214
215 static void
216 finalize (GObject *object)
217 {
218 NMSleepMonitor *self = NM_SLEEP_MONITOR (object);
219
220 drop_inhibitor (self);
221 if (self->sd_proxy)
222 g_object_unref (self->sd_proxy);
223
224 if (G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize != NULL)
225 G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object);
226 }
227
228 static void
229 nm_sleep_monitor_class_init (NMSleepMonitorClass *klass)
230 {
231 GObjectClass *gobject_class;
232
233 gobject_class = G_OBJECT_CLASS (klass);
234
235 gobject_class->finalize = finalize;
236
237 signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING,
238 NM_TYPE_SLEEP_MONITOR,
239 G_SIGNAL_RUN_LAST,
240 G_STRUCT_OFFSET (NMSleepMonitorClass, sleeping),
241 NULL, /* accumulator */
242 NULL, /* accumulator data */
243 g_cclosure_marshal_VOID__VOID,
244 G_TYPE_NONE, 0);
245 signals[RESUMING] = g_signal_new (NM_SLEEP_MONITOR_RESUMING,
246 NM_TYPE_SLEEP_MONITOR,
247 G_SIGNAL_RUN_LAST,
248 G_STRUCT_OFFSET (NMSleepMonitorClass, resuming),
249 NULL, /* accumulator */
250 NULL, /* accumulator data */
251 g_cclosure_marshal_VOID__VOID,
252 G_TYPE_NONE, 0);
253 }
254
255 NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_MONITOR);
256
257 /* ---------------------------------------------------------------------------------------------------- */
+0
-134
src/nm-sleep-monitor-upower.c less more
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2 of the License, or
4 * (at your option) any later version.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, write to the Free Software Foundation, Inc.,
13 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14 *
15 * (C) Copyright 2012 Red Hat, Inc.
16 * Author: Matthias Clasen <mclasen@redhat.com>
17 */
18
19 #include "nm-default.h"
20
21 #include <errno.h>
22 #include <string.h>
23 #include <sys/stat.h>
24
25 #include "nm-core-internal.h"
26
27 #include "nm-sleep-monitor.h"
28
29 #define UPOWER_DBUS_SERVICE "org.freedesktop.UPower"
30
31 struct _NMSleepMonitor {
32 GObject parent_instance;
33
34 GDBusProxy *upower_proxy;
35 };
36
37 struct _NMSleepMonitorClass {
38 GObjectClass parent_class;
39
40 void (*sleeping) (NMSleepMonitor *monitor);
41 void (*resuming) (NMSleepMonitor *monitor);
42 };
43
44
45 enum {
46 SLEEPING,
47 RESUMING,
48 LAST_SIGNAL,
49 };
50 static guint signals[LAST_SIGNAL] = {0};
51
52 G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT);
53
54 /********************************************************************/
55
56 static void
57 upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data)
58 {
59 nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal");
60 g_signal_emit (user_data, signals[SLEEPING], 0);
61 }
62
63 static void
64 upower_resuming_cb (GDBusProxy *proxy, gpointer user_data)
65 {
66 nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal");
67 g_signal_emit (user_data, signals[RESUMING], 0);
68 }
69
70 static void
71 nm_sleep_monitor_init (NMSleepMonitor *self)
72 {
73 GError *error = NULL;
74
75 self->upower_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
76 G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
77 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
78 NULL,
79 UPOWER_DBUS_SERVICE,
80 "/org/freedesktop/UPower",
81 "org.freedesktop.UPower",
82 NULL, &error);
83 if (self->upower_proxy) {
84 _nm_dbus_signal_connect (self->upower_proxy, "Sleeping", NULL,
85 G_CALLBACK (upower_sleeping_cb), self);
86 _nm_dbus_signal_connect (self->upower_proxy, "Resuming", NULL,
87 G_CALLBACK (upower_resuming_cb), self);
88 } else {
89 nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy: %s", error->message);
90 g_error_free (error);
91 }
92 }
93
94 static void
95 finalize (GObject *object)
96 {
97 NMSleepMonitor *self = NM_SLEEP_MONITOR (object);
98
99 g_clear_object (&self->upower_proxy);
100
101 G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->finalize (object);
102 }
103
104 static void
105 nm_sleep_monitor_class_init (NMSleepMonitorClass *klass)
106 {
107 GObjectClass *gobject_class;
108
109 gobject_class = G_OBJECT_CLASS (klass);
110
111 gobject_class->finalize = finalize;
112
113 signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING,
114 NM_TYPE_SLEEP_MONITOR,
115 G_SIGNAL_RUN_LAST,
116 G_STRUCT_OFFSET (NMSleepMonitorClass, sleeping),
117 NULL, /* accumulator */
118 NULL, /* accumulator data */
119 g_cclosure_marshal_VOID__VOID,
120 G_TYPE_NONE, 0);
121 signals[RESUMING] = g_signal_new (NM_SLEEP_MONITOR_RESUMING,
122 NM_TYPE_SLEEP_MONITOR,
123 G_SIGNAL_RUN_LAST,
124 G_STRUCT_OFFSET (NMSleepMonitorClass, resuming),
125 NULL, /* accumulator */
126 NULL, /* accumulator data */
127 g_cclosure_marshal_VOID__VOID,
128 G_TYPE_NONE, 0);
129 }
130
131 NM_DEFINE_SINGLETON_GETTER (NMSleepMonitor, nm_sleep_monitor_get, NM_TYPE_SLEEP_MONITOR);
132
133 /* ---------------------------------------------------------------------------------------------------- */
0 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
1 /* This program is free software; you can redistribute it and/or modify
2 * it under the terms of the GNU General Public License as published by
3 * the Free Software Foundation; either version 2 of the License, or
4 * (at your option) any later version.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, write to the Free Software Foundation, Inc.,
13 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14 *
15 * (C) Copyright 2012-2016 Red Hat, Inc.
16 * Author: Matthias Clasen <mclasen@redhat.com>
17 */
18
19 #include "nm-default.h"
20
21 #include "nm-sleep-monitor.h"
22
23 #include <errno.h>
24 #include <string.h>
25 #include <sys/stat.h>
26 #include <gio/gunixfdlist.h>
27
28 #include "nm-core-internal.h"
29 #include "NetworkManagerUtils.h"
30
31
32 #if defined (SUSPEND_RESUME_UPOWER)
33
34 #define SUSPEND_DBUS_NAME "org.freedesktop.UPower"
35 #define SUSPEND_DBUS_PATH "/org/freedesktop/UPower"
36 #define SUSPEND_DBUS_INTERFACE "org.freedesktop.UPower"
37 #define USE_UPOWER 1
38 #define _NMLOG_PREFIX_NAME "sleep-monitor-up"
39
40 #elif defined (SUSPEND_RESUME_SYSTEMD)
41
42 #define SUSPEND_DBUS_NAME "org.freedesktop.login1"
43 #define SUSPEND_DBUS_PATH "/org/freedesktop/login1"
44 #define SUSPEND_DBUS_INTERFACE "org.freedesktop.login1.Manager"
45 #define USE_UPOWER 0
46 #define _NMLOG_PREFIX_NAME "sleep-monitor-sd"
47
48 #elif defined(SUSPEND_RESUME_CONSOLEKIT)
49
50 /* ConsoleKit2 has added the same suspend/resume DBUS API that Systemd
51 * uses. http://consolekit2.github.io/ConsoleKit2/#Manager.Inhibit
52 */
53
54 #define SUSPEND_DBUS_NAME "org.freedesktop.ConsoleKit"
55 #define SUSPEND_DBUS_PATH "/org/freedesktop/ConsoleKit/Manager"
56 #define SUSPEND_DBUS_INTERFACE "org.freedesktop.ConsoleKit.Manager"
57 #define USE_UPOWER 0
58 #define _NMLOG_PREFIX_NAME "sleep-monitor-ck"
59
60 #else
61
62 #error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER
63
64 #endif
65
66 struct _NMSleepMonitor {
67 GObject parent_instance;
68
69 GDBusProxy *proxy;
70
71 /* used both during construction of proxy and during Inhibit call. */
72 GCancellable *cancellable;
73
74 gint inhibit_fd;
75 GSList *handles_active;
76 GSList *handles_stale;
77
78 gulong sig_id_1;
79 gulong sig_id_2;
80 };
81
82 struct _NMSleepMonitorClass {
83 GObjectClass parent_class;
84 };
85
86 enum {
87 SLEEPING,
88 LAST_SIGNAL,
89 };
90 static guint signals[LAST_SIGNAL] = {0};
91
92 G_DEFINE_TYPE (NMSleepMonitor, nm_sleep_monitor, G_TYPE_OBJECT);
93
94 static void sleep_signal (NMSleepMonitor *self, gboolean is_about_to_suspend);
95
96 /*****************************************************************************/
97
98 #define _NMLOG_DOMAIN LOGD_SUSPEND
99 #define _NMLOG(level, ...) \
100 G_STMT_START { \
101 nm_log ((level), _NMLOG_DOMAIN, \
102 "%s: " _NM_UTILS_MACRO_FIRST (__VA_ARGS__), \
103 _NMLOG_PREFIX_NAME \
104 _NM_UTILS_MACRO_REST (__VA_ARGS__)); \
105 } G_STMT_END
106
107 /*****************************************************************************/
108
109 #if USE_UPOWER
110
111 static void
112 upower_sleeping_cb (GDBusProxy *proxy, gpointer user_data)
113 {
114 sleep_signal (user_data, TRUE);
115 }
116
117 static void
118 upower_resuming_cb (GDBusProxy *proxy, gpointer user_data)
119 {
120 sleep_signal (user_data, FALSE);
121 }
122
123 #else /* USE_UPOWER */
124
125 static void
126 drop_inhibitor (NMSleepMonitor *self, gboolean force)
127 {
128 if (!force && self->handles_active)
129 return;
130
131 if (self->inhibit_fd >= 0) {
132 _LOGD ("inhibit: dropping sleep inhibitor %d", self->inhibit_fd);
133 close (self->inhibit_fd);
134 self->inhibit_fd = -1;
135 }
136
137 if (self->handles_active) {
138 self->handles_stale = g_slist_concat (self->handles_stale, self->handles_active);
139 self->handles_active = NULL;
140 }
141
142 nm_clear_g_cancellable (&self->cancellable);
143 }
144
145 static void
146 inhibit_done (GObject *source,
147 GAsyncResult *result,
148 gpointer user_data)
149 {
150 GDBusProxy *proxy = G_DBUS_PROXY (source);
151 NMSleepMonitor *self = user_data;
152 gs_free_error GError *error = NULL;
153 gs_unref_variant GVariant *res = NULL;
154 gs_unref_object GUnixFDList *fd_list = NULL;
155
156 res = g_dbus_proxy_call_with_unix_fd_list_finish (proxy, &fd_list, result, &error);
157 if (!res) {
158 if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
159 g_clear_object (&self->cancellable);
160 _LOGW ("inhibit: failed (%s)", error->message);
161 }
162 return;
163 }
164
165 g_clear_object (&self->cancellable);
166
167 if (!fd_list || g_unix_fd_list_get_length (fd_list) != 1) {
168 _LOGW ("inhibit: didn't get a single fd back");
169 return;
170 }
171
172 self->inhibit_fd = g_unix_fd_list_get (fd_list, 0, NULL);
173 _LOGD ("inhibit: inhibitor fd is %d", self->inhibit_fd);
174 }
175
176 static void
177 take_inhibitor (NMSleepMonitor *self)
178 {
179 g_return_if_fail (NM_IS_SLEEP_MONITOR (self));
180 g_return_if_fail (G_IS_DBUS_PROXY (self->proxy));
181
182 drop_inhibitor (self, TRUE);
183
184 _LOGD ("inhibit: taking sleep inhibitor...");
185 self->cancellable = g_cancellable_new ();
186 g_dbus_proxy_call_with_unix_fd_list (self->proxy,
187 "Inhibit",
188 g_variant_new ("(ssss)",
189 "sleep",
190 "NetworkManager",
191 "NetworkManager needs to turn off networks",
192 "delay"),
193 0,
194 G_MAXINT,
195 NULL,
196 self->cancellable,
197 inhibit_done,
198 self);
199 }
200
201 static void
202 prepare_for_sleep_cb (GDBusProxy *proxy,
203 gboolean is_about_to_suspend,
204 gpointer data)
205 {
206 sleep_signal (data, is_about_to_suspend);
207 }
208
209 static void
210 name_owner_cb (GObject *object,
211 GParamSpec *pspec,
212 gpointer user_data)
213 {
214 GDBusProxy *proxy = G_DBUS_PROXY (object);
215 NMSleepMonitor *self = NM_SLEEP_MONITOR (user_data);
216 char *owner;
217
218 g_assert (proxy == self->proxy);
219
220 owner = g_dbus_proxy_get_name_owner (proxy);
221 if (owner)
222 take_inhibitor (self);
223 else
224 drop_inhibitor (self, TRUE);
225 g_free (owner);
226 }
227 #endif /* USE_UPOWER */
228
229 static void
230 sleep_signal (NMSleepMonitor *self,
231 gboolean is_about_to_suspend)
232 {
233 g_return_if_fail (NM_IS_SLEEP_MONITOR (self));
234
235 _LOGD ("received %s signal", is_about_to_suspend ? "SLEEP" : "RESUME");
236
237 #if !USE_UPOWER
238 if (!is_about_to_suspend)
239 take_inhibitor (self);
240 #endif
241
242 g_signal_emit (self, signals[SLEEPING], 0, is_about_to_suspend);
243
244 #if !USE_UPOWER
245 if (is_about_to_suspend)
246 drop_inhibitor (self, FALSE);
247 #endif
248 }
249
250 /**
251 * nm_sleep_monitor_inhibit_take:
252 * @self: the #NMSleepMonitor instance
253 *
254 * Prevent the release of inhibitor lock
255 *
256 * Returns: an inhibitor handle that must be returned via
257 * nm_sleep_monitor_inhibit_release().
258 **/
259 NMSleepMonitorInhibitorHandle *
260 nm_sleep_monitor_inhibit_take (NMSleepMonitor *self)
261 {
262 g_return_val_if_fail (NM_IS_SLEEP_MONITOR (self), NULL);
263
264 self->handles_active = g_slist_prepend (self->handles_active, NULL);
265 return (NMSleepMonitorInhibitorHandle *) self->handles_active;
266 }
267
268 /**
269 * nm_sleep_monitor_inhibit_release:
270 * @self: the #NMSleepMonitor instance
271 * @handle: the #NMSleepMonitorInhibitorHandle inhibitor handle.
272 *
273 * Allow again the release of inhibitor lock
274 **/
275 void
276 nm_sleep_monitor_inhibit_release (NMSleepMonitor *self,
277 NMSleepMonitorInhibitorHandle *handle)
278 {
279 GSList *l;
280
281 g_return_if_fail (NM_IS_SLEEP_MONITOR (self));
282 g_return_if_fail (handle);
283
284 l = (GSList *) handle;
285
286 if (g_slist_position (self->handles_active, l) < 0) {
287 if (g_slist_position (self->handles_stale, l) < 0)
288 g_return_if_reached ();
289 self->handles_stale = g_slist_delete_link (self->handles_stale, l);
290 return;
291 }
292
293 self->handles_active = g_slist_delete_link (self->handles_active, l);
294
295 #if !USE_UPOWER
296 drop_inhibitor (self, FALSE);
297 #endif
298 }
299
300 static void
301 on_proxy_acquired (GObject *object,
302 GAsyncResult *res,
303 NMSleepMonitor *self)
304 {
305 GError *error = NULL;
306 GDBusProxy *proxy;
307
308 proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
309 if (!proxy) {
310 if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
311 _LOGW ("failed to acquire D-Bus proxy: %s", error->message);
312 g_clear_error (&error);
313 return;
314 }
315 self->proxy = proxy;
316 g_clear_object (&self->cancellable);
317
318 #if USE_UPOWER
319 self->sig_id_1 = _nm_dbus_signal_connect (self->proxy, "Sleeping", NULL,
320 G_CALLBACK (upower_sleeping_cb), self);
321 self->sig_id_2 = _nm_dbus_signal_connect (self->proxy, "Resuming", NULL,
322 G_CALLBACK (upower_resuming_cb), self);
323 #else
324 self->sig_id_1 = g_signal_connect (self->proxy, "notify::g-name-owner",
325 G_CALLBACK (name_owner_cb), self);
326 self->sig_id_2 = _nm_dbus_signal_connect (self->proxy, "PrepareForSleep",
327 G_VARIANT_TYPE ("(b)"),
328 G_CALLBACK (prepare_for_sleep_cb), self);
329 {
330 gs_free char *owner = NULL;
331
332 owner = g_dbus_proxy_get_name_owner (self->proxy);
333 if (owner)
334 take_inhibitor (self);
335 }
336 #endif
337 }
338
339 static void
340 nm_sleep_monitor_init (NMSleepMonitor *self)
341 {
342 self->inhibit_fd = -1;
343 self->cancellable = g_cancellable_new ();
344 g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
345 G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
346 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
347 NULL,
348 SUSPEND_DBUS_NAME, SUSPEND_DBUS_PATH, SUSPEND_DBUS_INTERFACE,
349 self->cancellable,
350 (GAsyncReadyCallback) on_proxy_acquired, self);
351 }
352
353 NMSleepMonitor *
354 nm_sleep_monitor_new (void)
355 {
356 return g_object_new (NM_TYPE_SLEEP_MONITOR, NULL);
357 }
358
359 static void
360 dispose (GObject *object)
361 {
362 NMSleepMonitor *self = NM_SLEEP_MONITOR (object);
363
364 #if !USE_UPOWER
365 drop_inhibitor (self, TRUE);
366 #endif
367
368 nm_clear_g_cancellable (&self->cancellable);
369
370 if (self->proxy) {
371 nm_clear_g_signal_handler (self->proxy, &self->sig_id_1);
372 nm_clear_g_signal_handler (self->proxy, &self->sig_id_2);
373 g_clear_object (&self->proxy);
374 }
375
376 G_OBJECT_CLASS (nm_sleep_monitor_parent_class)->dispose (object);
377 }
378
379 static void
380 nm_sleep_monitor_class_init (NMSleepMonitorClass *klass)
381 {
382 GObjectClass *gobject_class;
383
384 gobject_class = G_OBJECT_CLASS (klass);
385
386 gobject_class->dispose = dispose;
387
388 signals[SLEEPING] = g_signal_new (NM_SLEEP_MONITOR_SLEEPING,
389 NM_TYPE_SLEEP_MONITOR,
390 G_SIGNAL_RUN_LAST,
391 0, NULL, NULL,
392 g_cclosure_marshal_VOID__BOOLEAN,
393 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
394 }
395
1212 * with this program; if not, write to the Free Software Foundation, Inc.,
1313 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1414 *
15 * (C) Copyright 2012 Red Hat, Inc.
15 * (C) Copyright 2012-2016 Red Hat, Inc.
1616 * Author: Matthias Clasen <mclasen@redhat.com>
1717 */
1818
1919 #ifndef __NETWORKMANAGER_SLEEP_MONITOR_H__
2020 #define __NETWORKMANAGER_SLEEP_MONITOR_H__
21
22
23 #include "nm-default.h"
2421
2522 G_BEGIN_DECLS
2623
3229 #define NM_IS_SLEEP_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NM_TYPE_SLEEP_MONITOR))
3330
3431 #define NM_SLEEP_MONITOR_SLEEPING "sleeping"
35 #define NM_SLEEP_MONITOR_RESUMING "resuming"
3632
3733 typedef struct _NMSleepMonitorClass NMSleepMonitorClass;
3834
3935 GType nm_sleep_monitor_get_type (void) G_GNUC_CONST;
40 NMSleepMonitor *nm_sleep_monitor_get (void);
36 NMSleepMonitor *nm_sleep_monitor_new (void);
37
38 typedef struct _NMSleepMonitorInhibitorHandle NMSleepMonitorInhibitorHandle;
39
40 NMSleepMonitorInhibitorHandle *nm_sleep_monitor_inhibit_take (NMSleepMonitor *self);
41 void nm_sleep_monitor_inhibit_release (NMSleepMonitor *self,
42 NMSleepMonitorInhibitorHandle *handle);
4143
4244 G_END_DECLS
4345
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
14381438 gboolean *completed_from_cache = cache ? &completed_from_cache_val : NULL;
14391439 const NMPObject *link_cached = NULL;
14401440 NMPObject *lnk_data = NULL;
1441 gboolean address_complete_from_cache = TRUE;
1442 gboolean lnk_data_complete_from_cache = TRUE;
14411443
14421444 if (!nlmsg_valid_hdr (nlh, sizeof (*ifi)))
14431445 return NULL;
15021504 memcpy (obj->link.addr.data, nla_data (tb[IFLA_ADDRESS]), l);
15031505 obj->link.addr.len = l;
15041506 }
1507 address_complete_from_cache = FALSE;
15051508 }
15061509
15071510 if (tb[IFLA_AF_SPEC]) {
15511554 lnk_data = _parse_lnk_vxlan (nl_info_kind, nl_info_data);
15521555 break;
15531556 default:
1554 goto lnk_data_handled;
1555 }
1556
1557 /* We always try to look into the cache and reuse the object there.
1558 * We do that, because we consider the lnk object as immutable and don't
1559 * modify it after creating. Hence we can share it and reuse.
1560 *
1561 * Also, sometimes the info-data is missing for updates. In this case
1562 * we want to keep the previously received lnk_data. */
1563 if (completed_from_cache) {
1557 lnk_data_complete_from_cache = FALSE;
1558 break;
1559 }
1560
1561 if ( completed_from_cache
1562 && ( lnk_data_complete_from_cache
1563 || address_complete_from_cache)) {
15641564 _lookup_cached_link (cache, obj->link.ifindex, completed_from_cache, &link_cached);
1565 if ( link_cached
1566 && link_cached->link.type == obj->link.type
1567 && link_cached->_link.netlink.lnk
1568 && ( !lnk_data
1569 || nmp_object_equal (lnk_data, link_cached->_link.netlink.lnk))) {
1570 nmp_object_unref (lnk_data);
1571 lnk_data = nmp_object_ref (link_cached->_link.netlink.lnk);
1565 if (link_cached) {
1566 if ( lnk_data_complete_from_cache
1567 && link_cached->link.type == obj->link.type
1568 && link_cached->_link.netlink.lnk
1569 && ( !lnk_data
1570 || nmp_object_equal (lnk_data, link_cached->_link.netlink.lnk))) {
1571 /* We always try to look into the cache and reuse the object there.
1572 * We do that, because we consider the lnk object as immutable and don't
1573 * modify it after creating. Hence we can share it and reuse.
1574 *
1575 * Also, sometimes the info-data is missing for updates. In this case
1576 * we want to keep the previously received lnk_data. */
1577 nmp_object_unref (lnk_data);
1578 lnk_data = nmp_object_ref (link_cached->_link.netlink.lnk);
1579 }
1580 if (address_complete_from_cache)
1581 obj->link.addr = link_cached->link.addr;
15721582 }
15731583 }
15741584
1575 lnk_data_handled:
15761585 obj->_link.netlink.lnk = lnk_data;
15771586
15781587 obj->_link.netlink.is_in_netlink = TRUE;
32823291 if ( ops_type == NMP_CACHE_OPS_UPDATED
32833292 && old && new /* <-- nonsensical, make coverity happy */
32843293 && old->_link.netlink.is_in_netlink
3285 && NM_FLAGS_HAS (old->link.n_ifi_flags, IFF_LOWER_UP)
32863294 && new->_link.netlink.is_in_netlink
3287 && !NM_FLAGS_HAS (new->link.n_ifi_flags, IFF_LOWER_UP)) {
3295 && ( ( NM_FLAGS_HAS (old->link.n_ifi_flags, IFF_UP)
3296 && !NM_FLAGS_HAS (new->link.n_ifi_flags, IFF_UP))
3297 || ( NM_FLAGS_HAS (old->link.n_ifi_flags, IFF_LOWER_UP)
3298 && !NM_FLAGS_HAS (new->link.n_ifi_flags, IFF_LOWER_UP)))) {
3299 /* FIXME: I suspect that IFF_LOWER_UP must not be considered, and I
3300 * think kernel does send RTM_DELROUTE events for IPv6 routes, so
3301 * we might not need to refresh IPv6 routes. */
32883302 delayed_action_schedule (platform,
32893303 DELAYED_ACTION_TYPE_REFRESH_ALL_IP4_ROUTES |
32903304 DELAYED_ACTION_TYPE_REFRESH_ALL_IP6_ROUTES,
51395153 wifi_get_wifi_data (NMPlatform *platform, int ifindex)
51405154 {
51415155 NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
5156 const NMPlatformLink *pllink;
51425157 WifiData *wifi_data;
51435158
51445159 wifi_data = g_hash_table_lookup (priv->wifi_data, GINT_TO_POINTER (ifindex));
5160 pllink = nm_platform_link_get (platform, ifindex);
5161
5162 /* @wifi_data contains an interface name which is used for WEXT queries. If
5163 * the interface name changes we should at least replace the name in the
5164 * existing structure; but probably a complete reinitialization is better
5165 * because during the initial creation there can be race conditions while
5166 * the interface is renamed by udev.
5167 */
5168 if (wifi_data && pllink) {
5169 if (!nm_streq (wifi_utils_get_iface (wifi_data), pllink->name)) {
5170 _LOGD ("wifi: interface %s renamed to %s, dropping old data for ifindex %d",
5171 wifi_utils_get_iface (wifi_data),
5172 pllink->name,
5173 ifindex);
5174 g_hash_table_remove (priv->wifi_data, GINT_TO_POINTER (ifindex));
5175 wifi_data = NULL;
5176 }
5177 }
5178
51455179 if (!wifi_data) {
5146 const NMPlatformLink *pllink;
5147
5148 pllink = nm_platform_link_get (platform, ifindex);
51495180 if (pllink) {
51505181 if (pllink->type == NM_LINK_TYPE_WIFI)
51515182 wifi_data = wifi_utils_init (pllink->name, ifindex, TRUE);
57765807 g_clear_pointer (&creds, free);
57775808 errno = 0;
57785809 n = nl_recv (sk, &nla, &buf, &creds);
5810
5811 if (n <= 0) {
5812 /* workaround libnl3 <= 3.2.15 returning danling pointers in case nl_recv()
5813 * fails. Fixed by libnl3 69468517d0de1675d80f24661ff57a5dbac7275c. */
5814 buf = NULL;
5815 creds = NULL;
5816 }
57795817
57805818 switch (n) {
57815819 case 0:
137137 /* rtnl_link_get_arptype(), ifinfomsg.ifi_type. */
138138 guint32 arptype;
139139
140 /* rtnl_link_get_addr() */
140 /* rtnl_link_get_addr(), IFLA_ADDRESS */
141141 struct {
142142 guint8 data[20]; /* NM_UTILS_HWADDR_LEN_MAX */
143143 guint8 len;
620620 NM = @NM@
621621 NMEDIT = @NMEDIT@
622622 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
623 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
623624 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
624625 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
625626 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
6969 return ret;
7070 }
7171
72 int
73 wifi_utils_get_ifindex (WifiData *data)
74 {
75 g_return_val_if_fail (data != NULL, -1);
76
77 return data->ifindex;
78 }
79
80 const char *
81 wifi_utils_get_iface (WifiData *data)
82 {
83 g_return_val_if_fail (data != NULL, NULL);
84
85 return data->iface;
86 }
87
7288 NMDeviceWifiCapabilities
7389 wifi_utils_get_caps (WifiData *data)
7490 {
3131 gboolean wifi_utils_is_wifi (const char *iface, const char *sysfs_path);
3232
3333 WifiData *wifi_utils_init (const char *iface, int ifindex, gboolean check_scan);
34
35 int wifi_utils_get_ifindex (WifiData *data);
36
37 const char *wifi_utils_get_iface (WifiData *data);
3438
3539 void wifi_utils_deinit (WifiData *data);
3640
349349 NM = @NM@
350350 NMEDIT = @NMEDIT@
351351 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
352 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
352353 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
353354 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
354355 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
323323 NM = @NM@
324324 NMEDIT = @NMEDIT@
325325 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
326 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
326327 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
327328 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
328329 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
524524 NM = @NM@
525525 NMEDIT = @NMEDIT@
526526 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
527 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
527528 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
528529 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
529530 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
1919
2020 #include "nm-default.h"
2121
22 #include "nm-agent-manager.h"
23
2224 #include <string.h>
2325 #include <pwd.h>
2426
27 #include "nm-common-macros.h"
2528 #include "nm-dbus-interface.h"
26 #include "nm-agent-manager.h"
2729 #include "nm-secret-agent.h"
2830 #include "nm-auth-utils.h"
2931 #include "nm-setting-vpn.h"
2020 #ifndef __NETWORKMANAGER_AGENT_MANAGER_H__
2121 #define __NETWORKMANAGER_AGENT_MANAGER_H__
2222
23 #include <nm-connection.h>
23 #include "nm-connection.h"
2424
2525 #include "nm-exported-object.h"
2626 #include "nm-secret-agent.h"
361361 r = request_new (self, "GetSecrets", path, setting_name, callback, callback_data);
362362 r->is_get_secrets = TRUE;
363363 g_hash_table_add (priv->requests, r);
364
365 /* Increase the timeout only for this call */
366 g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (priv->proxy), 120000);
364367 nmdbus_secret_agent_call_get_secrets (priv->proxy,
365368 dict,
366369 path,
369372 flags,
370373 r->cancellable,
371374 get_callback, r);
375 g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (priv->proxy), -1);
372376
373377 return r;
374378 }
2020
2121 #include "nm-default.h"
2222
23 #include "nm-settings-connection.h"
24
2325 #include <string.h>
2426
27 #include "nm-common-macros.h"
2528 #include "nm-dbus-interface.h"
26 #include "nm-settings-connection.h"
2729 #include "nm-session-monitor.h"
2830 #include "nm-auth-utils.h"
2931 #include "nm-auth-subject.h"
6971 NM_TYPE_SETTINGS_CONNECTION, \
7072 NMSettingsConnectionPrivate))
7173
72 enum {
73 PROP_0 = 0,
74 NM_GOBJECT_PROPERTIES_DEFINE (NMSettingsConnection,
7475 PROP_VISIBLE,
7576 PROP_UNSAVED,
7677 PROP_READY,
7778 PROP_FLAGS,
7879 PROP_FILENAME,
79 };
80 );
8081
8182 enum {
8283 UPDATED,
8384 REMOVED,
84 UPDATED_BY_USER,
85 UPDATED_INTERNAL,
8586 LAST_SIGNAL
8687 };
8788 static guint signals[LAST_SIGNAL] = { 0 };
9596
9697 NMSettingsConnectionFlags flags;
9798 gboolean ready;
98
99 guint updated_idle_id;
10099
101100 GSList *pending_auths; /* List of pending authentication requests */
102101 gboolean visible; /* Is this connection is visible by some session? */
129128 char *filename;
130129
131130 } NMSettingsConnectionPrivate;
131
132 /*******************************************************************/
133
134 static void
135 _emit_updated (NMSettingsConnection *self, gboolean by_user)
136 {
137 g_signal_emit (self, signals[UPDATED], 0);
138 g_signal_emit (self, signals[UPDATED_INTERNAL], 0, by_user);
139 }
132140
133141 /*******************************************************************/
134142
291299 if (new_visible == priv->visible)
292300 return;
293301 priv->visible = new_visible;
294 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_VISIBLE);
302 _notify (self, PROP_VISIBLE);
295303 }
296304
297305 gboolean
464472 priv->agent_secrets = NULL;
465473 }
466474
467 static gboolean
468 emit_updated (NMSettingsConnection *self)
469 {
470 NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->updated_idle_id = 0;
471 g_signal_emit (self, signals[UPDATED], 0);
472 return FALSE;
473 }
474
475475 static void
476476 set_unsaved (NMSettingsConnection *self, gboolean now_unsaved)
477477 {
490490 }
491491
492492 static void
493 changed_cb (NMSettingsConnection *self, gpointer user_data)
494 {
495 gboolean update_unsaved = !!user_data;
496
497 NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
498
499 if (update_unsaved)
500 set_unsaved (self, TRUE);
501 if (priv->updated_idle_id == 0)
502 priv->updated_idle_id = g_idle_add ((GSourceFunc) emit_updated, self);
493 connection_changed_cb (NMSettingsConnection *self, gpointer unused)
494 {
495 set_unsaved (self, TRUE);
496 _emit_updated (self, FALSE);
503497 }
504498
505499 /* Update the settings of this connection to match that of 'new_connection',
542536 /* Disconnect the changed signal to ensure we don't set Unsaved when
543537 * it's not required.
544538 */
545 g_signal_handlers_block_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
539 g_signal_handlers_block_by_func (self, G_CALLBACK (connection_changed_cb), NULL);
546540
547541 if (log_diff_name)
548542 nm_utils_log_connection_diff (new_connection, NM_CONNECTION (self), LOGL_DEBUG, LOGD_CORE, log_diff_name, "++ ");
579573 /* Manually emit changed signal since we disconnected the handler, but
580574 * only update Unsaved if the caller wanted us to.
581575 */
582 changed_cb (self, GUINT_TO_POINTER (update_unsaved));
583
584 g_signal_emit (self, signals[UPDATED_BY_USER], 0);
585
586 g_signal_handlers_unblock_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
576 if (update_unsaved)
577 set_unsaved (self, TRUE);
578
579 g_signal_handlers_unblock_by_func (self, G_CALLBACK (connection_changed_cb), NULL);
580
581 _emit_updated (self, TRUE);
587582
588583 return success;
589584 }
20982093 old_flags = priv->flags;
20992094 if (old_flags != flags) {
21002095 priv->flags = flags;
2101 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_FLAGS);
2096 _notify (self, PROP_FLAGS);
21022097 if (NM_FLAGS_HAS (old_flags, NM_SETTINGS_CONNECTION_FLAGS_UNSAVED) != NM_FLAGS_HAS (flags, NM_SETTINGS_CONNECTION_FLAGS_UNSAVED))
2103 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_UNSAVED);
2098 _notify (self, PROP_UNSAVED);
21042099 }
21052100 return old_flags;
21062101 }
25052500 ready = !!ready;
25062501 if (priv->ready != ready) {
25072502 priv->ready = ready;
2508 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_READY);
2503 _notify (self, PROP_READY);
25092504 }
25102505 }
25112506
25262521 if (g_strcmp0 (filename, priv->filename) != 0) {
25272522 g_free (priv->filename);
25282523 priv->filename = g_strdup (filename);
2529 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTION_FILENAME);
2524 _notify (self, PROP_FILENAME);
25302525 }
25312526 }
25322527
25812576 priv->autoconnect_blocked_reason = NM_DEVICE_STATE_REASON_NONE;
25822577
25832578 g_signal_connect (self, NM_CONNECTION_SECRETS_CLEARED, G_CALLBACK (secrets_cleared_cb), NULL);
2584 g_signal_connect (self, NM_CONNECTION_CHANGED, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
2579 g_signal_connect (self, NM_CONNECTION_CHANGED, G_CALLBACK (connection_changed_cb), NULL);
25852580 }
25862581
25872582 static void
26122607 }
26132608 }
26142609
2615 nm_clear_g_source (&priv->updated_idle_id);
2616
26172610 /* Disconnect handlers.
2618 * changed_cb() has to be disconnected *before* nm_connection_clear_secrets(),
2611 * connection_changed_cb() has to be disconnected *before* nm_connection_clear_secrets(),
26192612 * because nm_connection_clear_secrets() emits NM_CONNECTION_CHANGED signal.
26202613 */
26212614 g_signal_handlers_disconnect_by_func (self, G_CALLBACK (secrets_cleared_cb), NULL);
2622 g_signal_handlers_disconnect_by_func (self, G_CALLBACK (changed_cb), GUINT_TO_POINTER (TRUE));
2615 g_signal_handlers_disconnect_by_func (self, G_CALLBACK (connection_changed_cb), NULL);
26232616
26242617 nm_connection_clear_secrets (NM_CONNECTION (self));
26252618 g_clear_object (&priv->system_secrets);
27182711 class->supports_secrets = supports_secrets;
27192712
27202713 /* Properties */
2721 g_object_class_install_property
2722 (object_class, PROP_VISIBLE,
2723 g_param_spec_boolean (NM_SETTINGS_CONNECTION_VISIBLE, "", "",
2724 FALSE,
2725 G_PARAM_READABLE |
2726 G_PARAM_STATIC_STRINGS));
2727
2728 g_object_class_install_property
2729 (object_class, PROP_UNSAVED,
2730 g_param_spec_boolean (NM_SETTINGS_CONNECTION_UNSAVED, "", "",
2731 FALSE,
2732 G_PARAM_READABLE |
2733 G_PARAM_STATIC_STRINGS));
2734
2735 g_object_class_install_property
2736 (object_class, PROP_READY,
2737 g_param_spec_boolean (NM_SETTINGS_CONNECTION_READY, "", "",
2738 TRUE,
2739 G_PARAM_READWRITE |
2740 G_PARAM_STATIC_STRINGS));
2741
2742 g_object_class_install_property
2743 (object_class, PROP_FLAGS,
2714 obj_properties[PROP_VISIBLE] =
2715 g_param_spec_boolean (NM_SETTINGS_CONNECTION_VISIBLE, "", "",
2716 FALSE,
2717 G_PARAM_READABLE |
2718 G_PARAM_STATIC_STRINGS);
2719
2720 obj_properties[PROP_UNSAVED] =
2721 g_param_spec_boolean (NM_SETTINGS_CONNECTION_UNSAVED, "", "",
2722 FALSE,
2723 G_PARAM_READABLE |
2724 G_PARAM_STATIC_STRINGS);
2725
2726 obj_properties[PROP_READY] =
2727 g_param_spec_boolean (NM_SETTINGS_CONNECTION_READY, "", "",
2728 TRUE,
2729 G_PARAM_READWRITE |
2730 G_PARAM_STATIC_STRINGS);
2731
2732 obj_properties[PROP_FLAGS] =
27442733 g_param_spec_uint (NM_SETTINGS_CONNECTION_FLAGS, "", "",
27452734 NM_SETTINGS_CONNECTION_FLAGS_NONE,
27462735 NM_SETTINGS_CONNECTION_FLAGS_ALL,
27472736 NM_SETTINGS_CONNECTION_FLAGS_NONE,
27482737 G_PARAM_READWRITE |
2749 G_PARAM_STATIC_STRINGS));
2750
2751 g_object_class_install_property
2752 (object_class, PROP_FILENAME,
2753 g_param_spec_string (NM_SETTINGS_CONNECTION_FILENAME, "", "",
2754 NULL,
2755 G_PARAM_READWRITE |
2756 G_PARAM_STATIC_STRINGS));
2738 G_PARAM_STATIC_STRINGS);
2739
2740 obj_properties[PROP_FILENAME] =
2741 g_param_spec_string (NM_SETTINGS_CONNECTION_FILENAME, "", "",
2742 NULL,
2743 G_PARAM_READWRITE |
2744 G_PARAM_STATIC_STRINGS);
2745
2746 g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
27572747
27582748 /* Signals */
27592749
2760 /* Emitted when the connection is changed for any reason */
27612750 signals[UPDATED] =
2762 g_signal_new (NM_SETTINGS_CONNECTION_UPDATED,
2763 G_TYPE_FROM_CLASS (class),
2764 G_SIGNAL_RUN_FIRST,
2765 0,
2766 NULL, NULL,
2767 g_cclosure_marshal_VOID__VOID,
2768 G_TYPE_NONE, 0);
2769
2770 /* Emitted when connection is changed from D-Bus */
2771 signals[UPDATED_BY_USER] =
2772 g_signal_new (NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
2773 G_TYPE_FROM_CLASS (class),
2774 G_SIGNAL_RUN_FIRST,
2775 0, NULL, NULL,
2776 g_cclosure_marshal_VOID__VOID,
2777 G_TYPE_NONE, 0);
2778
2779 signals[REMOVED] =
2780 g_signal_new (NM_SETTINGS_CONNECTION_REMOVED,
2781 G_TYPE_FROM_CLASS (class),
2782 G_SIGNAL_RUN_FIRST,
2783 0,
2784 NULL, NULL,
2785 g_cclosure_marshal_VOID__VOID,
2786 G_TYPE_NONE, 0);
2751 g_signal_new (NM_SETTINGS_CONNECTION_UPDATED,
2752 G_TYPE_FROM_CLASS (class),
2753 G_SIGNAL_RUN_FIRST,
2754 0,
2755 NULL, NULL,
2756 g_cclosure_marshal_VOID__VOID,
2757 G_TYPE_NONE, 0);
2758
2759 /* internal signal, with an argument (gboolean by_user). */
2760 signals[UPDATED_INTERNAL] =
2761 g_signal_new (NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
2762 G_TYPE_FROM_CLASS (class),
2763 G_SIGNAL_RUN_FIRST,
2764 0, NULL, NULL,
2765 g_cclosure_marshal_VOID__BOOLEAN,
2766 G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
2767
2768 signals[REMOVED] =
2769 g_signal_new (NM_SETTINGS_CONNECTION_REMOVED,
2770 G_TYPE_FROM_CLASS (class),
2771 G_SIGNAL_RUN_FIRST,
2772 0,
2773 NULL, NULL,
2774 g_cclosure_marshal_VOID__VOID,
2775 G_TYPE_NONE, 0);
27872776
27882777 nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (class),
27892778 NMDBUS_TYPE_SETTINGS_CONNECTION_SKELETON,
4242 #define NM_SETTINGS_CONNECTION_GET_SECRETS "get-secrets"
4343 #define NM_SETTINGS_CONNECTION_CANCEL_SECRETS "cancel-secrets"
4444
45 /* Emitted when connection is changed by a user action */
46 #define NM_SETTINGS_CONNECTION_UPDATED_BY_USER "updated-by-user"
45 /* Internal signals */
46 #define NM_SETTINGS_CONNECTION_UPDATED_INTERNAL "updated-internal"
4747
4848 /* Properties */
4949 #define NM_SETTINGS_CONNECTION_VISIBLE "visible"
3535 #include <selinux/selinux.h>
3636 #endif
3737
38 #include "nm-common-macros.h"
3839 #include "nm-dbus-interface.h"
3940 #include "nm-connection.h"
4041 #include "nm-setting-8021x.h"
156157
157158 struct {
158159 char *value;
159 char *file;
160160 GFileMonitor *monitor;
161161 GFileMonitor *dhcp_monitor;
162162 gulong monitor_id;
170170 enum {
171171 CONNECTION_ADDED,
172172 CONNECTION_UPDATED,
173 CONNECTION_UPDATED_BY_USER,
174173 CONNECTION_REMOVED,
175174 CONNECTION_VISIBILITY_CHANGED,
176175 AGENT_REGISTERED,
180179 };
181180 static guint signals[LAST_SIGNAL] = { 0 };
182181
183 enum {
184 PROP_0,
182 NM_GOBJECT_PROPERTIES_DEFINE (NMSettings,
185183 PROP_UNMANAGED_SPECS,
186184 PROP_HOSTNAME,
187185 PROP_CAN_MODIFY,
188186 PROP_CONNECTIONS,
189187 PROP_STARTUP_COMPLETE,
190
191 LAST_PROP
192 };
188 );
193189
194190 static void
195191 check_startup_complete (NMSettings *self)
208204 }
209205
210206 priv->startup_complete = TRUE;
211 g_object_notify (G_OBJECT (self), NM_SETTINGS_STARTUP_COMPLETE);
207 _notify (self, PROP_STARTUP_COMPLETE);
212208 }
213209
214210 static void
588584 #endif
589585
590586 #if defined(HOSTNAME_PERSIST_GENTOO)
591 hostname = read_hostname_gentoo (priv->hostname.file);
587 hostname = read_hostname_gentoo (HOSTNAME_FILE);
592588 #elif defined(HOSTNAME_PERSIST_SLACKWARE)
593 hostname = read_hostname_slackware (priv->hostname.file);
589 hostname = read_hostname_slackware (HOSTNAME_FILE);
594590 #else
595 if (g_file_get_contents (priv->hostname.file, &hostname, NULL, NULL))
591 if (g_file_get_contents (HOSTNAME_FILE, &hostname, NULL, NULL))
596592 g_strchomp (hostname);
597593 #endif
598594
651647
652648 update_specs (self, &priv->unmanaged_specs,
653649 nm_settings_plugin_get_unmanaged_specs);
654 g_object_notify (G_OBJECT (self), NM_SETTINGS_UNMANAGED_SPECS);
650 _notify (self, PROP_UNMANAGED_SPECS);
655651 }
656652
657653 static void
882878 }
883879
884880 static void
885 connection_updated (NMSettingsConnection *connection, gpointer user_data)
886 {
887 /* Re-emit for listeners like NMPolicy */
881 connection_updated (NMSettingsConnection *connection, gboolean by_user, gpointer user_data)
882 {
888883 g_signal_emit (NM_SETTINGS (user_data),
889884 signals[CONNECTION_UPDATED],
890885 0,
891 connection);
886 connection,
887 by_user);
892888 g_signal_emit_by_name (NM_SETTINGS (user_data), NM_CP_SIGNAL_CONNECTION_UPDATED, connection);
893 }
894
895 static void
896 connection_updated_by_user (NMSettingsConnection *connection, gpointer user_data)
897 {
898 /* Re-emit for listeners like NMPolicy */
899 g_signal_emit (NM_SETTINGS (user_data),
900 signals[CONNECTION_UPDATED_BY_USER],
901 0,
902 connection);
903889 }
904890
905891 static void
932918
933919 g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_removed), self);
934920 g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated), self);
935 g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_updated_by_user), self);
936921 g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_visibility_changed), self);
937922 g_signal_handlers_disconnect_by_func (connection, G_CALLBACK (connection_ready_changed), self);
938923 g_object_unref (self);
945930
946931 /* Re-emit for listeners like NMPolicy */
947932 g_signal_emit_by_name (self, NM_CP_SIGNAL_CONNECTION_REMOVED, connection);
948 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTIONS);
933 _notify (self, PROP_CONNECTIONS);
949934 if (nm_exported_object_is_exported (NM_EXPORTED_OBJECT (connection)))
950935 nm_exported_object_unexport (NM_EXPORTED_OBJECT (connection));
951936
10641049 g_object_ref (self);
10651050 g_signal_connect (connection, NM_SETTINGS_CONNECTION_REMOVED,
10661051 G_CALLBACK (connection_removed), self);
1067 g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED,
1052 g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
10681053 G_CALLBACK (connection_updated), self);
1069 g_signal_connect (connection, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
1070 G_CALLBACK (connection_updated_by_user), self);
10711054 g_signal_connect (connection, "notify::" NM_SETTINGS_CONNECTION_VISIBLE,
10721055 G_CALLBACK (connection_visibility_changed),
10731056 self);
10951078 /* Internal added signal */
10961079 g_signal_emit (self, signals[CONNECTION_ADDED], 0, connection);
10971080 g_signal_emit_by_name (self, NM_CP_SIGNAL_CONNECTION_ADDED, connection);
1098 g_object_notify (G_OBJECT (self), NM_SETTINGS_CONNECTIONS);
1081 _notify (self, PROP_CONNECTIONS);
10991082
11001083 /* Exported D-Bus signal */
11011084 g_signal_emit (self, signals[NEW_CONNECTION], 0, connection);
11101093 * not save to disk
11111094 * @error: on return, a location to store any errors that may occur
11121095 *
1113 * Creates a new #NMSettingsConnection for the given source @connection.
1096 * Creates a new #NMSettingsConnection for the given source @connection.
11141097 * The returned object is owned by @self and the caller must reference
11151098 * the object to continue using it.
11161099 *
16341617 char *hostname_eol;
16351618 gboolean ret;
16361619 gs_free_error GError *error = NULL;
1637 const char *file = priv->hostname.file;
1620 const char *file = HOSTNAME_FILE;
16381621 gs_free char *link_path = NULL;
16391622 gs_unref_variant GVariant *var = NULL;
16401623 struct stat file_stat;
16631646 */
16641647 if ( lstat (file, &file_stat) == 0
16651648 && S_ISLNK (file_stat.st_mode)
1666 && (link_path = g_file_read_link (file, NULL)))
1649 && (link_path = nm_utils_read_link_absolute (file, NULL)))
16671650 file = link_path;
16681651
16691652 #if HAVE_SELINUX
18291812 NM_PRINT_FMT_QUOTED (new_hostname, "\"", new_hostname, "\"", "(none)"));
18301813 g_free (priv->hostname.value);
18311814 priv->hostname.value = new_hostname;
1832 g_object_notify (G_OBJECT (settings), NM_SETTINGS_HOSTNAME);
1815 _notify (settings, PROP_HOSTNAME);
18331816 } else
18341817 g_free (new_hostname);
18351818 }
19311914 }
19321915
19331916 static void
1934 default_wired_connection_updated_by_user_cb (NMSettingsConnection *connection, NMSettings *self)
1917 default_wired_connection_updated_by_user_cb (NMSettingsConnection *connection, gboolean by_user, NMSettings *self)
19351918 {
19361919 NMDevice *device;
1920
1921 if (!by_user)
1922 return;
19371923
19381924 /* The connection has been changed by the user, it should no longer be
19391925 * considered a default wired connection, and should no longer affect
20091995 g_object_set_data (G_OBJECT (added), DEFAULT_WIRED_DEVICE_TAG, device);
20101996 g_object_set_data (G_OBJECT (device), DEFAULT_WIRED_CONNECTION_TAG, added);
20111997
2012 g_signal_connect (added, NM_SETTINGS_CONNECTION_UPDATED_BY_USER,
1998 g_signal_connect (added, NM_SETTINGS_CONNECTION_UPDATED_INTERNAL,
20131999 G_CALLBACK (default_wired_connection_updated_by_user_cb), self);
20142000 g_signal_connect (added, NM_SETTINGS_CONNECTION_REMOVED,
20152001 G_CALLBACK (default_wired_connection_removed_cb), self);
21732159 char **invalidated_properties,
21742160 gpointer user_data)
21752161 {
2176 NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (user_data);
2162 NMSettings *self = user_data;
2163 NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
21772164 GVariant *v_hostname;
21782165 const char *hostname;
21792166
21902177 NM_PRINT_FMT_QUOTED (hostname, "\"", hostname, "\"", "(none)"));
21912178 g_free (priv->hostname.value);
21922179 priv->hostname.value = g_strdup (hostname);
2193 g_object_notify (G_OBJECT (user_data), NM_SETTINGS_HOSTNAME);
2180 _notify (self, PROP_HOSTNAME);
21942181 nm_dispatcher_call (DISPATCHER_ACTION_HOSTNAME, NULL, NULL, NULL, NULL, NULL, NULL);
21952182 }
21962183
22042191 GFileMonitor *monitor;
22052192 GFile *file;
22062193
2207 priv->hostname.file = HOSTNAME_FILE;
22082194 priv->hostname.value = nm_settings_get_hostname (self);
22092195
22102196 /* monitor changes to hostname file */
2211 file = g_file_new_for_path (priv->hostname.file);
2197 file = g_file_new_for_path (HOSTNAME_FILE);
22122198 monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL);
22132199 g_object_unref (file);
22142200 if (monitor) {
22952281 setup_hostname_file_monitors (self);
22962282
22972283 priv->started = TRUE;
2298 g_object_notify (G_OBJECT (self), NM_SETTINGS_HOSTNAME);
2284 _notify (self, PROP_HOSTNAME);
22992285 return TRUE;
23002286 }
23012287
24462432
24472433 /* properties */
24482434
2449 g_object_class_install_property
2450 (object_class, PROP_UNMANAGED_SPECS,
2451 g_param_spec_boxed (NM_SETTINGS_UNMANAGED_SPECS, "", "",
2452 G_TYPE_STRV,
2453 G_PARAM_READABLE |
2454 G_PARAM_STATIC_STRINGS));
2455
2456 g_object_class_install_property
2457 (object_class, PROP_HOSTNAME,
2458 g_param_spec_string (NM_SETTINGS_HOSTNAME, "", "",
2459 NULL,
2460 G_PARAM_READABLE |
2461 G_PARAM_STATIC_STRINGS));
2462
2463 g_object_class_install_property
2464 (object_class, PROP_CAN_MODIFY,
2465 g_param_spec_boolean (NM_SETTINGS_CAN_MODIFY, "", "",
2466 FALSE,
2467 G_PARAM_READABLE |
2468 G_PARAM_STATIC_STRINGS));
2469
2470 g_object_class_install_property
2471 (object_class, PROP_CONNECTIONS,
2472 g_param_spec_boxed (NM_SETTINGS_CONNECTIONS, "", "",
2473 G_TYPE_STRV,
2474 G_PARAM_READABLE |
2475 G_PARAM_STATIC_STRINGS));
2435 obj_properties[PROP_UNMANAGED_SPECS] =
2436 g_param_spec_boxed (NM_SETTINGS_UNMANAGED_SPECS, "", "",
2437 G_TYPE_STRV,
2438 G_PARAM_READABLE |
2439 G_PARAM_STATIC_STRINGS);
2440
2441 obj_properties[PROP_HOSTNAME] =
2442 g_param_spec_string (NM_SETTINGS_HOSTNAME, "", "",
2443 NULL,
2444 G_PARAM_READABLE |
2445 G_PARAM_STATIC_STRINGS);
2446
2447 obj_properties[PROP_CAN_MODIFY] =
2448 g_param_spec_boolean (NM_SETTINGS_CAN_MODIFY, "", "",
2449 FALSE,
2450 G_PARAM_READABLE |
2451 G_PARAM_STATIC_STRINGS);
2452
2453 obj_properties[PROP_CONNECTIONS] =
2454 g_param_spec_boxed (NM_SETTINGS_CONNECTIONS, "", "",
2455 G_TYPE_STRV,
2456 G_PARAM_READABLE |
2457 G_PARAM_STATIC_STRINGS);
2458
2459 obj_properties[PROP_STARTUP_COMPLETE] =
2460 g_param_spec_boolean (NM_SETTINGS_STARTUP_COMPLETE, "", "",
2461 FALSE,
2462 G_PARAM_READABLE |
2463 G_PARAM_STATIC_STRINGS);
2464
2465 g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
24762466
24772467 /* signals */
2478 signals[CONNECTION_ADDED] =
2479 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
2480 G_OBJECT_CLASS_TYPE (object_class),
2481 G_SIGNAL_RUN_FIRST,
2482 G_STRUCT_OFFSET (NMSettingsClass, connection_added),
2483 NULL, NULL,
2484 g_cclosure_marshal_VOID__OBJECT,
2485 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2486
2487 signals[CONNECTION_UPDATED] =
2488 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
2489 G_OBJECT_CLASS_TYPE (object_class),
2490 G_SIGNAL_RUN_FIRST,
2491 G_STRUCT_OFFSET (NMSettingsClass, connection_updated),
2492 NULL, NULL,
2493 g_cclosure_marshal_VOID__OBJECT,
2494 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2495
2496 signals[CONNECTION_UPDATED_BY_USER] =
2497 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER,
2498 G_OBJECT_CLASS_TYPE (object_class),
2499 G_SIGNAL_RUN_FIRST,
2500 0,
2501 NULL, NULL,
2502 g_cclosure_marshal_VOID__OBJECT,
2503 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2504
2505 signals[CONNECTION_REMOVED] =
2506 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
2507 G_OBJECT_CLASS_TYPE (object_class),
2508 G_SIGNAL_RUN_FIRST,
2509 G_STRUCT_OFFSET (NMSettingsClass, connection_removed),
2510 NULL, NULL,
2511 g_cclosure_marshal_VOID__OBJECT,
2512 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2513
2514 signals[CONNECTION_VISIBILITY_CHANGED] =
2515 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
2516 G_OBJECT_CLASS_TYPE (object_class),
2517 G_SIGNAL_RUN_FIRST,
2518 G_STRUCT_OFFSET (NMSettingsClass, connection_visibility_changed),
2519 NULL, NULL,
2520 g_cclosure_marshal_VOID__OBJECT,
2521 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2468 signals[CONNECTION_ADDED] =
2469 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_ADDED,
2470 G_OBJECT_CLASS_TYPE (object_class),
2471 G_SIGNAL_RUN_FIRST,
2472 0, NULL, NULL,
2473 g_cclosure_marshal_VOID__OBJECT,
2474 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2475
2476 signals[CONNECTION_UPDATED] =
2477 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_UPDATED,
2478 G_OBJECT_CLASS_TYPE (object_class),
2479 G_SIGNAL_RUN_FIRST,
2480 0, NULL, NULL,
2481 NULL,
2482 G_TYPE_NONE, 2, NM_TYPE_SETTINGS_CONNECTION, G_TYPE_BOOLEAN);
2483
2484 signals[CONNECTION_REMOVED] =
2485 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_REMOVED,
2486 G_OBJECT_CLASS_TYPE (object_class),
2487 G_SIGNAL_RUN_FIRST,
2488 0, NULL, NULL,
2489 g_cclosure_marshal_VOID__OBJECT,
2490 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2491
2492 signals[CONNECTION_VISIBILITY_CHANGED] =
2493 g_signal_new (NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED,
2494 G_OBJECT_CLASS_TYPE (object_class),
2495 G_SIGNAL_RUN_FIRST,
2496 0, NULL, NULL,
2497 g_cclosure_marshal_VOID__OBJECT,
2498 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
25222499
25232500 signals[AGENT_REGISTERED] =
2524 g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED,
2525 G_OBJECT_CLASS_TYPE (object_class),
2526 G_SIGNAL_RUN_FIRST,
2527 G_STRUCT_OFFSET (NMSettingsClass, agent_registered),
2528 NULL, NULL,
2529 g_cclosure_marshal_VOID__OBJECT,
2530 G_TYPE_NONE, 1, NM_TYPE_SECRET_AGENT);
2531
2532
2533 signals[NEW_CONNECTION] =
2534 g_signal_new ("new-connection",
2535 G_OBJECT_CLASS_TYPE (object_class),
2536 G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
2537 g_cclosure_marshal_VOID__OBJECT,
2538 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
2501 g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED,
2502 G_OBJECT_CLASS_TYPE (object_class),
2503 G_SIGNAL_RUN_FIRST,
2504 0, NULL, NULL,
2505 g_cclosure_marshal_VOID__OBJECT,
2506 G_TYPE_NONE, 1, NM_TYPE_SECRET_AGENT);
2507
2508
2509 signals[NEW_CONNECTION] =
2510 g_signal_new ("new-connection",
2511 G_OBJECT_CLASS_TYPE (object_class),
2512 G_SIGNAL_RUN_FIRST, 0, NULL, NULL,
2513 g_cclosure_marshal_VOID__OBJECT,
2514 G_TYPE_NONE, 1, NM_TYPE_SETTINGS_CONNECTION);
25392515
25402516 nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (class),
25412517 NMDBUS_TYPE_SETTINGS_SKELETON,
4040 #define NM_SETTINGS_HOSTNAME "hostname"
4141 #define NM_SETTINGS_CAN_MODIFY "can-modify"
4242 #define NM_SETTINGS_CONNECTIONS "connections"
43 #define NM_SETTINGS_STARTUP_COMPLETE "connections"
43 #define NM_SETTINGS_STARTUP_COMPLETE "startup-complete"
4444
4545 #define NM_SETTINGS_SIGNAL_CONNECTION_ADDED "connection-added"
4646 #define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED "connection-updated"
47 #define NM_SETTINGS_SIGNAL_CONNECTION_UPDATED_BY_USER "connection-updated-by-user"
4847 #define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed"
4948 #define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed"
5049 #define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered"
5554
5655 typedef struct {
5756 NMExportedObjectClass parent_class;
58
59 /* Signals */
60 void (*properties_changed) (NMSettings *self, GHashTable *properties);
61
62 void (*connection_added) (NMSettings *self, NMSettingsConnection *connection);
63
64 void (*connection_updated) (NMSettings *self, NMSettingsConnection *connection);
65
66 void (*connection_removed) (NMSettings *self, NMSettingsConnection *connection);
67
68 void (*connection_visibility_changed) (NMSettings *self, NMSettingsConnection *connection);
69
70 void (*agent_registered) (NMSettings *self, NMSecretAgent *agent);
7157 } NMSettingsClass;
7258
7359 typedef void (*NMSettingsSetHostnameCb) (const char *name, gboolean result, gpointer user_data);
327327 NM = @NM@
328328 NMEDIT = @NMEDIT@
329329 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
330 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
330331 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
331332 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
332333 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
394394 NM = @NM@
395395 NMEDIT = @NMEDIT@
396396 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
397 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
397398 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
398399 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
399400 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
522522 NM = @NM@
523523 NMEDIT = @NMEDIT@
524524 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
525 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
525526 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
526527 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
527528 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
404404 NM = @NM@
405405 NMEDIT = @NMEDIT@
406406 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
407 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
407408 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
408409 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
409410 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
942942 * On SIGHUP and SIGUSR1 try to re-connect to D-Bus. So in the unlikely
943943 * event that the D-Bus conneciton is broken, that allows for recovery
944944 * without need for restarting NetworkManager. */
945 if ( NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_SIGHUP)
946 || NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_SIGUSR1)) {
945 if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP
946 | NM_CONFIG_CHANGE_CAUSE_SIGUSR1)) {
947947 if (!SETTINGS_PLUGIN_IFCFG_GET_PRIVATE (self)->dbus.connection)
948948 _dbus_setup (self);
949949 }
983983 goto done;
984984 (void) nm_setting_ip_config_add_address (s_ip4, addr);
985985 nm_ip_address_unref (addr);
986 if (never_default)
987 PARSE_WARNING ("GATEWAY will be ignored when DEFROUTE is disabled");
986988 g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway, NULL);
987989 }
988990 return NM_SETTING (s_ip4);
10801082 }
10811083 }
10821084 g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway, NULL);
1085
1086 if (gateway && never_default)
1087 PARSE_WARNING ("GATEWAY will be ignored when DEFROUTE is disabled");
10831088
10841089 /* DNS servers
10851090 * Pick up just IPv4 addresses (IPv6 addresses are taken by make_ip6_setting())
576576 NM = @NM@
577577 NMEDIT = @NMEDIT@
578578 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
579 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
579580 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
580581 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
581582 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
395395 NM = @NM@
396396 NMEDIT = @NMEDIT@
397397 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
398 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
398399 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
399400 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
400401 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
528528 NM = @NM@
529529 NMEDIT = @NMEDIT@
530530 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
531 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
531532 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
532533 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
533534 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
394394 NM = @NM@
395395 NMEDIT = @NMEDIT@
396396 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
397 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
397398 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
398399 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
399400 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
523523 NM = @NM@
524524 NMEDIT = @NMEDIT@
525525 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
526 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
526527 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
527528 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
528529 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
363363 NM = @NM@
364364 NMEDIT = @NMEDIT@
365365 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
366 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
366367 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
367368 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
368369 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
567567 NM = @NM@
568568 NMEDIT = @NMEDIT@
569569 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
570 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
570571 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
571572 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
572573 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
561561 NM = @NM@
562562 NMEDIT = @NMEDIT@
563563 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
564 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
564565 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
565566 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
566567 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
631631 NM = @NM@
632632 NMEDIT = @NMEDIT@
633633 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
634 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
634635 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
635636 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
636637 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
520520 NM = @NM@
521521 NMEDIT = @NMEDIT@
522522 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
523 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
523524 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
524525 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
525526 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
342342 g_assert (!nm_config_get_no_auto_default_for_device (config, dev3));
343343 g_assert (nm_config_get_no_auto_default_for_device (config, dev4));
344344
345 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update * (no-auto-default)*");
345 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal NO_AUTO_DEFAULT,no-auto-default *");
346346 nm_config_set_no_auto_default_for_device (config, dev3);
347347 g_test_assert_expected_messages ();
348348
510510 g_assert (config_changed_data);
511511 g_assert (config_changed_data->changes == NM_CONFIG_CHANGE_NONE);
512512
513 if (changes == NM_CONFIG_CHANGE_SIGHUP)
513 if (changes == NM_CONFIG_CHANGE_CAUSE_SIGHUP)
514514 return;
515 changes &= ~NM_CONFIG_CHANGE_SIGHUP;
515 changes &= ~NM_CONFIG_CHANGE_CAUSE_SIGHUP;
516516
517517 config_changed_data->changes = changes;
518518
555555 config_data_before = g_object_ref (nm_config_get_data (config));
556556
557557 if (expected_changes != NM_CONFIG_CHANGE_NONE)
558 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update *");
558 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal *");
559559 else
560560 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGHUP (no changes from disk)*");
561561
562 nm_config_reload (config, SIGHUP);
562 nm_config_reload (config, NM_CONFIG_CHANGE_CAUSE_SIGHUP);
563563
564564 g_test_assert_expected_messages ();
565565
599599 &config_changed_data);
600600
601601 if (expected_changes != NM_CONFIG_CHANGE_NONE)
602 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update *");
602 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal *");
603603
604604 nm_config_set_values (config, keyfile_intern, TRUE, FALSE);
605605
648648 _set_values_intern_internal_set (NMConfig *config, gboolean set_user, GKeyFile *keyfile, NMConfigChangeFlags *out_expected_changes)
649649 {
650650 g_key_file_set_string (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"section1", "key", "internal-section");
651 *out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
651 *out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
652652 }
653653
654654 static void
655655 _set_values_intern_internal_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
656656 {
657657 if (is_change_event)
658 g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
658 g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
659659 assert_config_value (config_data, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"section1", "key", "internal-section");
660660 }
661661
689689 g_key_file_set_string (keyfile, "atomic-prefix-1.section-a", "key3", "intern-value3");
690690 g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key1", "intern-value1");
691691 g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key3", "intern-value3");
692 *out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
692 *out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
693693 }
694694
695695 static void
696696 _set_values_intern_atomic_section_1_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
697697 {
698698 if (is_change_event)
699 g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
699 g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
700700 assert_config_value (config_data, "atomic-prefix-1.section-a", "key1", "intern-value1");
701701 assert_config_value (config_data, "atomic-prefix-1.section-a", "key2", NULL);
702702 assert_config_value (config_data, "atomic-prefix-1.section-a", "key3", "intern-value3");
743743 g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key3", "intern-value3");
744744 g_key_file_set_string (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"with-whitespace", "key1", " b c\\, d ");
745745 g_key_file_set_value (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"with-whitespace", "key2", " b c\\, d ");
746 *out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
746 *out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
747747 }
748748
749749 static void
750750 _set_values_intern_atomic_section_2_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
751751 {
752752 if (is_change_event)
753 g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
753 g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
754754 g_assert (!nm_config_data_has_group (config_data, "atomic-prefix-1.section-a"));
755755 assert_config_value (config_data, "atomic-prefix-1.section-b", "key1", "user-value1");
756756 assert_config_value (config_data, "non-atomic-prefix-1.section-a", "nap1-key1", NULL);
861861 G_CALLBACK (_test_signal_config_changed_cb),
862862 &expected);
863863
864 expected = NM_CONFIG_CHANGE_SIGUSR1;
864 expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR1;
865865 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR1");
866 nm_config_reload (config, SIGUSR1);
867
868 expected = NM_CONFIG_CHANGE_SIGUSR2;
866 nm_config_reload (config, expected);
867
868 expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
869869 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR2");
870 nm_config_reload (config, SIGUSR2);
871
872 expected = NM_CONFIG_CHANGE_SIGHUP;
870 nm_config_reload (config, expected);
871
872 expected = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
873873 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGHUP (no changes from disk)*");
874 nm_config_reload (config, SIGHUP);
874 nm_config_reload (config, expected);
875875
876876
877877 /* test with subscribing two signals...
882882 NM_CONFIG_SIGNAL_CONFIG_CHANGED,
883883 G_CALLBACK (_test_signal_config_changed_cb2),
884884 &expected);
885 expected = NM_CONFIG_CHANGE_SIGUSR2;
885 expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
886886 g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR2");
887 nm_config_reload (config, SIGUSR2);
887 nm_config_reload (config, NM_CONFIG_CHANGE_CAUSE_SIGUSR2);
888888 g_signal_handlers_disconnect_by_func (config, _test_signal_config_changed_cb2, &expected);
889889
890890
13601360 v_result[0] = TEST_MAX (v_const[0], nmtst_get_rand_int () % 5) + v2;
13611361 }
13621362
1363 static void
1364 test_reverse_dns_ip4 (void)
1365 {
1366 guint32 addr;
1367 GPtrArray *domains = g_ptr_array_new_full (8, g_free);
1368
1369 inet_pton (AF_INET, "7.2.3.0", &addr);
1370 nm_utils_get_reverse_dns_domains_ip4 (addr, 27, domains);
1371 g_assert_cmpuint (domains->len, ==, 32);
1372 g_assert_cmpstr (domains->pdata[0], ==, "0.3.2.7.in-addr.arpa");
1373 g_assert_cmpstr (domains->pdata[31], ==, "31.3.2.7.in-addr.arpa");
1374
1375 g_ptr_array_set_size (domains, 0);
1376
1377 inet_pton (AF_INET, "10.155.16.0", &addr);
1378 nm_utils_get_reverse_dns_domains_ip4 (addr, 22, domains);
1379 g_assert_cmpuint (domains->len, ==, 4);
1380 g_assert_cmpstr (domains->pdata[0], ==, "16.155.10.in-addr.arpa");
1381 g_assert_cmpstr (domains->pdata[1], ==, "17.155.10.in-addr.arpa");
1382 g_assert_cmpstr (domains->pdata[2], ==, "18.155.10.in-addr.arpa");
1383 g_assert_cmpstr (domains->pdata[3], ==, "19.155.10.in-addr.arpa");
1384
1385 g_ptr_array_set_size (domains, 0);
1386
1387 inet_pton (AF_INET, "4.5.6.7", &addr);
1388 nm_utils_get_reverse_dns_domains_ip4 (addr, 32, domains);
1389 g_assert_cmpuint (domains->len, ==, 1);
1390 g_assert_cmpstr (domains->pdata[0], ==, "7.6.5.4.in-addr.arpa");
1391
1392 g_ptr_array_set_size (domains, 0);
1393
1394 inet_pton (AF_INET, "4.5.6.7", &addr);
1395 nm_utils_get_reverse_dns_domains_ip4 (addr, 8, domains);
1396 g_assert_cmpuint (domains->len, ==, 1);
1397 g_assert_cmpstr (domains->pdata[0], ==, "4.in-addr.arpa");
1398
1399 g_ptr_array_set_size (domains, 0);
1400
1401 inet_pton (AF_INET, "4.180.6.7", &addr);
1402 nm_utils_get_reverse_dns_domains_ip4 (addr, 9, domains);
1403 g_assert_cmpuint (domains->len, ==, 128);
1404 g_assert_cmpstr (domains->pdata[0], ==, "128.4.in-addr.arpa");
1405 g_assert_cmpstr (domains->pdata[1], ==, "129.4.in-addr.arpa");
1406 g_assert_cmpstr (domains->pdata[127], ==, "255.4.in-addr.arpa");
1407
1408 g_ptr_array_set_size (domains, 0);
1409
1410 inet_pton (AF_INET, "172.16.0.0", &addr);
1411 nm_utils_get_reverse_dns_domains_ip4 (addr, 12, domains);
1412 g_assert_cmpuint (domains->len, ==, 16);
1413 g_assert_cmpstr (domains->pdata[0], ==, "16.172.in-addr.arpa");
1414 g_assert_cmpstr (domains->pdata[1], ==, "17.172.in-addr.arpa");
1415 g_assert_cmpstr (domains->pdata[14], ==, "30.172.in-addr.arpa");
1416 g_assert_cmpstr (domains->pdata[15], ==, "31.172.in-addr.arpa");
1417
1418 g_ptr_array_set_size (domains, 0);
1419
1420 inet_pton (AF_INET, "1.2.3.4", &addr);
1421 nm_utils_get_reverse_dns_domains_ip4 (addr, 0, domains);
1422 g_assert_cmpuint (domains->len, ==, 0);
1423
1424 g_ptr_array_unref (domains);
1425 }
1426
1427 static void
1428 test_reverse_dns_ip6 (void)
1429 {
1430 struct in6_addr addr;
1431 GPtrArray *domains = g_ptr_array_new_full (8, g_free);
1432
1433 inet_pton (AF_INET6, "1234::56", &addr);
1434 nm_utils_get_reverse_dns_domains_ip6 (&addr, 16, domains);
1435 g_assert_cmpuint (domains->len, ==, 1);
1436 g_assert_cmpstr (domains->pdata[0], ==, "4.3.2.1.ip6.arpa");
1437
1438 g_ptr_array_set_size (domains, 0);
1439
1440 inet_pton (AF_INET6, "1234::56", &addr);
1441 nm_utils_get_reverse_dns_domains_ip6 (&addr, 17, domains);
1442 g_assert_cmpuint (domains->len, ==, 8);
1443 g_assert_cmpstr (domains->pdata[0], ==, "0.4.3.2.1.ip6.arpa");
1444 g_assert_cmpstr (domains->pdata[1], ==, "1.4.3.2.1.ip6.arpa");
1445 g_assert_cmpstr (domains->pdata[7], ==, "7.4.3.2.1.ip6.arpa");
1446
1447 g_ptr_array_set_size (domains, 0);
1448
1449 inet_pton (AF_INET6, "2001:db8::", &addr);
1450 nm_utils_get_reverse_dns_domains_ip6 (&addr, 29, domains);
1451 g_assert_cmpuint (domains->len, ==, 8);
1452 g_assert_cmpstr (domains->pdata[0], ==, "8.b.d.0.1.0.0.2.ip6.arpa");
1453 g_assert_cmpstr (domains->pdata[1], ==, "9.b.d.0.1.0.0.2.ip6.arpa");
1454 g_assert_cmpstr (domains->pdata[7], ==, "f.b.d.0.1.0.0.2.ip6.arpa");
1455
1456 g_ptr_array_set_size (domains, 0);
1457
1458 inet_pton (AF_INET6, "0123:4567:89ab:cdef::", &addr);
1459 nm_utils_get_reverse_dns_domains_ip6 (&addr, 63, domains);
1460 g_assert_cmpuint (domains->len, ==, 2);
1461 g_assert_cmpstr (domains->pdata[0], ==, "e.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.ip6.arpa");
1462 g_assert_cmpstr (domains->pdata[1], ==, "f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.ip6.arpa");
1463
1464 g_ptr_array_set_size (domains, 0);
1465
1466 inet_pton (AF_INET6, "fec0:1234:5678:9ab0::", &addr);
1467 nm_utils_get_reverse_dns_domains_ip6 (&addr, 61, domains);
1468 g_assert_cmpuint (domains->len, ==, 8);
1469 g_assert_cmpstr (domains->pdata[0], ==, "0.b.a.9.8.7.6.5.4.3.2.1.0.c.e.f.ip6.arpa");
1470 g_assert_cmpstr (domains->pdata[7], ==, "7.b.a.9.8.7.6.5.4.3.2.1.0.c.e.f.ip6.arpa");
1471
1472 g_ptr_array_set_size (domains, 0);
1473
1474 inet_pton (AF_INET6, "0123:4567:89ab:cdee::", &addr);
1475 nm_utils_get_reverse_dns_domains_ip6 (&addr, 0, domains);
1476 g_assert_cmpuint (domains->len, ==, 0);
1477
1478 g_ptr_array_unref (domains);
1479 }
1480
13631481 /*****************************************************************************/
13641482
13651483 NMTST_DEFINE ();
13961514 g_test_add_func ("/general/nm_match_spec_match_config", test_nm_match_spec_match_config);
13971515 g_test_add_func ("/general/duplicate_decl_specifier", test_duplicate_decl_specifier);
13981516
1517 g_test_add_func ("/general/reverse_dns/ip4", test_reverse_dns_ip4);
1518 g_test_add_func ("/general/reverse_dns/ip6", test_reverse_dns_ip6);
1519
13991520 return g_test_run ();
14001521 }
14011522
4343 #include "nm-config.h"
4444 #include "nm-vpn-plugin-info.h"
4545 #include "nm-vpn-manager.h"
46 #include "nm-dns-manager.h"
4647
4748 #include "nmdbus-vpn-connection.h"
4849
191192 "%s%s" /*con-uuid*/
192193 "%s%s%s%s" /*con-id*/
193194 ",%d" /*ifindex*/
194 "%s%s%s%s" /*iface*/
195 "%s%s%s" /*iface*/
195196 "]",
196197 _NMLOG_PREFIX_NAME,
197198 self,
198199 con ? "," : "--", con ? (nm_connection_get_uuid (con) ?: "??") : "",
199200 con ? "," : "", NM_PRINT_FMT_QUOTED (id, "\"", id, "\"", con ? "??" : ""),
200201 priv->ip_ifindex,
201 priv->ip_iface ? ":" : "", NM_PRINT_FMT_QUOTED (priv->ip_iface, "(", priv->ip_iface, ")", "")
202 NM_PRINT_FMT_QUOTED (priv->ip_iface, ":(", priv->ip_iface, ")", "")
202203 );
203204
204205 return buf;
908909 nm_utils_inet6_ntop (priv->ip6_external_gw, NULL));
909910 }
910911
911 _LOGI ("Data: Tunnel Device: %s", priv->ip_iface ? priv->ip_iface : "(none)");
912 _LOGI ("Data: Tunnel Device: %s%s%s", NM_PRINT_FMT_QUOTE_STRING (priv->ip_iface));
912913
913914 if (priv->ip4_config) {
914915 _LOGI ("Data: IPv4 configuration:");
10211022 ifindex = nm_device_get_ip_ifindex (parent_dev);
10221023 if (priv->ip4_config) {
10231024 vpn4_parent_config = nm_ip4_config_new (ifindex);
1024 nm_ip4_config_merge (vpn4_parent_config, priv->ip4_config, NM_IP_CONFIG_MERGE_DEFAULT);
1025 nm_ip4_config_unset_gateway (vpn4_parent_config);
1025 nm_ip4_config_merge (vpn4_parent_config, priv->ip4_config, NM_IP_CONFIG_MERGE_NO_DNS);
10261026 }
10271027 if (priv->ip6_config) {
10281028 vpn6_parent_config = nm_ip6_config_new (ifindex);
1029 nm_ip6_config_merge (vpn6_parent_config, priv->ip6_config, NM_IP_CONFIG_MERGE_DEFAULT);
1029 nm_ip6_config_merge (vpn6_parent_config, priv->ip6_config, NM_IP_CONFIG_MERGE_NO_DNS);
10301030 nm_ip6_config_set_gateway (vpn6_parent_config, NULL);
10311031 }
10321032 }
10781078 nm_default_route_manager_ip6_update_default_route (priv->default_route_manager, self);
10791079
10801080 _LOGI ("VPN connection: (IP Config Get) complete");
1081 _set_vpn_state (self, STATE_PRE_UP, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
1081 if (priv->vpn_state < STATE_PRE_UP)
1082 _set_vpn_state (self, STATE_PRE_UP, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
10821083 return TRUE;
10831084 }
10841085
12171218 }
12181219
12191220 g_clear_pointer (&priv->ip_iface, g_free);
1221 priv->ip_ifindex = 0;
1222
12201223 if (g_variant_lookup (dict, NM_VPN_PLUGIN_CONFIG_TUNDEV, "&s", &str)) {
12211224 /* Backwards compat with NM-openswan */
12221225 if (g_strcmp0 (str, "_none_") != 0)
12271230 /* Grab the interface index for address/routing operations */
12281231 priv->ip_ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, priv->ip_iface);
12291232 if (priv->ip_ifindex <= 0) {
1233 nm_platform_process_events (NM_PLATFORM_GET);
1234 priv->ip_ifindex = nm_platform_link_get_ifindex (NM_PLATFORM_GET, priv->ip_iface);
1235 }
1236 if (priv->ip_ifindex <= 0) {
12301237 _LOGE ("failed to look up VPN interface index for \"%s\"", priv->ip_iface);
1238 g_clear_pointer (&priv->ip_iface, g_free);
1239 priv->ip_ifindex = 0;
12311240 nm_vpn_connection_config_maybe_complete (self, FALSE);
12321241 return FALSE;
12331242 }
13281337 const char *str;
13291338 GVariant *v;
13301339 gboolean b;
1331 int ifindex;
13321340
13331341 g_return_if_fail (dict && g_variant_is_of_type (dict, G_VARIANT_TYPE_VARDICT));
13341342
13561364 priv->has_ip6 = FALSE;
13571365 }
13581366
1359 if (priv->ip_ifindex > 0) {
1360 ifindex = priv->ip_ifindex;
1361 } else {
1362 NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (self));
1363 ifindex = nm_device_get_ip_ifindex (parent_dev);
1364 }
1365 config = nm_ip4_config_new (ifindex);
1367 config = nm_ip4_config_new (nm_vpn_connection_get_ip_ifindex (self, TRUE));
1368 nm_ip4_config_set_dns_priority (config, NM_DNS_PRIORITY_DEFAULT_VPN);
13661369
13671370 memset (&address, 0, sizeof (address));
13681371 address.plen = 24;
14631466 nm_connection_get_setting_ip4_config (_get_applied_connection (self)),
14641467 route_metric);
14651468
1466 nm_exported_object_clear_and_unexport (&priv->ip4_config);
1467 priv->ip4_config = config;
1468 nm_exported_object_export (NM_EXPORTED_OBJECT (config));
1469 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP4_CONFIG);
1469 if (priv->ip4_config) {
1470 nm_ip4_config_replace (priv->ip4_config, config, NULL);
1471 g_object_unref (config);
1472 } else {
1473 priv->ip4_config = config;
1474 nm_exported_object_export (NM_EXPORTED_OBJECT (config));
1475 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP4_CONFIG);
1476 }
1477
14701478 nm_vpn_connection_config_maybe_complete (self, TRUE);
14711479 }
14721480
14961504 }
14971505
14981506 config = nm_ip6_config_new (priv->ip_ifindex);
1507 nm_ip6_config_set_dns_priority (config, NM_DNS_PRIORITY_DEFAULT_VPN);
14991508
15001509 memset (&address, 0, sizeof (address));
15011510 address.plen = 128;
15991608 nm_connection_get_setting_ip6_config (_get_applied_connection (self)),
16001609 route_metric);
16011610
1602 nm_exported_object_clear_and_unexport (&priv->ip6_config);
1603 priv->ip6_config = config;
1604 nm_exported_object_export (NM_EXPORTED_OBJECT (config));
1605 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP6_CONFIG);
1611 if (priv->ip6_config) {
1612 nm_ip6_config_replace (priv->ip6_config, config, NULL);
1613 g_object_unref (config);
1614 } else {
1615 priv->ip6_config = config;
1616 nm_exported_object_export (NM_EXPORTED_OBJECT (config));
1617 g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_IP6_CONFIG);
1618 }
1619
16061620 nm_vpn_connection_config_maybe_complete (self, TRUE);
16071621 }
16081622
19151929 _LOGW ("Timed out waiting for the service to start");
19161930 priv->start_timeout = 0;
19171931 nm_vpn_connection_disconnect (self, NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT, FALSE);
1918
1919 g_object_unref (self);
1920
19211932 return G_SOURCE_REMOVE;
19221933 }
19231934
20842095 return NM_VPN_CONNECTION_GET_PRIVATE (self)->ip6_config;
20852096 }
20862097
2098 static int
2099 _get_ip_iface_for_device (NMVpnConnection *self, const char **out_iface)
2100 {
2101 NMDevice *parent_dev;
2102 int ifindex;
2103 const char *iface;
2104
2105 nm_assert (NM_IS_VPN_CONNECTION (self));
2106
2107 /* the ifindex and the ifname in this case should come together.
2108 * They either must be both set, or none. */
2109
2110 parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (self));
2111 if (!parent_dev)
2112 goto none;
2113 ifindex = nm_device_get_ip_ifindex (parent_dev);
2114 if (ifindex <= 0)
2115 goto none;
2116 iface = nm_device_get_ip_iface (parent_dev);
2117 if (!iface)
2118 goto none;
2119
2120 NM_SET_OUT (out_iface, iface);
2121 return ifindex;
2122 none:
2123 NM_SET_OUT (out_iface, NULL);
2124 return 0;
2125 }
2126
20872127 const char *
2088 nm_vpn_connection_get_ip_iface (NMVpnConnection *self)
2089 {
2128 nm_vpn_connection_get_ip_iface (NMVpnConnection *self, gboolean fallback_device)
2129 {
2130 NMVpnConnectionPrivate *priv;
2131 const char *iface;
2132
20902133 g_return_val_if_fail (NM_IS_VPN_CONNECTION (self), NULL);
20912134
2092 return NM_VPN_CONNECTION_GET_PRIVATE (self)->ip_iface;
2135 priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
2136
2137 if (priv->ip_iface || !fallback_device)
2138 return priv->ip_iface;
2139
2140 _get_ip_iface_for_device (self, &iface);
2141 return iface;
20932142 }
20942143
20952144 int
2096 nm_vpn_connection_get_ip_ifindex (NMVpnConnection *self)
2097 {
2098 g_return_val_if_fail (NM_IS_VPN_CONNECTION (self), -1);
2099
2100 return NM_VPN_CONNECTION_GET_PRIVATE (self)->ip_ifindex;
2145 nm_vpn_connection_get_ip_ifindex (NMVpnConnection *self, gboolean fallback_device)
2146 {
2147 NMVpnConnectionPrivate *priv;
2148
2149 g_return_val_if_fail (NM_IS_VPN_CONNECTION (self), 0);
2150
2151 priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
2152
2153 if (priv->ip_ifindex > 0)
2154 return priv->ip_ifindex;
2155 if (!fallback_device)
2156 return 0;
2157
2158 return _get_ip_iface_for_device (self, NULL);
21012159 }
21022160
21032161 guint32
9090
9191 NMIP4Config * nm_vpn_connection_get_ip4_config (NMVpnConnection *self);
9292 NMIP6Config * nm_vpn_connection_get_ip6_config (NMVpnConnection *self);
93 const char * nm_vpn_connection_get_ip_iface (NMVpnConnection *self);
94 int nm_vpn_connection_get_ip_ifindex (NMVpnConnection *self);
93 const char * nm_vpn_connection_get_ip_iface (NMVpnConnection *self, gboolean fallback_device);
94 int nm_vpn_connection_get_ip_ifindex (NMVpnConnection *self, gboolean fallback_device);
9595 guint32 nm_vpn_connection_get_ip4_internal_gateway (NMVpnConnection *self);
9696 struct in6_addr * nm_vpn_connection_get_ip6_internal_gateway (NMVpnConnection *self);
9797
263263 NM = @NM@
264264 NMEDIT = @NMEDIT@
265265 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
266 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
266267 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
267268 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
268269 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@
782782 "org.freedesktop.NetworkManager.wifi.share.open": "yes",
783783 "org.freedesktop.NetworkManager.settings.modify.own": "yes",
784784 "org.freedesktop.NetworkManager.settings.modify.system": "yes",
785 "org.freedesktop.NetworkManager.settings.modify.hostname": "yes" }
785 "org.freedesktop.NetworkManager.settings.modify.hostname": "yes",
786 "org.freedesktop.NetworkManager.settings.modify.global-dns": "no",
787 "org.freedesktop.NetworkManager.reload": "no",
788 }
786789
787790 @dbus.service.method(dbus_interface=IFACE_NM, in_signature='ss', out_signature='')
788791 def SetLogging(self, level, domains):
331331 NM = @NM@
332332 NMEDIT = @NMEDIT@
333333 NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT = @NM_CONFIG_DEFAULT_AUTH_POLKIT_TEXT@
334 NM_CONFIG_DEFAULT_DNS_RC_MANAGER = @NM_CONFIG_DEFAULT_DNS_RC_MANAGER@
334335 NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT = @NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT@
335336 NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT = @NM_CONFIG_LOGGING_BACKEND_DEFAULT_TEXT@
336337 NM_MAJOR_VERSION = @NM_MAJOR_VERSION@