On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
---
po/POTFILES | 1 +
src/ch/ch_alias.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
src/ch/ch_alias.h | 27 ++++++++++++++++++++
src/ch/meson.build | 2 ++
4 files changed, 92 insertions(+)
create mode 100644 src/ch/ch_alias.c
create mode 100644 src/ch/ch_alias.h
diff --git a/po/POTFILES b/po/POTFILES
index dc7293d0cd..181a36f541 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -19,6 +19,7 @@ src/bhyve/bhyve_firmware.c
src/bhyve/bhyve_monitor.c
src/bhyve/bhyve_parse_command.c
src/bhyve/bhyve_process.c
+src/ch/ch_alias.c
src/ch/ch_conf.c
src/ch/ch_domain.c
src/ch/ch_driver.c
diff --git a/src/ch/ch_alias.c b/src/ch/ch_alias.c
new file mode 100644
index 0000000000..bdf8452a3c
--- /dev/null
+++ b/src/ch/ch_alias.c
@@ -0,0 +1,62 @@
+/*
+ * ch_alias.c: CH device alias handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "virutil.h"
+
+#include "ch_alias.h"
+
+#define VIR_FROM_THIS VIR_FROM_CH
+
+int chAssignDeviceDiskAlias(virDomainDiskDef *disk)
+{
+ const char *prefix = virDomainDiskBusTypeToString(disk->bus);
+ int idx = -1;
+
+ if (disk->info.alias) {
+ return 0;
+ }
+
+ idx = virDiskNameToIndex(disk->dst);
+
+ if (idx < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Could not get index of disk '%1$s'"),
+ disk->dst);
+ return -1;
+ }
+
+ disk->info.alias = g_strdup_printf("%s-disk%d", prefix, idx);
+
+ return 0;
+}
+
+int chAssignDeviceAliases(virDomainDef *def)
+{
+ size_t i;
+
+ for (i = 0; i < def->ndisks; i++) {
+ if (chAssignDeviceDiskAlias(def->disks[i]) < 0)
+ return -1;
+ }
+
+ /* TODO: handle other devices */
+
+ return 0;
+}
diff --git a/src/ch/ch_alias.h b/src/ch/ch_alias.h
new file mode 100644
index 0000000000..81e20c27c7
--- /dev/null
+++ b/src/ch/ch_alias.h
@@ -0,0 +1,27 @@
+/*
+ * ch_alias.h: CH device alias handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "domain_conf.h"
+
+int
+chAssignDeviceDiskAlias(virDomainDiskDef *disk);
+
+int
+chAssignDeviceAliases(virDomainDef *def);
diff --git a/src/ch/meson.build b/src/ch/meson.build
index bba7ee90ee..b3e9c03832 100644
--- a/src/ch/meson.build
+++ b/src/ch/meson.build
@@ -19,6 +19,8 @@ ch_driver_sources = [
'ch_hostdev.h',
'ch_hotplug.c',
'ch_hotplug.h',
+ 'ch_alias.c',
+ 'ch_alias.h',
]
driver_source_files += files(ch_driver_sources)
--
2.50.1