mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-08-13 12:54:43 +00:00
treewide: refactor help messages
Every tool in the iproute2 package have one or more function to show an help message to the user. Some of these functions print the help line by line with a series of printf call, e.g. ip/xfrm_state.c does 60 fprintf calls. If we group all the calls to a single one and just concatenate strings, we save a lot of libc calls and thus object size. The size difference of the compiled binaries calculated with bloat-o-meter is: ip/ip: add/remove: 0/0 grow/shrink: 5/15 up/down: 103/-4796 (-4693) Total: Before=672591, After=667898, chg -0.70% ip/rtmon: add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-54 (-54) Total: Before=48879, After=48825, chg -0.11% tc/tc: add/remove: 0/2 grow/shrink: 31/10 up/down: 882/-6133 (-5251) Total: Before=351912, After=346661, chg -1.49% bridge/bridge: add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-459 (-459) Total: Before=70502, After=70043, chg -0.65% misc/lnstat: add/remove: 0/1 grow/shrink: 1/0 up/down: 48/-486 (-438) Total: Before=9960, After=9522, chg -4.40% tipc/tipc: add/remove: 0/0 grow/shrink: 1/1 up/down: 18/-62 (-44) Total: Before=79182, After=79138, chg -0.06% While at it, indent some strings which were starting at column 0, and use tabs where possible, to have a consistent style across helps. Signed-off-by: Matteo Croce <mcroce@redhat.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
2cc9b5f4fa
commit
8589eb4efd
@ -254,23 +254,24 @@ int print_linkinfo(struct nlmsghdr *n, void *arg)
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n");
|
||||
fprintf(stderr, " [ guard {on | off} ]\n");
|
||||
fprintf(stderr, " [ hairpin {on | off} ]\n");
|
||||
fprintf(stderr, " [ fastleave {on | off} ]\n");
|
||||
fprintf(stderr, " [ root_block {on | off} ]\n");
|
||||
fprintf(stderr, " [ learning {on | off} ]\n");
|
||||
fprintf(stderr, " [ learning_sync {on | off} ]\n");
|
||||
fprintf(stderr, " [ flood {on | off} ]\n");
|
||||
fprintf(stderr, " [ mcast_flood {on | off} ]\n");
|
||||
fprintf(stderr, " [ mcast_to_unicast {on | off} ]\n");
|
||||
fprintf(stderr, " [ neigh_suppress {on | off} ]\n");
|
||||
fprintf(stderr, " [ vlan_tunnel {on | off} ]\n");
|
||||
fprintf(stderr, " [ isolated {on | off} ]\n");
|
||||
fprintf(stderr, " [ hwmode {vepa | veb} ]\n");
|
||||
fprintf(stderr, " [ backup_port DEVICE ] [ nobackup_port ]\n");
|
||||
fprintf(stderr, " [ self ] [ master ]\n");
|
||||
fprintf(stderr, " bridge link show [dev DEV]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n"
|
||||
" [ guard {on | off} ]\n"
|
||||
" [ hairpin {on | off} ]\n"
|
||||
" [ fastleave {on | off} ]\n"
|
||||
" [ root_block {on | off} ]\n"
|
||||
" [ learning {on | off} ]\n"
|
||||
" [ learning_sync {on | off} ]\n"
|
||||
" [ flood {on | off} ]\n"
|
||||
" [ mcast_flood {on | off} ]\n"
|
||||
" [ mcast_to_unicast {on | off} ]\n"
|
||||
" [ neigh_suppress {on | off} ]\n"
|
||||
" [ vlan_tunnel {on | off} ]\n"
|
||||
" [ isolated {on | off} ]\n"
|
||||
" [ hwmode {vepa | veb} ]\n"
|
||||
" [ backup_port DEVICE ] [ nobackup_port ]\n"
|
||||
" [ self ] [ master ]\n"
|
||||
" bridge link show [dev DEV]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -30,8 +30,9 @@ static unsigned int filter_index, filter_vlan;
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp] [vid VID]\n");
|
||||
fprintf(stderr, " bridge mdb {show} [ dev DEV ] [ vid VID ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp] [vid VID]\n"
|
||||
" bridge mdb {show} [ dev DEV ] [ vid VID ]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -46,24 +46,25 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n");
|
||||
fprintf(stderr, " [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n");
|
||||
fprintf(stderr, " [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n");
|
||||
fprintf(stderr, " [ encaplimit ELIM ]\n");
|
||||
fprintf(stderr, " [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n");
|
||||
fprintf(stderr, " [ dscp inherit ]\n");
|
||||
fprintf(stderr, " [ [no]allow-localremote ]\n");
|
||||
fprintf(stderr, " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: NAME := STRING\n");
|
||||
fprintf(stderr, " ADDR := IPV6_ADDRESS\n");
|
||||
fprintf(stderr, " ELIM := { none | 0..255 }(default=%d)\n",
|
||||
IPV6_DEFAULT_TNL_ENCAP_LIMIT);
|
||||
fprintf(stderr, " TTL := 0..255 (default=%d)\n",
|
||||
fprintf(stderr,
|
||||
"Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n"
|
||||
" [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n"
|
||||
" [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n"
|
||||
" [ encaplimit ELIM ]\n"
|
||||
" [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n"
|
||||
" [ dscp inherit ]\n"
|
||||
" [ [no]allow-localremote ]\n"
|
||||
" [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
|
||||
"\n"
|
||||
"Where: NAME := STRING\n"
|
||||
" ADDR := IPV6_ADDRESS\n"
|
||||
" ELIM := { none | 0..255 }(default=%d)\n"
|
||||
" TTL := 0..255 (default=%d)\n"
|
||||
" TCLASS := { 0x0..0xff | inherit }\n"
|
||||
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n",
|
||||
IPV6_DEFAULT_TNL_ENCAP_LIMIT,
|
||||
DEFAULT_TNL_HOP_LIMIT);
|
||||
fprintf(stderr, " TCLASS := { 0x0..0xff | inherit }\n");
|
||||
fprintf(stderr, " FLOWLABEL := { 0x0..0xfffff | inherit }\n");
|
||||
fprintf(stderr, " KEY := { DOTTED_QUAD | NUMBER }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -52,32 +52,33 @@ static void usage(void)
|
||||
if (do_link)
|
||||
iplink_usage();
|
||||
|
||||
fprintf(stderr, "Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n");
|
||||
fprintf(stderr, " [ CONFFLAG-LIST ]\n");
|
||||
fprintf(stderr, " ip address del IFADDR dev IFNAME [mngtmpaddr]\n");
|
||||
fprintf(stderr, " ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n");
|
||||
fprintf(stderr, " [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n");
|
||||
fprintf(stderr, " ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n");
|
||||
fprintf(stderr, " [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n");
|
||||
fprintf(stderr, " [ label LABEL ] [up] [ vrf NAME ] ]\n");
|
||||
fprintf(stderr, " ip address {showdump|restore}\n");
|
||||
fprintf(stderr, "IFADDR := PREFIX | ADDR peer PREFIX\n");
|
||||
fprintf(stderr, " [ broadcast ADDR ] [ anycast ADDR ]\n");
|
||||
fprintf(stderr, " [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n");
|
||||
fprintf(stderr, "SCOPE-ID := [ host | link | global | NUMBER ]\n");
|
||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
||||
fprintf(stderr, "FLAG := [ permanent | dynamic | secondary | primary |\n");
|
||||
fprintf(stderr, " [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n");
|
||||
fprintf(stderr, " CONFFLAG-LIST ]\n");
|
||||
fprintf(stderr, "CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n");
|
||||
fprintf(stderr, "CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n");
|
||||
fprintf(stderr, "LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n");
|
||||
fprintf(stderr, "LFT := forever | SECONDS\n");
|
||||
fprintf(stderr, "TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n");
|
||||
fprintf(stderr, " bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n");
|
||||
fprintf(stderr, " gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n");
|
||||
fprintf(stderr, " nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n");
|
||||
fprintf(stderr, " hsr | macsec | netdevsim }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n"
|
||||
" [ CONFFLAG-LIST ]\n"
|
||||
" ip address del IFADDR dev IFNAME [mngtmpaddr]\n"
|
||||
" ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n"
|
||||
" [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n"
|
||||
" ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n"
|
||||
" [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n"
|
||||
" [ label LABEL ] [up] [ vrf NAME ] ]\n"
|
||||
" ip address {showdump|restore}\n"
|
||||
"IFADDR := PREFIX | ADDR peer PREFIX\n"
|
||||
" [ broadcast ADDR ] [ anycast ADDR ]\n"
|
||||
" [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n"
|
||||
"SCOPE-ID := [ host | link | global | NUMBER ]\n"
|
||||
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||
"FLAG := [ permanent | dynamic | secondary | primary |\n"
|
||||
" [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n"
|
||||
" CONFFLAG-LIST ]\n"
|
||||
"CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n"
|
||||
"CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n"
|
||||
"LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n"
|
||||
"LFT := forever | SECONDS\n"
|
||||
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
|
||||
" bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n"
|
||||
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n"
|
||||
" nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n"
|
||||
" hsr | macsec | netdevsim }\n");
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
|
@ -49,8 +49,9 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n");
|
||||
fprintf(stderr, " ip addrlabel [ list | flush | help ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n"
|
||||
" ip addrlabel [ list | flush | help ]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -107,10 +107,11 @@ void iplink_usage(void)
|
||||
" [ protodown { on | off } ]\n"
|
||||
" [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
|
||||
"\n"
|
||||
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n");
|
||||
|
||||
fprintf(stderr, "\n ip link xstats type TYPE [ ARGS ]\n");
|
||||
fprintf(stderr, "\n ip link afstats [ dev DEVICE ]\n");
|
||||
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n"
|
||||
"\n"
|
||||
" ip link xstats type TYPE [ ARGS ]\n"
|
||||
"\n"
|
||||
" ip link afstats [ dev DEVICE ]\n");
|
||||
|
||||
if (iplink_have_newlink()) {
|
||||
fprintf(stderr,
|
||||
|
@ -39,8 +39,9 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip maddr [ add | del ] MULTIADDR dev STRING\n");
|
||||
fprintf(stderr, " ip maddr show [ dev STRING ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip maddr [ add | del ] MULTIADDR dev STRING\n"
|
||||
" ip maddr show [ dev STRING ]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -29,10 +29,11 @@ int listen_all_nsid;
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip monitor [ all | LISTofOBJECTS ] [ FILE ] [ label ] [all-nsid] [dev DEVICE]\n");
|
||||
fprintf(stderr, "LISTofOBJECTS := link | address | route | mroute | prefix |\n");
|
||||
fprintf(stderr, " neigh | netconf | rule | nsid\n");
|
||||
fprintf(stderr, "FILE := file FILENAME\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip monitor [ all | LISTofOBJECTS ] [ FILE ] [ label ] [all-nsid] [dev DEVICE]\n"
|
||||
"LISTofOBJECTS := link | address | route | mroute | prefix |\n"
|
||||
" neigh | netconf | rule | nsid\n"
|
||||
"FILE := file FILENAME\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -35,12 +35,14 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip mroute show [ [ to ] PREFIX ] [ from PREFIX ] [ iif DEVICE ]\n");
|
||||
fprintf(stderr, " [ table TABLE_ID ]\n");
|
||||
fprintf(stderr, "TABLE_ID := [ local | main | default | all | NUMBER ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip mroute show [ [ to ] PREFIX ] [ from PREFIX ] [ iif DEVICE ]\n"
|
||||
" [ table TABLE_ID ]\n"
|
||||
"TABLE_ID := [ local | main | default | all | NUMBER ]\n"
|
||||
#if 0
|
||||
fprintf(stderr, "Usage: ip mroute [ add | del ] DESTINATION from SOURCE [ iif DEVICE ] [ oif DEVICE ]\n");
|
||||
"Usage: ip mroute [ add | del ] DESTINATION from SOURCE [ iif DEVICE ] [ oif DEVICE ]\n"
|
||||
#endif
|
||||
);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
15
ip/ipneigh.c
15
ip/ipneigh.c
@ -48,12 +48,15 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip neigh { add | del | change | replace }\n"
|
||||
" { ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]\n");
|
||||
fprintf(stderr, " [ router ] [ extern_learn ] [ protocol PROTO ]\n\n");
|
||||
fprintf(stderr, " ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n");
|
||||
fprintf(stderr, " [ vrf NAME ]\n\n");
|
||||
fprintf(stderr, "STATE := { permanent | noarp | stale | reachable | none |\n"
|
||||
fprintf(stderr,
|
||||
"Usage: ip neigh { add | del | change | replace }\n"
|
||||
" { ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]\n"
|
||||
" [ router ] [ extern_learn ] [ protocol PROTO ]\n"
|
||||
"\n"
|
||||
" ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n"
|
||||
" [ vrf NAME ]\n"
|
||||
"\n"
|
||||
"STATE := { permanent | noarp | stale | reachable | none |\n"
|
||||
" incomplete | delay | probe | failed }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
23
ip/ipnetns.c
23
ip/ipnetns.c
@ -26,17 +26,18 @@
|
||||
|
||||
static int usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip netns list\n");
|
||||
fprintf(stderr, " ip netns add NAME\n");
|
||||
fprintf(stderr, " ip netns attach NAME PID\n");
|
||||
fprintf(stderr, " ip netns set NAME NETNSID\n");
|
||||
fprintf(stderr, " ip [-all] netns delete [NAME]\n");
|
||||
fprintf(stderr, " ip netns identify [PID]\n");
|
||||
fprintf(stderr, " ip netns pids NAME\n");
|
||||
fprintf(stderr, " ip [-all] netns exec [NAME] cmd ...\n");
|
||||
fprintf(stderr, " ip netns monitor\n");
|
||||
fprintf(stderr, " ip netns list-id\n");
|
||||
fprintf(stderr, "NETNSID := auto | POSITIVE-INT\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip netns list\n"
|
||||
" ip netns add NAME\n"
|
||||
" ip netns attach NAME PID\n"
|
||||
" ip netns set NAME NETNSID\n"
|
||||
" ip [-all] netns delete [NAME]\n"
|
||||
" ip netns identify [PID]\n"
|
||||
" ip netns pids NAME\n"
|
||||
" ip [-all] netns exec [NAME] cmd ...\n"
|
||||
" ip netns monitor\n"
|
||||
" ip netns list-id\n"
|
||||
"NETNSID := auto | POSITIVE-INT\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
13
ip/ipseg6.c
13
ip/ipseg6.c
@ -32,12 +32,13 @@
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip sr { COMMAND | help }\n");
|
||||
fprintf(stderr, " ip sr hmac show\n");
|
||||
fprintf(stderr, " ip sr hmac set KEYID ALGO\n");
|
||||
fprintf(stderr, " ip sr tunsrc show\n");
|
||||
fprintf(stderr, " ip sr tunsrc set ADDRESS\n");
|
||||
fprintf(stderr, "where ALGO := { sha1 | sha256 }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip sr { COMMAND | help }\n"
|
||||
" ip sr hmac show\n"
|
||||
" ip sr hmac set KEYID ALGO\n"
|
||||
" ip sr tunsrc show\n"
|
||||
" ip sr tunsrc set ADDRESS\n"
|
||||
"where ALGO := { sha1 | sha256 }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -32,18 +32,19 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]\n");
|
||||
fprintf(stderr, " [ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]\n");
|
||||
fprintf(stderr, " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n");
|
||||
fprintf(stderr, " [ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]\n");
|
||||
fprintf(stderr, " [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]\n");
|
||||
fprintf(stderr, " [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: NAME := STRING\n");
|
||||
fprintf(stderr, " ADDR := { IP_ADDRESS | any }\n");
|
||||
fprintf(stderr, " TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }\n");
|
||||
fprintf(stderr, " TTL := { 1..255 | inherit }\n");
|
||||
fprintf(stderr, " KEY := { DOTTED_QUAD | NUMBER }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]\n"
|
||||
" [ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]\n"
|
||||
" [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
|
||||
" [ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]\n"
|
||||
" [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]\n"
|
||||
" [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]\n"
|
||||
"\n"
|
||||
"Where: NAME := STRING\n"
|
||||
" ADDR := { IP_ADDRESS | any }\n"
|
||||
" TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }\n"
|
||||
" TTL := { 1..255 | inherit }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -40,12 +40,13 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]\n");
|
||||
fprintf(stderr, " [ mode { tun | tap } ] [ user USER ] [ group GROUP ]\n");
|
||||
fprintf(stderr, " [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: USER := { STRING | NUMBER }\n");
|
||||
fprintf(stderr, " GROUP := { STRING | NUMBER }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]\n"
|
||||
" [ mode { tun | tap } ] [ user USER ] [ group GROUP ]\n"
|
||||
" [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]\n"
|
||||
"\n"
|
||||
"Where: USER := { STRING | NUMBER }\n"
|
||||
" GROUP := { STRING | NUMBER }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -36,10 +36,11 @@ static struct link_filter vrf_filter;
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip vrf show [NAME] ...\n");
|
||||
fprintf(stderr, " ip vrf exec [NAME] cmd ...\n");
|
||||
fprintf(stderr, " ip vrf identify [PID]\n");
|
||||
fprintf(stderr, " ip vrf pids [NAME]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip vrf show [NAME] ...\n"
|
||||
" ip vrf exec [NAME] cmd ...\n"
|
||||
" ip vrf identify [PID]\n"
|
||||
" ip vrf pids [NAME]\n");
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
|
@ -26,10 +26,7 @@
|
||||
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
{
|
||||
fprintf(f,
|
||||
"Usage: ... %-9s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-9s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ [no][i|o]seq ]\n"
|
||||
" [ [i|o]key KEY | no[i|o]key ]\n"
|
||||
@ -53,14 +50,12 @@ static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
" [ erspan_dir { ingress | egress } ]\n"
|
||||
" [ erspan_hwid hwid ]\n"
|
||||
"\n"
|
||||
);
|
||||
fprintf(f,
|
||||
"Where: ADDR := { IP_ADDRESS | any }\n"
|
||||
" TOS := { NUMBER | inherit }\n"
|
||||
" TTL := { 1..255 | inherit }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||
" MARK := { 0x0..0xffffffff }\n"
|
||||
);
|
||||
" MARK := { 0x0..0xffffffff }\n",
|
||||
lu->id);
|
||||
}
|
||||
|
||||
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -33,10 +33,7 @@
|
||||
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
{
|
||||
fprintf(f,
|
||||
"Usage: ... %-9s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-9s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ [no][i|o]seq ]\n"
|
||||
" [ [i|o]key KEY | no[i|o]key ]\n"
|
||||
@ -62,8 +59,6 @@ static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
" [ erspan_dir { ingress | egress } ]\n"
|
||||
" [ erspan_hwid hwid ]\n"
|
||||
"\n"
|
||||
);
|
||||
fprintf(f,
|
||||
"Where: ADDR := IPV6_ADDRESS\n"
|
||||
" TTL := { 0..255 } (default=%d)\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||
@ -71,8 +66,8 @@ static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
" TCLASS := { 0x0..0xff | inherit }\n"
|
||||
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
||||
" MARK := { 0x0..0xffffffff | inherit }\n",
|
||||
DEFAULT_TNL_HOP_LIMIT, IPV6_DEFAULT_TNL_ENCAP_LIMIT
|
||||
);
|
||||
lu->id,
|
||||
DEFAULT_TNL_HOP_LIMIT, IPV6_DEFAULT_TNL_ENCAP_LIMIT);
|
||||
}
|
||||
|
||||
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -32,13 +32,8 @@
|
||||
static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
|
||||
FILE *f)
|
||||
{
|
||||
const char *mode;
|
||||
|
||||
fprintf(f,
|
||||
"Usage: ... %-6s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-6s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ encaplimit ELIM ]\n"
|
||||
" [ hoplimit HLIM ]\n"
|
||||
@ -56,22 +51,16 @@ static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
|
||||
" [ [no]encap-csum ]\n"
|
||||
" [ [no]encap-csum6 ]\n"
|
||||
" [ [no]encap-remcsum ]\n"
|
||||
);
|
||||
mode = "{ ip6ip6 | ipip6 | any }";
|
||||
fprintf(f,
|
||||
" [ mode %s ]\n"
|
||||
"\n",
|
||||
mode
|
||||
);
|
||||
fprintf(f,
|
||||
" [ mode { ip6ip6 | ipip6 | any } ]\n"
|
||||
"\n"
|
||||
"Where: ADDR := IPV6_ADDRESS\n"
|
||||
" ELIM := { none | 0..255 }(default=%d)\n"
|
||||
" HLIM := 0..255 (default=%d)\n"
|
||||
" TCLASS := { 0x0..0xff | inherit }\n"
|
||||
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
||||
" MARK := { 0x0..0xffffffff | inherit }\n",
|
||||
IPV6_DEFAULT_TNL_ENCAP_LIMIT, DEFAULT_TNL_HOP_LIMIT
|
||||
);
|
||||
lu->id,
|
||||
IPV6_DEFAULT_TNL_ENCAP_LIMIT, DEFAULT_TNL_HOP_LIMIT);
|
||||
}
|
||||
|
||||
static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -29,11 +29,15 @@ static void iptunnel_print_help(struct link_util *lu, int argc, char **argv,
|
||||
{
|
||||
const char *mode;
|
||||
|
||||
if (strcmp(lu->id, "sit") == 0) {
|
||||
mode = "{ ip6ip | ipip | mplsip | any } ]\n"
|
||||
" [ isatap";
|
||||
} else {
|
||||
mode = "{ ipip | mplsip | any }";
|
||||
}
|
||||
|
||||
fprintf(f,
|
||||
"Usage: ... %-6s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-6s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ ttl TTL ]\n"
|
||||
" [ tos TOS ]\n"
|
||||
@ -51,24 +55,13 @@ static void iptunnel_print_help(struct link_util *lu, int argc, char **argv,
|
||||
" [ [no]encap-csum ]\n"
|
||||
" [ [no]encap-csum6 ]\n"
|
||||
" [ [no]encap-remcsum ]\n"
|
||||
);
|
||||
if (strcmp(lu->id, "sit") == 0) {
|
||||
mode = "{ ip6ip | ipip | mplsip | any } ]\n"
|
||||
" [ isatap";
|
||||
} else {
|
||||
mode = "{ ipip | mplsip | any }";
|
||||
}
|
||||
fprintf(f,
|
||||
" [ mode %s ]\n"
|
||||
"\n",
|
||||
mode
|
||||
);
|
||||
fprintf(f,
|
||||
"\n"
|
||||
"Where: ADDR := { IP_ADDRESS | any }\n"
|
||||
" TOS := { NUMBER | inherit }\n"
|
||||
" TTL := { 1..255 | inherit }\n"
|
||||
" MARK := { 0x0..0xffffffff }\n"
|
||||
);
|
||||
" MARK := { 0x0..0xffffffff }\n",
|
||||
lu->id, mode);
|
||||
}
|
||||
|
||||
static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -26,22 +26,16 @@
|
||||
static void vti_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||
{
|
||||
fprintf(f,
|
||||
"Usage: ... %-4s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-4s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ [i|o]key KEY ]\n"
|
||||
" [ dev PHYS_DEV ]\n"
|
||||
" [ fwmark MARK ]\n"
|
||||
"\n"
|
||||
);
|
||||
fprintf(f,
|
||||
"Where: ADDR := { IP%s_ADDRESS }\n"
|
||||
"Where: ADDR := { IP_ADDRESS }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||
" MARK := { 0x0..0xffffffff }\n",
|
||||
""
|
||||
);
|
||||
lu->id);
|
||||
}
|
||||
|
||||
static int vti_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -28,22 +28,16 @@ static void vti6_print_help(struct link_util *lu, int argc, char **argv,
|
||||
FILE *f)
|
||||
{
|
||||
fprintf(f,
|
||||
"Usage: ... %-4s [ remote ADDR ]\n",
|
||||
lu->id
|
||||
);
|
||||
fprintf(f,
|
||||
"Usage: ... %-4s [ remote ADDR ]\n"
|
||||
" [ local ADDR ]\n"
|
||||
" [ [i|o]key KEY ]\n"
|
||||
" [ dev PHYS_DEV ]\n"
|
||||
" [ fwmark MARK ]\n"
|
||||
"\n"
|
||||
);
|
||||
fprintf(f,
|
||||
"Where: ADDR := { IP%s_ADDRESS }\n"
|
||||
"Where: ADDR := { IPV6_ADDRESS }\n"
|
||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||
" MARK := { 0x0..0xffffffff }\n",
|
||||
"V6"
|
||||
);
|
||||
lu->id);
|
||||
}
|
||||
|
||||
static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -16,8 +16,11 @@
|
||||
static void xfrm_print_help(struct link_util *lu, int argc, char **argv,
|
||||
FILE *f)
|
||||
{
|
||||
fprintf(f, "Usage: ... %-4s dev PHYS_DEV [ if_id IF-ID ]\n", lu->id);
|
||||
fprintf(f, "\nWhere: IF-ID := { 0x0..0xffffffff }\n");
|
||||
fprintf(f,
|
||||
"Usage: ... %-4s dev PHYS_DEV [ if_id IF-ID ]\n"
|
||||
"\n"
|
||||
"Where: IF-ID := { 0x0..0xffffffff }\n",
|
||||
lu->id);
|
||||
}
|
||||
|
||||
static int xfrm_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
|
@ -62,10 +62,11 @@ static int dump_msg2(struct nlmsghdr *n, void *arg)
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: rtmon [ OPTIONS ] file FILE [ all | LISTofOBJECTS ]\n");
|
||||
fprintf(stderr, "OPTIONS := { -f[amily] { inet | inet6 | link | help } |\n"
|
||||
" -4 | -6 | -0 | -V[ersion] }\n");
|
||||
fprintf(stderr, "LISTofOBJECTS := [ link ] [ address ] [ route ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: rtmon [ OPTIONS ] file FILE [ all | LISTofOBJECTS ]\n"
|
||||
"OPTIONS := { -f[amily] { inet | inet6 | link | help } |\n"
|
||||
" -4 | -6 | -0 | -V[ersion] }\n"
|
||||
"LISTofOBJECTS := [ link ] [ address ] [ route ]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -28,10 +28,11 @@
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip tcp_metrics/tcpmetrics { COMMAND | help }\n");
|
||||
fprintf(stderr, " ip tcp_metrics { show | flush } SELECTOR\n");
|
||||
fprintf(stderr, " ip tcp_metrics delete [ address ] ADDRESS\n");
|
||||
fprintf(stderr, "SELECTOR := [ [ address ] PREFIX ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip tcp_metrics/tcpmetrics { COMMAND | help }\n"
|
||||
" ip tcp_metrics { show | flush } SELECTOR\n"
|
||||
" ip tcp_metrics delete [ address ] ADDRESS\n"
|
||||
"SELECTOR := [ [ address ] PREFIX ]\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -39,8 +39,9 @@ static bool nokeys;
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip xfrm monitor [ nokeys ] [ all-nsid ] [ all | OBJECTS | help ]\n");
|
||||
fprintf(stderr, "OBJECTS := { acquire | expire | SA | aevent | policy | report }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip xfrm monitor [ nokeys ] [ all-nsid ] [ all | OBJECTS | help ]\n"
|
||||
"OBJECTS := { acquire | expire | SA | aevent | policy | report }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -52,51 +52,60 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip xfrm policy { add | update } SELECTOR dir DIR [ ctx CTX ]\n");
|
||||
fprintf(stderr, " [ mark MARK [ mask MASK ] ] [ index INDEX ] [ ptype PTYPE ]\n");
|
||||
fprintf(stderr, " [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ]\n");
|
||||
fprintf(stderr, " [ if_id IF_ID ] [ LIMIT-LIST ] [ TMPL-LIST ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm policy { delete | get } { SELECTOR | index INDEX } dir DIR\n");
|
||||
fprintf(stderr, " [ ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm policy { deleteall | list } [ nosock ] [ SELECTOR ] [ dir DIR ]\n");
|
||||
fprintf(stderr, " [ index INDEX ] [ ptype PTYPE ] [ action ACTION ] [ priority PRIORITY ]\n");
|
||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm policy flush [ ptype PTYPE ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm policy count\n");
|
||||
fprintf(stderr, "Usage: ip xfrm policy set [ hthresh4 LBITS RBITS ] [ hthresh6 LBITS RBITS ]\n");
|
||||
fprintf(stderr, "SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n");
|
||||
fprintf(stderr, "UPSPEC := proto { { ");
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_TCP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_UDP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_SCTP));
|
||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_DCCP));
|
||||
fprintf(stderr, " } [ sport PORT ] [ dport PORT ] |\n");
|
||||
fprintf(stderr, " { ");
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMPV6));
|
||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_MH));
|
||||
fprintf(stderr, " } [ type NUMBER ] [ code NUMBER ] |\n");
|
||||
fprintf(stderr, " %s", strxf_proto(IPPROTO_GRE));
|
||||
fprintf(stderr, " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n");
|
||||
fprintf(stderr, "DIR := in | out | fwd\n");
|
||||
fprintf(stderr, "PTYPE := main | sub\n");
|
||||
fprintf(stderr, "ACTION := allow | block\n");
|
||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
||||
fprintf(stderr, "FLAG := localok | icmp\n");
|
||||
fprintf(stderr, "LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n");
|
||||
fprintf(stderr, "LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n");
|
||||
fprintf(stderr, " { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n");
|
||||
fprintf(stderr, "TMPL-LIST := [ TMPL-LIST ] tmpl TMPL\n");
|
||||
fprintf(stderr, "TMPL := ID [ mode MODE ] [ reqid REQID ] [ level LEVEL ]\n");
|
||||
fprintf(stderr, "ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n");
|
||||
fprintf(stderr, "XFRM-PROTO := ");
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ESP));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_AH));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_COMP));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ROUTING));
|
||||
fprintf(stderr, "%s\n", strxf_xfrmproto(IPPROTO_DSTOPTS));
|
||||
fprintf(stderr, "MODE := transport | tunnel | beet | ro | in_trigger\n");
|
||||
fprintf(stderr, "LEVEL := required | use\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip xfrm policy { add | update } SELECTOR dir DIR [ ctx CTX ]\n"
|
||||
" [ mark MARK [ mask MASK ] ] [ index INDEX ] [ ptype PTYPE ]\n"
|
||||
" [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ]\n"
|
||||
" [ if_id IF_ID ] [ LIMIT-LIST ] [ TMPL-LIST ]\n"
|
||||
"Usage: ip xfrm policy { delete | get } { SELECTOR | index INDEX } dir DIR\n"
|
||||
" [ ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]\n"
|
||||
"Usage: ip xfrm policy { deleteall | list } [ nosock ] [ SELECTOR ] [ dir DIR ]\n"
|
||||
" [ index INDEX ] [ ptype PTYPE ] [ action ACTION ] [ priority PRIORITY ]\n"
|
||||
" [ flag FLAG-LIST ]\n"
|
||||
"Usage: ip xfrm policy flush [ ptype PTYPE ]\n"
|
||||
"Usage: ip xfrm policy count\n"
|
||||
"Usage: ip xfrm policy set [ hthresh4 LBITS RBITS ] [ hthresh6 LBITS RBITS ]\n"
|
||||
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||
"UPSPEC := proto { { ");
|
||||
fprintf(stderr, "%s | %s | %s | %s } ",
|
||||
strxf_proto(IPPROTO_TCP),
|
||||
strxf_proto(IPPROTO_UDP),
|
||||
strxf_proto(IPPROTO_SCTP),
|
||||
strxf_proto(IPPROTO_DCCP));
|
||||
fprintf(stderr,
|
||||
"[ sport PORT ] [ dport PORT ] |\n"
|
||||
" { %s | %s | %s } ",
|
||||
strxf_proto(IPPROTO_ICMP),
|
||||
strxf_proto(IPPROTO_ICMPV6),
|
||||
strxf_proto(IPPROTO_MH));
|
||||
fprintf(stderr,
|
||||
"[ type NUMBER ] [ code NUMBER ] |\n"
|
||||
" %s",
|
||||
strxf_proto(IPPROTO_GRE));
|
||||
fprintf(stderr,
|
||||
" [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
"DIR := in | out | fwd\n"
|
||||
"PTYPE := main | sub\n"
|
||||
"ACTION := allow | block\n"
|
||||
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||
"FLAG := localok | icmp\n"
|
||||
"LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n"
|
||||
"LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n"
|
||||
" { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n"
|
||||
"TMPL-LIST := [ TMPL-LIST ] tmpl TMPL\n"
|
||||
"TMPL := ID [ mode MODE ] [ reqid REQID ] [ level LEVEL ]\n"
|
||||
"ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n"
|
||||
"XFRM-PROTO := ");
|
||||
fprintf(stderr,
|
||||
"%s | %s | %s | %s | %s\n",
|
||||
strxf_xfrmproto(IPPROTO_ESP),
|
||||
strxf_xfrmproto(IPPROTO_AH),
|
||||
strxf_xfrmproto(IPPROTO_COMP),
|
||||
strxf_xfrmproto(IPPROTO_ROUTING),
|
||||
strxf_xfrmproto(IPPROTO_DSTOPTS));
|
||||
fprintf(stderr,
|
||||
"MODE := transport | tunnel | beet | ro | in_trigger\n"
|
||||
"LEVEL := required | use\n");
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
|
138
ip/xfrm_state.c
138
ip/xfrm_state.c
@ -54,66 +54,84 @@ static void usage(void) __attribute__((noreturn));
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ip xfrm state { add | update } ID [ ALGO-LIST ] [ mode MODE ]\n");
|
||||
fprintf(stderr, " [ mark MARK [ mask MASK ] ] [ reqid REQID ] [ seq SEQ ]\n");
|
||||
fprintf(stderr, " [ replay-window SIZE ] [ replay-seq SEQ ] [ replay-oseq SEQ ]\n");
|
||||
fprintf(stderr, " [ replay-seq-hi SEQ ] [ replay-oseq-hi SEQ ]\n");
|
||||
fprintf(stderr, " [ flag FLAG-LIST ] [ sel SELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ]\n");
|
||||
fprintf(stderr, " [ coa ADDR[/PLEN] ] [ ctx CTX ] [ extra-flag EXTRA-FLAG-LIST ]\n");
|
||||
fprintf(stderr, " [ offload [dev DEV] dir DIR ]\n");
|
||||
fprintf(stderr, " [ output-mark OUTPUT-MARK ]\n");
|
||||
+ fprintf(stderr, " [ if_id IF_ID ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state allocspi ID [ mode MODE ] [ mark MARK [ mask MASK ] ]\n");
|
||||
fprintf(stderr, " [ reqid REQID ] [ seq SEQ ] [ min SPI max SPI ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state { delete | get } ID [ mark MARK [ mask MASK ] ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state deleteall [ ID ] [ mode MODE ] [ reqid REQID ]\n");
|
||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state list [ nokeys ] [ ID ] [ mode MODE ] [ reqid REQID ]\n");
|
||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state flush [ proto XFRM-PROTO ]\n");
|
||||
fprintf(stderr, "Usage: ip xfrm state count\n");
|
||||
fprintf(stderr, "ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n");
|
||||
fprintf(stderr, "XFRM-PROTO := ");
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ESP));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_AH));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_COMP));
|
||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ROUTING));
|
||||
fprintf(stderr, "%s\n", strxf_xfrmproto(IPPROTO_DSTOPTS));
|
||||
fprintf(stderr, "ALGO-LIST := [ ALGO-LIST ] ALGO\n");
|
||||
fprintf(stderr, "ALGO := { ");
|
||||
fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_CRYPT));
|
||||
fprintf(stderr, "%s", strxf_algotype(XFRMA_ALG_AUTH));
|
||||
fprintf(stderr, " } ALGO-NAME ALGO-KEYMAT |\n");
|
||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_AUTH_TRUNC));
|
||||
fprintf(stderr, " ALGO-NAME ALGO-KEYMAT ALGO-TRUNC-LEN |\n");
|
||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_AEAD));
|
||||
fprintf(stderr, " ALGO-NAME ALGO-KEYMAT ALGO-ICV-LEN |\n");
|
||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_COMP));
|
||||
fprintf(stderr, " ALGO-NAME\n");
|
||||
fprintf(stderr, "MODE := transport | tunnel | beet | ro | in_trigger\n");
|
||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
||||
fprintf(stderr, "FLAG := noecn | decap-dscp | nopmtudisc | wildrecv | icmp | af-unspec | align4 | esn\n");
|
||||
fprintf(stderr, "EXTRA-FLAG-LIST := [ EXTRA-FLAG-LIST ] EXTRA-FLAG\n");
|
||||
fprintf(stderr, "EXTRA-FLAG := dont-encap-dscp\n");
|
||||
fprintf(stderr, "SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n");
|
||||
fprintf(stderr, "UPSPEC := proto { { ");
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_TCP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_UDP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_SCTP));
|
||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_DCCP));
|
||||
fprintf(stderr, " } [ sport PORT ] [ dport PORT ] |\n");
|
||||
fprintf(stderr, " { ");
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMP));
|
||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMPV6));
|
||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_MH));
|
||||
fprintf(stderr, " } [ type NUMBER ] [ code NUMBER ] |\n");
|
||||
fprintf(stderr, " %s", strxf_proto(IPPROTO_GRE));
|
||||
fprintf(stderr, " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n");
|
||||
fprintf(stderr, "LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n");
|
||||
fprintf(stderr, "LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n");
|
||||
fprintf(stderr, " { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n");
|
||||
fprintf(stderr, "ENCAP := { espinudp | espinudp-nonike } SPORT DPORT OADDR\n");
|
||||
fprintf(stderr, "DIR := in | out\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ip xfrm state { add | update } ID [ ALGO-LIST ] [ mode MODE ]\n"
|
||||
" [ mark MARK [ mask MASK ] ] [ reqid REQID ] [ seq SEQ ]\n"
|
||||
" [ replay-window SIZE ] [ replay-seq SEQ ] [ replay-oseq SEQ ]\n"
|
||||
" [ replay-seq-hi SEQ ] [ replay-oseq-hi SEQ ]\n"
|
||||
" [ flag FLAG-LIST ] [ sel SELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ]\n"
|
||||
" [ coa ADDR[/PLEN] ] [ ctx CTX ] [ extra-flag EXTRA-FLAG-LIST ]\n"
|
||||
" [ offload [dev DEV] dir DIR ]\n"
|
||||
" [ output-mark OUTPUT-MARK ]\n"
|
||||
" [ if_id IF_ID ]\n"
|
||||
"Usage: ip xfrm state allocspi ID [ mode MODE ] [ mark MARK [ mask MASK ] ]\n"
|
||||
" [ reqid REQID ] [ seq SEQ ] [ min SPI max SPI ]\n"
|
||||
"Usage: ip xfrm state { delete | get } ID [ mark MARK [ mask MASK ] ]\n"
|
||||
"Usage: ip xfrm state deleteall [ ID ] [ mode MODE ] [ reqid REQID ]\n"
|
||||
" [ flag FLAG-LIST ]\n"
|
||||
"Usage: ip xfrm state list [ nokeys ] [ ID ] [ mode MODE ] [ reqid REQID ]\n"
|
||||
" [ flag FLAG-LIST ]\n"
|
||||
"Usage: ip xfrm state flush [ proto XFRM-PROTO ]\n"
|
||||
"Usage: ip xfrm state count\n"
|
||||
"ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n"
|
||||
"XFRM-PROTO := ");
|
||||
fprintf(stderr,
|
||||
"%s | %s | %s | %s | %s\n",
|
||||
strxf_xfrmproto(IPPROTO_ESP),
|
||||
strxf_xfrmproto(IPPROTO_AH),
|
||||
strxf_xfrmproto(IPPROTO_COMP),
|
||||
strxf_xfrmproto(IPPROTO_ROUTING),
|
||||
strxf_xfrmproto(IPPROTO_DSTOPTS));
|
||||
fprintf(stderr,
|
||||
"ALGO-LIST := [ ALGO-LIST ] ALGO\n"
|
||||
"ALGO := { ");
|
||||
fprintf(stderr,
|
||||
"%s | %s",
|
||||
strxf_algotype(XFRMA_ALG_CRYPT),
|
||||
strxf_algotype(XFRMA_ALG_AUTH));
|
||||
fprintf(stderr,
|
||||
" } ALGO-NAME ALGO-KEYMAT |\n"
|
||||
" %s", strxf_algotype(XFRMA_ALG_AUTH_TRUNC));
|
||||
fprintf(stderr,
|
||||
" ALGO-NAME ALGO-KEYMAT ALGO-TRUNC-LEN |\n"
|
||||
" %s", strxf_algotype(XFRMA_ALG_AEAD));
|
||||
fprintf(stderr,
|
||||
" ALGO-NAME ALGO-KEYMAT ALGO-ICV-LEN |\n"
|
||||
" %s", strxf_algotype(XFRMA_ALG_COMP));
|
||||
fprintf(stderr,
|
||||
" ALGO-NAME\n"
|
||||
"MODE := transport | tunnel | beet | ro | in_trigger\n"
|
||||
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||
"FLAG := noecn | decap-dscp | nopmtudisc | wildrecv | icmp | af-unspec | align4 | esn\n"
|
||||
"EXTRA-FLAG-LIST := [ EXTRA-FLAG-LIST ] EXTRA-FLAG\n"
|
||||
"EXTRA-FLAG := dont-encap-dscp\n"
|
||||
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||
"UPSPEC := proto { { ");
|
||||
fprintf(stderr,
|
||||
"%s | %s | %s | %s",
|
||||
strxf_proto(IPPROTO_TCP),
|
||||
strxf_proto(IPPROTO_UDP),
|
||||
strxf_proto(IPPROTO_SCTP),
|
||||
strxf_proto(IPPROTO_DCCP));
|
||||
fprintf(stderr,
|
||||
" } [ sport PORT ] [ dport PORT ] |\n"
|
||||
" { ");
|
||||
fprintf(stderr,
|
||||
"%s | %s | %s",
|
||||
strxf_proto(IPPROTO_ICMP),
|
||||
strxf_proto(IPPROTO_ICMPV6),
|
||||
strxf_proto(IPPROTO_MH));
|
||||
fprintf(stderr,
|
||||
" } [ type NUMBER ] [ code NUMBER ] |\n");
|
||||
fprintf(stderr,
|
||||
" %s", strxf_proto(IPPROTO_GRE));
|
||||
fprintf(stderr,
|
||||
" [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||
"LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n"
|
||||
"LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n"
|
||||
" { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n"
|
||||
"ENCAP := { espinudp | espinudp-nonike } SPORT DPORT OADDR\n"
|
||||
"DIR := in | out\n");
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
|
@ -55,28 +55,31 @@ static struct option opts[] = {
|
||||
|
||||
static int usage(char *name, int exit_code)
|
||||
{
|
||||
fprintf(stderr, "%s Version %s\n", name, LNSTAT_VERSION);
|
||||
fprintf(stderr, "Copyright (C) 2004 by Harald Welte <laforge@gnumonks.org>\n");
|
||||
fprintf(stderr, "This program is free software licensed under GNU GPLv2\nwith ABSOLUTELY NO WARRANTY.\n\n");
|
||||
fprintf(stderr, "Parameters:\n");
|
||||
fprintf(stderr, "\t-V --version\t\tPrint Version of Program\n");
|
||||
fprintf(stderr, "\t-c --count <count>\t"
|
||||
"Print <count> number of intervals\n");
|
||||
fprintf(stderr, "\t-d --dump\t\t"
|
||||
"Dump list of available files/keys\n");
|
||||
fprintf(stderr, "\t-j --json\t\t"
|
||||
"Display in JSON format\n");
|
||||
fprintf(stderr, "\t-f --file <file>\tStatistics file to use\n");
|
||||
fprintf(stderr, "\t-h --help\t\tThis help message\n");
|
||||
fprintf(stderr, "\t-i --interval <intv>\t"
|
||||
"Set interval to 'intv' seconds\n");
|
||||
fprintf(stderr, "\t-k --keys k,k,k,...\tDisplay only keys specified\n");
|
||||
fprintf(stderr, "\t-s --subject [0-2]\tControl header printing:\n");
|
||||
fprintf(stderr, "\t\t\t\t0 = never\n");
|
||||
fprintf(stderr, "\t\t\t\t1 = once\n");
|
||||
fprintf(stderr, "\t\t\t\t2 = every 20 lines (default))\n");
|
||||
fprintf(stderr, "\t-w --width n,n,n,...\tWidth for each field\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr,
|
||||
"%s Version %s\n"
|
||||
"Copyright (C) 2004 by Harald Welte <laforge@gnumonks.org>\n"
|
||||
"This program is free software licensed under GNU GPLv2\nwith ABSOLUTELY NO WARRANTY.\n"
|
||||
"\n"
|
||||
"Parameters:\n"
|
||||
" -V --version Print Version of Program\n"
|
||||
" -c --count <count> "
|
||||
"Print <count> number of intervals\n"
|
||||
" -d --dump "
|
||||
"Dump list of available files/keys\n"
|
||||
" -j --json "
|
||||
"Display in JSON format\n"
|
||||
" -f --file <file> Statistics file to use\n"
|
||||
" -h --help This help message\n"
|
||||
" -i --interval <intv> "
|
||||
"Set interval to 'intv' seconds\n"
|
||||
" -k --keys k,k,k,... Display only keys specified\n"
|
||||
" -s --subject [0-2] Control header printing:\n"
|
||||
" 0 = never\n"
|
||||
" 1 = once\n"
|
||||
" 2 = every 20 lines (default))\n"
|
||||
" -w --width n,n,n,... Width for each field\n"
|
||||
"\n",
|
||||
name, LNSTAT_VERSION);
|
||||
|
||||
exit(exit_code);
|
||||
}
|
||||
|
28
tc/e_bpf.c
28
tc/e_bpf.c
@ -26,19 +26,21 @@ static char *argv_default[] = { BPF_DEFAULT_CMD, NULL };
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... bpf [ import UDS_FILE ] [ run CMD ]\n");
|
||||
fprintf(stderr, " ... bpf [ debug ]\n");
|
||||
fprintf(stderr, " ... bpf [ graft MAP_FILE ] [ key KEY ]\n");
|
||||
fprintf(stderr, " `... [ object-file OBJ_FILE ] [ type TYPE ] [ section NAME ] [ verbose ]\n");
|
||||
fprintf(stderr, " `... [ object-pinned PROG_FILE ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where UDS_FILE provides the name of a unix domain socket file\n");
|
||||
fprintf(stderr, "to import eBPF maps and the optional CMD denotes the command\n");
|
||||
fprintf(stderr, "to be executed (default: \'%s\').\n", BPF_DEFAULT_CMD);
|
||||
fprintf(stderr, "Where MAP_FILE points to a pinned map, OBJ_FILE to an object file\n");
|
||||
fprintf(stderr, "and PROG_FILE to a pinned program. TYPE can be {cls, act}, where\n");
|
||||
fprintf(stderr, "\'cls\' is default. KEY is optional and can be inferred from the\n");
|
||||
fprintf(stderr, "section name, otherwise it needs to be provided.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... bpf [ import UDS_FILE ] [ run CMD ]\n"
|
||||
" ... bpf [ debug ]\n"
|
||||
" ... bpf [ graft MAP_FILE ] [ key KEY ]\n"
|
||||
" `... [ object-file OBJ_FILE ] [ type TYPE ] [ section NAME ] [ verbose ]\n"
|
||||
" `... [ object-pinned PROG_FILE ]\n"
|
||||
"\n"
|
||||
"Where UDS_FILE provides the name of a unix domain socket file\n"
|
||||
"to import eBPF maps and the optional CMD denotes the command\n"
|
||||
"to be executed (default: \'%s\').\n"
|
||||
"Where MAP_FILE points to a pinned map, OBJ_FILE to an object file\n"
|
||||
"and PROG_FILE to a pinned program. TYPE can be {cls, act}, where\n"
|
||||
"\'cls\' is default. KEY is optional and can be inferred from the\n"
|
||||
"section name, otherwise it needs to be provided.\n",
|
||||
BPF_DEFAULT_CMD);
|
||||
}
|
||||
|
||||
static int bpf_num_env_entries(void)
|
||||
|
16
tc/f_basic.c
16
tc/f_basic.c
@ -26,13 +26,15 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... basic [ match EMATCH_TREE ]\n");
|
||||
fprintf(stderr, " [ action ACTION_SPEC ] [ classid CLASSID ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: SELECTOR := SAMPLE SAMPLE ...\n");
|
||||
fprintf(stderr, " FILTERID := X:Y:Z\n");
|
||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... basic [ match EMATCH_TREE ]\n"
|
||||
" [ action ACTION_SPEC ] [ classid CLASSID ]\n"
|
||||
"\n"
|
||||
"Where: SELECTOR := SAMPLE SAMPLE ...\n"
|
||||
" FILTERID := X:Y:Z\n"
|
||||
" ACTION_SPEC := ... look at individual actions\n"
|
||||
"\n"
|
||||
"NOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
}
|
||||
|
||||
static int basic_parse_opt(struct filter_util *qu, char *handle,
|
||||
|
62
tc/f_bpf.c
62
tc/f_bpf.c
@ -23,36 +23,38 @@ static const enum bpf_prog_type bpf_type = BPF_PROG_TYPE_SCHED_CLS;
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... bpf ...\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "BPF use case:\n");
|
||||
fprintf(stderr, " bytecode BPF_BYTECODE\n");
|
||||
fprintf(stderr, " bytecode-file FILE\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "eBPF use case:\n");
|
||||
fprintf(stderr, " object-file FILE [ section CLS_NAME ] [ export UDS_FILE ]");
|
||||
fprintf(stderr, " [ verbose ] [ direct-action ] [ skip_hw | skip_sw ]\n");
|
||||
fprintf(stderr, " object-pinned FILE [ direct-action ] [ skip_hw | skip_sw ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Common remaining options:\n");
|
||||
fprintf(stderr, " [ action ACTION_SPEC ]\n");
|
||||
fprintf(stderr, " [ classid CLASSID ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n");
|
||||
fprintf(stderr, "c,t,f,k and s are decimals; s denotes number of 4-tuples\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where FILE points to a file containing the BPF_BYTECODE string,\n");
|
||||
fprintf(stderr, "an ELF file containing eBPF map definitions and bytecode, or a\n");
|
||||
fprintf(stderr, "pinned eBPF program.\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where CLS_NAME refers to the section name containing the\n");
|
||||
fprintf(stderr, "classifier (default \'%s\').\n", bpf_prog_to_default_section(bpf_type));
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where UDS_FILE points to a unix domain socket file in order\n");
|
||||
fprintf(stderr, "to hand off control of all created eBPF maps to an agent.\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "ACTION_SPEC := ... look at individual actions\n");
|
||||
fprintf(stderr, "NOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... bpf ...\n"
|
||||
"\n"
|
||||
"BPF use case:\n"
|
||||
" bytecode BPF_BYTECODE\n"
|
||||
" bytecode-file FILE\n"
|
||||
"\n"
|
||||
"eBPF use case:\n"
|
||||
" object-file FILE [ section CLS_NAME ] [ export UDS_FILE ]"
|
||||
" [ verbose ] [ direct-action ] [ skip_hw | skip_sw ]\n"
|
||||
" object-pinned FILE [ direct-action ] [ skip_hw | skip_sw ]\n"
|
||||
"\n"
|
||||
"Common remaining options:\n"
|
||||
" [ action ACTION_SPEC ]\n"
|
||||
" [ classid CLASSID ]\n"
|
||||
"\n"
|
||||
"Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n"
|
||||
"c,t,f,k and s are decimals; s denotes number of 4-tuples\n"
|
||||
"\n"
|
||||
"Where FILE points to a file containing the BPF_BYTECODE string,\n"
|
||||
"an ELF file containing eBPF map definitions and bytecode, or a\n"
|
||||
"pinned eBPF program.\n"
|
||||
"\n"
|
||||
"Where CLS_NAME refers to the section name containing the\n"
|
||||
"classifier (default \'%s\').\n"
|
||||
"\n"
|
||||
"Where UDS_FILE points to a unix domain socket file in order\n"
|
||||
"to hand off control of all created eBPF maps to an agent.\n"
|
||||
"\n"
|
||||
"ACTION_SPEC := ... look at individual actions\n"
|
||||
"NOTE: CLASSID is parsed as hexadecimal input.\n",
|
||||
bpf_prog_to_default_section(bpf_type));
|
||||
}
|
||||
|
||||
static void bpf_cbpf_cb(void *nl, const struct sock_filter *ops, int ops_len)
|
||||
|
19
tc/f_fw.c
19
tc/f_fw.c
@ -25,18 +25,13 @@
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Usage: ... fw [ classid CLASSID ] [ indev DEV ] [ action ACTION_SPEC ]\n");
|
||||
fprintf(stderr,
|
||||
" CLASSID := Push matching packets to the class identified by CLASSID with format X:Y\n");
|
||||
fprintf(stderr,
|
||||
" CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
" DEV := specify device for incoming device classification.\n");
|
||||
fprintf(stderr,
|
||||
" ACTION_SPEC := Apply an action on matching packets.\n");
|
||||
fprintf(stderr,
|
||||
" NOTE: handle is represented as HANDLE[/FWMASK].\n");
|
||||
fprintf(stderr, " FWMASK is 0xffffffff by default.\n");
|
||||
"Usage: ... fw [ classid CLASSID ] [ indev DEV ] [ action ACTION_SPEC ]\n"
|
||||
" CLASSID := Push matching packets to the class identified by CLASSID with format X:Y\n"
|
||||
" CLASSID is parsed as hexadecimal input.\n"
|
||||
" DEV := specify device for incoming device classification.\n"
|
||||
" ACTION_SPEC := Apply an action on matching packets.\n"
|
||||
" NOTE: handle is represented as HANDLE[/FWMASK].\n"
|
||||
" FWMASK is 0xffffffff by default.\n");
|
||||
}
|
||||
|
||||
static int fw_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *n)
|
||||
|
@ -25,13 +25,15 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... matchall [skip_sw | skip_hw]\n");
|
||||
fprintf(stderr, " [ action ACTION_SPEC ] [ classid CLASSID ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where: SELECTOR := SAMPLE SAMPLE ...\n");
|
||||
fprintf(stderr, " FILTERID := X:Y:Z\n");
|
||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... matchall [skip_sw | skip_hw]\n"
|
||||
" [ action ACTION_SPEC ] [ classid CLASSID ]\n"
|
||||
"\n"
|
||||
"Where: SELECTOR := SAMPLE SAMPLE ...\n"
|
||||
" FILTERID := X:Y:Z\n"
|
||||
" ACTION_SPEC := ... look at individual actions\n"
|
||||
"\n"
|
||||
"NOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
}
|
||||
|
||||
static int matchall_parse_opt(struct filter_util *qu, char *handle,
|
||||
|
12
tc/f_route.c
12
tc/f_route.c
@ -26,11 +26,13 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... route [ from REALM | fromif TAG ] [ to REALM ]\n");
|
||||
fprintf(stderr, " [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
||||
fprintf(stderr, " CLASSID := X:Y\n");
|
||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... route [ from REALM | fromif TAG ] [ to REALM ]\n"
|
||||
" [ classid CLASSID ] [ action ACTION_SPEC ]\n"
|
||||
" ACTION_SPEC := ... look at individual actions\n"
|
||||
" CLASSID := X:Y\n"
|
||||
"\n"
|
||||
"NOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
}
|
||||
|
||||
static int route_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *n)
|
||||
|
19
tc/f_rsvp.c
19
tc/f_rsvp.c
@ -25,15 +25,16 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... rsvp ipproto PROTOCOL session DST[/PORT | GPI ]\n");
|
||||
fprintf(stderr, " [ sender SRC[/PORT | GPI ] ]\n");
|
||||
fprintf(stderr, " [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
||||
fprintf(stderr, " [ tunnelid ID ] [ tunnel ID skip NUMBER ]\n");
|
||||
fprintf(stderr, "Where: GPI := { flowlabel NUMBER | spi/ah SPI | spi/esp SPI |\n");
|
||||
fprintf(stderr, " u{8|16|32} NUMBER mask MASK at OFFSET}\n");
|
||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
||||
fprintf(stderr, " FILTERID := X:Y\n");
|
||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... rsvp ipproto PROTOCOL session DST[/PORT | GPI ]\n"
|
||||
" [ sender SRC[/PORT | GPI ] ]\n"
|
||||
" [ classid CLASSID ] [ action ACTION_SPEC ]\n"
|
||||
" [ tunnelid ID ] [ tunnel ID skip NUMBER ]\n"
|
||||
"Where: GPI := { flowlabel NUMBER | spi/ah SPI | spi/esp SPI |\n"
|
||||
" u{8|16|32} NUMBER mask MASK at OFFSET}\n"
|
||||
" ACTION_SPEC := ... look at individual actions\n"
|
||||
" FILTERID := X:Y\n"
|
||||
"\nNOTE: CLASSID is parsed as hexadecimal input.\n");
|
||||
}
|
||||
|
||||
static int get_addr_and_pi(int *argc_p, char ***argv_p, inet_prefix *addr,
|
||||
|
@ -17,9 +17,10 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr," Usage: ... tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ]\n");
|
||||
fprintf(stderr, " [ pass_on | fall_through ]\n");
|
||||
fprintf(stderr," [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
||||
fprintf(stderr,
|
||||
" Usage: ... tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ]\n"
|
||||
" [ pass_on | fall_through ]\n"
|
||||
" [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
||||
}
|
||||
|
||||
static int tcindex_parse_opt(struct filter_util *qu, char *handle, int argc,
|
||||
|
@ -43,19 +43,19 @@ static void act_usage(void)
|
||||
* does that, they would know how to fix this ..
|
||||
*
|
||||
*/
|
||||
fprintf(stderr, "usage: tc actions <ACTSPECOP>*\n");
|
||||
fprintf(stderr,
|
||||
"Where: \tACTSPECOP := ACR | GD | FL\n"
|
||||
"\tACR := add | change | replace <ACTSPEC>*\n"
|
||||
"\tGD := get | delete | <ACTISPEC>*\n"
|
||||
"\tFL := ls | list | flush | <ACTNAMESPEC>\n"
|
||||
"\tACTNAMESPEC := action <ACTNAME>\n"
|
||||
"\tACTISPEC := <ACTNAMESPEC> <INDEXSPEC>\n"
|
||||
"\tACTSPEC := action <ACTDETAIL> [INDEXSPEC]\n"
|
||||
"\tINDEXSPEC := index <32 bit indexvalue>\n"
|
||||
"\tACTDETAIL := <ACTNAME> <ACTPARAMS>\n"
|
||||
"\t\tExample ACTNAME is gact, mirred, bpf, etc\n"
|
||||
"\t\tEach action has its own parameters (ACTPARAMS)\n"
|
||||
"usage: tc actions <ACTSPECOP>*\n"
|
||||
"Where: ACTSPECOP := ACR | GD | FL\n"
|
||||
" ACR := add | change | replace <ACTSPEC>*\n"
|
||||
" GD := get | delete | <ACTISPEC>*\n"
|
||||
" FL := ls | list | flush | <ACTNAMESPEC>\n"
|
||||
" ACTNAMESPEC := action <ACTNAME>\n"
|
||||
" ACTISPEC := <ACTNAMESPEC> <INDEXSPEC>\n"
|
||||
" ACTSPEC := action <ACTDETAIL> [INDEXSPEC]\n"
|
||||
" INDEXSPEC := index <32 bit indexvalue>\n"
|
||||
" ACTDETAIL := <ACTNAME> <ACTPARAMS>\n"
|
||||
" Example ACTNAME is gact, mirred, bpf, etc\n"
|
||||
" Each action has its own parameters (ACTPARAMS)\n"
|
||||
"\n");
|
||||
|
||||
exit(-1);
|
||||
|
54
tc/m_bpf.c
54
tc/m_bpf.c
@ -25,32 +25,34 @@ static const enum bpf_prog_type bpf_type = BPF_PROG_TYPE_SCHED_ACT;
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... bpf ... [ index INDEX ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "BPF use case:\n");
|
||||
fprintf(stderr, " bytecode BPF_BYTECODE\n");
|
||||
fprintf(stderr, " bytecode-file FILE\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "eBPF use case:\n");
|
||||
fprintf(stderr, " object-file FILE [ section ACT_NAME ] [ export UDS_FILE ]");
|
||||
fprintf(stderr, " [ verbose ]\n");
|
||||
fprintf(stderr, " object-pinned FILE\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n");
|
||||
fprintf(stderr, "c,t,f,k and s are decimals; s denotes number of 4-tuples\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where FILE points to a file containing the BPF_BYTECODE string,\n");
|
||||
fprintf(stderr, "an ELF file containing eBPF map definitions and bytecode, or a\n");
|
||||
fprintf(stderr, "pinned eBPF program.\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where ACT_NAME refers to the section name containing the\n");
|
||||
fprintf(stderr, "action (default \'%s\').\n", bpf_prog_to_default_section(bpf_type));
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where UDS_FILE points to a unix domain socket file in order\n");
|
||||
fprintf(stderr, "to hand off control of all created eBPF maps to an agent.\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Where optionally INDEX points to an existing action, or\n");
|
||||
fprintf(stderr, "explicitly specifies an action index upon creation.\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... bpf ... [ index INDEX ]\n"
|
||||
"\n"
|
||||
"BPF use case:\n"
|
||||
" bytecode BPF_BYTECODE\n"
|
||||
" bytecode-file FILE\n"
|
||||
"\n"
|
||||
"eBPF use case:\n"
|
||||
" object-file FILE [ section ACT_NAME ] [ export UDS_FILE ]"
|
||||
" [ verbose ]\n"
|
||||
" object-pinned FILE\n"
|
||||
"\n"
|
||||
"Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n"
|
||||
"c,t,f,k and s are decimals; s denotes number of 4-tuples\n"
|
||||
"\n"
|
||||
"Where FILE points to a file containing the BPF_BYTECODE string,\n"
|
||||
"an ELF file containing eBPF map definitions and bytecode, or a\n"
|
||||
"pinned eBPF program.\n"
|
||||
"\n"
|
||||
"Where ACT_NAME refers to the section name containing the\n"
|
||||
"action (default \'%s\').\n"
|
||||
"\n"
|
||||
"Where UDS_FILE points to a unix domain socket file in order\n"
|
||||
"to hand off control of all created eBPF maps to an agent.\n"
|
||||
"\n"
|
||||
"Where optionally INDEX points to an existing action, or\n"
|
||||
"explicitly specifies an action index upon creation.\n",
|
||||
bpf_prog_to_default_section(bpf_type));
|
||||
}
|
||||
|
||||
static void bpf_cbpf_cb(void *nl, const struct sock_filter *ops, int ops_len)
|
||||
|
@ -27,8 +27,9 @@
|
||||
static void
|
||||
explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... connmark [zone ZONE] [CONTROL] [index <INDEX>]\n");
|
||||
fprintf(stderr, "where :\n"
|
||||
fprintf(stderr,
|
||||
"Usage: ... connmark [zone ZONE] [CONTROL] [index <INDEX>]\n"
|
||||
"where :\n"
|
||||
"\tZONE is the conntrack zone\n"
|
||||
"\tCONTROL := reclassify | pipe | drop | continue | ok |\n"
|
||||
"\t goto chain <CHAIN_INDEX>\n");
|
||||
|
@ -27,10 +27,11 @@ static void est_help(void);
|
||||
|
||||
static void est_help(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... estimator INTERVAL TIME-CONST\n");
|
||||
fprintf(stderr, " INTERVAL is interval between measurements\n");
|
||||
fprintf(stderr, " TIME-CONST is averaging time constant\n");
|
||||
fprintf(stderr, "Example: ... est 1sec 8sec\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... estimator INTERVAL TIME-CONST\n"
|
||||
" INTERVAL is interval between measurements\n"
|
||||
" TIME-CONST is averaging time constant\n"
|
||||
"Example: ... est 1sec 8sec\n");
|
||||
}
|
||||
|
||||
int parse_estimator(int *p_argc, char ***p_argv, struct tc_estimator *est)
|
||||
|
@ -53,8 +53,7 @@ explain(void)
|
||||
"\tINDEX := index value used\n"
|
||||
"\n");
|
||||
#else
|
||||
fprintf(stderr, "Usage: ... gact <ACTION> [INDEX]\n");
|
||||
fprintf(stderr,
|
||||
fprintf(stderr, "Usage: ... gact <ACTION> [INDEX]\n"
|
||||
"Where: \tACTION := reclassify | drop | continue | pass | pipe |\n"
|
||||
" \t goto chain <CHAIN_INDEX> | jump <JUMP_COUNT>\n"
|
||||
"\tINDEX := index value used\n"
|
||||
|
@ -28,8 +28,7 @@
|
||||
static void ife_explain(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Usage:... ife {decode|encode} [{ALLOW|USE} ATTR] [dst DMAC] [src SMAC] [type TYPE] [CONTROL] [index INDEX]\n");
|
||||
fprintf(stderr,
|
||||
"Usage:... ife {decode|encode} [{ALLOW|USE} ATTR] [dst DMAC] [src SMAC] [type TYPE] [CONTROL] [index INDEX]\n"
|
||||
"\tALLOW := Encode direction. Allows encoding specified metadata\n"
|
||||
"\t\t e.g \"allow mark\"\n"
|
||||
"\tUSE := Encode direction. Enforce Static encoding of specified metadata\n"
|
||||
@ -39,9 +38,9 @@ static void ife_explain(void)
|
||||
"\tSMAC := optional 6 byte Source MAC address to encode\n"
|
||||
"\tTYPE := optional 16 bit ethertype to encode\n"
|
||||
"\tCONTROL := reclassify|pipe|drop|continue|ok\n"
|
||||
"\tINDEX := optional IFE table index value used\n");
|
||||
fprintf(stderr, "encode is used for sending IFE packets\n");
|
||||
fprintf(stderr, "decode is used for receiving IFE packets\n");
|
||||
"\tINDEX := optional IFE table index value used\n"
|
||||
"encode is used for sending IFE packets\n"
|
||||
"decode is used for receiving IFE packets\n");
|
||||
}
|
||||
|
||||
static void ife_usage(void)
|
||||
|
@ -34,8 +34,8 @@ static int pedit_debug;
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... pedit munge [ex] <MUNGE> [CONTROL]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... pedit munge [ex] <MUNGE> [CONTROL]\n"
|
||||
"Where: MUNGE := <RAW>|<LAYERED>\n"
|
||||
"\t<RAW>:= <OFFSETC>[ATC]<CMD>\n \t\tOFFSETC:= offset <offval> <u8|u16|u32>\n"
|
||||
"\t\tATC:= at <atval> offmask <maskval> shift <shiftval>\n"
|
||||
|
@ -37,15 +37,15 @@ struct action_util police_action_util = {
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... police rate BPS burst BYTES[/BYTES] [ mtu BYTES[/BYTES] ]\n");
|
||||
fprintf(stderr, " [ peakrate BPS ] [ avrate BPS ] [ overhead BYTES ]\n");
|
||||
fprintf(stderr, " [ linklayer TYPE ] [ CONTROL ]\n");
|
||||
|
||||
fprintf(stderr, "Where: CONTROL := conform-exceed <EXCEEDACT>[/NOTEXCEEDACT]\n");
|
||||
fprintf(stderr, " Define how to handle packets which exceed (<EXCEEDACT>)\n");
|
||||
fprintf(stderr, " or conform (<NOTEXCEEDACT>) the configured bandwidth limit.\n");
|
||||
fprintf(stderr, " EXCEEDACT/NOTEXCEEDACT := { pipe | ok | reclassify | drop | continue |\n");
|
||||
fprintf(stderr, " goto chain <CHAIN_INDEX> }\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... police rate BPS burst BYTES[/BYTES] [ mtu BYTES[/BYTES] ]\n"
|
||||
" [ peakrate BPS ] [ avrate BPS ] [ overhead BYTES ]\n"
|
||||
" [ linklayer TYPE ] [ CONTROL ]\n"
|
||||
"Where: CONTROL := conform-exceed <EXCEEDACT>[/NOTEXCEEDACT]\n"
|
||||
" Define how to handle packets which exceed (<EXCEEDACT>)\n"
|
||||
" or conform (<NOTEXCEEDACT>) the configured bandwidth limit.\n"
|
||||
" EXCEEDACT/NOTEXCEEDACT := { pipe | ok | reclassify | drop | continue |\n"
|
||||
" goto chain <CHAIN_INDEX> }\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -18,15 +18,16 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: sample SAMPLE_CONF\n");
|
||||
fprintf(stderr, "where:\n");
|
||||
fprintf(stderr, "\tSAMPLE_CONF := SAMPLE_PARAMS | SAMPLE_INDEX\n");
|
||||
fprintf(stderr, "\tSAMPLE_PARAMS := rate RATE group GROUP [trunc SIZE] [SAMPLE_INDEX]\n");
|
||||
fprintf(stderr, "\tSAMPLE_INDEX := index INDEX\n");
|
||||
fprintf(stderr, "\tRATE := The ratio of packets observed at the data source to the samples generated.\n");
|
||||
fprintf(stderr, "\tGROUP := the psample sampling group\n");
|
||||
fprintf(stderr, "\tSIZE := the truncation size\n");
|
||||
fprintf(stderr, "\tINDEX := integer index of the sample action\n");
|
||||
fprintf(stderr,
|
||||
"Usage: sample SAMPLE_CONF\n"
|
||||
"where:\n"
|
||||
"\tSAMPLE_CONF := SAMPLE_PARAMS | SAMPLE_INDEX\n"
|
||||
"\tSAMPLE_PARAMS := rate RATE group GROUP [trunc SIZE] [SAMPLE_INDEX]\n"
|
||||
"\tSAMPLE_INDEX := index INDEX\n"
|
||||
"\tRATE := The ratio of packets observed at the data source to the samples generated.\n"
|
||||
"\tGROUP := the psample sampling group\n"
|
||||
"\tSIZE := the truncation size\n"
|
||||
"\tINDEX := integer index of the sample action\n");
|
||||
}
|
||||
|
||||
static void usage(void)
|
||||
|
@ -80,8 +80,9 @@
|
||||
#endif
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage:... simple [sdata STRING] [index INDEX] [CONTROL]\n");
|
||||
fprintf(stderr, "\tSTRING being an arbitrary string\n"
|
||||
fprintf(stderr,
|
||||
"Usage:... simple [sdata STRING] [index INDEX] [CONTROL]\n"
|
||||
"\tSTRING being an arbitrary string\n"
|
||||
"\tINDEX := optional index value used\n"
|
||||
"\tCONTROL := reclassify|pipe|drop|continue|ok\n");
|
||||
}
|
||||
|
@ -21,9 +21,9 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: tunnel_key unset\n");
|
||||
fprintf(stderr, " tunnel_key set <TUNNEL_KEY>\n");
|
||||
fprintf(stderr,
|
||||
"Usage: tunnel_key unset\n"
|
||||
" tunnel_key set <TUNNEL_KEY>\n"
|
||||
"Where TUNNEL_KEY is a combination of:\n"
|
||||
"id <TUNNELID>\n"
|
||||
"src_ip <IP> (mandatory)\n"
|
||||
|
@ -40,8 +40,9 @@ static int atm_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... atm ( pvc ADDR | svc ADDR [ sap SAP ] ) [ qos QOS ] [ sndbuf BYTES ]\n");
|
||||
fprintf(stderr, " [ hdr HEX... ] [ excess ( CLASSID | clp ) ] [ clip ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... atm ( pvc ADDR | svc ADDR [ sap SAP ] ) [ qos QOS ] [ sndbuf BYTES ]\n"
|
||||
" [ hdr HEX... ] [ excess ( CLASSID | clp ) ] [ clip ]\n");
|
||||
}
|
||||
|
||||
|
||||
|
20
tc/q_cbq.c
20
tc/q_cbq.c
@ -25,19 +25,21 @@
|
||||
|
||||
static void explain_class(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... cbq bandwidth BPS rate BPS maxburst PKTS [ avpkt BYTES ]\n");
|
||||
fprintf(stderr, " [ minburst PKTS ] [ bounded ] [ isolated ]\n");
|
||||
fprintf(stderr, " [ allot BYTES ] [ mpu BYTES ] [ weight RATE ]\n");
|
||||
fprintf(stderr, " [ prio NUMBER ] [ cell BYTES ] [ ewma LOG ]\n");
|
||||
fprintf(stderr, " [ estimator INTERVAL TIME_CONSTANT ]\n");
|
||||
fprintf(stderr, " [ split CLASSID ] [ defmap MASK/CHANGE ]\n");
|
||||
fprintf(stderr, " [ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... cbq bandwidth BPS rate BPS maxburst PKTS [ avpkt BYTES ]\n"
|
||||
" [ minburst PKTS ] [ bounded ] [ isolated ]\n"
|
||||
" [ allot BYTES ] [ mpu BYTES ] [ weight RATE ]\n"
|
||||
" [ prio NUMBER ] [ cell BYTES ] [ ewma LOG ]\n"
|
||||
" [ estimator INTERVAL TIME_CONSTANT ]\n"
|
||||
" [ split CLASSID ] [ defmap MASK/CHANGE ]\n"
|
||||
" [ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||
}
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... cbq bandwidth BPS avpkt BYTES [ mpu BYTES ]\n");
|
||||
fprintf(stderr, " [ cell BYTES ] [ ewma LOG ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... cbq bandwidth BPS avpkt BYTES [ mpu BYTES ]\n"
|
||||
" [ cell BYTES ] [ ewma LOG ]\n");
|
||||
}
|
||||
|
||||
static void explain1(char *arg)
|
||||
|
@ -24,9 +24,9 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... cbs hicredit BYTES locredit BYTES sendslope BPS idleslope BPS\n");
|
||||
fprintf(stderr, " [offload 0|1]\n");
|
||||
|
||||
fprintf(stderr,
|
||||
"Usage: ... cbs hicredit BYTES locredit BYTES sendslope BPS idleslope BPS\n"
|
||||
" [offload 0|1]\n");
|
||||
}
|
||||
|
||||
static void explain1(const char *arg, const char *val)
|
||||
|
@ -26,8 +26,9 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... choke limit PACKETS bandwidth KBPS [ecn]\n");
|
||||
fprintf(stderr, " [ min PACKETS ] [ max PACKETS ] [ burst PACKETS ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... choke limit PACKETS bandwidth KBPS [ecn]\n"
|
||||
" [ min PACKETS ] [ max PACKETS ] [ burst PACKETS ]\n");
|
||||
}
|
||||
|
||||
static int choke_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
@ -52,9 +52,10 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... codel [ limit PACKETS ] [ target TIME ]\n");
|
||||
fprintf(stderr, " [ interval TIME ] [ ecn | noecn ]\n");
|
||||
fprintf(stderr, " [ ce_threshold TIME ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... codel [ limit PACKETS ] [ target TIME ]\n"
|
||||
" [ interval TIME ] [ ecn | noecn ]\n"
|
||||
" [ ce_threshold TIME ]\n");
|
||||
}
|
||||
|
||||
static int codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
11
tc/q_etf.c
11
tc/q_etf.c
@ -38,8 +38,9 @@ static const struct static_clockid {
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... etf delta NANOS clockid CLOCKID [offload] [deadline_mode]\n");
|
||||
fprintf(stderr, "CLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... etf delta NANOS clockid CLOCKID [offload] [deadline_mode]\n"
|
||||
"CLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
||||
}
|
||||
|
||||
static void explain1(const char *arg, const char *val)
|
||||
@ -49,8 +50,10 @@ static void explain1(const char *arg, const char *val)
|
||||
|
||||
static void explain_clockid(const char *val)
|
||||
{
|
||||
fprintf(stderr, "etf: illegal value for \"clockid\": \"%s\".\n", val);
|
||||
fprintf(stderr, "It must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
||||
fprintf(stderr,
|
||||
"etf: illegal value for \"clockid\": \"%s\".\n"
|
||||
"It must be a valid SYS-V id (i.e. CLOCK_TAI)\n",
|
||||
val);
|
||||
}
|
||||
|
||||
static int get_clockid(__s32 *val, const char *arg)
|
||||
|
15
tc/q_fq.c
15
tc/q_fq.c
@ -50,13 +50,14 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... fq [ limit PACKETS ] [ flow_limit PACKETS ]\n");
|
||||
fprintf(stderr, " [ quantum BYTES ] [ initial_quantum BYTES ]\n");
|
||||
fprintf(stderr, " [ maxrate RATE ] [ buckets NUMBER ]\n");
|
||||
fprintf(stderr, " [ [no]pacing ] [ refill_delay TIME ]\n");
|
||||
fprintf(stderr, " [ low_rate_threshold RATE ]\n");
|
||||
fprintf(stderr, " [ orphan_mask MASK]\n");
|
||||
fprintf(stderr, " [ ce_threshold TIME ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... fq [ limit PACKETS ] [ flow_limit PACKETS ]\n"
|
||||
" [ quantum BYTES ] [ initial_quantum BYTES ]\n"
|
||||
" [ maxrate RATE ] [ buckets NUMBER ]\n"
|
||||
" [ [no]pacing ] [ refill_delay TIME ]\n"
|
||||
" [ low_rate_threshold RATE ]\n"
|
||||
" [ orphan_mask MASK]\n"
|
||||
" [ ce_threshold TIME ]\n");
|
||||
}
|
||||
|
||||
static unsigned int ilog2(unsigned int val)
|
||||
|
@ -49,11 +49,12 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... fq_codel [ limit PACKETS ] [ flows NUMBER ]\n");
|
||||
fprintf(stderr, " [ memory_limit BYTES ]\n");
|
||||
fprintf(stderr, " [ target TIME ] [ interval TIME ]\n");
|
||||
fprintf(stderr, " [ quantum BYTES ] [ [no]ecn ]\n");
|
||||
fprintf(stderr, " [ ce_threshold TIME ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... fq_codel [ limit PACKETS ] [ flows NUMBER ]\n"
|
||||
"[ memory_limit BYTES ]\n"
|
||||
"[ target TIME ] [ interval TIME ]\n"
|
||||
"[ quantum BYTES ] [ [no]ecn ]\n"
|
||||
"[ ce_threshold TIME ]\n");
|
||||
}
|
||||
|
||||
static int fq_codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
11
tc/q_gred.c
11
tc/q_gred.c
@ -36,11 +36,12 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: tc qdisc { add | replace | change } ... gred setup vqs NUMBER\n");
|
||||
fprintf(stderr, " default DEFAULT_VQ [ grio ] [ limit BYTES ] [ecn] [harddrop]\n");
|
||||
fprintf(stderr, " tc qdisc change ... gred vq VQ [ prio VALUE ] limit BYTES\n");
|
||||
fprintf(stderr, " min BYTES max BYTES avpkt BYTES [ burst PACKETS ]\n");
|
||||
fprintf(stderr, " [ probability PROBABILITY ] [ bandwidth KBPS ] [ecn] [harddrop]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: tc qdisc { add | replace | change } ... gred setup vqs NUMBER\n"
|
||||
" default DEFAULT_VQ [ grio ] [ limit BYTES ] [ecn] [harddrop]\n"
|
||||
" tc qdisc change ... gred vq VQ [ prio VALUE ] limit BYTES\n"
|
||||
" min BYTES max BYTES avpkt BYTES [ burst PACKETS ]\n"
|
||||
" [ probability PROBABILITY ] [ bandwidth KBPS ] [ecn] [harddrop]\n");
|
||||
}
|
||||
|
||||
static int init_gred(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
13
tc/q_hhf.c
13
tc/q_hhf.c
@ -17,12 +17,13 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... hhf [ limit PACKETS ] [ quantum BYTES]\n");
|
||||
fprintf(stderr, " [ hh_limit NUMBER ]\n");
|
||||
fprintf(stderr, " [ reset_timeout TIME ]\n");
|
||||
fprintf(stderr, " [ admit_bytes BYTES ]\n");
|
||||
fprintf(stderr, " [ evict_timeout TIME ]\n");
|
||||
fprintf(stderr, " [ non_hh_weight NUMBER ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... hhf [ limit PACKETS ] [ quantum BYTES]\n"
|
||||
" [ hh_limit NUMBER ]\n"
|
||||
" [ reset_timeout TIME ]\n"
|
||||
" [ admit_bytes BYTES ]\n"
|
||||
" [ evict_timeout TIME ]\n"
|
||||
" [ non_hh_weight NUMBER ]\n");
|
||||
}
|
||||
|
||||
static int hhf_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
@ -23,11 +23,12 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]\n");
|
||||
fprintf(stderr, " [queues count1@offset1 count2@offset2 ...] ");
|
||||
fprintf(stderr, "[hw 1|0]\n");
|
||||
fprintf(stderr, " [mode dcb|channel]\n");
|
||||
fprintf(stderr, " [shaper bw_rlimit SHAPER_PARAMS]\n"
|
||||
fprintf(stderr,
|
||||
"Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]\n"
|
||||
" [queues count1@offset1 count2@offset2 ...] "
|
||||
"[hw 1|0]\n"
|
||||
" [mode dcb|channel]\n"
|
||||
" [shaper bw_rlimit SHAPER_PARAMS]\n"
|
||||
"Where: SHAPER_PARAMS := { min_rate MIN_RATE1 MIN_RATE2 ...|\n"
|
||||
" max_rate MAX_RATE1 MAX_RATE2 ... }\n");
|
||||
}
|
||||
|
@ -30,9 +30,10 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... pie [ limit PACKETS ][ target TIME us]\n");
|
||||
fprintf(stderr, " [ tupdate TIME us][ alpha ALPHA ]");
|
||||
fprintf(stderr, "[beta BETA ][bytemode | nobytemode][ecn | noecn ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... pie [ limit PACKETS ][ target TIME us]\n"
|
||||
" [ tupdate TIME us][ alpha ALPHA ]"
|
||||
"[beta BETA ][bytemode | nobytemode][ecn | noecn ]\n");
|
||||
}
|
||||
|
||||
#define ALPHA_MAX 32
|
||||
|
@ -27,9 +27,10 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... red limit BYTES [min BYTES] [max BYTES] avpkt BYTES [burst PACKETS]\n");
|
||||
fprintf(stderr, " [adaptive] [probability PROBABILITY] [bandwidth KBPS]\n");
|
||||
fprintf(stderr, " [ecn] [harddrop]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... red limit BYTES [min BYTES] [max BYTES] avpkt BYTES [burst PACKETS]\n"
|
||||
" [adaptive] [probability PROBABILITY] [bandwidth KBPS]\n"
|
||||
" [ecn] [harddrop]\n");
|
||||
}
|
||||
|
||||
static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||
|
13
tc/q_sfq.c
13
tc/q_sfq.c
@ -26,12 +26,13 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... sfq [ limit NUMBER ] [ perturb SECS ] [ quantum BYTES ]\n");
|
||||
fprintf(stderr, " [ divisor NUMBER ] [ flows NUMBER] [ depth NUMBER ]\n");
|
||||
fprintf(stderr, " [ headdrop ]\n");
|
||||
fprintf(stderr, " [ redflowlimit BYTES ] [ min BYTES ] [ max BYTES ]\n");
|
||||
fprintf(stderr, " [ avpkt BYTES ] [ burst PACKETS ] [ probability P ]\n");
|
||||
fprintf(stderr, " [ ecn ] [ harddrop ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... sfq [ limit NUMBER ] [ perturb SECS ] [ quantum BYTES ]\n"
|
||||
" [ divisor NUMBER ] [ flows NUMBER] [ depth NUMBER ]\n"
|
||||
" [ headdrop ]\n"
|
||||
" [ redflowlimit BYTES ] [ min BYTES ] [ max BYTES ]\n"
|
||||
" [ avpkt BYTES ] [ burst PACKETS ] [ probability P ]\n"
|
||||
" [ ecn ] [ harddrop ]\n");
|
||||
}
|
||||
|
||||
static int sfq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n, const char *dev)
|
||||
|
@ -47,13 +47,14 @@ static const struct static_clockid {
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... taprio clockid CLOCKID\n");
|
||||
fprintf(stderr, " [num_tc NUMBER] [map P0 P1 ...] ");
|
||||
fprintf(stderr, " [queues COUNT@OFFSET COUNT@OFFSET COUNT@OFFSET ...] ");
|
||||
fprintf(stderr, " [ [sched-entry index cmd gate-mask interval] ... ] ");
|
||||
fprintf(stderr, " [base-time time] ");
|
||||
fprintf(stderr, "\nCLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... taprio clockid CLOCKID\n"
|
||||
" [num_tc NUMBER] [map P0 P1 ...] "
|
||||
" [queues COUNT@OFFSET COUNT@OFFSET COUNT@OFFSET ...] "
|
||||
" [ [sched-entry index cmd gate-mask interval] ... ] "
|
||||
" [base-time time] "
|
||||
"\n"
|
||||
"CLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
||||
}
|
||||
|
||||
static void explain_clockid(const char *val)
|
||||
|
@ -24,9 +24,10 @@
|
||||
|
||||
static void explain(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]\n");
|
||||
fprintf(stderr, " [ peakrate KBPS ] [ latency TIME ] ");
|
||||
fprintf(stderr, "[ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||
fprintf(stderr,
|
||||
"Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]\n"
|
||||
" [ peakrate KBPS ] [ latency TIME ] "
|
||||
"[ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||
}
|
||||
|
||||
static void explain1(const char *arg, const char *val)
|
||||
|
@ -43,14 +43,15 @@ static void usage(void);
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: tc class [ add | del | change | replace | show ] dev STRING\n");
|
||||
fprintf(stderr, " [ classid CLASSID ] [ root | parent CLASSID ]\n");
|
||||
fprintf(stderr, " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, " tc class show [ dev STRING ] [ root | parent CLASSID ]\n");
|
||||
fprintf(stderr, "Where:\n");
|
||||
fprintf(stderr, "QDISC_KIND := { prio | cbq | etc. }\n");
|
||||
fprintf(stderr, "OPTIONS := ... try tc class add <desired QDISC_KIND> help\n");
|
||||
fprintf(stderr,
|
||||
"Usage: tc class [ add | del | change | replace | show ] dev STRING\n"
|
||||
" [ classid CLASSID ] [ root | parent CLASSID ]\n"
|
||||
" [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n"
|
||||
"\n"
|
||||
" tc class show [ dev STRING ] [ root | parent CLASSID ]\n"
|
||||
"Where:\n"
|
||||
"QDISC_KIND := { prio | cbq | etc. }\n"
|
||||
"OPTIONS := ... try tc class add <desired QDISC_KIND> help\n");
|
||||
}
|
||||
|
||||
static int tc_class_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||
|
@ -23,10 +23,11 @@ static void *BODY;
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: tc exec [ EXEC_TYPE ] [ help | OPTIONS ]\n");
|
||||
fprintf(stderr, "Where:\n");
|
||||
fprintf(stderr, "EXEC_TYPE := { bpf | etc. }\n");
|
||||
fprintf(stderr, "OPTIONS := ... try tc exec <desired EXEC_KIND> help\n");
|
||||
fprintf(stderr,
|
||||
"Usage: tc exec [ EXEC_TYPE ] [ help | OPTIONS ]\n"
|
||||
"Where:\n"
|
||||
"EXEC_TYPE := { bpf | etc. }\n"
|
||||
"OPTIONS := ... try tc exec <desired EXEC_KIND> help\n");
|
||||
}
|
||||
|
||||
static int parse_noeopt(struct exec_util *eu, int argc, char **argv)
|
||||
|
@ -27,18 +27,19 @@
|
||||
|
||||
static int usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: tc qdisc [ add | del | replace | change | show ] dev STRING\n");
|
||||
fprintf(stderr, " [ handle QHANDLE ] [ root | ingress | clsact | parent CLASSID ]\n");
|
||||
fprintf(stderr, " [ estimator INTERVAL TIME_CONSTANT ]\n");
|
||||
fprintf(stderr, " [ stab [ help | STAB_OPTIONS] ]\n");
|
||||
fprintf(stderr, " [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ]\n");
|
||||
fprintf(stderr, " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, " tc qdisc show [ dev STRING ] [ ingress | clsact ] [ invisible ]\n");
|
||||
fprintf(stderr, "Where:\n");
|
||||
fprintf(stderr, "QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n");
|
||||
fprintf(stderr, "OPTIONS := ... try tc qdisc add <desired QDISC_KIND> help\n");
|
||||
fprintf(stderr, "STAB_OPTIONS := ... try tc qdisc add stab help\n");
|
||||
fprintf(stderr,
|
||||
"Usage: tc qdisc [ add | del | replace | change | show ] dev STRING\n"
|
||||
" [ handle QHANDLE ] [ root | ingress | clsact | parent CLASSID ]\n"
|
||||
" [ estimator INTERVAL TIME_CONSTANT ]\n"
|
||||
" [ stab [ help | STAB_OPTIONS] ]\n"
|
||||
" [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ]\n"
|
||||
" [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n"
|
||||
"\n"
|
||||
" tc qdisc show [ dev STRING ] [ ingress | clsact ] [ invisible ]\n"
|
||||
"Where:\n"
|
||||
"QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n"
|
||||
"OPTIONS := ... try tc qdisc add <desired QDISC_KIND> help\n"
|
||||
"STAB_OPTIONS := ... try tc qdisc add stab help\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -68,17 +68,15 @@ static void cmd_bearer_enable_l2_help(struct cmdl *cmdl, char *media)
|
||||
static void cmd_bearer_enable_udp_help(struct cmdl *cmdl, char *media)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Usage: %s bearer enable [OPTIONS] media %s name NAME localip IP [UDP OPTIONS]\n\n",
|
||||
cmdl->argv[0], media);
|
||||
fprintf(stderr,
|
||||
"Usage: %s bearer enable [OPTIONS] media %s name NAME localip IP [UDP OPTIONS]\n\n"
|
||||
"OPTIONS\n"
|
||||
" domain DOMAIN - Discovery domain\n"
|
||||
" priority PRIORITY - Bearer priority\n\n");
|
||||
fprintf(stderr,
|
||||
" priority PRIORITY - Bearer priority\n\n"
|
||||
"UDP OPTIONS\n"
|
||||
" localport PORT - Local UDP port (default 6118)\n"
|
||||
" remoteip IP - Remote IP address\n"
|
||||
" remoteport PORT - Remote UDP port (default 6118)\n");
|
||||
" remoteport PORT - Remote UDP port (default 6118)\n",
|
||||
cmdl->argv[0], media);
|
||||
}
|
||||
|
||||
static int get_netid_cb(const struct nlmsghdr *nlh, void *data)
|
||||
|
Loading…
Reference in New Issue
Block a user