[libvirt] [PATCHv2 6/7] interface: Implement driver methods for network config transaction API
Daniel Veillard
veillard at redhat.com
Tue May 24 06:18:41 UTC 2011
On Thu, May 19, 2011 at 04:51:28PM -0400, Laine Stump wrote:
> From: Michal Privoznik <mprivozn at redhat.com>
>
> This is the functionality at the end of the libvirt part of the call
> chain - for each function, the corresponding netcf API is called.
> ---
> configure.ac | 5 +++
> src/interface/netcf_driver.c | 76 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 81 insertions(+), 0 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 8db3226..dbec54c 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1491,6 +1491,11 @@ if test "$with_netcf" = "yes" || test "$with_netcf" = "check"; then
> if test "$with_netcf" = "yes" ; then
> AC_DEFINE_UNQUOTED([WITH_NETCF], 1,
> [whether libnetcf is available to configure physical host network interfaces])
> + AC_CHECK_LIB([netcf], [ncf_change_begin], [netcf_transactions=1], [netcf_transactions=0])
> + if test "$netcf_transactions" = "1" ; then
> + AC_DEFINE_UNQUOTED([HAVE_NETCF_TRANSACTIONS], ["1"],
> + [we have sufficiently new version of netcf for transaction network API])
> + fi
> fi
> fi
> AM_CONDITIONAL([WITH_NETCF], [test "$with_netcf" = "yes"])
> diff --git a/src/interface/netcf_driver.c b/src/interface/netcf_driver.c
> index d5b401a..c94cbd5 100644
> --- a/src/interface/netcf_driver.c
> +++ b/src/interface/netcf_driver.c
> @@ -540,6 +540,77 @@ cleanup:
> return ret;
> }
>
> +#ifdef HAVE_NETCF_TRANSACTIONS
> +static int interfaceChangeBegin(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + struct interface_driver *driver = conn->interfacePrivateData;
> + int ret;
> +
> + virCheckFlags(0, -1); /* currently flags must be 0 */
> +
> + interfaceDriverLock(driver);
> +
> + ret = ncf_change_begin(driver->netcf, 0);
> + if (ret < 0) {
> + const char *errmsg, *details;
> + int errcode = ncf_error(driver->netcf, &errmsg, &details);
> + interfaceReportError(netcf_to_vir_err(errcode),
> + _("failed to begin transaction (netcf: %s - %s)"),
> + errmsg, details ? details : "");
> + }
> +
> + interfaceDriverUnlock(driver);
> + return ret;
> +}
> +
> +static int interfaceChangeCommit(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + struct interface_driver *driver = conn->interfacePrivateData;
> + int ret;
> +
> + virCheckFlags(0, -1); /* currently flags must be 0 */
> +
> + interfaceDriverLock(driver);
> +
> + ret = ncf_change_commit(driver->netcf, 0);
> + if (ret < 0) {
> + const char *errmsg, *details;
> + int errcode = ncf_error(driver->netcf, &errmsg, &details);
> + interfaceReportError(netcf_to_vir_err(errcode),
> + _("failed to begin transaction (netcf: %s - %s)"),
> + errmsg, details ? details : "");
> + }
> +
> + interfaceDriverUnlock(driver);
> + return ret;
> +}
> +
> +static int interfaceChangeRollback(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + struct interface_driver *driver = conn->interfacePrivateData;
> + int ret;
> +
> + virCheckFlags(0, -1); /* currently flags must be 0 */
> +
> + interfaceDriverLock(driver);
> +
> + ret = ncf_change_rollback(driver->netcf, 0);
> + if (ret < 0) {
> + const char *errmsg, *details;
> + int errcode = ncf_error(driver->netcf, &errmsg, &details);
> + interfaceReportError(netcf_to_vir_err(errcode),
> + _("failed to begin transaction (netcf: %s - %s)"),
> + errmsg, details ? details : "");
> + }
> +
> + interfaceDriverUnlock(driver);
> + return ret;
> +}
> +#endif /* HAVE_NETCF_TRANSACTIONS */
> +
> static virInterfaceDriver interfaceDriver = {
> "Interface",
> .open = interfaceOpenInterface, /* 0.7.0 */
> @@ -556,6 +627,11 @@ static virInterfaceDriver interfaceDriver = {
> .interfaceCreate = interfaceCreate, /* 0.7.0 */
> .interfaceDestroy = interfaceDestroy, /* 0.7.0 */
> .interfaceIsActive = interfaceIsActive, /* 0.7.3 */
> +#ifdef HAVE_NETCF_TRANSACTIONS
> + .interfaceChangeBegin = interfaceChangeBegin, /* 0.9.2 */
> + .interfaceChangeCommit = interfaceChangeCommit, /* 0.9.2 */
> + .interfaceChangeRollback = interfaceChangeRollback, /* 0.9.2 */
> +#endif /* HAVE_NETCF_TRANSACTIONS */
> };
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list