aboutsummaryrefslogtreecommitdiffstats
path: root/rawshark.c
diff options
context:
space:
mode:
authorGianluca Borello <g.borello@gmail.com>2017-01-23 08:57:32 -0800
committerGerald Combs <gerald@wireshark.org>2017-02-02 16:11:00 +0000
commit47ad059bd78ecf94542293e8eb97aedcf5f808f8 (patch)
treed93b294c72240b38ebf18e905ced26237c7bf688 /rawshark.c
parentc0d25e8a5d093c448dde610873d216cf3d3fb060 (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.c24
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;