Skip to content

Commit 8589eb4

Browse files
teknoraverdsahern
authored andcommitted
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>
1 parent 2cc9b5f commit 8589eb4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1066
-1022
lines changed

bridge/link.c

+18-17
Original file line numberDiff line numberDiff line change
@@ -254,23 +254,24 @@ int print_linkinfo(struct nlmsghdr *n, void *arg)
254254

255255
static void usage(void)
256256
{
257-
fprintf(stderr, "Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n");
258-
fprintf(stderr, " [ guard {on | off} ]\n");
259-
fprintf(stderr, " [ hairpin {on | off} ]\n");
260-
fprintf(stderr, " [ fastleave {on | off} ]\n");
261-
fprintf(stderr, " [ root_block {on | off} ]\n");
262-
fprintf(stderr, " [ learning {on | off} ]\n");
263-
fprintf(stderr, " [ learning_sync {on | off} ]\n");
264-
fprintf(stderr, " [ flood {on | off} ]\n");
265-
fprintf(stderr, " [ mcast_flood {on | off} ]\n");
266-
fprintf(stderr, " [ mcast_to_unicast {on | off} ]\n");
267-
fprintf(stderr, " [ neigh_suppress {on | off} ]\n");
268-
fprintf(stderr, " [ vlan_tunnel {on | off} ]\n");
269-
fprintf(stderr, " [ isolated {on | off} ]\n");
270-
fprintf(stderr, " [ hwmode {vepa | veb} ]\n");
271-
fprintf(stderr, " [ backup_port DEVICE ] [ nobackup_port ]\n");
272-
fprintf(stderr, " [ self ] [ master ]\n");
273-
fprintf(stderr, " bridge link show [dev DEV]\n");
257+
fprintf(stderr,
258+
"Usage: bridge link set dev DEV [ cost COST ] [ priority PRIO ] [ state STATE ]\n"
259+
" [ guard {on | off} ]\n"
260+
" [ hairpin {on | off} ]\n"
261+
" [ fastleave {on | off} ]\n"
262+
" [ root_block {on | off} ]\n"
263+
" [ learning {on | off} ]\n"
264+
" [ learning_sync {on | off} ]\n"
265+
" [ flood {on | off} ]\n"
266+
" [ mcast_flood {on | off} ]\n"
267+
" [ mcast_to_unicast {on | off} ]\n"
268+
" [ neigh_suppress {on | off} ]\n"
269+
" [ vlan_tunnel {on | off} ]\n"
270+
" [ isolated {on | off} ]\n"
271+
" [ hwmode {vepa | veb} ]\n"
272+
" [ backup_port DEVICE ] [ nobackup_port ]\n"
273+
" [ self ] [ master ]\n"
274+
" bridge link show [dev DEV]\n");
274275
exit(-1);
275276
}
276277

bridge/mdb.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ static unsigned int filter_index, filter_vlan;
3030

3131
static void usage(void)
3232
{
33-
fprintf(stderr, "Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp] [vid VID]\n");
34-
fprintf(stderr, " bridge mdb {show} [ dev DEV ] [ vid VID ]\n");
33+
fprintf(stderr,
34+
"Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp] [vid VID]\n"
35+
" bridge mdb {show} [ dev DEV ] [ vid VID ]\n");
3536
exit(-1);
3637
}
3738

ip/ip.c

+13-13
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ static void usage(void) __attribute__((noreturn));
4545
static void usage(void)
4646
{
4747
fprintf(stderr,
48-
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
49-
" ip [ -force ] -batch filename\n"
50-
"where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |\n"
51-
" tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |\n"
52-
" netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |\n"
53-
" vrf | sr }\n"
54-
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
55-
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
56-
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
57-
" -4 | -6 | -I | -D | -M | -B | -0 |\n"
58-
" -l[oops] { maximum-addr-flush-attempts } | -br[ief] |\n"
59-
" -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |\n"
60-
" -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}\n");
48+
"Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n"
49+
" ip [ -force ] -batch filename\n"
50+
"where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |\n"
51+
" tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |\n"
52+
" netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |\n"
53+
" vrf | sr }\n"
54+
" OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |\n"
55+
" -h[uman-readable] | -iec | -j[son] | -p[retty] |\n"
56+
" -f[amily] { inet | inet6 | mpls | bridge | link } |\n"
57+
" -4 | -6 | -I | -D | -M | -B | -0 |\n"
58+
" -l[oops] { maximum-addr-flush-attempts } | -br[ief] |\n"
59+
" -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |\n"
60+
" -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}\n");
6161
exit(-1);
6262
}
6363

ip/ip6tunnel.c

+18-17
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,25 @@ static void usage(void) __attribute__((noreturn));
4646

4747
static void usage(void)
4848
{
49-
fprintf(stderr, "Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n");
50-
fprintf(stderr, " [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n");
51-
fprintf(stderr, " [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n");
52-
fprintf(stderr, " [ encaplimit ELIM ]\n");
53-
fprintf(stderr, " [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n");
54-
fprintf(stderr, " [ dscp inherit ]\n");
55-
fprintf(stderr, " [ [no]allow-localremote ]\n");
56-
fprintf(stderr, " [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n");
57-
fprintf(stderr, "\n");
58-
fprintf(stderr, "Where: NAME := STRING\n");
59-
fprintf(stderr, " ADDR := IPV6_ADDRESS\n");
60-
fprintf(stderr, " ELIM := { none | 0..255 }(default=%d)\n",
61-
IPV6_DEFAULT_TNL_ENCAP_LIMIT);
62-
fprintf(stderr, " TTL := 0..255 (default=%d)\n",
49+
fprintf(stderr,
50+
"Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]\n"
51+
" [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]\n"
52+
" [ remote ADDR local ADDR ] [ dev PHYS_DEV ]\n"
53+
" [ encaplimit ELIM ]\n"
54+
" [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]\n"
55+
" [ dscp inherit ]\n"
56+
" [ [no]allow-localremote ]\n"
57+
" [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]\n"
58+
"\n"
59+
"Where: NAME := STRING\n"
60+
" ADDR := IPV6_ADDRESS\n"
61+
" ELIM := { none | 0..255 }(default=%d)\n"
62+
" TTL := 0..255 (default=%d)\n"
63+
" TCLASS := { 0x0..0xff | inherit }\n"
64+
" FLOWLABEL := { 0x0..0xfffff | inherit }\n"
65+
" KEY := { DOTTED_QUAD | NUMBER }\n",
66+
IPV6_DEFAULT_TNL_ENCAP_LIMIT,
6367
DEFAULT_TNL_HOP_LIMIT);
64-
fprintf(stderr, " TCLASS := { 0x0..0xff | inherit }\n");
65-
fprintf(stderr, " FLOWLABEL := { 0x0..0xfffff | inherit }\n");
66-
fprintf(stderr, " KEY := { DOTTED_QUAD | NUMBER }\n");
6768
exit(-1);
6869
}
6970

ip/ipaddress.c

+27-26
Original file line numberDiff line numberDiff line change
@@ -52,32 +52,33 @@ static void usage(void)
5252
if (do_link)
5353
iplink_usage();
5454

55-
fprintf(stderr, "Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n");
56-
fprintf(stderr, " [ CONFFLAG-LIST ]\n");
57-
fprintf(stderr, " ip address del IFADDR dev IFNAME [mngtmpaddr]\n");
58-
fprintf(stderr, " ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n");
59-
fprintf(stderr, " [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n");
60-
fprintf(stderr, " ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n");
61-
fprintf(stderr, " [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n");
62-
fprintf(stderr, " [ label LABEL ] [up] [ vrf NAME ] ]\n");
63-
fprintf(stderr, " ip address {showdump|restore}\n");
64-
fprintf(stderr, "IFADDR := PREFIX | ADDR peer PREFIX\n");
65-
fprintf(stderr, " [ broadcast ADDR ] [ anycast ADDR ]\n");
66-
fprintf(stderr, " [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n");
67-
fprintf(stderr, "SCOPE-ID := [ host | link | global | NUMBER ]\n");
68-
fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n");
69-
fprintf(stderr, "FLAG := [ permanent | dynamic | secondary | primary |\n");
70-
fprintf(stderr, " [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n");
71-
fprintf(stderr, " CONFFLAG-LIST ]\n");
72-
fprintf(stderr, "CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n");
73-
fprintf(stderr, "CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n");
74-
fprintf(stderr, "LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n");
75-
fprintf(stderr, "LFT := forever | SECONDS\n");
76-
fprintf(stderr, "TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n");
77-
fprintf(stderr, " bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n");
78-
fprintf(stderr, " gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n");
79-
fprintf(stderr, " nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n");
80-
fprintf(stderr, " hsr | macsec | netdevsim }\n");
55+
fprintf(stderr,
56+
"Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]\n"
57+
" [ CONFFLAG-LIST ]\n"
58+
" ip address del IFADDR dev IFNAME [mngtmpaddr]\n"
59+
" ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]\n"
60+
" [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]\n"
61+
" ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]\n"
62+
" [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]\n"
63+
" [ label LABEL ] [up] [ vrf NAME ] ]\n"
64+
" ip address {showdump|restore}\n"
65+
"IFADDR := PREFIX | ADDR peer PREFIX\n"
66+
" [ broadcast ADDR ] [ anycast ADDR ]\n"
67+
" [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n"
68+
"SCOPE-ID := [ host | link | global | NUMBER ]\n"
69+
"FLAG-LIST := [ FLAG-LIST ] FLAG\n"
70+
"FLAG := [ permanent | dynamic | secondary | primary |\n"
71+
" [-]tentative | [-]deprecated | [-]dadfailed | temporary |\n"
72+
" CONFFLAG-LIST ]\n"
73+
"CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG\n"
74+
"CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]\n"
75+
"LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]\n"
76+
"LFT := forever | SECONDS\n"
77+
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
78+
" bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n"
79+
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n"
80+
" nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n"
81+
" hsr | macsec | netdevsim }\n");
8182

8283
exit(-1);
8384
}

ip/ipaddrlabel.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ static void usage(void) __attribute__((noreturn));
4949

5050
static void usage(void)
5151
{
52-
fprintf(stderr, "Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n");
53-
fprintf(stderr, " ip addrlabel [ list | flush | help ]\n");
52+
fprintf(stderr,
53+
"Usage: ip addrlabel { add | del } prefix PREFIX [ dev DEV ] [ label LABEL ]\n"
54+
" ip addrlabel [ list | flush | help ]\n");
5455
exit(-1);
5556
}
5657

ip/ipila.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
static void usage(void)
2929
{
3030
fprintf(stderr,
31-
"Usage: ip ila add loc_match LOCATOR_MATCH loc LOCATOR [ dev DEV ] OPTIONS\n"
32-
" ip ila del loc_match LOCATOR_MATCH [ loc LOCATOR ] [ dev DEV ]\n"
33-
" ip ila list\n"
34-
"OPTIONS := [ csum-mode { adj-transport | neutral-map | neutral-map-auto | no-action } ]\n"
35-
" [ ident-type { luid | use-format } ]\n");
31+
"Usage: ip ila add loc_match LOCATOR_MATCH loc LOCATOR [ dev DEV ] OPTIONS\n"
32+
" ip ila del loc_match LOCATOR_MATCH [ loc LOCATOR ] [ dev DEV ]\n"
33+
" ip ila list\n"
34+
"OPTIONS := [ csum-mode { adj-transport | neutral-map | neutral-map-auto | no-action } ]\n"
35+
" [ ident-type { luid | use-format } ]\n");
3636

3737
exit(-1);
3838
}

ip/iplink.c

+54-53
Original file line numberDiff line numberDiff line change
@@ -54,75 +54,76 @@ void iplink_usage(void)
5454
if (iplink_have_newlink()) {
5555
fprintf(stderr,
5656
"Usage: ip link add [link DEV] [ name ] NAME\n"
57-
" [ txqueuelen PACKETS ]\n"
58-
" [ address LLADDR ]\n"
59-
" [ broadcast LLADDR ]\n"
60-
" [ mtu MTU ] [index IDX ]\n"
61-
" [ numtxqueues QUEUE_COUNT ]\n"
62-
" [ numrxqueues QUEUE_COUNT ]\n"
63-
" type TYPE [ ARGS ]\n"
57+
" [ txqueuelen PACKETS ]\n"
58+
" [ address LLADDR ]\n"
59+
" [ broadcast LLADDR ]\n"
60+
" [ mtu MTU ] [index IDX ]\n"
61+
" [ numtxqueues QUEUE_COUNT ]\n"
62+
" [ numrxqueues QUEUE_COUNT ]\n"
63+
" type TYPE [ ARGS ]\n"
6464
"\n"
65-
" ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]\n"
65+
" ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]\n"
6666
"\n"
67-
" ip link set { DEVICE | dev DEVICE | group DEVGROUP }\n"
68-
" [ { up | down } ]\n"
69-
" [ type TYPE ARGS ]\n");
67+
" ip link set { DEVICE | dev DEVICE | group DEVGROUP }\n"
68+
" [ { up | down } ]\n"
69+
" [ type TYPE ARGS ]\n");
7070
} else
7171
fprintf(stderr,
7272
"Usage: ip link set DEVICE [ { up | down } ]\n");
7373

7474
fprintf(stderr,
75-
" [ arp { on | off } ]\n"
76-
" [ dynamic { on | off } ]\n"
77-
" [ multicast { on | off } ]\n"
78-
" [ allmulticast { on | off } ]\n"
79-
" [ promisc { on | off } ]\n"
80-
" [ trailers { on | off } ]\n"
81-
" [ carrier { on | off } ]\n"
82-
" [ txqueuelen PACKETS ]\n"
83-
" [ name NEWNAME ]\n"
84-
" [ address LLADDR ]\n"
85-
" [ broadcast LLADDR ]\n"
86-
" [ mtu MTU ]\n"
87-
" [ netns { PID | NAME } ]\n"
88-
" [ link-netns NAME | link-netnsid ID ]\n"
89-
" [ alias NAME ]\n"
90-
" [ vf NUM [ mac LLADDR ]\n"
91-
" [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]\n"
92-
" [ rate TXRATE ]\n"
93-
" [ max_tx_rate TXRATE ]\n"
94-
" [ min_tx_rate TXRATE ]\n"
95-
" [ spoofchk { on | off} ]\n"
96-
" [ query_rss { on | off} ]\n"
97-
" [ state { auto | enable | disable} ] ]\n"
98-
" [ trust { on | off} ] ]\n"
99-
" [ node_guid { eui64 } ]\n"
100-
" [ port_guid { eui64 } ]\n"
101-
" [ { xdp | xdpgeneric | xdpdrv | xdpoffload } { off |\n"
75+
" [ arp { on | off } ]\n"
76+
" [ dynamic { on | off } ]\n"
77+
" [ multicast { on | off } ]\n"
78+
" [ allmulticast { on | off } ]\n"
79+
" [ promisc { on | off } ]\n"
80+
" [ trailers { on | off } ]\n"
81+
" [ carrier { on | off } ]\n"
82+
" [ txqueuelen PACKETS ]\n"
83+
" [ name NEWNAME ]\n"
84+
" [ address LLADDR ]\n"
85+
" [ broadcast LLADDR ]\n"
86+
" [ mtu MTU ]\n"
87+
" [ netns { PID | NAME } ]\n"
88+
" [ link-netns NAME | link-netnsid ID ]\n"
89+
" [ alias NAME ]\n"
90+
" [ vf NUM [ mac LLADDR ]\n"
91+
" [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]\n"
92+
" [ rate TXRATE ]\n"
93+
" [ max_tx_rate TXRATE ]\n"
94+
" [ min_tx_rate TXRATE ]\n"
95+
" [ spoofchk { on | off} ]\n"
96+
" [ query_rss { on | off} ]\n"
97+
" [ state { auto | enable | disable} ] ]\n"
98+
" [ trust { on | off} ] ]\n"
99+
" [ node_guid { eui64 } ]\n"
100+
" [ port_guid { eui64 } ]\n"
101+
" [ { xdp | xdpgeneric | xdpdrv | xdpoffload } { off |\n"
102102
" object FILE [ section NAME ] [ verbose ] |\n"
103103
" pinned FILE } ]\n"
104-
" [ master DEVICE ][ vrf NAME ]\n"
105-
" [ nomaster ]\n"
106-
" [ addrgenmode { eui64 | none | stable_secret | random } ]\n"
107-
" [ protodown { on | off } ]\n"
108-
" [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
104+
" [ master DEVICE ][ vrf NAME ]\n"
105+
" [ nomaster ]\n"
106+
" [ addrgenmode { eui64 | none | stable_secret | random } ]\n"
107+
" [ protodown { on | off } ]\n"
108+
" [ gso_max_size BYTES ] | [ gso_max_segs PACKETS ]\n"
109109
"\n"
110-
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n");
111-
112-
fprintf(stderr, "\n ip link xstats type TYPE [ ARGS ]\n");
113-
fprintf(stderr, "\n ip link afstats [ dev DEVICE ]\n");
110+
" ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n"
111+
"\n"
112+
" ip link xstats type TYPE [ ARGS ]\n"
113+
"\n"
114+
" ip link afstats [ dev DEVICE ]\n");
114115

115116
if (iplink_have_newlink()) {
116117
fprintf(stderr,
117118
"\n"
118-
" ip link help [ TYPE ]\n"
119+
" ip link help [ TYPE ]\n"
119120
"\n"
120121
"TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |\n"
121-
" bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |\n"
122-
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |\n"
123-
" vti | nlmon | team_slave | bond_slave | bridge_slave |\n"
124-
" ipvlan | ipvtap | geneve | vrf | macsec | netdevsim | rmnet |\n"
125-
" xfrm }\n");
122+
" bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |\n"
123+
" gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |\n"
124+
" vti | nlmon | team_slave | bond_slave | bridge_slave |\n"
125+
" ipvlan | ipvtap | geneve | vrf | macsec | netdevsim | rmnet |\n"
126+
" xfrm }\n");
126127
}
127128
exit(-1);
128129
}

0 commit comments

Comments
 (0)