code: func (ncc *SeesawNCC) LBInterfaceAddVIP(vip *ncctypes.LBInterfaceVIP, out *int) error {
  	switch vip.Type {
  	case seesaw.UnicastVIP:
  		netIface, err := vip.Iface.Interface()
  		if err != nil {
  			return err
  		}
  		iface, network, err := selectInterfaceNetwork(netIface, vip.IP.IP())
  		if err != nil {
  			return fmt.Errorf("Failed to select interface and network for %v: %v", vip.VIP, err)
  		}
  		log.Infof("Adding VIP %s to %s", vip.IP.IP(), iface.Name)
  		if err := ifaceAddIPAddr(iface, vip.IP.IP(), network.Mask); err != nil {
  			return err
  		}
  		return routeLocal(iface, vip.IP.IP(), vip.Iface.Node)
  	case seesaw.AnycastVIP, seesaw.DedicatedVIP:
  		dummyIface, err := net.InterfaceByName(vip.Iface.DummyInterface)
  		if err != nil {
  			return fmt.Errorf("Failed to find dummy interface: %v", err)
  		}
  		prefixLen := net.IPv6len * 8
  		if vip.IP.IP().To4() != nil {
  			prefixLen = net.IPv4len * 8
  		}
  		mask := net.CIDRMask(prefixLen, prefixLen)
  		log.Infof("Adding VIP %s to %s", vip.IP.IP(), dummyIface.Name)
  		if err := ifaceAddIPAddr(dummyIface, vip.IP.IP(), mask); err != nil {
  			return err
  		}
  		return routeLocal(dummyIface, vip.IP.IP(), vip.Iface.Node)
  	default:
  		return fmt.Errorf("Unknown VIPType for %v: %v", vip.VIP, vip.Type)
  	}
  }
docs: // LBInterfaceAddVIP adds the specified VIP to the load balancing interface.