[libvirt] [RFC][PATCH 6/7] interface: Implement the driver methods
Laine Stump
laine at laine.org
Thu May 19 06:47:16 UTC 2011
On 05/09/2011 03:28 PM, Michal Privoznik wrote:
> ---
> configure.ac | 5 +++++
> src/interface/netcf_driver.c | 36 ++++++++++++++++++++++++++++++++++++
> 2 files changed, 41 insertions(+), 0 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index dcec371..041d738 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1483,6 +1483,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_start], [new_netcf=1], [new_netcf=0])
I've changed the name, as danpb suggested, to "ncf_change_begin".
Also, it might be more future-proof to use something more specific than
"new_netcf". Maybe netcf_transactions, or something like that.
> + if test "$new_netcf" = "1" ; then
> + AC_DEFINE_UNQUOTED([HAVE_NCF_CHANGE_START], ["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 fc7979c..082c4eb 100644
> --- a/src/interface/netcf_driver.c
> +++ b/src/interface/netcf_driver.c
> @@ -30,6 +30,7 @@
> #include "netcf_driver.h"
> #include "interface_conf.h"
> #include "memory.h"
> +#include "logging.h"
>
> #define VIR_FROM_THIS VIR_FROM_INTERFACE
>
> @@ -540,6 +541,35 @@ cleanup:
> return ret;
> }
>
> +#ifdef HAVE_NCF_CHANGE_START
> +static int interfaceChangeStart(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + VIR_DEBUG0("A long time ago in a galaxy far, far away....");
> + /* Nothing here yet */
Actually, you can put the function call in here even before you have a
version of netcf that has it. This one will look something like this:
static int interfaceChangeStart(virConnectPtr conn, unsigned int flags)
{
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;
}
The others are identical except for function name.
> +
> + return 0;
> +}
> +
> +static int interfaceChangeCommit(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + VIR_DEBUG0("I am fish");
> + /* Nothing here yet */
> +
> + return 0;
> +}
> +
> +static int interfaceChangeRollback(virConnectPtr conn ATTRIBUTE_UNUSED,
> + unsigned int flags ATTRIBUTE_UNUSED)
> +{
> + VIR_DEBUG0("Hello, IT. Have you tried turning it off and on again?");
> + /* Nothing here yet */
> +
> + return 0;
> +}
> +#endif /* HAVE_NCF_CHANGE_START */
> +
> static virInterfaceDriver interfaceDriver = {
> "Interface",
> interfaceOpenInterface, /* open */
> @@ -556,9 +586,15 @@ static virInterfaceDriver interfaceDriver = {
> interfaceCreate, /* interfaceCreate */
> interfaceDestroy, /* interfaceDestroy */
> interfaceIsActive, /* interfaceIsActive */
> +#ifdef HAVE_NCF_CHANGE_START
> + interfaceChangeStart, /* interfaceChangeStart */
> + interfaceChangeCommit, /* interfaceChangeCommit */
> + interfaceChangeRollback, /* interfaceChangeRollback */
> +#else
> NULL, /* interfaceChangeStart */
> NULL, /* interfaceChangeCommit */
> NULL, /* interfaceChangeRollback */
> +#endif /* HAVE_NCF_CHANGE_START */
> };
>
> int interfaceRegister(void) {
More information about the libvir-list
mailing list