libnm: add Wi-Fi MAC address randomization property
authorDan Williams <dcbw@redhat.com>
Tue, 6 Oct 2015 21:42:15 +0000 (17:42 -0400)
committerThomas Haller <thaller@redhat.com>
Wed, 18 Nov 2015 14:37:42 +0000 (15:37 +0100)
libnm-core/nm-setting-wireless.c
libnm-core/nm-setting-wireless.h
libnm-core/nm-setting.h
libnm/libnm.ver

index b6be7d0..9931521 100644 (file)
@@ -59,6 +59,7 @@ typedef struct {
        GSList *seen_bssids;
        gboolean hidden;
        guint32 powersave;
+       NMSettingMacRandomization mac_address_randomization;
 } NMSettingWirelessPrivate;
 
 enum {
@@ -77,6 +78,7 @@ enum {
        PROP_SEEN_BSSIDS,
        PROP_HIDDEN,
        PROP_POWERSAVE,
+       PROP_MAC_ADDRESS_RANDOMIZATION,
 
        LAST_PROP
 };
@@ -617,6 +619,23 @@ nm_setting_wireless_get_powersave (NMSettingWireless *setting)
        return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->powersave;
 }
 
+/**
+ * nm_setting_wireless_get_mac_address_randomization:
+ * @setting: the #NMSettingWireless
+ *
+ * Returns: the #NMSettingWireless:mac-address-randomization property of the
+ * setting
+ *
+ * Since: 1.2
+ **/
+NMSettingMacRandomization
+nm_setting_wireless_get_mac_address_randomization (NMSettingWireless *setting)
+{
+       g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), 0);
+
+       return NM_SETTING_WIRELESS_GET_PRIVATE (setting)->mac_address_randomization;
+}
+
 /**
  * nm_setting_wireless_add_seen_bssid:
  * @setting: the #NMSettingWireless
@@ -935,6 +954,9 @@ set_property (GObject *object, guint prop_id,
        case PROP_POWERSAVE:
                priv->powersave = g_value_get_uint (value);
                break;
+       case PROP_MAC_ADDRESS_RANDOMIZATION:
+               priv->mac_address_randomization = g_value_get_uint (value);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -991,6 +1013,9 @@ get_property (GObject *object, guint prop_id,
        case PROP_POWERSAVE:
                g_value_set_uint (value, nm_setting_wireless_get_powersave (setting));
                break;
+       case PROP_MAC_ADDRESS_RANDOMIZATION:
+               g_value_set_uint (value, nm_setting_wireless_get_mac_address_randomization (setting));
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -1362,6 +1387,24 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class)
                                    G_PARAM_READWRITE |
                                    G_PARAM_STATIC_STRINGS));
 
+       /**
+        * NMSettingWireless:mac-address-randomization:
+        *
+        * One of %NM_SETTING_MAC_RANDOMIZATION_DEFAULT (never randomize unless
+        * the user has set a global default to randomize and the supplicant
+        * supports randomization),  %NM_SETTING_MAC_RANDOMIZATION_NEVER (never
+        * randomize the MAC address), or %NM_SETTING_MAC_RANDOMIZATION_ALWAYS
+        * (always randomize the MAC address).
+        *
+        * Since: 1.2
+        **/
+       g_object_class_install_property
+               (object_class, PROP_MAC_ADDRESS_RANDOMIZATION,
+                g_param_spec_uint (NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION, "", "",
+                                   0, G_MAXUINT32, NM_SETTING_MAC_RANDOMIZATION_DEFAULT,
+                                   G_PARAM_READWRITE |
+                                   G_PARAM_STATIC_STRINGS));
+
        /* Compatibility for deprecated property */
        /* ---ifcfg-rh---
         * property: security
index 9fdf6c1..a4c0147 100644 (file)
@@ -55,6 +55,7 @@ G_BEGIN_DECLS
 #define NM_SETTING_WIRELESS_SEEN_BSSIDS "seen-bssids"
 #define NM_SETTING_WIRELESS_HIDDEN      "hidden"
 #define NM_SETTING_WIRELESS_POWERSAVE   "powersave"
+#define NM_SETTING_WIRELESS_MAC_ADDRESS_RANDOMIZATION   "mac-address-randomization"
 
 /**
  * NM_SETTING_WIRELESS_MODE_ADHOC:
@@ -121,6 +122,9 @@ gboolean          nm_setting_wireless_get_hidden             (NMSettingWireless
 NM_AVAILABLE_IN_1_2
 guint32           nm_setting_wireless_get_powersave          (NMSettingWireless *setting);
 
+NM_AVAILABLE_IN_1_2
+NMSettingMacRandomization nm_setting_wireless_get_mac_address_randomization (NMSettingWireless *setting);
+
 gboolean          nm_setting_wireless_add_seen_bssid         (NMSettingWireless *setting,
                                                               const char *bssid);
 
index 5df7366..7b1d87d 100644 (file)
@@ -131,6 +131,22 @@ typedef enum {
 } NMSettingCompareFlags;
 
 
+/**
+ * NMSettingMacRandomization:
+ * @NM_SETTING_MAC_RANDOMIZATION_DEFAULT: the default value, which unless
+ * overridden by user-controlled defaults configuration, is "never".
+ * @NM_SETTING_MAC_RANDOMIZATION_NEVER: the device's MAC address is always used.
+ * @NM_SETTING_MAC_RANDOMIZATION_ALWAYS: a random MAC address is used.
+ *
+ * Controls if and how the MAC address of a device is randomzied.
+ **/
+typedef enum {
+       NM_SETTING_MAC_RANDOMIZATION_DEFAULT = 0,
+       NM_SETTING_MAC_RANDOMIZATION_NEVER,
+       NM_SETTING_MAC_RANDOMIZATION_ALWAYS,
+} NMSettingMacRandomization;
+
+
 /**
  * NMSetting:
  *
index c99fc81..eff17b3 100644 (file)
@@ -891,11 +891,13 @@ global:
        nm_setting_ip_config_has_dns_options;
        nm_setting_ip_config_remove_dns_option;
        nm_setting_ip_config_remove_dns_option_by_value;
+       nm_setting_mac_randomization_get_type;
        nm_setting_vpn_get_timeout;
        nm_setting_wired_get_wake_on_lan;
        nm_setting_wired_get_wake_on_lan_password;
        nm_setting_wired_wake_on_lan_get_type;
        nm_setting_wireless_get_powersave;
+       nm_setting_wireless_get_mac_address_randomization;
        nm_utils_bond_mode_int_to_string;
        nm_utils_bond_mode_string_to_int;
        nm_utils_enum_from_str;