code: func (v *vserver) snapshot() *seesaw.Vserver {
  	if v.config == nil {
  		return nil
  	}
  	sv := &seesaw.Vserver{
  		Name:    v.config.Name,
  		Entries: make([]*seesaw.VserverEntry, 0, len(v.config.Entries)),
  		Host: seesaw.Host{
  			Hostname: v.config.Hostname,
  			IPv4Addr: v.config.IPv4Addr,
  			IPv4Mask: v.config.IPv4Mask,
  			IPv6Addr: v.config.IPv6Addr,
  			IPv6Mask: v.config.IPv6Mask,
  		},
  		FWM:           make(map[seesaw.AF]uint32),
  		Services:      make(map[seesaw.ServiceKey]*seesaw.Service, len(v.services)),
  		OverrideState: v.vserverOverride.State(),
  		Enabled:       v.enabled,
  		ConfigEnabled: v.config.Enabled,
  		Warnings:      v.config.Warnings,
  	}
  	for _, ve := range v.config.Entries {
  		sv.Entries = append(sv.Entries, ve.Snapshot())
  	}
  	sv.FWM[seesaw.IPv4] = v.fwm[seesaw.IPv4]
  	sv.FWM[seesaw.IPv6] = v.fwm[seesaw.IPv6]
  	for _, s := range v.services {
  		ss := s.snapshot()
  		sv.Services[ss.ServiceKey] = ss
  	}
  	return sv
  }
docs: // snapshot exports the current running state of the vserver.