On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
---
src/ch/ch_alias.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
src/ch/ch_alias.h | 3 +++
2 files changed, 50 insertions(+)
diff --git a/src/ch/ch_alias.c b/src/ch/ch_alias.c
index bdf8452a3c..dad297b20c 100644
--- a/src/ch/ch_alias.c
+++ b/src/ch/ch_alias.c
@@ -18,11 +18,13 @@
#include <config.h>
+#include "virstring.h"
#include "virutil.h"
#include "ch_alias.h"
#define VIR_FROM_THIS VIR_FROM_CH
+#define CH_NET_ID_PREFIX "net"
int chAssignDeviceDiskAlias(virDomainDiskDef *disk)
{
@@ -47,6 +49,47 @@ int chAssignDeviceDiskAlias(virDomainDiskDef *disk)
return 0;
}
+/**
+ * Extract the index number of some device alias
+ */
+static
+int chDomainDeviceAliasIndex(const virDomainDeviceInfo *info,
+ const char *prefix)
+{
+ int idx;
+
+ if (!info->alias)
+ return -1;
+ if (!STRPREFIX(info->alias, prefix))
+ return -1;
+
+ if (virStrToLong_i(info->alias + strlen(prefix), NULL, 10, &idx) < 0)
+ return -1;
+
+ return idx;
+}
+
+void chAssignDeviceNetAlias(virDomainDef *def, virDomainNetDef *net)
+{
+ size_t idx = 0;
+ size_t i;
+
+ if (net->info.alias) {
+ return;
+ }
+
+ for (i = 0; i < def->nnets; i++) {
+ int thisidx;
+
+ if ((thisidx = chDomainDeviceAliasIndex(&def->nets[i]->info, CH_NET_ID_PREFIX)) < 0)
+ continue;
+ if (thisidx >= idx)
+ idx = thisidx + 1;
+ }
+
+ net->info.alias = g_strdup_printf("%s%lu", CH_NET_ID_PREFIX, idx);
+}
+
int chAssignDeviceAliases(virDomainDef *def)
{
size_t i;
@@ -56,6 +99,10 @@ int chAssignDeviceAliases(virDomainDef *def)
return -1;
}
+ for (i = 0; i < def->nnets; i++) {
+ chAssignDeviceNetAlias(def, def->nets[i]);
+ }
+
/* TODO: handle other devices */
return 0;
diff --git a/src/ch/ch_alias.h b/src/ch/ch_alias.h
index 81e20c27c7..b9a12fac11 100644
--- a/src/ch/ch_alias.h
+++ b/src/ch/ch_alias.h
@@ -23,5 +23,8 @@
int
chAssignDeviceDiskAlias(virDomainDiskDef *disk);
+void
+chAssignDeviceNetAlias(virDomainDef *def, virDomainNetDef *net);
+
int
chAssignDeviceAliases(virDomainDef *def);
--
2.51.0