summary refs log tree commit diff
path: root/src/libnm-core-impl
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnm-core-impl')
-rw-r--r--src/libnm-core-impl/gen-metadata-nm-settings-libnm-core.xml.in4
-rw-r--r--src/libnm-core-impl/nm-connection.c2
-rw-r--r--src/libnm-core-impl/nm-setting-ip6-config.c2
-rw-r--r--src/libnm-core-impl/nm-setting-wireless.c91
-rw-r--r--src/libnm-core-impl/nm-team-utils.c2
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);