• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * lib/cli/cls/cgroup.c    	cgroup classifier module for CLI lib
3  *
4  *	This library is free software; you can redistribute it and/or
5  *	modify it under the terms of the GNU Lesser General Public
6  *	License as published by the Free Software Foundation version 2.1
7  *	of the License.
8  *
9  * Copyright (c) 2010-2011 Thomas Graf <tgraf@suug.ch>
10  */
11 
12 #include <netlink/cli/utils.h>
13 #include <netlink/cli/tc.h>
14 #include <netlink/cli/cls.h>
15 #include <netlink/route/cls/cgroup.h>
16 
print_usage(void)17 static void print_usage(void)
18 {
19 	printf(
20 "Usage: nl-cls-add [...] cgroup [OPTIONS]...\n"
21 "\n"
22 "OPTIONS\n"
23 " -h, --help                Show this help text.\n"
24 " -e, --ematch=EXPR         Ematch expression\n"
25 "\n"
26 "EXAMPLE"
27 "    nl-cls-add --dev=eth0 --parent=q_root cgroup\n");
28 }
29 
parse_argv(struct rtnl_tc * tc,int argc,char ** argv)30 static void parse_argv(struct rtnl_tc *tc, int argc, char **argv)
31 {
32 	struct rtnl_cls *cls = (struct rtnl_cls *) tc;
33 	struct rtnl_ematch_tree *tree;
34 
35 	for (;;) {
36 		int c, optidx = 0;
37 		static struct option long_opts[] = {
38 			{ "help", 0, 0, 'h' },
39 			{ "ematch", 1, 0, 'e' },
40 			{ 0, 0, 0, 0 }
41 		};
42 
43 		c = getopt_long(argc, argv, "he:", long_opts, &optidx);
44 		if (c == -1)
45 			break;
46 
47 		switch (c) {
48 		case 'h':
49 			print_usage();
50 			exit(0);
51 
52 		case 'e':
53 			tree = nl_cli_cls_parse_ematch(cls, optarg);
54 			rtnl_cgroup_set_ematch(cls, tree);
55 			break;
56 		}
57 	}
58 }
59 
60 static struct nl_cli_tc_module cgroup_module =
61 {
62 	.tm_name		= "cgroup",
63 	.tm_type		= RTNL_TC_TYPE_CLS,
64 	.tm_parse_argv		= parse_argv,
65 };
66 
cgroup_init(void)67 static void __init cgroup_init(void)
68 {
69 	nl_cli_tc_register(&cgroup_module);
70 }
71 
cgroup_exit(void)72 static void __exit cgroup_exit(void)
73 {
74 	nl_cli_tc_unregister(&cgroup_module);
75 }
76