mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-13 03:50:16 +01:00
platform: change sysctl_get/set error logging
Remove the "silent_on_error" flag from nm_platform_sysctl_get(), and make both get() and set() log at debug level on ENOENT and error level on all other errors, always. Also ensure that we don't sometimes write "failed to set 'x' to 'y': Success" when a partial write occurs.
This commit is contained in:
parent
0332850627
commit
5fe94852ef
5 changed files with 33 additions and 24 deletions
|
|
@ -73,7 +73,7 @@ sysctl_set (NMPlatform *platform, const char *path, const char *value)
|
|||
}
|
||||
|
||||
static char *
|
||||
sysctl_get (NMPlatform *platform, const char *path, gboolean silent_on_error)
|
||||
sysctl_get (NMPlatform *platform, const char *path)
|
||||
{
|
||||
NMFakePlatformPrivate *priv = NM_FAKE_PLATFORM_GET_PRIVATE (platform);
|
||||
|
||||
|
|
@ -567,7 +567,7 @@ master_get_option (NMPlatform *platform, int master, const char *option)
|
|||
{
|
||||
auto_g_free char *path = g_strdup_printf ("master:%d:%s", master, option);
|
||||
|
||||
return sysctl_get (platform, path, FALSE);
|
||||
return sysctl_get (platform, path);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
@ -583,7 +583,7 @@ slave_get_option (NMPlatform *platform, int slave, const char *option)
|
|||
{
|
||||
auto_g_free char *path = g_strdup_printf ("slave:%d:%s", slave, option);
|
||||
|
||||
return sysctl_get (platform, path, FALSE);
|
||||
return sysctl_get (platform, path);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
|||
|
|
@ -1435,8 +1435,13 @@ sysctl_set (NMPlatform *platform, const char *path, const char *value)
|
|||
|
||||
fd = open (path, O_WRONLY | O_TRUNC);
|
||||
if (fd == -1) {
|
||||
error ("sysctl: failed to open '%s': (%d) %s",
|
||||
path, errno, strerror (errno));
|
||||
if (errno == ENOENT) {
|
||||
debug ("sysctl: failed to open '%s': (%d) %s",
|
||||
path, errno, strerror (errno));
|
||||
} else {
|
||||
error ("sysctl: failed to open '%s': (%d) %s",
|
||||
path, errno, strerror (errno));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -1452,19 +1457,21 @@ sysctl_set (NMPlatform *platform, const char *path, const char *value)
|
|||
/* Try to write the entire value three times if a partial write occurs */
|
||||
len = strlen (actual);
|
||||
for (tries = 0, nwrote = 0; tries < 3 && nwrote != len; tries++) {
|
||||
errno = 0;
|
||||
nwrote = write (fd, actual, len);
|
||||
if (nwrote == -1) {
|
||||
if (errno == EINTR) {
|
||||
error ("sysctl: interrupted, will try again");
|
||||
debug ("sysctl: interrupted, will try again");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nwrote != len && errno != EEXIST) {
|
||||
if (nwrote == -1 && errno != EEXIST) {
|
||||
error ("sysctl: failed to set '%s' to '%s': (%d) %s",
|
||||
path, value, errno, strerror (errno));
|
||||
path, value, errno, strerror (errno));
|
||||
} else if (nwrote < len) {
|
||||
error ("sysctl: failed to set '%s' to '%s' after three attempts",
|
||||
path, value);
|
||||
}
|
||||
|
||||
g_free (actual);
|
||||
|
|
@ -1473,13 +1480,17 @@ sysctl_set (NMPlatform *platform, const char *path, const char *value)
|
|||
}
|
||||
|
||||
static char *
|
||||
sysctl_get (NMPlatform *platform, const char *path, gboolean silent_on_error)
|
||||
sysctl_get (NMPlatform *platform, const char *path)
|
||||
{
|
||||
GError *error = NULL;
|
||||
char *contents;
|
||||
|
||||
if (!g_file_get_contents (path, &contents, NULL, &error)) {
|
||||
if (!silent_on_error)
|
||||
/* We assume FAILED means EOPNOTSUP */
|
||||
if ( g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)
|
||||
|| g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_FAILED))
|
||||
debug ("error reading %s: %s", path, error->message);
|
||||
else
|
||||
error ("error reading %s: %s", path, error->message);
|
||||
g_clear_error (&error);
|
||||
return NULL;
|
||||
|
|
@ -1902,7 +1913,7 @@ link_get_physical_port_id (NMPlatform *platform, int ifindex)
|
|||
return NULL;
|
||||
|
||||
path = g_strdup_printf ("/sys/class/net/%s/phys_port_id", ifname);
|
||||
id = sysctl_get (platform, path, TRUE);
|
||||
id = sysctl_get (platform, path);
|
||||
g_free (path);
|
||||
|
||||
return id;
|
||||
|
|
@ -2021,7 +2032,7 @@ link_get_option (int master, const char *category, const char *option)
|
|||
{
|
||||
auto_g_free char *path = link_option_path (master, category, option);
|
||||
|
||||
return path ? nm_platform_sysctl_get (path, FALSE) : NULL;
|
||||
return path ? nm_platform_sysctl_get (path) : NULL;
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
|
@ -2153,7 +2164,7 @@ tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *
|
|||
return FALSE;
|
||||
|
||||
path = g_strdup_printf ("/sys/class/net/%s/owner", ifname);
|
||||
val = nm_platform_sysctl_get (path, TRUE);
|
||||
val = nm_platform_sysctl_get (path);
|
||||
g_free (path);
|
||||
if (val) {
|
||||
props->owner = nm_utils_ascii_str_to_int64 (val, 10, -1, G_MAXINT64, -1);
|
||||
|
|
@ -2164,7 +2175,7 @@ tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *
|
|||
success = FALSE;
|
||||
|
||||
path = g_strdup_printf ("/sys/class/net/%s/group", ifname);
|
||||
val = nm_platform_sysctl_get (path, TRUE);
|
||||
val = nm_platform_sysctl_get (path);
|
||||
g_free (path);
|
||||
if (val) {
|
||||
props->group = nm_utils_ascii_str_to_int64 (val, 10, -1, G_MAXINT64, -1);
|
||||
|
|
@ -2175,7 +2186,7 @@ tun_get_properties (NMPlatform *platform, int ifindex, NMPlatformTunProperties *
|
|||
success = FALSE;
|
||||
|
||||
path = g_strdup_printf ("/sys/class/net/%s/tun_flags", ifname);
|
||||
val = nm_platform_sysctl_get (path, TRUE);
|
||||
val = nm_platform_sysctl_get (path);
|
||||
g_free (path);
|
||||
if (val) {
|
||||
gint64 flags;
|
||||
|
|
|
|||
|
|
@ -267,20 +267,18 @@ nm_platform_sysctl_set (const char *path, const char *value)
|
|||
/**
|
||||
* nm_platform_sysctl_get:
|
||||
* @path: Absolute path to sysctl
|
||||
* @silent_on_error: don't log an error message when the value
|
||||
* could not be read.
|
||||
*
|
||||
* Returns: (transfer full): Contents of the virtual sysctl file.
|
||||
*/
|
||||
char *
|
||||
nm_platform_sysctl_get (const char *path, gboolean silent_on_error)
|
||||
nm_platform_sysctl_get (const char *path)
|
||||
{
|
||||
reset_error ();
|
||||
|
||||
g_return_val_if_fail (path, NULL);
|
||||
g_return_val_if_fail (klass->sysctl_get, NULL);
|
||||
|
||||
return klass->sysctl_get (platform, path, silent_on_error);
|
||||
return klass->sysctl_get (platform, path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -302,7 +300,7 @@ nm_platform_sysctl_get_int32 (const char *path, gint32 fallback)
|
|||
g_return_val_if_fail (path, fallback);
|
||||
|
||||
if (path)
|
||||
value = nm_platform_sysctl_get (path, FALSE);
|
||||
value = nm_platform_sysctl_get (path);
|
||||
|
||||
if (!value) {
|
||||
errno = EINVAL;
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ typedef struct {
|
|||
gboolean (*setup) (NMPlatform *);
|
||||
|
||||
gboolean (*sysctl_set) (NMPlatform *, const char *path, const char *value);
|
||||
char * (*sysctl_get) (NMPlatform *, const char *path, gboolean silent_on_error);
|
||||
char * (*sysctl_get) (NMPlatform *, const char *path);
|
||||
|
||||
GArray *(*link_get_all) (NMPlatform *);
|
||||
gboolean (*link_add) (NMPlatform *, const char *name, NMLinkType type);
|
||||
|
|
@ -382,7 +382,7 @@ const char *nm_platform_get_error_msg (void);
|
|||
void nm_platform_query_devices (void);
|
||||
|
||||
gboolean nm_platform_sysctl_set (const char *path, const char *value);
|
||||
char *nm_platform_sysctl_get (const char *path, gboolean silent_on_error);
|
||||
char *nm_platform_sysctl_get (const char *path);
|
||||
gint32 nm_platform_sysctl_get_int32 (const char *path, gint32 fallback);
|
||||
|
||||
GArray *nm_platform_link_get_all (void);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ do_sysctl_set (char **argv)
|
|||
static gboolean
|
||||
do_sysctl_get (char **argv)
|
||||
{
|
||||
auto_g_free char *value = nm_platform_sysctl_get (argv[0], FALSE);
|
||||
auto_g_free char *value = nm_platform_sysctl_get (argv[0]);
|
||||
|
||||
printf ("%s\n", value);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue