From: Stephen Hemminger Date: Fri, 1 Dec 2017 19:52:34 +0000 (-0800) Subject: iplink: allow configuring GSO max values X-Git-Tag: v4.16.0~112 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2db423f7c5bdd5569590ead766b7202d1fa61f1;p=thirdparty%2Fiproute2.git iplink: allow configuring GSO max values This allows sending GSO maximum values when configuring a device. The values are advisory. Most devices will ignore them but for some pseudo devices such as veth pairs they can be set. Example: # ip link add dev vm1 type veth peer name vm2 gso_max_size 32768 Signed-off-by: Stephen Hemminger --- diff --git a/ip/iplink.c b/ip/iplink.c index 0a8eb56fb..6379b16a1 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -97,7 +97,8 @@ void iplink_usage(void) " [ master DEVICE ][ vrf NAME ]\n" " [ nomaster ]\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" "\n" " ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]\n"); @@ -848,6 +849,22 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, return on_off("protodown", *argv); addattr8(&req->n, sizeof(*req), IFLA_PROTO_DOWN, proto_down); + } else if (strcmp(*argv, "gso_max_size") == 0) { + unsigned int max_size; + + NEXT_ARG(); + if (get_unsigned(&max_size, *argv, 0) || max_size > UINT16_MAX) + invarg("Invalid \"gso_max_size\" value\n", + *argv); + addattr32(&req->n, sizeof(*req), IFLA_GSO_MAX_SIZE, max_size); + } else if (strcmp(*argv, "gso_max_segs") == 0) { + unsigned int max_segs; + + NEXT_ARG(); + if (get_unsigned(&max_segs, *argv, 0) || max_segs > UINT16_MAX) + invarg("Invalid \"gso_max_segs\" value\n", + *argv); + addattr32(&req->n, sizeof(*req), IFLA_GSO_MAX_SEGS, max_segs); } else { if (matches(*argv, "help") == 0) usage(); diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in index a6a10e577..0db2582e1 100644 --- a/man/man8/ip-link.8.in +++ b/man/man8/ip-link.8.in @@ -36,6 +36,11 @@ ip-link \- network device configuration .RB "[ " numrxqueues .IR QUEUE_COUNT " ]" .br +.BR "[" gso_max_size +.IR BYTES " ]" +.RB "[ " gso_max_segs +.IR SEGMENTS " ]" +.br .BI type " TYPE" .RI "[ " ARGS " ]" @@ -342,6 +347,14 @@ specifies the number of transmit queues for new device. .BI numrxqueues " QUEUE_COUNT " specifies the number of receive queues for new device. +.TP +.BI gso_max_size " BYTES " +specifies the recommended maximum size of a Generic Segment Offload packet the new device should accept. + +.TP +.BI gso_max_segs " SEGMENTS " +specifies the recommended maximum number of a Generic Segment Offload segments the new device should accept. + .TP .BI index " IDX " specifies the desired index of the new virtual device. The link creation fails, if the index is busy.