]>
Commit | Line | Data |
---|---|---|
0ad19a3f | 1 | /* |
2 | * lxc: linux Container library | |
3 | * | |
4 | * (C) Copyright IBM Corp. 2007, 2008 | |
5 | * | |
6 | * Authors: | |
7 | * Daniel Lezcano <dlezcano at fr.ibm.com> | |
8 | * | |
9 | * This library is free software; you can redistribute it and/or | |
10 | * modify it under the terms of the GNU Lesser General Public | |
11 | * License as published by the Free Software Foundation; either | |
12 | * version 2.1 of the License, or (at your option) any later version. | |
13 | * | |
14 | * This library is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 | * Lesser General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU Lesser General Public | |
20 | * License along with this library; if not, write to the Free Software | |
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 | */ | |
0ad19a3f | 23 | |
576f946d | 24 | #include <stdio.h> |
2ab8e9ba | 25 | #include <unistd.h> |
26 | #include <libgen.h> | |
27 | #include <sys/types.h> | |
28 | ||
b113348e | 29 | #include <lxc/lxc.h> |
00b3c2e2 CLG |
30 | #include <lxc/log.h> |
31 | ||
4237c6ca | 32 | #include "arguments.h" |
0ad19a3f | 33 | |
77075659 | 34 | lxc_log_define(lxc_cgroup_ui, lxc_cgroup); |
3ab87b66 | 35 | |
4237c6ca | 36 | static int my_checker(const struct lxc_arguments* args) |
2ab8e9ba | 37 | { |
4237c6ca | 38 | if (!args->argc) { |
f10e7166 | 39 | lxc_error(args, "missing state object"); |
4237c6ca MN |
40 | return -1; |
41 | } | |
42 | return 0; | |
2ab8e9ba | 43 | } |
44 | ||
4237c6ca MN |
45 | static const struct option my_longopts[] = { |
46 | LXC_COMMON_OPTIONS | |
47 | }; | |
2ab8e9ba | 48 | |
4237c6ca MN |
49 | static struct lxc_arguments my_args = { |
50 | .progname = "lxc-cgroup", | |
51 | .help = "\ | |
f10e7166 | 52 | --name=NAME state-object [value]\n\ |
4237c6ca | 53 | \n\ |
f10e7166 DW |
54 | Get or set the value of a state object (for example, 'cpuset.cpus')\n\ |
55 | in the container's cgroup for the corresponding subsystem.\n\ | |
4237c6ca MN |
56 | \n\ |
57 | Options :\n\ | |
f10e7166 | 58 | -n, --name=NAME container name", |
4237c6ca MN |
59 | .options = my_longopts, |
60 | .parser = NULL, | |
61 | .checker = my_checker, | |
62 | }; | |
2ab8e9ba | 63 | |
4237c6ca MN |
64 | int main(int argc, char *argv[]) |
65 | { | |
f10e7166 | 66 | char *state_object = NULL, *value = NULL; |
2ab8e9ba | 67 | |
272bc5af MN |
68 | if (lxc_arguments_parse(&my_args, argc, argv)) |
69 | return -1; | |
2ab8e9ba | 70 | |
e6cde741 | 71 | if (lxc_log_init(my_args.log_file, my_args.log_priority, |
4237c6ca | 72 | my_args.progname, my_args.quiet)) |
272bc5af | 73 | return -1; |
51cab631 | 74 | |
f10e7166 | 75 | state_object = my_args.argv[0]; |
2ab8e9ba | 76 | |
4237c6ca MN |
77 | if ((argc) > 1) |
78 | value = my_args.argv[1]; | |
2ab8e9ba | 79 | |
80 | if (value) { | |
f10e7166 | 81 | if (lxc_cgroup_set(my_args.name, state_object, value)) { |
4237c6ca | 82 | ERROR("failed to assign '%s' value to '%s' for '%s'", |
f10e7166 | 83 | value, state_object, my_args.name); |
272bc5af | 84 | return -1; |
2ab8e9ba | 85 | } |
86 | } else { | |
87 | const unsigned long len = 4096; | |
70f7755e | 88 | int ret; |
2ab8e9ba | 89 | char buffer[len]; |
70f7755e | 90 | |
f10e7166 | 91 | ret = lxc_cgroup_get(my_args.name, state_object, buffer, len); |
70f7755e | 92 | if (ret < 0) { |
4237c6ca | 93 | ERROR("failed to retrieve value of '%s' for '%s'", |
f10e7166 | 94 | state_object, my_args.name); |
272bc5af | 95 | return -1; |
2ab8e9ba | 96 | } |
97 | ||
70f7755e | 98 | printf("%*s", ret, buffer); |
2ab8e9ba | 99 | } |
100 | ||
0ad19a3f | 101 | return 0; |
102 | } |