diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 14 | ||||
-rw-r--r-- | src/pymscp.c | 8 | ||||
-rw-r--r-- | src/ssh.c | 6 |
3 files changed, 24 insertions, 4 deletions
@@ -21,7 +21,8 @@ void usage(bool print_help) { "Usage: mscp [vqDHdNh] [-n nr_conns] [-m coremask] [-u max_startups]\n" " [-s min_chunk_sz] [-S max_chunk_sz] [-a nr_ahead] [-b buf_sz]\n" " [-l login_name] [-p port] [-F ssh_config] [-i identity_file]\n" - " [-c cipher_spec] [-M hmac_spec] [-C compress] source ... target\n" + " [-c cipher_spec] [-M hmac_spec] [-C compress] [-g congestion]\n" + " source ... target\n" "\n"); if (!print_help) @@ -51,6 +52,7 @@ void usage(bool print_help) { " -M HMAC hmac spec\n" " -C COMPRESS enable compression: " "yes, no, zlib, zlib@openssh.com\n" + " -g CONGESTION specify TCP congestion control algorithm\n" " -H disable hostkey check\n" " -d increment ssh debug output level\n" " -N enable Nagle's algorithm (default disabled)\n" @@ -202,7 +204,8 @@ int main(int argc, char **argv) memset(&o, 0, sizeof(o)); o.severity = MSCP_SEVERITY_WARN; - while ((ch = getopt(argc, argv, "n:m:u:s:S:a:b:vqDrl:p:i:F:c:M:C:HdNh")) != -1) { + while ((ch = getopt(argc, argv, + "n:m:u:s:S:a:b:vqDrl:p:i:F:c:M:C:g:HdNh")) != -1) { switch (ch) { case 'n': o.nr_threads = atoi(optarg); @@ -287,6 +290,13 @@ int main(int argc, char **argv) } strncpy(s.compress, optarg, MSCP_SSH_MAX_COMP_STR); break; + case 'g': + if (strlen(optarg) > MSCP_SSH_MAX_CCALGO_STR - 1) { + fprintf(stderr, "long ccalgo string: %s\n", optarg); + return -1; + } + strncpy(s.ccalgo, optarg, MSCP_SSH_MAX_CCALGO_STR); + break; case 'H': s.no_hostkey_check = true; break; diff --git a/src/pymscp.c b/src/pymscp.c index c36c662..6861ad8 100644 --- a/src/pymscp.c +++ b/src/pymscp.c @@ -109,6 +109,7 @@ static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw) "cipher", /* const char * */ "hmac", /* const char * */ "compress", /* const char * */ + "ccalgo", /* const char * */ "password", /* const char * */ "passphrase", /* const char * */ @@ -117,10 +118,10 @@ static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw) "enable_nagle", /* bool */ NULL, }; - const char *fmt = "si" "|" "ii" "kkk" "s" "iii" "ssss" "sssss" "ipp"; + const char *fmt = "si" "|" "ii" "kkk" "s" "iii" "ssss" "ssssss" "ipp"; char *coremask = NULL; char *login_name = NULL, *port = NULL, *config = NULL, *identity = NULL; - char *cipher = NULL, *hmac = NULL, *compress = NULL; + char *cipher = NULL, *hmac = NULL, *compress = NULL, *ccalgo = NULL; char *password = NULL, *passphrase = NULL; struct instance *i; @@ -154,6 +155,7 @@ static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw) &cipher, &hmac, &compress, + &ccalgo, &password, &passphrase, &i->so.debug_level, @@ -179,6 +181,8 @@ static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw) strncpy(i->so.hmac, hmac, MSCP_SSH_MAX_HMAC_STR - 1); if (compress) strncpy(i->so.compress, compress, MSCP_SSH_MAX_COMP_STR - 1); + if (ccalgo) + strncpy(i->so.ccalgo, ccalgo, MSCP_SSH_MAX_CCALGO_STR - 1); if (password) strncpy(i->so.password, password, MSCP_SSH_MAX_PASSWORD - 1); if (passphrase) @@ -64,6 +64,12 @@ static int ssh_set_opts(ssh_session ssh, struct mscp_ssh_opts *opts) return -1; } + if (is_specified(opts->ccalgo) && + ssh_options_set(ssh, SSH_OPTIONS_CCALGO, opts->ccalgo) < 0) { + mscp_set_error("failed to set cclago"); + return -1; + } + /* if NOT specified to enable Nagle's algorithm, disable it (set TCP_NODELAY) */ if (!opts->enable_nagle) { int v = 1; |