diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl index 8a0fa7a9368d1c7af3d49c5a1d2746a52a7534ac..b0d1f0fcfe83bf7b41bab5ff408267afd545fc01 100755 --- a/docs/hvsupport.pl +++ b/docs/hvsupport.pl @@ -27,7 +27,7 @@ my %groupheaders = ( my @srcs; find({ wanted => sub { - if (m!$srcdir/.*/\w+_(driver|tmpl)\.c$!) { + if (m!$srcdir/.*/\w+_(driver|tmpl|monitor|hal|udev)\.c$!) { push @srcs, $_ if $_ !~ /vbox_driver\.c/; } }, no_chdir => 1}, $srcdir); @@ -142,7 +142,7 @@ open FILE, "<$drivertable" my %groups; my $ingrp; while (defined($line = )) { - if ($line =~ /struct _(vir\w*Driver)/) { + if ($line =~ /struct _(vir\w*(?:Driver|Monitor))/) { my $grp = $1; if ($grp ne "virStateDriver" && $grp ne "virStreamDriver") { @@ -150,7 +150,7 @@ while (defined($line = )) { $groups{$ingrp} = { apis => {}, drivers => {} }; } } elsif ($ingrp) { - if ($line =~ /^\s*virDrv(\w+)\s+(\w+);\s*$/) { + if ($line =~ /^\s*vir(?:Drv|DevMon)(\w+)\s+(\w+);\s*$/) { my $field = $2; my $name = $1; @@ -159,6 +159,8 @@ while (defined($line = )) { $api = "vir$name"; } elsif (exists $apis{"virConnect$name"}) { $api = "virConnect$name"; + } elsif (exists $apis{"virNode$name"}) { + $api = "virNode$name"; } else { die "driver $name does not have a public API"; } @@ -188,7 +190,17 @@ foreach my $src (@srcs) { $line =~ /^\s*(?:static\s+)?$grp\s+NAME\(\w+\)\s*=\s*{/) { $ingrp = $grp; $impl = $src; - $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; + + if ($impl =~ m,.*/node_device_(\w+)\.c,) { + $impl = $1; + } else { + $impl =~ s,.*/(\w+?)_((\w+)_)?(\w+)\.c,$1,; + } + + if ($groups{$ingrp}->{drivers}->{$impl}) { + die "Group $ingrp already contains $impl"; + } + $groups{$ingrp}->{drivers}->{$impl} = {}; } } @@ -206,7 +218,7 @@ foreach my $src (@srcs) { die "Driver method for $api is NULL in $src" if $meth eq "NULL"; if (!exists($groups{$ingrp}->{apis}->{$api})) { - die "Found unexpected driver $api in $ingrp\n"; + die "Found unexpected method $api in $ingrp\n"; } $groups{$ingrp}->{drivers}->{$impl}->{$api} = $vers; diff --git a/src/esx/esx_device_monitor.c b/src/esx/esx_device_monitor.c index 3fa63d5751257cb5810690026d27b815edf794b8..4bc8e7f48e897328abac56060b681d44ee2e18d0 100644 --- a/src/esx/esx_device_monitor.c +++ b/src/esx/esx_device_monitor.c @@ -66,18 +66,9 @@ esxDeviceClose(virConnectPtr conn) static virDeviceMonitor esxDeviceMonitor = { - "ESX", /* name */ - esxDeviceOpen, /* open */ - esxDeviceClose, /* close */ - NULL, /* numOfDevices */ - NULL, /* listDevices */ - NULL, /* deviceLookupByName */ - NULL, /* deviceGetXMLDesc */ - NULL, /* deviceGetParent */ - NULL, /* deviceNumOfCaps */ - NULL, /* deviceListCaps */ - NULL, /* deviceCreateXML */ - NULL, /* deviceDestroy */ + .name = "ESX", + .open = esxDeviceOpen, /* 0.7.6 */ + .close = esxDeviceClose, /* 0.7.6 */ }; diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index 8ec3e441820675e28f289846bd01facee7c6b8fc..842f903ad986cae40fb09f72601d493d89ee667e 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -122,9 +122,10 @@ void nodeDeviceUnlock(virDeviceMonitorStatePtr driver) virMutexUnlock(&driver->lock); } -static int nodeNumOfDevices(virConnectPtr conn, - const char *cap, - unsigned int flags ATTRIBUTE_UNUSED) +int +nodeNumOfDevices(virConnectPtr conn, + const char *cap, + unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = conn->devMonPrivateData; int ndevs = 0; @@ -143,7 +144,7 @@ static int nodeNumOfDevices(virConnectPtr conn, return ndevs; } -static int +int nodeListDevices(virConnectPtr conn, const char *cap, char **const names, int maxnames, @@ -179,8 +180,8 @@ nodeListDevices(virConnectPtr conn, } -static virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, - const char *name) +virNodeDevicePtr +nodeDeviceLookupByName(virConnectPtr conn, const char *name) { virDeviceMonitorStatePtr driver = conn->devMonPrivateData; virNodeDeviceObjPtr obj; @@ -251,8 +252,9 @@ out: } -static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, - unsigned int flags ATTRIBUTE_UNUSED) +char * +nodeDeviceGetXMLDesc(virNodeDevicePtr dev, + unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; virNodeDeviceObjPtr obj; @@ -281,7 +283,8 @@ cleanup: } -static char *nodeDeviceGetParent(virNodeDevicePtr dev) +char * +nodeDeviceGetParent(virNodeDevicePtr dev) { virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; virNodeDeviceObjPtr obj; @@ -314,7 +317,8 @@ cleanup: } -static int nodeDeviceNumOfCaps(virNodeDevicePtr dev) +int +nodeDeviceNumOfCaps(virNodeDevicePtr dev) { virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; virNodeDeviceObjPtr obj; @@ -344,7 +348,7 @@ cleanup: } -static int +int nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames) { virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; @@ -538,7 +542,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn) return dev; } -static virNodeDevicePtr +virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags ATTRIBUTE_UNUSED) @@ -591,7 +595,7 @@ cleanup: } -static int +int nodeDeviceDestroy(virNodeDevicePtr dev) { int ret = -1; @@ -651,21 +655,6 @@ out: return ret; } - -void registerCommonNodeFuncs(virDeviceMonitorPtr driver) -{ - driver->numOfDevices = nodeNumOfDevices; - driver->listDevices = nodeListDevices; - driver->deviceLookupByName = nodeDeviceLookupByName; - driver->deviceGetXMLDesc = nodeDeviceGetXMLDesc; - driver->deviceGetParent = nodeDeviceGetParent; - driver->deviceNumOfCaps = nodeDeviceNumOfCaps; - driver->deviceListCaps = nodeDeviceListCaps; - driver->deviceCreateXML = nodeDeviceCreateXML; - driver->deviceDestroy = nodeDeviceDestroy; -} - - int nodedevRegister(void) { #if defined(HAVE_HAL) && defined(HAVE_UDEV) /* Register only one of these two - they conflict */ diff --git a/src/node_device/node_device_driver.h b/src/node_device/node_device_driver.h index e583c2bc68603cc0d2fab19c0ba36844fdc54b12..08779b10aa57a667ee9d8984073a871bca79d110 100644 --- a/src/node_device/node_device_driver.h +++ b/src/node_device/node_device_driver.h @@ -53,8 +53,6 @@ int udevNodeRegister(void); void nodeDeviceLock(virDeviceMonitorStatePtr driver); void nodeDeviceUnlock(virDeviceMonitorStatePtr driver); -void registerCommonNodeFuncs(virDeviceMonitorPtr mon); - int nodedevRegister(void); # ifdef __linux__ @@ -86,4 +84,16 @@ int read_wwn_linux(int host, const char *file, char **wwn); # endif /* __linux__ */ +int nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags); +int nodeListDevices(virConnectPtr conn, const char *cap, char **const names, + int maxnames, unsigned int flags); +virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, const char *name); +char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags); +char *nodeDeviceGetParent(virNodeDevicePtr dev); +int nodeDeviceNumOfCaps(virNodeDevicePtr dev); +int nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames); +virNodeDevicePtr nodeDeviceCreateXML(virConnectPtr conn, + const char *xmlDesc, unsigned int flags); +int nodeDeviceDestroy(virNodeDevicePtr dev); + #endif /* __VIR_NODE_DEVICE_H__ */ diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c index 8df2875616f87a62a75a840bee9e237847e70897..a90e777d6bad1244d0c3a56cfaffaddb5e8a37f6 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -881,22 +881,30 @@ static int halNodeDrvClose(virConnectPtr conn ATTRIBUTE_UNUSED) static virDeviceMonitor halDeviceMonitor = { .name = "halDeviceMonitor", - .open = halNodeDrvOpen, - .close = halNodeDrvClose, + .open = halNodeDrvOpen, /* 0.5.0 */ + .close = halNodeDrvClose, /* 0.5.0 */ + .numOfDevices = nodeNumOfDevices, /* 0.5.0 */ + .listDevices = nodeListDevices, /* 0.5.0 */ + .deviceLookupByName = nodeDeviceLookupByName, /* 0.5.0 */ + .deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.5.0 */ + .deviceGetParent = nodeDeviceGetParent, /* 0.5.0 */ + .deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.5.0 */ + .deviceListCaps = nodeDeviceListCaps, /* 0.5.0 */ + .deviceCreateXML = nodeDeviceCreateXML, /* 0.6.5 */ + .deviceDestroy = nodeDeviceDestroy, /* 0.6.5 */ }; static virStateDriver halStateDriver = { .name = "HAL", - .initialize = halDeviceMonitorStartup, - .cleanup = halDeviceMonitorShutdown, - .reload = halDeviceMonitorReload, - .active = halDeviceMonitorActive, + .initialize = halDeviceMonitorStartup, /* 0.5.0 */ + .cleanup = halDeviceMonitorShutdown, /* 0.5.0 */ + .reload = halDeviceMonitorReload, /* 0.5.0 */ + .active = halDeviceMonitorActive, /* 0.5.0 */ }; int halNodeRegister(void) { - registerCommonNodeFuncs(&halDeviceMonitor); if (virRegisterDeviceMonitor(&halDeviceMonitor) < 0) return -1; return virRegisterStateDriver(&halStateDriver); diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 29e4bacb01f07bdbd06fc99642c525f1c9ff0e6d..8b9694e523ecf28435eef70c01d98b389d712be9 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1741,23 +1741,31 @@ static int udevNodeDrvClose(virConnectPtr conn) static virDeviceMonitor udevDeviceMonitor = { .name = "udevDeviceMonitor", - .open = udevNodeDrvOpen, - .close = udevNodeDrvClose, + .open = udevNodeDrvOpen, /* 0.7.3 */ + .close = udevNodeDrvClose, /* 0.7.3 */ + .numOfDevices = nodeNumOfDevices, /* 0.7.3 */ + .listDevices = nodeListDevices, /* 0.7.3 */ + .deviceLookupByName = nodeDeviceLookupByName, /* 0.7.3 */ + .deviceGetXMLDesc = nodeDeviceGetXMLDesc, /* 0.7.3 */ + .deviceGetParent = nodeDeviceGetParent, /* 0.7.3 */ + .deviceNumOfCaps = nodeDeviceNumOfCaps, /* 0.7.3 */ + .deviceListCaps = nodeDeviceListCaps, /* 0.7.3 */ + .deviceCreateXML = nodeDeviceCreateXML, /* 0.7.3 */ + .deviceDestroy = nodeDeviceDestroy, /* 0.7.3 */ }; static virStateDriver udevStateDriver = { .name = "udev", - .initialize = udevDeviceMonitorStartup, - .cleanup = udevDeviceMonitorShutdown, - .reload = udevDeviceMonitorReload, - .active = udevDeviceMonitorActive, + .initialize = udevDeviceMonitorStartup, /* 0.7.3 */ + .cleanup = udevDeviceMonitorShutdown, /* 0.7.3 */ + .reload = udevDeviceMonitorReload, /* 0.7.3 */ + .active = udevDeviceMonitorActive, /* 0.7.3 */ }; int udevNodeRegister(void) { VIR_DEBUG("Registering udev node device backend"); - registerCommonNodeFuncs(&udevDeviceMonitor); if (virRegisterDeviceMonitor(&udevDeviceMonitor) < 0) { return -1; }