One of the more frustrating things I deal with on OpenSolaris is that every time I reboot, I have to manually bring up each virtual network interface in order to start all of my zones. There is a bug report for this problem that says a fix will be integrated into b132, which is just a few weeks away, but in the mean time, I’ve whipped up an SMF service to handle this for me. Create a file vnic.xml:
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='vnic'>
<service
name='network/vnic'
type='service'
version='1'>
<dependency
name='network_service'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/service' />
</dependency>
<dependent
name='network_vnic'
grouping='optional_all'
restart_on='none'>
<service_fmri value='svc:/system/zones' />
</dependent>
<exec_method
type='method'
name='start'
exec='/usr/sbin/dladm up-vnic ${SMF_FMRI/*:/}'
timeout_seconds='60' />
<exec_method
type='method'
name='stop'
exec=':true'
timeout_seconds='60' />
<property_group name='startd' type='framework'>
<propval name='duration' type='astring' value='transient' />
</property_group>
<stability value='Unstable' />
<template>
<common_name>
<loctext xml:lang='C'>
Virtual Network Interface
</loctext>
</common_name>
<documentation>
<manpage title='dladm' section='1M'
manpath='/usr/share/man' />
</documentation>
</template>
</service>
</service_bundle>
This service should run sometime after the network is started but before the zones are started. Load it in with svccfg -v import vnic.xml and create an instance of the service for each of the VNICs that you want to start. For example, if you want to start vnic0 on boot:
# svccfg -s vnic add vnic0 # svcadm refresh vnic0 # svcadm enable vnic0
UPDATE: Build 132 is out an this functionality has been integrated as the svc:/network/datalink-management:default service. The services that were added above can be removed by running svccfg delete vnic.