1 /*
2 * Author: Daniel De Graaf <dgdegra@tycho.nsa.gov>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2,
6 * as published by the Free Software Foundation.
7 */
8
9 #include <stdlib.h>
10 #include <errno.h>
11 #include <stdio.h>
12 #include <xenctrl.h>
13 #include <fcntl.h>
14 #include <sys/mman.h>
15 #include <sys/stat.h>
16 #include <string.h>
17 #include <unistd.h>
18 #include <inttypes.h>
19
usage(char ** argv)20 static void usage(char **argv)
21 {
22 fprintf(stderr, "Usage: %s {name|-a}\n", argv[0]);
23 exit(1);
24 }
25
all_bools(xc_interface * xch)26 static int all_bools(xc_interface *xch)
27 {
28 int err = 0, i = 0, curr, pend;
29 char name[256];
30 while (1) {
31 err = xc_flask_getbool_byid(xch, i, name, sizeof name, &curr, &pend);
32 if (err < 0) {
33 if (errno == ENOENT)
34 return 0;
35 fprintf(stderr, "xc_flask_getbool: Unable to get boolean #%d: %s (%d)",
36 i, strerror(errno), err);
37 return 2;
38 }
39 if (curr == pend)
40 printf("%s: %d\n", name, curr);
41 else
42 printf("%s: %d (pending %d)\n", name, curr, pend);
43 i++;
44 }
45 }
46
main(int argc,char ** argv)47 int main(int argc, char **argv)
48 {
49 int err = 0;
50 xc_interface *xch;
51 int curr, pend;
52
53 if (argc != 2)
54 usage(argv);
55
56 xch = xc_interface_open(0,0,0);
57 if ( !xch )
58 {
59 fprintf(stderr, "Unable to create interface to xenctrl: %s\n",
60 strerror(errno));
61 err = 1;
62 goto done;
63 }
64
65 if (!strcmp(argv[1], "-a"))
66 {
67 err = all_bools(xch);
68 goto done;
69 }
70
71 err = xc_flask_getbool_byname(xch, argv[1], &curr, &pend);
72 if (err) {
73 fprintf(stderr, "xc_flask_getbool: Unable to get boolean %s: %s (%d)",
74 argv[1], strerror(errno), err);
75 err = 2;
76 goto done;
77 }
78
79 if (curr == pend)
80 printf("%s: %d\n", argv[1], curr);
81 else
82 printf("%s: %d (pending %d)\n", argv[1], curr, pend);
83
84 done:
85 if ( xch )
86 xc_interface_close(xch);
87
88 return err;
89 }
90