1 /*
2 * src/lib/blackhole.c Blackhole 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
print_usage(void)15 static void print_usage(void)
16 {
17 printf(
18 "Usage: nl-qdisc-add [...] blackhole [OPTIONS]...\n"
19 "\n"
20 "OPTIONS\n"
21 " --help Show this help text.\n"
22 "\n"
23 "EXAMPLE"
24 " # Drop all outgoing packets on eth1\n"
25 " nl-qdisc-add --dev=eth1 --parent=root blackhole\n");
26 }
27
blackhole_parse_argv(struct rtnl_tc * tc,int argc,char ** argv)28 static void blackhole_parse_argv(struct rtnl_tc *tc, int argc, char **argv)
29 {
30 for (;;) {
31 int c, optidx = 0;
32 static struct option long_opts[] = {
33 { "help", 0, 0, 'h' },
34 { 0, 0, 0, 0 }
35 };
36
37 c = getopt_long(argc, argv, "h", long_opts, &optidx);
38 if (c == -1)
39 break;
40
41 switch (c) {
42 case 'h':
43 print_usage();
44 return;
45 }
46 }
47 }
48
49 static struct nl_cli_tc_module blackhole_module =
50 {
51 .tm_name = "blackhole",
52 .tm_type = RTNL_TC_TYPE_QDISC,
53 .tm_parse_argv = blackhole_parse_argv,
54 };
55
blackhole_init(void)56 static void __init blackhole_init(void)
57 {
58 nl_cli_tc_register(&blackhole_module);
59 }
60
blackhole_exit(void)61 static void __exit blackhole_exit(void)
62 {
63 nl_cli_tc_unregister(&blackhole_module);
64 }
65