diff --git a/main.c b/main.c index 1417296e..e2f87e70 100644 --- a/main.c +++ b/main.c @@ -99,6 +99,13 @@ enum sha256_algos { ALGO_SSE4_64, /* SSE4 for x86_64 */ }; +enum pool_strategy { + POOL_FAILOVER, + POOL_ROUNDROBIN, + POOL_ROTATE, + POOL_LOADBALANCE, +}; + static const char *algo_names[] = { [ALGO_C] = "c", #ifdef WANT_SSE2_4WAY @@ -184,6 +191,8 @@ static struct pool *pools = NULL; static struct pool *currentpool; static int pool_no; static int total_pools; +static enum pool_strategy pool_strategy = POOL_FAILOVER; +static int opt_rotate_period; static int total_urls, total_users, total_passes, total_userpasses; static bool curses_active = false; @@ -348,6 +357,24 @@ static char *set_devices(const char *arg, int *i) return NULL; } +static char *set_loadbalance(enum pool_strategy *strategy) +{ + *strategy = POOL_LOADBALANCE; + return NULL; +} + +static char *set_rotate(const char *arg, int *i) +{ + pool_strategy = POOL_ROTATE; + return set_int_range(arg, i, 0, 9999); +} + +static char *set_rr(enum pool_strategy *strategy) +{ + *strategy = POOL_ROUNDROBIN; + return NULL; +} + static char *set_url(const char *arg, char **p) { struct pool *pool; @@ -476,6 +503,9 @@ static struct opt_table opt_config_table[] = { forced_int_0_to_14, opt_show_intval, &scan_intensity, "Intensity of GPU scanning (0 - 14, default: dynamic to maintain desktop interactivity)"), #endif + OPT_WITHOUT_ARG("--load-balance", + set_loadbalance, &pool_strategy, + "Change multipool strategy from failover to even load balance"), OPT_WITH_ARG("--log|-l", set_int_0_to_9999, opt_show_intval, &opt_log_interval, "Interval in seconds between log output"), @@ -500,6 +530,12 @@ static struct opt_table opt_config_table[] = { OPT_WITH_ARG("--retry-pause|-R", set_int_0_to_9999, opt_show_intval, &opt_fail_pause, "Number of seconds to pause, between retries"), + OPT_WITH_ARG("--rotate", + set_rotate, opt_show_intval, &opt_rotate_period, + "Change multipool strategy from failover to regularly rotate at N minutes"), + OPT_WITHOUT_ARG("--round-robin", + set_rr, &pool_strategy, + "Change multipool strategy from failover to round robin on failure"), OPT_WITH_ARG("--scan-time|-s", set_int_0_to_9999, opt_show_intval, &opt_scantime, "Upper bound on time spent scanning current work, in seconds"),