Skip to content

Commit 555c67d

Browse files
committed
NetTiSA: Handle NaN values
1 parent d6810fc commit 555c67d

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

process/nettisa.cpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ void NETTISAPlugin::update_record(
3737
uint64_t packet_time = timeval2usec(pkt.ts);
3838
uint64_t record_time = timeval2usec(rec.time_first);
3939
float diff_time = fmax(packet_time - nettisa_data->prev_time, 0);
40+
nettisa_data->sum_payload += pkt.payload_len_wire;
4041
nettisa_data->prev_time = packet_time;
4142
// MEAN
4243
nettisa_data->mean += (variation_from_mean) / n;
@@ -83,6 +84,7 @@ int NETTISAPlugin::post_update(Flow& rec, const Packet& pkt)
8384
{
8485
RecordExtNETTISA* nettisa_data
8586
= (RecordExtNETTISA*) rec.get_extension(RecordExtNETTISA::REGISTERED_ID);
87+
8688
update_record(nettisa_data, pkt, rec);
8789
return 0;
8890
}
@@ -92,15 +94,26 @@ void NETTISAPlugin::pre_export(Flow& rec)
9294
RecordExtNETTISA* nettisa_data
9395
= (RecordExtNETTISA*) rec.get_extension(RecordExtNETTISA::REGISTERED_ID);
9496
uint32_t n = rec.src_packets + rec.dst_packets;
95-
nettisa_data->switching_ratio = nettisa_data->switching_ratio / ((n - 1) / 2);
96-
nettisa_data->stdev = pow(
97-
(nettisa_data->root_mean_square / n) - pow((rec.src_bytes + rec.dst_bytes) / n, 2),
98-
0.5);
97+
if (n == 1) {
98+
nettisa_data->switching_ratio = 0;
99+
nettisa_data->stdev = 0;
100+
nettisa_data->kurtosis = 0;
101+
nettisa_data->time_distribution = 0;
102+
} else {
103+
nettisa_data->switching_ratio = nettisa_data->switching_ratio / n;
104+
nettisa_data->stdev = pow(
105+
(nettisa_data->root_mean_square / n) - pow(nettisa_data->sum_payload / n, 2),
106+
0.5);
107+
if (nettisa_data->stdev == 0) {
108+
nettisa_data->kurtosis = 0;
109+
} else {
110+
nettisa_data->kurtosis = nettisa_data->kurtosis / (n * pow(nettisa_data->stdev, 4));
111+
}
112+
nettisa_data->time_distribution = (nettisa_data->time_distribution / (n - 1))
113+
/ (nettisa_data->max_difftimes - nettisa_data->min);
114+
}
99115
nettisa_data->root_mean_square = pow(nettisa_data->root_mean_square / n, 0.5);
100116
nettisa_data->average_dispersion = nettisa_data->average_dispersion / n;
101-
nettisa_data->kurtosis = nettisa_data->kurtosis / (n * pow(nettisa_data->stdev, 4));
102-
nettisa_data->time_distribution = (nettisa_data->time_distribution / (n - 1))
103-
/ (nettisa_data->max_difftimes - nettisa_data->min);
104117
}
105118

106119
} // namespace ipxp

process/nettisa.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
namespace ipxp {
2828

2929
#define NETTISA_UNIREC_TEMPLATE \
30-
"NTS_MEAN,NTS_MIN,NTS_MAX,NTS_STDEV,NTS_KURTOSIS,NTS_ROOT_MEAN_SQUARE,NTS_AVERAGE_DISPERSION," \
31-
"NTS_MEAN_SCALED_TIME,NTS_MEAN_DIFFTIMES,NTS_MIN_DIFFTIMES,NTS_MAX_DIFFTIMES,NTS_TIME_" \
30+
"NTS_MEAN,NTS_MIN,NTS_MAX,NTS_STDEV,NTS_KURTOSIS,NTS_ROOT_MEAN_SQUARE,NTS_" \
31+
"AVERAGE_DISPERSION," \
32+
"NTS_MEAN_SCALED_TIME,NTS_MEAN_DIFFTIMES,NTS_MIN_DIFFTIMES,NTS_MAX_" \
33+
"DIFFTIMES,NTS_TIME_" \
3234
"DISTRIBUTION," \
3335
"NTS_SWITCHING_RATIO"
3436

@@ -69,6 +71,7 @@ struct RecordExtNETTISA : public RecordExt {
6971

7072
uint16_t prev_payload;
7173
uint64_t prev_time;
74+
uint64_t sum_payload;
7275

7376
RecordExtNETTISA()
7477
: RecordExt(REGISTERED_ID)
@@ -89,6 +92,7 @@ struct RecordExtNETTISA : public RecordExt {
8992

9093
prev_payload = 0;
9194
prev_time = 0;
95+
sum_payload = 0;
9296
}
9397

9498
#ifdef WITH_NEMEA
@@ -112,7 +116,7 @@ struct RecordExtNETTISA : public RecordExt {
112116
const char* get_unirec_tmplt() const { return NETTISA_UNIREC_TEMPLATE; }
113117
#endif // ifdef WITH_NEMEA
114118

115-
constexpr int get_ipfix_size() const noexcept
119+
int get_ipfix_size() const noexcept
116120
{
117121
return sizeof(mean) + sizeof(min) + sizeof(max) + sizeof(stdev) + sizeof(kurtosis)
118122
+ sizeof(root_mean_square) + sizeof(average_dispersion) + sizeof(mean_scaled_time)

0 commit comments

Comments
 (0)