Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
    }
}
Ejemplo n.º 4
0
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));
}
Ejemplo n.º 5
0
/**
 * 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;
}