/* * libosinfo: Required or recommended resources for an (guest) OS * * Copyright (C) 2009-2020 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #include #include #include #include #include #include "osinfo_resources_private.h" enum { PROP_0, PROP_ARCHITECTURE, PROP_CPU, PROP_N_CPUS, PROP_RAM, PROP_STORAGE, LAST_PROP }; static GParamSpec *properties[LAST_PROP]; /** * SECTION:osinfo_resources * @short_description: Required or recommended resources for an (guest) OS * @see_also: #OsinfoOs * * #OsinfoResources is an entity representing required or recommended resources * for an (guest) operating system. */ struct _OsinfoResourcesPrivate { gboolean inherit; }; G_DEFINE_TYPE_WITH_PRIVATE(OsinfoResources, osinfo_resources, OSINFO_TYPE_ENTITY); static void osinfo_resources_finalize(GObject *object) { /* Chain up to the parent class */ G_OBJECT_CLASS(osinfo_resources_parent_class)->finalize(object); } static void osinfo_resources_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsinfoResources *resources = OSINFO_RESOURCES(object); switch (property_id) { case PROP_ARCHITECTURE: g_value_set_string(value, osinfo_resources_get_architecture(resources)); break; case PROP_N_CPUS: g_value_set_int(value, osinfo_resources_get_n_cpus(resources)); break; case PROP_CPU: g_value_set_int64(value, osinfo_resources_get_cpu(resources)); break; case PROP_RAM: g_value_set_int64(value, osinfo_resources_get_ram(resources)); break; case PROP_STORAGE: g_value_set_int64(value, osinfo_resources_get_storage(resources)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void osinfo_resources_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsinfoResources *resources = OSINFO_RESOURCES(object); switch (property_id) { case PROP_ARCHITECTURE: osinfo_entity_set_param(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_ARCHITECTURE, g_value_get_string(value)); break; case PROP_N_CPUS: osinfo_resources_set_n_cpus(resources, g_value_get_int(value)); break; case PROP_CPU: osinfo_resources_set_cpu(resources, g_value_get_int64(value)); break; case PROP_RAM: osinfo_resources_set_ram(resources, g_value_get_int64(value)); break; case PROP_STORAGE: osinfo_resources_set_storage(resources, g_value_get_int64(value)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } /* Init functions */ static void osinfo_resources_class_init(OsinfoResourcesClass *klass) { GObjectClass *g_klass = G_OBJECT_CLASS(klass); g_klass->get_property = osinfo_resources_get_property; g_klass->set_property = osinfo_resources_set_property; g_klass->finalize = osinfo_resources_finalize; /** * OsinfoResources:architecture: * * The target hardware architecture to which these resources applies. */ properties[PROP_ARCHITECTURE] = g_param_spec_string("architecture", "ARCHITECTURE", _("CPU Architecture"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); /** * OsinfoResources:cpu: * * The CPU frequency in hertz (Hz). */ properties[PROP_CPU] = g_param_spec_int64("cpu", "CPU", _("CPU frequency in hertz (Hz)"), -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * OsinfoResources:n-cpus: * * The number of CPUs. */ properties[PROP_N_CPUS] = g_param_spec_int("n-cpus", "N-CPUs", _("Number of CPUs"), -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * OsinfoResources:ram: * * The amount of Random Access Memory (RAM) in bytes. */ properties[PROP_RAM] = g_param_spec_int64("ram", "RAM", _("Amount of Random Access Memory (RAM) in bytes"), -1, G_MAXINT64, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * OsinfoResources:storage: * * The amount of storage space in bytes. */ properties[PROP_STORAGE] = g_param_spec_int64("storage", "Storage", _("Amount of storage space in bytes"), -1, G_MAXINT64, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(g_klass, LAST_PROP, properties); } static void osinfo_resources_init(OsinfoResources *resources) { resources->priv = osinfo_resources_get_instance_private(resources); } OsinfoResources *osinfo_resources_new(const gchar *id, const gchar *architecture) { OsinfoResources *resources; resources = g_object_new(OSINFO_TYPE_RESOURCES, "id", id, "architecture", architecture, NULL); return resources; } /** * osinfo_resources_get_architecture: * @resources: an #OsinfoResources instance * * Retrieves the target hardware architecture to which @resources applies. Some * operating systems specify the same requirements and recommendations for all * architectures. In such cases, the string returned by this call will be * #OSINFO_ARCHITECTURE_ALL. * * Returns: (transfer none): the hardware architecture. */ const gchar *osinfo_resources_get_architecture(OsinfoResources *resources) { return osinfo_entity_get_param_value(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_ARCHITECTURE); } /** * osinfo_resources_get_n_cpus: * @resources: an #OsinfoResources instance * * Retrieves the number of CPUs. * * Returns: the number of CPUs, or -1. */ gint osinfo_resources_get_n_cpus(OsinfoResources *resources) { return (gint) osinfo_entity_get_param_value_int64 (OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_N_CPUS); } /** * osinfo_resources_get_cpu: * @resources: an #OsinfoResources instance * * Retrieves the CPU frequency in hertz (Hz). Divide the value by #OSINFO_MEGAHERTZ if * you need this value in megahertz (MHz). * * Returns: the CPU frequency, or -1. */ gint64 osinfo_resources_get_cpu(OsinfoResources *resources) { return osinfo_entity_get_param_value_int64 (OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_CPU); } /** * osinfo_resources_get_ram: * @resources: an #OsinfoResources instance * * Retrieves the amount of Random Access Memory (RAM) in bytes. Divide the value * by #OSINFO_MEBIBYTES if you need this value in mebibytes. * * Returns: the amount of RAM, or -1. */ gint64 osinfo_resources_get_ram(OsinfoResources *resources) { return osinfo_entity_get_param_value_int64 (OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_RAM); } /** * osinfo_resources_get_storage: * @resources: an #OsinfoResources instance * * Retrieves the amount of storage space in bytes. Divide the value by * #OSINFO_GIBIBYTES if you need this value in gibibytes. * * Returns: the amount of storage, or -1. */ gint64 osinfo_resources_get_storage(OsinfoResources *resources) { return osinfo_entity_get_param_value_int64 (OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_STORAGE); } /** * osinfo_resources_get_inherit * @resources: an #OsinfoResources instance * * Returns whether its values are inherited * * Mind that this method is *private*! */ gboolean osinfo_resources_get_inherit(OsinfoResources *resources) { g_return_val_if_fail(OSINFO_IS_RESOURCES(resources), FALSE); return resources->priv->inherit; } /** * osinfo_resources_set_n_cpus: * @resources: an #OsinfoResources instance * @n_cpus: the number of CPUs * * Sets the number of CPUs. */ void osinfo_resources_set_n_cpus(OsinfoResources *resources, gint n_cpus) { osinfo_entity_set_param_int64(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_N_CPUS, n_cpus); } /** * osinfo_resources_set_cpu: * @resources: an #OsinfoResources instance * @cpu: the CPU frequency in hertz (Hz) * * Sets the CPU frequency. */ void osinfo_resources_set_cpu(OsinfoResources *resources, gint64 cpu) { osinfo_entity_set_param_int64(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_CPU, cpu); } /** * osinfo_resources_set_ram: * @resources: an #OsinfoResources instance * @ram: the amount of ram in bytes * * Sets the amount of RAM in bytes. */ void osinfo_resources_set_ram(OsinfoResources *resources, gint64 ram) { osinfo_entity_set_param_int64(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_RAM, ram); } /** * osinfo_resources_set_storage: * @resources: an #OsinfoResources instance * @storage: the amount of storage in bytes * * Sets the amount of storage space. */ void osinfo_resources_set_storage(OsinfoResources *resources, gint64 storage) { osinfo_entity_set_param_int64(OSINFO_ENTITY(resources), OSINFO_RESOURCES_PROP_STORAGE, storage); } /** * osinfo_resources_set_inherit * @resources: an #OsinfoResources instance * @inherit: whether its values are inherited * * Sets whether the resources values are inherited * * Mind that this method is *private*! */ void osinfo_resources_set_inherit(OsinfoResources *resources, gboolean inherit) { g_return_if_fail(OSINFO_IS_RESOURCES(resources)); resources->priv->inherit = inherit; }