Annotation of embedaddon/strongswan/src/swanctl/commands/list_pools.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2015-2016 Tobias Brunner
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * Copyright (C) 2014 Martin Willi
6: * Copyright (C) 2014 revosec AG
7: *
8: * This program is free software; you can redistribute it and/or modify it
9: * under the terms of the GNU General Public License as published by the
10: * Free Software Foundation; either version 2 of the License, or (at your
11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
12: *
13: * This program is distributed in the hope that it will be useful, but
14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16: * for more details.
17: */
18:
19: #define _GNU_SOURCE
20: #include <stdio.h>
21: #include <errno.h>
22:
23: #include "command.h"
24:
25: CALLBACK(list_leases, int,
26: char *pool, vici_res_t *res, char *name)
27: {
28: if (streq(name, "leases"))
29: {
30: return vici_parse_cb(res, list_leases, NULL, NULL, pool);
31: }
32: printf(" %-30s %-8s '%s'\n",
33: vici_find_str(res, "", "%s.leases.%s.address", pool, name),
34: vici_find_str(res, "", "%s.leases.%s.status", pool, name),
35: vici_find_str(res, "", "%s.leases.%s.identity", pool, name));
36: return 0;
37: }
38:
39: CALLBACK(list_pool, int,
40: void *not_used, vici_res_t *res, char *name)
41: {
42: char pool[64], leases[32];
43:
44: snprintf(pool, sizeof(pool), "%s:", name);
45: snprintf(leases, sizeof(leases), "%s / %s / %s",
46: vici_find_str(res, "", "%s.online", name),
47: vici_find_str(res, "", "%s.offline", name),
48: vici_find_str(res, "", "%s.size", name));
49:
50: printf("%-20s %-30s %16s\n",
51: name, vici_find_str(res, "", "%s.base", name), leases);
52:
53: return vici_parse_cb(res, list_leases, NULL, NULL, name);
54: }
55:
56: static int list_pools(vici_conn_t *conn)
57: {
58: vici_req_t *req;
59: vici_res_t *res;
60: command_format_options_t format = COMMAND_FORMAT_NONE;
61: char *arg, *name = NULL;
62: int ret = 0;
63: bool leases = FALSE;
64:
65: while (TRUE)
66: {
67: switch (command_getopt(&arg))
68: {
69: case 'h':
70: return command_usage(NULL);
71: case 'P':
72: format |= COMMAND_FORMAT_PRETTY;
73: /* fall through to raw */
74: case 'r':
75: format |= COMMAND_FORMAT_RAW;
76: continue;
77: case 'l':
78: leases = TRUE;
79: continue;
80: case 'n':
81: name = arg;
82: continue;
83: case EOF:
84: break;
85: default:
86: return command_usage("invalid --list-pools option");
87: }
88: break;
89: }
90:
91: req = vici_begin("get-pools");
92: if (leases)
93: {
94: vici_add_key_valuef(req, "leases", "yes");
95: }
96: if (name)
97: {
98: vici_add_key_valuef(req, "name", "%s", name);
99: }
100: res = vici_submit(req, conn);
101: if (!res)
102: {
103: ret = errno;
104: fprintf(stderr, "get-pools request failed: %s\n", strerror(errno));
105: return ret;
106: }
107: if (format & COMMAND_FORMAT_RAW)
108: {
109: vici_dump(res, "get-pools reply", format & COMMAND_FORMAT_PRETTY,
110: stdout);
111: }
112: else
113: {
114: ret = vici_parse_cb(res, list_pool, NULL, NULL, NULL);
115: }
116: vici_free_res(res);
117: return ret;
118: }
119:
120: /**
121: * Register the command.
122: */
123: static void __attribute__ ((constructor))reg()
124: {
125: command_register((command_t) {
126: list_pools, 'A', "list-pools", "list loaded pool configurations",
127: {"[--leases] [--raw|--pretty]"},
128: {
129: {"help", 'h', 0, "show usage information"},
130: {"raw", 'r', 0, "dump raw response message"},
131: {"pretty", 'P', 0, "dump raw response message in pretty print"},
132: {"leases", 'l', 0, "list leases of each pool"},
133: {"name", 'n', 1, "filter pools by name"},
134: }
135: });
136: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>