diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2897b4ae6f..216a7078df 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13726,3 +13726,42 @@ virDomainGraphicsListenSetNetwork(virDomainGraphicsDefPtr def, return 0; } + +/** + * virDomainNetFind: + * @def: domain's def + * @device: could be the interface name or MAC address + * + * Finds a domain's net def, given the interface name or MAC address + * + * Returns a pointer to the net def or NULL if not found. + */ +virDomainNetDefPtr +virDomainNetFind(virDomainDefPtr def, const char *device) +{ + bool isMac = false; + virDomainNetDefPtr net = NULL; + unsigned char mac[VIR_MAC_BUFLEN]; + int i; + + if (virParseMacAddr(device, mac) == 0) + isMac = true; + + if (isMac) { + for (i = 0; i < def->nnets; i++) { + if (memcmp(mac, def->nets[i]->mac, VIR_MAC_BUFLEN) == 0) { + net = def->nets[i]; + break; + } + } + } else { /* ifname */ + for (i = 0; i < def->nnets; i++) { + if (STREQ_NULLABLE(device, def->nets[i]->ifname)) { + net = def->nets[i]; + break; + } + } + } + + return net; +} diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 1f6e4420e5..9bcdb3a84a 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2033,4 +2033,7 @@ VIR_ENUM_DECL(virDomainTimerTickpolicy) VIR_ENUM_DECL(virDomainTimerMode) VIR_ENUM_DECL(virDomainStartupPolicy) + +virDomainNetDefPtr virDomainNetFind(virDomainDefPtr def, + const char *device); #endif /* __DOMAIN_CONF_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6fa90936c9..216a5a51cc 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -308,6 +308,7 @@ virDomainDiskSnapshotTypeFromString; virDomainDiskSnapshotTypeToString; virDomainDiskTypeFromString; virDomainDiskTypeToString; +virDomainNetFind; virDomainFSDefFree; virDomainFSTypeFromString; virDomainFSTypeToString;