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