MAC learning provides network connectivity to deployments where multiple MAC addresses are used from one vNIC.

For example, in a nested hypervisor deployment where an ESXi VM runs on an ESXi host and multiple VMs run inside the ESXi VM. Without MAC learning, when the ESXi VM's vNIC connects to a switch port, it only contains a static MAC address. VMs running inside the ESXi VM do not have network connectivity because their packets have different source MAC addresses. With MAC learning, the vSwitch inspects the source MAC address of every packet coming from the vNIC, learns the MAC address in its MAC table, and allows the packet to pass. If a MAC address that is learned is not used for a certain period of time, it is removed.

MAC learning also supports unknown unicast flooding. Normally, when a packet that is received by a port has an unknown destination MAC address, the packet is dropped. With unknown unicast flooding enabled, the port floods unknown unicast traffic to every port on the switch that has MAC learning and unknown unicast flooding enabled. This property is enabled by default, but only if MAC learning is enabled.

The number of MAC addresses that can be learned is configurable. The maximum value is 4096 per port, which is the default. You can also set the policy for when the limit is reached. The options are:
  • Drop - Packets from an unknown source MAC address are dropped. Packets inbound to this MAC address will be treated as unknown unicast. The port will receive the packets only if it has unknown unicast flooding enabled.
  • Allow - Packets from an unknown source MAC address are forwarded although the address will not be learned. Packets inbound to this MAC address will be treated as unknown unicast. The port will receive the packets only if it has unknown unicast flooding enabled.

In vSphere 6.7 and later, MAC Learning can be enabled on a Distributed Virtual Port group using the vSphere API. You can configure the MAC Learning Policy on vSphere Distributed Switch, Distributed Virtual Port Group, and Distributed Virtual Port. If a MAC learning policy is not set on Distributed Virtual Port Group, it is inherited from vSphere Distributed Switch and if it is not enabled on the DVport, it is inherited from Distributed Virtual Port Group. See vSphere Web Services API Reference for more information.