commit 53e34d82748442625618582eb88512fc4ee49c2e Author: Pavel Šimerda Date: Thu May 28 12:17:39 2015 +0200 backport selected tc features and documentation diff --git a/man/man8/tc.8 b/man/man8/tc.8 index e0acfeb..cc839d9 100644 --- a/man/man8/tc.8 +++ b/man/man8/tc.8 @@ -2,7 +2,9 @@ .SH NAME tc \- show / manipulate traffic control settings .SH SYNOPSIS -.B tc qdisc [ add | change | replace | link | delete ] dev +.B tc +.RI "[ " OPTIONS " ]" +.B qdisc [ add | change | replace | link | delete ] dev DEV .B [ parent @@ -13,7 +15,9 @@ qdisc-id ] qdisc [ qdisc specific parameters ] .P -.B tc class [ add | change | replace | delete ] dev +.B tc +.RI "[ " OPTIONS " ]" +.B class [ add | change | replace | delete ] dev DEV .B parent qdisc-id @@ -22,7 +26,9 @@ class-id ] qdisc [ qdisc specific parameters ] .P -.B tc filter [ add | change | replace | delete ] dev +.B tc +.RI "[ " OPTIONS " ]" +.B filter [ add | change | replace | delete ] dev DEV .B [ parent qdisc-id @@ -35,21 +41,28 @@ priority filtertype flow-id .B tc +.RI "[ " OPTIONS " ]" .RI "[ " FORMAT " ]" .B qdisc show [ dev DEV .B ] .P .B tc +.RI "[ " OPTIONS " ]" .RI "[ " FORMAT " ]" .B class show dev DEV .P -.B tc filter show dev +.B tc +.RI "[ " OPTIONS " ]" +.B filter show dev DEV .P -.B tc [ -force ] -b\fR[\fIatch\fR] \fB[ filename ] +.ti 8 +.IR OPTIONS " := {" +\fB[ -force ] [ -OK ] -b\fR[\fIatch\fR] \fB[ filename ] \fR| +\fB[ \fB-n\fR[\fIetns\fR] name \fB] \fR} .ti 8 .IR FORMAT " := {" @@ -407,6 +420,44 @@ link Only available for qdiscs and performs a replace where the node must exist already. +.SH OPTIONS + +.TP +.BR "\-b", " \-b filename", " \-batch", " \-batch filename" +read commands from provided file or standard input and invoke them. +First failure will cause termination of tc. + +.TP +.BR "\-force" +don't terminate tc on errors in batch mode. +If there were any errors during execution of the commands, the application return code will be non zero. + +.TP +.BR "\-OK" +in batch mode, print +.B OK +and a new line on standard output after each successfully interpreted command. + +.TP +.BR "\-n" , " \-net" , " \-netns " +switches +.B tc +to the specified network namespace +.IR NETNS . +Actually it just simplifies executing of: + +.B ip netns exec +.IR NETNS +.B tc +.RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | " +.BR help " }" + +to + +.B tc +.RI "-n[etns] " NETNS " [ " OPTIONS " ] " OBJECT " { " COMMAND " | " +.BR help " }" + .SH FORMAT The show command has additional formatting options: diff --git a/tc/Makefile b/tc/Makefile index 0277760..af6a277 100644 --- a/tc/Makefile +++ b/tc/Makefile @@ -3,6 +3,11 @@ TCOBJ= tc.o tc_qdisc.o tc_class.o tc_filter.o tc_util.o \ m_ematch.o emp_ematch.yacc.o emp_ematch.lex.o include ../Config + +ifeq ($(IP_CONFIG_SETNS),y) + CFLAGS += -DHAVE_SETNS +endif + SHARED_LIBS ?= y TCMODULES := diff --git a/tc/tc.c b/tc/tc.c index b43bb47..4aaec21 100644 --- a/tc/tc.c +++ b/tc/tc.c @@ -29,6 +29,7 @@ #include "utils.h" #include "tc_util.h" #include "tc_common.h" +#include "namespace.h" int show_stats = 0; int show_details = 0; @@ -186,7 +187,8 @@ static void usage(void) fprintf(stderr, "Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }\n" " tc [-force] [-OK] -batch filename\n" "where OBJECT := { qdisc | class | filter | action | monitor }\n" - " OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -p[retty] | -b[atch] [filename] }\n"); + " OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -p[retty] | -b[atch] [filename] | " + "-n[etns] name }\n"); } static int do_cmd(int argc, char **argv) @@ -299,6 +301,10 @@ int main(int argc, char **argv) if (argc <= 1) usage(); batch_file = argv[1]; + } else if (matches(argv[1], "-netns") == 0) { + NEXT_ARG(); + if (netns_switch(argv[1])) + return -1; } else { fprintf(stderr, "Option \"%s\" is unknown, try \"tc -help\".\n", argv[1]); return -1;