mgw: Add statistics to RTP_Emulation and link/build it in mgw test
We're not using it so far, this is left for follow-up patches. Change-Id: I40c322374cd99adb75a0f09175023fc0b12291d2
This commit is contained in:
parent
34bd80eae7
commit
cb8b427db1
|
@ -74,6 +74,10 @@ type component RTP_Emulation_CT {
|
|||
/* configurable by user, should be fixed */
|
||||
var RtpemConfig g_cfg := c_RtpemDefaultCfg;
|
||||
|
||||
/* statistics */
|
||||
var RtpemStats g_stats_rtp := c_RtpemStatsReset;
|
||||
var RtpemStats g_stats_rtcp := c_RtpemStatsReset;
|
||||
|
||||
var HostName g_remote_host;
|
||||
var PortNumber g_remote_port;
|
||||
var HostName g_local_host;
|
||||
|
@ -98,6 +102,34 @@ type enumerated RtpemMode {
|
|||
RTPEM_MODE_BIDIR
|
||||
};
|
||||
|
||||
type record RtpemStats {
|
||||
/* number of packets transmitted */
|
||||
integer num_pkts_tx,
|
||||
/* number of RTP payload bytes transmitted */
|
||||
integer bytes_payload_tx,
|
||||
|
||||
/* number of packets received */
|
||||
integer num_pkts_rx,
|
||||
/* number of RTP payload bytes received */
|
||||
integer bytes_payload_rx,
|
||||
/* number of packets received out-of-sequence */
|
||||
integer num_pkts_rx_err_seq,
|
||||
/* number of packets received wrong timestamp */
|
||||
integer num_pkts_rx_err_ts,
|
||||
/* number of packets received during Rx disable */
|
||||
integer num_pkts_rx_err_disabled
|
||||
}
|
||||
|
||||
const RtpemStats c_RtpemStatsReset := {
|
||||
num_pkts_tx := 0,
|
||||
bytes_payload_tx := 0,
|
||||
num_pkts_rx := 0,
|
||||
bytes_payload_rx := 0,
|
||||
num_pkts_rx_err_seq := 0,
|
||||
num_pkts_rx_err_ts := 0,
|
||||
num_pkts_rx_err_disabled := 0
|
||||
}
|
||||
|
||||
type record RtpemConfig {
|
||||
INT7b tx_payload_type,
|
||||
integer tx_samplerate_hz,
|
||||
|
@ -122,9 +154,10 @@ signature RTPEM_bind(in HostName local_host, inout PortNumber local_port);
|
|||
signature RTPEM_connect(in HostName remote_host, in PortNumber remote_port);
|
||||
signature RTPEM_mode(in RtpemMode mode);
|
||||
signature RTPEM_configure(in RtpemConfig cfg);
|
||||
signature RTPEM_stats_get(out RtpemStats stats, in boolean rtcp);
|
||||
|
||||
type port RTPEM_CTRL_PT procedure {
|
||||
inout RTPEM_bind, RTPEM_connect, RTPEM_mode, RTPEM_configure;
|
||||
inout RTPEM_bind, RTPEM_connect, RTPEM_mode, RTPEM_configure, RTPEM_stats_get;
|
||||
} with { extension "internal" };
|
||||
|
||||
template PDU_RTP ts_RTP(BIT32_BO_LAST ssrc, INT7b pt, LIN2_BO_LAST seq, uint32_t ts,
|
||||
|
@ -158,6 +191,7 @@ private function f_tx_rtp(octetstring payload, BIT1 marker := '0'B) runs on RTP_
|
|||
function f_main() runs on RTP_Emulation_CT
|
||||
{
|
||||
var Result res;
|
||||
var boolean is_rtcp
|
||||
|
||||
timer T_transmit := int2float(g_cfg.tx_duration_ms)/1000.0;
|
||||
var RTP_RecvFrom rx_rtp;
|
||||
|
@ -249,20 +283,38 @@ function f_main() runs on RTP_Emulation_CT
|
|||
g_iuup_ent.cfg.active_init := g_cfg.iuup_tx_init;
|
||||
CTRL.reply(RTPEM_configure:{cfg});
|
||||
}
|
||||
[] CTRL.getcall(RTPEM_stats_get:{?, ?}) -> param (is_rtcp) {
|
||||
if (is_rtcp) {
|
||||
CTRL.reply(RTPEM_stats_get:{g_stats_rtcp, is_rtcp});
|
||||
} else {
|
||||
CTRL.reply(RTPEM_stats_get:{g_stats_rtp, is_rtcp});
|
||||
}
|
||||
}
|
||||
|
||||
/* simply ignore any RTTP/RTCP if receiver not enabled */
|
||||
[g_rx_enabled==false] RTP.receive(tr_rtp) { }
|
||||
[g_rx_enabled==false] RTCP.receive(tr_rtp) { }
|
||||
|
||||
|
||||
/* simply ignore any RTTP/RTP if receiver not enabled */
|
||||
[g_rx_enabled==false] RTP.receive(tr_rtp) {
|
||||
g_stats_rtp.num_pkts_rx_err_disabled := g_stats_rtp.num_pkts_rx_err_disabled+1;
|
||||
}
|
||||
[g_rx_enabled==false] RTCP.receive(tr_rtp) {
|
||||
g_stats_rtcp.num_pkts_rx_err_disabled := g_stats_rtcp.num_pkts_rx_err_disabled+1;
|
||||
}
|
||||
|
||||
/* process received RTCP/RTP if receiver enabled */
|
||||
[g_rx_enabled] RTP.receive(tr_rtp) -> value rx_rtp {
|
||||
log("RX RTP: ", rx_rtp);
|
||||
/* increment counters */
|
||||
g_stats_rtp.num_pkts_rx := g_stats_rtp.num_pkts_rx+1;
|
||||
g_stats_rtp.bytes_payload_rx := g_stats_rtp.bytes_payload_rx +
|
||||
lengthof(rx_rtp.msg.rtp.data);
|
||||
if (g_cfg.iuup_mode) {
|
||||
rx_rtp.msg.rtp.data := f_IuUP_Em_rx_decaps(g_iuup_ent, rx_rtp.msg.rtp.data);
|
||||
}
|
||||
}
|
||||
[g_rx_enabled] RTCP.receive(tr_rtcp) -> value rx_rtp {
|
||||
log("RX RTCP: ", rx_rtp);
|
||||
g_stats_rtcp.num_pkts_rx := g_stats_rtcp.num_pkts_rx+1;
|
||||
}
|
||||
|
||||
/* transmit if timer has expired */
|
||||
|
@ -270,6 +322,10 @@ function f_main() runs on RTP_Emulation_CT
|
|||
/* send one RTP frame, re-start timer */
|
||||
f_tx_rtp(g_cfg.tx_fixed_payload);
|
||||
T_transmit.start;
|
||||
/* update counters */
|
||||
g_stats_rtp.num_pkts_tx := g_stats_rtp.num_pkts_tx+1;
|
||||
g_stats_rtp.bytes_payload_tx := g_stats_rtp.bytes_payload_tx +
|
||||
lengthof(g_cfg.tx_fixed_payload);
|
||||
}
|
||||
|
||||
/* fail on any unexpected messages */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
BASEDIR=../deps
|
||||
|
||||
|
@ -30,7 +30,9 @@ FILES="RTP_EncDec.cc RTP_Types.ttcn"
|
|||
gen_links $DIR $FILES
|
||||
|
||||
DIR=../library
|
||||
FILES="General_Types.ttcn Osmocom_Types.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc RTP_CodecPort.ttcn"
|
||||
FILES="General_Types.ttcn Osmocom_Types.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn
|
||||
MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc "
|
||||
FILES+="RTP_CodecPort.ttcn RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_Emulation.ttcn IuUP_EncDec.cc "
|
||||
gen_links $DIR $FILES
|
||||
|
||||
ignore_pp_results
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
FILES="*.ttcn SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc RTP_CodecPort_CtrlFunctDef.cc"
|
||||
FILES="*.ttcn SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc RTP_CodecPort_CtrlFunctDef.cc IuUP_EncDec.cc "
|
||||
|
||||
../regen-makefile.sh MGCP_Test.ttcn $FILES
|
||||
|
|
Loading…
Reference in New Issue