class Virtual implements Serializable {

  @Override
  public boolean equals(@Nullable Object obj) {
    if (this == obj) {
      return true;
    }
    if (!(obj instanceof Virtual)) {
      return false;
    }
    Virtual rhs = (Virtual) obj;
    return Objects.equals(_description, rhs._description)
        && Objects.equals(_destination, rhs._destination)
        && Objects.equals(_destinationPort, rhs._destinationPort)
        && Objects.equals(_disabled, rhs._disabled)
        && _ipForward == rhs._ipForward
        && Objects.equals(_ipProtocol, rhs._ipProtocol)
        && Objects.equals(_mask, rhs._mask)
        && Objects.equals(_mask6, rhs._mask6)
        && _name.equals(rhs._name)
        && Objects.equals(_pool, rhs._pool)
        && _reject == rhs._reject
        && Objects.equals(_source, rhs._source)
        && Objects.equals(_source6, rhs._source6)
        && Objects.equals(_sourceAddressTranslationPool, rhs._sourceAddressTranslationPool)
        && Objects.equals(_translateAddress, rhs._translateAddress)
        && Objects.equals(_translatePort, rhs._translatePort)
        && _vlans.equals(rhs._vlans)
        && _vlansEnabled == rhs._vlansEnabled;
  }

  private  Virtual(
      @Nullable String description,
      @Nullable String destination,
      @Nullable Integer destinationPort,
      @Nullable Boolean disabled,
      boolean ipForward,
      @Nullable IpProtocol ipProtocol,
      @Nullable Ip mask,
      @Nullable Ip6 mask6,
      String name,
      @Nullable String pool,
      boolean reject,
      @Nullable Prefix source,
      @Nullable Prefix6 source6,
      @Nullable String sourceAddressTranslationPool,
      @Nullable Boolean translateAddress,
      @Nullable Boolean translatePort,
      Set<String> vlans,
      boolean vlansEnabled);

}