aboutsummaryrefslogtreecommitdiffstats
path: root/tools/internal/xi_usage.c
blob: 3cd61431e5226e085e815b20bc3aed70e57376a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "hypervisor-ifs/dom0_ops.h"
#include "dom0_defs.h"
#include "mem_defs.h"

static char *argv0 = "internal_domain_usage";

int main(int argc, char **argv)
{
    dom0_op_t    op;
    network_op_t netop;
    int          i, domain, vifs[32];

    if ( argv[0] != NULL ) 
        argv0 = argv[0];

    if ( argc != 2 ) 
    {
        fprintf(stderr, "Usage: %s <domain-id>\n", argv0);
        return 1;
    }

    domain = atol(argv[1]);

    op.cmd                 = DOM0_GETDOMAININFO;
    op.u.getdominfo.domain = domain;
    if ( do_dom0_op(&op) < 0 )
        return 1;

    printf("cpu%d: %lld\n", 
           op.u.getdominfo.processor,
           op.u.getdominfo.cpu_time);

    if ( mlock(vifs, sizeof(vifs)) != 0 )
    {
        PERROR("Could not lock memory for network query buffer");
        return 1;
    }

    netop.cmd = NETWORK_OP_VIFQUERY;
    netop.u.vif_query.domain = domain;
    netop.u.vif_query.buf    = vifs;
    if ( do_network_op(&netop) < 0 )
        return 1;

    for ( i = 1; i <= vifs[0]; i++ )
    {
        netop.cmd = NETWORK_OP_VIFGETINFO;
        netop.u.vif_getinfo.domain = domain;
        netop.u.vif_getinfo.vif    = vifs[i];
        if ( do_network_op(&netop) < 0 )
            return 1;

        printf("vif%d: sent %lld bytes (%lld packets) "
               "received %lld bytes (%lld packets)\n",
               vifs[i],
               netop.u.vif_getinfo.total_bytes_sent,
               netop.u.vif_getinfo.total_packets_sent,
               netop.u.vif_getinfo.total_bytes_received,
               netop.u.vif_getinfo.total_packets_received);
    }

    return 0;
}