diff options
author | Thomas Haller <thaller@redhat.com> | 2020-07-13 23:40:46 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-07-13 23:40:48 +0200 |
commit | 7b14686ae2b0d610661af1958062c5388c0cb6bf (patch) | |
tree | fc9be8c6b5758ca10fd59d28549f46d8a44f68a8 /src/settings/plugins | |
parent | 8582a5f356b758b9fc44f977fbad10132fcbd926 (diff) | |
parent | 5542275672672299860117f6cc3c5b8e234bd8dc (diff) | |
download | NetworkManager-1.27.1-dev.tar.gz |
release: bump version to 1.27.1 (development)1.27.1-dev
Diffstat (limited to 'src/settings/plugins')
12 files changed, 198 insertions, 101 deletions
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c index f5c9bb5e91..ad782e2c78 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-plugin.c @@ -353,7 +353,7 @@ _storages_consolidate (NMSIfcfgRHPlugin *self, storage = storages_modified->pdata[i]; if (!storage->dirty) { - /* the entry is no longer dirty. In the meantime we already emited + /* the entry is no longer dirty. In the meantime we already emitted * another signal for it. */ continue; } diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 1a9df92cee..4ac223c0c0 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -338,7 +338,7 @@ make_connection_name (shvarFile *ifcfg, if (name) return name; - /* Otherwise construct a new NAME */ + /* Otherwise, construct a new NAME */ if (!prefix) prefix = "System"; @@ -4021,6 +4021,7 @@ make_wireless_setting (shvarFile *ifcfg, gint64 chan = 0; NMSettingMacRandomization mac_randomization; NMSettingWirelessPowersave powersave = NM_SETTING_WIRELESS_POWERSAVE_DEFAULT; + NMTernary ternary; s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); @@ -4224,6 +4225,14 @@ make_wireless_setting (shvarFile *ifcfg, mac_randomization, NULL); + ternary = svGetValueTernary (ifcfg, "AP_ISOLATION"); + if (ternary != NM_TERNARY_DEFAULT) { + g_object_set (s_wireless, + NM_SETTING_WIRELESS_AP_ISOLATION, + ternary, + NULL); + } + return NM_SETTING (s_wireless); error: diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c index d1500dbdb9..e967481500 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.c @@ -805,6 +805,7 @@ nms_ifcfg_rh_utils_is_numbered_tag_impl (const char *key, const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = { _KEY_TYPE ("ACD_TIMEOUT", NMS_IFCFG_KEY_TYPE_IS_PLAIN ), _KEY_TYPE ("ADDRESS", NMS_IFCFG_KEY_TYPE_IS_NUMBERED ), + _KEY_TYPE ("AP_ISOLATION", NMS_IFCFG_KEY_TYPE_IS_PLAIN ), _KEY_TYPE ("ARPING_WAIT", NMS_IFCFG_KEY_TYPE_IS_PLAIN ), _KEY_TYPE ("AUTH_RETRIES", NMS_IFCFG_KEY_TYPE_IS_PLAIN ), _KEY_TYPE ("AUTOCONNECT_PRIORITY", NMS_IFCFG_KEY_TYPE_IS_PLAIN ), diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h index 459c5ae958..a864137ecd 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-utils.h @@ -33,7 +33,7 @@ typedef struct { NMSIfcfgKeyTypeFlags key_flags; } NMSIfcfgKeyTypeInfo; -extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[240]; +extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[241]; const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info (const char *key, gssize *out_idx); diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index e6526944c7..67de73073a 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -114,10 +114,13 @@ write_secrets (shvarFile *ifcfg, GError **error) { nm_auto_shvar_file_close shvarFile *keyfile = NULL; - gs_free const char **secrets_keys = NULL; - guint i, secrets_keys_n; + gs_free NMUtilsNamedValue *secrets_arr_free = NULL; + NMUtilsNamedValue secrets_arr_static[30]; + const NMUtilsNamedValue *secrets_arr; + guint secrets_len; GError *local = NULL; gboolean any_secrets = FALSE; + guint i; keyfile = utils_get_keys_ifcfg (svFileGetName (ifcfg), TRUE); if (!keyfile) { @@ -126,10 +129,13 @@ write_secrets (shvarFile *ifcfg, return FALSE; } - secrets_keys = nm_utils_strdict_get_keys (secrets, TRUE, &secrets_keys_n); - for (i = 0; i < secrets_keys_n; i++) { - const char *k = secrets_keys[i]; - const char *v = g_hash_table_lookup (secrets, k); + secrets_arr = nm_utils_named_values_from_strdict (secrets, + &secrets_len, + secrets_arr_static, + &secrets_arr_free); + for (i = 0; i < secrets_len; i++) { + const char *k = secrets_arr[i].name; + const char *v = secrets_arr[i].value_str; if (v) { svSetValueStr (keyfile, k, v); @@ -947,6 +953,8 @@ write_wireless_setting (NMConnection *connection, break; } + svSetValueTernary (ifcfg, "AP_ISOLATION", nm_setting_wireless_get_ap_isolation (s_wireless)); + svSetValueStr (ifcfg, "TYPE", TYPE_WIRELESS); return TRUE; @@ -1415,23 +1423,29 @@ write_team_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, return TRUE; } -static gboolean -get_setting_default_boolean (gpointer setting, const char *prop) -{ - return NM_G_PARAM_SPEC_GET_DEFAULT_BOOLEAN (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)); -} - -static guint -get_setting_default_uint (gpointer setting, const char *prop) -{ - return NM_G_PARAM_SPEC_GET_DEFAULT_UINT (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)); -} - -static guint64 -get_setting_default_uint64 (gpointer setting, const char *prop) -{ - return NM_G_PARAM_SPEC_GET_DEFAULT_UINT64 (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)); -} +#define get_setting_default_checked_boolean(dflt, setting, prop) \ + ({ \ + const gboolean _dflt = (dflt); \ + \ + nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_BOOLEAN (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \ + _dflt; \ + }) + +#define get_setting_default_checked_uint(dflt, setting, prop) \ + ({ \ + const guint _dflt = (dflt); \ + \ + nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_UINT (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \ + _dflt; \ + }) + +#define get_setting_default_checked_uint64(dflt, setting, prop) \ + ({ \ + const guint64 _dflt = (dflt); \ + \ + nm_assert (NM_G_PARAM_SPEC_GET_DEFAULT_UINT64 (g_object_class_find_property (G_OBJECT_GET_CLASS (setting), prop)) == _dflt); \ + _dflt; \ + }) static gboolean write_bridge_vlans (NMSetting *setting, @@ -1475,6 +1489,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire NMSettingBridge *s_bridge; guint32 u32; guint64 u64; + guint u; gboolean b; const char *s; GString *opts; @@ -1498,164 +1513,141 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wire svSetValueStr (ifcfg, "STP", "yes"); u32 = nm_setting_bridge_get_forward_delay (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY)) + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_FORWARD_DELAY_DEF, s_bridge, NM_SETTING_BRIDGE_FORWARD_DELAY)) svSetValueInt64 (ifcfg, "DELAY", u32); g_string_append_printf (opts, "priority=%u", nm_setting_bridge_get_priority (s_bridge)); u32 = nm_setting_bridge_get_hello_time (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_HELLO_TIME)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_HELLO_TIME_DEF, s_bridge, NM_SETTING_BRIDGE_HELLO_TIME)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "hello_time=%u", u32); } u32 = nm_setting_bridge_get_max_age (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MAX_AGE)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MAX_AGE_DEF, s_bridge, NM_SETTING_BRIDGE_MAX_AGE)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "max_age=%u", u32); } } - u32 = nm_setting_bridge_get_ageing_time (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_AGEING_TIME)) { - if (opts->len) - g_string_append_c (opts, ' '); - g_string_append_printf (opts, "ageing_time=%u", u32); + u = nm_setting_bridge_get_ageing_time (s_bridge); + if (u != get_setting_default_checked_uint (NM_BRIDGE_AGEING_TIME_DEF, s_bridge, NM_SETTING_BRIDGE_AGEING_TIME)) { + nm_gstring_add_space_delimiter (opts); + g_string_append_printf (opts, "ageing_time=%u", u); } s = nm_setting_bridge_get_group_address (s_bridge); if (s) { - if (opts->len) - g_string_append_c (opts, ' '); + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "group_address=%s", s); } u32 = nm_setting_bridge_get_group_forward_mask (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_GROUP_FORWARD_MASK)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (0, s_bridge, NM_SETTING_BRIDGE_GROUP_FORWARD_MASK)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "group_fwd_mask=%u", u32); } - u32 = nm_setting_bridge_get_multicast_hash_max (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_HASH_MAX)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_HASH_MAX_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_HASH_MAX)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_hash_max=%u", u32); } u32 = nm_setting_bridge_get_multicast_last_member_count (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_LAST_MEMBER_COUNT_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_COUNT)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_last_member_count=%u", u32); } u64 = nm_setting_bridge_get_multicast_last_member_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_LAST_MEMBER_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_last_member_interval=%"G_GUINT64_FORMAT, u64); } u64 = nm_setting_bridge_get_multicast_membership_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_MEMBERSHIP_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_membership_interval=%"G_GUINT64_FORMAT, u64); } b = nm_setting_bridge_get_multicast_querier (s_bridge); - if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_QUERIER_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_querier=%u", (guint) b); } u64 = nm_setting_bridge_get_multicast_querier_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERIER_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERIER_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_querier_interval=%"G_GUINT64_FORMAT, u64); } u64 = nm_setting_bridge_get_multicast_query_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERY_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_query_interval=%"G_GUINT64_FORMAT, u64); } u64 = nm_setting_bridge_get_multicast_query_response_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_RESPONSE_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_query_response_interval=%"G_GUINT64_FORMAT, u64); } b = nm_setting_bridge_get_multicast_query_use_ifaddr (s_bridge); - if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_QUERY_USE_IFADDR_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_QUERY_USE_IFADDR)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_query_use_ifaddr=%u", (guint) b); } b = nm_setting_bridge_get_multicast_snooping (s_bridge); - if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_MULTICAST_SNOOPING)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (b != get_setting_default_checked_boolean (NM_BRIDGE_MULTICAST_SNOOPING_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_SNOOPING)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_snooping=%u", (guint32) b); } u32 = nm_setting_bridge_get_multicast_startup_query_count (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_COUNT)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_startup_query_count=%u", u32); } u64 = nm_setting_bridge_get_multicast_startup_query_interval (s_bridge); - if (u64 != get_setting_default_uint64 (s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u64 != get_setting_default_checked_uint64 (NM_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL_DEF, s_bridge, NM_SETTING_BRIDGE_MULTICAST_STARTUP_QUERY_INTERVAL)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_startup_query_interval=%"G_GUINT64_FORMAT, u64); } s = nm_setting_bridge_get_multicast_router (s_bridge); if (s) { - if (opts->len) - g_string_append_c (opts, ' '); + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "multicast_router=%s", s); } b = nm_setting_bridge_get_vlan_filtering (s_bridge); - if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_VLAN_FILTERING)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (b != get_setting_default_checked_boolean (FALSE, s_bridge, NM_SETTING_BRIDGE_VLAN_FILTERING)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "vlan_filtering=%u", (guint32) b); } u32 = nm_setting_bridge_get_vlan_default_pvid (s_bridge); - if (u32 != get_setting_default_uint (s_bridge, NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_VLAN_DEFAULT_PVID_DEF, s_bridge, NM_SETTING_BRIDGE_VLAN_DEFAULT_PVID)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "default_pvid=%u", u32); } s = nm_setting_bridge_get_vlan_protocol (s_bridge); if (s) { - if (opts->len) - g_string_append_c (opts, ' '); + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "vlan_protocol=%s", s); } b = nm_setting_bridge_get_vlan_stats_enabled (s_bridge); - if (b != get_setting_default_boolean (s_bridge, NM_SETTING_BRIDGE_VLAN_STATS_ENABLED)) { - if (opts->len) - g_string_append_c (opts, ' '); + if (b != get_setting_default_checked_boolean (NM_BRIDGE_VLAN_STATS_ENABLED_DEF, s_bridge, NM_SETTING_BRIDGE_VLAN_STATS_ENABLED)) { + nm_gstring_add_space_delimiter (opts); g_string_append_printf (opts, "vlan_stats_enabled=%u", (guint) b); } @@ -1692,11 +1684,11 @@ write_bridge_port_setting (NMConnection *connection, shvarFile *ifcfg, GError ** string = g_string_sized_new (32); u32 = nm_setting_bridge_port_get_priority (s_port); - if (u32 != get_setting_default_uint (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PRIORITY)) + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_PORT_PRIORITY_DEF, s_port, NM_SETTING_BRIDGE_PORT_PRIORITY)) g_string_append_printf (string, "priority=%u", u32); u32 = nm_setting_bridge_port_get_path_cost (s_port); - if (u32 != get_setting_default_uint (NM_SETTING (s_port), NM_SETTING_BRIDGE_PORT_PATH_COST)) { + if (u32 != get_setting_default_checked_uint (NM_BRIDGE_PORT_PATH_COST_DEF, s_port, NM_SETTING_BRIDGE_PORT_PATH_COST)) { if (string->len) g_string_append_c (string, ' '); g_string_append_printf (string, "path_cost=%u", u32); diff --git a/src/settings/plugins/ifcfg-rh/shvar.c b/src/settings/plugins/ifcfg-rh/shvar.c index cd63661d9a..a447720690 100644 --- a/src/settings/plugins/ifcfg-rh/shvar.c +++ b/src/settings/plugins/ifcfg-rh/shvar.c @@ -1214,6 +1214,20 @@ svGetValueBoolean (shvarFile *s, const char *key, int fallback) return svParseBoolean (value, fallback); } +/* svGetValueTernary: + * @s: fhe file + * @key: the name of the key to read + * + * Reads a value @key and converts it to a NMTernary value. + * + * Returns: the parsed NMTernary + */ +NMTernary +svGetValueTernary (shvarFile *s, const char *key) +{ + return svGetValueBoolean (s, key, NM_TERNARY_DEFAULT); +} + /* svGetValueInt64: * @s: fhe file * @key: the name of the key to read @@ -1429,6 +1443,15 @@ svSetValueBoolean (shvarFile *s, const char *key, gboolean value) } gboolean +svSetValueTernary (shvarFile *s, const char *key, NMTernary value) +{ + if (NM_IN_SET (value, NM_TERNARY_TRUE, NM_TERNARY_FALSE)) + return svSetValueBoolean (s, key, (gboolean) value); + else + return svUnsetValue (s, key); +} + +gboolean svSetValueBoolean_cond_true (shvarFile *s, const char *key, gboolean value) { return svSetValue (s, key, value ? "yes" : NULL); diff --git a/src/settings/plugins/ifcfg-rh/shvar.h b/src/settings/plugins/ifcfg-rh/shvar.h index 410284f8cb..852dd4c1de 100644 --- a/src/settings/plugins/ifcfg-rh/shvar.h +++ b/src/settings/plugins/ifcfg-rh/shvar.h @@ -66,6 +66,8 @@ const char **svGetKeysSorted (shvarFile *s, */ int svGetValueBoolean (shvarFile *s, const char *key, int def); +NMTernary svGetValueTernary (shvarFile *s, const char *key); + gint64 svGetValueInt64 (shvarFile *s, const char *key, guint base, gint64 min, gint64 max, gint64 fallback); gboolean svGetValueEnum (shvarFile *s, const char *key, @@ -84,6 +86,7 @@ gboolean svSetValueBoolean_cond_true (shvarFile *s, const char *key, gboolean va gboolean svSetValueInt64 (shvarFile *s, const char *key, gint64 value); gboolean svSetValueInt64_cond (shvarFile *s, const char *key, gboolean do_set, gint64 value); gboolean svSetValueEnum (shvarFile *s, const char *key, GType gtype, int value); +gboolean svSetValueTernary (shvarFile *s, const char *key, NMTernary value); gboolean svUnsetValue (shvarFile *s, const char *key); gboolean svUnsetAll (shvarFile *s, SvKeyType match_key_type); diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_WiFi_AP_Mode.cexpected b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_WiFi_AP_Mode.cexpected new file mode 100644 index 0000000000..ccec2b81ae --- /dev/null +++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-Test_Write_WiFi_AP_Mode.cexpected @@ -0,0 +1,19 @@ +ESSID=MySSID +MODE=Ap +CHANNEL=196 +MAC_ADDRESS_RANDOMIZATION=default +AP_ISOLATION=yes +TYPE=Wireless +PROXY_METHOD=none +BROWSER_ONLY=no +BOOTPROTO=dhcp +DEFROUTE=yes +IPV4_FAILURE_FATAL=no +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +IPV6_ADDR_GEN_MODE=stable-privacy +NAME="Test Write Wi-Fi AP Mode" +UUID=${UUID} +ONBOOT=yes diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 40d1bb8c53..935ea9fdf8 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -15,6 +15,7 @@ #include <sys/types.h> #include <sys/stat.h> +#include "nm-glib-aux/nm-json-aux.h" #include "nm-utils.h" #include "nm-setting-connection.h" #include "nm-setting-wired.h" @@ -96,7 +97,7 @@ _assert_reread_same_FIXME (NMConnection *connection, NMConnection *reread) /* FIXME: these assertion failures should not happen as we expect * that re-reading a connection after write yields the same result. * - * Needs investation and fixing. */ + * Needs investigation and fixing. */ nmtst_assert_connection_verifies_without_normalization (reread); connection_normalized = nmtst_connection_duplicate_and_normalize (connection); @@ -3967,6 +3968,54 @@ test_write_wifi_band_a (void) } static void +test_write_wifi_ap_mode (void) +{ + nmtst_auto_unlinkfile char *testfile = NULL; + gs_unref_object NMConnection *connection = NULL; + gs_unref_object NMConnection *reread = NULL; + NMSettingConnection *s_con; + NMSettingWireless *s_wifi; + gs_unref_bytes GBytes *ssid = NULL; + + connection = nm_simple_connection_new (); + + /* Connection setting */ + s_con = (NMSettingConnection *) nm_setting_connection_new (); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + + g_object_set (s_con, + NM_SETTING_CONNECTION_ID, "Test Write Wi-Fi AP Mode", + NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_a (), + NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, + NULL); + + /* Wifi setting */ + s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); + nm_connection_add_setting (connection, NM_SETTING (s_wifi)); + + ssid = g_bytes_new ("MySSID", NM_STRLEN ("MySSID")); + + g_object_set (s_wifi, + NM_SETTING_WIRELESS_SSID, ssid, + NM_SETTING_WIRELESS_MODE, "ap", + NM_SETTING_WIRELESS_BAND, "a", + NM_SETTING_WIRELESS_CHANNEL, (guint) 196, + NM_SETTING_WIRELESS_AP_ISOLATION, NM_TERNARY_TRUE, + NULL); + + nmtst_assert_connection_verifies (connection); + + _writer_new_connec_exp (connection, + TEST_SCRATCH_DIR, + TEST_IFCFG_DIR"/ifcfg-Test_Write_WiFi_AP_Mode.cexpected", + &testfile); + + reread = _connection_from_file (testfile, NULL, TYPE_WIRELESS, NULL); + + nmtst_assert_connection_equals (connection, TRUE, reread, FALSE); +} + +static void test_read_wifi_band_a_channel_mismatch (void) { gs_free_error GError *error = NULL; @@ -9081,7 +9130,7 @@ test_read_team_master_invalid (gconstpointer user_data) gs_free_error GError *error = NULL; gs_unref_object NMConnection *connection = NULL; - if (WITH_JSON_VALIDATION) { + if (nm_json_vt ()) { _connection_from_file_fail (PATH_NAME, NULL, TYPE_ETHERNET, &error); g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_PROPERTY); @@ -9528,7 +9577,7 @@ do_svUnescape_combine_ansi_append (GString *str_val, GString *str_exp, const Une if (honor_needs_ascii_separator && data->needs_ascii_separator) { /* the string has an open escape sequence. We must ensure that when * combining it with another sequence, that they don't merge into - * something diffent. for example "\xa" + "a" must not result in + * something different. for example "\xa" + "a" must not result in * "\xaa". Instead, we add a space in between to get "\xa a". */ g_string_append (str_val, " "); g_string_append (str_exp, " "); @@ -10645,6 +10694,7 @@ int main (int argc, char **argv) g_test_add_func (TPATH "wifi/write-wpa-then-wep-with-perms", test_write_wifi_wpa_then_wep_with_perms); g_test_add_func (TPATH "wifi/write-hidden", test_write_wifi_hidden); g_test_add_func (TPATH "wifi/write-band-a", test_write_wifi_band_a); + g_test_add_func (TPATH "wifi/write-ap-mode", test_write_wifi_ap_mode); g_test_add_func (TPATH "s390/read-qeth-static", test_read_wired_qeth_static); g_test_add_func (TPATH "s390/write-qeth-dhcp", test_write_wired_qeth_dhcp); diff --git a/src/settings/plugins/ifupdown/tests/test-ifupdown.c b/src/settings/plugins/ifupdown/tests/test-ifupdown.c index 6a7b5ecc76..497a1caa10 100644 --- a/src/settings/plugins/ifupdown/tests/test-ifupdown.c +++ b/src/settings/plugins/ifupdown/tests/test-ifupdown.c @@ -190,7 +190,7 @@ dump_blocks (if_parser *parser) g_print("'%s' '%s'\n", n->type, n->name); // each key-value pair within a block is indented & separated by a tab - // (single quotes used to show typ & name baoundaries) + // (single quotes used to show type & name boundaries) c_list_for_each_entry (m, &n->data_lst_head, data_lst) g_print("\t'%s'\t'%s'\n", m->key, m->data); diff --git a/src/settings/plugins/keyfile/nms-keyfile-plugin.c b/src/settings/plugins/keyfile/nms-keyfile-plugin.c index c84bd78d0d..09023dbb29 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-plugin.c +++ b/src/settings/plugins/keyfile/nms-keyfile-plugin.c @@ -529,7 +529,7 @@ _storages_consolidate (NMSKeyfilePlugin *self, storage = storages_modified->pdata[i]; if (!storage->is_dirty) { - /* the entry is no longer is_dirty. In the meantime we already emited + /* the entry is no longer is_dirty. In the meantime we already emitted * another signal for it. */ continue; } diff --git a/src/settings/plugins/keyfile/nms-keyfile-utils.c b/src/settings/plugins/keyfile/nms-keyfile-utils.c index bc8dfd12c2..e3c3969146 100644 --- a/src/settings/plugins/keyfile/nms-keyfile-utils.c +++ b/src/settings/plugins/keyfile/nms-keyfile-utils.c @@ -266,7 +266,7 @@ nms_keyfile_nmmeta_write (const char *dirname, } } else { /* we only have the "loaded_path" to store. That is commonly used for the tombstones to - * link to /dev/null. A symlink is sufficient to store that ammount of information. + * link to /dev/null. A symlink is sufficient to store that amount of information. * No need to bother with a keyfile. */ if (symlink (loaded_path, full_filename_tmp) != 0) { errsv = -NM_ERRNO_NATIVE (errno); |