diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
index 3fc3146a7..7950c9b2e 100644
--- a/doc/dbus.doxygen
+++ b/doc/dbus.doxygen
@@ -43,6 +43,7 @@ registered in the bus with fi.w1.wpa_supplicant1 name.
ConfigFile | s | Configuration file path | No |
Create | b | Whether to create a new interface in the kernel | No |
Type | s | Interface type to create (sta or ap) | No |
+
Address | s | MAC address in colon-delimited format to be used in the created interface | No |
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index d2c78ecfa..83f46a9eb 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -774,6 +774,7 @@ DBusMessage * wpas_dbus_handler_create_interface(DBusMessage *message,
char *confname = NULL;
char *bridge_ifname = NULL;
bool create_iface = false;
+ u8 *if_addr = NULL;
enum wpa_driver_if_type if_type = WPA_IF_STATION;
dbus_message_iter_init(message, &iter);
@@ -826,6 +827,18 @@ DBusMessage * wpas_dbus_handler_create_interface(DBusMessage *message,
goto error;
}
wpa_dbus_dict_entry_clear(&entry);
+ } else if (os_strcmp(entry.key, "Address") == 0 &&
+ entry.type == DBUS_TYPE_STRING) {
+ if_addr = os_malloc(ETH_ALEN);
+ if (if_addr == NULL) {
+ wpa_dbus_dict_entry_clear(&entry);
+ goto oom;
+ }
+ if (hwaddr_aton(entry.str_value, if_addr)) {
+ wpa_dbus_dict_entry_clear(&entry);
+ goto error;
+ }
+ wpa_dbus_dict_entry_clear(&entry);
} else {
wpa_dbus_dict_entry_clear(&entry);
goto error;
@@ -855,7 +868,7 @@ DBusMessage * wpas_dbus_handler_create_interface(DBusMessage *message,
__func__, ifname);
if (!global->ifaces ||
wpa_drv_if_add(global->ifaces, if_type, ifname,
- NULL, NULL, NULL, mac_addr,
+ if_addr, NULL, NULL, mac_addr,
NULL) < 0) {
reply = wpas_dbus_error_unknown_error(
message,
@@ -895,6 +908,7 @@ out:
os_free(ifname);
os_free(confname);
os_free(bridge_ifname);
+ os_free(if_addr);
return reply;
error: