diff options
author | Luca Deri <deri@ntop.org> | 2020-06-22 01:02:54 +0200 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2020-06-22 01:02:54 +0200 |
commit | 1a62f4c799186244da0a2923d1db79f8e4e3c10b (patch) | |
tree | 52c17da9c70e18e123dc883051803b876b1bcbee /src/lib | |
parent | 2a137100da766636cc8e83a55962c47c4285e58a (diff) |
Added ndpi_bin_XXX API
Added packet lenght distribution bins
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/ndpi_analyze.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/lib/ndpi_analyze.c b/src/lib/ndpi_analyze.c index 2d7e11abc..e1f37cc8d 100644 --- a/src/lib/ndpi_analyze.c +++ b/src/lib/ndpi_analyze.c @@ -233,3 +233,86 @@ void ndpi_hll_add_number(struct ndpi_hll *hll, u_int32_t value) { double ndpi_hll_count(struct ndpi_hll *hll) { return(hll_count(hll)); } + +/* ********************************************************************************* */ +/* ********************************************************************************* */ + +int ndpi_init_bin(struct ndpi_bin *b, enum ndpi_bin_family f, u_int8_t num_bins) { + b->num_bins = num_bins, b->family = f, b->num_incs = 0; + + switch(f) { + case ndpi_bin_family8: + if((b->u.bins8 = (u_int8_t*)calloc(num_bins, sizeof(u_int8_t))) == NULL) + return(-1); + break; + + case ndpi_bin_family16: + if((b->u.bins16 = (u_int16_t*)calloc(num_bins, sizeof(u_int16_t))) == NULL) + return(-1); + break; + + case ndpi_bin_family32: + if((b->u.bins32 = (u_int32_t*)calloc(num_bins, sizeof(u_int32_t))) == NULL) + return(-1); + break; + } + + return(0); +} + +void ndpi_free_bin(struct ndpi_bin *b) { + switch(b->family) { + case ndpi_bin_family8: + free(b->u.bins8); + break; + case ndpi_bin_family16: + free(b->u.bins16); + break; + case ndpi_bin_family32: + free(b->u.bins32); + break; + } +} + +void ndpi_inc_bin(struct ndpi_bin *b, u_int8_t slot_id) { + if(slot_id >= b->num_bins) slot_id = 0; + + b->num_incs += 1; + + switch(b->family) { + case ndpi_bin_family8: + b->u.bins8[slot_id]++; + break; + case ndpi_bin_family16: + b->u.bins16[slot_id]++; + break; + case ndpi_bin_family32: + b->u.bins32[slot_id]++; + break; + } +} + +/* + Each bin slot is transformed in a % with respect to the value total + */ +void ndpi_normalize_bin(struct ndpi_bin *b) { + u_int8_t i; + + if(b->num_incs == 0) return; + + switch(b->family) { + case ndpi_bin_family8: + for(i=0; i<b->num_bins; i++) + b->u.bins8[i] = (b->u.bins8[i]*100) / b->num_incs; + break; + case ndpi_bin_family16: + for(i=0; i<b->num_bins; i++) + b->u.bins16[i] = (b->u.bins16[i]*100) / b->num_incs; + break; + case ndpi_bin_family32: + for(i=0; i<b->num_bins; i++) + b->u.bins32[i] = (b->u.bins32[i]*100) / b->num_incs; + break; + } +} + |