Currently the conn_mode and the output_enabled flags are printed to stdout.
This patch modifies this to print the output_enabled flags to stderr instead. The bits in conn_mode are shown as RECV, SEND, and LOOP. This does not reduce the significance of the test, since there is an assertion already that verifies the values of the output_enabled flags with respect to the conn_mode.
Sponsored-by: On-Waves ehf --- openbsc/tests/mgcp/mgcp_test.c | 21 +++++++++++++++------ openbsc/tests/mgcp/mgcp_test.ok | 18 +++++++++--------- 2 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index fa68867..5f69072 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -399,13 +399,22 @@ static void test_messages(void) else printf("Requested packetization period not set\n");
- if ((endp->conn_mode & CONN_UNMODIFIED) == 0) - printf("Connection mode: %d, " - "BTS output %sabled, NET output %sabled\n", + if ((endp->conn_mode & CONN_UNMODIFIED) == 0) { + printf("Connection mode: %d:%s%s%s%s\n", endp->conn_mode, - endp->bts_end.output_enabled ? "en" : "dis", - endp->net_end.output_enabled ? "en" : "dis"); - else + !endp->conn_mode ? " NONE" : "", + endp->conn_mode & MGCP_CONN_SEND_ONLY ? + " SEND" : "", + endp->conn_mode & MGCP_CONN_RECV_ONLY ? + " RECV" : "", + endp->conn_mode & MGCP_CONN_LOOPBACK & + ~MGCP_CONN_RECV_SEND ? + " LOOP" : ""); + fprintf(stderr, + "BTS output %sabled, NET output %sabled\n", + endp->bts_end.output_enabled ? "en" : "dis", + endp->net_end.output_enabled ? "en" : "dis"); + } else printf("Connection mode not set\n");
OSMO_ASSERT(endp->net_end.output_enabled == diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index fbe2566..76806f9 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -19,7 +19,7 @@ Testing CRCX Dummy packets: 1 Detected packet duration: 40 Requested packetetization period: 20-20 -Connection mode: 1, BTS output enabled, NET output disabled +Connection mode: 1: RECV Testing MDCX3 Dummy packets: 1 Packet duration not set @@ -29,35 +29,35 @@ Testing MDCX4 Dummy packets: 1 Detected packet duration: 40 Requested packetetization period: 20-20 -Connection mode: 3, BTS output enabled, NET output enabled +Connection mode: 3: SEND RECV Testing MDCX4_PT1 Dummy packets: 1 Detected packet duration: 40 Requested packetetization period: 20-40 -Connection mode: 3, BTS output enabled, NET output enabled +Connection mode: 3: SEND RECV Testing MDCX4_PT2 Dummy packets: 1 Detected packet duration: 40 Requested packetetization period: 20-20 -Connection mode: 3, BTS output enabled, NET output enabled +Connection mode: 3: SEND RECV Testing MDCX4_PT3 Dummy packets: 1 Detected packet duration: 40 Requested packetization period not set -Connection mode: 3, BTS output enabled, NET output enabled +Connection mode: 3: SEND RECV Testing MDCX4_SO Detected packet duration: 40 Requested packetetization period: 20-20 -Connection mode: 2, BTS output disabled, NET output enabled +Connection mode: 2: SEND Testing DLCX Detected packet duration: 20 Requested packetization period not set -Connection mode: 0, BTS output disabled, NET output disabled +Connection mode: 0: NONE Testing CRCX_ZYN Dummy packets: 1 Packet duration not set Requested packetization period not set -Connection mode: 1, BTS output enabled, NET output disabled +Connection mode: 1: RECV Testing EMPTY Testing SHORT1 Testing SHORT2 @@ -68,7 +68,7 @@ Testing RQNT2 Testing DLCX Detected packet duration: 20 Requested packetization period not set -Connection mode: 0, BTS output disabled, NET output disabled +Connection mode: 0: NONE Testing CRCX Re-transmitting CRCX Testing RQNT1
Currently the stats (jitter, transit) cannot be checked properly, since they depend on the wallclock time.
This patch fakes clock_gettime (CLOCK_MONOTONIC) to reflect the scheduling time of the RTP packets. In addition, the RTP statistical value are written to stdout. A RTP test case with a SSRC change along with a reference time delay has been added.
Sponsored-by: On-Waves ehf --- openbsc/tests/mgcp/mgcp_test.c | 38 ++++++++++ openbsc/tests/mgcp/mgcp_test.ok | 146 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+)
diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index 5f69072..d1c1284 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -27,6 +27,7 @@ #include <string.h> #include <limits.h> #include <dlfcn.h> +#include <time.h>
char *strline_r(char *str, char **saveptr);
@@ -321,6 +322,25 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, return real_sendto(sockfd, buf, len, flags, dest_addr, addrlen); }
+static int64_t force_monotonic_time_us = -1; +/* override and forward */ +int clock_gettime(clockid_t clk_id, struct timespec *tp) +{ + typedef int (*clock_gettime_t)(clockid_t clk_id, struct timespec *tp); + static clock_gettime_t real_clock_gettime = NULL; + + if (!real_clock_gettime) + real_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime"); + + if (clk_id == CLOCK_MONOTONIC && force_monotonic_time_us >= 0) { + tp->tv_sec = force_monotonic_time_us / 1000000; + tp->tv_nsec = (force_monotonic_time_us % 1000000) * 1000; + return 0; + } + + return real_clock_gettime(clk_id, tp); +} + #define CONN_UNMODIFIED (0x1000)
static void test_values(void) @@ -720,6 +740,17 @@ struct rtp_packet_info test_rtp_packets1[] = { /* RTP: SeqNo=25, TS=36888 */ {0.500000, 20, "\x80\x62\x00\x19\x00\x00\x90\x18\x10\x20\x30\x40" "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* SSRC changed to 0x50607080, RTP timestamp jump, Delay of 1.5s, + * SeqNo jump */ + /* RTP: SeqNo=1000, TS=160000 */ + {2.000000, 20, "\x80\x62\x03\xE8\x00\x02\x71\x00\x50\x60\x70\x80" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* RTP: SeqNo=1001, TS=160160 */ + {2.020000, 20, "\x80\x62\x03\xE9\x00\x02\x71\xA0\x50\x60\x70\x80" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* RTP: SeqNo=1002, TS=160320 */ + {2.040000, 20, "\x80\x62\x03\xEA\x00\x02\x72\x40\x50\x60\x70\x80" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, };
void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *state, @@ -769,6 +800,8 @@ static void test_packet_error_detection(int patch_ssrc, int patch_ts) for (i = 0; i < ARRAY_SIZE(test_rtp_packets1); ++i) { struct rtp_packet_info *info = test_rtp_packets1 + i;
+ force_monotonic_time_us = 1000000ULL * info->txtime; + OSMO_ASSERT(info->len <= sizeof(buffer)); OSMO_ASSERT(info->len >= 0); memmove(buffer, info->data, info->len); @@ -797,11 +830,16 @@ static void test_packet_error_detection(int patch_ssrc, int patch_ts) state.in_stream.err_ts_counter - last_in_ts_err_cnt, state.out_stream.err_ts_counter - last_out_ts_err_cnt);
+ printf("Stats: Jitter = %u, Transit = %u\n", + mgcp_state_calc_jitter(&state), state.transit); + last_in_ts_err_cnt = state.in_stream.err_ts_counter; last_out_ts_err_cnt = state.out_stream.err_ts_counter; last_timestamp = state.out_stream.last_timestamp; last_seqno = state.out_stream.last_seq; } + + force_monotonic_time_us = -1; }
int main(int argc, char **argv) diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index 76806f9..6e9df8d 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -87,226 +87,372 @@ Testing packet error detection, patch SSRC. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 8, Transit = 4294967155 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967015 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967035 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 24, Transit = 4294966895 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 32, Transit = 4294966756 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 48, Transit = 4294966455 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 54, Transit = 4294966316 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 59, Transit = 4294966175 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +Stats: Jitter = 62, Transit = 4294966076 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 67, Transit = 4294965936 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 71, Transit = 4294965795 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 76, Transit = 4294965655 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 80, Transit = 4294965515 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 83, Transit = 4294965376 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +Stats: Jitter = 84, Transit = 4294965276 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 88, Transit = 4294965135 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 91, Transit = 4294964996 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +Stats: Jitter = 104, Transit = 4294964696 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 106, Transit = 4294964555 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 110, Transit = 4294964395 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 104, Transit = 4294964416 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 106, Transit = 4294964275 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 108, Transit = 4294964135 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +Stats: Jitter = 110, Transit = 4294963996 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 112, Transit = 4294963855 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 114, Transit = 4294963716 +In TS: 160000, dTS: 0, Seq: 1000 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 190, Transit = 4294965056 +In TS: 160160, dTS: 160, Seq: 1001 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 187, Transit = 4294964915 +In TS: 160320, dTS: 160, Seq: 1002 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 184, Transit = 4294964775 Testing packet error detection. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 8, Transit = 4294967155 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967015 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967035 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 24, Transit = 4294966895 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 32, Transit = 4294966756 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 48, Transit = 4294966455 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 54, Transit = 4294966316 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 59, Transit = 4294966175 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +Stats: Jitter = 62, Transit = 4294966076 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 67, Transit = 4294965936 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 71, Transit = 4294965795 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 2126, Transit = 4294932847 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 2002, Transit = 4294932707 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1885, Transit = 4294932568 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +Stats: Jitter = 1774, Transit = 4294932468 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1672, Transit = 4294932327 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1576, Transit = 4294932188 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +Stats: Jitter = 1496, Transit = 4294931888 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1411, Transit = 4294931747 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1333, Transit = 4294931587 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 1251, Transit = 4294931608 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1182, Transit = 4294931467 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1117, Transit = 4294931327 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +Stats: Jitter = 1055, Transit = 4294931188 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 998, Transit = 4294931047 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 945, Transit = 4294930908 +Output SSRC changed to 50607080 +In TS: 160000, dTS: 0, Seq: 1000 +Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 +Stats: Jitter = 8486, Transit = 4294809296 +In TS: 160160, dTS: 160, Seq: 1001 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 7965, Transit = 4294809155 +In TS: 160320, dTS: 160, Seq: 1002 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 7476, Transit = 4294809015 Testing packet error detection, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 8, Transit = 4294967155 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967015 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967035 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 24, Transit = 4294966895 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 32, Transit = 4294966756 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 48, Transit = 4294966455 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 54, Transit = 4294966316 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 59, Transit = 4294966175 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Stats: Jitter = 64, Transit = 4294966036 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 69, Transit = 4294965896 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 73, Transit = 4294965755 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 2128, Transit = 4294932807 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 2004, Transit = 4294932667 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1887, Transit = 4294932528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Stats: Jitter = 1778, Transit = 4294932388 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1676, Transit = 4294932247 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1580, Transit = 4294932108 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +Stats: Jitter = 1500, Transit = 4294931808 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1415, Transit = 4294931667 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1336, Transit = 4294931507 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 1254, Transit = 4294931528 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1184, Transit = 4294931387 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1119, Transit = 4294931247 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +Stats: Jitter = 1058, Transit = 4294931108 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 1000, Transit = 4294930967 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 947, Transit = 4294930828 +Output SSRC changed to 50607080 +In TS: 160000, dTS: 0, Seq: 1000 +Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 +Stats: Jitter = 8488, Transit = 4294809216 +In TS: 160160, dTS: 160, Seq: 1001 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 7966, Transit = 4294809075 +In TS: 160320, dTS: 160, Seq: 1002 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 7477, Transit = 4294808935 Testing packet error detection, patch SSRC, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 8, Transit = 4294967155 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967015 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 17, Transit = 4294967035 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 24, Transit = 4294966895 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 32, Transit = 4294966756 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 48, Transit = 4294966455 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 54, Transit = 4294966316 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 59, Transit = 4294966175 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Stats: Jitter = 64, Transit = 4294966036 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 69, Transit = 4294965896 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 73, Transit = 4294965755 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 78, Transit = 4294965615 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 81, Transit = 4294965475 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 85, Transit = 4294965336 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Stats: Jitter = 88, Transit = 4294965196 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 92, Transit = 4294965055 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 95, Transit = 4294964916 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +Stats: Jitter = 107, Transit = 4294964616 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 109, Transit = 4294964475 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 113, Transit = 4294964315 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +Stats: Jitter = 107, Transit = 4294964336 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 109, Transit = 4294964195 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 111, Transit = 4294964055 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +Stats: Jitter = 113, Transit = 4294963916 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 114, Transit = 4294963775 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 116, Transit = 4294963636 +In TS: 160000, dTS: 0, Seq: 1000 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 192, Transit = 4294964976 +In TS: 160160, dTS: 160, Seq: 1001 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 189, Transit = 4294964835 +In TS: 160320, dTS: 160, Seq: 1002 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 186, Transit = 4294964695 Done
On Thu, Jan 30, 2014 at 09:01:33PM +0100, Jacob Erlbeck wrote:
Good Morning Jacob,
Currently the stats (jitter, transit) cannot be checked properly, since they depend on the wallclock time.
there is an issue on AMD64. Please have a look. I am not sure where the difference of one would come from. The build failed on the OBS but also on the AMD64 machine in the office.
@@ -90,28 +90,28 @@ Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 8, Transit = 4294967155 +Stats: Jitter = 8, Transit = 4294967156 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967015 +Stats: Jitter = 16, Transit = 4294967016
On Mon, Feb 03, 2014 at 09:13:36AM +0100, Holger Hans Peter Freyther wrote:
On Thu, Jan 30, 2014 at 09:01:33PM +0100, Jacob Erlbeck wrote:
Good Morning Jacob,
Currently the stats (jitter, transit) cannot be checked properly, since they depend on the wallclock time.
there is an issue on AMD64. Please have a look. I am not sure where the difference of one would come from. The build failed on the OBS but also on the AMD64 machine in the office.
int32_t transit is printed with %u and GCC gives no compiler warning about this. :}
Hi Holger,
On 03.02.2014 09:13, Holger Hans Peter Freyther wrote:
there is an issue on AMD64. Please have a look. I am not sure where the difference of one would come from. The build failed on the OBS but also on the AMD64 machine in the office.
Thanks a lot for looking into and fixing that in cdfc2061bb et al.
Jacob
Currently micro-secs and RTP rate get mixed when the transit value is computed in mgcp_patch_and_count().
This patch changes get_current_ts() to accept the desired rate as argument and to use it for the time conversion instead of always converting to microseconds. If microseconds are needed, get_current_ts(1000) can be used. The arrival_time is now measured in 1/rtp_end->rate seconds so that it can be directly compared to RTP timestamps as required by RFC3550 (section 6.4.1, see definition of 'interarrival jitter').
Sponsored-by: On-Waves ehf --- openbsc/src/libmgcp/mgcp_network.c | 20 ++-- openbsc/tests/mgcp/mgcp_test.ok | 232 ++++++++++++++++++------------------ 2 files changed, 128 insertions(+), 124 deletions(-)
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index b55ac04..39d5807 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -95,22 +95,25 @@ enum { /** * This does not need to be a precision timestamp and * is allowed to wrap quite fast. The returned value is - * milli seconds now. + * 1/unit seconds. */ -uint32_t get_current_ts(void) +static uint32_t get_current_ts(unsigned unit) { struct timespec tp; uint64_t ret;
+ if (!unit) + return 0; + memset(&tp, 0, sizeof(tp)); if (clock_gettime(CLOCK_MONOTONIC, &tp) != 0) LOGP(DMGCP, LOGL_NOTICE, "Getting the clock failed.\n");
- /* convert it to useconds */ + /* convert it to 1/unit seconds */ ret = tp.tv_sec; - ret *= 1000; - ret += tp.tv_nsec / 1000 / 1000; + ret *= unit; + ret += (int64_t)tp.tv_nsec * unit / 1000 / 1000 / 1000;
return ret; } @@ -370,7 +373,7 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta rtp_hdr = (struct rtp_hdr *) data; seq = ntohs(rtp_hdr->sequence); timestamp = ntohl(rtp_hdr->timestamp); - arrival_time = get_current_ts(); + arrival_time = get_current_ts(rtp_end->rate); ssrc = ntohl(rtp_hdr->ssrc);
if (!state->initialized) { @@ -491,9 +494,10 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta }
/* - * calculate the jitter between the two packages. The TS should be + * Calculate the jitter between the two packages. The TS should be * taken closer to the read function. This was taken from the - * Appendix A of RFC 3550. The local timestamp has a usec resolution. + * Appendix A of RFC 3550. Timestamp and arrival_time have a 1/rate + * resolution. */ transit = arrival_time - timestamp; d = transit - state->transit; diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index 6e9df8d..7883574 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -90,91 +90,91 @@ Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 8, Transit = 4294967155 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967015 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967035 +Stats: Jitter = 10, Transit = 159 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 24, Transit = 4294966895 +Stats: Jitter = 9, Transit = 159 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 32, Transit = 4294966756 +Stats: Jitter = 8, Transit = 160 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 48, Transit = 4294966455 +Stats: Jitter = 18, Transit = 4294967295 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 54, Transit = 4294966316 +Stats: Jitter = 17, Transit = 0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 59, Transit = 4294966175 +Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 62, Transit = 4294966076 +Stats: Jitter = 17, Transit = 40 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 67, Transit = 4294965936 +Stats: Jitter = 16, Transit = 40 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 71, Transit = 4294965795 +Stats: Jitter = 15, Transit = 39 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 76, Transit = 4294965655 +Stats: Jitter = 14, Transit = 39 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 80, Transit = 4294965515 +Stats: Jitter = 13, Transit = 39 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 83, Transit = 4294965376 +Stats: Jitter = 13, Transit = 40 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 84, Transit = 4294965276 +Stats: Jitter = 14, Transit = 80 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 88, Transit = 4294965135 +Stats: Jitter = 13, Transit = 79 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 91, Transit = 4294964996 +Stats: Jitter = 13, Transit = 80 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 104, Transit = 4294964696 +Stats: Jitter = 22, Transit = 4294967216 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 106, Transit = 4294964555 +Stats: Jitter = 20, Transit = 4294967215 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 110, Transit = 4294964395 +Stats: Jitter = 29, Transit = 4294967055 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 104, Transit = 4294964416 +Stats: Jitter = 37, Transit = 4294967216 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 106, Transit = 4294964275 +Stats: Jitter = 35, Transit = 4294967215 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 108, Transit = 4294964135 +Stats: Jitter = 33, Transit = 4294967215 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 110, Transit = 4294963996 +Stats: Jitter = 31, Transit = 4294967216 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 112, Transit = 4294963855 +Stats: Jitter = 29, Transit = 4294967215 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 114, Transit = 4294963716 +Stats: Jitter = 27, Transit = 4294967216 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 190, Transit = 4294965056 +Stats: Jitter = 765, Transit = 11760 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 187, Transit = 4294964915 +Stats: Jitter = 718, Transit = 11759 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 184, Transit = 4294964775 +Stats: Jitter = 673, Transit = 11759 Testing packet error detection. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -182,93 +182,93 @@ Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 8, Transit = 4294967155 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967015 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967035 +Stats: Jitter = 10, Transit = 159 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 24, Transit = 4294966895 +Stats: Jitter = 9, Transit = 159 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 32, Transit = 4294966756 +Stats: Jitter = 8, Transit = 160 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 48, Transit = 4294966455 +Stats: Jitter = 18, Transit = 4294967295 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 54, Transit = 4294966316 +Stats: Jitter = 17, Transit = 0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 59, Transit = 4294966175 +Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 62, Transit = 4294966076 +Stats: Jitter = 17, Transit = 40 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 67, Transit = 4294965936 +Stats: Jitter = 16, Transit = 40 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 71, Transit = 4294965795 +Stats: Jitter = 15, Transit = 39 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2126, Transit = 4294932847 +Stats: Jitter = 2065, Transit = 4294934527 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2002, Transit = 4294932707 +Stats: Jitter = 1936, Transit = 4294934527 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1885, Transit = 4294932568 +Stats: Jitter = 1815, Transit = 4294934528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 1774, Transit = 4294932468 +Stats: Jitter = 1704, Transit = 4294934568 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1672, Transit = 4294932327 +Stats: Jitter = 1597, Transit = 4294934567 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1576, Transit = 4294932188 +Stats: Jitter = 1498, Transit = 4294934568 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 1496, Transit = 4294931888 +Stats: Jitter = 1414, Transit = 4294934408 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1411, Transit = 4294931747 +Stats: Jitter = 1326, Transit = 4294934407 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1333, Transit = 4294931587 +Stats: Jitter = 1253, Transit = 4294934247 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 1251, Transit = 4294931608 +Stats: Jitter = 1185, Transit = 4294934408 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1182, Transit = 4294931467 +Stats: Jitter = 1111, Transit = 4294934407 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1117, Transit = 4294931327 +Stats: Jitter = 1041, Transit = 4294934407 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 1055, Transit = 4294931188 +Stats: Jitter = 976, Transit = 4294934408 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 998, Transit = 4294931047 +Stats: Jitter = 915, Transit = 4294934407 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 945, Transit = 4294930908 +Stats: Jitter = 858, Transit = 4294934408 Output SSRC changed to 50607080 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 -Stats: Jitter = 8486, Transit = 4294809296 +Stats: Jitter = 7749, Transit = 4294823296 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7965, Transit = 4294809155 +Stats: Jitter = 7264, Transit = 4294823295 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7476, Transit = 4294809015 +Stats: Jitter = 6810, Transit = 4294823295 Testing packet error detection, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -276,93 +276,93 @@ Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 8, Transit = 4294967155 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967015 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967035 +Stats: Jitter = 10, Transit = 159 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 24, Transit = 4294966895 +Stats: Jitter = 9, Transit = 159 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 32, Transit = 4294966756 +Stats: Jitter = 8, Transit = 160 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 48, Transit = 4294966455 +Stats: Jitter = 18, Transit = 4294967295 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 54, Transit = 4294966316 +Stats: Jitter = 17, Transit = 0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 59, Transit = 4294966175 +Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 64, Transit = 4294966036 +Stats: Jitter = 15, Transit = 0 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 69, Transit = 4294965896 +Stats: Jitter = 14, Transit = 0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 73, Transit = 4294965755 +Stats: Jitter = 13, Transit = 4294967295 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2128, Transit = 4294932807 +Stats: Jitter = 2063, Transit = 4294934487 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2004, Transit = 4294932667 +Stats: Jitter = 1934, Transit = 4294934487 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1887, Transit = 4294932528 +Stats: Jitter = 1813, Transit = 4294934488 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 1778, Transit = 4294932388 +Stats: Jitter = 1700, Transit = 4294934488 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1676, Transit = 4294932247 +Stats: Jitter = 1593, Transit = 4294934487 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1580, Transit = 4294932108 +Stats: Jitter = 1494, Transit = 4294934488 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 1500, Transit = 4294931808 +Stats: Jitter = 1411, Transit = 4294934328 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1415, Transit = 4294931667 +Stats: Jitter = 1322, Transit = 4294934327 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1336, Transit = 4294931507 +Stats: Jitter = 1250, Transit = 4294934167 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 1254, Transit = 4294931528 +Stats: Jitter = 1182, Transit = 4294934328 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1184, Transit = 4294931387 +Stats: Jitter = 1108, Transit = 4294934327 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1119, Transit = 4294931247 +Stats: Jitter = 1039, Transit = 4294934327 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 1058, Transit = 4294931108 +Stats: Jitter = 974, Transit = 4294934328 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1000, Transit = 4294930967 +Stats: Jitter = 913, Transit = 4294934327 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 947, Transit = 4294930828 +Stats: Jitter = 856, Transit = 4294934328 Output SSRC changed to 50607080 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 -Stats: Jitter = 8488, Transit = 4294809216 +Stats: Jitter = 7747, Transit = 4294823216 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7966, Transit = 4294809075 +Stats: Jitter = 7263, Transit = 4294823215 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7477, Transit = 4294808935 +Stats: Jitter = 6809, Transit = 4294823215 Testing packet error detection, patch SSRC, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -370,89 +370,89 @@ Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 Stats: Jitter = 0, Transit = 0 In TS: 160, dTS: 160, Seq: 1 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 8, Transit = 4294967155 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967015 +Stats: Jitter = 0, Transit = 4294967295 In TS: 320, dTS: 160, Seq: 3 Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967035 +Stats: Jitter = 10, Transit = 159 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 24, Transit = 4294966895 +Stats: Jitter = 9, Transit = 159 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 32, Transit = 4294966756 +Stats: Jitter = 8, Transit = 160 In TS: 960, dTS: 320, Seq: 6 Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 48, Transit = 4294966455 +Stats: Jitter = 18, Transit = 4294967295 In TS: 1120, dTS: 160, Seq: 7 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 54, Transit = 4294966316 +Stats: Jitter = 17, Transit = 0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 59, Transit = 4294966175 +Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 64, Transit = 4294966036 +Stats: Jitter = 15, Transit = 0 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 69, Transit = 4294965896 +Stats: Jitter = 14, Transit = 0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 73, Transit = 4294965755 +Stats: Jitter = 13, Transit = 4294967295 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 78, Transit = 4294965615 +Stats: Jitter = 12, Transit = 4294967295 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 81, Transit = 4294965475 +Stats: Jitter = 11, Transit = 4294967295 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 85, Transit = 4294965336 +Stats: Jitter = 11, Transit = 0 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 88, Transit = 4294965196 +Stats: Jitter = 10, Transit = 0 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 92, Transit = 4294965055 +Stats: Jitter = 9, Transit = 4294967295 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 95, Transit = 4294964916 +Stats: Jitter = 9, Transit = 0 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 107, Transit = 4294964616 +Stats: Jitter = 18, Transit = 4294967136 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 109, Transit = 4294964475 +Stats: Jitter = 17, Transit = 4294967135 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 113, Transit = 4294964315 +Stats: Jitter = 26, Transit = 4294966975 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 107, Transit = 4294964336 +Stats: Jitter = 34, Transit = 4294967136 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 109, Transit = 4294964195 +Stats: Jitter = 32, Transit = 4294967135 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 111, Transit = 4294964055 +Stats: Jitter = 30, Transit = 4294967135 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 113, Transit = 4294963916 +Stats: Jitter = 28, Transit = 4294967136 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 114, Transit = 4294963775 +Stats: Jitter = 27, Transit = 4294967135 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 116, Transit = 4294963636 +Stats: Jitter = 25, Transit = 4294967136 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 192, Transit = 4294964976 +Stats: Jitter = 763, Transit = 11680 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 189, Transit = 4294964835 +Stats: Jitter = 716, Transit = 11679 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 186, Transit = 4294964695 +Stats: Jitter = 671, Transit = 11679 Done
On Thu, Jan 30, 2014 at 09:01:34PM +0100, Jacob Erlbeck wrote:
Hi jacob!
This patch changes get_current_ts() to accept the desired rate as argument and to use it for the time conversion instead of always converting to microseconds. If microseconds are needed, get_current_ts(1000) can be used. The arrival_time is now measured in 1/rtp_end->rate seconds so that it can be directly compared to RTP timestamps as required by RFC3550 (section 6.4.1, see definition of 'interarrival jitter').
thanks for spotting this issue while working on related code. I am embarassed. It appears that the transmit time was already drifting apart.
Currently, when the SSRC changes within a stream and SSRC fixing is enabled, the RTP timestamp between the last packet the has been received with the old SSRC and the first packet of the new SSRC is always incremented by one packet duration. This can lead to audio muting (at least with the nanoBTS) when the wallclock interval between these packets is too large (> 1s).
This patch change the implementation to base the RTP timestamp offset on the wallclock interval that has passed between these two packets.
Ticket: OW#466 Sponsored-by: On-Waves ehf --- openbsc/include/openbsc/mgcp_internal.h | 1 + openbsc/src/libmgcp/mgcp_network.c | 12 ++++++++++-- openbsc/tests/mgcp/mgcp_test.ok | 16 ++++++++-------- 3 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h index 28ea678..9b97165 100644 --- a/openbsc/include/openbsc/mgcp_internal.h +++ b/openbsc/include/openbsc/mgcp_internal.h @@ -46,6 +46,7 @@ struct mgcp_rtp_stream_state { uint32_t last_timestamp; uint32_t err_ts_counter; int32_t last_tsdelta; + uint32_t last_arrival_time; };
struct mgcp_rtp_state { diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index 39d5807..5363fb8 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -415,10 +415,17 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta
state->in_stream.ssrc = ssrc; if (rtp_end->force_constant_ssrc) { - const int16_t delta_seq = 1; + int16_t delta_seq;
+ /* Always increment seqno by 1 */ state->seq_offset = - (state->out_stream.last_seq + delta_seq) - seq; + (state->out_stream.last_seq + 1) - seq; + + /* Estimate number of packets that would have been sent */ + delta_seq = + (arrival_time - state->in_stream.last_arrival_time + + state->packet_duration/2) / + state->packet_duration;
adjust_rtp_timestamp_offset(endp, state, rtp_end, addr, delta_seq, timestamp); @@ -452,6 +459,7 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta /* Save before patching */ state->in_stream.last_timestamp = timestamp; state->in_stream.last_seq = seq; + state->in_stream.last_arrival_time = arrival_time;
if (rtp_end->force_aligned_timing && state->out_stream.ssrc == ssrc && state->packet_duration) diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index 7883574..e383fb5 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -167,14 +167,14 @@ In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Stats: Jitter = 27, Transit = 4294967216 In TS: 160000, dTS: 0, Seq: 1000 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 765, Transit = 11760 +Out TS change: 12000, dTS: 12000, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 25, Transit = 4294967216 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 718, Transit = 11759 +Stats: Jitter = 24, Transit = 4294967215 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 673, Transit = 11759 +Stats: Jitter = 22, Transit = 4294967215 Testing packet error detection. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -447,12 +447,12 @@ In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Stats: Jitter = 25, Transit = 4294967136 In TS: 160000, dTS: 0, Seq: 1000 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 763, Transit = 11680 +Out TS change: 12000, dTS: 12000, Seq change: 1, TS Err change: in +0, out +0 +Stats: Jitter = 23, Transit = 4294967136 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 716, Transit = 11679 +Stats: Jitter = 22, Transit = 4294967135 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 671, Transit = 11679 +Stats: Jitter = 21, Transit = 4294967135 Done
So far, the jitter computation has been based on output timestamps.
This patch uses the input timestamps instead and resets jitter computation on SSRC changes.
Sponsored-by: On-Waves ehf --- openbsc/src/libmgcp/mgcp_network.c | 6 +- openbsc/tests/mgcp/mgcp_test.ok | 156 ++++++++++++++++++------------------ 2 files changed, 82 insertions(+), 80 deletions(-)
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index 5363fb8..8a5656a 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -375,6 +375,7 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta timestamp = ntohl(rtp_hdr->timestamp); arrival_time = get_current_ts(rtp_end->rate); ssrc = ntohl(rtp_hdr->ssrc); + transit = arrival_time - timestamp;
if (!state->initialized) { state->in_stream.last_seq = seq - 1; @@ -383,7 +384,7 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta state->base_seq = seq; state->initialized = 1; state->jitter = 0; - state->transit = arrival_time - timestamp; + state->transit = transit; state->packet_duration = mgcp_rtp_packet_duration(endp, rtp_end); state->out_stream = state->in_stream; state->out_stream.last_timestamp = timestamp; @@ -414,6 +415,8 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta endp->conn_mode);
state->in_stream.ssrc = ssrc; + state->jitter = 0; + state->transit = transit; if (rtp_end->force_constant_ssrc) { int16_t delta_seq;
@@ -507,7 +510,6 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta * Appendix A of RFC 3550. Timestamp and arrival_time have a 1/rate * resolution. */ - transit = arrival_time - timestamp; d = transit - state->transit; state->transit = transit; if (d < 0) diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index e383fb5..2c30115 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -123,58 +123,58 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Stats: Jitter = 15, Transit = 39 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 14, Transit = 39 +Stats: Jitter = 0, Transit = 4294934527 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 39 +Stats: Jitter = 0, Transit = 4294934527 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 40 +Stats: Jitter = 0, Transit = 4294934528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 14, Transit = 80 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 79 +Stats: Jitter = 2, Transit = 4294934567 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 80 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 22, Transit = 4294967216 +Stats: Jitter = 12, Transit = 4294934408 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 20, Transit = 4294967215 +Stats: Jitter = 11, Transit = 4294934407 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 29, Transit = 4294967055 +Stats: Jitter = 20, Transit = 4294934247 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 37, Transit = 4294967216 +Stats: Jitter = 29, Transit = 4294934408 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 35, Transit = 4294967215 +Stats: Jitter = 27, Transit = 4294934407 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 33, Transit = 4294967215 +Stats: Jitter = 26, Transit = 4294934407 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 31, Transit = 4294967216 +Stats: Jitter = 24, Transit = 4294934408 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 29, Transit = 4294967215 +Stats: Jitter = 23, Transit = 4294934407 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 27, Transit = 4294967216 +Stats: Jitter = 21, Transit = 4294934408 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 12000, dTS: 12000, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 25, Transit = 4294967216 +Stats: Jitter = 0, Transit = 4294823296 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 24, Transit = 4294967215 +Stats: Jitter = 0, Transit = 4294823295 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 22, Transit = 4294967215 +Stats: Jitter = 0, Transit = 4294823295 Testing packet error detection. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -216,59 +216,59 @@ Stats: Jitter = 15, Transit = 39 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2065, Transit = 4294934527 +Stats: Jitter = 0, Transit = 4294934527 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1936, Transit = 4294934527 +Stats: Jitter = 0, Transit = 4294934527 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1815, Transit = 4294934528 +Stats: Jitter = 0, Transit = 4294934528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 -Stats: Jitter = 1704, Transit = 4294934568 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1597, Transit = 4294934567 +Stats: Jitter = 2, Transit = 4294934567 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1498, Transit = 4294934568 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 1414, Transit = 4294934408 +Stats: Jitter = 12, Transit = 4294934408 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1326, Transit = 4294934407 +Stats: Jitter = 11, Transit = 4294934407 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1253, Transit = 4294934247 +Stats: Jitter = 20, Transit = 4294934247 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 1185, Transit = 4294934408 +Stats: Jitter = 29, Transit = 4294934408 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1111, Transit = 4294934407 +Stats: Jitter = 27, Transit = 4294934407 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1041, Transit = 4294934407 +Stats: Jitter = 26, Transit = 4294934407 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 976, Transit = 4294934408 +Stats: Jitter = 24, Transit = 4294934408 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 915, Transit = 4294934407 +Stats: Jitter = 23, Transit = 4294934407 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 858, Transit = 4294934408 +Stats: Jitter = 21, Transit = 4294934408 Output SSRC changed to 50607080 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 -Stats: Jitter = 7749, Transit = 4294823296 +Stats: Jitter = 0, Transit = 4294823296 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7264, Transit = 4294823295 +Stats: Jitter = 0, Transit = 4294823295 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 6810, Transit = 4294823295 +Stats: Jitter = 0, Transit = 4294823295 Testing packet error detection, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -300,69 +300,69 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 15, Transit = 0 +Stats: Jitter = 17, Transit = 40 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 14, Transit = 0 +Stats: Jitter = 16, Transit = 40 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 4294967295 +Stats: Jitter = 15, Transit = 39 Output SSRC changed to 10203040 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 2063, Transit = 4294934487 +Stats: Jitter = 0, Transit = 4294934527 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1934, Transit = 4294934487 +Stats: Jitter = 0, Transit = 4294934527 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1813, Transit = 4294934488 +Stats: Jitter = 0, Transit = 4294934528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 1700, Transit = 4294934488 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1593, Transit = 4294934487 +Stats: Jitter = 2, Transit = 4294934567 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1494, Transit = 4294934488 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 1411, Transit = 4294934328 +Stats: Jitter = 12, Transit = 4294934408 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1322, Transit = 4294934327 +Stats: Jitter = 11, Transit = 4294934407 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1250, Transit = 4294934167 +Stats: Jitter = 20, Transit = 4294934247 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 1182, Transit = 4294934328 +Stats: Jitter = 29, Transit = 4294934408 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1108, Transit = 4294934327 +Stats: Jitter = 27, Transit = 4294934407 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 1039, Transit = 4294934327 +Stats: Jitter = 26, Transit = 4294934407 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 974, Transit = 4294934328 +Stats: Jitter = 24, Transit = 4294934408 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 913, Transit = 4294934327 +Stats: Jitter = 23, Transit = 4294934407 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 856, Transit = 4294934328 +Stats: Jitter = 21, Transit = 4294934408 Output SSRC changed to 50607080 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 123112, dTS: 160, Seq change: 975, TS Err change: in +0, out +0 -Stats: Jitter = 7747, Transit = 4294823216 +Stats: Jitter = 0, Transit = 4294823296 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 7263, Transit = 4294823215 +Stats: Jitter = 0, Transit = 4294823295 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 6809, Transit = 4294823215 +Stats: Jitter = 0, Transit = 4294823295 Testing packet error detection, patch SSRC, patch timestamps. Output SSRC changed to 11223344 In TS: 0, dTS: 0, Seq: 0 @@ -394,65 +394,65 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Stats: Jitter = 16, Transit = 4294967295 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 15, Transit = 0 +Stats: Jitter = 17, Transit = 40 In TS: 1560, dTS: 160, Seq: 10 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 14, Transit = 0 +Stats: Jitter = 16, Transit = 40 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 13, Transit = 4294967295 +Stats: Jitter = 15, Transit = 39 In TS: 34688, dTS: 0, Seq: 12 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 12, Transit = 4294967295 +Stats: Jitter = 0, Transit = 4294934527 In TS: 34848, dTS: 160, Seq: 13 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 11, Transit = 4294967295 +Stats: Jitter = 0, Transit = 4294934527 In TS: 35008, dTS: 160, Seq: 14 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 11, Transit = 0 +Stats: Jitter = 0, Transit = 4294934528 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 -Stats: Jitter = 10, Transit = 0 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35288, dTS: 160, Seq: 16 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 9, Transit = 4294967295 +Stats: Jitter = 2, Transit = 4294934567 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 9, Transit = 0 +Stats: Jitter = 2, Transit = 4294934568 In TS: 35768, dTS: 160, Seq: 19 Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 -Stats: Jitter = 18, Transit = 4294967136 +Stats: Jitter = 12, Transit = 4294934408 In TS: 35928, dTS: 160, Seq: 20 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 17, Transit = 4294967135 +Stats: Jitter = 11, Transit = 4294934407 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 26, Transit = 4294966975 +Stats: Jitter = 20, Transit = 4294934247 In TS: 36088, dTS: 160, Seq: 21 Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 -Stats: Jitter = 34, Transit = 4294967136 +Stats: Jitter = 29, Transit = 4294934408 In TS: 36248, dTS: 160, Seq: 22 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 32, Transit = 4294967135 +Stats: Jitter = 27, Transit = 4294934407 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 30, Transit = 4294967135 +Stats: Jitter = 26, Transit = 4294934407 In TS: 36568, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 -Stats: Jitter = 28, Transit = 4294967136 +Stats: Jitter = 24, Transit = 4294934408 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 27, Transit = 4294967135 +Stats: Jitter = 23, Transit = 4294934407 In TS: 36888, dTS: 160, Seq: 25 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 25, Transit = 4294967136 +Stats: Jitter = 21, Transit = 4294934408 In TS: 160000, dTS: 0, Seq: 1000 Out TS change: 12000, dTS: 12000, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 23, Transit = 4294967136 +Stats: Jitter = 0, Transit = 4294823296 In TS: 160160, dTS: 160, Seq: 1001 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 22, Transit = 4294967135 +Stats: Jitter = 0, Transit = 4294823295 In TS: 160320, dTS: 160, Seq: 1002 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 -Stats: Jitter = 21, Transit = 4294967135 +Stats: Jitter = 0, Transit = 4294823295 Done
On Thu, Jan 30, 2014 at 09:01:32PM +0100, Jacob Erlbeck wrote:
hi jacob!
This patch modifies this to print the output_enabled flags to stderr instead. The bits in conn_mode are shown as RECV, SEND, and LOOP. This does not reduce the significance of the test, since there is an assertion already that verifies the values of the output_enabled flags with respect to the conn_mode.
there is no occurrence of "LOOP" in the testcase (and it can't be trigerred through mgcp anyway?).
endp->conn_mode & MGCP_CONN_LOOPBACK &~MGCP_CONN_RECV_SEND ?
Why the & ~MGCP_CONN_RECV_SEND?