diff options
Diffstat (limited to 'src/libnm-core-impl')
| -rw-r--r-- | src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in | 4 | ||||
| -rw-r--r-- | src/libnm-core-impl/nm-connection.c | 2 | ||||
| -rw-r--r-- | src/libnm-core-impl/nm-setting-ip6-config.c | 2 | ||||
| -rw-r--r-- | src/libnm-core-impl/nm-setting-wireless.c | 91 | ||||
| -rw-r--r-- | src/libnm-core-impl/nm-team-utils.c | 2 |
5 files changed, 98 insertions, 3 deletions
diff --git a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in index 2b231983..6d2b9254 100644 --- a/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in +++ b/src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in @@ -85,6 +85,10 @@ dbus-type="u" gprop-type="guint" /> + <property name="channel-width" + dbus-type="i" + gprop-type="gint" + /> <property name="cloned-mac-address" dbus-type="ay" dbus-deprecated="1" diff --git a/src/libnm-core-impl/nm-connection.c b/src/libnm-core-impl/nm-connection.c index 95fe89a8..6dace2b7 100644 --- a/src/libnm-core-impl/nm-connection.c +++ b/src/libnm-core-impl/nm-connection.c @@ -3258,6 +3258,8 @@ nm_connection_get_virtual_device_description(NMConnection *connection) display_type = _("WireGuard"); else if (nm_streq(type, NM_SETTING_TUN_SETTING_NAME)) display_type = _("TUN/TAP"); + else if (nm_streq(type, NM_SETTING_VETH_SETTING_NAME)) + display_type = _("Veth"); if (!iface || !display_type) return NULL; diff --git a/src/libnm-core-impl/nm-setting-ip6-config.c b/src/libnm-core-impl/nm-setting-ip6-config.c index 2dbf7a34..eddac9f1 100644 --- a/src/libnm-core-impl/nm-setting-ip6-config.c +++ b/src/libnm-core-impl/nm-setting-ip6-config.c @@ -1097,7 +1097,7 @@ nm_setting_ip6_config_class_init(NMSettingIP6ConfigClass *klass) * property: addr-gen-mode * format: one of "eui64" (0), "stable-privacy" (1), "default" (3) or "default-or-eui64" (2) * description: Configure method for creating the - * IPv6 interface identifer of addresses with RFC4862 IPv6 Stateless + * IPv6 interface identifier of addresses with RFC4862 IPv6 Stateless * Address Autoconfiguration and Link Local addresses. * * The permitted values are: "eui64" (0), "stable-privacy" (1), "default" diff --git a/src/libnm-core-impl/nm-setting-wireless.c b/src/libnm-core-impl/nm-setting-wireless.c index 207b47d8..be08fa8c 100644 --- a/src/libnm-core-impl/nm-setting-wireless.c +++ b/src/libnm-core-impl/nm-setting-wireless.c @@ -44,7 +44,8 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingWireless, PROP_POWERSAVE, PROP_MAC_ADDRESS_RANDOMIZATION, PROP_WAKE_ON_WLAN, - PROP_AP_ISOLATION, ); + PROP_AP_ISOLATION, + PROP_CHANNEL_WIDTH, ); typedef struct { GBytes *ssid; @@ -57,6 +58,7 @@ typedef struct { char *generate_mac_address_mask; NMValueStrv mac_address_denylist; int ap_isolation; + int channel_width; guint32 mac_address_randomization; guint32 channel; guint32 rate; @@ -1012,6 +1014,24 @@ nm_setting_wireless_get_ap_isolation(NMSettingWireless *setting) return NM_SETTING_WIRELESS_GET_PRIVATE(setting)->ap_isolation; } +/** + * nm_setting_wireless_get_channel_width: + * @setting: the #NMSettingWireless + * + * Returns the #NMSettingWireless:channel-width property. + * + * Returns: the channel width + * + * Since: 1.50 + */ +NMSettingWirelessChannelWidth +nm_setting_wireless_get_channel_width(NMSettingWireless *setting) +{ + g_return_val_if_fail(NM_IS_SETTING_WIRELESS(setting), NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO); + + return NM_SETTING_WIRELESS_GET_PRIVATE(setting)->channel_width; +} + /*****************************************************************************/ void @@ -1317,6 +1337,45 @@ verify(NMSetting *setting, NMConnection *connection, GError **error) return FALSE; } + if (priv->channel_width != NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO) { + if (!nm_streq0(priv->mode, NM_SETTING_WIRELESS_MODE_AP)) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("a specific channel width can be set only in AP mode")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_WIRELESS_SETTING_NAME, + NM_SETTING_WIRELESS_CHANNEL_WIDTH); + return FALSE; + } + if (!priv->channel) { + g_set_error_literal( + error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("a specific channel width can be set only together with a fixed channel")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_WIRELESS_SETTING_NAME, + NM_SETTING_WIRELESS_CHANNEL_WIDTH); + return FALSE; + } + + if (priv->channel_width == NM_SETTING_WIRELESS_CHANNEL_WIDTH_80MHZ + && !nm_streq0(priv->band, "a")) { + g_set_error_literal(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("80MHz channels are only supported in the 5GHz band")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_WIRELESS_SETTING_NAME, + NM_SETTING_WIRELESS_CHANNEL_WIDTH); + return FALSE; + } + } + /* from here on, check for NM_SETTING_VERIFY_NORMALIZABLE conditions. */ _nm_setting_wireless_normalize_mac_address_randomization(NM_SETTING_WIRELESS(setting), @@ -2187,6 +2246,36 @@ nm_setting_wireless_class_init(NMSettingWirelessClass *klass) NMSettingWirelessPrivate, ap_isolation); + /** + * NMSettingWireless:channel-width: + * + * Specifies width of the wireless channel in Access Point (AP) mode. + * + * When set to %NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO (the default), the + * channel width is automatically determined. At the moment, this means that + * the safest (smallest) width is chosen. + * + * If the value is not %NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO, then the + * 'channel' property must also be set. When using the 2.4GHz band, the width + * can be at most 40MHz. + * + * This property can be set to a value different from + * %NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO only when the interface is configured + * in AP mode. + * + * Since: 1.50 + **/ + _nm_setting_property_define_direct_enum(properties_override, + obj_properties, + NM_SETTING_WIRELESS_CHANNEL_WIDTH, + PROP_CHANNEL_WIDTH, + NM_TYPE_SETTING_WIRELESS_CHANNEL_WIDTH, + NM_SETTING_WIRELESS_CHANNEL_WIDTH_AUTO, + NM_SETTING_PARAM_NONE, + NULL, + NMSettingWirelessPrivate, + channel_width); + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); _nm_setting_class_commit(setting_class, diff --git a/src/libnm-core-impl/nm-team-utils.c b/src/libnm-core-impl/nm-team-utils.c index bad78dee..6e7f85c7 100644 --- a/src/libnm-core-impl/nm-team-utils.c +++ b/src/libnm-core-impl/nm-team-utils.c @@ -2238,7 +2238,7 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error) g_set_error(error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_INVALID_SETTING, - _("value out or range")); + _("value out of range")); _team_setting_prefix_error_plain(self->d.is_port, attr_data->property_name, error); |