[libvirt] [PATCH] 1/3 add support for netcf XML import and export
Daniel P. Berrange
berrange at redhat.com
Wed Jul 15 10:22:43 UTC 2009
On Wed, Jul 15, 2009 at 11:15:25AM +0200, Daniel Veillard wrote:
> +static int
> +virInterfaceDefParseBasicAttrs(virConnectPtr conn, virInterfaceDefPtr def,
> + xmlXPathContextPtr ctxt) {
> + char *tmp;
> + unsigned long mtu;
> + int ret;
> +
> + tmp = virXPathString(conn, "string(./@name)", ctxt);
> + if (tmp == NULL) {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + "%s", _("interface has no name"));
> + return(-1);
> + }
> + def->name = tmp;
> +
> + ret = virXPathULong(conn, "string(./mtu/@size)", ctxt, &mtu);
> + if ((ret == -2) || ((ret == 0) && (mtu > 100000))) {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + "%s", _("interface mtu value is improper"));
> + } else if (ret == 0) {
> + def->mtu = (unsigned int) mtu;
> + }
> + return(0);
> +}
I think you need to return '-1' in that second error case.
> +static int
> +virInterfaceDefParseStartMode(virConnectPtr conn, virInterfaceDefPtr def,
> + xmlXPathContextPtr ctxt) {
> + char *tmp;
> +
> + tmp = virXPathString(conn, "string(./start/@mode)", ctxt);
> + if (tmp == NULL) {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + "%s", _("interface misses the start mode attribute"));
> + return(-1);
> + }
> + if (STREQ(tmp, "onboot"))
> + def->startmode = VIR_INTERFACE_START_ONBOOT;
> + else if (STREQ(tmp, "hotplug"))
> + def->startmode = VIR_INTERFACE_START_HOTPLUG;
> + else if (STREQ(tmp, "none"))
> + def->startmode = VIR_INTERFACE_START_NONE;
It'd be nice to use VIR_ENUM_DECL/IMPL for these strings<->enum
conversions
> + else {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + _("unknown interface startmode %s"), tmp);
> + VIR_FREE(tmp);
> + return(-1);
> + }
> + VIR_FREE(tmp);
> + return(0);
> +}
> +
> +static int
> +virInterfaceDefParseBondMode(virConnectPtr conn, xmlXPathContextPtr ctxt) {
> + char *tmp;
> + int ret = 0;
> +
> + tmp = virXPathString(conn, "string(./@mode)", ctxt);
> + if (tmp == NULL)
> + return(VIR_INTERFACE_BOND_NONE);
> + if (STREQ(tmp, "balance-rr"))
> + ret = VIR_INTERFACE_BOND_BALRR;
> + else if (STREQ(tmp, "active-backup"))
> + ret = VIR_INTERFACE_BOND_ABACKUP;
> + else if (STREQ(tmp, "balance-xor"))
> + ret = VIR_INTERFACE_BOND_BALXOR;
> + else if (STREQ(tmp, "broadcast"))
> + ret = VIR_INTERFACE_BOND_BCAST;
> + else if (STREQ(tmp, "802.3ad"))
> + ret = VIR_INTERFACE_BOND_8023AD;
> + else if (STREQ(tmp, "balance-tlb"))
> + ret = VIR_INTERFACE_BOND_BALTLB;
> + else if (STREQ(tmp, "balance-alb"))
> + ret = VIR_INTERFACE_BOND_BALALB;
Likewise this could be done with a VIR_ENUM
> + else {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + _("unknown bonding mode %s"), tmp);
> + ret = -1;
> + }
> + VIR_FREE(tmp);
> + return(ret);
> +}
> +
> +static int
> +virInterfaceDefParseBondMiiCarrier(virConnectPtr conn, xmlXPathContextPtr ctxt) {
> + char *tmp;
> + int ret = 0;
> +
> + tmp = virXPathString(conn, "string(./miimon/@carrier)", ctxt);
> + if (tmp == NULL)
> + return(VIR_INTERFACE_BOND_MII_NONE);
> + if (STREQ(tmp, "ioctl"))
> + ret = VIR_INTERFACE_BOND_MII_IOCTL;
> + else if (STREQ(tmp, "netif"))
> + ret = VIR_INTERFACE_BOND_MII_NETIF;
> + else {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + _("unknown mii bonding carrier %s"), tmp);
> + ret = -1;
> + }
> + VIR_FREE(tmp);
> + return(ret);
> +}
> +
> +static int
> +virInterfaceDefParseBondArpValid(virConnectPtr conn, xmlXPathContextPtr ctxt) {
> + char *tmp;
> + int ret = 0;
> +
> + tmp = virXPathString(conn, "string(./arpmon/@validate)", ctxt);
> + if (tmp == NULL)
> + return(VIR_INTERFACE_BOND_ARP_NONE);
> + if (STREQ(tmp, "active"))
> + ret = VIR_INTERFACE_BOND_ARP_ACTIVE;
> + else if (STREQ(tmp, "backup"))
> + ret = VIR_INTERFACE_BOND_ARP_BACKUP;
> + else if (STREQ(tmp, "all"))
> + ret = VIR_INTERFACE_BOND_ARP_ALL;
> + else {
> + virInterfaceReportError(conn, VIR_ERR_XML_ERROR,
> + _("unknown arp bonding validate %s"), tmp);
> + ret = -1;
> + }
> + VIR_FREE(tmp);
> + return(ret);
> +}
And these two....
Aside from optimizing to use more VIR_ENUMs the code all looks good
to me, and i didnt' spot any obvious leaks/errors.
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list