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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list