Skip to content

Commit a3efead

Browse files
committed
phists - FIX IPT calculation for negative IPT
1 parent 3a7a546 commit a3efead

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

process/phists.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void PHISTSPlugin::update_hist(RecordExtPHISTS *phists_data, uint32_t value, uin
112112
return;
113113
}
114114

115-
uint64_t PHISTSPlugin::calculate_ipt(RecordExtPHISTS *phists_data, const struct timeval tv, uint8_t direction)
115+
int64_t PHISTSPlugin::calculate_ipt(RecordExtPHISTS *phists_data, const struct timeval tv, uint8_t direction)
116116
{
117117
int64_t ts = IpfixBasicList::Tv2Ts(tv);
118118

@@ -121,9 +121,11 @@ uint64_t PHISTSPlugin::calculate_ipt(RecordExtPHISTS *phists_data, const struct
121121
return -1;
122122
}
123123
int64_t diff = ts - phists_data->last_ts[direction];
124-
125124
phists_data->last_ts[direction] = ts;
126-
return diff;
125+
if (diff < 0) {
126+
diff = 0;
127+
}
128+
return (int64_t)diff;
127129
}
128130

129131
void PHISTSPlugin::update_record(RecordExtPHISTS *phists_data, const Packet &pkt)
@@ -133,7 +135,7 @@ void PHISTSPlugin::update_record(RecordExtPHISTS *phists_data, const Packet &pkt
133135
}
134136
uint8_t direction = (uint8_t) !pkt.source_pkt;
135137
update_hist(phists_data, (uint32_t) pkt.payload_len_wire, phists_data->size_hist[direction]);
136-
int32_t ipt_diff = (uint32_t) calculate_ipt(phists_data, pkt.ts, direction);
138+
int32_t ipt_diff = (int32_t) calculate_ipt(phists_data, pkt.ts, direction);
137139
if (ipt_diff != -1) {
138140
update_hist(phists_data, (uint32_t) ipt_diff, phists_data->ipt_hist[direction]);
139141
}

process/phists.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class PHISTSPlugin : public ProcessPlugin
202202
void update_record(RecordExtPHISTS *phists_data, const Packet &pkt);
203203
void update_hist(RecordExtPHISTS *phists_data, uint32_t value, uint32_t *histogram);
204204
void pre_export(Flow &rec);
205-
uint64_t calculate_ipt(RecordExtPHISTS *phists_data, const struct timeval tv, uint8_t direction);
205+
int64_t calculate_ipt(RecordExtPHISTS *phists_data, const struct timeval tv, uint8_t direction);
206206

207207
static const uint32_t log2_lookup32[32];
208208

0 commit comments

Comments
 (0)