Home | History | Annotate | Download | only in qdisc
      1 
      2 /*
      3  * src/lib/pfifo.c     	pfifo module for CLI lib
      4  *
      5  *	This library is free software; you can redistribute it and/or
      6  *	modify it under the terms of the GNU Lesser General Public
      7  *	License as published by the Free Software Foundation version 2.1
      8  *	of the License.
      9  *
     10  * Copyright (c) 2010-2011 Thomas Graf <tgraf (at) suug.ch>
     11  */
     12 
     13 #include <netlink/cli/utils.h>
     14 #include <netlink/cli/tc.h>
     15 #include <netlink/route/qdisc/fifo.h>
     16 
     17 static void print_usage(void)
     18 {
     19 	printf(
     20 "Usage: nl-qdisc-add [...] pfifo [OPTIONS]...\n"
     21 "\n"
     22 "OPTIONS\n"
     23 "     --help                Show this help text.\n"
     24 "     --limit=LIMIT         Maximum queue length in number of packets.\n"
     25 "\n"
     26 "EXAMPLE"
     27 "    # Attach pfifo with a 32 packet limit to eth1\n"
     28 "    nl-qdisc-add --dev=eth1 --parent=root pfifo --limit=32\n");
     29 }
     30 
     31 static void pfifo_parse_argv(struct rtnl_tc *tc, int argc, char **argv)
     32 {
     33 	struct rtnl_qdisc *qdisc = (struct rtnl_qdisc *) tc;
     34 
     35 	for (;;) {
     36 		int c, optidx = 0;
     37 		enum {
     38 			ARG_LIMIT = 257,
     39 		};
     40 		static struct option long_opts[] = {
     41 			{ "help", 0, 0, 'h' },
     42 			{ "limit", 1, 0, ARG_LIMIT },
     43 			{ 0, 0, 0, 0 }
     44 		};
     45 
     46 		c = getopt_long(argc, argv, "h", long_opts, &optidx);
     47 		if (c == -1)
     48 			break;
     49 
     50 		switch (c) {
     51 		case 'h':
     52 			print_usage();
     53 			return;
     54 
     55 		case ARG_LIMIT:
     56 			rtnl_qdisc_fifo_set_limit(qdisc, nl_cli_parse_u32(optarg));
     57 			break;
     58 		}
     59  	}
     60 }
     61 
     62 static struct nl_cli_tc_module pfifo_module =
     63 {
     64 	.tm_name		= "pfifo",
     65 	.tm_type		= RTNL_TC_TYPE_QDISC,
     66 	.tm_parse_argv		= pfifo_parse_argv,
     67 };
     68 
     69 static void __init pfifo_init(void)
     70 {
     71 	nl_cli_tc_register(&pfifo_module);
     72 }
     73 
     74 static void __exit pfifo_exit(void)
     75 {
     76 	nl_cli_tc_unregister(&pfifo_module);
     77 }
     78