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 <sthemmin@microsoft.com>
This commit is contained in:
Stephen Hemminger 2017-12-01 11:52:34 -08:00
parent 5c6e3478ac
commit c2db423f7c
2 changed files with 31 additions and 1 deletions

View File

@ -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();

View File

@ -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.