mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Add driver API for global startup/shutdown/reload hooks
This commit is contained in:
15
src/driver.h
15
src/driver.h
@@ -322,6 +322,20 @@ struct _virNetworkDriver {
|
||||
virDrvNetworkSetAutostart networkSetAutostart;
|
||||
};
|
||||
|
||||
typedef int (*virDrvStateInitialize) (void);
|
||||
typedef int (*virDrvStateCleanup) (void);
|
||||
typedef int (*virDrvStateReload) (void);
|
||||
typedef int (*virDrvStateActive) (void);
|
||||
|
||||
typedef struct _virStateDriver virStateDriver;
|
||||
typedef virStateDriver *virStateDriverPtr;
|
||||
|
||||
struct _virStateDriver {
|
||||
virDrvStateInitialize initialize;
|
||||
virDrvStateCleanup cleanup;
|
||||
virDrvStateReload reload;
|
||||
virDrvStateActive active;
|
||||
};
|
||||
|
||||
/*
|
||||
* Registration
|
||||
@@ -330,6 +344,7 @@ struct _virNetworkDriver {
|
||||
*/
|
||||
int virRegisterDriver(virDriverPtr);
|
||||
int virRegisterNetworkDriver(virNetworkDriverPtr);
|
||||
int virRegisterStateDriver(virStateDriverPtr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -220,6 +220,15 @@ int virFreeNetwork (virConnectPtr conn,
|
||||
#define virGetDomain(c,n,u) __virGetDomain((c),(n),(u))
|
||||
#define virGetNetwork(c,n,u) __virGetNetwork((c),(n),(u))
|
||||
|
||||
int __virStateInitialize(void);
|
||||
int __virStateCleanup(void);
|
||||
int __virStateReload(void);
|
||||
int __virStateActive(void);
|
||||
#define virStateInitialize() __virStateInitialize()
|
||||
#define virStateCleanup() __virStateCleanup()
|
||||
#define virStateReload() __virStateReload()
|
||||
#define virStateActive() __virStateActive()
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
@@ -40,6 +40,8 @@ static virDriverPtr virDriverTab[MAX_DRIVERS];
|
||||
static int virDriverTabCount = 0;
|
||||
static virNetworkDriverPtr virNetworkDriverTab[MAX_DRIVERS];
|
||||
static int virNetworkDriverTabCount = 0;
|
||||
static virStateDriverPtr virStateDriverTab[MAX_DRIVERS];
|
||||
static int virStateDriverTabCount = 0;
|
||||
static int initialized = 0;
|
||||
|
||||
/**
|
||||
@@ -240,6 +242,79 @@ virRegisterDriver(virDriverPtr driver)
|
||||
return virDriverTabCount++;
|
||||
}
|
||||
|
||||
/**
|
||||
* virRegisterStateDriver:
|
||||
* @driver: pointer to a driver block
|
||||
*
|
||||
* Register a virtualization driver
|
||||
*
|
||||
* Returns the driver priority or -1 in case of error.
|
||||
*/
|
||||
int
|
||||
virRegisterStateDriver(virStateDriverPtr driver)
|
||||
{
|
||||
if (virInitialize() < 0)
|
||||
return -1;
|
||||
|
||||
if (driver == NULL) {
|
||||
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
if (virStateDriverTabCount >= MAX_DRIVERS) {
|
||||
virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
virStateDriverTab[virStateDriverTabCount] = driver;
|
||||
return virStateDriverTabCount++;
|
||||
}
|
||||
|
||||
int __virStateInitialize(void) {
|
||||
int i, ret = 0;
|
||||
|
||||
if (virInitialize() < 0)
|
||||
return -1;
|
||||
|
||||
for (i = 0 ; i < virStateDriverTabCount ; i++) {
|
||||
if (virStateDriverTab[i]->initialize() < 0)
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __virStateCleanup(void) {
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0 ; i < virStateDriverTabCount ; i++) {
|
||||
if (virStateDriverTab[i]->cleanup() < 0)
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __virStateReload(void) {
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0 ; i < virStateDriverTabCount ; i++) {
|
||||
if (virStateDriverTab[i]->reload() < 0)
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __virStateActive(void) {
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0 ; i < virStateDriverTabCount ; i++) {
|
||||
if (virStateDriverTab[i]->active())
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* virGetVersion:
|
||||
* @libVer: return value for the library version (OUT)
|
||||
|
||||
@@ -111,5 +111,10 @@
|
||||
|
||||
__virEventRegisterImpl;
|
||||
|
||||
__virStateInitialize;
|
||||
__virStateCleanup;
|
||||
__virStateReload;
|
||||
__virStateActive;
|
||||
|
||||
local: *;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user