diff options
author | Ryo Nakamura <upa@haeena.net> | 2023-03-15 21:53:34 +0900 |
---|---|---|
committer | Ryo Nakamura <upa@haeena.net> | 2023-03-15 21:53:34 +0900 |
commit | a923d40adae082877dc7be577caeb23a2ab08d63 (patch) | |
tree | 7472debfd40981864ded14210dd32eb21ad718f0 | |
parent | 24fef5f53900da19d31c0b562447ffeff536c89a (diff) |
mscp: add -u max_startups option.
pymscp also accepts keyword 'max_startups' (int).
-rw-r--r-- | include/mscp.h | 2 | ||||
-rw-r--r-- | src/main.c | 12 | ||||
-rw-r--r-- | src/mscp.c | 11 | ||||
-rw-r--r-- | src/pymscp.c | 11 | ||||
-rw-r--r-- | test/test_python.py | 1 |
5 files changed, 28 insertions, 9 deletions
diff --git a/include/mscp.h b/include/mscp.h index 7d21ac1..aff28ce 100644 --- a/include/mscp.h +++ b/include/mscp.h @@ -43,7 +43,7 @@ struct mscp_opts { size_t max_chunk_sz; /** maximum chunk size (default file size/nr_threads) */ size_t buf_sz; /** buffer size, default 16k. */ char coremask[MSCP_MAX_COREMASK_STR]; /** hex to specifiy usable cpu cores */ - int max_startups; /* sshd MaxStartups conccurent connections */ + int max_startups; /* sshd MaxStartups concurrent connections */ int severity; /** messaging severity. set MSCP_SERVERITY_* */ int msg_fd; /** fd to output message. default STDOUT (0), @@ -24,7 +24,7 @@ void usage(bool print_help) { printf("mscp v" VERSION ": copy files over multiple ssh connections\n" "\n" - "Usage: mscp [vqDHdNh] [-n nr_conns] [-m coremask]\n" + "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] [-i identity_file]\n" " [-c cipher_spec] [-M hmac_spec] [-C compress] source ... target\n" @@ -36,6 +36,8 @@ void usage(bool print_help) { printf(" -n NR_CONNECTIONS number of connections " "(default: floor(log(cores)*2)+1)\n" " -m COREMASK hex value to specify cores where threads pinned\n" + " -u MAX_STARTUPS number of concurrent outgoing connections " + "(default: 8)\n" " -s MIN_CHUNK_SIZE min chunk size (default: 64MB)\n" " -S MAX_CHUNK_SIZE max chunk size (default: filesize/nr_conn)\n" "\n" @@ -52,7 +54,8 @@ void usage(bool print_help) { " -i IDENTITY identity file for public key authentication\n" " -c CIPHER cipher spec\n" " -M HMAC hmac spec\n" - " -C COMPRESS enable compression: yes, no, zlib, zlib@openssh.com\n" + " -C COMPRESS enable compression: " + "yes, no, zlib, zlib@openssh.com\n" " -H disable hostkey check\n" " -d increment ssh debug output level\n" " -N enable Nagle's algorithm (default disabled)\n" @@ -204,7 +207,7 @@ int main(int argc, char **argv) memset(&o, 0, sizeof(o)); o.severity = MSCP_SEVERITY_WARN; - while ((ch = getopt(argc, argv, "n:m:s:S:a:b:vqDrl:p:i:c:M:C:HdNh")) != -1) { + while ((ch = getopt(argc, argv, "n:m:u:s:S:a:b:vqDrl:p:i:c:M:C:HdNh")) != -1) { switch (ch) { case 'n': o.nr_threads = atoi(optarg); @@ -217,6 +220,9 @@ int main(int argc, char **argv) case 'm': strncpy(o.coremask, optarg, sizeof(o.coremask)); break; + case 'u': + o.max_startups = atoi(optarg); + break; case 's': o.min_chunk_sz = atoi(optarg); break; @@ -26,7 +26,7 @@ struct mscp { int *cores; /* usable cpu cores by COREMASK */ int nr_cores; /* length of array of cores */ - sem_t sem; /* semaphore for conccurent + sem_t sem; /* semaphore for concurrent * connecting ssh sessions */ sftp_session first; /* first sftp session */ @@ -193,6 +193,10 @@ static int validate_and_set_defaut_params(struct mscp_opts *o) if (o->max_startups == 0) o->max_startups = DEFAULT_MAX_STARTUPS; + else if (o->max_startups < 0) { + mscp_set_error("invalid max_startups: %d", o->max_startups); + return -1; + } if (o->msg_fd == 0) o->msg_fd = STDOUT_FILENO; @@ -219,8 +223,9 @@ struct mscp *mscp_init(const char *remote_host, int direction, mprint_set_severity(o->severity); - if (validate_and_set_defaut_params(o) < 0) - goto free_out; + if (validate_and_set_defaut_params(o) < 0) { + return NULL; + } m = malloc(sizeof(*m)); if (!m) { diff --git a/src/pymscp.c b/src/pymscp.c index 49bc85e..0a0642e 100644 --- a/src/pymscp.c +++ b/src/pymscp.c @@ -74,7 +74,7 @@ static int release_instance(struct instance *i) /* wrapper functions */ -static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw) +static PyObject *wrap_mscp_init(PyObject *self, PyObject *args, PyObject *kw) { /* * Initialize struct mscp with options. wrap_mscp_init @@ -89,10 +89,14 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw) /* mscp_opts */ "nr_threads", /* int */ "nr_ahead", /* int */ + "min_chunk_sz", /* unsigned long */ "max_chunk_sz", /* unsigned long */ "buf_sz", /* unsigned long */ + "coremask", /* const char * */ + + "max_startups", /* int */ "severity", /* int, MSCP_SERVERITY_* */ "msg_fd", /* int */ @@ -100,17 +104,19 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw) "login_name", /* const char * */ "port", /* const char * */ "identity", /* const char * */ + "cipher", /* const char * */ "hmac", /* const char * */ "compress", /* const char * */ "password", /* const char * */ "passphrase", /* const char * */ + "debug_level", /* int */ "no_hostkey_check", /* bool */ "enable_nagle", /* bool */ NULL, }; - const char *fmt = "si" "|iikkksii" "ssssssssipp"; + const char *fmt = "si" "|" "ii" "kkk" "s" "iii" "sss" "sssss" "ipp"; char *coremask = NULL; char *login_name = NULL, *port = NULL, *identity = NULL; char *cipher = NULL, *hmac = NULL, *compress = NULL; @@ -137,6 +143,7 @@ static PyObject *wrap_mscp_init(PyObject *sef, PyObject *args, PyObject *kw) &i->mo.max_chunk_sz, &i->mo.buf_sz, &coremask, + &i->mo.max_startups, &i->mo.severity, &i->mo.msg_fd, &login_name, diff --git a/test/test_python.py b/test/test_python.py index 3038b76..3ac2a6e 100644 --- a/test/test_python.py +++ b/test/test_python.py @@ -71,6 +71,7 @@ param_kwargs = [ { "min_chunk_sz": 1 * 1024 * 1024 }, { "max_chunk_sz": 64 * 1024 * 1024 }, { "coremask": "0x0f" }, + { "max_startups": 5 }, { "severity": mscp.SEVERITY_NONE }, { "cipher": "aes128-gcm@openssh.com" }, { "compress": "yes" }, |