mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-09 05:58:01 +02:00
connectivity: merge branch 'th/connectivity-per-af-fixes'
https://github.com/NetworkManager/NetworkManager/pull/255
This commit is contained in:
commit
b7429d0a95
19 changed files with 750 additions and 504 deletions
|
|
@ -1394,7 +1394,7 @@ nmc_error_get_simple_message (GError *error)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
NM_UTILS_LOOKUP_STR_DEFINE (nm_connectivity_to_string_no_l10n, NMConnectivityState,
|
NM_UTILS_LOOKUP_STR_DEFINE (nm_connectivity_to_string, NMConnectivityState,
|
||||||
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_NONE, N_("none")),
|
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_NONE, N_("none")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_PORTAL, N_("portal")),
|
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_PORTAL, N_("portal")),
|
||||||
|
|
@ -1402,9 +1402,3 @@ NM_UTILS_LOOKUP_STR_DEFINE (nm_connectivity_to_string_no_l10n, NMConnectivitySta
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_FULL, N_("full")),
|
NM_UTILS_LOOKUP_ITEM (NM_CONNECTIVITY_FULL, N_("full")),
|
||||||
NM_UTILS_LOOKUP_ITEM_IGNORE (NM_CONNECTIVITY_UNKNOWN),
|
NM_UTILS_LOOKUP_ITEM_IGNORE (NM_CONNECTIVITY_UNKNOWN),
|
||||||
);
|
);
|
||||||
|
|
||||||
const char *
|
|
||||||
nm_connectivity_to_string (NMConnectivityState connectivity)
|
|
||||||
{
|
|
||||||
return _(nm_connectivity_to_string_no_l10n (connectivity));
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,5 @@ extern const NmcMetaGenericInfo *const metagen_ip6_config[];
|
||||||
extern const NmcMetaGenericInfo *const metagen_dhcp_config[];
|
extern const NmcMetaGenericInfo *const metagen_dhcp_config[];
|
||||||
|
|
||||||
const char *nm_connectivity_to_string (NMConnectivityState connectivity);
|
const char *nm_connectivity_to_string (NMConnectivityState connectivity);
|
||||||
const char *nm_connectivity_to_string_no_l10n (NMConnectivityState connectivity);
|
|
||||||
|
|
||||||
#endif /* NMC_COMMON_H */
|
#endif /* NMC_COMMON_H */
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (nm_state_to_string_no_l10n, NMState,
|
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (nm_state_to_string, NMState,
|
||||||
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_STATE_ASLEEP, N_("asleep")),
|
NM_UTILS_LOOKUP_ITEM (NM_STATE_ASLEEP, N_("asleep")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_STATE_CONNECTING, N_("connecting")),
|
NM_UTILS_LOOKUP_ITEM (NM_STATE_CONNECTING, N_("connecting")),
|
||||||
|
|
@ -49,12 +49,6 @@ NM_UTILS_LOOKUP_STR_DEFINE_STATIC (nm_state_to_string_no_l10n, NMState,
|
||||||
NM_UTILS_LOOKUP_ITEM_IGNORE (NM_STATE_UNKNOWN),
|
NM_UTILS_LOOKUP_ITEM_IGNORE (NM_STATE_UNKNOWN),
|
||||||
);
|
);
|
||||||
|
|
||||||
static const char *
|
|
||||||
nm_state_to_string (NMState state)
|
|
||||||
{
|
|
||||||
return _(nm_state_to_string_no_l10n (state));
|
|
||||||
}
|
|
||||||
|
|
||||||
static NMMetaColor
|
static NMMetaColor
|
||||||
state_to_color (NMState state)
|
state_to_color (NMState state)
|
||||||
{
|
{
|
||||||
|
|
@ -136,7 +130,7 @@ permission_to_string (NMClientPermission perm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (permission_result_to_string_no_l10n, NMClientPermissionResult,
|
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (permission_result_to_string, NMClientPermissionResult,
|
||||||
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
NM_UTILS_LOOKUP_DEFAULT (N_("unknown")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_CLIENT_PERMISSION_RESULT_YES, N_("yes")),
|
NM_UTILS_LOOKUP_ITEM (NM_CLIENT_PERMISSION_RESULT_YES, N_("yes")),
|
||||||
NM_UTILS_LOOKUP_ITEM (NM_CLIENT_PERMISSION_RESULT_NO, N_("no")),
|
NM_UTILS_LOOKUP_ITEM (NM_CLIENT_PERMISSION_RESULT_NO, N_("no")),
|
||||||
|
|
@ -177,7 +171,7 @@ _metagen_general_status_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS)
|
||||||
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_STATE:
|
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_STATE:
|
||||||
state = nm_client_get_state (nmc->client);
|
state = nm_client_get_state (nmc->client);
|
||||||
NMC_HANDLE_COLOR (state_to_color (state));
|
NMC_HANDLE_COLOR (state_to_color (state));
|
||||||
value = nm_state_to_string_no_l10n (state);
|
value = nm_state_to_string (state);
|
||||||
goto translate_and_out;
|
goto translate_and_out;
|
||||||
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_STARTUP:
|
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_STARTUP:
|
||||||
v_bool = nm_client_get_startup (nmc->client);
|
v_bool = nm_client_get_startup (nmc->client);
|
||||||
|
|
@ -187,7 +181,7 @@ _metagen_general_status_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS)
|
||||||
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_CONNECTIVITY:
|
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_CONNECTIVITY:
|
||||||
connectivity = nm_client_get_connectivity (nmc->client);
|
connectivity = nm_client_get_connectivity (nmc->client);
|
||||||
NMC_HANDLE_COLOR (connectivity_to_color (connectivity));
|
NMC_HANDLE_COLOR (connectivity_to_color (connectivity));
|
||||||
value = nm_connectivity_to_string_no_l10n (connectivity);
|
value = nm_connectivity_to_string (connectivity);
|
||||||
goto translate_and_out;
|
goto translate_and_out;
|
||||||
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_NETWORKING:
|
case NMC_GENERIC_INFO_TYPE_GENERAL_STATUS_NETWORKING:
|
||||||
v_bool = nm_client_networking_get_enabled (nmc->client);
|
v_bool = nm_client_networking_get_enabled (nmc->client);
|
||||||
|
|
@ -271,7 +265,7 @@ _metagen_general_permissions_get_fcn (NMC_META_GENERIC_INFO_GET_FCN_ARGS)
|
||||||
case NMC_GENERIC_INFO_TYPE_GENERAL_PERMISSIONS_VALUE:
|
case NMC_GENERIC_INFO_TYPE_GENERAL_PERMISSIONS_VALUE:
|
||||||
perm_result = nm_client_get_permission_result (nmc->client, perm);
|
perm_result = nm_client_get_permission_result (nmc->client, perm);
|
||||||
NMC_HANDLE_COLOR (permission_result_to_color (perm_result));
|
NMC_HANDLE_COLOR (permission_result_to_color (perm_result));
|
||||||
s = permission_result_to_string_no_l10n (perm_result);
|
s = permission_result_to_string (perm_result);
|
||||||
if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY)
|
if (get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY)
|
||||||
return _(s);
|
return _(s);
|
||||||
return s;
|
return s;
|
||||||
|
|
@ -1098,7 +1092,8 @@ client_connectivity (NMClient *client, GParamSpec *param, NmCli *nmc)
|
||||||
|
|
||||||
g_object_get (client, NM_CLIENT_CONNECTIVITY, &connectivity, NULL);
|
g_object_get (client, NM_CLIENT_CONNECTIVITY, &connectivity, NULL);
|
||||||
str = nmc_colorize (&nmc->nmc_config, connectivity_to_color (connectivity),
|
str = nmc_colorize (&nmc->nmc_config, connectivity_to_color (connectivity),
|
||||||
_("Connectivity is now '%s'\n"), nm_connectivity_to_string (connectivity));
|
_("Connectivity is now '%s'\n"),
|
||||||
|
gettext (nm_connectivity_to_string (connectivity)));
|
||||||
g_print ("%s", str);
|
g_print ("%s", str);
|
||||||
g_free (str);
|
g_free (str);
|
||||||
}
|
}
|
||||||
|
|
@ -1112,7 +1107,7 @@ client_state (NMClient *client, GParamSpec *param, NmCli *nmc)
|
||||||
g_object_get (client, NM_CLIENT_STATE, &state, NULL);
|
g_object_get (client, NM_CLIENT_STATE, &state, NULL);
|
||||||
str = nmc_colorize (&nmc->nmc_config, state_to_color (state),
|
str = nmc_colorize (&nmc->nmc_config, state_to_color (state),
|
||||||
_("Networkmanager is now in the '%s' state\n"),
|
_("Networkmanager is now in the '%s' state\n"),
|
||||||
nm_state_to_string (state));
|
gettext (nm_state_to_string (state)));
|
||||||
g_print ("%s", str);
|
g_print ("%s", str);
|
||||||
g_free (str);
|
g_free (str);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1112,12 +1112,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2251
|
size: 2249
|
||||||
location: clients/tests/test-client.py:944:test_003()/36
|
location: clients/tests/test-client.py:944:test_003()/36
|
||||||
cmd: $NMCLI -f ALL -t dev show eth0
|
cmd: $NMCLI -f ALL -t dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -1131,8 +1131,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -1990,12 +1990,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2251
|
size: 2249
|
||||||
location: clients/tests/test-client.py:944:test_003()/59
|
location: clients/tests/test-client.py:944:test_003()/59
|
||||||
cmd: $NMCLI -f ALL -t dev show eth0
|
cmd: $NMCLI -f ALL -t dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -2009,8 +2009,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -5294,12 +5294,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2257
|
size: 2255
|
||||||
location: clients/tests/test-client.py:971:test_003()/109
|
location: clients/tests/test-client.py:971:test_003()/109
|
||||||
cmd: $NMCLI --terse -f all dev show eth0
|
cmd: $NMCLI --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -5313,8 +5313,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -5914,12 +5914,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2269
|
size: 2267
|
||||||
location: clients/tests/test-client.py:971:test_003()/119
|
location: clients/tests/test-client.py:971:test_003()/119
|
||||||
cmd: $NMCLI --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -5933,8 +5933,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -7255,14 +7255,14 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-
|
||||||
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 1387
|
size: 1385
|
||||||
location: clients/tests/test-client.py:971:test_003()/169
|
location: clients/tests/test-client.py:971:test_003()/169
|
||||||
cmd: $NMCLI --mode tabular --terse -f all dev show eth0
|
cmd: $NMCLI --mode tabular --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 1213 bytes
|
stdout: 1211 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (nieznane):0 (nieznane):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
||||||
CAPABILITIES:no:100 Mb/s:no:no
|
CAPABILITIES:no:100 Mb/s:no:no
|
||||||
WIRED-PROPERTIES:off:
|
WIRED-PROPERTIES:off:
|
||||||
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
||||||
|
|
@ -7407,14 +7407,14 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-
|
||||||
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 1399
|
size: 1397
|
||||||
location: clients/tests/test-client.py:971:test_003()/179
|
location: clients/tests/test-client.py:971:test_003()/179
|
||||||
cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 1213 bytes
|
stdout: 1211 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (nieznane):0 (nieznane):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
||||||
CAPABILITIES:no:100 Mb/s:no:no
|
CAPABILITIES:no:100 Mb/s:no:no
|
||||||
WIRED-PROPERTIES:off:
|
WIRED-PROPERTIES:off:
|
||||||
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
||||||
|
|
@ -11414,12 +11414,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2274
|
size: 2272
|
||||||
location: clients/tests/test-client.py:971:test_003()/229
|
location: clients/tests/test-client.py:971:test_003()/229
|
||||||
cmd: $NMCLI --mode multiline --terse -f all dev show eth0
|
cmd: $NMCLI --mode multiline --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -11433,8 +11433,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -12182,12 +12182,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:UUID-ethernet-REPLACED-REPLACED-REPL | ethernet
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2286
|
size: 2284
|
||||||
location: clients/tests/test-client.py:971:test_003()/239
|
location: clients/tests/test-client.py:971:test_003()/239
|
||||||
cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2098 bytes
|
stdout: 2096 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -12201,8 +12201,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -13532,12 +13532,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2277
|
size: 2275
|
||||||
location: clients/tests/test-client.py:971:test_003()/289
|
location: clients/tests/test-client.py:971:test_003()/289
|
||||||
cmd: $NMCLI --terse -f all dev show eth0
|
cmd: $NMCLI --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2118 bytes
|
stdout: 2116 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -13551,8 +13551,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -13778,12 +13778,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2289
|
size: 2287
|
||||||
location: clients/tests/test-client.py:971:test_003()/299
|
location: clients/tests/test-client.py:971:test_003()/299
|
||||||
cmd: $NMCLI --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2118 bytes
|
stdout: 2116 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -13797,8 +13797,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -14713,14 +14713,14 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-
|
||||||
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 1407
|
size: 1405
|
||||||
location: clients/tests/test-client.py:971:test_003()/349
|
location: clients/tests/test-client.py:971:test_003()/349
|
||||||
cmd: $NMCLI --mode tabular --terse -f all dev show eth0
|
cmd: $NMCLI --mode tabular --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 1233 bytes
|
stdout: 1231 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (nieznane):0 (nieznane):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
||||||
CAPABILITIES:no:100 Mb/s:no:no
|
CAPABILITIES:no:100 Mb/s:no:no
|
||||||
WIRED-PROPERTIES:off:
|
WIRED-PROPERTIES:off:
|
||||||
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
||||||
|
|
@ -14839,14 +14839,14 @@ DHCP6:dhcp-6-opt-1 = val-1 | dhcp-6-opt-5 = val-5 | dhcp-6-opt-6 = val-6 | dhcp-
|
||||||
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS:/org/freedesktop/NetworkManager/Settings/Connection/{1,2,4}:5fcfd6d7-1e63-3332-8826-a7eda103792d | con-1 | UUID-con-xx1-REPLACED-REPLACED-REPLA | con-xx1 | <invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 1419
|
size: 1417
|
||||||
location: clients/tests/test-client.py:971:test_003()/359
|
location: clients/tests/test-client.py:971:test_003()/359
|
||||||
cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --mode tabular --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 1233 bytes
|
stdout: 1231 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (nieznane):0 (nieznane):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
GENERAL:eth0:ethernet:NMDeviceEthernet:::virtual:::C0\:61\:AE\:26\:4D\:D7:0:20 (unavailable):0 (No reason given):0 (unknown):0 (unknown):/sys/devices/virtual/eth0::no:yes:yes:no:no::ethernet:UUID-ethernet-REPLACED-REPLACED-REPL:/org/freedesktop/NetworkManager/ActiveConnection/1:unknown
|
||||||
CAPABILITIES:no:100 Mb/s:no:no
|
CAPABILITIES:no:100 Mb/s:no:no
|
||||||
WIRED-PROPERTIES:off:
|
WIRED-PROPERTIES:off:
|
||||||
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
IP4:192.168.6.238/29::dst = 192.168.58.133/31, nh = 192.168.50.116, mt = 3130348792 | dst = 192.168.155.50/19, nh = 192.168.127.64:192.168.213.113:sear4.foo4.bar:192.168.156.115 | 192.168.8.33
|
||||||
|
|
@ -16878,12 +16878,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2294
|
size: 2292
|
||||||
location: clients/tests/test-client.py:971:test_003()/409
|
location: clients/tests/test-client.py:971:test_003()/409
|
||||||
cmd: $NMCLI --mode multiline --terse -f all dev show eth0
|
cmd: $NMCLI --mode multiline --terse -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2118 bytes
|
stdout: 2116 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -16897,8 +16897,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
@ -17270,12 +17270,12 @@ CONNECTIONS.AVAILABLE-CONNECTIONS[2]:UUID-con-xx1-REPLACED-REPLACED-REPLA | con-
|
||||||
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
CONNECTIONS.AVAILABLE-CONNECTIONS[3]:<invisible> | /org/freedesktop/NetworkManager/Settings/Connection/4
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
size: 2306
|
size: 2304
|
||||||
location: clients/tests/test-client.py:971:test_003()/419
|
location: clients/tests/test-client.py:971:test_003()/419
|
||||||
cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0
|
cmd: $NMCLI --mode multiline --terse --color yes -f all dev show eth0
|
||||||
lang: pl_PL.UTF-8
|
lang: pl_PL.UTF-8
|
||||||
returncode: 0
|
returncode: 0
|
||||||
stdout: 2118 bytes
|
stdout: 2116 bytes
|
||||||
>>>
|
>>>
|
||||||
GENERAL.DEVICE:eth0
|
GENERAL.DEVICE:eth0
|
||||||
GENERAL.TYPE:ethernet
|
GENERAL.TYPE:ethernet
|
||||||
|
|
@ -17289,8 +17289,8 @@ GENERAL.HWADDR:C0:61:AE:26:4D:D7
|
||||||
GENERAL.MTU:0
|
GENERAL.MTU:0
|
||||||
GENERAL.STATE:20 (unavailable)
|
GENERAL.STATE:20 (unavailable)
|
||||||
GENERAL.REASON:0 (No reason given)
|
GENERAL.REASON:0 (No reason given)
|
||||||
GENERAL.IP4-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP4-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.IP6-CONNECTIVITY:0 (nieznane)
|
GENERAL.IP6-CONNECTIVITY:0 (unknown)
|
||||||
GENERAL.UDI:/sys/devices/virtual/eth0
|
GENERAL.UDI:/sys/devices/virtual/eth0
|
||||||
GENERAL.IP-IFACE:
|
GENERAL.IP-IFACE:
|
||||||
GENERAL.IS-SOFTWARE:no
|
GENERAL.IS-SOFTWARE:no
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -402,11 +402,13 @@ no-auto-default=*
|
||||||
<literal>systemd-resolved</literal>. Defaults to "<literal>true</literal>".
|
<literal>systemd-resolved</literal>. Defaults to "<literal>true</literal>".
|
||||||
</para>
|
</para>
|
||||||
<para>Note that this setting is complementary to the
|
<para>Note that this setting is complementary to the
|
||||||
<varname>dns</varname> setting. You can keep this enable while using
|
<varname>dns</varname> setting. You can keep this enabled while using
|
||||||
<varname>dns</varname> set to another DNS plugin alongside
|
<varname>dns</varname> set to another DNS plugin alongside
|
||||||
<literal>systemd-resolved</literal>, or <varname>dns</varname> set to
|
<literal>systemd-resolved</literal>, or <varname>dns</varname> set to
|
||||||
<literal>systemd-resolved</literal> to configure the system resolver to use
|
<literal>systemd-resolved</literal> to configure the system resolver to use
|
||||||
<literal>systemd-resolved</literal>.</para>
|
<literal>systemd-resolved</literal>.</para>
|
||||||
|
<para>If systemd-resolved is enabled, the connectivity check resolves the
|
||||||
|
hostname per-device.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1329,6 +1329,16 @@ nm_strcmp_p (gconstpointer a, gconstpointer b)
|
||||||
: NM_UNIQ_T(X,xq)); \
|
: NM_UNIQ_T(X,xq)); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define NM_MAX_WITH_CMP(cmp, a, b) \
|
||||||
|
({ \
|
||||||
|
typeof (a) _a = (a); \
|
||||||
|
typeof (b) _b = (b); \
|
||||||
|
\
|
||||||
|
( ((cmp (_a, _b)) >= 0) \
|
||||||
|
? _a \
|
||||||
|
: _b); \
|
||||||
|
})
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static inline guint
|
static inline guint
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,9 @@ static inline char
|
||||||
nm_utils_addr_family_to_char (int addr_family)
|
nm_utils_addr_family_to_char (int addr_family)
|
||||||
{
|
{
|
||||||
switch (addr_family) {
|
switch (addr_family) {
|
||||||
case AF_INET: return '4';
|
case AF_UNSPEC: return 'X';
|
||||||
case AF_INET6: return '6';
|
case AF_INET: return '4';
|
||||||
|
case AF_INET6: return '6';
|
||||||
}
|
}
|
||||||
g_return_val_if_reached ('?');
|
g_return_val_if_reached ('?');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2496,7 +2496,8 @@ static void concheck_periodic_schedule_set (NMDevice *self,
|
||||||
static gboolean
|
static gboolean
|
||||||
_concheck_periodic_timeout_cb (NMDevice *self, int addr_family)
|
_concheck_periodic_timeout_cb (NMDevice *self, int addr_family)
|
||||||
{
|
{
|
||||||
_LOGt (LOGD_CONCHECK, "connectivity: periodic timeout");
|
_LOGt (LOGD_CONCHECK, "connectivity: [IPv%c] periodic timeout",
|
||||||
|
nm_utils_addr_family_to_char (addr_family));
|
||||||
concheck_periodic_schedule_set (self, addr_family, CONCHECK_SCHEDULE_CHECK_PERIODIC);
|
concheck_periodic_schedule_set (self, addr_family, CONCHECK_SCHEDULE_CHECK_PERIODIC);
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
@ -2560,7 +2561,8 @@ concheck_periodic_schedule_do (NMDevice *self, int addr_family, gint64 now_ns)
|
||||||
expiry = priv->concheck_x[IS_IPv4].p_cur_basetime_ns + (priv->concheck_x[IS_IPv4].p_cur_interval * NM_UTILS_NS_PER_SECOND);
|
expiry = priv->concheck_x[IS_IPv4].p_cur_basetime_ns + (priv->concheck_x[IS_IPv4].p_cur_interval * NM_UTILS_NS_PER_SECOND);
|
||||||
tdiff = expiry - now_ns;
|
tdiff = expiry - now_ns;
|
||||||
|
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: periodic-check: %sscheduled in %lld milliseconds (%u seconds interval)",
|
_LOGT (LOGD_CONCHECK, "connectivity: [IPv%c] periodic-check: %sscheduled in %lld milliseconds (%u seconds interval)",
|
||||||
|
nm_utils_addr_family_to_char (addr_family),
|
||||||
periodic_check_disabled ? "re-" : "",
|
periodic_check_disabled ? "re-" : "",
|
||||||
(long long) (tdiff / NM_UTILS_NS_PER_MSEC),
|
(long long) (tdiff / NM_UTILS_NS_PER_MSEC),
|
||||||
priv->concheck_x[IS_IPv4].p_cur_interval);
|
priv->concheck_x[IS_IPv4].p_cur_interval);
|
||||||
|
|
@ -2571,8 +2573,10 @@ concheck_periodic_schedule_do (NMDevice *self, int addr_family, gint64 now_ns)
|
||||||
self);
|
self);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
out:
|
out:
|
||||||
if (periodic_check_disabled)
|
if (periodic_check_disabled) {
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: periodic-check: unscheduled");
|
_LOGT (LOGD_CONCHECK, "connectivity: [IPv%c] periodic-check: unscheduled",
|
||||||
|
nm_utils_addr_family_to_char (addr_family));
|
||||||
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2737,7 +2741,8 @@ concheck_update_interval (NMDevice *self, int addr_family, gboolean check_now)
|
||||||
new_interval = NM_MIN (new_interval, 7 *24 * 3600);
|
new_interval = NM_MIN (new_interval, 7 *24 * 3600);
|
||||||
|
|
||||||
if (new_interval != priv->concheck_x[IS_IPv4].p_max_interval) {
|
if (new_interval != priv->concheck_x[IS_IPv4].p_max_interval) {
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: periodic-check: set interval to %u seconds", new_interval);
|
_LOGT (LOGD_CONCHECK, "connectivity: [IPv%c] periodic-check: set interval to %u seconds",
|
||||||
|
nm_utils_addr_family_to_char (addr_family), new_interval);
|
||||||
priv->concheck_x[IS_IPv4].p_max_interval = new_interval;
|
priv->concheck_x[IS_IPv4].p_max_interval = new_interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2761,8 +2766,8 @@ concheck_update_interval (NMDevice *self, int addr_family, gboolean check_now)
|
||||||
void
|
void
|
||||||
nm_device_check_connectivity_update_interval (NMDevice *self)
|
nm_device_check_connectivity_update_interval (NMDevice *self)
|
||||||
{
|
{
|
||||||
concheck_update_interval (self, AF_INET, FALSE);
|
concheck_update_interval (self, AF_INET, TRUE);
|
||||||
concheck_update_interval (self, AF_INET6, FALSE);
|
concheck_update_interval (self, AF_INET6, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -2895,7 +2900,8 @@ concheck_cb (NMConnectivity *connectivity,
|
||||||
/* the only place where we nm_connectivity_check_cancel(@c_handle), is
|
/* the only place where we nm_connectivity_check_cancel(@c_handle), is
|
||||||
* from inside concheck_handle_complete(). This is a recursive call,
|
* from inside concheck_handle_complete(). This is a recursive call,
|
||||||
* nothing to do. */
|
* nothing to do. */
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: complete check (seq:%llu, cancelled)",
|
_LOGT (LOGD_CONCHECK, "connectivity: [IPv%c] complete check (seq:%llu, cancelled)",
|
||||||
|
nm_utils_addr_family_to_char (handle->addr_family),
|
||||||
(long long unsigned) handle->seq);
|
(long long unsigned) handle->seq);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2905,7 +2911,8 @@ concheck_cb (NMConnectivity *connectivity,
|
||||||
|
|
||||||
self_keep_alive = g_object_ref (self);
|
self_keep_alive = g_object_ref (self);
|
||||||
|
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: complete check (seq:%llu, state:%s)",
|
_LOGT (LOGD_CONCHECK, "connectivity: [Ipv%c] complete check (seq:%llu, state:%s)",
|
||||||
|
nm_utils_addr_family_to_char (handle->addr_family),
|
||||||
(long long unsigned) handle->seq,
|
(long long unsigned) handle->seq,
|
||||||
nm_connectivity_state_to_string (state));
|
nm_connectivity_state_to_string (state));
|
||||||
|
|
||||||
|
|
@ -3025,7 +3032,8 @@ concheck_start (NMDevice *self,
|
||||||
|
|
||||||
c_list_link_tail (&priv->concheck_lst_head, &handle->concheck_lst);
|
c_list_link_tail (&priv->concheck_lst_head, &handle->concheck_lst);
|
||||||
|
|
||||||
_LOGT (LOGD_CONCHECK, "connectivity: start check (seq:%llu%s)",
|
_LOGT (LOGD_CONCHECK, "connectivity: [IPv%c] start check (seq:%llu%s)",
|
||||||
|
nm_utils_addr_family_to_char (addr_family),
|
||||||
(long long unsigned) handle->seq,
|
(long long unsigned) handle->seq,
|
||||||
is_periodic ? ", periodic-check" : "");
|
is_periodic ? ", periodic-check" : "");
|
||||||
|
|
||||||
|
|
@ -3072,15 +3080,26 @@ nm_device_check_connectivity_cancel (NMDeviceConnectivityHandle *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
NMConnectivityState
|
NMConnectivityState
|
||||||
nm_device_get_connectivity_state (NMDevice *self)
|
nm_device_get_connectivity_state (NMDevice *self, int addr_family)
|
||||||
{
|
{
|
||||||
NMDevicePrivate *priv;
|
NMDevicePrivate *priv;
|
||||||
|
const gboolean IS_IPv4 = (addr_family == AF_INET);
|
||||||
|
|
||||||
g_return_val_if_fail (NM_IS_DEVICE (self), NM_CONNECTIVITY_UNKNOWN);
|
g_return_val_if_fail (NM_IS_DEVICE (self), NM_CONNECTIVITY_UNKNOWN);
|
||||||
|
nm_assert_addr_family (addr_family);
|
||||||
|
|
||||||
priv = NM_DEVICE_GET_PRIVATE (self);
|
priv = NM_DEVICE_GET_PRIVATE (self);
|
||||||
|
|
||||||
return NM_MAX (priv->concheck_x[0].state, priv->concheck_x[1].state);
|
switch (addr_family) {
|
||||||
|
case AF_INET:
|
||||||
|
case AF_INET6:
|
||||||
|
return priv->concheck_x[IS_IPv4].state;
|
||||||
|
default:
|
||||||
|
nm_assert (addr_family == AF_UNSPEC);
|
||||||
|
return NM_MAX_WITH_CMP (nm_connectivity_state_cmp,
|
||||||
|
priv->concheck_x[0].state,
|
||||||
|
priv->concheck_x[1].state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
||||||
|
|
@ -855,7 +855,7 @@ NMDeviceConnectivityHandle *nm_device_check_connectivity (NMDevice *self,
|
||||||
|
|
||||||
void nm_device_check_connectivity_cancel (NMDeviceConnectivityHandle *handle);
|
void nm_device_check_connectivity_cancel (NMDeviceConnectivityHandle *handle);
|
||||||
|
|
||||||
NMConnectivityState nm_device_get_connectivity_state (NMDevice *self);
|
NMConnectivityState nm_device_get_connectivity_state (NMDevice *self, int addr_family);
|
||||||
|
|
||||||
typedef struct _NMBtVTableNetworkServer NMBtVTableNetworkServer;
|
typedef struct _NMBtVTableNetworkServer NMBtVTableNetworkServer;
|
||||||
struct _NMBtVTableNetworkServer {
|
struct _NMBtVTableNetworkServer {
|
||||||
|
|
|
||||||
|
|
@ -344,6 +344,21 @@ _ip_config_lst_head (NMDnsManager *self)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
nm_dns_manager_has_systemd_resolved (NMDnsManager *self)
|
||||||
|
{
|
||||||
|
NMDnsManagerPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
|
||||||
|
|
||||||
|
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||||
|
|
||||||
|
return priv->sd_resolve_plugin
|
||||||
|
|| NM_IS_DNS_SYSTEMD_RESOLVED (priv->plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_string_item (GPtrArray *array, const char *str, gboolean dup)
|
add_string_item (GPtrArray *array, const char *str, gboolean dup)
|
||||||
{
|
{
|
||||||
|
|
@ -1975,8 +1990,10 @@ init_resolv_conf_mode (NMDnsManager *self, gboolean force_reload_plugin)
|
||||||
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||||
NMDnsManagerResolvConfManager rc_manager;
|
NMDnsManagerResolvConfManager rc_manager;
|
||||||
const char *mode;
|
const char *mode;
|
||||||
gboolean systemd_resolved = FALSE;
|
gboolean systemd_resolved;
|
||||||
gboolean param_changed = FALSE, plugin_changed = FALSE;
|
gboolean param_changed = FALSE;
|
||||||
|
gboolean plugin_changed = FALSE;
|
||||||
|
gboolean systemd_resolved_changed = FALSE;
|
||||||
|
|
||||||
mode = nm_config_data_get_dns_mode (nm_config_get_data (priv->config));
|
mode = nm_config_data_get_dns_mode (nm_config_get_data (priv->config));
|
||||||
systemd_resolved = nm_config_data_get_systemd_resolved (nm_config_get_data (priv->config));
|
systemd_resolved = nm_config_data_get_systemd_resolved (nm_config_get_data (priv->config));
|
||||||
|
|
@ -2053,16 +2070,13 @@ again:
|
||||||
if (systemd_resolved) {
|
if (systemd_resolved) {
|
||||||
if (!priv->sd_resolve_plugin) {
|
if (!priv->sd_resolve_plugin) {
|
||||||
priv->sd_resolve_plugin = nm_dns_systemd_resolved_new ();
|
priv->sd_resolve_plugin = nm_dns_systemd_resolved_new ();
|
||||||
plugin_changed = TRUE;
|
systemd_resolved_changed = TRUE;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (nm_clear_g_object (&priv->sd_resolve_plugin))
|
||||||
if (priv->sd_resolve_plugin) {
|
systemd_resolved_changed = TRUE;
|
||||||
g_clear_object (&priv->sd_resolve_plugin);
|
|
||||||
plugin_changed = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin_changed && priv->plugin) {
|
if ( plugin_changed
|
||||||
|
&& priv->plugin) {
|
||||||
g_signal_connect (priv->plugin, NM_DNS_PLUGIN_FAILED, G_CALLBACK (plugin_failed), self);
|
g_signal_connect (priv->plugin, NM_DNS_PLUGIN_FAILED, G_CALLBACK (plugin_failed), self);
|
||||||
g_signal_connect (priv->plugin, NM_DNS_PLUGIN_CHILD_QUIT, G_CALLBACK (plugin_child_quit), self);
|
g_signal_connect (priv->plugin, NM_DNS_PLUGIN_CHILD_QUIT, G_CALLBACK (plugin_child_quit), self);
|
||||||
}
|
}
|
||||||
|
|
@ -2082,9 +2096,10 @@ again:
|
||||||
_notify (self, PROP_RC_MANAGER);
|
_notify (self, PROP_RC_MANAGER);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param_changed || plugin_changed) {
|
if (param_changed || plugin_changed || systemd_resolved_changed) {
|
||||||
_LOGI ("init: dns=%s%s rc-manager=%s%s%s%s",
|
_LOGI ("init: dns=%s%s rc-manager=%s%s%s%s",
|
||||||
mode, (systemd_resolved ? ",systemd-resolved" : ""),
|
mode,
|
||||||
|
(systemd_resolved ? ",systemd-resolved" : ""),
|
||||||
_rc_manager_to_string (rc_manager),
|
_rc_manager_to_string (rc_manager),
|
||||||
NM_PRINT_FMT_QUOTED (priv->plugin, ", plugin=",
|
NM_PRINT_FMT_QUOTED (priv->plugin, ", plugin=",
|
||||||
nm_dns_plugin_get_name (priv->plugin), "", ""));
|
nm_dns_plugin_get_name (priv->plugin), "", ""));
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,8 @@ typedef enum {
|
||||||
|
|
||||||
void nm_dns_manager_stop (NMDnsManager *self);
|
void nm_dns_manager_stop (NMDnsManager *self);
|
||||||
|
|
||||||
|
gboolean nm_dns_manager_has_systemd_resolved (NMDnsManager *self);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
char *nmtst_dns_create_resolv_conf (const char *const*searches,
|
char *nmtst_dns_create_resolv_conf (const char *const*searches,
|
||||||
|
|
|
||||||
|
|
@ -108,9 +108,10 @@ typedef struct {
|
||||||
|
|
||||||
char *dns_mode;
|
char *dns_mode;
|
||||||
char *rc_manager;
|
char *rc_manager;
|
||||||
gboolean systemd_resolved;
|
|
||||||
|
|
||||||
NMGlobalDnsConfig *global_dns;
|
NMGlobalDnsConfig *global_dns;
|
||||||
|
|
||||||
|
bool systemd_resolved:1;
|
||||||
} NMConfigDataPrivate;
|
} NMConfigDataPrivate;
|
||||||
|
|
||||||
struct _NMConfigData {
|
struct _NMConfigData {
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@
|
||||||
#include "nm-default.h"
|
#include "nm-default.h"
|
||||||
|
|
||||||
#include "nm-connectivity.h"
|
#include "nm-connectivity.h"
|
||||||
#include "nm-dbus-manager.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
@ -32,8 +31,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "c-list/src/c-list.h"
|
#include "c-list/src/c-list.h"
|
||||||
|
#include "nm-core-internal.h"
|
||||||
#include "nm-config.h"
|
#include "nm-config.h"
|
||||||
#include "NetworkManagerUtils.h"
|
#include "NetworkManagerUtils.h"
|
||||||
|
#include "nm-dbus-manager.h"
|
||||||
|
#include "dns/nm-dns-manager.h"
|
||||||
|
|
||||||
#define HEADER_STATUS_ONLINE "X-NetworkManager-Status: online\r\n"
|
#define HEADER_STATUS_ONLINE "X-NetworkManager-Status: online\r\n"
|
||||||
|
|
||||||
|
|
@ -61,6 +63,14 @@ nm_connectivity_state_to_string (NMConnectivityState state)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
guint ref_count;
|
||||||
|
char *uri;
|
||||||
|
char *host;
|
||||||
|
char *port;
|
||||||
|
char *response;
|
||||||
|
} ConConfig;
|
||||||
|
|
||||||
struct _NMConnectivityCheckHandle {
|
struct _NMConnectivityCheckHandle {
|
||||||
CList handles_lst;
|
CList handles_lst;
|
||||||
NMConnectivity *self;
|
NMConnectivity *self;
|
||||||
|
|
@ -68,29 +78,36 @@ struct _NMConnectivityCheckHandle {
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
|
|
||||||
char *ifspec;
|
char *ifspec;
|
||||||
int addr_family;
|
|
||||||
|
const char *completed_log_message;
|
||||||
|
char *completed_log_message_free;
|
||||||
|
|
||||||
#if WITH_CONCHECK
|
#if WITH_CONCHECK
|
||||||
struct {
|
struct {
|
||||||
char *response;
|
ConConfig *con_config;
|
||||||
|
|
||||||
int ifindex;
|
|
||||||
GCancellable *resolve_cancellable;
|
GCancellable *resolve_cancellable;
|
||||||
CURLM *curl_mhandle;
|
CURLM *curl_mhandle;
|
||||||
guint curl_timer;
|
|
||||||
CURL *curl_ehandle;
|
CURL *curl_ehandle;
|
||||||
struct curl_slist *request_headers;
|
struct curl_slist *request_headers;
|
||||||
struct curl_slist *hosts;
|
struct curl_slist *hosts;
|
||||||
|
|
||||||
GString *recv_msg;
|
GString *recv_msg;
|
||||||
|
|
||||||
|
guint curl_timer;
|
||||||
|
int ch_ifindex;
|
||||||
} concheck;
|
} concheck;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *completed_log_message;
|
guint64 request_counter;
|
||||||
char *completed_log_message_free;
|
|
||||||
NMConnectivityState completed_state;
|
int addr_family;
|
||||||
|
|
||||||
guint timeout_id;
|
guint timeout_id;
|
||||||
|
|
||||||
|
NMConnectivityState completed_state;
|
||||||
|
|
||||||
|
bool fail_reason_no_dbus_connection:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
@ -104,13 +121,12 @@ static guint signals[LAST_SIGNAL] = { 0 };
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CList handles_lst_head;
|
CList handles_lst_head;
|
||||||
CList completed_handles_lst_head;
|
CList completed_handles_lst_head;
|
||||||
char *uri;
|
|
||||||
char *host;
|
|
||||||
char *port;
|
|
||||||
char *response;
|
|
||||||
gboolean enabled;
|
|
||||||
guint interval;
|
|
||||||
NMConfig *config;
|
NMConfig *config;
|
||||||
|
ConConfig *con_config;
|
||||||
|
guint interval;
|
||||||
|
|
||||||
|
bool enabled:1;
|
||||||
|
bool uri_valid:1;
|
||||||
} NMConnectivityPrivate;
|
} NMConnectivityPrivate;
|
||||||
|
|
||||||
struct _NMConnectivity {
|
struct _NMConnectivity {
|
||||||
|
|
@ -142,16 +158,53 @@ NM_DEFINE_SINGLETON_GETTER (NMConnectivity, nm_connectivity_get, NM_TYPE_CONNECT
|
||||||
_nm_log (__level, _NMLOG2_DOMAIN, 0, \
|
_nm_log (__level, _NMLOG2_DOMAIN, 0, \
|
||||||
(cb_data->ifspec ? &cb_data->ifspec[3] : NULL), \
|
(cb_data->ifspec ? &cb_data->ifspec[3] : NULL), \
|
||||||
NULL, \
|
NULL, \
|
||||||
"connectivity: (%s,AF_INET%s) " \
|
"connectivity: (%s,IPv%c,%"G_GUINT64_FORMAT") " \
|
||||||
_NM_UTILS_MACRO_FIRST (__VA_ARGS__), \
|
_NM_UTILS_MACRO_FIRST (__VA_ARGS__), \
|
||||||
(cb_data->ifspec ? &cb_data->ifspec[3] : ""), \
|
(cb_data->ifspec ? &cb_data->ifspec[3] : ""), \
|
||||||
(cb_data->addr_family == AF_INET6 ? "6" : "") \
|
nm_utils_addr_family_to_char (cb_data->addr_family), \
|
||||||
|
cb_data->request_counter \
|
||||||
_NM_UTILS_MACRO_REST (__VA_ARGS__)); \
|
_NM_UTILS_MACRO_REST (__VA_ARGS__)); \
|
||||||
} \
|
} \
|
||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static ConConfig *
|
||||||
|
_con_config_ref (ConConfig *con_config)
|
||||||
|
{
|
||||||
|
if (con_config) {
|
||||||
|
nm_assert (con_config->ref_count > 0);
|
||||||
|
++con_config->ref_count;
|
||||||
|
}
|
||||||
|
return con_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_con_config_unref (ConConfig *con_config)
|
||||||
|
{
|
||||||
|
if (!con_config)
|
||||||
|
return;
|
||||||
|
|
||||||
|
nm_assert (con_config->ref_count > 0);
|
||||||
|
|
||||||
|
if (--con_config->ref_count != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_free (con_config->uri);
|
||||||
|
g_free (con_config->host);
|
||||||
|
g_free (con_config->port);
|
||||||
|
g_free (con_config->response);
|
||||||
|
g_slice_free (ConConfig, con_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
_con_config_get_response (const ConConfig *con_config)
|
||||||
|
{
|
||||||
|
return con_config->response ?: NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cb_data_complete (NMConnectivityCheckHandle *cb_data,
|
cb_data_complete (NMConnectivityCheckHandle *cb_data,
|
||||||
NMConnectivityState state,
|
NMConnectivityState state,
|
||||||
|
|
@ -217,7 +270,7 @@ cb_data_complete (NMConnectivityCheckHandle *cb_data,
|
||||||
* not use the self pointer too. */
|
* not use the self pointer too. */
|
||||||
|
|
||||||
#if WITH_CONCHECK
|
#if WITH_CONCHECK
|
||||||
g_free (cb_data->concheck.response);
|
_con_config_unref (cb_data->concheck.con_config);
|
||||||
if (cb_data->concheck.recv_msg)
|
if (cb_data->concheck.recv_msg)
|
||||||
g_string_free (cb_data->concheck.recv_msg, TRUE);
|
g_string_free (cb_data->concheck.recv_msg, TRUE);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -270,12 +323,6 @@ _complete_queued (NMConnectivity *self)
|
||||||
nm_g_object_unref (self_keep_alive);
|
nm_g_object_unref (self_keep_alive);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
_check_handle_get_response (NMConnectivityCheckHandle *cb_data)
|
|
||||||
{
|
|
||||||
return cb_data->concheck.response ?: NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_con_curl_check_connectivity (CURLM *mhandle, int sockfd, int ev_bitmask)
|
_con_curl_check_connectivity (CURLM *mhandle, int sockfd, int ev_bitmask)
|
||||||
{
|
{
|
||||||
|
|
@ -323,7 +370,7 @@ _con_curl_check_connectivity (CURLM *mhandle, int sockfd, int ev_bitmask)
|
||||||
g_strdup_printf ("check failed: (%d) %s",
|
g_strdup_printf ("check failed: (%d) %s",
|
||||||
msg->data.result,
|
msg->data.result,
|
||||||
curl_easy_strerror (msg->data.result)));
|
curl_easy_strerror (msg->data.result)));
|
||||||
} else if ( !((_check_handle_get_response (cb_data))[0])
|
} else if ( !((_con_config_get_response (cb_data->concheck.con_config))[0])
|
||||||
&& (curl_easy_getinfo (msg->easy_handle, CURLINFO_RESPONSE_CODE, &response_code) == CURLE_OK)
|
&& (curl_easy_getinfo (msg->easy_handle, CURLINFO_RESPONSE_CODE, &response_code) == CURLE_OK)
|
||||||
&& response_code == 204) {
|
&& response_code == 204) {
|
||||||
/* If we got a 204 response code (no content) and we actually
|
/* If we got a 204 response code (no content) and we actually
|
||||||
|
|
@ -505,7 +552,7 @@ easy_write_cb (void *buffer, size_t size, size_t nmemb, void *userdata)
|
||||||
|
|
||||||
g_string_append_len (cb_data->concheck.recv_msg, buffer, len);
|
g_string_append_len (cb_data->concheck.recv_msg, buffer, len);
|
||||||
|
|
||||||
response = _check_handle_get_response (cb_data);;
|
response = _con_config_get_response (cb_data->concheck.con_config);;
|
||||||
if ( response
|
if ( response
|
||||||
&& cb_data->concheck.recv_msg->len >= strlen (response)) {
|
&& cb_data->concheck.recv_msg->len >= strlen (response)) {
|
||||||
/* We already have enough data -- check response */
|
/* We already have enough data -- check response */
|
||||||
|
|
@ -555,6 +602,12 @@ _idle_cb (gpointer user_data)
|
||||||
g_set_error (&error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
g_set_error (&error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
||||||
"no interface specified for connectivity check");
|
"no interface specified for connectivity check");
|
||||||
cb_data_complete (cb_data, NM_CONNECTIVITY_ERROR, "missing interface");
|
cb_data_complete (cb_data, NM_CONNECTIVITY_ERROR, "missing interface");
|
||||||
|
} else if (cb_data->fail_reason_no_dbus_connection) {
|
||||||
|
gs_free_error GError *error = NULL;
|
||||||
|
|
||||||
|
g_set_error (&error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
||||||
|
"no D-Bus connection");
|
||||||
|
cb_data_complete (cb_data, NM_CONNECTIVITY_ERROR, "no D-Bus connection");
|
||||||
} else
|
} else
|
||||||
cb_data_complete (cb_data, NM_CONNECTIVITY_FAKE, "fake result");
|
cb_data_complete (cb_data, NM_CONNECTIVITY_FAKE, "fake result");
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
|
|
@ -563,7 +616,6 @@ _idle_cb (gpointer user_data)
|
||||||
static void
|
static void
|
||||||
do_curl_request (NMConnectivityCheckHandle *cb_data)
|
do_curl_request (NMConnectivityCheckHandle *cb_data)
|
||||||
{
|
{
|
||||||
NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (cb_data->self);
|
|
||||||
CURLM *mhandle;
|
CURLM *mhandle;
|
||||||
CURL *ehandle;
|
CURL *ehandle;
|
||||||
long resolve;
|
long resolve;
|
||||||
|
|
@ -581,7 +633,6 @@ do_curl_request (NMConnectivityCheckHandle *cb_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cb_data->concheck.response = g_strdup (priv->response);
|
|
||||||
cb_data->concheck.curl_mhandle = mhandle;
|
cb_data->concheck.curl_mhandle = mhandle;
|
||||||
cb_data->concheck.curl_ehandle = ehandle;
|
cb_data->concheck.curl_ehandle = ehandle;
|
||||||
cb_data->concheck.request_headers = curl_slist_append (NULL, "Connection: close");
|
cb_data->concheck.request_headers = curl_slist_append (NULL, "Connection: close");
|
||||||
|
|
@ -608,7 +659,7 @@ do_curl_request (NMConnectivityCheckHandle *cb_data)
|
||||||
g_warn_if_reached ();
|
g_warn_if_reached ();
|
||||||
}
|
}
|
||||||
|
|
||||||
curl_easy_setopt (ehandle, CURLOPT_URL, priv->uri);
|
curl_easy_setopt (ehandle, CURLOPT_URL, cb_data->concheck.con_config->uri);
|
||||||
curl_easy_setopt (ehandle, CURLOPT_WRITEFUNCTION, easy_write_cb);
|
curl_easy_setopt (ehandle, CURLOPT_WRITEFUNCTION, easy_write_cb);
|
||||||
curl_easy_setopt (ehandle, CURLOPT_WRITEDATA, cb_data);
|
curl_easy_setopt (ehandle, CURLOPT_WRITEDATA, cb_data);
|
||||||
curl_easy_setopt (ehandle, CURLOPT_HEADERFUNCTION, easy_header_cb);
|
curl_easy_setopt (ehandle, CURLOPT_HEADERFUNCTION, easy_header_cb);
|
||||||
|
|
@ -625,28 +676,23 @@ do_curl_request (NMConnectivityCheckHandle *cb_data)
|
||||||
static void
|
static void
|
||||||
resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
|
resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
|
||||||
{
|
{
|
||||||
NMConnectivityCheckHandle *cb_data = user_data;
|
NMConnectivityCheckHandle *cb_data;
|
||||||
NMConnectivity *self;
|
gs_unref_variant GVariant *result = NULL;
|
||||||
NMConnectivityPrivate *priv;
|
gs_unref_variant GVariant *addresses = NULL;
|
||||||
GVariant *result;
|
|
||||||
GVariant *addresses;
|
|
||||||
gsize no_addresses;
|
gsize no_addresses;
|
||||||
int ifindex;
|
int ifindex;
|
||||||
int addr_family;
|
int addr_family;
|
||||||
GVariant *address = NULL;
|
|
||||||
const guchar *address_buf;
|
|
||||||
gsize len = 0;
|
gsize len = 0;
|
||||||
char str[INET6_ADDRSTRLEN + 1] = { 0, };
|
|
||||||
char *host;
|
|
||||||
gsize i;
|
gsize i;
|
||||||
gs_free_error GError *error = NULL;
|
gs_free_error GError *error = NULL;
|
||||||
|
|
||||||
result = g_dbus_proxy_call_finish (G_DBUS_PROXY (object), res, &error);
|
result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (object), res, &error);
|
||||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
self = cb_data->self;
|
cb_data = user_data;
|
||||||
priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
|
||||||
|
g_clear_object (&cb_data->concheck.resolve_cancellable);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
/* Never mind. Just let do curl do its own resolving. */
|
/* Never mind. Just let do curl do its own resolving. */
|
||||||
|
|
@ -657,69 +703,36 @@ resolve_cb (GObject *object, GAsyncResult *res, gpointer user_data)
|
||||||
|
|
||||||
addresses = g_variant_get_child_value (result, 0);
|
addresses = g_variant_get_child_value (result, 0);
|
||||||
no_addresses = g_variant_n_children (addresses);
|
no_addresses = g_variant_n_children (addresses);
|
||||||
g_variant_unref (result);
|
|
||||||
|
|
||||||
for (i = 0; i < no_addresses; i++) {
|
for (i = 0; i < no_addresses; i++) {
|
||||||
|
gs_unref_variant GVariant *address = NULL;
|
||||||
|
char str_addr[NM_UTILS_INET_ADDRSTRLEN];
|
||||||
|
gs_free char *host_entry = NULL;
|
||||||
|
const guchar *address_buf;
|
||||||
|
|
||||||
g_variant_get_child (addresses, i, "(ii@ay)", &ifindex, &addr_family, &address);
|
g_variant_get_child (addresses, i, "(ii@ay)", &ifindex, &addr_family, &address);
|
||||||
|
|
||||||
|
if ( cb_data->addr_family != AF_UNSPEC
|
||||||
|
&& cb_data->addr_family != addr_family)
|
||||||
|
continue;
|
||||||
|
|
||||||
address_buf = g_variant_get_fixed_array (address, &len, 1);
|
address_buf = g_variant_get_fixed_array (address, &len, 1);
|
||||||
|
if ( (addr_family == AF_INET && len != sizeof (struct in_addr))
|
||||||
|
|| (addr_family == AF_INET6 && len != sizeof (struct in6_addr)))
|
||||||
|
continue;
|
||||||
|
|
||||||
if ( (addr_family == AF_INET && len == sizeof (struct in_addr))
|
host_entry = g_strdup_printf ("%s:%s:%s",
|
||||||
|| (addr_family == AF_INET6 && len == sizeof (struct in6_addr))) {
|
cb_data->concheck.con_config->host,
|
||||||
inet_ntop (addr_family, address_buf, str, sizeof (str));
|
cb_data->concheck.con_config->port ?: "80",
|
||||||
host = g_strdup_printf ("%s:%s:%s", priv->host, priv->port ?: "80", str);
|
nm_utils_inet_ntop (addr_family, address_buf, str_addr));
|
||||||
cb_data->concheck.hosts = curl_slist_append (cb_data->concheck.hosts, host);
|
cb_data->concheck.hosts = curl_slist_append (cb_data->concheck.hosts, host_entry);
|
||||||
_LOG2T ("adding '%s' to curl resolve list", host);
|
_LOG2T ("adding '%s' to curl resolve list", host_entry);
|
||||||
g_free (host);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_variant_unref (address);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_variant_unref (addresses);
|
|
||||||
do_curl_request (cb_data);
|
do_curl_request (cb_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SD_RESOLVED_DNS 1
|
#define SD_RESOLVED_DNS ((guint64) (1LL << 0))
|
||||||
|
|
||||||
static void
|
|
||||||
resolved_proxy_created (GObject *object, GAsyncResult *res, gpointer user_data)
|
|
||||||
{
|
|
||||||
NMConnectivityCheckHandle *cb_data = user_data;
|
|
||||||
NMConnectivity *self;
|
|
||||||
NMConnectivityPrivate *priv;
|
|
||||||
gs_free_error GError *error = NULL;
|
|
||||||
GDBusProxy *proxy;
|
|
||||||
|
|
||||||
proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
|
|
||||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
|
||||||
return;
|
|
||||||
|
|
||||||
self = cb_data->self;
|
|
||||||
priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
|
||||||
|
|
||||||
if (!proxy) {
|
|
||||||
/* Log a warning, but still proceed without systemd-resolved */
|
|
||||||
_LOG2D ("failed to connect to resolved via DBus: %s", error->message);
|
|
||||||
do_curl_request (cb_data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_dbus_proxy_call (proxy,
|
|
||||||
"ResolveHostname",
|
|
||||||
g_variant_new ("(isit)",
|
|
||||||
cb_data->concheck.ifindex,
|
|
||||||
priv->host,
|
|
||||||
(gint32) cb_data->addr_family,
|
|
||||||
(guint64) SD_RESOLVED_DNS),
|
|
||||||
G_DBUS_CALL_FLAGS_NONE,
|
|
||||||
-1,
|
|
||||||
cb_data->concheck.resolve_cancellable,
|
|
||||||
resolve_cb,
|
|
||||||
cb_data);
|
|
||||||
g_object_unref (proxy);
|
|
||||||
|
|
||||||
_LOG2D ("resolving '%s' for '%s' using systemd-resolved", priv->host, priv->uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
NMConnectivityCheckHandle *
|
NMConnectivityCheckHandle *
|
||||||
nm_connectivity_check_start (NMConnectivity *self,
|
nm_connectivity_check_start (NMConnectivity *self,
|
||||||
|
|
@ -731,41 +744,86 @@ nm_connectivity_check_start (NMConnectivity *self,
|
||||||
{
|
{
|
||||||
NMConnectivityPrivate *priv;
|
NMConnectivityPrivate *priv;
|
||||||
NMConnectivityCheckHandle *cb_data;
|
NMConnectivityCheckHandle *cb_data;
|
||||||
|
static guint64 request_counter = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (NM_IS_CONNECTIVITY (self), NULL);
|
g_return_val_if_fail (NM_IS_CONNECTIVITY (self), NULL);
|
||||||
g_return_val_if_fail (!iface || iface[0], NULL);
|
|
||||||
g_return_val_if_fail (callback, NULL);
|
g_return_val_if_fail (callback, NULL);
|
||||||
|
|
||||||
priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
||||||
|
|
||||||
cb_data = g_slice_new0 (NMConnectivityCheckHandle);
|
cb_data = g_slice_new0 (NMConnectivityCheckHandle);
|
||||||
cb_data->self = self;
|
cb_data->self = self;
|
||||||
|
cb_data->request_counter = ++request_counter;
|
||||||
c_list_link_tail (&priv->handles_lst_head, &cb_data->handles_lst);
|
c_list_link_tail (&priv->handles_lst_head, &cb_data->handles_lst);
|
||||||
cb_data->callback = callback;
|
cb_data->callback = callback;
|
||||||
cb_data->user_data = user_data;
|
cb_data->user_data = user_data;
|
||||||
cb_data->completed_state = NM_CONNECTIVITY_UNKNOWN;
|
cb_data->completed_state = NM_CONNECTIVITY_UNKNOWN;
|
||||||
cb_data->addr_family = addr_family;
|
cb_data->addr_family = addr_family;
|
||||||
|
cb_data->concheck.con_config = _con_config_ref (priv->con_config);
|
||||||
|
|
||||||
if (iface)
|
if (iface)
|
||||||
cb_data->ifspec = g_strdup_printf ("if!%s", iface);
|
cb_data->ifspec = g_strdup_printf ("if!%s", iface);
|
||||||
|
|
||||||
#if WITH_CONCHECK
|
#if WITH_CONCHECK
|
||||||
if (iface && ifindex > 0 && priv->enabled && priv->host) {
|
|
||||||
cb_data->concheck.ifindex = ifindex;
|
|
||||||
cb_data->concheck.resolve_cancellable = g_cancellable_new ();
|
|
||||||
|
|
||||||
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
|
if ( iface
|
||||||
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
|
&& ifindex > 0
|
||||||
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
|
&& priv->enabled
|
||||||
NULL,
|
&& priv->uri_valid) {
|
||||||
"org.freedesktop.resolve1",
|
gboolean has_systemd_resolved;
|
||||||
"/org/freedesktop/resolve1",
|
|
||||||
"org.freedesktop.resolve1.Manager",
|
cb_data->concheck.ch_ifindex = ifindex;
|
||||||
cb_data->concheck.resolve_cancellable,
|
|
||||||
resolved_proxy_created,
|
/* note that we pick up support for systemd-resolved right away when we need it.
|
||||||
cb_data);
|
* We don't need to remember the setting, because we can (cheaply) check anew
|
||||||
|
* on each request.
|
||||||
|
*
|
||||||
|
* Yes, this makes NMConnectivity singleton dependent on NMDnsManager singleton.
|
||||||
|
* Well, not really: it makes connectivity-check-start dependent on NMDnsManager
|
||||||
|
* which merely means, not to start a connectivity check, late during shutdown. */
|
||||||
|
has_systemd_resolved = nm_dns_manager_has_systemd_resolved (nm_dns_manager_get ());
|
||||||
|
|
||||||
|
if (has_systemd_resolved) {
|
||||||
|
GDBusConnection *dbus_connection;
|
||||||
|
|
||||||
|
dbus_connection = nm_dbus_manager_get_dbus_connection (nm_dbus_manager_get ());
|
||||||
|
if (!dbus_connection) {
|
||||||
|
/* we have no D-Bus connection? That might happen in configure and quit mode.
|
||||||
|
*
|
||||||
|
* Anyway, something is very odd, just fail connectivity check. */
|
||||||
|
_LOG2D ("start fake request (fail due to no D-Bus connection)");
|
||||||
|
cb_data->fail_reason_no_dbus_connection = TRUE;
|
||||||
|
cb_data->timeout_id = g_idle_add (_idle_cb, cb_data);
|
||||||
|
return cb_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
cb_data->concheck.resolve_cancellable = g_cancellable_new ();
|
||||||
|
|
||||||
|
g_dbus_connection_call (nm_dbus_manager_get_dbus_connection (nm_dbus_manager_get ()),
|
||||||
|
"org.freedesktop.resolve1",
|
||||||
|
"/org/freedesktop/resolve1",
|
||||||
|
"org.freedesktop.resolve1.Manager",
|
||||||
|
"ResolveHostname",
|
||||||
|
g_variant_new ("(isit)",
|
||||||
|
(gint32) cb_data->concheck.ch_ifindex,
|
||||||
|
cb_data->concheck.con_config->host,
|
||||||
|
(gint32) cb_data->addr_family,
|
||||||
|
SD_RESOLVED_DNS),
|
||||||
|
G_VARIANT_TYPE ("(a(iiay)st)"),
|
||||||
|
G_DBUS_CALL_FLAGS_NONE,
|
||||||
|
-1,
|
||||||
|
cb_data->concheck.resolve_cancellable,
|
||||||
|
resolve_cb,
|
||||||
|
cb_data);
|
||||||
|
_LOG2D ("start request to '%s' (try resolving '%s' using systemd-resolved)",
|
||||||
|
cb_data->concheck.con_config->uri,
|
||||||
|
cb_data->concheck.con_config->host);
|
||||||
|
} else {
|
||||||
|
_LOG2D ("start request to '%s' (systemd-resolved not available)",
|
||||||
|
cb_data->concheck.con_config->uri);
|
||||||
|
do_curl_request (cb_data);
|
||||||
|
}
|
||||||
|
|
||||||
_LOG2D ("start request to '%s'", priv->uri);
|
|
||||||
return cb_data;
|
return cb_data;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -840,7 +898,7 @@ host_and_port_from_uri (const char *uri, char **host, char **port)
|
||||||
}
|
}
|
||||||
if (host_len == 0)
|
if (host_len == 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
*host = strndup (host_begin, host_len);
|
*host = g_strndup (host_begin, host_len);
|
||||||
|
|
||||||
/* port */
|
/* port */
|
||||||
if (*p++ == ':') {
|
if (*p++ == ':') {
|
||||||
|
|
@ -850,7 +908,7 @@ host_and_port_from_uri (const char *uri, char **host, char **port)
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
if (port_len)
|
if (port_len)
|
||||||
*port = strndup (port_begin, port_len);
|
*port = g_strndup (port_begin, port_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
@ -860,43 +918,74 @@ static void
|
||||||
update_config (NMConnectivity *self, NMConfigData *config_data)
|
update_config (NMConnectivity *self, NMConfigData *config_data)
|
||||||
{
|
{
|
||||||
NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
NMConnectivityPrivate *priv = NM_CONNECTIVITY_GET_PRIVATE (self);
|
||||||
const char *uri, *response;
|
|
||||||
guint interval;
|
guint interval;
|
||||||
gboolean enabled;
|
gboolean enabled;
|
||||||
gboolean changed = FALSE;
|
gboolean changed = FALSE;
|
||||||
|
const char *cur_uri = priv->con_config ? priv->con_config->uri : NULL;
|
||||||
|
const char *cur_response = priv->con_config ? priv->con_config->response : NULL;
|
||||||
|
const char *new_response;
|
||||||
|
const char *new_uri;
|
||||||
|
gboolean new_uri_valid = priv->uri_valid;
|
||||||
|
gboolean new_host_port = FALSE;
|
||||||
|
gs_free char *new_host = NULL;
|
||||||
|
gs_free char *new_port = NULL;
|
||||||
|
|
||||||
/* Set the URI. */
|
new_uri = nm_config_data_get_connectivity_uri (config_data);
|
||||||
uri = nm_config_data_get_connectivity_uri (config_data);
|
if (!nm_streq0 (new_uri, cur_uri)) {
|
||||||
if (uri && !*uri)
|
|
||||||
uri = NULL;
|
|
||||||
changed = g_strcmp0 (uri, priv->uri) != 0;
|
|
||||||
if (uri) {
|
|
||||||
char *scheme = g_uri_parse_scheme (uri);
|
|
||||||
|
|
||||||
if (!scheme) {
|
new_uri_valid = (new_uri && *new_uri);
|
||||||
_LOGE ("invalid URI '%s' for connectivity check.", uri);
|
if (new_uri_valid) {
|
||||||
uri = NULL;
|
gs_free char *scheme = g_uri_parse_scheme (new_uri);
|
||||||
} else if (strcasecmp (scheme, "https") == 0) {
|
gboolean is_https = FALSE;
|
||||||
_LOGW ("use of HTTPS for connectivity checking is not reliable and is discouraged (URI: %s)", uri);
|
|
||||||
} else if (strcasecmp (scheme, "http") != 0) {
|
if (!scheme) {
|
||||||
_LOGE ("scheme of '%s' uri doesn't use a scheme that is allowed for connectivity check.", uri);
|
_LOGE ("invalid URI '%s' for connectivity check.", new_uri);
|
||||||
uri = NULL;
|
new_uri_valid = FALSE;
|
||||||
|
} else if (g_ascii_strcasecmp (scheme, "https") == 0) {
|
||||||
|
_LOGW ("use of HTTPS for connectivity checking is not reliable and is discouraged (URI: %s)", new_uri);
|
||||||
|
is_https = TRUE;
|
||||||
|
} else if (g_ascii_strcasecmp (scheme, "http") != 0) {
|
||||||
|
_LOGE ("scheme of '%s' uri doesn't use a scheme that is allowed for connectivity check.", new_uri);
|
||||||
|
new_uri_valid = FALSE;
|
||||||
|
}
|
||||||
|
if (new_uri_valid) {
|
||||||
|
new_host_port = TRUE;
|
||||||
|
if (!host_and_port_from_uri (new_uri, &new_host, &new_port)) {
|
||||||
|
_LOGE ("cannot parse host and port from '%s'", new_uri);
|
||||||
|
new_uri_valid = FALSE;
|
||||||
|
} else if (!new_port && is_https)
|
||||||
|
new_port = g_strdup ("443");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scheme)
|
if ( new_uri_valid
|
||||||
g_free (scheme);
|
|| priv->uri_valid != new_uri_valid)
|
||||||
}
|
changed = TRUE;
|
||||||
if (changed) {
|
|
||||||
g_free (priv->uri);
|
|
||||||
priv->uri = g_strdup (uri);
|
|
||||||
|
|
||||||
g_clear_pointer (&priv->host, g_free);
|
|
||||||
g_clear_pointer (&priv->port, g_free);
|
|
||||||
if (uri)
|
|
||||||
host_and_port_from_uri (uri, &priv->host, &priv->port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the interval. */
|
new_response = nm_config_data_get_connectivity_response (config_data);
|
||||||
|
if (!nm_streq0 (new_response, cur_response))
|
||||||
|
changed = TRUE;
|
||||||
|
|
||||||
|
if ( !priv->con_config
|
||||||
|
|| !nm_streq0 (new_uri, priv->con_config->uri)
|
||||||
|
|| !nm_streq0 (new_response, priv->con_config->response)) {
|
||||||
|
if (!new_host_port) {
|
||||||
|
new_host = priv->con_config ? g_strdup (priv->con_config->host) : NULL;
|
||||||
|
new_port = priv->con_config ? g_strdup (priv->con_config->port) : NULL;
|
||||||
|
}
|
||||||
|
_con_config_unref (priv->con_config);
|
||||||
|
priv->con_config = g_slice_new (ConConfig);
|
||||||
|
*priv->con_config = (ConConfig) {
|
||||||
|
.ref_count = 1,
|
||||||
|
.uri = g_strdup (new_uri),
|
||||||
|
.response = g_strdup (new_response),
|
||||||
|
.host = g_steal_pointer (&new_host),
|
||||||
|
.port = g_steal_pointer (&new_port),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
priv->uri_valid = new_uri_valid;
|
||||||
|
|
||||||
interval = nm_config_data_get_connectivity_interval (config_data);
|
interval = nm_config_data_get_connectivity_interval (config_data);
|
||||||
interval = MIN (interval, (7 * 24 * 3600));
|
interval = MIN (interval, (7 * 24 * 3600));
|
||||||
if (priv->interval != interval) {
|
if (priv->interval != interval) {
|
||||||
|
|
@ -906,7 +995,7 @@ update_config (NMConnectivity *self, NMConfigData *config_data)
|
||||||
|
|
||||||
enabled = FALSE;
|
enabled = FALSE;
|
||||||
#if WITH_CONCHECK
|
#if WITH_CONCHECK
|
||||||
if ( priv->uri
|
if ( priv->uri_valid
|
||||||
&& priv->interval)
|
&& priv->interval)
|
||||||
enabled = nm_config_data_get_connectivity_enabled (config_data);
|
enabled = nm_config_data_get_connectivity_enabled (config_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -916,16 +1005,6 @@ update_config (NMConnectivity *self, NMConfigData *config_data)
|
||||||
changed = TRUE;
|
changed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the response. */
|
|
||||||
response = nm_config_data_get_connectivity_response (config_data);
|
|
||||||
if (!nm_streq0 (response, priv->response)) {
|
|
||||||
/* a response %NULL means, NM_CONFIG_DEFAULT_CONNECTIVITY_RESPONSE. Any other response
|
|
||||||
* (including "") is accepted. */
|
|
||||||
g_free (priv->response);
|
|
||||||
priv->response = g_strdup (response);
|
|
||||||
changed = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed)
|
if (changed)
|
||||||
g_signal_emit (self, signals[CONFIG_CHANGED], 0);
|
g_signal_emit (self, signals[CONFIG_CHANGED], 0);
|
||||||
}
|
}
|
||||||
|
|
@ -984,10 +1063,7 @@ dispose (GObject *object)
|
||||||
handles_lst)))
|
handles_lst)))
|
||||||
cb_data_complete (cb_data, NM_CONNECTIVITY_DISPOSING, "shutting down");
|
cb_data_complete (cb_data, NM_CONNECTIVITY_DISPOSING, "shutting down");
|
||||||
|
|
||||||
g_clear_pointer (&priv->uri, g_free);
|
nm_clear_pointer (&priv->con_config, _con_config_unref);
|
||||||
g_clear_pointer (&priv->host, g_free);
|
|
||||||
g_clear_pointer (&priv->port, g_free);
|
|
||||||
g_clear_pointer (&priv->response, g_free);
|
|
||||||
|
|
||||||
#if WITH_CONCHECK
|
#if WITH_CONCHECK
|
||||||
curl_global_cleanup ();
|
curl_global_cleanup ();
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,21 @@
|
||||||
|
|
||||||
#include "nm-dbus-interface.h"
|
#include "nm-dbus-interface.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
nm_connectivity_state_cmp (NMConnectivityState a, NMConnectivityState b)
|
||||||
|
{
|
||||||
|
if (a == NM_CONNECTIVITY_PORTAL && b == NM_CONNECTIVITY_LIMITED)
|
||||||
|
return 1;
|
||||||
|
if (b == NM_CONNECTIVITY_PORTAL && a == NM_CONNECTIVITY_LIMITED)
|
||||||
|
return -1;
|
||||||
|
NM_CMP_DIRECT (a, b);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define NM_CONNECTIVITY_ERROR ((NMConnectivityState) -1)
|
#define NM_CONNECTIVITY_ERROR ((NMConnectivityState) -1)
|
||||||
#define NM_CONNECTIVITY_FAKE ((NMConnectivityState) -2)
|
#define NM_CONNECTIVITY_FAKE ((NMConnectivityState) -2)
|
||||||
#define NM_CONNECTIVITY_CANCELLED ((NMConnectivityState) -3)
|
#define NM_CONNECTIVITY_CANCELLED ((NMConnectivityState) -3)
|
||||||
|
|
|
||||||
|
|
@ -1470,6 +1470,14 @@ static const GDBusInterfaceInfo interface_info_objmgr = NM_DEFINE_GDBUS_INTERFAC
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
GDBusConnection *
|
||||||
|
nm_dbus_manager_get_dbus_connection (NMDBusManager *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (NM_IS_DBUS_MANAGER (self), NULL);
|
||||||
|
|
||||||
|
return NM_DBUS_MANAGER_GET_PRIVATE (self)->connection;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nm_dbus_manager_start (NMDBusManager *self,
|
nm_dbus_manager_start (NMDBusManager *self,
|
||||||
NMDBusManagerSetPropertyHandler set_property_handler,
|
NMDBusManagerSetPropertyHandler set_property_handler,
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@ typedef void (*NMDBusManagerSetPropertyHandler) (NMDBusObject *obj,
|
||||||
|
|
||||||
gboolean nm_dbus_manager_acquire_bus (NMDBusManager *self);
|
gboolean nm_dbus_manager_acquire_bus (NMDBusManager *self);
|
||||||
|
|
||||||
|
GDBusConnection *nm_dbus_manager_get_dbus_connection (NMDBusManager *self);
|
||||||
|
|
||||||
void nm_dbus_manager_start (NMDBusManager *self,
|
void nm_dbus_manager_start (NMDBusManager *self,
|
||||||
NMDBusManagerSetPropertyHandler set_property_handler,
|
NMDBusManagerSetPropertyHandler set_property_handler,
|
||||||
gpointer set_property_handler_data);
|
gpointer set_property_handler_data);
|
||||||
|
|
|
||||||
100
src/nm-manager.c
100
src/nm-manager.c
|
|
@ -2843,41 +2843,91 @@ device_realized (NMDevice *device,
|
||||||
_emit_device_added_removed (self, device, nm_device_is_real (device));
|
_emit_device_added_removed (self, device, nm_device_is_real (device));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NMConnectivityState
|
||||||
|
_get_best_connectivity (NMManager *self, int addr_family)
|
||||||
|
{
|
||||||
|
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
||||||
|
NMConnectivityState best_state;
|
||||||
|
NMDevice *dev;
|
||||||
|
gint64 best_metric;
|
||||||
|
|
||||||
|
if (addr_family == AF_UNSPEC) {
|
||||||
|
best_state = _get_best_connectivity (self, AF_INET);
|
||||||
|
if (nm_connectivity_state_cmp (best_state, NM_CONNECTIVITY_FULL) >= 0) {
|
||||||
|
/* already FULL IPv4 connectivity. No need to check IPv6, it doesn't get
|
||||||
|
* better. */
|
||||||
|
return best_state;
|
||||||
|
}
|
||||||
|
return NM_MAX_WITH_CMP (nm_connectivity_state_cmp,
|
||||||
|
best_state,
|
||||||
|
_get_best_connectivity (self, AF_INET6));
|
||||||
|
}
|
||||||
|
|
||||||
|
nm_assert_addr_family (addr_family);
|
||||||
|
|
||||||
|
best_state = NM_CONNECTIVITY_UNKNOWN;
|
||||||
|
best_metric = G_MAXINT64;
|
||||||
|
c_list_for_each_entry (dev, &priv->devices_lst_head, devices_lst) {
|
||||||
|
const NMPObject *r;
|
||||||
|
NMConnectivityState state;
|
||||||
|
gint64 metric;
|
||||||
|
|
||||||
|
r = nm_device_get_best_default_route (dev, addr_family);
|
||||||
|
if (r) {
|
||||||
|
metric = nm_utils_ip_route_metric_normalize (addr_family,
|
||||||
|
NMP_OBJECT_CAST_IP_ROUTE (r)->metric);
|
||||||
|
} else {
|
||||||
|
/* if all devices have no default-route, we still include the best
|
||||||
|
* of all connectivity state of all the devices. */
|
||||||
|
metric = G_MAXINT64;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metric > best_metric) {
|
||||||
|
/* we already have a default route with better metric. The connectivity state
|
||||||
|
* of this device is irreleavnt. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
state = nm_device_get_connectivity_state (dev, addr_family);
|
||||||
|
if (metric < best_metric) {
|
||||||
|
/* this device has a better default route. It wins. */
|
||||||
|
best_metric = metric;
|
||||||
|
best_state = state;
|
||||||
|
} else {
|
||||||
|
best_state = NM_MAX_WITH_CMP (nm_connectivity_state_cmp,
|
||||||
|
best_state,
|
||||||
|
state);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nm_connectivity_state_cmp (best_state, NM_CONNECTIVITY_FULL) >= 0) {
|
||||||
|
/* it doesn't get better than FULL. We are done. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return best_state;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
device_connectivity_changed (NMDevice *device,
|
device_connectivity_changed (NMDevice *device,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
NMManager *self)
|
NMManager *self)
|
||||||
{
|
{
|
||||||
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
||||||
NMConnectivityState best_state = NM_CONNECTIVITY_UNKNOWN;
|
NMConnectivityState best_state;
|
||||||
NMConnectivityState state;
|
|
||||||
NMDevice *dev;
|
|
||||||
|
|
||||||
best_state = nm_device_get_connectivity_state (device);
|
best_state = _get_best_connectivity (self, AF_UNSPEC);
|
||||||
if (best_state < NM_CONNECTIVITY_FULL) {
|
if (best_state == priv->connectivity_state)
|
||||||
c_list_for_each_entry (dev, &priv->devices_lst_head, devices_lst) {
|
return;
|
||||||
state = nm_device_get_connectivity_state (dev);
|
|
||||||
if (state <= best_state)
|
|
||||||
continue;
|
|
||||||
best_state = state;
|
|
||||||
if (best_state >= NM_CONNECTIVITY_FULL) {
|
|
||||||
/* it doesn't get better than this. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nm_assert (best_state <= NM_CONNECTIVITY_FULL);
|
|
||||||
|
|
||||||
if (best_state != priv->connectivity_state) {
|
priv->connectivity_state = best_state;
|
||||||
priv->connectivity_state = best_state;
|
|
||||||
|
|
||||||
_LOGD (LOGD_CORE, "connectivity checking indicates %s",
|
_LOGD (LOGD_CORE, "connectivity checking indicates %s",
|
||||||
nm_connectivity_state_to_string (priv->connectivity_state));
|
nm_connectivity_state_to_string (priv->connectivity_state));
|
||||||
|
|
||||||
nm_manager_update_state (self);
|
nm_manager_update_state (self);
|
||||||
_notify (self, PROP_CONNECTIVITY);
|
_notify (self, PROP_CONNECTIVITY);
|
||||||
nm_dispatcher_call_connectivity (priv->connectivity_state, NULL, NULL, NULL);
|
nm_dispatcher_call_connectivity (priv->connectivity_state, NULL, NULL, NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include "systemd/nm-sd-utils.h"
|
#include "systemd/nm-sd-utils.h"
|
||||||
|
|
||||||
#include "dns/nm-dns-manager.h"
|
#include "dns/nm-dns-manager.h"
|
||||||
|
#include "nm-connectivity.h"
|
||||||
|
|
||||||
#include "nm-test-utils-core.h"
|
#include "nm-test-utils-core.h"
|
||||||
|
|
||||||
|
|
@ -2039,6 +2040,60 @@ test_nm_utils_dhcp_client_id_systemd_node_specific (gconstpointer test_data)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_connectivity_state_cmp (void)
|
||||||
|
{
|
||||||
|
NMConnectivityState a;
|
||||||
|
|
||||||
|
#define _cmp(a, b, cmp) \
|
||||||
|
G_STMT_START { \
|
||||||
|
const NMConnectivityState _a = (a); \
|
||||||
|
const NMConnectivityState _b = (b); \
|
||||||
|
const int _cmp = (cmp); \
|
||||||
|
\
|
||||||
|
g_assert (NM_IN_SET (_cmp, -1, 0, 1)); \
|
||||||
|
g_assert_cmpint (nm_connectivity_state_cmp (_a, _b), ==, _cmp); \
|
||||||
|
g_assert_cmpint (nm_connectivity_state_cmp (_b, _a), ==, -_cmp); \
|
||||||
|
} G_STMT_END
|
||||||
|
|
||||||
|
for (a = NM_CONNECTIVITY_UNKNOWN; a <= NM_CONNECTIVITY_FULL; a++)
|
||||||
|
_cmp (a, a, 0);
|
||||||
|
|
||||||
|
_cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_UNKNOWN, 0);
|
||||||
|
_cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_NONE, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_LIMITED, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_PORTAL, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, -1);
|
||||||
|
|
||||||
|
_cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_UNKNOWN, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_NONE, 0);
|
||||||
|
_cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_LIMITED, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_PORTAL, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_NONE, NM_CONNECTIVITY_FULL, -1);
|
||||||
|
|
||||||
|
_cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_UNKNOWN, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_NONE, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_LIMITED, 0);
|
||||||
|
_cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_PORTAL, -1);
|
||||||
|
_cmp (NM_CONNECTIVITY_LIMITED, NM_CONNECTIVITY_FULL, -1);
|
||||||
|
|
||||||
|
_cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_UNKNOWN, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_NONE, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_LIMITED, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_PORTAL, 0);
|
||||||
|
_cmp (NM_CONNECTIVITY_PORTAL, NM_CONNECTIVITY_FULL, -1);
|
||||||
|
|
||||||
|
_cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_NONE, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_LIMITED, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_PORTAL, 1);
|
||||||
|
_cmp (NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_FULL, 0);
|
||||||
|
|
||||||
|
#undef _cmp
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
NMTST_DEFINE ();
|
NMTST_DEFINE ();
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -2094,6 +2149,8 @@ main (int argc, char **argv)
|
||||||
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/0", GINT_TO_POINTER (0), test_nm_utils_dhcp_client_id_systemd_node_specific);
|
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/0", GINT_TO_POINTER (0), test_nm_utils_dhcp_client_id_systemd_node_specific);
|
||||||
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/1", GINT_TO_POINTER (1), test_nm_utils_dhcp_client_id_systemd_node_specific);
|
g_test_add_data_func ("/general/nm_utils_dhcp_client_id_systemd_node_specific/1", GINT_TO_POINTER (1), test_nm_utils_dhcp_client_id_systemd_node_specific);
|
||||||
|
|
||||||
|
g_test_add_func ("/core/general/test_connectivity_state_cmp", test_connectivity_state_cmp);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue