util: mdev: Introduce virMediatedDeviceTypeReadAttrs getter

This should serve as a replacement for the existing udevFillMdevType
which is responsible for fetching the device type's attributes from the
sysfs interface. The problem with the existing solution is that it's
tied to the udev backend.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
Erik Skultety 2018-01-23 09:55:52 +01:00
parent c3faa92a1b
commit 3545cbef7f
3 changed files with 40 additions and 0 deletions

View File

@ -2182,6 +2182,7 @@ virMediatedDeviceModelTypeToString;
virMediatedDeviceNew;
virMediatedDeviceSetUsedBy;
virMediatedDeviceTypeFree;
virMediatedDeviceTypeReadAttrs;

View File

@ -496,3 +496,37 @@ virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type)
VIR_FREE(type->device_api);
VIR_FREE(type);
}
int
virMediatedDeviceTypeReadAttrs(const char *sysfspath,
virMediatedDeviceTypePtr *type)
{
int ret = -1;
virMediatedDeviceTypePtr tmp = NULL;
#define MDEV_GET_SYSFS_ATTR(attr, dst, cb) \
do { \
if (cb(dst, "%s/%s", sysfspath, attr) < 0) \
goto cleanup; \
} while (0)
if (VIR_ALLOC(tmp) < 0)
goto cleanup;
if (VIR_STRDUP(tmp->id, last_component(sysfspath)) < 0)
goto cleanup;
MDEV_GET_SYSFS_ATTR("name", &tmp->name, virFileReadValueString);
MDEV_GET_SYSFS_ATTR("device_api", &tmp->device_api, virFileReadValueString);
MDEV_GET_SYSFS_ATTR("available_instances", &tmp->available_instances,
virFileReadValueUint);
#undef MDEV_GET_SYSFS_ATTR
VIR_STEAL_PTR(*type, tmp);
ret = 0;
cleanup:
virMediatedDeviceTypeFree(tmp);
return ret;
}

View File

@ -129,4 +129,9 @@ virMediatedDeviceListMarkDevices(virMediatedDeviceListPtr dst,
void
virMediatedDeviceTypeFree(virMediatedDeviceTypePtr type);
int
virMediatedDeviceTypeReadAttrs(const char *sysfspath,
virMediatedDeviceTypePtr *type);
#endif /* __VIR_MDEV_H__ */