Distributed Virtual Switch APIs
A DistributedVirtualSwitch managed object is a virtual network switch that is located on a vCenter Server.
A distributed virtual switch manages configuration for proxy switches (HostProxySwitch). A proxy switch is located on an ESXi host that is managed by the vCenter Server and is a member of the switch. A distributed switch also provides virtual port state management so that port state is maintained when vCenter Server operations move a virtual machine from one host to another.
A proxy switch performs network I/O to support the following network traffic and operations:
- Network traffic between virtual machines on any hosts that are members of the distributed virtual switch.
- Network traffic between virtual machines that uses a distributed switch and a virtual machine that uses a VMware standard switch.
- Network traffic between a virtual machine and a remote system on a physical network connected to the ESXi host.
- vSphere system operations to support capabilities such as VMotion or High Availability.
A DistributedVirtualSwitch is the base distributed switch implementation. It supports a VMware distributed virtual switch implementation and it supports third party distributed switch implementations. The base implementation provides the following capabilities (DVSFeatureCapability):
- NIC teaming
- Network I/O control
- Network resource allocation
- Quality of service tag support
- User-defined resource pools
- I/O passthrough (VMDirectPath Gen2)
A VmwareDistributedVirtualSwitch supports the following additional capabilities (DVSFeatureCapability and VMwareDVSFeatureCapability):
- Backup, restore, and rollback for a VMware distributed virtual switch and its associated portgroups.
- Maximum Transmission Unit (MTU) configuration.
- Health check operations for NIC teaming and VLAN/MTU support.
- Monitoring switch traffic using Internet Protocol Flow Information Export (IPFIX).
- Link Layer Discovery Protocol (LLDP).
- Virtual network segmentation using a Private VLAN (PVLAN).
- VLAN-based SPAN (VSPAN) for virtual distributed port mirroring.
- Link Aggregation Control Protocol (LACP) defined for uplink portgroups.
Distributed Virtual Switch Configuration
To use a distributed virtual switch, you create a switch and portgroups on a vCenter Server, and add hosts as members of the switch.
- Create a distributed virtual switch (Folder.CreateDVS_Task). Use a DVSConfigSpec to create a switch for a third-party implementation. Use a VMwareDVSConfigSpec to create a VMware distributed virtual switch. 
- Create portgroups (CreateDVPortgroup_Task) for host and virtual machine network connections and for the connection between proxy switches and physical NICs. A DistributedVirtualPortgroup specifies how virtual ports (DistributedVirtualPort) will be used. When you create a distributed virtual switch, the vCenter Server automatically creates one uplink portgroup (config.uplinkPortgroup). Uplink portgroups are distributed virtual portgroups that support the connection between proxy switches and physical NICs. - Port creation on a distributed switch is determined by the portgroup type (DVPortgroupConfigSpec.type): - If a portgroup is early binding (static), then
DVPortgroupConfigSpec.numPorts
determines the number of ports that get created when the portgroup is created.
This number can be increased if
DVPortgroupConfigSpec.autoExpand
is true.
- If a portgroup is ephemeral (dynamic), then numPorts is ignored and ports are created as needed.
 - You can also specify standalone ports that are not associated with a port group and uplink ports that are created on ESXi hosts (DVSConfigSpec.numStandalonePorts). - The DVPortgroupConfigInfo.numPorts property is the total number of ports for a distributed virtual switch. This total includes the ports generated by the static and dynamic portgroups and the standalone ports. 
- If a portgroup is early binding (static), then
DVPortgroupConfigSpec.numPorts
determines the number of ports that get created when the portgroup is created.
This number can be increased if
DVPortgroupConfigSpec.autoExpand
is 
- If you have created additional uplink portgroups, use the ReconfigureDvs_Task method to add the portgroup(s) to the DVSConfigSpec.uplinkPortgroup array. 
- Retrieve physical NIC device names from the host (HostSystem.config.network.pnic[].device). 
- Add host member(s) to the distributed virtual switch. To configure host members: - Specify hosts (DVSConfigSpec.host[]).
- For each host, specify one or more physical NIC device names to identify the pNIC(s) for the host proxy connection to the network (DistributedVirtualSwitchHostMemberConfigSpec.backing.pnicSpec[].pnicDevice)
- Use the DistributedVirtualSwitch.ReconfigureDvs_Task method to update the switch configuration.
 - When you add a host to a distributed virtual switch (DistributedVirtualSwitch.config.host), the host automatically creates a proxy switch. The proxy switch is removed automatically when the host is removed from the distributed virtual switch. 
- Connect hosts and virtual machines to the distributed virtual switch. - Host connection - Specify port or portgroup connections in the host virtual NIC spec ([HostVirtualNicSpec](../data-structures/HostVirtualNicSpec/).[distributedVirtualPort](../data-structures/HostVirtualNicSpec/) or [HostVirtualNicSpec](../data-structures/HostVirtualNicSpec/).[portgroup](../data-structures/HostVirtualNicSpec/)). - Virtual machine connection - Specify port or portgroup connections in the distributed virtual port backing ([VirtualEthernetCardDistributedVirtualPortBackingInfo](../data-structures/VirtualEthernetCardDistributedVirtualPortBackingInfo/)) for the virtual Ethernet cards on the virtual machine ([VirtualEthernetCard](../data-structures/VirtualEthernetCard/).[backing](../data-structures/VirtualDevice/)). 
Backup, Rollback, and Query Operations
If you are using a VmwareDistributedVirtualSwitch, you can perform backup and rollback operations on the switch and its associated distributed virtual portgroups. When you reconfigure a VMware distributed virtual switch (ReconfigureDvs_Task), the Server saves the current switch configuration before applying the configuration updates. The saved switch configuration includes portgroup configuration data. The Server uses the saved switch configuration as a checkpoint for rollback operations. You can rollback the switch or portgroup configuration to the saved configuration, or you can rollback to a backup configuration (EntityBackupConfig).
- To backup the switch and portgroup configuration, use the
DistributedVirtualSwitchManager.DVSManagerExportEntity_Task
method. The export method produces a
EntityBackupConfig object. The backup configuration
contains the switch and/or portgroups specified in the
SelectionSetparameter. To backup the complete configuration you must select the distributed virtual switch and all of its portgroups.
- To rollback the switch configuration, use the DVSRollback_Task method to determine if the switch configuration has changed. If it has changed, use the ReconfigureDvs_Task method to complete the rollback operation.
- To rollback the portgroup configuration, use the DistributedVirtualPortgroup.DVPortgroupRollback_Task method to determine if the portgroup configuration has changed. If it has changed, use the ReconfigureDVPortgroup_Task method to complete the rollback operation.
To perform query operations on a distributed virtual switch, use the DistributedVirtualSwitchManager methods.
