code: func (c *missVportConsumer) setVportUpcallPortId(vport VportID) error {
  	c.lock.Lock()
  	defer c.lock.Unlock()
  
  	if _, doneAlready := c.vportsDone[vport]; doneAlready {
  		return nil
  	}
  
  	if err := c.dp.setVportUpcallPortId(vport, c.upcallPortId); err != nil {
  		return err
  	}
  
  	c.vportsDone[vport] = struct{}{}
  	return nil
  }
docs: // Set a vport's upcall port ID.  This generates a OVS_VPORT_CMD_NEW
  // (not a OVS_VPORT_CMD_SET), leading to a call of the New method
  // below.  So we need to record which vports we already processed in
  // order to avoid a vicious circle.