code: func (v *vserver) configureVIPs() {
  	ncc := v.engine.ncc
  	if err := ncc.Dial(); err != nil {
  		log.Fatalf("%v: failed to connect to NCC: %v", v, err)
  	}
  	defer ncc.Close()
  
  	// TODO(ncope): Return to iterating over v.services once they contain seesaw.VIPs.
  	for _, vip := range v.config.VIPs {
  		if _, ok := v.vips[*vip]; ok {
  			continue
  		}
  		// TODO(angusc): Set up anycast Vservers here as well (without bringing up the VIP).
  		if vip.Type == seesaw.AnycastVIP {
  			continue
  		}
  
  		// TODO(jsing): Create a ncc.LBVserver that only encapsulates
  		// the necessary state, rather than storing a full vserver
  		// snapshot.
  		lbVserver := v.snapshot()
  		lbVserver.Services = nil
  		lbVserver.Warnings = nil
  		if err := v.engine.lbInterface.AddVserver(lbVserver, vip.IP.AF()); err != nil {
  			log.Fatalf("%v: failed to add Vserver: %v", v, err)
  		}
  		v.lbVservers[vip.IP] = lbVserver
  
  		if err := v.engine.lbInterface.AddVIP(vip); err != nil {
  			log.Fatalf("%v: failed to add VIP %v: %v", v, vip.IP, err)
  		}
  		v.vips[*vip] = true
  	}
  }
docs: // configureVIPs configures VIPs on the load balancing interface.