NetworkManager/libnm-core
Thomas Haller 96cabbcbb8 all: make MAC address randomization algorithm configurable
For the per-connection settings "ethernet.cloned-mac-address"
and "wifi.cloned-mac-address", and for the per-device setting
"wifi.scan-rand-mac-address", we may generate MAC addresses using
either the "random" or "stable" algorithm.

Add new properties "generate-mac-address-mask" that allow to configure
which bits of the MAC address will be scrambled.

By default, the "random" and "stable" algorithms scamble all bits
of the MAC address, including the OUI part and generate a locally-
administered, unicast address.

By specifying a MAC address mask, we can now configure to perserve
parts of the current MAC address of the device. For example, setting
"FF:FF:FF:00:00:00" will preserve the first 3 octects of the current
MAC address.

One can also explicitly specify a MAC address to use instead of the
current MAC address. For example, "FF:FF:FF:00:00:00 68:F7:28:00:00:00"
sets the OUI part of the MAC address to "68:F7:28" while scrambling
the last 3 octects.
Similarly, "02:00:00:00:00:00 00:00:00:00:00:00" will scamble
all bits of the MAC address, except clearing the second-least
significant bit. Thus, creating a burned-in address, globally
administered.

One can also supply a list of MAC addresses like
"FF:FF:FF:00:00:00 68:F7:28:00:00:00 00:0C:29:00:00:00 ..." in which
case a MAC address is choosen randomly.

To fully scamble the MAC address one can configure
"02:00:00:00:00:00 00:00:00:00:00:00 02:00:00:00:00:00".
which also randomly creates either a locally or globally administered
address.

With this, the following macchanger options can be implemented:

  `macchanger --random`
   This is the default if no mask is configured.
   -> ""
   while is the same as:
   -> "00:00:00:00:00:00"
   -> "02:00:00:00:00:00 02:00:00:00:00:00"

  `macchanger --random --bia`
   -> "02:00:00:00:00:00 00:00:00:00:00:00"

  `macchanger --ending`
   This option cannot be fully implemented, because macchanger
   uses the current MAC address but also implies --bia.
   -> "FF:FF:FF:00:00:00"
      This would yields the same result only if the current MAC address
      is already a burned-in address too. Otherwise, it has not the same
      effect as --ending.
   -> "FF:FF:FF:00:00:00 <MAC_ADDR>"
      Alternatively, instead of using the current MAC address,
      spell the OUI part out. But again, that is not really the
      same as macchanger does because you explictly have to name
      the OUI part to use.

  `machanger --another`
  `machanger --another_any`
  -> "FF:FF:FF:00:00:00 <MAC_ADDR> <MAC_ADDR> ..."
     "$(printf "FF:FF:FF:00:00:00 %s\n" "$(sed -n 's/^\([0-9a-fA-F][0-9a-fA-F]\) \([0-9a-fA-F][0-9a-fA-F]\) \([0-9a-fA-F][0-9a-fA-F]\) .*/\1:\2:\3:00:00:00/p' /usr/share/macchanger/wireless.list | xargs)")"
2016-06-30 08:32:50 +02:00
..
tests all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
crypto.c libnm-core: empty key is not a pkcs12 file 2016-04-20 10:48:59 +02:00
crypto.h all: make use of new header file "nm-default.h" 2015-08-05 15:32:40 +02:00
crypto_gnutls.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
crypto_nss.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
Makefile.am libnm/vpn: add nm_vpn_plugin_info_get_auth_dialog() 2016-04-22 14:17:02 +02:00
Makefile.libnm-core shared: move shared files to subdirectory "shared/nm-utils/" 2016-06-16 10:45:53 +02:00
nm-connection-private.h libnm-core: make nm_setting_verify() take an NMConnection 2014-10-28 17:17:17 -04:00
nm-connection.c libnm: deprecated wireless.mac-address-randomization property for wireless.cloned-mac-address 2016-06-30 08:29:56 +02:00
nm-connection.h libnm-core: add NMSettingVxlan 2015-12-09 16:36:46 +01:00
nm-core-internal.h all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-core-types-internal.h libnm: internally expose NMVlanQosMapping struct in "nm-core-internal.h" 2015-11-02 13:57:02 +01:00
nm-core-types.h libnm-core: add NMSettingVxlan 2015-12-09 16:36:46 +01:00
nm-dbus-interface.h libnm-core: don't link to NMDevice type from the D-Bus spec 2016-04-22 10:02:37 +02:00
nm-dbus-utils.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-errors.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-errors.h manager: add Reload() D-Bus command 2016-06-01 19:06:34 +02:00
nm-keyfile-internal.h all: make use of new header file "nm-default.h" 2015-08-05 15:32:40 +02:00
nm-keyfile-reader.c device: extend MAC address handling including randomization for ethernet and wifi 2016-06-30 08:29:56 +02:00
nm-keyfile-utils.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-keyfile-utils.h libnm/keyfile/trivial: rename VPN_SECRETS_GROUP define to NM_KEYFILE_GROUP_VPN_SECRETS 2016-02-14 11:14:35 +01:00
nm-keyfile-writer.c all: use nm_strcmp_p() for sorting strings 2016-06-15 10:32:32 +02:00
nm-property-compare.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-property-compare.h all: make use of new header file "nm-default.h" 2015-08-05 15:32:40 +02:00
nm-setting-8021x.c all: replace _nm_utils_string_in_list() with g_strv_contains() 2016-06-17 12:25:33 +02:00
nm-setting-8021x.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-adsl.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-adsl.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-bluetooth.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-bluetooth.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-bond.c libnm-core: implement option matching for NMSettingBond 2016-03-29 18:10:05 +02:00
nm-setting-bond.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-bridge-port.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-bridge-port.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-bridge.c man,libnm-core: fix typos 2016-03-30 12:03:36 +02:00
nm-setting-bridge.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-cdma.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-cdma.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-connection.c device: extend MAC address handling including randomization for ethernet and wifi 2016-06-30 08:29:56 +02:00
nm-setting-connection.h libnm: add NMSettingConnection:stable-id property 2016-06-30 08:29:54 +02:00
nm-setting-dcb.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-dcb.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-generic.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-generic.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-gsm.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-gsm.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-infiniband.c man,libnm-core: fix typos 2016-03-30 12:03:36 +02:00
nm-setting-infiniband.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-ip-config.c libnm: fix comparing NMSettingIPConfig for address and route properties 2016-06-30 08:29:54 +02:00
nm-setting-ip-config.h libnm-core: add dns-priority to NMSettingIPConfig 2016-05-12 17:13:50 +02:00
nm-setting-ip-tunnel.c libnm-core: fix memory leak in nm-setting-ip-tunnel.c 2016-03-09 23:16:23 +01:00
nm-setting-ip-tunnel.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-ip4-config.c ifcfg-rh: add support for DNS priority 2016-05-12 17:13:50 +02:00
nm-setting-ip4-config.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-ip6-config.c setting-ip6-config: add token property 2016-05-30 16:32:06 +02:00
nm-setting-ip6-config.h setting-ip6-config: add token property 2016-05-30 16:32:06 +02:00
nm-setting-macvlan.c libnm-core: remove trailing quote from message in nm-setting-macvlan.c 2016-03-30 00:33:20 +02:00
nm-setting-macvlan.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-olpc-mesh.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-olpc-mesh.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-ppp.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-ppp.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-pppoe.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-pppoe.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-private.h libnm-core: allow strict and relaxed error behavior for _nm_setting_new_from_dbus() 2016-03-26 12:10:54 +01:00
nm-setting-serial.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-serial.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-team-port.c libnm-core: fix comparison of team configuration 2016-05-31 10:59:43 +02:00
nm-setting-team-port.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-team.c libnm-core: fix comparison of team configuration 2016-05-31 10:59:43 +02:00
nm-setting-team.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-tun.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-tun.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-vlan.c libnm-core: allow strict and relaxed error behavior for _nm_setting_new_from_dbus() 2016-03-26 12:10:54 +01:00
nm-setting-vlan.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-vpn.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-vpn.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-vxlan.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-vxlan.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-wimax.c all: cleanup includes and let "nm-default.h" include "config.h" 2016-02-19 17:53:25 +01:00
nm-setting-wimax.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-wired.c all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-setting-wired.h all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-setting-wireless-security.c all: replace _nm_utils_string_in_list() with g_strv_contains() 2016-06-17 12:25:33 +02:00
nm-setting-wireless-security.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-setting-wireless.c all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-setting-wireless.h all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-setting.c all: replace nm_unauto() by g_steal_pointer() 2016-05-12 14:28:44 +02:00
nm-setting.h libnm: add nm_setting_verify_secrets() and nm_connection_verify_secrets() 2015-11-20 10:35:10 +01:00
nm-simple-connection.c libnm-core: add _nm_simple_connection_new_from_dbus() function 2016-03-26 12:10:54 +01:00
nm-simple-connection.h docs: libnm: add doc comment to types 2016-05-05 17:01:57 +02:00
nm-utils-private.h device: extend MAC address handling including randomization for ethernet and wifi 2016-06-30 08:29:56 +02:00
nm-utils.c all: make MAC address randomization algorithm configurable 2016-06-30 08:32:50 +02:00
nm-utils.h libnm-core: add nm_utils_enum_get_values() 2015-12-01 17:39:40 +01:00
nm-version.h release: add version 1.4 macros 2016-04-05 22:22:58 +02:00
nm-vpn-dbus-interface.h dbus: remove the telepathy annotations 2016-04-05 14:37:51 +02:00
nm-vpn-editor-plugin.c libnm/vpn: add nm_vpn_editor_plugin_load_vt() 2016-06-15 15:01:12 +02:00
nm-vpn-editor-plugin.h libnm/vpn: add nm_vpn_editor_plugin_load_vt() 2016-06-15 15:01:12 +02:00
nm-vpn-plugin-info.c libnm/vpn: pass NMVpnPluginInfo to the NMVpnEditorPlugin instance 2016-06-15 10:32:32 +02:00
nm-vpn-plugin-info.h libnm/vpn: pass NMVpnPluginInfo to the NMVpnEditorPlugin instance 2016-06-15 10:32:32 +02:00