mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-04 22:40:16 +01:00
clients: add support for ethtool coalesce settings
https://bugzilla.redhat.com/show_bug.cgi?id=1614700
This commit is contained in:
parent
4fce8b3efb
commit
56c48b162b
1 changed files with 107 additions and 38 deletions
|
|
@ -4097,61 +4097,104 @@ _gobject_enum_pre_set_notify_fcn_wireless_security_wep_key_type (const NMMetaPro
|
|||
static gconstpointer
|
||||
_get_fcn_ethtool (ARGS_GET_FCN)
|
||||
{
|
||||
const char *s;
|
||||
NMTernary val;
|
||||
char *return_str;
|
||||
guint32 u32;
|
||||
NMEthtoolID ethtool_id = property_info->property_typ_data->subtype.ethtool.ethtool_id;
|
||||
|
||||
RETURN_UNSUPPORTED_GET_TYPE ();
|
||||
|
||||
val = nm_setting_ethtool_get_feature (NM_SETTING_ETHTOOL (setting),
|
||||
nm_ethtool_data[ethtool_id]->optname);
|
||||
if (nm_ethtool_id_is_coalesce (ethtool_id)) {
|
||||
if (!nm_setting_ethtool_get_coalesce (NM_SETTING_ETHTOOL (setting),
|
||||
nm_ethtool_data[ethtool_id]->optname,
|
||||
&u32)) {
|
||||
NM_SET_OUT (out_is_default, TRUE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (val == NM_TERNARY_TRUE)
|
||||
s = N_("on");
|
||||
else if (val == NM_TERNARY_FALSE)
|
||||
s = N_("off");
|
||||
else {
|
||||
s = NULL;
|
||||
NM_SET_OUT (out_is_default, TRUE);
|
||||
return_str = g_strdup_printf ("%"G_GUINT32_FORMAT, u32);
|
||||
RETURN_STR_TO_FREE (return_str);
|
||||
} else if (nm_ethtool_id_is_feature (ethtool_id)) {
|
||||
const char *s;
|
||||
NMTernary val;
|
||||
|
||||
val = nm_setting_ethtool_get_feature (NM_SETTING_ETHTOOL (setting),
|
||||
nm_ethtool_data[ethtool_id]->optname);
|
||||
|
||||
if (val == NM_TERNARY_TRUE)
|
||||
s = N_("on");
|
||||
else if (val == NM_TERNARY_FALSE)
|
||||
s = N_("off");
|
||||
else {
|
||||
s = NULL;
|
||||
NM_SET_OUT (out_is_default, TRUE);
|
||||
}
|
||||
|
||||
if (s && get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY)
|
||||
s = gettext (s);
|
||||
return s;
|
||||
}
|
||||
|
||||
if (s && get_type == NM_META_ACCESSOR_GET_TYPE_PRETTY)
|
||||
s = gettext (s);
|
||||
return s;
|
||||
nm_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_set_fcn_ethtool (ARGS_SET_FCN)
|
||||
{
|
||||
gs_free char *value_to_free = NULL;
|
||||
NMTernary val;
|
||||
gint64 i64;
|
||||
NMEthtoolID ethtool_id = property_info->property_typ_data->subtype.ethtool.ethtool_id;
|
||||
|
||||
if (_SET_FCN_DO_RESET_DEFAULT (property_info, modifier, value)) {
|
||||
val = NM_TERNARY_DEFAULT;
|
||||
goto set;
|
||||
if (nm_ethtool_id_is_coalesce (ethtool_id)) {
|
||||
i64 = _nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXUINT32, -1);
|
||||
|
||||
if (i64 == -1) {
|
||||
g_set_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
||||
_("'%s' is out of range [%"G_GUINT32_FORMAT", %"G_GUINT32_FORMAT"]"),
|
||||
value, 0, G_MAXUINT32);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
nm_setting_ethtool_set_coalesce (NM_SETTING_ETHTOOL (setting),
|
||||
nm_ethtool_data[ethtool_id]->optname,
|
||||
(guint32) i64);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
value = nm_strstrip_avoid_copy_a (300, value, &value_to_free);
|
||||
if (nm_ethtool_id_is_feature (ethtool_id)) {
|
||||
gs_free char *value_to_free = NULL;
|
||||
NMTernary val;
|
||||
|
||||
if (NM_IN_STRSET (value, "1", "yes", "true", "on"))
|
||||
val = NM_TERNARY_TRUE;
|
||||
else if (NM_IN_STRSET (value, "0", "no", "false", "off"))
|
||||
val = NM_TERNARY_FALSE;
|
||||
else if (NM_IN_STRSET (value, "", "ignore", "default"))
|
||||
val = NM_TERNARY_DEFAULT;
|
||||
else {
|
||||
g_set_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
||||
_("'%s' is not valid; use 'on', 'off', or 'ignore'"),
|
||||
value);
|
||||
return FALSE;
|
||||
}
|
||||
if (_SET_FCN_DO_RESET_DEFAULT (property_info, modifier, value)) {
|
||||
val = NM_TERNARY_DEFAULT;
|
||||
goto set;
|
||||
}
|
||||
|
||||
value = nm_strstrip_avoid_copy_a (300, value, &value_to_free);
|
||||
|
||||
if (NM_IN_STRSET (value, "1", "yes", "true", "on"))
|
||||
val = NM_TERNARY_TRUE;
|
||||
else if (NM_IN_STRSET (value, "0", "no", "false", "off"))
|
||||
val = NM_TERNARY_FALSE;
|
||||
else if (NM_IN_STRSET (value, "", "ignore", "default"))
|
||||
val = NM_TERNARY_DEFAULT;
|
||||
else {
|
||||
g_set_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_INVALID_ARGUMENT,
|
||||
_("'%s' is not valid; use 'on', 'off', or 'ignore'"),
|
||||
value);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
set:
|
||||
nm_setting_ethtool_set_feature (NM_SETTING_ETHTOOL (setting),
|
||||
nm_setting_ethtool_set_feature (NM_SETTING_ETHTOOL (setting),
|
||||
nm_ethtool_data[ethtool_id]->optname,
|
||||
val);
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
nm_assert_not_reached();
|
||||
|
||||
g_set_error (error, NM_UTILS_ERROR, NM_UTILS_ERROR_SETTING_MISSING,
|
||||
_("ethtool property not supported"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const char *const*
|
||||
|
|
@ -4170,10 +4213,14 @@ _complete_fcn_ethtool (ARGS_COMPLETE_FCN)
|
|||
"ignore",
|
||||
NULL,
|
||||
};
|
||||
NMEthtoolID ethtool_id = property_info->property_typ_data->subtype.ethtool.ethtool_id;
|
||||
|
||||
if (!text || !text[0])
|
||||
return &v[7];
|
||||
return v;
|
||||
if (nm_ethtool_id_is_feature (ethtool_id)) {
|
||||
if (!text || !text[0])
|
||||
return &v[7];
|
||||
return v;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -5431,6 +5478,28 @@ static const NMMetaPropertyInfo *const property_infos_ETHTOOL[] = {
|
|||
PROPERTY_INFO_ETHTOOL (FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION),
|
||||
PROPERTY_INFO_ETHTOOL (FEATURE_TX_UDP_TNL_SEGMENTATION),
|
||||
PROPERTY_INFO_ETHTOOL (FEATURE_TX_VLAN_STAG_HW_INSERT),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_ADAPTIVE_RX),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_ADAPTIVE_TX),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_PKT_RATE_HIGH),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_PKT_RATE_LOW),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_FRAMES),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_FRAMES_IRQ),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_FRAMES_HIGH),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_FRAMES_LOW),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_USECS),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_USECS_IRQ),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_USECS_HIGH),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_RX_USECS_LOW),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_SAMPLE_INTERVAL),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_STATS_BLOCK_USECS),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_FRAMES),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_FRAMES_IRQ),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_FRAMES_HIGH),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_FRAMES_LOW),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_USECS),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_USECS_IRQ),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_USECS_HIGH),
|
||||
PROPERTY_INFO_ETHTOOL (COALESCE_TX_USECS_LOW),
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue