diff options
author | Luca Deri <lucaderi@users.noreply.github.com> | 2019-09-29 07:59:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-29 07:59:02 +0200 |
commit | 3b06d2191ce69d53aae02235ebe45587038616e6 (patch) | |
tree | a1f62cec5c290f3a407c429f90c57f92b4cf6207 /src | |
parent | e9df2b187c5e2e334d08a5abe2f392155f07c8a5 (diff) | |
parent | e29032085df18b034fe9e7b036869f187187ea4b (diff) |
Merge pull request #770 from ntop/ndpi_icmp
Add icmp and icmp6 to calculate splt and bd values.
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_classify.h | 1 | ||||
-rw-r--r-- | src/include/ndpi_typedefs.h | 14 | ||||
-rw-r--r-- | src/lib/ndpi_classify.c | 38 |
3 files changed, 45 insertions, 8 deletions
diff --git a/src/include/ndpi_classify.h b/src/include/ndpi_classify.h index 9b5f2841f..cd03027d8 100644 --- a/src/include/ndpi_classify.h +++ b/src/include/ndpi_classify.h @@ -87,6 +87,7 @@ unsigned int ndpi_timer_lt(const struct timeval *a, const struct timeval *b); void ndpi_timer_sub(const struct timeval *a, const struct timeval *b, struct timeval *result); void ndpi_timer_clear(struct timeval *a); unsigned int ndpi_timeval_to_milliseconds(struct timeval ts); +unsigned int ndpi_timeval_to_microseconds(struct timeval ts); void ndpi_log_timestamp(char *log_ts, u_int log_ts_len); #endif /* NDPI_CLASSIFY_H */ diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index d9da6205d..ccc4faec7 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -348,6 +348,20 @@ struct ndpi_icmphdr { } un; } PACK_OFF; +/* +++++++++++++++++++++++ ICMP6 header +++++++++++++++++++++++ */ + +PACK_ON +struct ndpi_icmp6hdr { + uint8_t icmp6_type; /* type field */ + uint8_t icmp6_code; /* code field */ + uint16_t icmp6_cksum; /* checksum field */ + union { + uint32_t icmp6_un_data32[1]; /* type-specific field */ + uint16_t icmp6_un_data16[2]; /* type-specific field */ + uint8_t icmp6_un_data8[4]; /* type-specific field */ + } icmp6_dataun; +} PACK_OFF; + /* +++++++++++++++++++++++ VXLAN header +++++++++++++++++++++++ */ PACK_ON diff --git a/src/lib/ndpi_classify.c b/src/lib/ndpi_classify.c index 96b2ecbb0..7a814f7ce 100644 --- a/src/lib/ndpi_classify.c +++ b/src/lib/ndpi_classify.c @@ -299,6 +299,8 @@ ndpi_merge_splt_arrays (const uint16_t *pkt_len, const struct timeval *pkt_time, tmp = pkt_time_twin[r]; ndpi_timer_sub(&tmp, &ts_start, &tmp_r); merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); + if (merged_times[s+r] == 0) + merged_times[s+r] = ndpi_timeval_to_microseconds(tmp_r); ts_start = tmp; r++; } else if (r >= r_idx) { @@ -306,27 +308,35 @@ ndpi_merge_splt_arrays (const uint16_t *pkt_len, const struct timeval *pkt_time, tmp = pkt_time[s]; ndpi_timer_sub(&tmp, &ts_start, &tmp_r); merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); + if (merged_times[s+r] == 0) + merged_times[s+r] = ndpi_timeval_to_microseconds(tmp_r); ts_start = tmp; s++; } else { if (ndpi_timer_lt(&pkt_time[s], &pkt_time_twin[r])) { merged_lens[s+r] = pkt_len[s]; - tmp = pkt_time[s]; - ndpi_timer_sub(&tmp, &ts_start, &tmp_r); - merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); - ts_start = tmp; + tmp = pkt_time[s]; + ndpi_timer_sub(&tmp, &ts_start, &tmp_r); + merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); + if (merged_times[s+r] == 0) + merged_times[s+r] = ndpi_timeval_to_microseconds(tmp_r); + ts_start = tmp; s++; } else { merged_lens[s+r] = pkt_len_twin[r]; - tmp = pkt_time_twin[r]; - ndpi_timer_sub(&tmp, &ts_start, &tmp_r); - merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); - ts_start = tmp; + tmp = pkt_time_twin[r]; + ndpi_timer_sub(&tmp, &ts_start, &tmp_r); + merged_times[s+r] = ndpi_timeval_to_milliseconds(tmp_r); + if (merged_times[s+r] == 0) + merged_times[s+r] = ndpi_timeval_to_microseconds(tmp_r); + ts_start = tmp; r++; } } } merged_times[0] = ndpi_timeval_to_milliseconds(start_m); + if (merged_times[0] == 0) + merged_times[0] = ndpi_timeval_to_microseconds(start_m); } /* transform lens array to Markov chain */ @@ -656,6 +666,18 @@ ndpi_timeval_to_milliseconds(struct timeval ts) return result; } +/** + * \brief Calculate the microseconds representation of a timeval. + * \param ts Timeval + * \return unsigned int - Milliseconds + */ +unsigned int +ndpi_timeval_to_microseconds(struct timeval ts) +{ + unsigned int result = ts.tv_usec + ts.tv_sec * 1000 * 1000; + return result; +} + void ndpi_log_timestamp(char *log_ts, u_int log_ts_len) { |