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 17static 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 30static 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 60static 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 67static void __init cgroup_init(void) 68{ 69 nl_cli_tc_register(&cgroup_module); 70} 71 72static void __exit cgroup_exit(void) 73{ 74 nl_cli_tc_unregister(&cgroup_module); 75} 76