diff options
author | Gianluca Borello <g.borello@gmail.com> | 2017-01-23 08:57:32 -0800 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2017-02-02 16:11:00 +0000 |
commit | 47ad059bd78ecf94542293e8eb97aedcf5f808f8 (patch) | |
tree | d93b294c72240b38ebf18e905ced26237c7bf688 /rawshark.c | |
parent | c0d25e8a5d093c448dde610873d216cf3d3fb060 (diff) |
Rawshark: Add a memory limit (-m) option.
Add an option to rawshark that lets the user set a maximum memory limit.
Change-Id: Ie102ee5f6ba5aec90a35bd63297184c7dc37662c
Reviewed-on: https://code.wireshark.org/review/19911
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'rawshark.c')
-rw-r--r-- | rawshark.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/rawshark.c b/rawshark.c index af607044ac..df4a7b360d 100644 --- a/rawshark.c +++ b/rawshark.c @@ -40,6 +40,11 @@ #include <locale.h> #include <limits.h> +#ifndef _WIN32 +#include <sys/time.h> +#include <sys/resource.h> +#endif + #ifdef HAVE_GETOPT_H #include <getopt.h> #endif @@ -191,6 +196,9 @@ print_usage(FILE *output) fprintf(output, " -d <encap:linktype>|<proto:protoname>\n"); fprintf(output, " packet encapsulation or protocol\n"); fprintf(output, " -F <field> field to display\n"); +#ifndef _WIN32 + fprintf(output, " -m virtual memory limit, in bytes \n"); +#endif fprintf(output, " -n disable all name resolution (def: all enabled)\n"); fprintf(output, " -N <name resolve flags> enable specific name resolution(s): \"mnNtd\"\n"); fprintf(output, " -p use the system's packet header format\n"); @@ -416,6 +424,8 @@ main(int argc, char *argv[]) #ifdef _WIN32 WSADATA wsaData; +#else + struct rlimit limit; #endif /* _WIN32 */ char *gpf_path, *pf_path; @@ -438,7 +448,7 @@ main(int argc, char *argv[]) {0, 0, 0, 0 } }; -#define OPTSTRING_INIT "d:F:hlnN:o:pr:R:sS:t:v" +#define OPTSTRING_INIT "d:F:hlm:nN:o:pr:R:sS:t:v" static const char optstring[] = OPTSTRING_INIT; @@ -632,6 +642,18 @@ main(int argc, char *argv[]) and the output buffer is only flushed when it fills up). */ line_buffered = TRUE; break; +#ifndef _WIN32 + case 'm': + limit.rlim_cur = get_positive_int(optarg, "memory limit"); + limit.rlim_max = get_positive_int(optarg, "memory limit"); + + if(setrlimit(RLIMIT_AS, &limit) != 0) + { + cmdarg_err("setrlimit() returned error"); + exit(1); + } + break; +#endif case 'n': /* No name resolution */ disable_name_resolution(); break; |