static void gvir_domain_device_finalize(GObject *object) { GVirDomainDevice *self = GVIR_DOMAIN_DEVICE(object); GVirDomainDevicePrivate *priv = self->priv; g_debug("Finalize GVirDomainDevice=%p", self); g_clear_object(&priv->domain); g_clear_object(&priv->config); G_OBJECT_CLASS(gvir_domain_device_parent_class)->finalize(object); }
static const gchar *gvir_domain_interface_get_path(GVirDomainInterface *self) { GVirConfigDomainDevice *config; const gchar *path = NULL; config = gvir_domain_device_get_config(GVIR_DOMAIN_DEVICE(self)); if (GVIR_CONFIG_IS_DOMAIN_INTERFACE_USER(self)) /* FIXME: One of the limitations of user-mode networking of libvirt */ g_debug("Statistics gathering for user-mode network not yet supported"); else path = gvir_config_domain_interface_get_ifname(GVIR_CONFIG_DOMAIN_INTERFACE (config)); g_object_unref (config); return path; }
static void gvir_domain_device_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GVirDomainDevice *self = GVIR_DOMAIN_DEVICE(object); GVirDomainDevicePrivate *priv = self->priv; switch (prop_id) { case PROP_DOMAIN: g_value_set_object(value, priv->domain); break; case PROP_CONFIG: g_value_set_object(value, priv->config); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); } }
G_GNUC_INTERNAL GVirDomainDevice *gvir_domain_device_new(GVirDomain *domain, GVirConfigDomainDevice *config) { GType type; g_return_val_if_fail(GVIR_IS_DOMAIN(domain), NULL); g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_DEVICE(config), NULL); if (GVIR_CONFIG_IS_DOMAIN_DISK(config)) { type = GVIR_TYPE_DOMAIN_DISK; } else if (GVIR_CONFIG_IS_DOMAIN_INTERFACE(config)) { type = GVIR_TYPE_DOMAIN_INTERFACE; } else { g_debug("Unknown device type: %s", G_OBJECT_TYPE_NAME(config)); return NULL; } return GVIR_DOMAIN_DEVICE(g_object_new(type, "config", config, "domain", domain, NULL)); }
/** * gvir_domain_interface_get_stats: * @self: the domain interface * @err: an error * * This function returns network interface stats. Individual fields * within the stats structure may be returned as -1, which indicates * that the hypervisor does not support that particular statistic. * * Returns: (transfer full): the stats or %NULL in case of error. The * returned object should be unreffed with g_object_unref() when no longer * needed. **/ GVirDomainInterfaceStats *gvir_domain_interface_get_stats(GVirDomainInterface *self, GError **err) { GVirDomainInterfaceStats *ret = NULL; virDomainInterfaceStatsStruct stats; virDomainPtr handle; const gchar *path; g_return_val_if_fail(GVIR_IS_DOMAIN_INTERFACE(self), NULL); g_return_val_if_fail(err == NULL || *err == NULL, NULL); handle = gvir_domain_device_get_domain_handle(GVIR_DOMAIN_DEVICE(self)); path = gvir_domain_interface_get_path (self); if (path == NULL) { ret = g_slice_new0(GVirDomainInterfaceStats); goto end; } if (virDomainInterfaceStats(handle, path, &stats, sizeof (stats)) < 0) { gvir_set_error_literal(err, GVIR_DOMAIN_INTERFACE_ERROR, 0, "Unable to get domain interface stats"); goto end; } ret = g_slice_new(GVirDomainInterfaceStats); ret->rx_bytes = stats.rx_bytes; ret->rx_packets = stats.rx_packets; ret->rx_errs = stats.rx_errs; ret->rx_drop = stats.rx_drop; ret->tx_bytes = stats.tx_bytes; ret->tx_packets = stats.tx_packets; ret->tx_errs = stats.tx_errs; ret->tx_drop = stats.tx_drop; end: virDomainFree(handle); return ret; }