I think I understand the mechanism of the VI API
and the way esx_vi.c is using it
the surounding is a bit more complex for me
so
can you provide the framework?
I mean
can you put in the esx_interface_driver.c and h
and the registration etc...
and also putting it all into the auto make mechanism(I should learn this sometime...)
I will put in the content into the functions
for the time being I am registering the esx_driver as the interface driver
so I can get a fill of it
something like that:
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 8d1af71..677f778 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -3018,7 +3018,89 @@ esxDomainMigrateFinish(virConnectPtr dconn, const char *dname,
return esxDomainLookupByName(dconn, dname);
}
+struct interface_driver
+{
+ virMutex lock;
+};
+
+static virDrvOpenStatus esxInterfaceOpenInterface(virConnectPtr conn,
+ virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+ int flags ATTRIBUTE_UNUSED)
+{
+ struct interface_driver *driverState;
+
+ if (VIR_ALLOC(driverState) < 0)
+ {
+ virReportOOMError(conn);
+ goto alloc_error;
+ }
+
+ /* initialize non-0 stuff in driverState */
+ if (virMutexInit(&driverState->lock) < 0)
+ {
+ /* what error to report? */
+ goto mutex_error;
+ }
+
+
+ conn->interfacePrivateData = driverState;
+ return 0;
+mutex_error:
+ VIR_FREE(driverState);
+alloc_error:
+ return -1;
+}
+
+static int esxInterfaceCloseInterface(virConnectPtr conn)
+{
+
+ if (conn->interfacePrivateData != NULL)
+ {
+ struct interface_driver *driver = conn->interfacePrivateData;
+ /* destroy lock */
+ virMutexDestroy(&driver->lock);
+ /* free driver state */
+ VIR_FREE(driver);
+ }
+ conn->interfacePrivateData = NULL;
+ return 0;
+}
+
+static int esxInterfaceNumOfInterfaces(virConnectPtr conn)
+{
+ int count = 7;
+ return count;
+}
+
+static virInterfaceDriver esxInterfaceDriver = {
+ "EsxInterface",
+ esxInterfaceOpenInterface, /* open */
+ esxInterfaceCloseInterface, /* close */
+ esxInterfaceNumOfInterfaces, /* numOfInterfaces */
+ NULL, /* listInterfaces */
+ NULL, /* numOfInterfaces */
+ NULL, /* listInterfaces */
+ NULL, /* interfaceLookupByName */
+ NULL, /* interfaceLookupByMACSTring */
+ NULL, /* interfaceGetXMLDesc */
+ NULL, /* interfaceDefineXML */
+ NULL, /* interfaceUndefine */
+ NULL, /* interfaceCreate */
+ NULL, /* interfaceDestroy */
+#if 0
+ esxInterfaceListInterfaces, /* listInterfaces */
+ esxInterfaceNumOfDefinedInterfaces, /* numOfInterfaces */
+ esxInterfaceListDefinedInterfaces, /* listInterfaces */
+ esxInterfaceLookupByName, /* interfaceLookupByName */
+ esxInterfaceLookupByMACString, /* interfaceLookupByMACSTring */
+ esxInterfaceGetXMLDesc, /* interfaceGetXMLDesc */
+ esxInterfaceDefineXML, /* interfaceDefineXML */
+ esxInterfaceUndefine, /* interfaceUndefine */
+ esxInterfaceCreate, /* interfaceCreate */
+ esxInterfaceDestroy, /* interfaceDestroy */
+#endif
+};
static virDriver esxDriver = {
VIR_DRV_ESX,
@@ -3096,6 +3178,7 @@ int
esxRegister(void)
{
virRegisterDriver(&esxDriver);
+ virRegisterInterfaceDriver(&esxInterfaceDriver);
return 0;
}
________________________________
From: Matthias Bolte <matthias.bolte(a)googlemail.com>
To: Shahar Klein <shaharklein(a)yahoo.com>
Cc: Chris Lalancette <clalance(a)redhat.com>; libvir-list(a)redhat.com
Sent: Wednesday, September 9, 2009 11:37:17 AM
Subject: Re: [libvirt] Interface driver and ESX support
2009/9/9 Shahar Klein <shaharklein(a)yahoo.com>:
Let me rephrase my question : )
In the current libvirt infrastructure I can do a lot of things with libvirt
and a remote ESX node
I can list all the guests
I can suspend a guest
I can get a lot of node info
and much more....
can I (for example)
1. add NIC to a guest domain
The attach/detach device driver functions aren't implemented yet, but
that's on my todo list.
2. list all the physical interfaces on a node
The VI API contains methods and types to do this. It requires a new
interface driver as Chris already said. This is not implemented yet,
but that's on my todo list.
If not - what do I need to develop
should I expand the current driver
or
should I need to develop a new interface driver(like netcf)
or
maybe I can assign the current esx driver as the interface driver and expand
it to handle the relvant requests
10x again
Shahar
The basic question is: How urgent is this for you? Do you need it now
or can you wait some time until I implemented it?
PS: I just finished the implementation of the driver function for
virDomainDefineXML(). I need to cleanup the patches a bit and will
post them by the end of the week, depends on how fast I can get done
some other urgent, university related work.