mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-08-13 18:44:04 +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)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ guard {on | off} ]\n");
|
"Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n"
|
||||||
fprintf(stderr, " [ hairpin {on | off} ]\n");
|
" [ guard {on | off} ]\n"
|
||||||
fprintf(stderr, " [ fastleave {on | off} ]\n");
|
" [ hairpin {on | off} ]\n"
|
||||||
fprintf(stderr, " [ root_block {on | off} ]\n");
|
" [ fastleave {on | off} ]\n"
|
||||||
fprintf(stderr, " [ learning {on | off} ]\n");
|
" [ root_block {on | off} ]\n"
|
||||||
fprintf(stderr, " [ learning_sync {on | off} ]\n");
|
" [ learning {on | off} ]\n"
|
||||||
fprintf(stderr, " [ flood {on | off} ]\n");
|
" [ learning_sync {on | off} ]\n"
|
||||||
fprintf(stderr, " [ mcast_flood {on | off} ]\n");
|
" [ flood {on | off} ]\n"
|
||||||
fprintf(stderr, " [ mcast_to_unicast {on | off} ]\n");
|
" [ mcast_flood {on | off} ]\n"
|
||||||
fprintf(stderr, " [ neigh_suppress {on | off} ]\n");
|
" [ mcast_to_unicast {on | off} ]\n"
|
||||||
fprintf(stderr, " [ vlan_tunnel {on | off} ]\n");
|
" [ neigh_suppress {on | off} ]\n"
|
||||||
fprintf(stderr, " [ isolated {on | off} ]\n");
|
" [ vlan_tunnel {on | off} ]\n"
|
||||||
fprintf(stderr, " [ hwmode {vepa | veb} ]\n");
|
" [ isolated {on | off} ]\n"
|
||||||
fprintf(stderr, " [ backup_port DEVICE ] [ nobackup_port ]\n");
|
" [ hwmode {vepa | veb} ]\n"
|
||||||
fprintf(stderr, " [ self ] [ master ]\n");
|
" [ backup_port DEVICE ] [ nobackup_port ]\n"
|
||||||
fprintf(stderr, " bridge link show [dev DEV]\n");
|
" [ self ] [ master ]\n"
|
||||||
|
" bridge link show [dev DEV]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,8 +30,9 @@ static unsigned int filter_index, filter_vlan;
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp] [vid VID]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " bridge mdb {show} [ dev DEV ] [ vid VID ]\n");
|
"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);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
ip/ip.c
26
ip/ip.c
@ -45,19 +45,19 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
||||||
" ip [ -force ] -batch filename\n"
|
" ip [ -force ] -batch filename\n"
|
||||||
"where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |\n"
|
"where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |\n"
|
||||||
" tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |\n"
|
" tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |\n"
|
||||||
" netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |\n"
|
" netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |\n"
|
||||||
" vrf | sr }\n"
|
" vrf | sr }\n"
|
||||||
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
|
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
|
||||||
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
|
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
|
||||||
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
|
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
|
||||||
" -4 | -6 | -I | -D | -M | -B | -0 |\n"
|
" -4 | -6 | -I | -D | -M | -B | -0 |\n"
|
||||||
" -l[oops] { maximum-addr-flush-attempts } | -br[ief] |\n"
|
" -l[oops] { maximum-addr-flush-attempts } | -br[ief] |\n"
|
||||||
" -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |\n"
|
" -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |\n"
|
||||||
" -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}\n");
|
" -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,24 +46,25 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n");
|
"Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n"
|
||||||
fprintf(stderr, " [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n");
|
" [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n"
|
||||||
fprintf(stderr, " [ encaplimit ELIM ]\n");
|
" [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n"
|
||||||
fprintf(stderr, " [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n");
|
" [ encaplimit ELIM ]\n"
|
||||||
fprintf(stderr, " [ dscp inherit ]\n");
|
" [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n"
|
||||||
fprintf(stderr, " [ [no]allow-localremote ]\n");
|
" [ dscp inherit ]\n"
|
||||||
fprintf(stderr, " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n");
|
" [ [no]allow-localremote ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
|
||||||
fprintf(stderr, "Where: NAME := STRING\n");
|
"\n"
|
||||||
fprintf(stderr, " ADDR := IPV6_ADDRESS\n");
|
"Where: NAME := STRING\n"
|
||||||
fprintf(stderr, " ELIM := { none | 0..255 }(default=%d)\n",
|
" ADDR := IPV6_ADDRESS\n"
|
||||||
IPV6_DEFAULT_TNL_ENCAP_LIMIT);
|
" ELIM := { none | 0..255 }(default=%d)\n"
|
||||||
fprintf(stderr, " TTL := 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);
|
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);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,32 +52,33 @@ static void usage(void)
|
|||||||
if (do_link)
|
if (do_link)
|
||||||
iplink_usage();
|
iplink_usage();
|
||||||
|
|
||||||
fprintf(stderr, "Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ CONFFLAG-LIST ]\n");
|
"Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n"
|
||||||
fprintf(stderr, " ip address del IFADDR dev IFNAME [mngtmpaddr]\n");
|
" [ CONFFLAG-LIST ]\n"
|
||||||
fprintf(stderr, " ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n");
|
" ip address del IFADDR dev IFNAME [mngtmpaddr]\n"
|
||||||
fprintf(stderr, " [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n");
|
" ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n"
|
||||||
fprintf(stderr, " ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n");
|
" [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n"
|
||||||
fprintf(stderr, " [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n");
|
" ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n"
|
||||||
fprintf(stderr, " [ label LABEL ] [up] [ vrf NAME ] ]\n");
|
" [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n"
|
||||||
fprintf(stderr, " ip address {showdump|restore}\n");
|
" [ label LABEL ] [up] [ vrf NAME ] ]\n"
|
||||||
fprintf(stderr, "IFADDR := PREFIX | ADDR peer PREFIX\n");
|
" ip address {showdump|restore}\n"
|
||||||
fprintf(stderr, " [ broadcast ADDR ] [ anycast ADDR ]\n");
|
"IFADDR := PREFIX | ADDR peer PREFIX\n"
|
||||||
fprintf(stderr, " [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n");
|
" [ broadcast ADDR ] [ anycast ADDR ]\n"
|
||||||
fprintf(stderr, "SCOPE-ID := [ host | link | global | NUMBER ]\n");
|
" [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n"
|
||||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
"SCOPE-ID := [ host | link | global | NUMBER ]\n"
|
||||||
fprintf(stderr, "FLAG := [ permanent | dynamic | secondary | primary |\n");
|
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||||
fprintf(stderr, " [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n");
|
"FLAG := [ permanent | dynamic | secondary | primary |\n"
|
||||||
fprintf(stderr, " CONFFLAG-LIST ]\n");
|
" [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n"
|
||||||
fprintf(stderr, "CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n");
|
" CONFFLAG-LIST ]\n"
|
||||||
fprintf(stderr, "CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n");
|
"CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n"
|
||||||
fprintf(stderr, "LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n");
|
"CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n"
|
||||||
fprintf(stderr, "LFT := forever | SECONDS\n");
|
"LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n"
|
||||||
fprintf(stderr, "TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n");
|
"LFT := forever | SECONDS\n"
|
||||||
fprintf(stderr, " bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n");
|
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
|
||||||
fprintf(stderr, " gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n");
|
" bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n"
|
||||||
fprintf(stderr, " nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n");
|
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n"
|
||||||
fprintf(stderr, " hsr | macsec | netdevsim }\n");
|
" nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n"
|
||||||
|
" hsr | macsec | netdevsim }\n");
|
||||||
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -49,8 +49,9 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip addrlabel [ list | flush | help ]\n");
|
"Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n"
|
||||||
|
" ip addrlabel [ list | flush | help ]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
ip/ipila.c
10
ip/ipila.c
@ -28,11 +28,11 @@
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip ila add loc_match LOCATOR_MATCH loc LOCATOR [ dev DEV ] OPTIONS\n"
|
"Usage: ip ila add loc_match LOCATOR_MATCH loc LOCATOR [ dev DEV ] OPTIONS\n"
|
||||||
" ip ila del loc_match LOCATOR_MATCH [ loc LOCATOR ] [ dev DEV ]\n"
|
" ip ila del loc_match LOCATOR_MATCH [ loc LOCATOR ] [ dev DEV ]\n"
|
||||||
" ip ila list\n"
|
" ip ila list\n"
|
||||||
"OPTIONS := [ csum-mode { adj-transport | neutral-map | neutral-map-auto | no-action } ]\n"
|
"OPTIONS := [ csum-mode { adj-transport | neutral-map | neutral-map-auto | no-action } ]\n"
|
||||||
" [ ident-type { luid | use-format } ]\n");
|
" [ ident-type { luid | use-format } ]\n");
|
||||||
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
107
ip/iplink.c
107
ip/iplink.c
@ -54,75 +54,76 @@ void iplink_usage(void)
|
|||||||
if (iplink_have_newlink()) {
|
if (iplink_have_newlink()) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip link add [link DEV] [ name ] NAME\n"
|
"Usage: ip link add [link DEV] [ name ] NAME\n"
|
||||||
" [ txqueuelen PACKETS ]\n"
|
" [ txqueuelen PACKETS ]\n"
|
||||||
" [ address LLADDR ]\n"
|
" [ address LLADDR ]\n"
|
||||||
" [ broadcast LLADDR ]\n"
|
" [ broadcast LLADDR ]\n"
|
||||||
" [ mtu MTU ] [index IDX ]\n"
|
" [ mtu MTU ] [index IDX ]\n"
|
||||||
" [ numtxqueues QUEUE_COUNT ]\n"
|
" [ numtxqueues QUEUE_COUNT ]\n"
|
||||||
" [ numrxqueues QUEUE_COUNT ]\n"
|
" [ numrxqueues QUEUE_COUNT ]\n"
|
||||||
" type TYPE [ ARGS ]\n"
|
" type TYPE [ ARGS ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
" ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]\n"
|
" ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
" ip link set { DEVICE | dev DEVICE | group DEVGROUP }\n"
|
" ip link set { DEVICE | dev DEVICE | group DEVGROUP }\n"
|
||||||
" [ { up | down } ]\n"
|
" [ { up | down } ]\n"
|
||||||
" [ type TYPE ARGS ]\n");
|
" [ type TYPE ARGS ]\n");
|
||||||
} else
|
} else
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip link set DEVICE [ { up | down } ]\n");
|
"Usage: ip link set DEVICE [ { up | down } ]\n");
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" [ arp { on | off } ]\n"
|
" [ arp { on | off } ]\n"
|
||||||
" [ dynamic { on | off } ]\n"
|
" [ dynamic { on | off } ]\n"
|
||||||
" [ multicast { on | off } ]\n"
|
" [ multicast { on | off } ]\n"
|
||||||
" [ allmulticast { on | off } ]\n"
|
" [ allmulticast { on | off } ]\n"
|
||||||
" [ promisc { on | off } ]\n"
|
" [ promisc { on | off } ]\n"
|
||||||
" [ trailers { on | off } ]\n"
|
" [ trailers { on | off } ]\n"
|
||||||
" [ carrier { on | off } ]\n"
|
" [ carrier { on | off } ]\n"
|
||||||
" [ txqueuelen PACKETS ]\n"
|
" [ txqueuelen PACKETS ]\n"
|
||||||
" [ name NEWNAME ]\n"
|
" [ name NEWNAME ]\n"
|
||||||
" [ address LLADDR ]\n"
|
" [ address LLADDR ]\n"
|
||||||
" [ broadcast LLADDR ]\n"
|
" [ broadcast LLADDR ]\n"
|
||||||
" [ mtu MTU ]\n"
|
" [ mtu MTU ]\n"
|
||||||
" [ netns { PID | NAME } ]\n"
|
" [ netns { PID | NAME } ]\n"
|
||||||
" [ link-netns NAME | link-netnsid ID ]\n"
|
" [ link-netns NAME | link-netnsid ID ]\n"
|
||||||
" [ alias NAME ]\n"
|
" [ alias NAME ]\n"
|
||||||
" [ vf NUM [ mac LLADDR ]\n"
|
" [ vf NUM [ mac LLADDR ]\n"
|
||||||
" [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]\n"
|
" [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]\n"
|
||||||
" [ rate TXRATE ]\n"
|
" [ rate TXRATE ]\n"
|
||||||
" [ max_tx_rate TXRATE ]\n"
|
" [ max_tx_rate TXRATE ]\n"
|
||||||
" [ min_tx_rate TXRATE ]\n"
|
" [ min_tx_rate TXRATE ]\n"
|
||||||
" [ spoofchk { on | off} ]\n"
|
" [ spoofchk { on | off} ]\n"
|
||||||
" [ query_rss { on | off} ]\n"
|
" [ query_rss { on | off} ]\n"
|
||||||
" [ state { auto | enable | disable} ] ]\n"
|
" [ state { auto | enable | disable} ] ]\n"
|
||||||
" [ trust { on | off} ] ]\n"
|
" [ trust { on | off} ] ]\n"
|
||||||
" [ node_guid { eui64 } ]\n"
|
" [ node_guid { eui64 } ]\n"
|
||||||
" [ port_guid { eui64 } ]\n"
|
" [ port_guid { eui64 } ]\n"
|
||||||
" [ { xdp | xdpgeneric | xdpdrv | xdpoffload } { off |\n"
|
" [ { xdp | xdpgeneric | xdpdrv | xdpoffload } { off |\n"
|
||||||
" object FILE [ section NAME ] [ verbose ] |\n"
|
" object FILE [ section NAME ] [ verbose ] |\n"
|
||||||
" pinned FILE } ]\n"
|
" pinned FILE } ]\n"
|
||||||
" [ master DEVICE ][ vrf NAME ]\n"
|
" [ master DEVICE ][ vrf NAME ]\n"
|
||||||
" [ nomaster ]\n"
|
" [ nomaster ]\n"
|
||||||
" [ addrgenmode { eui64 | none | stable_secret | random } ]\n"
|
" [ addrgenmode { eui64 | none | stable_secret | random } ]\n"
|
||||||
" [ protodown { on | off } ]\n"
|
" [ protodown { on | off } ]\n"
|
||||||
" [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
|
" [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n");
|
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n"
|
||||||
|
"\n"
|
||||||
fprintf(stderr, "\n ip link xstats type TYPE [ ARGS ]\n");
|
" ip link xstats type TYPE [ ARGS ]\n"
|
||||||
fprintf(stderr, "\n ip link afstats [ dev DEVICE ]\n");
|
"\n"
|
||||||
|
" ip link afstats [ dev DEVICE ]\n");
|
||||||
|
|
||||||
if (iplink_have_newlink()) {
|
if (iplink_have_newlink()) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\n"
|
"\n"
|
||||||
" ip link help [ TYPE ]\n"
|
" ip link help [ TYPE ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
|
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
|
||||||
" bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |\n"
|
" bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |\n"
|
||||||
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |\n"
|
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |\n"
|
||||||
" vti | nlmon | team_slave | bond_slave | bridge_slave |\n"
|
" vti | nlmon | team_slave | bond_slave | bridge_slave |\n"
|
||||||
" ipvlan | ipvtap | geneve | vrf | macsec | netdevsim | rmnet |\n"
|
" ipvlan | ipvtap | geneve | vrf | macsec | netdevsim | rmnet |\n"
|
||||||
" xfrm }\n");
|
" xfrm }\n");
|
||||||
}
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -29,39 +29,39 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... bridge [ fdb_flush ]\n"
|
"Usage: ... bridge [ fdb_flush ]\n"
|
||||||
" [ forward_delay FORWARD_DELAY ]\n"
|
" [ forward_delay FORWARD_DELAY ]\n"
|
||||||
" [ hello_time HELLO_TIME ]\n"
|
" [ hello_time HELLO_TIME ]\n"
|
||||||
" [ max_age MAX_AGE ]\n"
|
" [ max_age MAX_AGE ]\n"
|
||||||
" [ ageing_time AGEING_TIME ]\n"
|
" [ ageing_time AGEING_TIME ]\n"
|
||||||
" [ stp_state STP_STATE ]\n"
|
" [ stp_state STP_STATE ]\n"
|
||||||
" [ priority PRIORITY ]\n"
|
" [ priority PRIORITY ]\n"
|
||||||
" [ group_fwd_mask MASK ]\n"
|
" [ group_fwd_mask MASK ]\n"
|
||||||
" [ group_address ADDRESS ]\n"
|
" [ group_address ADDRESS ]\n"
|
||||||
" [ vlan_filtering VLAN_FILTERING ]\n"
|
" [ vlan_filtering VLAN_FILTERING ]\n"
|
||||||
" [ vlan_protocol VLAN_PROTOCOL ]\n"
|
" [ vlan_protocol VLAN_PROTOCOL ]\n"
|
||||||
" [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
|
" [ vlan_default_pvid VLAN_DEFAULT_PVID ]\n"
|
||||||
" [ vlan_stats_enabled VLAN_STATS_ENABLED ]\n"
|
" [ vlan_stats_enabled VLAN_STATS_ENABLED ]\n"
|
||||||
" [ vlan_stats_per_port VLAN_STATS_PER_PORT ]\n"
|
" [ vlan_stats_per_port VLAN_STATS_PER_PORT ]\n"
|
||||||
" [ mcast_snooping MULTICAST_SNOOPING ]\n"
|
" [ mcast_snooping MULTICAST_SNOOPING ]\n"
|
||||||
" [ mcast_router MULTICAST_ROUTER ]\n"
|
" [ mcast_router MULTICAST_ROUTER ]\n"
|
||||||
" [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
|
" [ mcast_query_use_ifaddr MCAST_QUERY_USE_IFADDR ]\n"
|
||||||
" [ mcast_querier MULTICAST_QUERIER ]\n"
|
" [ mcast_querier MULTICAST_QUERIER ]\n"
|
||||||
" [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
|
" [ mcast_hash_elasticity HASH_ELASTICITY ]\n"
|
||||||
" [ mcast_hash_max HASH_MAX ]\n"
|
" [ mcast_hash_max HASH_MAX ]\n"
|
||||||
" [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
|
" [ mcast_last_member_count LAST_MEMBER_COUNT ]\n"
|
||||||
" [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
|
" [ mcast_startup_query_count STARTUP_QUERY_COUNT ]\n"
|
||||||
" [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
|
" [ mcast_last_member_interval LAST_MEMBER_INTERVAL ]\n"
|
||||||
" [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
|
" [ mcast_membership_interval MEMBERSHIP_INTERVAL ]\n"
|
||||||
" [ mcast_querier_interval QUERIER_INTERVAL ]\n"
|
" [ mcast_querier_interval QUERIER_INTERVAL ]\n"
|
||||||
" [ mcast_query_interval QUERY_INTERVAL ]\n"
|
" [ mcast_query_interval QUERY_INTERVAL ]\n"
|
||||||
" [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n"
|
" [ mcast_query_response_interval QUERY_RESPONSE_INTERVAL ]\n"
|
||||||
" [ mcast_startup_query_interval STARTUP_QUERY_INTERVAL ]\n"
|
" [ mcast_startup_query_interval STARTUP_QUERY_INTERVAL ]\n"
|
||||||
" [ mcast_stats_enabled MCAST_STATS_ENABLED ]\n"
|
" [ mcast_stats_enabled MCAST_STATS_ENABLED ]\n"
|
||||||
" [ mcast_igmp_version IGMP_VERSION ]\n"
|
" [ mcast_igmp_version IGMP_VERSION ]\n"
|
||||||
" [ mcast_mld_version MLD_VERSION ]\n"
|
" [ mcast_mld_version MLD_VERSION ]\n"
|
||||||
" [ nf_call_iptables NF_CALL_IPTABLES ]\n"
|
" [ nf_call_iptables NF_CALL_IPTABLES ]\n"
|
||||||
" [ nf_call_ip6tables NF_CALL_IP6TABLES ]\n"
|
" [ nf_call_ip6tables NF_CALL_IP6TABLES ]\n"
|
||||||
" [ nf_call_arptables NF_CALL_ARPTABLES ]\n"
|
" [ nf_call_arptables NF_CALL_ARPTABLES ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
|
"Where: VLAN_PROTOCOL := { 802.1Q | 802.1ad }\n"
|
||||||
);
|
);
|
||||||
|
@ -23,26 +23,26 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... bridge_slave [ fdb_flush ]\n"
|
"Usage: ... bridge_slave [ fdb_flush ]\n"
|
||||||
" [ state STATE ]\n"
|
" [ state STATE ]\n"
|
||||||
" [ priority PRIO ]\n"
|
" [ priority PRIO ]\n"
|
||||||
" [ cost COST ]\n"
|
" [ cost COST ]\n"
|
||||||
" [ guard {on | off} ]\n"
|
" [ guard {on | off} ]\n"
|
||||||
" [ hairpin {on | off} ]\n"
|
" [ hairpin {on | off} ]\n"
|
||||||
" [ fastleave {on | off} ]\n"
|
" [ fastleave {on | off} ]\n"
|
||||||
" [ root_block {on | off} ]\n"
|
" [ root_block {on | off} ]\n"
|
||||||
" [ learning {on | off} ]\n"
|
" [ learning {on | off} ]\n"
|
||||||
" [ flood {on | off} ]\n"
|
" [ flood {on | off} ]\n"
|
||||||
" [ proxy_arp {on | off} ]\n"
|
" [ proxy_arp {on | off} ]\n"
|
||||||
" [ proxy_arp_wifi {on | off} ]\n"
|
" [ proxy_arp_wifi {on | off} ]\n"
|
||||||
" [ mcast_router MULTICAST_ROUTER ]\n"
|
" [ mcast_router MULTICAST_ROUTER ]\n"
|
||||||
" [ mcast_fast_leave {on | off} ]\n"
|
" [ mcast_fast_leave {on | off} ]\n"
|
||||||
" [ mcast_flood {on | off} ]\n"
|
" [ mcast_flood {on | off} ]\n"
|
||||||
" [ mcast_to_unicast {on | off} ]\n"
|
" [ mcast_to_unicast {on | off} ]\n"
|
||||||
" [ group_fwd_mask MASK ]\n"
|
" [ group_fwd_mask MASK ]\n"
|
||||||
" [ neigh_suppress {on | off} ]\n"
|
" [ neigh_suppress {on | off} ]\n"
|
||||||
" [ vlan_tunnel {on | off} ]\n"
|
" [ vlan_tunnel {on | off} ]\n"
|
||||||
" [ isolated {on | off} ]\n"
|
" [ isolated {on | off} ]\n"
|
||||||
" [ backup_port DEVICE ] [ nobackup_port ]\n"
|
" [ backup_port DEVICE ] [ nobackup_port ]\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,23 +21,23 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... geneve id VNI\n"
|
"Usage: ... geneve id VNI\n"
|
||||||
" remote ADDR\n"
|
" remote ADDR\n"
|
||||||
" [ ttl TTL ]\n"
|
" [ ttl TTL ]\n"
|
||||||
" [ tos TOS ]\n"
|
" [ tos TOS ]\n"
|
||||||
" [ df DF ]\n"
|
" [ df DF ]\n"
|
||||||
" [ flowlabel LABEL ]\n"
|
" [ flowlabel LABEL ]\n"
|
||||||
" [ dstport PORT ]\n"
|
" [ dstport PORT ]\n"
|
||||||
" [ [no]external ]\n"
|
" [ [no]external ]\n"
|
||||||
" [ [no]udpcsum ]\n"
|
" [ [no]udpcsum ]\n"
|
||||||
" [ [no]udp6zerocsumtx ]\n"
|
" [ [no]udp6zerocsumtx ]\n"
|
||||||
" [ [no]udp6zerocsumrx ]\n"
|
" [ [no]udp6zerocsumrx ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Where: VNI := 0-16777215\n"
|
"Where: VNI := 0-16777215\n"
|
||||||
" ADDR := IP_ADDRESS\n"
|
" ADDR := IP_ADDRESS\n"
|
||||||
" TOS := { NUMBER | inherit }\n"
|
" TOS := { NUMBER | inherit }\n"
|
||||||
" TTL := { 1..255 | auto | inherit }\n"
|
" TTL := { 1..255 | auto | inherit }\n"
|
||||||
" DF := { unset | set | inherit }\n"
|
" DF := { unset | set | inherit }\n"
|
||||||
" LABEL := 0-1048575\n"
|
" LABEL := 0-1048575\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,18 +24,18 @@
|
|||||||
static void print_usage(FILE *f)
|
static void print_usage(FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage:\tip link add name NAME type hsr slave1 SLAVE1-IF slave2 SLAVE2-IF\n"
|
"Usage:\tip link add name NAME type hsr slave1 SLAVE1-IF slave2 SLAVE2-IF\n"
|
||||||
"\t[ supervision ADDR-BYTE ] [version VERSION]\n"
|
"\t[ supervision ADDR-BYTE ] [version VERSION]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"NAME\n"
|
"NAME\n"
|
||||||
" name of new hsr device (e.g. hsr0)\n"
|
" name of new hsr device (e.g. hsr0)\n"
|
||||||
"SLAVE1-IF, SLAVE2-IF\n"
|
"SLAVE1-IF, SLAVE2-IF\n"
|
||||||
" the two slave devices bound to the HSR device\n"
|
" the two slave devices bound to the HSR device\n"
|
||||||
"ADDR-BYTE\n"
|
"ADDR-BYTE\n"
|
||||||
" 0-255; the last byte of the multicast address used for HSR supervision\n"
|
" 0-255; the last byte of the multicast address used for HSR supervision\n"
|
||||||
" frames (default = 0)\n"
|
" frames (default = 0)\n"
|
||||||
"VERSION\n"
|
"VERSION\n"
|
||||||
" 0,1; the protocol version to be used. (default = 0)\n");
|
" 0,1; the protocol version to be used. (default = 0)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
|
@ -23,8 +23,8 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... ipoib [ pkey PKEY ]\n"
|
"Usage: ... ipoib [ pkey PKEY ]\n"
|
||||||
" [ mode {datagram | connected} ]\n"
|
" [ mode {datagram | connected} ]\n"
|
||||||
" [ umcast {0|1} ]\n"
|
" [ umcast {0|1} ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"PKEY := 0x8001-0xffff\n"
|
"PKEY := 0x8001-0xffff\n"
|
||||||
);
|
);
|
||||||
|
@ -22,14 +22,14 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... vlan id VLANID\n"
|
"Usage: ... vlan id VLANID\n"
|
||||||
" [ protocol VLANPROTO ]\n"
|
" [ protocol VLANPROTO ]\n"
|
||||||
" [ reorder_hdr { on | off } ]\n"
|
" [ reorder_hdr { on | off } ]\n"
|
||||||
" [ gvrp { on | off } ]\n"
|
" [ gvrp { on | off } ]\n"
|
||||||
" [ mvrp { on | off } ]\n"
|
" [ mvrp { on | off } ]\n"
|
||||||
" [ loose_binding { on | off } ]\n"
|
" [ loose_binding { on | off } ]\n"
|
||||||
" [ bridge_binding { on | off } ]\n"
|
" [ bridge_binding { on | off } ]\n"
|
||||||
" [ ingress-qos-map QOS-MAP ]\n"
|
" [ ingress-qos-map QOS-MAP ]\n"
|
||||||
" [ egress-qos-map QOS-MAP ]\n"
|
" [ egress-qos-map QOS-MAP ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"VLANID := 0-4095\n"
|
"VLANID := 0-4095\n"
|
||||||
"VLANPROTO: [ 802.1Q | 802.1ad ]\n"
|
"VLANPROTO: [ 802.1Q | 802.1ad ]\n"
|
||||||
|
@ -27,34 +27,34 @@ static void print_explain(FILE *f)
|
|||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... vxlan id VNI\n"
|
"Usage: ... vxlan id VNI\n"
|
||||||
" [ { group | remote } IP_ADDRESS ]\n"
|
" [ { group | remote } IP_ADDRESS ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ local ADDR ]\n"
|
||||||
" [ ttl TTL ]\n"
|
" [ ttl TTL ]\n"
|
||||||
" [ tos TOS ]\n"
|
" [ tos TOS ]\n"
|
||||||
" [ df DF ]\n"
|
" [ df DF ]\n"
|
||||||
" [ flowlabel LABEL ]\n"
|
" [ flowlabel LABEL ]\n"
|
||||||
" [ dev PHYS_DEV ]\n"
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ dstport PORT ]\n"
|
" [ dstport PORT ]\n"
|
||||||
" [ srcport MIN MAX ]\n"
|
" [ srcport MIN MAX ]\n"
|
||||||
" [ [no]learning ]\n"
|
" [ [no]learning ]\n"
|
||||||
" [ [no]proxy ]\n"
|
" [ [no]proxy ]\n"
|
||||||
" [ [no]rsc ]\n"
|
" [ [no]rsc ]\n"
|
||||||
" [ [no]l2miss ]\n"
|
" [ [no]l2miss ]\n"
|
||||||
" [ [no]l3miss ]\n"
|
" [ [no]l3miss ]\n"
|
||||||
" [ ageing SECONDS ]\n"
|
" [ ageing SECONDS ]\n"
|
||||||
" [ maxaddress NUMBER ]\n"
|
" [ maxaddress NUMBER ]\n"
|
||||||
" [ [no]udpcsum ]\n"
|
" [ [no]udpcsum ]\n"
|
||||||
" [ [no]udp6zerocsumtx ]\n"
|
" [ [no]udp6zerocsumtx ]\n"
|
||||||
" [ [no]udp6zerocsumrx ]\n"
|
" [ [no]udp6zerocsumrx ]\n"
|
||||||
" [ [no]remcsumtx ] [ [no]remcsumrx ]\n"
|
" [ [no]remcsumtx ] [ [no]remcsumrx ]\n"
|
||||||
" [ [no]external ] [ gbp ] [ gpe ]\n"
|
" [ [no]external ] [ gbp ] [ gpe ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Where: VNI := 0-16777215\n"
|
"Where: VNI := 0-16777215\n"
|
||||||
" ADDR := { IP_ADDRESS | any }\n"
|
" ADDR := { IP_ADDRESS | any }\n"
|
||||||
" TOS := { NUMBER | inherit }\n"
|
" TOS := { NUMBER | inherit }\n"
|
||||||
" TTL := { 1..255 | auto | inherit }\n"
|
" TTL := { 1..255 | auto | inherit }\n"
|
||||||
" DF := { unset | set | inherit }\n"
|
" DF := { unset | set | inherit }\n"
|
||||||
" LABEL := 0-1048575\n"
|
" LABEL := 0-1048575\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +39,9 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip maddr [ add | del ] MULTIADDR dev STRING\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip maddr show [ dev STRING ]\n");
|
"Usage: ip maddr [ add | del ] MULTIADDR dev STRING\n"
|
||||||
|
" ip maddr show [ dev STRING ]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,10 +29,11 @@ int listen_all_nsid;
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip monitor [ all | LISTofOBJECTS ] [ FILE ] [ label ] [all-nsid] [dev DEVICE]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "LISTofOBJECTS := link | address | route | mroute | prefix |\n");
|
"Usage: ip monitor [ all | LISTofOBJECTS ] [ FILE ] [ label ] [all-nsid] [dev DEVICE]\n"
|
||||||
fprintf(stderr, " neigh | netconf | rule | nsid\n");
|
"LISTofOBJECTS := link | address | route | mroute | prefix |\n"
|
||||||
fprintf(stderr, "FILE := file FILENAME\n");
|
" neigh | netconf | rule | nsid\n"
|
||||||
|
"FILE := file FILENAME\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,12 +35,14 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip mroute show [ [ to ] PREFIX ] [ from PREFIX ] [ iif DEVICE ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ table TABLE_ID ]\n");
|
"Usage: ip mroute show [ [ to ] PREFIX ] [ from PREFIX ] [ iif DEVICE ]\n"
|
||||||
fprintf(stderr, "TABLE_ID := [ local | main | default | all | NUMBER ]\n");
|
" [ table TABLE_ID ]\n"
|
||||||
|
"TABLE_ID := [ local | main | default | all | NUMBER ]\n"
|
||||||
#if 0
|
#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
|
#endif
|
||||||
|
);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
ip/ipneigh.c
17
ip/ipneigh.c
@ -48,13 +48,16 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip neigh { add | del | change | replace }\n"
|
fprintf(stderr,
|
||||||
" { ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]\n");
|
"Usage: ip neigh { add | del | change | replace }\n"
|
||||||
fprintf(stderr, " [ router ] [ extern_learn ] [ protocol PROTO ]\n\n");
|
" { ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]\n"
|
||||||
fprintf(stderr, " ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n");
|
" [ router ] [ extern_learn ] [ protocol PROTO ]\n"
|
||||||
fprintf(stderr, " [ vrf NAME ]\n\n");
|
"\n"
|
||||||
fprintf(stderr, "STATE := { permanent | noarp | stale | reachable | none |\n"
|
" ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]\n"
|
||||||
" incomplete | delay | probe | failed }\n");
|
" [ vrf NAME ]\n"
|
||||||
|
"\n"
|
||||||
|
"STATE := { permanent | noarp | stale | reachable | none |\n"
|
||||||
|
" incomplete | delay | probe | failed }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
ip/ipnetns.c
23
ip/ipnetns.c
@ -26,17 +26,18 @@
|
|||||||
|
|
||||||
static int usage(void)
|
static int usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip netns list\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip netns add NAME\n");
|
"Usage: ip netns list\n"
|
||||||
fprintf(stderr, " ip netns attach NAME PID\n");
|
" ip netns add NAME\n"
|
||||||
fprintf(stderr, " ip netns set NAME NETNSID\n");
|
" ip netns attach NAME PID\n"
|
||||||
fprintf(stderr, " ip [-all] netns delete [NAME]\n");
|
" ip netns set NAME NETNSID\n"
|
||||||
fprintf(stderr, " ip netns identify [PID]\n");
|
" ip [-all] netns delete [NAME]\n"
|
||||||
fprintf(stderr, " ip netns pids NAME\n");
|
" ip netns identify [PID]\n"
|
||||||
fprintf(stderr, " ip [-all] netns exec [NAME] cmd ...\n");
|
" ip netns pids NAME\n"
|
||||||
fprintf(stderr, " ip netns monitor\n");
|
" ip [-all] netns exec [NAME] cmd ...\n"
|
||||||
fprintf(stderr, " ip netns list-id\n");
|
" ip netns monitor\n"
|
||||||
fprintf(stderr, "NETNSID := auto | POSITIVE-INT\n");
|
" ip netns list-id\n"
|
||||||
|
"NETNSID := auto | POSITIVE-INT\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,15 +47,15 @@ static void usage(void)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ip ntable change name NAME [ dev DEV ]\n"
|
"Usage: ip ntable change name NAME [ dev DEV ]\n"
|
||||||
" [ thresh1 VAL ] [ thresh2 VAL ] [ thresh3 VAL ] [ gc_int MSEC ]\n"
|
" [ thresh1 VAL ] [ thresh2 VAL ] [ thresh3 VAL ] [ gc_int MSEC ]\n"
|
||||||
" [ PARMS ]\n"
|
" [ PARMS ]\n"
|
||||||
"Usage: ip ntable show [ dev DEV ] [ name NAME ]\n"
|
"Usage: ip ntable show [ dev DEV ] [ name NAME ]\n"
|
||||||
|
|
||||||
"PARMS := [ base_reachable MSEC ] [ retrans MSEC ] [ gc_stale MSEC ]\n"
|
"PARMS := [ base_reachable MSEC ] [ retrans MSEC ] [ gc_stale MSEC ]\n"
|
||||||
" [ delay_probe MSEC ] [ queue LEN ]\n"
|
" [ delay_probe MSEC ] [ queue LEN ]\n"
|
||||||
" [ app_probes VAL ] [ ucast_probes VAL ] [ mcast_probes VAL ]\n"
|
" [ app_probes VAL ] [ ucast_probes VAL ] [ mcast_probes VAL ]\n"
|
||||||
" [ anycast_delay MSEC ] [ proxy_delay MSEC ] [ proxy_queue LEN ]\n"
|
" [ anycast_delay MSEC ] [ proxy_delay MSEC ] [ proxy_queue LEN ]\n"
|
||||||
" [ locktime MSEC ]\n"
|
" [ locktime MSEC ]\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
13
ip/ipseg6.c
13
ip/ipseg6.c
@ -32,12 +32,13 @@
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip sr { COMMAND | help }\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip sr hmac show\n");
|
"Usage: ip sr { COMMAND | help }\n"
|
||||||
fprintf(stderr, " ip sr hmac set KEYID ALGO\n");
|
" ip sr hmac show\n"
|
||||||
fprintf(stderr, " ip sr tunsrc show\n");
|
" ip sr hmac set KEYID ALGO\n"
|
||||||
fprintf(stderr, " ip sr tunsrc set ADDRESS\n");
|
" ip sr tunsrc show\n"
|
||||||
fprintf(stderr, "where ALGO := { sha1 | sha256 }\n");
|
" ip sr tunsrc set ADDRESS\n"
|
||||||
|
"where ALGO := { sha1 | sha256 }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,18 +32,19 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]\n");
|
"Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]\n"
|
||||||
fprintf(stderr, " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n");
|
" [ mode { ipip | gre | sit | isatap | vti } ] [ remote ADDR ] [ local ADDR ]\n"
|
||||||
fprintf(stderr, " [ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]\n");
|
" [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
|
||||||
fprintf(stderr, " [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]\n");
|
" [ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]\n"
|
||||||
fprintf(stderr, " [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]\n");
|
" [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]\n"
|
||||||
fprintf(stderr, "Where: NAME := STRING\n");
|
"\n"
|
||||||
fprintf(stderr, " ADDR := { IP_ADDRESS | any }\n");
|
"Where: NAME := STRING\n"
|
||||||
fprintf(stderr, " TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }\n");
|
" ADDR := { IP_ADDRESS | any }\n"
|
||||||
fprintf(stderr, " TTL := { 1..255 | inherit }\n");
|
" TOS := { STRING | 00..ff | inherit | inherit/STRING | inherit/00..ff }\n"
|
||||||
fprintf(stderr, " KEY := { DOTTED_QUAD | NUMBER }\n");
|
" TTL := { 1..255 | inherit }\n"
|
||||||
|
" KEY := { DOTTED_QUAD | NUMBER }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,12 +40,13 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ mode { tun | tap } ] [ user USER ] [ group GROUP ]\n");
|
"Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]\n"
|
||||||
fprintf(stderr, " [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]\n");
|
" [ mode { tun | tap } ] [ user USER ] [ group GROUP ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]\n"
|
||||||
fprintf(stderr, "Where: USER := { STRING | NUMBER }\n");
|
"\n"
|
||||||
fprintf(stderr, " GROUP := { STRING | NUMBER }\n");
|
"Where: USER := { STRING | NUMBER }\n"
|
||||||
|
" GROUP := { STRING | NUMBER }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +36,11 @@ static struct link_filter vrf_filter;
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip vrf show [NAME] ...\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip vrf exec [NAME] cmd ...\n");
|
"Usage: ip vrf show [NAME] ...\n"
|
||||||
fprintf(stderr, " ip vrf identify [PID]\n");
|
" ip vrf exec [NAME] cmd ...\n"
|
||||||
fprintf(stderr, " ip vrf pids [NAME]\n");
|
" ip vrf identify [PID]\n"
|
||||||
|
" ip vrf pids [NAME]\n");
|
||||||
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -26,41 +26,36 @@
|
|||||||
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... %-9s [ remote ADDR ]\n",
|
"Usage: ... %-9s [ remote ADDR ]\n"
|
||||||
lu->id
|
" [ local ADDR ]\n"
|
||||||
);
|
" [ [no][i|o]seq ]\n"
|
||||||
fprintf(f,
|
" [ [i|o]key KEY | no[i|o]key ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ [no][i|o]csum ]\n"
|
||||||
" [ [no][i|o]seq ]\n"
|
" [ ttl TTL ]\n"
|
||||||
" [ [i|o]key KEY | no[i|o]key ]\n"
|
" [ tos TOS ]\n"
|
||||||
" [ [no][i|o]csum ]\n"
|
" [ [no]pmtudisc ]\n"
|
||||||
" [ ttl TTL ]\n"
|
" [ [no]ignore-df ]\n"
|
||||||
" [ tos TOS ]\n"
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ [no]pmtudisc ]\n"
|
" [ fwmark MARK ]\n"
|
||||||
" [ [no]ignore-df ]\n"
|
" [ external ]\n"
|
||||||
" [ dev PHYS_DEV ]\n"
|
" [ noencap ]\n"
|
||||||
" [ fwmark MARK ]\n"
|
" [ encap { fou | gue | none } ]\n"
|
||||||
" [ external ]\n"
|
" [ encap-sport PORT ]\n"
|
||||||
" [ noencap ]\n"
|
" [ encap-dport PORT ]\n"
|
||||||
" [ encap { fou | gue | none } ]\n"
|
" [ [no]encap-csum ]\n"
|
||||||
" [ encap-sport PORT ]\n"
|
" [ [no]encap-csum6 ]\n"
|
||||||
" [ encap-dport PORT ]\n"
|
" [ [no]encap-remcsum ]\n"
|
||||||
" [ [no]encap-csum ]\n"
|
" [ erspan_ver version ]\n"
|
||||||
" [ [no]encap-csum6 ]\n"
|
" [ erspan IDX ]\n"
|
||||||
" [ [no]encap-remcsum ]\n"
|
" [ erspan_dir { ingress | egress } ]\n"
|
||||||
" [ erspan_ver version ]\n"
|
" [ erspan_hwid hwid ]\n"
|
||||||
" [ erspan IDX ]\n"
|
|
||||||
" [ erspan_dir { ingress | egress } ]\n"
|
|
||||||
" [ erspan_hwid hwid ]\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
);
|
"Where: ADDR := { IP_ADDRESS | any }\n"
|
||||||
fprintf(f,
|
" TOS := { NUMBER | inherit }\n"
|
||||||
"Where: ADDR := { IP_ADDRESS | any }\n"
|
" TTL := { 1..255 | inherit }\n"
|
||||||
" TOS := { NUMBER | inherit }\n"
|
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||||
" TTL := { 1..255 | inherit }\n"
|
" MARK := { 0x0..0xffffffff }\n",
|
||||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
lu->id);
|
||||||
" MARK := { 0x0..0xffffffff }\n"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
@ -33,46 +33,41 @@
|
|||||||
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
static void gre_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... %-9s [ remote ADDR ]\n",
|
"Usage: ... %-9s [ remote ADDR ]\n"
|
||||||
lu->id
|
" [ local ADDR ]\n"
|
||||||
);
|
" [ [no][i|o]seq ]\n"
|
||||||
fprintf(f,
|
" [ [i|o]key KEY | no[i|o]key ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ [no][i|o]csum ]\n"
|
||||||
" [ [no][i|o]seq ]\n"
|
" [ hoplimit TTL ]\n"
|
||||||
" [ [i|o]key KEY | no[i|o]key ]\n"
|
" [ encaplimit ELIM ]\n"
|
||||||
" [ [no][i|o]csum ]\n"
|
" [ tclass TCLASS ]\n"
|
||||||
" [ hoplimit TTL ]\n"
|
" [ flowlabel FLOWLABEL ]\n"
|
||||||
" [ encaplimit ELIM ]\n"
|
" [ dscp inherit ]\n"
|
||||||
" [ tclass TCLASS ]\n"
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ flowlabel FLOWLABEL ]\n"
|
" [ fwmark MARK ]\n"
|
||||||
" [ dscp inherit ]\n"
|
" [ [no]allow-localremote ]\n"
|
||||||
" [ dev PHYS_DEV ]\n"
|
" [ external ]\n"
|
||||||
" [ fwmark MARK ]\n"
|
" [ noencap ]\n"
|
||||||
" [ [no]allow-localremote ]\n"
|
" [ encap { fou | gue | none } ]\n"
|
||||||
" [ external ]\n"
|
" [ encap-sport PORT ]\n"
|
||||||
" [ noencap ]\n"
|
" [ encap-dport PORT ]\n"
|
||||||
" [ encap { fou | gue | none } ]\n"
|
" [ [no]encap-csum ]\n"
|
||||||
" [ encap-sport PORT ]\n"
|
" [ [no]encap-csum6 ]\n"
|
||||||
" [ encap-dport PORT ]\n"
|
" [ [no]encap-remcsum ]\n"
|
||||||
" [ [no]encap-csum ]\n"
|
" [ erspan_ver version ]\n"
|
||||||
" [ [no]encap-csum6 ]\n"
|
" [ erspan IDX ]\n"
|
||||||
" [ [no]encap-remcsum ]\n"
|
" [ erspan_dir { ingress | egress } ]\n"
|
||||||
" [ erspan_ver version ]\n"
|
" [ erspan_hwid hwid ]\n"
|
||||||
" [ erspan IDX ]\n"
|
|
||||||
" [ erspan_dir { ingress | egress } ]\n"
|
|
||||||
" [ erspan_hwid hwid ]\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
);
|
"Where: ADDR := IPV6_ADDRESS\n"
|
||||||
fprintf(f,
|
" TTL := { 0..255 } (default=%d)\n"
|
||||||
"Where: ADDR := IPV6_ADDRESS\n"
|
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||||
" TTL := { 0..255 } (default=%d)\n"
|
" ELIM := { none | 0..255 }(default=%d)\n"
|
||||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
" TCLASS := { 0x0..0xff | inherit }\n"
|
||||||
" ELIM := { none | 0..255 }(default=%d)\n"
|
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
||||||
" TCLASS := { 0x0..0xff | inherit }\n"
|
" MARK := { 0x0..0xffffffff | inherit }\n",
|
||||||
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
lu->id,
|
||||||
" MARK := { 0x0..0xffffffff | inherit }\n",
|
DEFAULT_TNL_HOP_LIMIT, IPV6_DEFAULT_TNL_ENCAP_LIMIT);
|
||||||
DEFAULT_TNL_HOP_LIMIT, IPV6_DEFAULT_TNL_ENCAP_LIMIT
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
@ -32,46 +32,35 @@
|
|||||||
static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
|
static void ip6tunnel_print_help(struct link_util *lu, int argc, char **argv,
|
||||||
FILE *f)
|
FILE *f)
|
||||||
{
|
{
|
||||||
const char *mode;
|
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... %-6s [ remote ADDR ]\n",
|
"Usage: ... %-6s [ remote ADDR ]\n"
|
||||||
lu->id
|
" [ local ADDR ]\n"
|
||||||
);
|
" [ encaplimit ELIM ]\n"
|
||||||
fprintf(f,
|
" [ hoplimit HLIM ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ tclass TCLASS ]\n"
|
||||||
" [ encaplimit ELIM ]\n"
|
" [ flowlabel FLOWLABEL ]\n"
|
||||||
" [ hoplimit HLIM ]\n"
|
" [ dscp inherit ]\n"
|
||||||
" [ tclass TCLASS ]\n"
|
" [ [no]allow-localremote ]\n"
|
||||||
" [ flowlabel FLOWLABEL ]\n"
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ dscp inherit ]\n"
|
" [ fwmark MARK ]\n"
|
||||||
" [ [no]allow-localremote ]\n"
|
" [ external ]\n"
|
||||||
" [ dev PHYS_DEV ]\n"
|
" [ noencap ]\n"
|
||||||
" [ fwmark MARK ]\n"
|
" [ encap { fou | gue | none } ]\n"
|
||||||
" [ external ]\n"
|
" [ encap-sport PORT ]\n"
|
||||||
" [ noencap ]\n"
|
" [ encap-dport PORT ]\n"
|
||||||
" [ encap { fou | gue | none } ]\n"
|
" [ [no]encap-csum ]\n"
|
||||||
" [ encap-sport PORT ]\n"
|
" [ [no]encap-csum6 ]\n"
|
||||||
" [ encap-dport PORT ]\n"
|
" [ [no]encap-remcsum ]\n"
|
||||||
" [ [no]encap-csum ]\n"
|
" [ mode { ip6ip6 | ipip6 | any } ]\n"
|
||||||
" [ [no]encap-csum6 ]\n"
|
"\n"
|
||||||
" [ [no]encap-remcsum ]\n"
|
"Where: ADDR := IPV6_ADDRESS\n"
|
||||||
);
|
" ELIM := { none | 0..255 }(default=%d)\n"
|
||||||
mode = "{ ip6ip6 | ipip6 | any }";
|
" HLIM := 0..255 (default=%d)\n"
|
||||||
fprintf(f,
|
" TCLASS := { 0x0..0xff | inherit }\n"
|
||||||
" [ mode %s ]\n"
|
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
|
||||||
"\n",
|
" MARK := { 0x0..0xffffffff | inherit }\n",
|
||||||
mode
|
lu->id,
|
||||||
);
|
IPV6_DEFAULT_TNL_ENCAP_LIMIT, DEFAULT_TNL_HOP_LIMIT);
|
||||||
fprintf(f,
|
|
||||||
"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
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
@ -29,46 +29,39 @@ static void iptunnel_print_help(struct link_util *lu, int argc, char **argv,
|
|||||||
{
|
{
|
||||||
const char *mode;
|
const char *mode;
|
||||||
|
|
||||||
fprintf(f,
|
|
||||||
"Usage: ... %-6s [ remote ADDR ]\n",
|
|
||||||
lu->id
|
|
||||||
);
|
|
||||||
fprintf(f,
|
|
||||||
" [ local ADDR ]\n"
|
|
||||||
" [ ttl TTL ]\n"
|
|
||||||
" [ tos TOS ]\n"
|
|
||||||
" [ [no]pmtudisc ]\n"
|
|
||||||
" [ 6rd-prefix ADDR ]\n"
|
|
||||||
" [ 6rd-relay_prefix ADDR ]\n"
|
|
||||||
" [ 6rd-reset ]\n"
|
|
||||||
" [ dev PHYS_DEV ]\n"
|
|
||||||
" [ fwmark MARK ]\n"
|
|
||||||
" [ external ]\n"
|
|
||||||
" [ noencap ]\n"
|
|
||||||
" [ encap { fou | gue | none } ]\n"
|
|
||||||
" [ encap-sport PORT ]\n"
|
|
||||||
" [ encap-dport PORT ]\n"
|
|
||||||
" [ [no]encap-csum ]\n"
|
|
||||||
" [ [no]encap-csum6 ]\n"
|
|
||||||
" [ [no]encap-remcsum ]\n"
|
|
||||||
);
|
|
||||||
if (strcmp(lu->id, "sit") == 0) {
|
if (strcmp(lu->id, "sit") == 0) {
|
||||||
mode = "{ ip6ip | ipip | mplsip | any } ]\n"
|
mode = "{ ip6ip | ipip | mplsip | any } ]\n"
|
||||||
" [ isatap";
|
" [ isatap";
|
||||||
} else {
|
} else {
|
||||||
mode = "{ ipip | mplsip | any }";
|
mode = "{ ipip | mplsip | any }";
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
" [ mode %s ]\n"
|
"Usage: ... %-6s [ remote ADDR ]\n"
|
||||||
"\n",
|
" [ local ADDR ]\n"
|
||||||
mode
|
" [ ttl TTL ]\n"
|
||||||
);
|
" [ tos TOS ]\n"
|
||||||
fprintf(f,
|
" [ [no]pmtudisc ]\n"
|
||||||
"Where: ADDR := { IP_ADDRESS | any }\n"
|
" [ 6rd-prefix ADDR ]\n"
|
||||||
" TOS := { NUMBER | inherit }\n"
|
" [ 6rd-relay_prefix ADDR ]\n"
|
||||||
" TTL := { 1..255 | inherit }\n"
|
" [ 6rd-reset ]\n"
|
||||||
" MARK := { 0x0..0xffffffff }\n"
|
" [ dev PHYS_DEV ]\n"
|
||||||
);
|
" [ fwmark MARK ]\n"
|
||||||
|
" [ external ]\n"
|
||||||
|
" [ noencap ]\n"
|
||||||
|
" [ encap { fou | gue | none } ]\n"
|
||||||
|
" [ encap-sport PORT ]\n"
|
||||||
|
" [ encap-dport PORT ]\n"
|
||||||
|
" [ [no]encap-csum ]\n"
|
||||||
|
" [ [no]encap-csum6 ]\n"
|
||||||
|
" [ [no]encap-remcsum ]\n"
|
||||||
|
" [ mode %s ]\n"
|
||||||
|
"\n"
|
||||||
|
"Where: ADDR := { IP_ADDRESS | any }\n"
|
||||||
|
" TOS := { NUMBER | inherit }\n"
|
||||||
|
" TTL := { 1..255 | inherit }\n"
|
||||||
|
" MARK := { 0x0..0xffffffff }\n",
|
||||||
|
lu->id, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
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)
|
static void vti_print_help(struct link_util *lu, int argc, char **argv, FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... %-4s [ remote ADDR ]\n",
|
"Usage: ... %-4s [ remote ADDR ]\n"
|
||||||
lu->id
|
" [ local ADDR ]\n"
|
||||||
);
|
" [ [i|o]key KEY ]\n"
|
||||||
fprintf(f,
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ fwmark MARK ]\n"
|
||||||
" [ [i|o]key KEY ]\n"
|
|
||||||
" [ dev PHYS_DEV ]\n"
|
|
||||||
" [ fwmark MARK ]\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
);
|
"Where: ADDR := { IP_ADDRESS }\n"
|
||||||
fprintf(f,
|
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||||
"Where: ADDR := { IP%s_ADDRESS }\n"
|
" MARK := { 0x0..0xffffffff }\n",
|
||||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
lu->id);
|
||||||
" MARK := { 0x0..0xffffffff }\n",
|
|
||||||
""
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vti_parse_opt(struct link_util *lu, int argc, char **argv,
|
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)
|
FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f,
|
fprintf(f,
|
||||||
"Usage: ... %-4s [ remote ADDR ]\n",
|
"Usage: ... %-4s [ remote ADDR ]\n"
|
||||||
lu->id
|
" [ local ADDR ]\n"
|
||||||
);
|
" [ [i|o]key KEY ]\n"
|
||||||
fprintf(f,
|
" [ dev PHYS_DEV ]\n"
|
||||||
" [ local ADDR ]\n"
|
" [ fwmark MARK ]\n"
|
||||||
" [ [i|o]key KEY ]\n"
|
|
||||||
" [ dev PHYS_DEV ]\n"
|
|
||||||
" [ fwmark MARK ]\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
);
|
"Where: ADDR := { IPV6_ADDRESS }\n"
|
||||||
fprintf(f,
|
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
||||||
"Where: ADDR := { IP%s_ADDRESS }\n"
|
" MARK := { 0x0..0xffffffff }\n",
|
||||||
" KEY := { DOTTED_QUAD | NUMBER }\n"
|
lu->id);
|
||||||
" MARK := { 0x0..0xffffffff }\n",
|
|
||||||
"V6"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,
|
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,
|
static void xfrm_print_help(struct link_util *lu, int argc, char **argv,
|
||||||
FILE *f)
|
FILE *f)
|
||||||
{
|
{
|
||||||
fprintf(f, "Usage: ... %-4s dev PHYS_DEV [ if_id IF-ID ]\n", lu->id);
|
fprintf(f,
|
||||||
fprintf(f, "\nWhere: IF-ID := { 0x0..0xffffffff }\n");
|
"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,
|
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)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: rtmon [ OPTIONS ] file FILE [ all | LISTofOBJECTS ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "OPTIONS := { -f[amily] { inet | inet6 | link | help } |\n"
|
"Usage: rtmon [ OPTIONS ] file FILE [ all | LISTofOBJECTS ]\n"
|
||||||
" -4 | -6 | -0 | -V[ersion] }\n");
|
"OPTIONS := { -f[amily] { inet | inet6 | link | help } |\n"
|
||||||
fprintf(stderr, "LISTofOBJECTS := [ link ] [ address ] [ route ]\n");
|
" -4 | -6 | -0 | -V[ersion] }\n"
|
||||||
|
"LISTofOBJECTS := [ link ] [ address ] [ route ]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,10 +28,11 @@
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip tcp_metrics/tcpmetrics { COMMAND | help }\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ip tcp_metrics { show | flush } SELECTOR\n");
|
"Usage: ip tcp_metrics/tcpmetrics { COMMAND | help }\n"
|
||||||
fprintf(stderr, " ip tcp_metrics delete [ address ] ADDRESS\n");
|
" ip tcp_metrics { show | flush } SELECTOR\n"
|
||||||
fprintf(stderr, "SELECTOR := [ [ address ] PREFIX ]\n");
|
" ip tcp_metrics delete [ address ] ADDRESS\n"
|
||||||
|
"SELECTOR := [ [ address ] PREFIX ]\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,8 +39,9 @@ static bool nokeys;
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip xfrm monitor [ nokeys ] [ all-nsid ] [ all | OBJECTS | help ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "OBJECTS := { acquire | expire | SA | aevent | policy | report }\n");
|
"Usage: ip xfrm monitor [ nokeys ] [ all-nsid ] [ all | OBJECTS | help ]\n"
|
||||||
|
"OBJECTS := { acquire | expire | SA | aevent | policy | report }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,51 +52,60 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip xfrm policy { add | update } SELECTOR dir DIR [ ctx CTX ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ mark MARK [ mask MASK ] ] [ index INDEX ] [ ptype PTYPE ]\n");
|
"Usage: ip xfrm policy { add | update } SELECTOR dir DIR [ ctx CTX ]\n"
|
||||||
fprintf(stderr, " [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ]\n");
|
" [ mark MARK [ mask MASK ] ] [ index INDEX ] [ ptype PTYPE ]\n"
|
||||||
fprintf(stderr, " [ if_id IF_ID ] [ LIMIT-LIST ] [ TMPL-LIST ]\n");
|
" [ action ACTION ] [ priority PRIORITY ] [ flag FLAG-LIST ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm policy { delete | get } { SELECTOR | index INDEX } dir DIR\n");
|
" [ if_id IF_ID ] [ LIMIT-LIST ] [ TMPL-LIST ]\n"
|
||||||
fprintf(stderr, " [ ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]\n");
|
"Usage: ip xfrm policy { delete | get } { SELECTOR | index INDEX } dir DIR\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm policy { deleteall | list } [ nosock ] [ SELECTOR ] [ dir DIR ]\n");
|
" [ ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]\n"
|
||||||
fprintf(stderr, " [ index INDEX ] [ ptype PTYPE ] [ action ACTION ] [ priority PRIORITY ]\n");
|
"Usage: ip xfrm policy { deleteall | list } [ nosock ] [ SELECTOR ] [ dir DIR ]\n"
|
||||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
" [ index INDEX ] [ ptype PTYPE ] [ action ACTION ] [ priority PRIORITY ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm policy flush [ ptype PTYPE ]\n");
|
" [ flag FLAG-LIST ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm policy count\n");
|
"Usage: ip xfrm policy flush [ ptype PTYPE ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm policy set [ hthresh4 LBITS RBITS ] [ hthresh6 LBITS RBITS ]\n");
|
"Usage: ip xfrm policy count\n"
|
||||||
fprintf(stderr, "SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n");
|
"Usage: ip xfrm policy set [ hthresh4 LBITS RBITS ] [ hthresh6 LBITS RBITS ]\n"
|
||||||
fprintf(stderr, "UPSPEC := proto { { ");
|
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_TCP));
|
"UPSPEC := proto { { ");
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_UDP));
|
fprintf(stderr, "%s | %s | %s | %s } ",
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_SCTP));
|
strxf_proto(IPPROTO_TCP),
|
||||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_DCCP));
|
strxf_proto(IPPROTO_UDP),
|
||||||
fprintf(stderr, " } [ sport PORT ] [ dport PORT ] |\n");
|
strxf_proto(IPPROTO_SCTP),
|
||||||
fprintf(stderr, " { ");
|
strxf_proto(IPPROTO_DCCP));
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMP));
|
fprintf(stderr,
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMPV6));
|
"[ sport PORT ] [ dport PORT ] |\n"
|
||||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_MH));
|
" { %s | %s | %s } ",
|
||||||
fprintf(stderr, " } [ type NUMBER ] [ code NUMBER ] |\n");
|
strxf_proto(IPPROTO_ICMP),
|
||||||
fprintf(stderr, " %s", strxf_proto(IPPROTO_GRE));
|
strxf_proto(IPPROTO_ICMPV6),
|
||||||
fprintf(stderr, " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n");
|
strxf_proto(IPPROTO_MH));
|
||||||
fprintf(stderr, "DIR := in | out | fwd\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "PTYPE := main | sub\n");
|
"[ type NUMBER ] [ code NUMBER ] |\n"
|
||||||
fprintf(stderr, "ACTION := allow | block\n");
|
" %s",
|
||||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
strxf_proto(IPPROTO_GRE));
|
||||||
fprintf(stderr, "FLAG := localok | icmp\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n");
|
" [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n"
|
||||||
fprintf(stderr, "LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n");
|
"DIR := in | out | fwd\n"
|
||||||
fprintf(stderr, " { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n");
|
"PTYPE := main | sub\n"
|
||||||
fprintf(stderr, "TMPL-LIST := [ TMPL-LIST ] tmpl TMPL\n");
|
"ACTION := allow | block\n"
|
||||||
fprintf(stderr, "TMPL := ID [ mode MODE ] [ reqid REQID ] [ level LEVEL ]\n");
|
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||||
fprintf(stderr, "ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n");
|
"FLAG := localok | icmp\n"
|
||||||
fprintf(stderr, "XFRM-PROTO := ");
|
"LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n"
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ESP));
|
"LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n"
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_AH));
|
" { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n"
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_COMP));
|
"TMPL-LIST := [ TMPL-LIST ] tmpl TMPL\n"
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ROUTING));
|
"TMPL := ID [ mode MODE ] [ reqid REQID ] [ level LEVEL ]\n"
|
||||||
fprintf(stderr, "%s\n", strxf_xfrmproto(IPPROTO_DSTOPTS));
|
"ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n"
|
||||||
fprintf(stderr, "MODE := transport | tunnel | beet | ro | in_trigger\n");
|
"XFRM-PROTO := ");
|
||||||
fprintf(stderr, "LEVEL := required | use\n");
|
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);
|
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)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ip xfrm state { add | update } ID [ ALGO-LIST ] [ mode MODE ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ mark MARK [ mask MASK ] ] [ reqid REQID ] [ seq SEQ ]\n");
|
"Usage: ip xfrm state { add | update } ID [ ALGO-LIST ] [ mode MODE ]\n"
|
||||||
fprintf(stderr, " [ replay-window SIZE ] [ replay-seq SEQ ] [ replay-oseq SEQ ]\n");
|
" [ mark MARK [ mask MASK ] ] [ reqid REQID ] [ seq SEQ ]\n"
|
||||||
fprintf(stderr, " [ replay-seq-hi SEQ ] [ replay-oseq-hi SEQ ]\n");
|
" [ replay-window SIZE ] [ replay-seq SEQ ] [ replay-oseq SEQ ]\n"
|
||||||
fprintf(stderr, " [ flag FLAG-LIST ] [ sel SELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ]\n");
|
" [ replay-seq-hi SEQ ] [ replay-oseq-hi SEQ ]\n"
|
||||||
fprintf(stderr, " [ coa ADDR[/PLEN] ] [ ctx CTX ] [ extra-flag EXTRA-FLAG-LIST ]\n");
|
" [ flag FLAG-LIST ] [ sel SELECTOR ] [ LIMIT-LIST ] [ encap ENCAP ]\n"
|
||||||
fprintf(stderr, " [ offload [dev DEV] dir DIR ]\n");
|
" [ coa ADDR[/PLEN] ] [ ctx CTX ] [ extra-flag EXTRA-FLAG-LIST ]\n"
|
||||||
fprintf(stderr, " [ output-mark OUTPUT-MARK ]\n");
|
" [ offload [dev DEV] dir DIR ]\n"
|
||||||
+ fprintf(stderr, " [ if_id IF_ID ]\n");
|
" [ output-mark OUTPUT-MARK ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state allocspi ID [ mode MODE ] [ mark MARK [ mask MASK ] ]\n");
|
" [ if_id IF_ID ]\n"
|
||||||
fprintf(stderr, " [ reqid REQID ] [ seq SEQ ] [ min SPI max SPI ]\n");
|
"Usage: ip xfrm state allocspi ID [ mode MODE ] [ mark MARK [ mask MASK ] ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state { delete | get } ID [ mark MARK [ mask MASK ] ]\n");
|
" [ reqid REQID ] [ seq SEQ ] [ min SPI max SPI ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state deleteall [ ID ] [ mode MODE ] [ reqid REQID ]\n");
|
"Usage: ip xfrm state { delete | get } ID [ mark MARK [ mask MASK ] ]\n"
|
||||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
"Usage: ip xfrm state deleteall [ ID ] [ mode MODE ] [ reqid REQID ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state list [ nokeys ] [ ID ] [ mode MODE ] [ reqid REQID ]\n");
|
" [ flag FLAG-LIST ]\n"
|
||||||
fprintf(stderr, " [ flag FLAG-LIST ]\n");
|
"Usage: ip xfrm state list [ nokeys ] [ ID ] [ mode MODE ] [ reqid REQID ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state flush [ proto XFRM-PROTO ]\n");
|
" [ flag FLAG-LIST ]\n"
|
||||||
fprintf(stderr, "Usage: ip xfrm state count\n");
|
"Usage: ip xfrm state flush [ proto XFRM-PROTO ]\n"
|
||||||
fprintf(stderr, "ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n");
|
"Usage: ip xfrm state count\n"
|
||||||
fprintf(stderr, "XFRM-PROTO := ");
|
"ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n"
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ESP));
|
"XFRM-PROTO := ");
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_AH));
|
fprintf(stderr,
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_COMP));
|
"%s | %s | %s | %s | %s\n",
|
||||||
fprintf(stderr, "%s | ", strxf_xfrmproto(IPPROTO_ROUTING));
|
strxf_xfrmproto(IPPROTO_ESP),
|
||||||
fprintf(stderr, "%s\n", strxf_xfrmproto(IPPROTO_DSTOPTS));
|
strxf_xfrmproto(IPPROTO_AH),
|
||||||
fprintf(stderr, "ALGO-LIST := [ ALGO-LIST ] ALGO\n");
|
strxf_xfrmproto(IPPROTO_COMP),
|
||||||
fprintf(stderr, "ALGO := { ");
|
strxf_xfrmproto(IPPROTO_ROUTING),
|
||||||
fprintf(stderr, "%s | ", strxf_algotype(XFRMA_ALG_CRYPT));
|
strxf_xfrmproto(IPPROTO_DSTOPTS));
|
||||||
fprintf(stderr, "%s", strxf_algotype(XFRMA_ALG_AUTH));
|
fprintf(stderr,
|
||||||
fprintf(stderr, " } ALGO-NAME ALGO-KEYMAT |\n");
|
"ALGO-LIST := [ ALGO-LIST ] ALGO\n"
|
||||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_AUTH_TRUNC));
|
"ALGO := { ");
|
||||||
fprintf(stderr, " ALGO-NAME ALGO-KEYMAT ALGO-TRUNC-LEN |\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_AEAD));
|
"%s | %s",
|
||||||
fprintf(stderr, " ALGO-NAME ALGO-KEYMAT ALGO-ICV-LEN |\n");
|
strxf_algotype(XFRMA_ALG_CRYPT),
|
||||||
fprintf(stderr, " %s", strxf_algotype(XFRMA_ALG_COMP));
|
strxf_algotype(XFRMA_ALG_AUTH));
|
||||||
fprintf(stderr, " ALGO-NAME\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "MODE := transport | tunnel | beet | ro | in_trigger\n");
|
" } ALGO-NAME ALGO-KEYMAT |\n"
|
||||||
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
|
" %s", strxf_algotype(XFRMA_ALG_AUTH_TRUNC));
|
||||||
fprintf(stderr, "FLAG := noecn | decap-dscp | nopmtudisc | wildrecv | icmp | af-unspec | align4 | esn\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "EXTRA-FLAG-LIST := [ EXTRA-FLAG-LIST ] EXTRA-FLAG\n");
|
" ALGO-NAME ALGO-KEYMAT ALGO-TRUNC-LEN |\n"
|
||||||
fprintf(stderr, "EXTRA-FLAG := dont-encap-dscp\n");
|
" %s", strxf_algotype(XFRMA_ALG_AEAD));
|
||||||
fprintf(stderr, "SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "UPSPEC := proto { { ");
|
" ALGO-NAME ALGO-KEYMAT ALGO-ICV-LEN |\n"
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_TCP));
|
" %s", strxf_algotype(XFRMA_ALG_COMP));
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_UDP));
|
fprintf(stderr,
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_SCTP));
|
" ALGO-NAME\n"
|
||||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_DCCP));
|
"MODE := transport | tunnel | beet | ro | in_trigger\n"
|
||||||
fprintf(stderr, " } [ sport PORT ] [ dport PORT ] |\n");
|
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
|
||||||
fprintf(stderr, " { ");
|
"FLAG := noecn | decap-dscp | nopmtudisc | wildrecv | icmp | af-unspec | align4 | esn\n"
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMP));
|
"EXTRA-FLAG-LIST := [ EXTRA-FLAG-LIST ] EXTRA-FLAG\n"
|
||||||
fprintf(stderr, "%s | ", strxf_proto(IPPROTO_ICMPV6));
|
"EXTRA-FLAG := dont-encap-dscp\n"
|
||||||
fprintf(stderr, "%s", strxf_proto(IPPROTO_MH));
|
"SELECTOR := [ src ADDR[/PLEN] ] [ dst ADDR[/PLEN] ] [ dev DEV ] [ UPSPEC ]\n"
|
||||||
fprintf(stderr, " } [ type NUMBER ] [ code NUMBER ] |\n");
|
"UPSPEC := proto { { ");
|
||||||
fprintf(stderr, " %s", strxf_proto(IPPROTO_GRE));
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ key { DOTTED-QUAD | NUMBER } ] | PROTO }\n");
|
"%s | %s | %s | %s",
|
||||||
fprintf(stderr, "LIMIT-LIST := [ LIMIT-LIST ] limit LIMIT\n");
|
strxf_proto(IPPROTO_TCP),
|
||||||
fprintf(stderr, "LIMIT := { time-soft | time-hard | time-use-soft | time-use-hard } SECONDS |\n");
|
strxf_proto(IPPROTO_UDP),
|
||||||
fprintf(stderr, " { byte-soft | byte-hard } SIZE | { packet-soft | packet-hard } COUNT\n");
|
strxf_proto(IPPROTO_SCTP),
|
||||||
fprintf(stderr, "ENCAP := { espinudp | espinudp-nonike } SPORT DPORT OADDR\n");
|
strxf_proto(IPPROTO_DCCP));
|
||||||
fprintf(stderr, "DIR := in | out\n");
|
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);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
@ -55,28 +55,31 @@ static struct option opts[] = {
|
|||||||
|
|
||||||
static int usage(char *name, int exit_code)
|
static int usage(char *name, int exit_code)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s Version %s\n", name, LNSTAT_VERSION);
|
fprintf(stderr,
|
||||||
fprintf(stderr, "Copyright (C) 2004 by Harald Welte <laforge@gnumonks.org>\n");
|
"%s Version %s\n"
|
||||||
fprintf(stderr, "This program is free software licensed under GNU GPLv2\nwith ABSOLUTELY NO WARRANTY.\n\n");
|
"Copyright (C) 2004 by Harald Welte <laforge@gnumonks.org>\n"
|
||||||
fprintf(stderr, "Parameters:\n");
|
"This program is free software licensed under GNU GPLv2\nwith ABSOLUTELY NO WARRANTY.\n"
|
||||||
fprintf(stderr, "\t-V --version\t\tPrint Version of Program\n");
|
"\n"
|
||||||
fprintf(stderr, "\t-c --count <count>\t"
|
"Parameters:\n"
|
||||||
"Print <count> number of intervals\n");
|
" -V --version Print Version of Program\n"
|
||||||
fprintf(stderr, "\t-d --dump\t\t"
|
" -c --count <count> "
|
||||||
"Dump list of available files/keys\n");
|
"Print <count> number of intervals\n"
|
||||||
fprintf(stderr, "\t-j --json\t\t"
|
" -d --dump "
|
||||||
"Display in JSON format\n");
|
"Dump list of available files/keys\n"
|
||||||
fprintf(stderr, "\t-f --file <file>\tStatistics file to use\n");
|
" -j --json "
|
||||||
fprintf(stderr, "\t-h --help\t\tThis help message\n");
|
"Display in JSON format\n"
|
||||||
fprintf(stderr, "\t-i --interval <intv>\t"
|
" -f --file <file> Statistics file to use\n"
|
||||||
"Set interval to 'intv' seconds\n");
|
" -h --help This help message\n"
|
||||||
fprintf(stderr, "\t-k --keys k,k,k,...\tDisplay only keys specified\n");
|
" -i --interval <intv> "
|
||||||
fprintf(stderr, "\t-s --subject [0-2]\tControl header printing:\n");
|
"Set interval to 'intv' seconds\n"
|
||||||
fprintf(stderr, "\t\t\t\t0 = never\n");
|
" -k --keys k,k,k,... Display only keys specified\n"
|
||||||
fprintf(stderr, "\t\t\t\t1 = once\n");
|
" -s --subject [0-2] Control header printing:\n"
|
||||||
fprintf(stderr, "\t\t\t\t2 = every 20 lines (default))\n");
|
" 0 = never\n"
|
||||||
fprintf(stderr, "\t-w --width n,n,n,...\tWidth for each field\n");
|
" 1 = once\n"
|
||||||
fprintf(stderr, "\n");
|
" 2 = every 20 lines (default))\n"
|
||||||
|
" -w --width n,n,n,... Width for each field\n"
|
||||||
|
"\n",
|
||||||
|
name, LNSTAT_VERSION);
|
||||||
|
|
||||||
exit(exit_code);
|
exit(exit_code);
|
||||||
}
|
}
|
||||||
|
24
misc/nstat.c
24
misc/nstat.c
@ -528,18 +528,18 @@ static void usage(void) __attribute__((noreturn));
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: nstat [OPTION] [ PATTERN [ PATTERN ] ]\n"
|
"Usage: nstat [OPTION] [ PATTERN [ PATTERN ] ]\n"
|
||||||
" -h, --help this message\n"
|
" -h, --help this message\n"
|
||||||
" -a, --ignore ignore history\n"
|
" -a, --ignore ignore history\n"
|
||||||
" -d, --scan=SECS sample every statistics every SECS\n"
|
" -d, --scan=SECS sample every statistics every SECS\n"
|
||||||
" -j, --json format output in JSON\n"
|
" -j, --json format output in JSON\n"
|
||||||
" -n, --nooutput do history only\n"
|
" -n, --nooutput do history only\n"
|
||||||
" -p, --pretty pretty print\n"
|
" -p, --pretty pretty print\n"
|
||||||
" -r, --reset reset history\n"
|
" -r, --reset reset history\n"
|
||||||
" -s, --noupdate don't update history\n"
|
" -s, --noupdate don't update history\n"
|
||||||
" -t, --interval=SECS report average over the last SECS\n"
|
" -t, --interval=SECS report average over the last SECS\n"
|
||||||
" -V, --version output version information\n"
|
" -V, --version output version information\n"
|
||||||
" -z, --zeros show entries with zero activity\n");
|
" -z, --zeros show entries with zero activity\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... bpf [ import UDS_FILE ] [ run CMD ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " ... bpf [ debug ]\n");
|
"Usage: ... bpf [ import UDS_FILE ] [ run CMD ]\n"
|
||||||
fprintf(stderr, " ... bpf [ graft MAP_FILE ] [ key KEY ]\n");
|
" ... bpf [ debug ]\n"
|
||||||
fprintf(stderr, " `... [ object-file OBJ_FILE ] [ type TYPE ] [ section NAME ] [ verbose ]\n");
|
" ... bpf [ graft MAP_FILE ] [ key KEY ]\n"
|
||||||
fprintf(stderr, " `... [ object-pinned PROG_FILE ]\n");
|
" `... [ object-file OBJ_FILE ] [ type TYPE ] [ section NAME ] [ verbose ]\n"
|
||||||
fprintf(stderr, "\n");
|
" `... [ object-pinned PROG_FILE ]\n"
|
||||||
fprintf(stderr, "Where UDS_FILE provides the name of a unix domain socket file\n");
|
"\n"
|
||||||
fprintf(stderr, "to import eBPF maps and the optional CMD denotes the command\n");
|
"Where UDS_FILE provides the name of a unix domain socket file\n"
|
||||||
fprintf(stderr, "to be executed (default: \'%s\').\n", BPF_DEFAULT_CMD);
|
"to import eBPF maps and the optional CMD denotes the command\n"
|
||||||
fprintf(stderr, "Where MAP_FILE points to a pinned map, OBJ_FILE to an object file\n");
|
"to be executed (default: \'%s\').\n"
|
||||||
fprintf(stderr, "and PROG_FILE to a pinned program. TYPE can be {cls, act}, where\n");
|
"Where MAP_FILE points to a pinned map, OBJ_FILE to an object file\n"
|
||||||
fprintf(stderr, "\'cls\' is default. KEY is optional and can be inferred from the\n");
|
"and PROG_FILE to a pinned program. TYPE can be {cls, act}, where\n"
|
||||||
fprintf(stderr, "section name, otherwise it needs to be provided.\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)
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... basic [ match EMATCH_TREE ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ action ACTION_SPEC ] [ classid CLASSID ]\n");
|
"Usage: ... basic [ match EMATCH_TREE ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ action ACTION_SPEC ] [ classid CLASSID ]\n"
|
||||||
fprintf(stderr, "Where: SELECTOR := SAMPLE SAMPLE ...\n");
|
"\n"
|
||||||
fprintf(stderr, " FILTERID := X:Y:Z\n");
|
"Where: SELECTOR := SAMPLE SAMPLE ...\n"
|
||||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
" FILTERID := X:Y:Z\n"
|
||||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\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,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... bpf ...\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "\n");
|
"Usage: ... bpf ...\n"
|
||||||
fprintf(stderr, "BPF use case:\n");
|
"\n"
|
||||||
fprintf(stderr, " bytecode BPF_BYTECODE\n");
|
"BPF use case:\n"
|
||||||
fprintf(stderr, " bytecode-file FILE\n");
|
" bytecode BPF_BYTECODE\n"
|
||||||
fprintf(stderr, "\n");
|
" bytecode-file FILE\n"
|
||||||
fprintf(stderr, "eBPF use case:\n");
|
"\n"
|
||||||
fprintf(stderr, " object-file FILE [ section CLS_NAME ] [ export UDS_FILE ]");
|
"eBPF use case:\n"
|
||||||
fprintf(stderr, " [ verbose ] [ direct-action ] [ skip_hw | skip_sw ]\n");
|
" object-file FILE [ section CLS_NAME ] [ export UDS_FILE ]"
|
||||||
fprintf(stderr, " object-pinned FILE [ direct-action ] [ skip_hw | skip_sw ]\n");
|
" [ verbose ] [ direct-action ] [ skip_hw | skip_sw ]\n"
|
||||||
fprintf(stderr, "\n");
|
" object-pinned FILE [ direct-action ] [ skip_hw | skip_sw ]\n"
|
||||||
fprintf(stderr, "Common remaining options:\n");
|
"\n"
|
||||||
fprintf(stderr, " [ action ACTION_SPEC ]\n");
|
"Common remaining options:\n"
|
||||||
fprintf(stderr, " [ classid CLASSID ]\n");
|
" [ action ACTION_SPEC ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ classid CLASSID ]\n"
|
||||||
fprintf(stderr, "Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n");
|
"\n"
|
||||||
fprintf(stderr, "c,t,f,k and s are decimals; s denotes number of 4-tuples\n");
|
"Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n"
|
||||||
fprintf(stderr, "\n");
|
"c,t,f,k and s are decimals; s denotes number of 4-tuples\n"
|
||||||
fprintf(stderr, "Where FILE points to a file containing the BPF_BYTECODE string,\n");
|
"\n"
|
||||||
fprintf(stderr, "an ELF file containing eBPF map definitions and bytecode, or a\n");
|
"Where FILE points to a file containing the BPF_BYTECODE string,\n"
|
||||||
fprintf(stderr, "pinned eBPF program.\n");
|
"an ELF file containing eBPF map definitions and bytecode, or a\n"
|
||||||
fprintf(stderr, "\n");
|
"pinned eBPF program.\n"
|
||||||
fprintf(stderr, "Where CLS_NAME refers to the section name containing the\n");
|
"\n"
|
||||||
fprintf(stderr, "classifier (default \'%s\').\n", bpf_prog_to_default_section(bpf_type));
|
"Where CLS_NAME refers to the section name containing the\n"
|
||||||
fprintf(stderr, "\n");
|
"classifier (default \'%s\').\n"
|
||||||
fprintf(stderr, "Where UDS_FILE points to a unix domain socket file in order\n");
|
"\n"
|
||||||
fprintf(stderr, "to hand off control of all created eBPF maps to an agent.\n");
|
"Where UDS_FILE points to a unix domain socket file in order\n"
|
||||||
fprintf(stderr, "\n");
|
"to hand off control of all created eBPF maps to an agent.\n"
|
||||||
fprintf(stderr, "ACTION_SPEC := ... look at individual actions\n");
|
"\n"
|
||||||
fprintf(stderr, "NOTE: CLASSID is parsed as hexadecimal input.\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)
|
static void bpf_cbpf_cb(void *nl, const struct sock_filter *ops, int ops_len)
|
||||||
|
30
tc/f_flow.c
30
tc/f_flow.c
@ -21,21 +21,21 @@
|
|||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ... flow ...\n"
|
"Usage: ... flow ...\n"
|
||||||
"\n"
|
"\n"
|
||||||
" [mapping mode]: map key KEY [ OPS ] ...\n"
|
" [mapping mode]: map key KEY [ OPS ] ...\n"
|
||||||
" [hashing mode]: hash keys KEY-LIST ... [ perturb SECS ]\n"
|
" [hashing mode]: hash keys KEY-LIST ... [ perturb SECS ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
" [ divisor NUM ] [ baseclass ID ] [ match EMATCH_TREE ]\n"
|
" [ divisor NUM ] [ baseclass ID ] [ match EMATCH_TREE ]\n"
|
||||||
" [ action ACTION_SPEC ]\n"
|
" [ action ACTION_SPEC ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"KEY-LIST := [ KEY-LIST , ] KEY\n"
|
"KEY-LIST := [ KEY-LIST , ] KEY\n"
|
||||||
"KEY := [ src | dst | proto | proto-src | proto-dst | iif | priority |\n"
|
"KEY := [ src | dst | proto | proto-src | proto-dst | iif | priority |\n"
|
||||||
" mark | nfct | nfct-src | nfct-dst | nfct-proto-src |\n"
|
" mark | nfct | nfct-src | nfct-dst | nfct-proto-src |\n"
|
||||||
" nfct-proto-dst | rt-classid | sk-uid | sk-gid |\n"
|
" nfct-proto-dst | rt-classid | sk-uid | sk-gid |\n"
|
||||||
" vlan-tag | rxhash ]\n"
|
" vlan-tag | rxhash ]\n"
|
||||||
"OPS := [ or NUM | and NUM | xor NUM | rshift NUM | addend NUM ]\n"
|
"OPS := [ or NUM | and NUM | xor NUM | rshift NUM | addend NUM ]\n"
|
||||||
"ID := X:Y\n"
|
"ID := X:Y\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,54 +42,54 @@ enum flower_icmp_field {
|
|||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ... flower [ MATCH-LIST ] [ verbose ]\n"
|
"Usage: ... flower [ MATCH-LIST ] [ verbose ]\n"
|
||||||
" [ skip_sw | skip_hw ]\n"
|
" [ skip_sw | skip_hw ]\n"
|
||||||
" [ action ACTION-SPEC ] [ classid CLASSID ]\n"
|
" [ action ACTION-SPEC ] [ classid CLASSID ]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Where: MATCH-LIST := [ MATCH-LIST ] MATCH\n"
|
"Where: MATCH-LIST := [ MATCH-LIST ] MATCH\n"
|
||||||
" MATCH := { indev DEV-NAME |\n"
|
" MATCH := { indev DEV-NAME |\n"
|
||||||
" vlan_id VID |\n"
|
" vlan_id VID |\n"
|
||||||
" vlan_prio PRIORITY |\n"
|
" vlan_prio PRIORITY |\n"
|
||||||
" vlan_ethtype [ ipv4 | ipv6 | ETH-TYPE ] |\n"
|
" vlan_ethtype [ ipv4 | ipv6 | ETH-TYPE ] |\n"
|
||||||
" cvlan_id VID |\n"
|
" cvlan_id VID |\n"
|
||||||
" cvlan_prio PRIORITY |\n"
|
" cvlan_prio PRIORITY |\n"
|
||||||
" cvlan_ethtype [ ipv4 | ipv6 | ETH-TYPE ] |\n"
|
" cvlan_ethtype [ ipv4 | ipv6 | ETH-TYPE ] |\n"
|
||||||
" dst_mac MASKED-LLADDR |\n"
|
" dst_mac MASKED-LLADDR |\n"
|
||||||
" src_mac MASKED-LLADDR |\n"
|
" src_mac MASKED-LLADDR |\n"
|
||||||
" ip_proto [tcp | udp | sctp | icmp | icmpv6 | IP-PROTO ] |\n"
|
" ip_proto [tcp | udp | sctp | icmp | icmpv6 | IP-PROTO ] |\n"
|
||||||
" ip_tos MASKED-IP_TOS |\n"
|
" ip_tos MASKED-IP_TOS |\n"
|
||||||
" ip_ttl MASKED-IP_TTL |\n"
|
" ip_ttl MASKED-IP_TTL |\n"
|
||||||
" mpls_label LABEL |\n"
|
" mpls_label LABEL |\n"
|
||||||
" mpls_tc TC |\n"
|
" mpls_tc TC |\n"
|
||||||
" mpls_bos BOS |\n"
|
" mpls_bos BOS |\n"
|
||||||
" mpls_ttl TTL |\n"
|
" mpls_ttl TTL |\n"
|
||||||
" dst_ip PREFIX |\n"
|
" dst_ip PREFIX |\n"
|
||||||
" src_ip PREFIX |\n"
|
" src_ip PREFIX |\n"
|
||||||
" dst_port PORT-NUMBER |\n"
|
" dst_port PORT-NUMBER |\n"
|
||||||
" src_port PORT-NUMBER |\n"
|
" src_port PORT-NUMBER |\n"
|
||||||
" tcp_flags MASKED-TCP_FLAGS |\n"
|
" tcp_flags MASKED-TCP_FLAGS |\n"
|
||||||
" type MASKED-ICMP-TYPE |\n"
|
" type MASKED-ICMP-TYPE |\n"
|
||||||
" code MASKED-ICMP-CODE |\n"
|
" code MASKED-ICMP-CODE |\n"
|
||||||
" arp_tip IPV4-PREFIX |\n"
|
" arp_tip IPV4-PREFIX |\n"
|
||||||
" arp_sip IPV4-PREFIX |\n"
|
" arp_sip IPV4-PREFIX |\n"
|
||||||
" arp_op [ request | reply | OP ] |\n"
|
" arp_op [ request | reply | OP ] |\n"
|
||||||
" arp_tha MASKED-LLADDR |\n"
|
" arp_tha MASKED-LLADDR |\n"
|
||||||
" arp_sha MASKED-LLADDR |\n"
|
" arp_sha MASKED-LLADDR |\n"
|
||||||
" enc_dst_ip [ IPV4-ADDR | IPV6-ADDR ] |\n"
|
" enc_dst_ip [ IPV4-ADDR | IPV6-ADDR ] |\n"
|
||||||
" enc_src_ip [ IPV4-ADDR | IPV6-ADDR ] |\n"
|
" enc_src_ip [ IPV4-ADDR | IPV6-ADDR ] |\n"
|
||||||
" enc_key_id [ KEY-ID ] |\n"
|
" enc_key_id [ KEY-ID ] |\n"
|
||||||
" enc_tos MASKED-IP_TOS |\n"
|
" enc_tos MASKED-IP_TOS |\n"
|
||||||
" enc_ttl MASKED-IP_TTL |\n"
|
" enc_ttl MASKED-IP_TTL |\n"
|
||||||
" geneve_opts MASKED-OPTIONS |\n"
|
" geneve_opts MASKED-OPTIONS |\n"
|
||||||
" ip_flags IP-FLAGS | \n"
|
" ip_flags IP-FLAGS | \n"
|
||||||
" enc_dst_port [ port_number ] }\n"
|
" enc_dst_port [ port_number ] }\n"
|
||||||
" FILTERID := X:Y:Z\n"
|
" FILTERID := X:Y:Z\n"
|
||||||
" MASKED_LLADDR := { LLADDR | LLADDR/MASK | LLADDR/BITS }\n"
|
" MASKED_LLADDR := { LLADDR | LLADDR/MASK | LLADDR/BITS }\n"
|
||||||
" ACTION-SPEC := ... look at individual actions\n"
|
" ACTION-SPEC := ... look at individual actions\n"
|
||||||
"\n"
|
"\n"
|
||||||
"NOTE: CLASSID, IP-PROTO are parsed as hexadecimal input.\n"
|
"NOTE: CLASSID, IP-PROTO are parsed as hexadecimal input.\n"
|
||||||
"NOTE: There can be only used one mask per one prio. If user needs\n"
|
"NOTE: There can be only used one mask per one prio. If user needs\n"
|
||||||
" to specify different mask, he has to use different prio.\n");
|
" to specify different mask, he has to use different prio.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int flower_parse_eth_addr(char *str, int addr_type, int mask_type,
|
static int flower_parse_eth_addr(char *str, int addr_type, int mask_type,
|
||||||
|
19
tc/f_fw.c
19
tc/f_fw.c
@ -25,18 +25,13 @@
|
|||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ... fw [ classid CLASSID ] [ indev DEV ] [ action ACTION_SPEC ]\n");
|
"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"
|
||||||
" CLASSID := Push matching packets to the class identified by CLASSID with format X:Y\n");
|
" CLASSID is parsed as hexadecimal input.\n"
|
||||||
fprintf(stderr,
|
" DEV := specify device for incoming device classification.\n"
|
||||||
" CLASSID is parsed as hexadecimal input.\n");
|
" ACTION_SPEC := Apply an action on matching packets.\n"
|
||||||
fprintf(stderr,
|
" NOTE: handle is represented as HANDLE[/FWMASK].\n"
|
||||||
" DEV := specify device for incoming device classification.\n");
|
" FWMASK is 0xffffffff by default.\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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fw_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... matchall [skip_sw | skip_hw]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ action ACTION_SPEC ] [ classid CLASSID ]\n");
|
"Usage: ... matchall [skip_sw | skip_hw]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ action ACTION_SPEC ] [ classid CLASSID ]\n"
|
||||||
fprintf(stderr, "Where: SELECTOR := SAMPLE SAMPLE ...\n");
|
"\n"
|
||||||
fprintf(stderr, " FILTERID := X:Y:Z\n");
|
"Where: SELECTOR := SAMPLE SAMPLE ...\n"
|
||||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
" FILTERID := X:Y:Z\n"
|
||||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\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,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... route [ from REALM | fromif TAG ] [ to REALM ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
"Usage: ... route [ from REALM | fromif TAG ] [ to REALM ]\n"
|
||||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
" [ classid CLASSID ] [ action ACTION_SPEC ]\n"
|
||||||
fprintf(stderr, " CLASSID := X:Y\n");
|
" ACTION_SPEC := ... look at individual actions\n"
|
||||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\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)
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... rsvp ipproto PROTOCOL session DST[/PORT | GPI ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ sender SRC[/PORT | GPI ] ]\n");
|
"Usage: ... rsvp ipproto PROTOCOL session DST[/PORT | GPI ]\n"
|
||||||
fprintf(stderr, " [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
" [ sender SRC[/PORT | GPI ] ]\n"
|
||||||
fprintf(stderr, " [ tunnelid ID ] [ tunnel ID skip NUMBER ]\n");
|
" [ classid CLASSID ] [ action ACTION_SPEC ]\n"
|
||||||
fprintf(stderr, "Where: GPI := { flowlabel NUMBER | spi/ah SPI | spi/esp SPI |\n");
|
" [ tunnelid ID ] [ tunnel ID skip NUMBER ]\n"
|
||||||
fprintf(stderr, " u{8|16|32} NUMBER mask MASK at OFFSET}\n");
|
"Where: GPI := { flowlabel NUMBER | spi/ah SPI | spi/esp SPI |\n"
|
||||||
fprintf(stderr, " ACTION_SPEC := ... look at individual actions\n");
|
" u{8|16|32} NUMBER mask MASK at OFFSET}\n"
|
||||||
fprintf(stderr, " FILTERID := X:Y\n");
|
" ACTION_SPEC := ... look at individual actions\n"
|
||||||
fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\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,
|
static int get_addr_and_pi(int *argc_p, char ***argv_p, inet_prefix *addr,
|
||||||
|
@ -17,9 +17,10 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr," Usage: ... tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ pass_on | fall_through ]\n");
|
" Usage: ... tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ]\n"
|
||||||
fprintf(stderr," [ classid CLASSID ] [ action ACTION_SPEC ]\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,
|
static int tcindex_parse_opt(struct filter_util *qu, char *handle, int argc,
|
||||||
|
@ -43,20 +43,20 @@ static void act_usage(void)
|
|||||||
* does that, they would know how to fix this ..
|
* does that, they would know how to fix this ..
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
fprintf(stderr, "usage: tc actions <ACTSPECOP>*\n");
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Where: \tACTSPECOP := ACR | GD | FL\n"
|
"usage: tc actions <ACTSPECOP>*\n"
|
||||||
"\tACR := add | change | replace <ACTSPEC>*\n"
|
"Where: ACTSPECOP := ACR | GD | FL\n"
|
||||||
"\tGD := get | delete | <ACTISPEC>*\n"
|
" ACR := add | change | replace <ACTSPEC>*\n"
|
||||||
"\tFL := ls | list | flush | <ACTNAMESPEC>\n"
|
" GD := get | delete | <ACTISPEC>*\n"
|
||||||
"\tACTNAMESPEC := action <ACTNAME>\n"
|
" FL := ls | list | flush | <ACTNAMESPEC>\n"
|
||||||
"\tACTISPEC := <ACTNAMESPEC> <INDEXSPEC>\n"
|
" ACTNAMESPEC := action <ACTNAME>\n"
|
||||||
"\tACTSPEC := action <ACTDETAIL> [INDEXSPEC]\n"
|
" ACTISPEC := <ACTNAMESPEC> <INDEXSPEC>\n"
|
||||||
"\tINDEXSPEC := index <32 bit indexvalue>\n"
|
" ACTSPEC := action <ACTDETAIL> [INDEXSPEC]\n"
|
||||||
"\tACTDETAIL := <ACTNAME> <ACTPARAMS>\n"
|
" INDEXSPEC := index <32 bit indexvalue>\n"
|
||||||
"\t\tExample ACTNAME is gact, mirred, bpf, etc\n"
|
" ACTDETAIL := <ACTNAME> <ACTPARAMS>\n"
|
||||||
"\t\tEach action has its own parameters (ACTPARAMS)\n"
|
" Example ACTNAME is gact, mirred, bpf, etc\n"
|
||||||
"\n");
|
" Each action has its own parameters (ACTPARAMS)\n"
|
||||||
|
"\n");
|
||||||
|
|
||||||
exit(-1);
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... bpf ... [ index INDEX ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "\n");
|
"Usage: ... bpf ... [ index INDEX ]\n"
|
||||||
fprintf(stderr, "BPF use case:\n");
|
"\n"
|
||||||
fprintf(stderr, " bytecode BPF_BYTECODE\n");
|
"BPF use case:\n"
|
||||||
fprintf(stderr, " bytecode-file FILE\n");
|
" bytecode BPF_BYTECODE\n"
|
||||||
fprintf(stderr, "\n");
|
" bytecode-file FILE\n"
|
||||||
fprintf(stderr, "eBPF use case:\n");
|
"\n"
|
||||||
fprintf(stderr, " object-file FILE [ section ACT_NAME ] [ export UDS_FILE ]");
|
"eBPF use case:\n"
|
||||||
fprintf(stderr, " [ verbose ]\n");
|
" object-file FILE [ section ACT_NAME ] [ export UDS_FILE ]"
|
||||||
fprintf(stderr, " object-pinned FILE\n");
|
" [ verbose ]\n"
|
||||||
fprintf(stderr, "\n");
|
" object-pinned FILE\n"
|
||||||
fprintf(stderr, "Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n");
|
"\n"
|
||||||
fprintf(stderr, "c,t,f,k and s are decimals; s denotes number of 4-tuples\n");
|
"Where BPF_BYTECODE := \'s,c t f k,c t f k,c t f k,...\'\n"
|
||||||
fprintf(stderr, "\n");
|
"c,t,f,k and s are decimals; s denotes number of 4-tuples\n"
|
||||||
fprintf(stderr, "Where FILE points to a file containing the BPF_BYTECODE string,\n");
|
"\n"
|
||||||
fprintf(stderr, "an ELF file containing eBPF map definitions and bytecode, or a\n");
|
"Where FILE points to a file containing the BPF_BYTECODE string,\n"
|
||||||
fprintf(stderr, "pinned eBPF program.\n");
|
"an ELF file containing eBPF map definitions and bytecode, or a\n"
|
||||||
fprintf(stderr, "\n");
|
"pinned eBPF program.\n"
|
||||||
fprintf(stderr, "Where ACT_NAME refers to the section name containing the\n");
|
"\n"
|
||||||
fprintf(stderr, "action (default \'%s\').\n", bpf_prog_to_default_section(bpf_type));
|
"Where ACT_NAME refers to the section name containing the\n"
|
||||||
fprintf(stderr, "\n");
|
"action (default \'%s\').\n"
|
||||||
fprintf(stderr, "Where UDS_FILE points to a unix domain socket file in order\n");
|
"\n"
|
||||||
fprintf(stderr, "to hand off control of all created eBPF maps to an agent.\n");
|
"Where UDS_FILE points to a unix domain socket file in order\n"
|
||||||
fprintf(stderr, "\n");
|
"to hand off control of all created eBPF maps to an agent.\n"
|
||||||
fprintf(stderr, "Where optionally INDEX points to an existing action, or\n");
|
"\n"
|
||||||
fprintf(stderr, "explicitly specifies an action index upon creation.\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)
|
static void bpf_cbpf_cb(void *nl, const struct sock_filter *ops, int ops_len)
|
||||||
|
@ -27,8 +27,9 @@
|
|||||||
static void
|
static void
|
||||||
explain(void)
|
explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... connmark [zone ZONE] [CONTROL] [index <INDEX>]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "where :\n"
|
"Usage: ... connmark [zone ZONE] [CONTROL] [index <INDEX>]\n"
|
||||||
|
"where :\n"
|
||||||
"\tZONE is the conntrack zone\n"
|
"\tZONE is the conntrack zone\n"
|
||||||
"\tCONTROL := reclassify | pipe | drop | continue | ok |\n"
|
"\tCONTROL := reclassify | pipe | drop | continue | ok |\n"
|
||||||
"\t goto chain <CHAIN_INDEX>\n");
|
"\t goto chain <CHAIN_INDEX>\n");
|
||||||
|
@ -27,10 +27,11 @@ static void est_help(void);
|
|||||||
|
|
||||||
static void est_help(void)
|
static void est_help(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... estimator INTERVAL TIME-CONST\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " INTERVAL is interval between measurements\n");
|
"Usage: ... estimator INTERVAL TIME-CONST\n"
|
||||||
fprintf(stderr, " TIME-CONST is averaging time constant\n");
|
" INTERVAL is interval between measurements\n"
|
||||||
fprintf(stderr, "Example: ... est 1sec 8sec\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)
|
int parse_estimator(int *p_argc, char ***p_argv, struct tc_estimator *est)
|
||||||
|
@ -53,8 +53,7 @@ explain(void)
|
|||||||
"\tINDEX := index value used\n"
|
"\tINDEX := index value used\n"
|
||||||
"\n");
|
"\n");
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "Usage: ... gact <ACTION> [INDEX]\n");
|
fprintf(stderr, "Usage: ... gact <ACTION> [INDEX]\n"
|
||||||
fprintf(stderr,
|
|
||||||
"Where: \tACTION := reclassify | drop | continue | pass | pipe |\n"
|
"Where: \tACTION := reclassify | drop | continue | pass | pipe |\n"
|
||||||
" \t goto chain <CHAIN_INDEX> | jump <JUMP_COUNT>\n"
|
" \t goto chain <CHAIN_INDEX> | jump <JUMP_COUNT>\n"
|
||||||
"\tINDEX := index value used\n"
|
"\tINDEX := index value used\n"
|
||||||
|
@ -28,8 +28,7 @@
|
|||||||
static void ife_explain(void)
|
static void ife_explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage:... ife {decode|encode} [{ALLOW|USE} ATTR] [dst DMAC] [src SMAC] [type TYPE] [CONTROL] [index INDEX]\n");
|
"Usage:... ife {decode|encode} [{ALLOW|USE} ATTR] [dst DMAC] [src SMAC] [type TYPE] [CONTROL] [index INDEX]\n"
|
||||||
fprintf(stderr,
|
|
||||||
"\tALLOW := Encode direction. Allows encoding specified metadata\n"
|
"\tALLOW := Encode direction. Allows encoding specified metadata\n"
|
||||||
"\t\t e.g \"allow mark\"\n"
|
"\t\t e.g \"allow mark\"\n"
|
||||||
"\tUSE := Encode direction. Enforce Static encoding of specified metadata\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"
|
"\tSMAC := optional 6 byte Source MAC address to encode\n"
|
||||||
"\tTYPE := optional 16 bit ethertype to encode\n"
|
"\tTYPE := optional 16 bit ethertype to encode\n"
|
||||||
"\tCONTROL := reclassify|pipe|drop|continue|ok\n"
|
"\tCONTROL := reclassify|pipe|drop|continue|ok\n"
|
||||||
"\tINDEX := optional IFE table index value used\n");
|
"\tINDEX := optional IFE table index value used\n"
|
||||||
fprintf(stderr, "encode is used for sending IFE packets\n");
|
"encode is used for sending IFE packets\n"
|
||||||
fprintf(stderr, "decode is used for receiving IFE packets\n");
|
"decode is used for receiving IFE packets\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ife_usage(void)
|
static void ife_usage(void)
|
||||||
|
@ -34,8 +34,8 @@ static int pedit_debug;
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... pedit munge [ex] <MUNGE> [CONTROL]\n");
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
"Usage: ... pedit munge [ex] <MUNGE> [CONTROL]\n"
|
||||||
"Where: MUNGE := <RAW>|<LAYERED>\n"
|
"Where: MUNGE := <RAW>|<LAYERED>\n"
|
||||||
"\t<RAW>:= <OFFSETC>[ATC]<CMD>\n \t\tOFFSETC:= offset <offval> <u8|u16|u32>\n"
|
"\t<RAW>:= <OFFSETC>[ATC]<CMD>\n \t\tOFFSETC:= offset <offval> <u8|u16|u32>\n"
|
||||||
"\t\tATC:= at <atval> offmask <maskval> shift <shiftval>\n"
|
"\t\tATC:= at <atval> offmask <maskval> shift <shiftval>\n"
|
||||||
|
@ -37,15 +37,15 @@ struct action_util police_action_util = {
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... police rate BPS burst BYTES[/BYTES] [ mtu BYTES[/BYTES] ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ peakrate BPS ] [ avrate BPS ] [ overhead BYTES ]\n");
|
"Usage: ... police rate BPS burst BYTES[/BYTES] [ mtu BYTES[/BYTES] ]\n"
|
||||||
fprintf(stderr, " [ linklayer TYPE ] [ CONTROL ]\n");
|
" [ peakrate BPS ] [ avrate BPS ] [ overhead BYTES ]\n"
|
||||||
|
" [ linklayer TYPE ] [ CONTROL ]\n"
|
||||||
fprintf(stderr, "Where: CONTROL := conform-exceed <EXCEEDACT>[/NOTEXCEEDACT]\n");
|
"Where: CONTROL := conform-exceed <EXCEEDACT>[/NOTEXCEEDACT]\n"
|
||||||
fprintf(stderr, " Define how to handle packets which exceed (<EXCEEDACT>)\n");
|
" Define how to handle packets which exceed (<EXCEEDACT>)\n"
|
||||||
fprintf(stderr, " or conform (<NOTEXCEEDACT>) the configured bandwidth limit.\n");
|
" or conform (<NOTEXCEEDACT>) the configured bandwidth limit.\n"
|
||||||
fprintf(stderr, " EXCEEDACT/NOTEXCEEDACT := { pipe | ok | reclassify | drop | continue |\n");
|
" EXCEEDACT/NOTEXCEEDACT := { pipe | ok | reclassify | drop | continue |\n"
|
||||||
fprintf(stderr, " goto chain <CHAIN_INDEX> }\n");
|
" goto chain <CHAIN_INDEX> }\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,15 +18,16 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: sample SAMPLE_CONF\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "where:\n");
|
"Usage: sample SAMPLE_CONF\n"
|
||||||
fprintf(stderr, "\tSAMPLE_CONF := SAMPLE_PARAMS | SAMPLE_INDEX\n");
|
"where:\n"
|
||||||
fprintf(stderr, "\tSAMPLE_PARAMS := rate RATE group GROUP [trunc SIZE] [SAMPLE_INDEX]\n");
|
"\tSAMPLE_CONF := SAMPLE_PARAMS | SAMPLE_INDEX\n"
|
||||||
fprintf(stderr, "\tSAMPLE_INDEX := index INDEX\n");
|
"\tSAMPLE_PARAMS := rate RATE group GROUP [trunc SIZE] [SAMPLE_INDEX]\n"
|
||||||
fprintf(stderr, "\tRATE := The ratio of packets observed at the data source to the samples generated.\n");
|
"\tSAMPLE_INDEX := index INDEX\n"
|
||||||
fprintf(stderr, "\tGROUP := the psample sampling group\n");
|
"\tRATE := The ratio of packets observed at the data source to the samples generated.\n"
|
||||||
fprintf(stderr, "\tSIZE := the truncation size\n");
|
"\tGROUP := the psample sampling group\n"
|
||||||
fprintf(stderr, "\tINDEX := integer index of the sample action\n");
|
"\tSIZE := the truncation size\n"
|
||||||
|
"\tINDEX := integer index of the sample action\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
|
@ -80,8 +80,9 @@
|
|||||||
#endif
|
#endif
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage:... simple [sdata STRING] [index INDEX] [CONTROL]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "\tSTRING being an arbitrary string\n"
|
"Usage:... simple [sdata STRING] [index INDEX] [CONTROL]\n"
|
||||||
|
"\tSTRING being an arbitrary string\n"
|
||||||
"\tINDEX := optional index value used\n"
|
"\tINDEX := optional index value used\n"
|
||||||
"\tCONTROL := reclassify|pipe|drop|continue|ok\n");
|
"\tCONTROL := reclassify|pipe|drop|continue|ok\n");
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,9 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: tunnel_key unset\n");
|
|
||||||
fprintf(stderr, " tunnel_key set <TUNNEL_KEY>\n");
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
"Usage: tunnel_key unset\n"
|
||||||
|
" tunnel_key set <TUNNEL_KEY>\n"
|
||||||
"Where TUNNEL_KEY is a combination of:\n"
|
"Where TUNNEL_KEY is a combination of:\n"
|
||||||
"id <TUNNELID>\n"
|
"id <TUNNELID>\n"
|
||||||
"src_ip <IP> (mandatory)\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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... atm ( pvc ADDR | svc ADDR [ sap SAP ] ) [ qos QOS ] [ sndbuf BYTES ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ hdr HEX... ] [ excess ( CLASSID | clp ) ] [ clip ]\n");
|
"Usage: ... atm ( pvc ADDR | svc ADDR [ sap SAP ] ) [ qos QOS ] [ sndbuf BYTES ]\n"
|
||||||
|
" [ hdr HEX... ] [ excess ( CLASSID | clp ) ] [ clip ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
30
tc/q_cake.c
30
tc/q_cake.c
@ -71,21 +71,21 @@ static struct cake_preset *find_preset(char *argv)
|
|||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ... cake [ bandwidth RATE | unlimited* | autorate-ingress ]\n"
|
"Usage: ... cake [ bandwidth RATE | unlimited* | autorate-ingress ]\n"
|
||||||
" [ rtt TIME | datacentre | lan | metro | regional |\n"
|
" [ rtt TIME | datacentre | lan | metro | regional |\n"
|
||||||
" internet* | oceanic | satellite | interplanetary ]\n"
|
" internet* | oceanic | satellite | interplanetary ]\n"
|
||||||
" [ besteffort | diffserv8 | diffserv4 | diffserv3* ]\n"
|
" [ besteffort | diffserv8 | diffserv4 | diffserv3* ]\n"
|
||||||
" [ flowblind | srchost | dsthost | hosts | flows |\n"
|
" [ flowblind | srchost | dsthost | hosts | flows |\n"
|
||||||
" dual-srchost | dual-dsthost | triple-isolate* ]\n"
|
" dual-srchost | dual-dsthost | triple-isolate* ]\n"
|
||||||
" [ nat | nonat* ]\n"
|
" [ nat | nonat* ]\n"
|
||||||
" [ wash | nowash* ]\n"
|
" [ wash | nowash* ]\n"
|
||||||
" [ split-gso* | no-split-gso ]\n"
|
" [ split-gso* | no-split-gso ]\n"
|
||||||
" [ ack-filter | ack-filter-aggressive | no-ack-filter* ]\n"
|
" [ ack-filter | ack-filter-aggressive | no-ack-filter* ]\n"
|
||||||
" [ memlimit LIMIT ]\n"
|
" [ memlimit LIMIT ]\n"
|
||||||
" [ fwmark MASK ]\n"
|
" [ fwmark MASK ]\n"
|
||||||
" [ ptm | atm | noatm* ] [ overhead N | conservative | raw* ]\n"
|
" [ ptm | atm | noatm* ] [ overhead N | conservative | raw* ]\n"
|
||||||
" [ mpu N ] [ ingress | egress* ]\n"
|
" [ mpu N ] [ ingress | egress* ]\n"
|
||||||
" (* marks defaults)\n");
|
" (* marks defaults)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cake_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
static int cake_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||||
|
20
tc/q_cbq.c
20
tc/q_cbq.c
@ -25,19 +25,21 @@
|
|||||||
|
|
||||||
static void explain_class(void)
|
static void explain_class(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... cbq bandwidth BPS rate BPS maxburst PKTS [ avpkt BYTES ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ minburst PKTS ] [ bounded ] [ isolated ]\n");
|
"Usage: ... cbq bandwidth BPS rate BPS maxburst PKTS [ avpkt BYTES ]\n"
|
||||||
fprintf(stderr, " [ allot BYTES ] [ mpu BYTES ] [ weight RATE ]\n");
|
" [ minburst PKTS ] [ bounded ] [ isolated ]\n"
|
||||||
fprintf(stderr, " [ prio NUMBER ] [ cell BYTES ] [ ewma LOG ]\n");
|
" [ allot BYTES ] [ mpu BYTES ] [ weight RATE ]\n"
|
||||||
fprintf(stderr, " [ estimator INTERVAL TIME_CONSTANT ]\n");
|
" [ prio NUMBER ] [ cell BYTES ] [ ewma LOG ]\n"
|
||||||
fprintf(stderr, " [ split CLASSID ] [ defmap MASK/CHANGE ]\n");
|
" [ estimator INTERVAL TIME_CONSTANT ]\n"
|
||||||
fprintf(stderr, " [ overhead BYTES ] [ linklayer TYPE ]\n");
|
" [ split CLASSID ] [ defmap MASK/CHANGE ]\n"
|
||||||
|
" [ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... cbq bandwidth BPS avpkt BYTES [ mpu BYTES ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ cell BYTES ] [ ewma LOG ]\n");
|
"Usage: ... cbq bandwidth BPS avpkt BYTES [ mpu BYTES ]\n"
|
||||||
|
" [ cell BYTES ] [ ewma LOG ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain1(char *arg)
|
static void explain1(char *arg)
|
||||||
|
@ -24,9 +24,9 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... cbs hicredit BYTES locredit BYTES sendslope BPS idleslope BPS\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [offload 0|1]\n");
|
"Usage: ... cbs hicredit BYTES locredit BYTES sendslope BPS idleslope BPS\n"
|
||||||
|
" [offload 0|1]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain1(const char *arg, const char *val)
|
static void explain1(const char *arg, const char *val)
|
||||||
|
@ -26,8 +26,9 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... choke limit PACKETS bandwidth KBPS [ecn]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ min PACKETS ] [ max PACKETS ] [ burst PACKETS ]\n");
|
"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,
|
static int choke_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||||
|
@ -52,9 +52,10 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... codel [ limit PACKETS ] [ target TIME ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ interval TIME ] [ ecn | noecn ]\n");
|
"Usage: ... codel [ limit PACKETS ] [ target TIME ]\n"
|
||||||
fprintf(stderr, " [ ce_threshold TIME ]\n");
|
" [ interval TIME ] [ ecn | noecn ]\n"
|
||||||
|
" [ ce_threshold TIME ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int codel_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... etf delta NANOS clockid CLOCKID [offload] [deadline_mode]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "CLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
"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)
|
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)
|
static void explain_clockid(const char *val)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "etf: illegal value for \"clockid\": \"%s\".\n", val);
|
fprintf(stderr,
|
||||||
fprintf(stderr, "It must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
"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)
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... fq [ limit PACKETS ] [ flow_limit PACKETS ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ quantum BYTES ] [ initial_quantum BYTES ]\n");
|
"Usage: ... fq [ limit PACKETS ] [ flow_limit PACKETS ]\n"
|
||||||
fprintf(stderr, " [ maxrate RATE ] [ buckets NUMBER ]\n");
|
" [ quantum BYTES ] [ initial_quantum BYTES ]\n"
|
||||||
fprintf(stderr, " [ [no]pacing ] [ refill_delay TIME ]\n");
|
" [ maxrate RATE ] [ buckets NUMBER ]\n"
|
||||||
fprintf(stderr, " [ low_rate_threshold RATE ]\n");
|
" [ [no]pacing ] [ refill_delay TIME ]\n"
|
||||||
fprintf(stderr, " [ orphan_mask MASK]\n");
|
" [ low_rate_threshold RATE ]\n"
|
||||||
fprintf(stderr, " [ ce_threshold TIME ]\n");
|
" [ orphan_mask MASK]\n"
|
||||||
|
" [ ce_threshold TIME ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int ilog2(unsigned int val)
|
static unsigned int ilog2(unsigned int val)
|
||||||
|
@ -49,11 +49,12 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... fq_codel [ limit PACKETS ] [ flows NUMBER ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ memory_limit BYTES ]\n");
|
"Usage: ... fq_codel [ limit PACKETS ] [ flows NUMBER ]\n"
|
||||||
fprintf(stderr, " [ target TIME ] [ interval TIME ]\n");
|
"[ memory_limit BYTES ]\n"
|
||||||
fprintf(stderr, " [ quantum BYTES ] [ [no]ecn ]\n");
|
"[ target TIME ] [ interval TIME ]\n"
|
||||||
fprintf(stderr, " [ ce_threshold 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,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: tc qdisc { add | replace | change } ... gred setup vqs NUMBER\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " default DEFAULT_VQ [ grio ] [ limit BYTES ] [ecn] [harddrop]\n");
|
"Usage: tc qdisc { add | replace | change } ... gred setup vqs NUMBER\n"
|
||||||
fprintf(stderr, " tc qdisc change ... gred vq VQ [ prio VALUE ] limit BYTES\n");
|
" default DEFAULT_VQ [ grio ] [ limit BYTES ] [ecn] [harddrop]\n"
|
||||||
fprintf(stderr, " min BYTES max BYTES avpkt BYTES [ burst PACKETS ]\n");
|
" tc qdisc change ... gred vq VQ [ prio VALUE ] limit BYTES\n"
|
||||||
fprintf(stderr, " [ probability PROBABILITY ] [ bandwidth KBPS ] [ecn] [harddrop]\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,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... hhf [ limit PACKETS ] [ quantum BYTES]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ hh_limit NUMBER ]\n");
|
"Usage: ... hhf [ limit PACKETS ] [ quantum BYTES]\n"
|
||||||
fprintf(stderr, " [ reset_timeout TIME ]\n");
|
" [ hh_limit NUMBER ]\n"
|
||||||
fprintf(stderr, " [ admit_bytes BYTES ]\n");
|
" [ reset_timeout TIME ]\n"
|
||||||
fprintf(stderr, " [ evict_timeout TIME ]\n");
|
" [ admit_bytes BYTES ]\n"
|
||||||
fprintf(stderr, " [ non_hh_weight NUMBER ]\n");
|
" [ evict_timeout TIME ]\n"
|
||||||
|
" [ non_hh_weight NUMBER ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hhf_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
static int hhf_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
||||||
|
@ -23,13 +23,14 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [queues count1@offset1 count2@offset2 ...] ");
|
"Usage: ... mqprio [num_tc NUMBER] [map P0 P1 ...]\n"
|
||||||
fprintf(stderr, "[hw 1|0]\n");
|
" [queues count1@offset1 count2@offset2 ...] "
|
||||||
fprintf(stderr, " [mode dcb|channel]\n");
|
"[hw 1|0]\n"
|
||||||
fprintf(stderr, " [shaper bw_rlimit SHAPER_PARAMS]\n"
|
" [mode dcb|channel]\n"
|
||||||
|
" [shaper bw_rlimit SHAPER_PARAMS]\n"
|
||||||
"Where: SHAPER_PARAMS := { min_rate MIN_RATE1 MIN_RATE2 ...|\n"
|
"Where: SHAPER_PARAMS := { min_rate MIN_RATE1 MIN_RATE2 ...|\n"
|
||||||
" max_rate MAX_RATE1 MAX_RATE2 ... }\n");
|
" max_rate MAX_RATE1 MAX_RATE2 ... }\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mqprio_parse_opt(struct qdisc_util *qu, int argc,
|
static int mqprio_parse_opt(struct qdisc_util *qu, int argc,
|
||||||
|
32
tc/q_netem.c
32
tc/q_netem.c
@ -30,22 +30,22 @@
|
|||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: ... netem [ limit PACKETS ]\n" \
|
"Usage: ... netem [ limit PACKETS ]\n" \
|
||||||
" [ delay TIME [ JITTER [CORRELATION]]]\n" \
|
" [ delay TIME [ JITTER [CORRELATION]]]\n" \
|
||||||
" [ distribution {uniform|normal|pareto|paretonormal} ]\n" \
|
" [ distribution {uniform|normal|pareto|paretonormal} ]\n" \
|
||||||
" [ corrupt PERCENT [CORRELATION]]\n" \
|
" [ corrupt PERCENT [CORRELATION]]\n" \
|
||||||
" [ duplicate PERCENT [CORRELATION]]\n" \
|
" [ duplicate PERCENT [CORRELATION]]\n" \
|
||||||
" [ loss random PERCENT [CORRELATION]]\n" \
|
" [ loss random PERCENT [CORRELATION]]\n" \
|
||||||
" [ loss state P13 [P31 [P32 [P23 P14]]]\n" \
|
" [ loss state P13 [P31 [P32 [P23 P14]]]\n" \
|
||||||
" [ loss gemodel PERCENT [R [1-H [1-K]]]\n" \
|
" [ loss gemodel PERCENT [R [1-H [1-K]]]\n" \
|
||||||
" [ ecn ]\n" \
|
" [ ecn ]\n" \
|
||||||
" [ reorder PRECENT [CORRELATION] [ gap DISTANCE ]]\n" \
|
" [ reorder PRECENT [CORRELATION] [ gap DISTANCE ]]\n" \
|
||||||
" [ rate RATE [PACKETOVERHEAD] [CELLSIZE] [CELLOVERHEAD]]\n" \
|
" [ rate RATE [PACKETOVERHEAD] [CELLSIZE] [CELLOVERHEAD]]\n" \
|
||||||
" [ slot MIN_DELAY [MAX_DELAY] [packets MAX_PACKETS]" \
|
" [ slot MIN_DELAY [MAX_DELAY] [packets MAX_PACKETS]" \
|
||||||
" [bytes MAX_BYTES]]\n" \
|
" [bytes MAX_BYTES]]\n" \
|
||||||
" [ slot distribution" \
|
" [ slot distribution" \
|
||||||
" {uniform|normal|pareto|paretonormal|custom} DELAY JITTER" \
|
" {uniform|normal|pareto|paretonormal|custom} DELAY JITTER" \
|
||||||
" [packets MAX_PACKETS] [bytes MAX_BYTES]]\n");
|
" [packets MAX_PACKETS] [bytes MAX_BYTES]]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain1(const char *arg)
|
static void explain1(const char *arg)
|
||||||
|
@ -30,9 +30,10 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... pie [ limit PACKETS ][ target TIME us]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ tupdate TIME us][ alpha ALPHA ]");
|
"Usage: ... pie [ limit PACKETS ][ target TIME us]\n"
|
||||||
fprintf(stderr, "[beta BETA ][bytemode | nobytemode][ecn | noecn ]\n");
|
" [ tupdate TIME us][ alpha ALPHA ]"
|
||||||
|
"[beta BETA ][bytemode | nobytemode][ecn | noecn ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ALPHA_MAX 32
|
#define ALPHA_MAX 32
|
||||||
|
@ -27,9 +27,10 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... red limit BYTES [min BYTES] [max BYTES] avpkt BYTES [burst PACKETS]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [adaptive] [probability PROBABILITY] [bandwidth KBPS]\n");
|
"Usage: ... red limit BYTES [min BYTES] [max BYTES] avpkt BYTES [burst PACKETS]\n"
|
||||||
fprintf(stderr, " [ecn] [harddrop]\n");
|
" [adaptive] [probability PROBABILITY] [bandwidth KBPS]\n"
|
||||||
|
" [ecn] [harddrop]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv,
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... sfq [ limit NUMBER ] [ perturb SECS ] [ quantum BYTES ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ divisor NUMBER ] [ flows NUMBER] [ depth NUMBER ]\n");
|
"Usage: ... sfq [ limit NUMBER ] [ perturb SECS ] [ quantum BYTES ]\n"
|
||||||
fprintf(stderr, " [ headdrop ]\n");
|
" [ divisor NUMBER ] [ flows NUMBER] [ depth NUMBER ]\n"
|
||||||
fprintf(stderr, " [ redflowlimit BYTES ] [ min BYTES ] [ max BYTES ]\n");
|
" [ headdrop ]\n"
|
||||||
fprintf(stderr, " [ avpkt BYTES ] [ burst PACKETS ] [ probability P ]\n");
|
" [ redflowlimit BYTES ] [ min BYTES ] [ max BYTES ]\n"
|
||||||
fprintf(stderr, " [ ecn ] [ harddrop ]\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)
|
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)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... taprio clockid CLOCKID\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [num_tc NUMBER] [map P0 P1 ...] ");
|
"Usage: ... taprio clockid CLOCKID\n"
|
||||||
fprintf(stderr, " [queues COUNT@OFFSET COUNT@OFFSET COUNT@OFFSET ...] ");
|
" [num_tc NUMBER] [map P0 P1 ...] "
|
||||||
fprintf(stderr, " [ [sched-entry index cmd gate-mask interval] ... ] ");
|
" [queues COUNT@OFFSET COUNT@OFFSET COUNT@OFFSET ...] "
|
||||||
fprintf(stderr, " [base-time time] ");
|
" [ [sched-entry index cmd gate-mask interval] ... ] "
|
||||||
fprintf(stderr, "\nCLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)");
|
" [base-time time] "
|
||||||
fprintf(stderr, "\n");
|
"\n"
|
||||||
|
"CLOCKID must be a valid SYS-V id (i.e. CLOCK_TAI)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain_clockid(const char *val)
|
static void explain_clockid(const char *val)
|
||||||
|
@ -24,9 +24,10 @@
|
|||||||
|
|
||||||
static void explain(void)
|
static void explain(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ peakrate KBPS ] [ latency TIME ] ");
|
"Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS [ mtu BYTES[/BYTES] ]\n"
|
||||||
fprintf(stderr, "[ overhead BYTES ] [ linklayer TYPE ]\n");
|
" [ peakrate KBPS ] [ latency TIME ] "
|
||||||
|
"[ overhead BYTES ] [ linklayer TYPE ]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void explain1(const char *arg, const char *val)
|
static void explain1(const char *arg, const char *val)
|
||||||
|
12
tc/tc.c
12
tc/tc.c
@ -194,14 +194,14 @@ noexist:
|
|||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
"Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }\n"
|
||||||
" tc [-force] -batch filename\n"
|
" tc [-force] -batch filename\n"
|
||||||
"where OBJECT := { qdisc | class | filter | chain |\n"
|
"where OBJECT := { qdisc | class | filter | chain |\n"
|
||||||
" action | monitor | exec }\n"
|
" action | monitor | exec }\n"
|
||||||
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[aw] |\n"
|
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[aw] |\n"
|
||||||
" -o[neline] | -j[son] | -p[retty] | -c[olor]\n"
|
" -o[neline] | -j[son] | -p[retty] | -c[olor]\n"
|
||||||
" -b[atch] [filename] | -n[etns] name |\n"
|
" -b[atch] [filename] | -n[etns] name |\n"
|
||||||
" -nm | -nam[es] | { -cf | -conf } path }\n");
|
" -nm | -nam[es] | { -cf | -conf } path }\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_cmd(int argc, char **argv, void *buf, size_t buflen)
|
static int do_cmd(int argc, char **argv, void *buf, size_t buflen)
|
||||||
|
@ -43,14 +43,15 @@ static void usage(void);
|
|||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: tc class [ add | del | change | replace | show ] dev STRING\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ classid CLASSID ] [ root | parent CLASSID ]\n");
|
"Usage: tc class [ add | del | change | replace | show ] dev STRING\n"
|
||||||
fprintf(stderr, " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n");
|
" [ classid CLASSID ] [ root | parent CLASSID ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n"
|
||||||
fprintf(stderr, " tc class show [ dev STRING ] [ root | parent CLASSID ]\n");
|
"\n"
|
||||||
fprintf(stderr, "Where:\n");
|
" tc class show [ dev STRING ] [ root | parent CLASSID ]\n"
|
||||||
fprintf(stderr, "QDISC_KIND := { prio | cbq | etc. }\n");
|
"Where:\n"
|
||||||
fprintf(stderr, "OPTIONS := ... try tc class add <desired QDISC_KIND> help\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)
|
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)
|
static void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: tc exec [ EXEC_TYPE ] [ help | OPTIONS ]\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, "Where:\n");
|
"Usage: tc exec [ EXEC_TYPE ] [ help | OPTIONS ]\n"
|
||||||
fprintf(stderr, "EXEC_TYPE := { bpf | etc. }\n");
|
"Where:\n"
|
||||||
fprintf(stderr, "OPTIONS := ... try tc exec <desired EXEC_KIND> help\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)
|
static int parse_noeopt(struct exec_util *eu, int argc, char **argv)
|
||||||
|
@ -27,18 +27,19 @@
|
|||||||
|
|
||||||
static int usage(void)
|
static int usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: tc qdisc [ add | del | replace | change | show ] dev STRING\n");
|
fprintf(stderr,
|
||||||
fprintf(stderr, " [ handle QHANDLE ] [ root | ingress | clsact | parent CLASSID ]\n");
|
"Usage: tc qdisc [ add | del | replace | change | show ] dev STRING\n"
|
||||||
fprintf(stderr, " [ estimator INTERVAL TIME_CONSTANT ]\n");
|
" [ handle QHANDLE ] [ root | ingress | clsact | parent CLASSID ]\n"
|
||||||
fprintf(stderr, " [ stab [ help | STAB_OPTIONS] ]\n");
|
" [ estimator INTERVAL TIME_CONSTANT ]\n"
|
||||||
fprintf(stderr, " [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ]\n");
|
" [ stab [ help | STAB_OPTIONS] ]\n"
|
||||||
fprintf(stderr, " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n");
|
" [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ]\n"
|
||||||
fprintf(stderr, "\n");
|
" [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n"
|
||||||
fprintf(stderr, " tc qdisc show [ dev STRING ] [ ingress | clsact ] [ invisible ]\n");
|
"\n"
|
||||||
fprintf(stderr, "Where:\n");
|
" tc qdisc show [ dev STRING ] [ ingress | clsact ] [ invisible ]\n"
|
||||||
fprintf(stderr, "QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n");
|
"Where:\n"
|
||||||
fprintf(stderr, "OPTIONS := ... try tc qdisc add <desired QDISC_KIND> help\n");
|
"QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n"
|
||||||
fprintf(stderr, "STAB_OPTIONS := ... try tc qdisc add stab help\n");
|
"OPTIONS := ... try tc qdisc add <desired QDISC_KIND> help\n"
|
||||||
|
"STAB_OPTIONS := ... try tc qdisc add stab help\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,19 +40,19 @@ static void _print_bearer_opts(void)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"OPTIONS\n"
|
"OPTIONS\n"
|
||||||
" priority - Bearer link priority\n"
|
" priority - Bearer link priority\n"
|
||||||
" tolerance - Bearer link tolerance\n"
|
" tolerance - Bearer link tolerance\n"
|
||||||
" window - Bearer link window\n"
|
" window - Bearer link window\n"
|
||||||
" mtu - Bearer link mtu\n");
|
" mtu - Bearer link mtu\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_bearer_media(void)
|
void print_bearer_media(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\nMEDIA\n"
|
"\nMEDIA\n"
|
||||||
" udp - User Datagram Protocol\n"
|
" udp - User Datagram Protocol\n"
|
||||||
" ib - Infiniband\n"
|
" ib - Infiniband\n"
|
||||||
" eth - Ethernet\n");
|
" eth - Ethernet\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmd_bearer_enable_l2_help(struct cmdl *cmdl, char *media)
|
static void cmd_bearer_enable_l2_help(struct cmdl *cmdl, char *media)
|
||||||
@ -60,25 +60,23 @@ static void cmd_bearer_enable_l2_help(struct cmdl *cmdl, char *media)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: %s bearer enable media %s device DEVICE [OPTIONS]\n"
|
"Usage: %s bearer enable media %s device DEVICE [OPTIONS]\n"
|
||||||
"\nOPTIONS\n"
|
"\nOPTIONS\n"
|
||||||
" domain DOMAIN - Discovery domain\n"
|
" domain DOMAIN - Discovery domain\n"
|
||||||
" priority PRIORITY - Bearer priority\n",
|
" priority PRIORITY - Bearer priority\n",
|
||||||
cmdl->argv[0], media);
|
cmdl->argv[0], media);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmd_bearer_enable_udp_help(struct cmdl *cmdl, char *media)
|
static void cmd_bearer_enable_udp_help(struct cmdl *cmdl, char *media)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: %s bearer enable [OPTIONS] media %s name NAME localip IP [UDP OPTIONS]\n\n",
|
"Usage: %s bearer enable [OPTIONS] media %s name NAME localip IP [UDP OPTIONS]\n\n"
|
||||||
cmdl->argv[0], media);
|
|
||||||
fprintf(stderr,
|
|
||||||
"OPTIONS\n"
|
"OPTIONS\n"
|
||||||
" domain DOMAIN - Discovery domain\n"
|
" domain DOMAIN - Discovery domain\n"
|
||||||
" priority PRIORITY - Bearer priority\n\n");
|
" priority PRIORITY - Bearer priority\n\n"
|
||||||
fprintf(stderr,
|
|
||||||
"UDP OPTIONS\n"
|
"UDP OPTIONS\n"
|
||||||
" localport PORT - Local UDP port (default 6118)\n"
|
" localport PORT - Local UDP port (default 6118)\n"
|
||||||
" remoteip IP - Remote IP address\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)
|
static int get_netid_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
@ -996,11 +994,11 @@ void cmd_bearer_help(struct cmdl *cmdl)
|
|||||||
"\n"
|
"\n"
|
||||||
"COMMANDS\n"
|
"COMMANDS\n"
|
||||||
" add - Add data to existing bearer\n"
|
" add - Add data to existing bearer\n"
|
||||||
" enable - Enable a bearer\n"
|
" enable - Enable a bearer\n"
|
||||||
" disable - Disable a bearer\n"
|
" disable - Disable a bearer\n"
|
||||||
" set - Set various bearer properties\n"
|
" set - Set various bearer properties\n"
|
||||||
" get - Get various bearer properties\n"
|
" get - Get various bearer properties\n"
|
||||||
" list - List bearers\n", cmdl->argv[0]);
|
" list - List bearers\n", cmdl->argv[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmd_bearer(struct nlmsghdr *nlh, const struct cmd *cmd, struct cmdl *cmdl,
|
int cmd_bearer(struct nlmsghdr *nlh, const struct cmd *cmd, struct cmdl *cmdl,
|
||||||
|
Loading…
Reference in New Issue
Block a user