/**
   * Updates the control block
   *
   * @param input system control block in patch format
   * @return Updated System Control Block
   *     <pre>
   *
   * Example:
   *
   * Request URL:
   * http://localhost:8080/controller/nb/v2/opendove/odmc/system
   *
   * Request body in JSON:
   * {
   *    "domain_separation": true
   * }
   *
   * Response body in JSON:
   * {
   *    "domain_separation": true,
   *    "snat_pool_size": 1,
   *    "egw_replication_factor": 1
   * }
   * </pre>
   */
  @PUT
  @Produces({MediaType.APPLICATION_JSON})
  @Consumes({MediaType.APPLICATION_JSON})
  @StatusCodes({
    @ResponseCode(code = 200, condition = "Operation successful"),
    @ResponseCode(code = 400, condition = "Bad Request"),
    @ResponseCode(code = 401, condition = "Unauthorized"),
    @ResponseCode(code = 501, condition = "Not Implemented")
  })
  public Response updateSubnet(final OpenDoveNeutronControlBlock input) {
    IfNBSystemRU systemInterface = OpenDoveNBInterfaces.getIfNBSystemRU("default", this);
    if (systemInterface == null) {
      throw new ServiceUnavailableException(
          "System RU Interface " + RestMessages.SERVICEUNAVAILABLE.toString());
    }

    // update network object and return the modified object
    systemInterface.updateControlBlock(input);
    return Response.status(200).entity(systemInterface.getSystemBlock()).build();
  }