Subports

An arbitrary amount (0, 1, 2, ...) of regular Neutron ports with segmentation details (ie. type and ID). May be provided when the trunk is created. Also may be attached or detached later during the trunk's (and the instance's) life.

Inside the instance a particular subport's network will be presented as tagged frames transmitted and received on the vNIC belonging to the parent port. The cloud user may control the tagging by setting the segmentation type and segmentation ID of the subport.

Networks of subports may become available later than the moment of bootup. But they will be available after the trunk reached the ACTIVE status.

The segmentation type and ID are decoupled (and therefore independent) from Neutron's network virtualization implementation. Different segmentation types will be remapped as frames leave/enter the instance.

For ports on provider networks you may choose the special segmentation type inherit. Then the subport's segmentation type and ID will be automagically inherited from the provider network's segmentation type and ID. This is useful when the switch is incapable of remapping (tag pop-push) for example as usual for Ironic instances.

The segmentation type, ID tuples of subports must be unique (in the scope of a trunk), otherwise networks of subports could not be distinguished inside the instance.

Note that most guest operating systems will not automatically configure and bring up the VLAN subinterfaces belonging to subports. You may have to do that yourself. For example:

  # eth0 belongs to the parent port
  # VLAN 101 was chosen for the subport
  sudo ip link add link eth0 \
       name eth0.101 \
       address "$subport_mac" \
       type vlan id 101
  sudo dhclient eth0.101

This can be simplified by reusing the parent's MAC address for all subports of the trunk earlier at port creation. Eg.:

  sudo ip link add link eth0 \
       name eth0.101 \
       type vlan id 101
  sudo dhclient eth0.101

Also note that segmentation details may be mandatory or optional depending on the backend. Notably Ironic may provide segmentation details instead of the user.

No subport can be the parent or a subport of any other trunks.