
On 2011年12月29日 15:33, Hu Tao wrote:
Add a function virDomainNetFind to find a domain's net def. --- src/conf/domain_conf.c | 39 +++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2897b4a..7fa4adb 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(device, def->nets[i]->ifname)) {
Oh, I missed this, this can cause libvirtd to crash if def->nets[i]->ifname is NULL. s/STREQ/STREQ_NULLABLE/ No need to post v5, I will squash the change in when pushing. Regards, Osier