aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-01 05:39:48 +0700
committerfixeria <vyanitskiy@sysmocom.de>2023-09-04 20:27:44 +0000
commit15034cb55243e25aea5279db87264d8636f499d8 (patch)
treed1faad76955796c66b188738b5ade6b806066c2c
parentac791564f1e5acb0a0869ba3545be66b62ce4d9d (diff)
library: RTP_Emulation: implement new RTPEM_MODE_LOOPBACK
-rw-r--r--library/RTP_Emulation.ttcn31
1 files changed, 28 insertions, 3 deletions
diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn
index 539ea45d..de2c8770 100644
--- a/library/RTP_Emulation.ttcn
+++ b/library/RTP_Emulation.ttcn
@@ -97,6 +97,7 @@ type component RTP_Emulation_CT {
var PortNumber g_local_port;
/* state variables, change over time */
+ var boolean g_loopback := false;
var boolean g_rx_enabled := false;
var boolean g_tx_connected := false; /* Set to true after connect() */
var LIN2_BO_LAST g_tx_next_seq := 0;
@@ -116,7 +117,8 @@ type enumerated RtpemMode {
RTPEM_MODE_NONE,
RTPEM_MODE_TXONLY,
RTPEM_MODE_RXONLY,
- RTPEM_MODE_BIDIR
+ RTPEM_MODE_BIDIR,
+ RTPEM_MODE_LOOPBACK
};
type record RtpemStats {
@@ -512,12 +514,14 @@ function f_main() runs on RTP_Emulation_CT
[] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_NONE}) {
T_transmit.stop;
g_rx_enabled := false;
+ g_loopback := false;
CTRL.reply(RTPEM_mode:{RTPEM_MODE_NONE});
}
[] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_TXONLY}) {
/* start transmit timer */
T_transmit.start;
g_rx_enabled := false;
+ g_loopback := false;
CTRL.reply(RTPEM_mode:{RTPEM_MODE_TXONLY});
}
[] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_RXONLY}) {
@@ -529,6 +533,7 @@ function f_main() runs on RTP_Emulation_CT
RTCP.clear;
g_rx_enabled := true;
}
+ g_loopback := false;
CTRL.reply(RTPEM_mode:{RTPEM_MODE_RXONLY});
}
[] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_BIDIR}) {
@@ -539,8 +544,20 @@ function f_main() runs on RTP_Emulation_CT
RTCP.clear;
g_rx_enabled := true;
}
+ g_loopback := false;
CTRL.reply(RTPEM_mode:{RTPEM_MODE_BIDIR});
}
+ [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_LOOPBACK}) {
+ T_transmit.stop;
+ if (g_rx_enabled == false) {
+ /* flush queues */
+ RTP.clear;
+ RTCP.clear;
+ g_rx_enabled := true;
+ }
+ g_loopback := true;
+ CTRL.reply(RTPEM_mode:{RTPEM_MODE_LOOPBACK});
+ }
[] CTRL.getcall(RTPEM_configure:{?}) -> param (cfg) {
g_cfg := cfg;
g_iuup_ent.cfg := g_cfg.iuup_cfg;
@@ -599,8 +616,16 @@ function f_main() runs on RTP_Emulation_CT
}
}
- /* Match the received payload against any of the predefined fixed rx payloads */
- f_check_fixed_rx_payloads(rx_rtp.msg.rtp.payload_type, rx_rtp.msg.rtp.data);
+ if (g_loopback) {
+ f_tx_rtp(rx_rtp.msg.rtp.data, rx_rtp.msg.rtp.payload_type);
+ /* 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(rx_rtp.msg.rtp.data);
+ } else {
+ /* Match the received payload against any of the predefined fixed rx payloads */
+ f_check_fixed_rx_payloads(rx_rtp.msg.rtp.payload_type, rx_rtp.msg.rtp.data);
+ }
if (DATA.checkstate("Connected")) {
DATA.send(rx_rtp.msg.rtp);