Add PIF.properties field

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Add PIF.set_property

We'll add some constraints to this in the next patches.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Set PIF properties when creating a new PIF, depending on the type of PIF

The only property that we currently recognise is "gro", which by default has
the value "on".

GRO is a low-level property of a network interface, which applies to physical
PIFs, and to a bond as a collection of physical PIFs.

We therefore currently distinguish the following cases:
* A physical PIF gets the default properties when introduced.
* A bond PIF inherits the PIF properties from the primary slave.
* A VLAN or Tunnel PIF does not have properties. It is assumed to implicitly
  inherit the properties from the PIF it is based on.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Validate input to PIF.set_property

We currently only accept the "gro" property, which can be "on" of "off".

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Only allow PIF.properties to change on unbonded physical PIFs or bond PIFs

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
When creating a bond, all PIFs must have the same properties

And those properties will become the bond's properties.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
When changing PIF properties of a bond master, also update its slaves

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Add PIF.properties to the CLI

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Set default PIF properties on upgrade

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Translate PIF.properties to networkd config, and execute them

For the Linux bridge case, it is important that we set the ethtool params on
bond and VLAN devices for things to work well.

VLANs inherit the properties from the PIF they are based off. For bonds, the
properties of all slaves are the same as the master's.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Merge pull request #1591 from robhoes/gro

API to set GRO (and potentially other "properties") on PIFs