Fixes #6444 - add support for virtual NICs

Is this not too global? If we have eth0, eth0_0, eth1, eth2 and eth2_0, then:

physicals => eth0, eth1, eth2
virtuals => eth0_0, eth2_0
primary => eth0

If eth1 becomes the new primary interface, eth2_0 will be renamed to (and clash with) eth0_0; both become eth1_0.