code: func (ipvs *Ipvs) Sync(state state.State) error {
  	start := time.Now()
  	defer func() {
  		log.Debugf("[ipvs] Sync took %v", time.Since(start))
  	}()
  
  	ipvs.Lock()
  	defer ipvs.Unlock()
  	log.Debug("[ipvs] Syncing")
  
  	stateSet := ipvs.getStateServicesSet(state)
  	currentSet, err := ipvs.getCurrentServicesSet()
  	if err != nil {
  		return err
  	}
  
  	rulesToAdd := stateSet.Difference(currentSet)
  	rulesToRemove := currentSet.Difference(stateSet)
  
  	// Adding services and destinations missing
  	for r := range rulesToAdd.Iter() {
  		service := r.(types.Service)
  		dsts := state.GetDestinations(&service)
  
  		if err := ipvs.addServiceAndDestinations(service, dsts); err != nil {
  			return err
  		}
  		log.Debugf("[ipvs] Added service: %#v with destinations: %#v", service, dsts)
  	}
  
  	// Cleaning rules
  	for r := range rulesToRemove.Iter() {
  		service := r.(types.Service)
  		err := ipvs.handler.DelService(ToIpvsService(&service))
  		if err != nil {
  			return err
  		}
  		log.Debugf("[ipvs] Removed service: %#v", service)
  	}
  
  	// Syncing destination rules
  	for _, s := range state.GetServices() {
  		if err := ipvs.syncDestinations(state, s); err != nil {
  			return err
  		}
  	}
  
  	return nil
  }
docs: // Sync syncs all ipvs rules present in state to kernel