diff --git a/include/types.h b/include/types.h index 59b6080ff..fd28d04b9 100644 --- a/include/types.h +++ b/include/types.h @@ -115,6 +115,12 @@ typedef enum event_identifier EVENT_WEAK_HASH_PRE = 0x00000091, EVENT_WEAK_HASH_POST = 0x00000092, EVENT_SET_KERNEL_POWER_FINAL = 0x000000a1, + EVENT_MONITOR_THROTTLE1 = 0x000000b1, + EVENT_MONITOR_THROTTLE2 = 0x000000b2, + EVENT_MONITOR_THROTTLE3 = 0x000000b3, + EVENT_MONITOR_TEMP_ABORT = 0x000000c1, + EVENT_MONITOR_RUNTIME_LIMIT = 0x000000d1, + EVENT_MONITOR_STATUS_REFRESH = 0x000000e1, // there will be much more event types soon diff --git a/src/main.c b/src/main.c index 97e8e3120..0ba8ad4a4 100644 --- a/src/main.c +++ b/src/main.c @@ -540,6 +540,134 @@ static void main_set_kernel_power_final (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx send_prompt (); } +static void main_monitor_throttle1 (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if (user_options->quiet == true) return; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + clear_prompt (); + } + + u32 *device_id = (u32 *) buf; + + event_log_warning (hashcat_ctx, "Drivers temperature threshold hit on GPU #%d, expect performance to drop...", *device_id + 1); + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + send_prompt (); + } +} + +static void main_monitor_throttle2 (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if (user_options->quiet == true) return; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + clear_prompt (); + } + + u32 *device_id = (u32 *) buf; + + event_log_warning (hashcat_ctx, "Drivers temperature threshold hit on GPU #%d, expect performance to drop...", *device_id + 1); + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + send_prompt (); + } +} + +static void main_monitor_throttle3 (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if (user_options->quiet == true) return; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + clear_prompt (); + } + + u32 *device_id = (u32 *) buf; + + event_log_warning (hashcat_ctx, "Drivers temperature threshold hit on GPU #%d, expect performance to drop...", *device_id + 1); + event_log_warning (hashcat_ctx, ""); + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + send_prompt (); + } +} + +static void main_monitor_temp_abort (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if (user_options->quiet == true) return; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + clear_prompt (); + } + + u32 *device_id = (u32 *) buf; + + event_log_error (hashcat_ctx, "Temperature limit on GPU #%u reached, aborting...", *device_id + 1); +} + +static void main_monitor_runtime_limit (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if (user_options->quiet == true) return; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + clear_prompt (); + } + + event_log_warning (hashcat_ctx, "Runtime limit reached, aborting..."); +} + +static void main_monitor_status_refresh (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + if (user_options->quiet == false) + { + //clear_prompt (); + + event_log_info (hashcat_ctx, ""); + event_log_info (hashcat_ctx, ""); + } + } + + status_display (hashcat_ctx); + + if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK)) + { + if (user_options->quiet == false) + { + event_log_info (hashcat_ctx, ""); + + send_prompt (); + } + } +} + void event (const u32 id, hashcat_ctx_t *hashcat_ctx, const void *buf, const size_t len) { switch (id) @@ -568,6 +696,12 @@ void event (const u32 id, hashcat_ctx_t *hashcat_ctx, const void *buf, const siz case EVENT_WEAK_HASH_PRE: main_weak_hash_pre (hashcat_ctx, buf, len); break; case EVENT_WEAK_HASH_POST: main_weak_hash_post (hashcat_ctx, buf, len); break; case EVENT_SET_KERNEL_POWER_FINAL: main_set_kernel_power_final (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_THROTTLE1: main_monitor_throttle1 (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_THROTTLE2: main_monitor_throttle2 (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_THROTTLE3: main_monitor_throttle3 (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_TEMP_ABORT: main_monitor_temp_abort (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_RUNTIME_LIMIT: main_monitor_runtime_limit (hashcat_ctx, buf, len); break; + case EVENT_MONITOR_STATUS_REFRESH: main_monitor_status_refresh (hashcat_ctx, buf, len); break; } } diff --git a/src/monitor.c b/src/monitor.c index f52ded01b..1fe99ca73 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -12,8 +12,6 @@ #include "hashes.h" #include "thread.h" #include "restore.h" -#include "terminal.h" -#include "status.h" #include "shared.h" #include "monitor.h" @@ -131,21 +129,11 @@ static int monitor (hashcat_ctx_t *hashcat_ctx) if (rc_throttle > 0) { - if (slowdown_warnings < 3) - { - if (user_options->quiet == false) clear_prompt (); + slowdown_warnings++; - event_log_warning (hashcat_ctx, "Drivers temperature threshold hit on GPU #%d, expect performance to drop...", device_id + 1); - - if (slowdown_warnings == 2) - { - event_log_info (hashcat_ctx, ""); - } - - if (user_options->quiet == false) send_prompt (); - - slowdown_warnings++; - } + if (slowdown_warnings == 1) EVENT_DATA (EVENT_MONITOR_THROTTLE1, &device_id, sizeof (u32)); + if (slowdown_warnings == 2) EVENT_DATA (EVENT_MONITOR_THROTTLE2, &device_id, sizeof (u32)); + if (slowdown_warnings == 3) EVENT_DATA (EVENT_MONITOR_THROTTLE3, &device_id, sizeof (u32)); } else { @@ -180,13 +168,9 @@ static int monitor (hashcat_ctx_t *hashcat_ctx) if (temperature > (int) user_options->gpu_temp_abort) { - if (user_options->quiet == false) clear_prompt (); - - event_log_error (hashcat_ctx, "Temperature limit on GPU #%u reached, aborting...", device_id + 1); + EVENT_DATA (EVENT_MONITOR_TEMP_ABORT, &device_id, sizeof (u32)); myabort (hashcat_ctx); - - break; } const u32 gpu_temp_retain = user_options->gpu_temp_retain; @@ -281,12 +265,7 @@ static int monitor (hashcat_ctx_t *hashcat_ctx) if (runtime_left <= 0) { - if (user_options->benchmark == false) - { - if (user_options->quiet == false) clear_prompt (); - - if (user_options->quiet == false) event_log_info (hashcat_ctx, "NOTE: Runtime limit reached, aborting..."); - } + EVENT_DATA (EVENT_MONITOR_RUNTIME_LIMIT, NULL, 0); myabort (hashcat_ctx); } @@ -319,13 +298,7 @@ static int monitor (hashcat_ctx_t *hashcat_ctx) { hc_thread_mutex_lock (status_ctx->mux_display); - if (user_options->quiet == false) clear_prompt (); - - status_display (hashcat_ctx); - - if (user_options->quiet == false) event_log_info (hashcat_ctx, ""); - - if (user_options->quiet == false) send_prompt (); + EVENT_DATA (EVENT_MONITOR_STATUS_REFRESH, NULL, 0); hc_thread_mutex_unlock (status_ctx->mux_display);