diff --git a/lib/Makefile.am b/lib/Makefile.am index 697683f..b400a62 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -81,7 +81,7 @@ libnl_route_3_la_SOURCES = \ route/qdisc/blackhole.c route/qdisc/cbq.c route/qdisc/dsmark.c \ route/qdisc/fifo.c route/qdisc/htb.c route/qdisc/netem.c \ route/qdisc/prio.c route/qdisc/red.c route/qdisc/sfq.c \ - route/qdisc/tbf.c route/qdisc/plug.c \ + route/qdisc/tbf.c route/qdisc/plug.c route/qdisc/ingress.c \ \ fib_lookup/lookup.c fib_lookup/request.c \ \ @@ -112,6 +112,7 @@ nobase_pkglib_LTLIBRARIES = \ cli/qdisc/pfifo.la \ cli/qdisc/plug.la \ cli/qdisc/bfifo.la \ + cli/qdisc/ingress.la \ cli/cls/basic.la \ cli/cls/cgroup.la @@ -120,6 +121,7 @@ cli_qdisc_blackhole_la_LDFLAGS = -module -avoid-version cli_qdisc_pfifo_la_LDFLAGS = -module -avoid-version cli_qdisc_plug_la_LDFLAGS = -module -avoid-version cli_qdisc_bfifo_la_LDFLAGS = -module -avoid-version +cli_qdisc_ingress_la_LDFLAGS = -module -avoid-version cli_cls_basic_la_LDFLAGS = -module -avoid-version cli_cls_cgroup_la_LDFLAGS = -module -avoid-version endif diff --git a/lib/cli/qdisc/ingress.c b/lib/cli/qdisc/ingress.c new file mode 100644 index 0000000..8892a64 --- /dev/null +++ b/lib/cli/qdisc/ingress.c @@ -0,0 +1,65 @@ + +/* + * src/lib/ingress.c ingress module for CLI lib + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * Copyright (c) 2013 Cong Wang + */ + +#include +#include + +static void print_usage(void) +{ + printf( +"Usage: nl-qdisc-add [...] ingress\n" +"\n" +"OPTIONS\n" +" --help Show this help text.\n" +"\n" +"EXAMPLE" +" # Attach ingress to eth1\n" +" nl-qdisc-add --dev=eth1 --parent=root ingress\n"); +} + +static void ingress_parse_argv(struct rtnl_tc *tc, int argc, char **argv) +{ + for (;;) { + int c, optidx = 0; + static struct option long_opts[] = { + { "help", 0, 0, 'h' }, + { 0, 0, 0, 0 } + }; + + c = getopt_long(argc, argv, "h", long_opts, &optidx); + if (c == -1) + break; + + switch (c) { + case 'h': + print_usage(); + return; + } + } +} + +static struct nl_cli_tc_module ingress_module = +{ + .tm_name = "ingress", + .tm_type = RTNL_TC_TYPE_QDISC, + .tm_parse_argv = ingress_parse_argv, +}; + +static void __init ingress_init(void) +{ + nl_cli_tc_register(&ingress_module); +} + +static void __exit ingress_exit(void) +{ + nl_cli_tc_unregister(&ingress_module); +} diff --git a/lib/route/qdisc/ingress.c b/lib/route/qdisc/ingress.c new file mode 100644 index 0000000..1a63f36 --- /dev/null +++ b/lib/route/qdisc/ingress.c @@ -0,0 +1,64 @@ +/* + * lib/route/qdisc/ingress.c ingress + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * Copyright (c) 2013 Cong Wang + */ + +/** + * @ingroup qdisc + * @defgroup qdisc_ingress Ingress qdisc + * + * @{ + */ + +#include +#include +#include +#include +#include +#include + +struct dumb { + uint32_t foo; +}; + +static int dumb_msg_parser(struct rtnl_tc *tc, void *data) +{ + return 0; +} + +static void dumb_dump_line(struct rtnl_tc *tc, void *data, + struct nl_dump_params *p) +{ +} + +static int dumb_msg_fill(struct rtnl_tc *tc, void *data, struct nl_msg *msg) +{ + return 0; +} + +static struct rtnl_tc_ops ingress_ops = { + .to_kind = "ingress", + .to_type = RTNL_TC_TYPE_QDISC, + .to_size = sizeof(struct dumb), + .to_msg_parser = dumb_msg_parser, + .to_dump[NL_DUMP_LINE] = dumb_dump_line, + .to_msg_fill = dumb_msg_fill, +}; + +static void __init ingress_init(void) +{ + rtnl_tc_register(&ingress_ops); +} + +static void __exit ingress_exit(void) +{ + rtnl_tc_unregister(&ingress_ops); +} + +/** @} */