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@suug.ch> 11 */ 12 13#include <netlink/cli/utils.h> 14#include <netlink/cli/tc.h> 15#include <netlink/route/qdisc/fifo.h> 16 17static 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 31static 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 62static 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 69static void __init pfifo_init(void) 70{ 71 nl_cli_tc_register(&pfifo_module); 72} 73 74static void __exit pfifo_exit(void) 75{ 76 nl_cli_tc_unregister(&pfifo_module); 77} 78