From f76afba7500570a1905ce4d71f16c2df30626ba5 Mon Sep 17 00:00:00 2001 From: Grzegorz Sluja Date: Fri, 27 Oct 2023 13:38:12 +0200 Subject: [PATCH] Voice: Fixes for some rtp statistics exposed to tr104 --- dmtree/tr104/common.c | 30 +++++++++++++++++++++- dmtree/tr104/common.h | 6 ++++- dmtree/tr104/servicesvoiceservicecalllog.c | 30 +++++++++++++++++----- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/dmtree/tr104/common.c b/dmtree/tr104/common.c index 5185f29c..95b54003 100644 --- a/dmtree/tr104/common.c +++ b/dmtree/tr104/common.c @@ -472,7 +472,14 @@ int init_call_log(void) token += 1; end = DM_LSTRSTR(token, ","); CHECK_RESULT(end); - DM_STRNCPY(cdr.uLossRate, token, end - token + 1); + DM_STRNCPY(cdr.localLossRate, token, end - token + 1); + + token = DM_LSTRSTR(token, ","); + CHECK_RESULT(token); + token += 1; + end = DM_LSTRSTR(token, ","); + CHECK_RESULT(end); + DM_STRNCPY(cdr.remoteLossRate, token, end - token + 1); token = DM_LSTRSTR(token, ","); CHECK_RESULT(token); @@ -523,12 +530,33 @@ int init_call_log(void) CHECK_RESULT(end); DM_STRNCPY(cdr.averageRoundTripDelay, token, end - token + 1); + token = DM_LSTRSTR(token, ","); + CHECK_RESULT(token); + token += 1; + end = DM_LSTRSTR(token, ","); + CHECK_RESULT(end); + DM_STRNCPY(cdr.farEndInterarrivalJitter, token, end - token + 1); + token = DM_LSTRSTR(token, ","); CHECK_RESULT(token); token += 1; end = DM_LSTRSTR(token, ","); CHECK_RESULT(end); DM_STRNCPY(cdr.averageFarEndInterarrivalJitter, token, end - token + 1); + + token = DM_LSTRSTR(token, ","); + CHECK_RESULT(token); + token += 1; + end = DM_LSTRSTR(token, ","); + CHECK_RESULT(end); + DM_STRNCPY(cdr.receiveInterarrivalJitter, token, end - token + 1); + + token = DM_LSTRSTR(token, ","); + CHECK_RESULT(token); + token += 1; + end = DM_LSTRSTR(token, ","); + CHECK_RESULT(end); + DM_STRNCPY(cdr.averageReceiveInterarrivalJitter, token, end - token + 1); } // Skip invalid call logs if (cdr.calling_num[0] == '\0' || cdr.called_num[0] == '\0' || diff --git a/dmtree/tr104/common.h b/dmtree/tr104/common.h index bddf148f..c564481a 100644 --- a/dmtree/tr104/common.h +++ b/dmtree/tr104/common.h @@ -54,7 +54,8 @@ struct call_log_entry { char localJbAbsMax[20]; char remoteJbAbsMax[20]; char jbAvg[20]; - char uLossRate[20]; + char localLossRate[20]; + char remoteLossRate[20]; char discarded[20]; char lost[20]; char rxpkts[20]; @@ -62,7 +63,10 @@ struct call_log_entry { char jitter[20]; char maxJitter[20]; char averageRoundTripDelay[20]; + char farEndInterarrivalJitter[20]; char averageFarEndInterarrivalJitter[20]; + char receiveInterarrivalJitter[20]; + char averageReceiveInterarrivalJitter[20]; }; #define MAX_SUPPORTED_CODECS 8 diff --git a/dmtree/tr104/servicesvoiceservicecalllog.c b/dmtree/tr104/servicesvoiceservicecalllog.c index e1ff153d..18ac6601 100644 --- a/dmtree/tr104/servicesvoiceservicecalllog.c +++ b/dmtree/tr104/servicesvoiceservicecalllog.c @@ -187,24 +187,31 @@ static int get_ServicesVoiceServiceCallLog_Src_PacketsSent(char *refparam, struc return 0; } +static int get_ServicesVoiceServiceCallLog_Src_ReceiveInterarrivalJitter(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct call_log_entry *entry = (struct call_log_entry *)data; + *value = (entry) ? dmstrdup(entry->receiveInterarrivalJitter) : "0"; + return 0; +} + static int get_ServicesVoiceServiceCallLog_Src_AverageReceiveInterarrivalJitter(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { struct call_log_entry *entry = (struct call_log_entry *)data; - *value = (entry) ? dmstrdup(entry->jbAvg) : "0"; + *value = (entry) ? dmstrdup(entry->averageReceiveInterarrivalJitter) : "0"; return 0; } static int get_ServicesVoiceServiceCallLog_Src_FarEndInterarrivalJitter(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { struct call_log_entry *entry = (struct call_log_entry *)data; - *value = (entry) ? dmstrdup(entry->jitter) : "0"; + *value = (entry) ? dmstrdup(entry->farEndInterarrivalJitter) : "0"; return 0; } -static int get_ServicesVoiceServiceCallLog_Src_FarEndPacketLossRate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +static int get_ServicesVoiceServiceCallLog_Src_AverageFarEndInterarrivalJitter(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { struct call_log_entry *entry = (struct call_log_entry *)data; - *value = (entry) ? dmstrdup(entry->uLossRate) : "0"; + *value = (entry) ? dmstrdup(entry->averageFarEndInterarrivalJitter) : "0"; return 0; } @@ -222,10 +229,17 @@ static int get_ServicesVoiceServiceCallLog_Src_AverageRoundTripDelay(char *refpa return 0; } -static int get_ServicesVoiceServiceCallLog_Src_AverageFarEndInterarrivalJitter(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +static int get_ServicesVoiceServiceCallLog_Src__ReceivePacketLossRate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { struct call_log_entry *entry = (struct call_log_entry *)data; - *value = (entry) ? dmstrdup(entry->averageFarEndInterarrivalJitter) : "0"; + *value = (entry) ? dmstrdup(entry->localLossRate) : "0"; + return 0; +} + +static int get_ServicesVoiceServiceCallLog_Src_FarEndPacketLossRate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + struct call_log_entry *entry = (struct call_log_entry *)data; + *value = (entry) ? dmstrdup(entry->remoteLossRate) : "0"; return 0; } @@ -337,11 +351,13 @@ DMLEAF tServicesVoiceServiceCallLogSessionSourceRTPParams[] = { {"PacketsLost", &DMREAD, DMT_UNINT, get_ServicesVoiceServiceCallLog_Src_PacketsLost, NULL, BBFDM_BOTH}, {"PacketsReceived", &DMREAD, DMT_UNLONG, get_ServicesVoiceServiceCallLog_Src_PacketsReceived, NULL, BBFDM_BOTH}, {"PacketsSent", &DMREAD, DMT_UNLONG, get_ServicesVoiceServiceCallLog_Src_PacketsSent, NULL, BBFDM_BOTH}, +{"ReceiveInterarrivalJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_ReceiveInterarrivalJitter, NULL, BBFDM_BOTH}, {"AverageReceiveInterarrivalJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_AverageReceiveInterarrivalJitter, NULL, BBFDM_BOTH}, {"FarEndInterarrivalJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_FarEndInterarrivalJitter, NULL, BBFDM_BOTH}, +{"AverageFarEndInterarrivalJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_AverageFarEndInterarrivalJitter, NULL, BBFDM_BOTH}, {"FarEndPacketLossRate", &DMREAD, DMT_UNINT, get_ServicesVoiceServiceCallLog_Src_FarEndPacketLossRate, NULL, BBFDM_BOTH}, {"MaxJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_MaxJitter, NULL, BBFDM_BOTH}, {"AverageRoundTripDelay", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_AverageRoundTripDelay, NULL, BBFDM_BOTH}, -{"AverageFarEndInterarrivalJitter", &DMREAD, DMT_INT, get_ServicesVoiceServiceCallLog_Src_AverageFarEndInterarrivalJitter, NULL, BBFDM_BOTH}, +{"ReceivePacketLossRate", &DMREAD, DMT_UNINT, get_ServicesVoiceServiceCallLog_Src__ReceivePacketLossRate, NULL, BBFDM_BOTH}, {0} };