1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
Remove attempts to set arbitrary limits on stack-sizes for different
threads, which cause segfaults (due, presumably, to the limits being
too low).
-mi
--- src/defs.h 2010-09-27 19:02:01.000000000 -0400
+++ src/defs.h 2015-03-23 16:39:53.000000000 -0400
@@ -30,8 +30,2 @@
//#define FASTMODE_INTERVAL 250000000 // one quarter of a second
#define FASTMODE_INTERVAL 100000000 // one tenth of a second
-
-// stack sizes for the different threads
-#define SS_PB 2048 // PacketBuffer
-#define SS_S 4096 // Sniffer 2048 -> segfault on freebsd
-#define SS_TCC 4096 // TCContainer
-#define SS_TUI 5120 // TextUI. 4096 -> segfault on solaris
--- src/PacketBuffer.cc 2010-09-27 19:02:01.000000000 -0400
+++ src/PacketBuffer.cc 2015-03-23 16:23:36.000000000 -0400
@@ -53,14 +53,6 @@
// Start up maintenence thread
//
- pthread_attr_t attr;
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- // TODO: there is no man page for this call on linux. Not sure what it
- // may return. On some systems it may not be supported at all
- // (should return ENOSYS). Should be safe to ignore return val.
- pthread_attr_setstacksize( &attr, SS_PB );
- if( pthread_create(&maint_thread_tid,&attr,pbmaint_thread_func,this) != 0 )
+ if (pthread_create(&maint_thread_tid, NULL, pbmaint_thread_func, this) != 0)
throw GenericError("pthread_create() returned an error");
--- src/Sniffer.cc 2010-09-27 19:02:22.000000000 -0400
+++ src/Sniffer.cc 2015-03-23 16:25:10.000000000 -0400
@@ -55,5 +66,5 @@
}
-void Sniffer::init(char *iface, char *fexp, char *test_file)
+void Sniffer::init(const char *iface, const char *fexp, const char *test_file)
{
assert(pcap_initted==false);
@@ -89,6 +102,4 @@
// prepare the filter
//
- struct bpf_program filter; // the filter for the sniffer
- char *filter_app = fexp; // The filter expression
bpf_u_int32 mask; // The netmask of our sniffing device
bpf_u_int32 net; // The IP of our sniffing device
@@ -102,28 +113,23 @@
mask = 0;
}
- if( pcap_compile(handle, &filter, filter_app, 0, net) == -1 )
- {
- pcap_close(handle);
- throw PcapError("pcap_compile",pcap_geterr(handle));
- }
- if( pcap_setfilter(handle, &filter) ) // apply filter to sniffer
- {
- pcap_freecode(&filter);
- pcap_close(handle);
- throw PcapError("pcap_setfilter",pcap_geterr(handle));
+ if (fexp != NULL && fexp[0] != '\0') {
+ struct bpf_program filter; // the filter for the sniffer
+ if (pcap_compile(handle, &filter, fexp, 0, net) == -1)
+ {
+ pcap_close(handle);
+ throw PcapError("pcap_compile", pcap_geterr(handle));
+ }
+ if (pcap_setfilter(handle, &filter)) // apply filter to sniffer
+ {
+ pcap_freecode(&filter);
+ pcap_close(handle);
+ throw PcapError("pcap_setfilter", pcap_geterr(handle));
+ }
+ pcap_freecode(&filter); // filter code not needed after setfilter
}
- pcap_freecode(&filter); // filter code not needed after setfilter
-
- pcap_initted=true;
-
- pthread_attr_t attr;
-
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_S );
+ pcap_initted=true;
- if( pthread_create(&sniffer_tid,&attr,sniffer_thread_func,this) != 0 )
+ if (pthread_create(&sniffer_tid, NULL, sniffer_thread_func, this) != 0)
throw GenericError("pthread_create() failed.");
@@ -163,9 +170,11 @@
void Sniffer::processPacket( const pcap_pkthdr *header, const u_char *packet )
{
- assert( pthread_mutex_lock(&pb_mutex)==0 );
+
+ if (pthread_mutex_lock(&pb_mutex) != 0)
+ return;
if( pb==NULL )
{
- assert( pthread_mutex_unlock(&pb_mutex) == 0 );
+ pthread_mutex_unlock(&pb_mutex);
return;
}
@@ -193,5 +202,5 @@
pb->pushPacket(n);
- assert( pthread_mutex_unlock(&pb_mutex) == 0 );
+ pthread_mutex_unlock(&pb_mutex);
}
--- src/Sniffer.h 2010-09-27 19:02:22.000000000 -0400
+++ src/Sniffer.h 2015-03-23 15:07:57.000000000 -0400
@@ -43,5 +43,5 @@
// init performs some constructor-like activity. It is separate
// so that exceptions don't have to be thrown in the constructor.
- void init(char *iface, char *fexp, char *test_file);
+ void init(const char *iface, const char *fexp, const char *test_file);
// set the place where sniffed packets are sent for further
--- src/TCContainer.cc 2010-09-27 19:02:01.000000000 -0400
+++ src/TCContainer.cc 2015-03-23 16:23:05.000000000 -0400
@@ -47,15 +47,8 @@
state=TSTATE_IDLE;
- pthread_attr_t attr;
-
pthread_mutex_init( &conlist_lock, NULL );
pthread_mutex_init( &state_mutex, NULL );
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_TCC );
-
- if( pthread_create(&maint_thread_tid,&attr,maint_thread_func,this) != 0 )
+ if( pthread_create(&maint_thread_tid, NULL, maint_thread_func, this) != 0 )
throw GenericError("pthread_create() failed.");
--- src/TextUI.cc 2011-08-03 13:34:45.000000000 -0400
+++ src/TextUI.cc 2015-03-23 16:24:20.000000000 -0400
@@ -80,11 +80,5 @@
run_displayer = true;
- pthread_attr_t attr;
- if( pthread_attr_init( &attr ) != 0 )
- throw GenericError("pthread_attr_init() failed");
-
- pthread_attr_setstacksize( &attr, SS_TUI );
-
- if( pthread_create(&displayer_tid,&attr,displayer_thread_func,this) != 0 )
+ if (pthread_create(&displayer_tid, NULL, displayer_thread_func, this) != 0)
throw GenericError("pthread_create() returned an error.");
|