This adds two test cases: 1. Packet repetition (dSeq=0, dTS=0) 2. Broken seqNo (dSeq=0, dTS=160)
The second had been already present in the test cases, but it was a mere copy&paste mistake which turned out to be rather helpful. This patch therefore turns it into a documented test case.
Sponsored-by: On-Waves ehf --- openbsc/tests/mgcp/mgcp_test.c | 22 +++++++++++++++++++++- openbsc/tests/mgcp/mgcp_test.ok | 32 ++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 5 deletions(-)
diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index 9777a4d..b93ce7e 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -605,7 +605,27 @@ struct rtp_packet_info test_rtp_packets1[] = { {0.380000, 20, "\x80\x62\x00\x14\x00\x00\x8C\x58\x10\x20\x30\x40" "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, /* RTP: SeqNo=21, TS=36088 */ - {0.380000, 20, "\x80\x62\x00\x14\x00\x00\x8C\xF8\x10\x20\x30\x40" + {0.380000, 20, "\x80\x62\x00\x15\x00\x00\x8C\xF8\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* Repeat last packet */ + /* RTP: SeqNo=21, TS=36088 */ + {0.400000, 20, "\x80\x62\x00\x15\x00\x00\x8C\xF8\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* RTP: SeqNo=22, TS=36248 */ + {0.420000, 20, "\x80\x62\x00\x16\x00\x00\x8D\x98\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* RTP: SeqNo=23, TS=36408 */ + {0.440000, 20, "\x80\x62\x00\x17\x00\x00\x8E\x38\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* Don't increment SeqNo but increment timestamp by 160 */ + /* RTP: SeqNo=23, TS=36568 */ + {0.460000, 20, "\x80\x62\x00\x17\x00\x00\x8E\xD8\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* RTP: SeqNo=24, TS=36728 */ + {0.480000, 20, "\x80\x62\x00\x18\x00\x00\x8F\x78\x10\x20\x30\x40" + "\x01\x23\x45\x67\x89\xAB\xCD\xEF"}, + /* 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"}, };
diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index f9dd7cb..783f3a5 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -85,7 +85,13 @@ TS: 2480, dTS: 160, TS Errs: in 7, out 7 TS: 2640, dTS: 160, TS Errs: in 7, out 7 TS: 2960, dTS: 160, TS Errs: in 7, out 7 TS: 3120, dTS: 160, TS Errs: in 7, out 7 -TS: 3280, dTS: 160, TS Errs: in 8, out 8 +TS: 3280, dTS: 160, TS Errs: in 7, out 7 +TS: 3280, dTS: 160, TS Errs: in 7, out 7 +TS: 3440, dTS: 160, TS Errs: in 7, out 7 +TS: 3600, dTS: 160, TS Errs: in 7, out 7 +TS: 3760, dTS: 160, TS Errs: in 8, out 8 +TS: 3920, dTS: 160, TS Errs: in 8, out 8 +TS: 4080, dTS: 160, TS Errs: in 8, out 8 Testing packet error detection. Output SSRC changed to 11223344 TS: 0, dTS: 0, TS Errs: in 0, out 0 @@ -109,7 +115,13 @@ TS: 35288, dTS: 160, TS Errs: in 7, out 7 TS: 35448, dTS: 160, TS Errs: in 7, out 7 TS: 35768, dTS: 160, TS Errs: in 7, out 7 TS: 35928, dTS: 160, TS Errs: in 7, out 7 -TS: 36088, dTS: 160, TS Errs: in 8, out 8 +TS: 36088, dTS: 160, TS Errs: in 7, out 7 +TS: 36088, dTS: 160, TS Errs: in 7, out 7 +TS: 36248, dTS: 160, TS Errs: in 7, out 7 +TS: 36408, dTS: 160, TS Errs: in 7, out 7 +TS: 36568, dTS: 160, TS Errs: in 8, out 8 +TS: 36728, dTS: 160, TS Errs: in 8, out 8 +TS: 36888, dTS: 160, TS Errs: in 8, out 8 Testing packet error detection, patch timestamps. Output SSRC changed to 11223344 TS: 0, dTS: 0, TS Errs: in 0, out 0 @@ -133,7 +145,13 @@ TS: 35368, dTS: 160, TS Errs: in 7, out 0 TS: 35528, dTS: 160, TS Errs: in 7, out 0 TS: 35848, dTS: 160, TS Errs: in 7, out 0 TS: 36008, dTS: 160, TS Errs: in 7, out 0 -TS: 36008, dTS: 160, TS Errs: in 8, out 0 +TS: 36168, dTS: 160, TS Errs: in 7, out 0 +TS: 36168, dTS: 160, TS Errs: in 7, out 0 +TS: 36328, dTS: 160, TS Errs: in 7, out 0 +TS: 36488, dTS: 160, TS Errs: in 7, out 0 +TS: 36488, dTS: 160, TS Errs: in 8, out 0 +TS: 36648, dTS: 160, TS Errs: in 8, out 0 +TS: 36808, dTS: 160, TS Errs: in 8, out 0 Testing packet error detection, patch SSRC, patch timestamps. Output SSRC changed to 11223344 TS: 0, dTS: 0, TS Errs: in 0, out 0 @@ -156,5 +174,11 @@ TS: 2560, dTS: 160, TS Errs: in 7, out 0 TS: 2720, dTS: 160, TS Errs: in 7, out 0 TS: 3040, dTS: 160, TS Errs: in 7, out 0 TS: 3200, dTS: 160, TS Errs: in 7, out 0 -TS: 3200, dTS: 160, TS Errs: in 8, out 0 +TS: 3360, dTS: 160, TS Errs: in 7, out 0 +TS: 3360, dTS: 160, TS Errs: in 7, out 0 +TS: 3520, dTS: 160, TS Errs: in 7, out 0 +TS: 3680, dTS: 160, TS Errs: in 7, out 0 +TS: 3680, dTS: 160, TS Errs: in 8, out 0 +TS: 3840, dTS: 160, TS Errs: in 8, out 0 +TS: 4000, dTS: 160, TS Errs: in 8, out 0 Done
Currently the counter and output timestamp values are written out for each packet. This makes it difficult to see in the diffs what has been changed significantly.
This patch changes this by showing differences for those values. The absolute input values are also shown now. In addition, the sequence numbers (the difference for the output value) are written, too.
Sponsored-by: On-Waves ehf --- openbsc/tests/mgcp/mgcp_test.c | 24 ++- openbsc/tests/mgcp/mgcp_test.ok | 324 ++++++++++++++++++++++++++------------- 2 files changed, 236 insertions(+), 112 deletions(-)
diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index b93ce7e..8b1b924 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -644,6 +644,10 @@ static void test_packet_error_detection(int patch_ssrc, int patch_ts) struct sockaddr_in addr = {0}; char buffer[4096]; uint32_t last_ssrc = 0; + uint32_t last_timestamp = 0; + uint32_t last_seqno = 0; + int last_in_ts_err_cnt = 0; + int last_out_ts_err_cnt = 0;
printf("Testing packet error detection%s%s.\n", patch_ssrc ? ", patch SSRC" : "", @@ -687,11 +691,23 @@ static void test_packet_error_detection(int patch_ssrc, int patch_ts) last_ssrc = state.out_stream.ssrc; }
- printf("TS: %d, dTS: %d, TS Errs: in %d, out %d\n", - state.out_stream.last_timestamp, + printf("In TS: %d, dTS: %d, Seq: %d\n", + state.in_stream.last_timestamp, + state.in_stream.last_tsdelta, + state.in_stream.last_seq); + + printf("Out TS change: %d, dTS: %d, Seq change: %d, " + "TS Err change: in %+d, out %+d\n", + state.out_stream.last_timestamp - last_timestamp, state.out_stream.last_tsdelta, - state.in_stream.err_ts_counter, - state.out_stream.err_ts_counter); + state.out_stream.last_seq - last_seqno, + state.in_stream.err_ts_counter - last_in_ts_err_cnt, + state.out_stream.err_ts_counter - last_out_ts_err_cnt); + + 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; } }
diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index 783f3a5..03c1cf0 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -65,120 +65,228 @@ Parsing result: 0 Parsing result: 0 Testing packet error detection, patch SSRC. Output SSRC changed to 11223344 -TS: 0, dTS: 0, TS Errs: in 0, out 0 -TS: 160, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 1, out 1 -TS: 480, dTS: 160, TS Errs: in 1, out 1 -TS: 640, dTS: 160, TS Errs: in 1, out 1 -TS: 960, dTS: 320, TS Errs: in 2, out 2 -TS: 1120, dTS: 160, TS Errs: in 3, out 3 -TS: 1280, dTS: 160, TS Errs: in 3, out 3 -TS: 1400, dTS: 120, TS Errs: in 4, out 4 -TS: 1560, dTS: 160, TS Errs: in 5, out 5 -TS: 1720, dTS: 160, TS Errs: in 5, out 5 -TS: 1880, dTS: 160, TS Errs: in 5, out 5 -TS: 2040, dTS: 160, TS Errs: in 5, out 5 -TS: 2200, dTS: 160, TS Errs: in 5, out 5 -TS: 2320, dTS: 120, TS Errs: in 6, out 6 -TS: 2480, dTS: 160, TS Errs: in 7, out 7 -TS: 2640, dTS: 160, TS Errs: in 7, out 7 -TS: 2960, dTS: 160, TS Errs: in 7, out 7 -TS: 3120, dTS: 160, TS Errs: in 7, out 7 -TS: 3280, dTS: 160, TS Errs: in 7, out 7 -TS: 3280, dTS: 160, TS Errs: in 7, out 7 -TS: 3440, dTS: 160, TS Errs: in 7, out 7 -TS: 3600, dTS: 160, TS Errs: in 7, out 7 -TS: 3760, dTS: 160, TS Errs: in 8, out 8 -TS: 3920, dTS: 160, TS Errs: in 8, out 8 -TS: 4080, dTS: 160, TS Errs: in 8, out 8 +In TS: 0, dTS: 0, Seq: 0 +Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +In TS: 160, dTS: 160, Seq: 1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 2 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 3 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 480, dTS: 160, Seq: 4 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 640, dTS: 160, Seq: 5 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 960, dTS: 320, Seq: 6 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1120, dTS: 160, Seq: 7 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1280, dTS: 160, Seq: 8 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 1400, dTS: 120, Seq: 9 +Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1560, dTS: 160, Seq: 10 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1720, dTS: 160, Seq: 11 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34688, dTS: 0, Seq: 12 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34848, dTS: 160, Seq: 13 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35008, dTS: 160, Seq: 14 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35128, dTS: 120, Seq: 15 +Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +In TS: 35288, dTS: 160, Seq: 16 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 35448, dTS: 160, Seq: 17 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35768, dTS: 160, Seq: 19 +Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +In TS: 35928, dTS: 160, Seq: 20 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +In TS: 36248, dTS: 160, Seq: 22 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36408, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36568, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +In TS: 36728, dTS: 160, Seq: 24 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36888, dTS: 160, Seq: 25 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Testing packet error detection. Output SSRC changed to 11223344 -TS: 0, dTS: 0, TS Errs: in 0, out 0 -TS: 160, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 1, out 1 -TS: 480, dTS: 160, TS Errs: in 1, out 1 -TS: 640, dTS: 160, TS Errs: in 1, out 1 -TS: 960, dTS: 320, TS Errs: in 2, out 2 -TS: 1120, dTS: 160, TS Errs: in 3, out 3 -TS: 1280, dTS: 160, TS Errs: in 3, out 3 -TS: 1400, dTS: 120, TS Errs: in 4, out 4 -TS: 1560, dTS: 160, TS Errs: in 5, out 5 -TS: 1720, dTS: 160, TS Errs: in 5, out 5 +In TS: 0, dTS: 0, Seq: 0 +Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +In TS: 160, dTS: 160, Seq: 1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 2 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 3 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 480, dTS: 160, Seq: 4 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 640, dTS: 160, Seq: 5 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 960, dTS: 320, Seq: 6 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1120, dTS: 160, Seq: 7 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1280, dTS: 160, Seq: 8 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 1400, dTS: 120, Seq: 9 +Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1560, dTS: 160, Seq: 10 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 1720, dTS: 160, Seq: 11 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Output SSRC changed to 10203040 -TS: 34688, dTS: 160, TS Errs: in 5, out 5 -TS: 34848, dTS: 160, TS Errs: in 5, out 5 -TS: 35008, dTS: 160, TS Errs: in 5, out 5 -TS: 35128, dTS: 120, TS Errs: in 6, out 6 -TS: 35288, dTS: 160, TS Errs: in 7, out 7 -TS: 35448, dTS: 160, TS Errs: in 7, out 7 -TS: 35768, dTS: 160, TS Errs: in 7, out 7 -TS: 35928, dTS: 160, TS Errs: in 7, out 7 -TS: 36088, dTS: 160, TS Errs: in 7, out 7 -TS: 36088, dTS: 160, TS Errs: in 7, out 7 -TS: 36248, dTS: 160, TS Errs: in 7, out 7 -TS: 36408, dTS: 160, TS Errs: in 7, out 7 -TS: 36568, dTS: 160, TS Errs: in 8, out 8 -TS: 36728, dTS: 160, TS Errs: in 8, out 8 -TS: 36888, dTS: 160, TS Errs: in 8, out 8 +In TS: 34688, dTS: 0, Seq: 12 +Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34848, dTS: 160, Seq: 13 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35008, dTS: 160, Seq: 14 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35128, dTS: 120, Seq: 15 +Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 +In TS: 35288, dTS: 160, Seq: 16 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +In TS: 35448, dTS: 160, Seq: 17 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35768, dTS: 160, Seq: 19 +Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +In TS: 35928, dTS: 160, Seq: 20 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +In TS: 36248, dTS: 160, Seq: 22 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36408, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36568, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 +In TS: 36728, dTS: 160, Seq: 24 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36888, dTS: 160, Seq: 25 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Testing packet error detection, patch timestamps. Output SSRC changed to 11223344 -TS: 0, dTS: 0, TS Errs: in 0, out 0 -TS: 160, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 0, out 0 -TS: 480, dTS: 160, TS Errs: in 1, out 0 -TS: 640, dTS: 160, TS Errs: in 1, out 0 -TS: 800, dTS: 160, TS Errs: in 1, out 0 -TS: 960, dTS: 160, TS Errs: in 2, out 0 -TS: 1120, dTS: 160, TS Errs: in 3, out 0 -TS: 1280, dTS: 160, TS Errs: in 3, out 0 -TS: 1440, dTS: 160, TS Errs: in 4, out 0 -TS: 1600, dTS: 160, TS Errs: in 5, out 0 -TS: 1760, dTS: 160, TS Errs: in 5, out 0 +In TS: 0, dTS: 0, Seq: 0 +Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +In TS: 160, dTS: 160, Seq: 1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 2 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 3 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 480, dTS: 160, Seq: 4 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 640, dTS: 160, Seq: 5 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 960, dTS: 320, Seq: 6 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1120, dTS: 160, Seq: 7 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1280, dTS: 160, Seq: 8 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 1400, dTS: 120, Seq: 9 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1560, dTS: 160, Seq: 10 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1720, dTS: 160, Seq: 11 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Output SSRC changed to 10203040 -TS: 34728, dTS: 160, TS Errs: in 5, out 0 -TS: 34888, dTS: 160, TS Errs: in 5, out 0 -TS: 35048, dTS: 160, TS Errs: in 5, out 0 -TS: 35208, dTS: 160, TS Errs: in 6, out 0 -TS: 35368, dTS: 160, TS Errs: in 7, out 0 -TS: 35528, dTS: 160, TS Errs: in 7, out 0 -TS: 35848, dTS: 160, TS Errs: in 7, out 0 -TS: 36008, dTS: 160, TS Errs: in 7, out 0 -TS: 36168, dTS: 160, TS Errs: in 7, out 0 -TS: 36168, dTS: 160, TS Errs: in 7, out 0 -TS: 36328, dTS: 160, TS Errs: in 7, out 0 -TS: 36488, dTS: 160, TS Errs: in 7, out 0 -TS: 36488, dTS: 160, TS Errs: in 8, out 0 -TS: 36648, dTS: 160, TS Errs: in 8, out 0 -TS: 36808, dTS: 160, TS Errs: in 8, out 0 +In TS: 34688, dTS: 0, Seq: 12 +Out TS change: 32968, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34848, dTS: 160, Seq: 13 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35008, dTS: 160, Seq: 14 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35128, dTS: 120, Seq: 15 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 35288, dTS: 160, Seq: 16 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 35448, dTS: 160, Seq: 17 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35768, dTS: 160, Seq: 19 +Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +In TS: 35928, dTS: 160, Seq: 20 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +In TS: 36248, dTS: 160, Seq: 22 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36408, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36568, dTS: 160, Seq: 23 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +1, out +0 +In TS: 36728, dTS: 160, Seq: 24 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36888, dTS: 160, Seq: 25 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Testing packet error detection, patch SSRC, patch timestamps. Output SSRC changed to 11223344 -TS: 0, dTS: 0, TS Errs: in 0, out 0 -TS: 160, dTS: 160, TS Errs: in 0, out 0 -TS: 320, dTS: 160, TS Errs: in 0, out 0 -TS: 480, dTS: 160, TS Errs: in 1, out 0 -TS: 640, dTS: 160, TS Errs: in 1, out 0 -TS: 800, dTS: 160, TS Errs: in 1, out 0 -TS: 960, dTS: 160, TS Errs: in 2, out 0 -TS: 1120, dTS: 160, TS Errs: in 3, out 0 -TS: 1280, dTS: 160, TS Errs: in 3, out 0 -TS: 1440, dTS: 160, TS Errs: in 4, out 0 -TS: 1600, dTS: 160, TS Errs: in 5, out 0 -TS: 1760, dTS: 160, TS Errs: in 5, out 0 -TS: 1920, dTS: 160, TS Errs: in 5, out 0 -TS: 2080, dTS: 160, TS Errs: in 5, out 0 -TS: 2240, dTS: 160, TS Errs: in 5, out 0 -TS: 2400, dTS: 160, TS Errs: in 6, out 0 -TS: 2560, dTS: 160, TS Errs: in 7, out 0 -TS: 2720, dTS: 160, TS Errs: in 7, out 0 -TS: 3040, dTS: 160, TS Errs: in 7, out 0 -TS: 3200, dTS: 160, TS Errs: in 7, out 0 -TS: 3360, dTS: 160, TS Errs: in 7, out 0 -TS: 3360, dTS: 160, TS Errs: in 7, out 0 -TS: 3520, dTS: 160, TS Errs: in 7, out 0 -TS: 3680, dTS: 160, TS Errs: in 7, out 0 -TS: 3680, dTS: 160, TS Errs: in 8, out 0 -TS: 3840, dTS: 160, TS Errs: in 8, out 0 -TS: 4000, dTS: 160, TS Errs: in 8, out 0 +In TS: 0, dTS: 0, Seq: 0 +Out TS change: 0, dTS: 0, Seq change: 0, TS Err change: in +0, out +0 +In TS: 160, dTS: 160, Seq: 1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 2 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 320, dTS: 160, Seq: 3 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 480, dTS: 160, Seq: 4 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 640, dTS: 160, Seq: 5 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 960, dTS: 320, Seq: 6 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1120, dTS: 160, Seq: 7 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1280, dTS: 160, Seq: 8 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 1400, dTS: 120, Seq: 9 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1560, dTS: 160, Seq: 10 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 1720, dTS: 160, Seq: 11 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34688, dTS: 0, Seq: 12 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 34848, dTS: 160, Seq: 13 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35008, dTS: 160, Seq: 14 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35128, dTS: 120, Seq: 15 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 35288, dTS: 160, Seq: 16 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +In TS: 35448, dTS: 160, Seq: 17 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 35768, dTS: 160, Seq: 19 +Out TS change: 320, dTS: 160, Seq change: 2, TS Err change: in +0, out +0 +In TS: 35928, dTS: 160, Seq: 20 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36088, dTS: 160, Seq: 21 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +0, out +0 +In TS: 36248, dTS: 160, Seq: 22 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36408, dTS: 160, Seq: 23 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36568, dTS: 160, Seq: 23 +Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +1, out +0 +In TS: 36728, dTS: 160, Seq: 24 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 +In TS: 36888, dTS: 160, Seq: 25 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Done
Currently, all timestamps are force to SeqNo*d + C which is more than required by the nanoBTS which seems to be sensitive to alignment errors only (dTS != k*d, d = ptime * rate = 160).
This patch replaces the force_constant_timing feature by a force_aligned_timing feature. The timestamp offset will only be changed (and timestamp errors counted) when the alignment does not match to the raster based on ptime (default 20ms).
The VTY interface does not change.
Sponsored-by: On-Waves ehf --- openbsc/include/openbsc/mgcp.h | 2 +- openbsc/include/openbsc/mgcp_internal.h | 2 +- openbsc/src/libmgcp/mgcp_network.c | 145 ++++++++++++++++++++++--------- openbsc/src/libmgcp/mgcp_protocol.c | 4 +- openbsc/src/libmgcp/mgcp_vty.c | 20 ++--- openbsc/tests/mgcp/mgcp_test.c | 2 +- openbsc/tests/mgcp/mgcp_test.ok | 44 +++++----- 7 files changed, 143 insertions(+), 76 deletions(-)
diff --git a/openbsc/include/openbsc/mgcp.h b/openbsc/include/openbsc/mgcp.h index 0d64590..335c83d 100644 --- a/openbsc/include/openbsc/mgcp.h +++ b/openbsc/include/openbsc/mgcp.h @@ -121,7 +121,7 @@ struct mgcp_trunk_config {
/* RTP patching */ int force_constant_ssrc; /* 0: don't, 1: once */ - int force_constant_timing; + int force_aligned_timing;
/* spec handling */ int force_realloc; diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h index 20c433a..a9ae33c 100644 --- a/openbsc/include/openbsc/mgcp_internal.h +++ b/openbsc/include/openbsc/mgcp_internal.h @@ -87,7 +87,7 @@ struct mgcp_rtp_end {
/* RTP patching */ int force_constant_ssrc; /* -1: always, 0: don't, 1: once */ - int force_constant_timing; + int force_aligned_timing;
/* * Each end has a socket... diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c index 40227af..657019e 100644 --- a/openbsc/src/libmgcp/mgcp_network.c +++ b/openbsc/src/libmgcp/mgcp_network.c @@ -134,29 +134,47 @@ int mgcp_send_dummy(struct mgcp_endpoint *endp) endp->net_end.rtp_port, buf, 1); }
+static int32_t compute_timestamp_aligment_error(struct mgcp_rtp_stream_state *sstate, + int ptime, uint32_t timestamp) +{ + int32_t timestamp_delta; + + if (ptime == 0) + return 0; + + /* Align according to: T - Tlast = k * Tptime */ + timestamp_delta = timestamp - sstate->last_timestamp; + + return timestamp_delta % ptime; +} + static int check_rtp_timestamp(struct mgcp_endpoint *endp, - struct mgcp_rtp_stream_state *state, + struct mgcp_rtp_state *state, + struct mgcp_rtp_stream_state *sstate, struct mgcp_rtp_end *rtp_end, struct sockaddr_in *addr, uint16_t seq, uint32_t timestamp, const char *text, int32_t *tsdelta_out) { int32_t tsdelta; + int32_t timestamp_error;
/* Not fully intialized, skip */ - if (state->last_tsdelta == 0 && timestamp == state->last_timestamp) + if (sstate->last_tsdelta == 0 && timestamp == sstate->last_timestamp) return 0;
- if (seq == state->last_seq) { - if (timestamp != state->last_timestamp) { - state->err_ts_counter += 1; + if (seq == sstate->last_seq) { + if (timestamp != sstate->last_timestamp) { + sstate->err_ts_counter += 1; LOGP(DMGCP, LOGL_ERROR, "The %s timestamp delta is != 0 but the sequence " - "number %d is the same" + "number %d is the same, " + "TS offset: %d, SeqNo offset: %d " "on 0x%x SSRC: %u timestamp: %u " "from %s:%d in %d\n", text, seq, - ENDPOINT_NUMBER(endp), state->ssrc, timestamp, + state->timestamp_offset, state->seq_offset, + ENDPOINT_NUMBER(endp), sstate->ssrc, timestamp, inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), endp->conn_mode); } @@ -164,31 +182,30 @@ static int check_rtp_timestamp(struct mgcp_endpoint *endp, }
tsdelta = - (int32_t)(timestamp - state->last_timestamp) / - (int16_t)(seq - state->last_seq); + (int32_t)(timestamp - sstate->last_timestamp) / + (int16_t)(seq - sstate->last_seq);
if (tsdelta == 0) { - state->err_ts_counter += 1; - LOGP(DMGCP, LOGL_ERROR, + /* Don't update *tsdelta_out */ + LOGP(DMGCP, LOGL_NOTICE, "The %s timestamp delta is %d " "on 0x%x SSRC: %u timestamp: %u " "from %s:%d in %d\n", text, tsdelta, - ENDPOINT_NUMBER(endp), state->ssrc, timestamp, + ENDPOINT_NUMBER(endp), sstate->ssrc, timestamp, inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), endp->conn_mode);
return 0; }
- if (state->last_tsdelta != tsdelta) { - if (state->last_tsdelta) { - state->err_ts_counter += 1; - LOGP(DMGCP, LOGL_ERROR, + if (sstate->last_tsdelta != tsdelta) { + if (sstate->last_tsdelta) { + LOGP(DMGCP, LOGL_INFO, "The %s timestamp delta changes from %d to %d " "on 0x%x SSRC: %u timestamp: %u from %s:%d in %d\n", - text, state->last_tsdelta, tsdelta, - ENDPOINT_NUMBER(endp), state->ssrc, timestamp, + text, sstate->last_tsdelta, tsdelta, + ENDPOINT_NUMBER(endp), sstate->ssrc, timestamp, inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), endp->conn_mode); } @@ -197,6 +214,25 @@ static int check_rtp_timestamp(struct mgcp_endpoint *endp, if (tsdelta_out) *tsdelta_out = tsdelta;
+ timestamp_error = + compute_timestamp_aligment_error(sstate, state->packet_duration, + timestamp); + + if (timestamp_error) { + sstate->err_ts_counter += 1; + LOGP(DMGCP, LOGL_NOTICE, + "The %s timestamp has an alignment error of %d " + "on 0x%x SSRC: %u " + "SeqNo delta: %d, TS delta: %d, dTS/dSeq: %d " + "from %s:%d in %d\n", + text, timestamp_error, + ENDPOINT_NUMBER(endp), sstate->ssrc, + (int16_t)(seq - sstate->last_seq), + (int32_t)(timestamp - sstate->last_timestamp), + tsdelta, + inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), + endp->conn_mode); + } return 1; }
@@ -253,6 +289,42 @@ static int adjust_rtp_timestamp_offset(struct mgcp_endpoint *endp, return timestamp_offset; }
+/* Set the timestamp offset according to the packet duration. */ +static int align_rtp_timestamp_offset(struct mgcp_endpoint *endp, + struct mgcp_rtp_state *state, + struct mgcp_rtp_end *rtp_end, + struct sockaddr_in *addr, + uint32_t timestamp) +{ + int timestamp_error = 0; + int ptime = state->packet_duration; + + /* Align according to: T + Toffs - Tlast = k * Tptime */ + + timestamp_error = compute_timestamp_aligment_error( + &state->out_stream, ptime, + timestamp + state->timestamp_offset); + + if (timestamp_error) { + state->timestamp_offset += ptime - timestamp_error; + + LOGP(DMGCP, LOGL_NOTICE, + "Corrected timestamp alignment error of %d on 0x%x SSRC: %u " + "new TS offset: %d, " + "from %s:%d in %d\n", + timestamp_error, + ENDPOINT_NUMBER(endp), state->in_stream.ssrc, + state->timestamp_offset, inet_ntoa(addr->sin_addr), + ntohs(addr->sin_port), endp->conn_mode); + } + + OSMO_ASSERT(compute_timestamp_aligment_error(&state->out_stream, ptime, + timestamp + state->timestamp_offset) == 0); + + return timestamp_error; +} + + /** * The RFC 3550 Appendix A assumes there are multiple sources but * some of the supported endpoints (e.g. the nanoBTS) can only handle @@ -300,15 +372,15 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta state->seq_offset, state->packet_duration, inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), endp->conn_mode); - if (state->packet_duration == 0 && rtp_end->force_constant_timing) - LOGP(DMGCP, LOGL_ERROR, - "Cannot patch timestamps on 0x%x: " - "RTP packet duration is unknown, SSRC: %u, " - "from %s:%d in %d\n", - ENDPOINT_NUMBER(endp), state->in_stream.ssrc, - inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), - endp->conn_mode); - + if (state->packet_duration == 0) { + state->packet_duration = rtp_end->rate * 20 / 1000; + LOGP(DMGCP, LOGL_NOTICE, + "Fixed packet duration is not available on 0x%x, " + "using fixed 20ms instead: %d from %s:%d in %d\n", + ENDPOINT_NUMBER(endp), state->packet_duration, + inet_ntoa(addr->sin_addr), ntohs(addr->sin_port), + endp->conn_mode); + } } else if (state->in_stream.ssrc != ssrc) { LOGP(DMGCP, LOGL_NOTICE, "The SSRC changed on 0x%x: %u -> %u " @@ -346,7 +418,7 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta state->in_stream.last_tsdelta = 0; } else { /* Compute current per-packet timestamp delta */ - check_rtp_timestamp(endp, &state->in_stream, rtp_end, addr, + check_rtp_timestamp(endp, state, &state->in_stream, rtp_end, addr, seq, timestamp, "input", &state->in_stream.last_tsdelta);
@@ -358,15 +430,10 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta state->in_stream.last_timestamp = timestamp; state->in_stream.last_seq = seq;
- if (rtp_end->force_constant_timing && - state->out_stream.ssrc == ssrc && state->packet_duration) { - /* Update the timestamp offset */ - const int delta_seq = - seq + state->seq_offset - state->out_stream.last_seq; - - adjust_rtp_timestamp_offset(endp, state, rtp_end, addr, - delta_seq, timestamp); - } + if (rtp_end->force_aligned_timing && + state->out_stream.ssrc == ssrc && state->packet_duration) + /* Align the timestamp offset */ + align_rtp_timestamp_offset(endp, state, rtp_end, addr, timestamp);
/* Store the updated SSRC back to the packet */ if (state->patch_ssrc) @@ -382,8 +449,8 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta
/* Check again, whether the timestamps are still valid */ if (state->out_stream.ssrc == ssrc) - check_rtp_timestamp(endp, &state->out_stream, rtp_end, addr, - seq, timestamp, "output", + check_rtp_timestamp(endp, state, &state->out_stream, rtp_end, + addr, seq, timestamp, "output", &state->out_stream.last_tsdelta);
/* diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c index 7d3ad74..ddec44d 100644 --- a/openbsc/src/libmgcp/mgcp_protocol.c +++ b/openbsc/src/libmgcp/mgcp_protocol.c @@ -700,13 +700,13 @@ void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,
int patch_ssrc = expect_ssrc_change && tcfg->force_constant_ssrc;
- rtp->force_constant_timing = tcfg->force_constant_timing; + rtp->force_aligned_timing = tcfg->force_aligned_timing; rtp->force_constant_ssrc = patch_ssrc ? 1 : 0;
LOGP(DMGCP, LOGL_DEBUG, "Configuring RTP endpoint: local port %d%s%s\n", ntohs(rtp->rtp_port), - rtp->force_constant_timing ? ", force constant timing" : "", + rtp->force_aligned_timing ? ", force constant timing" : "", rtp->force_constant_ssrc ? ", force constant ssrc" : ""); }
diff --git a/openbsc/src/libmgcp/mgcp_vty.c b/openbsc/src/libmgcp/mgcp_vty.c index 235b8bd..8411b4a 100644 --- a/openbsc/src/libmgcp/mgcp_vty.c +++ b/openbsc/src/libmgcp/mgcp_vty.c @@ -89,11 +89,11 @@ static int config_write_mgcp(struct vty *vty) vty_out(vty, " rtcp-omit%s", VTY_NEWLINE); else vty_out(vty, " no rtcp-omit%s", VTY_NEWLINE); - if (g_cfg->trunk.force_constant_ssrc || g_cfg->trunk.force_constant_timing) { + if (g_cfg->trunk.force_constant_ssrc || g_cfg->trunk.force_aligned_timing) { vty_out(vty, " %srtp-patch ssrc%s", g_cfg->trunk.force_constant_ssrc ? "" : "no ", VTY_NEWLINE); vty_out(vty, " %srtp-patch timestamp%s", - g_cfg->trunk.force_constant_timing ? "" : "no ", VTY_NEWLINE); + g_cfg->trunk.force_aligned_timing ? "" : "no ", VTY_NEWLINE); } else vty_out(vty, " no rtp-patch%s", VTY_NEWLINE); if (g_cfg->trunk.audio_payload != -1) @@ -480,7 +480,7 @@ DEFUN(cfg_mgcp_patch_rtp_ts, "Adjust RTP timestamp\n" ) { - g_cfg->trunk.force_constant_timing = 1; + g_cfg->trunk.force_aligned_timing = 1; return CMD_SUCCESS; }
@@ -491,7 +491,7 @@ DEFUN(cfg_mgcp_no_patch_rtp_ts, "Adjust RTP timestamp\n" ) { - g_cfg->trunk.force_constant_timing = 0; + g_cfg->trunk.force_aligned_timing = 0; return CMD_SUCCESS; }
@@ -501,7 +501,7 @@ DEFUN(cfg_mgcp_no_patch_rtp, NO_STR RTP_PATCH_STR) { g_cfg->trunk.force_constant_ssrc = 0; - g_cfg->trunk.force_constant_timing = 0; + g_cfg->trunk.force_aligned_timing = 0; return CMD_SUCCESS; }
@@ -598,11 +598,11 @@ static int config_write_trunk(struct vty *vty) vty_out(vty, " rtcp-omit%s", VTY_NEWLINE); else vty_out(vty, " no rtcp-omit%s", VTY_NEWLINE); - if (trunk->force_constant_ssrc || trunk->force_constant_timing) { + if (trunk->force_constant_ssrc || trunk->force_aligned_timing) { vty_out(vty, " %srtp-patch ssrc%s", trunk->force_constant_ssrc ? "" : "no ", VTY_NEWLINE); vty_out(vty, " %srtp-patch timestamp%s", - trunk->force_constant_timing ? "" : "no ", VTY_NEWLINE); + trunk->force_aligned_timing ? "" : "no ", VTY_NEWLINE); } else vty_out(vty, " no rtp-patch%s", VTY_NEWLINE); if (trunk->audio_fmtp_extra) @@ -747,7 +747,7 @@ DEFUN(cfg_trunk_patch_rtp_ts, ) { struct mgcp_trunk_config *trunk = vty->index; - trunk->force_constant_timing = 1; + trunk->force_aligned_timing = 1; return CMD_SUCCESS; }
@@ -759,7 +759,7 @@ DEFUN(cfg_trunk_no_patch_rtp_ts, ) { struct mgcp_trunk_config *trunk = vty->index; - trunk->force_constant_timing = 0; + trunk->force_aligned_timing = 0; return CMD_SUCCESS; }
@@ -770,7 +770,7 @@ DEFUN(cfg_trunk_no_patch_rtp, { struct mgcp_trunk_config *trunk = vty->index; trunk->force_constant_ssrc = 0; - trunk->force_constant_timing = 0; + trunk->force_aligned_timing = 0; return CMD_SUCCESS; }
diff --git a/openbsc/tests/mgcp/mgcp_test.c b/openbsc/tests/mgcp/mgcp_test.c index 8b1b924..3cfc183 100644 --- a/openbsc/tests/mgcp/mgcp_test.c +++ b/openbsc/tests/mgcp/mgcp_test.c @@ -660,7 +660,7 @@ static void test_packet_error_detection(int patch_ssrc, int patch_ts) trunk.number_endpoints = 1; trunk.endpoints = &endp; trunk.force_constant_ssrc = patch_ssrc; - trunk.force_constant_timing = patch_ts; + trunk.force_aligned_timing = patch_ts;
endp.tcfg = &trunk;
diff --git a/openbsc/tests/mgcp/mgcp_test.ok b/openbsc/tests/mgcp/mgcp_test.ok index 03c1cf0..638ac92 100644 --- a/openbsc/tests/mgcp/mgcp_test.ok +++ b/openbsc/tests/mgcp/mgcp_test.ok @@ -72,21 +72,21 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 3 -Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 960, dTS: 320, Seq: 6 -Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 In TS: 1120, dTS: 160, Seq: 7 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 In TS: 1560, dTS: 160, Seq: 10 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 34688, dTS: 0, Seq: 12 @@ -98,7 +98,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 In TS: 35288, dTS: 160, Seq: 16 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35768, dTS: 160, Seq: 19 @@ -128,21 +128,21 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 3 -Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 960, dTS: 320, Seq: 6 -Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 In TS: 1120, dTS: 160, Seq: 7 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 In TS: 1560, dTS: 160, Seq: 10 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Output SSRC changed to 10203040 @@ -155,7 +155,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 120, dTS: 120, Seq change: 1, TS Err change: in +1, out +1 In TS: 35288, dTS: 160, Seq: 16 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35768, dTS: 160, Seq: 19 @@ -185,21 +185,21 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 3 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 960, dTS: 320, Seq: 6 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 In TS: 1120, dTS: 160, Seq: 7 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 In TS: 1560, dTS: 160, Seq: 10 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 Output SSRC changed to 10203040 @@ -212,7 +212,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 In TS: 35288, dTS: 160, Seq: 16 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35768, dTS: 160, Seq: 19 @@ -228,7 +228,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36568, dTS: 160, Seq: 23 -Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36888, dTS: 160, Seq: 25 @@ -242,21 +242,21 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 3 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 480, dTS: 160, Seq: 4 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 640, dTS: 160, Seq: 5 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 960, dTS: 320, Seq: 6 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 320, dTS: 320, Seq change: 1, TS Err change: in +0, out +0 In TS: 1120, dTS: 160, Seq: 7 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1280, dTS: 160, Seq: 8 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1400, dTS: 120, Seq: 9 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 In TS: 1560, dTS: 160, Seq: 10 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 1720, dTS: 160, Seq: 11 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 34688, dTS: 0, Seq: 12 @@ -268,7 +268,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35128, dTS: 120, Seq: 15 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 In TS: 35288, dTS: 160, Seq: 16 -Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35448, dTS: 160, Seq: 17 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 35768, dTS: 160, Seq: 19 @@ -284,7 +284,7 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36408, dTS: 160, Seq: 23 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36568, dTS: 160, Seq: 23 -Out TS change: 0, dTS: 160, Seq change: 0, TS Err change: in +1, out +0 +Out TS change: 160, dTS: 160, Seq change: 0, TS Err change: in +1, out +1 In TS: 36728, dTS: 160, Seq: 24 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 36888, dTS: 160, Seq: 25
On Wed, Dec 18, 2013 at 12:54:51PM +0100, Jacob Erlbeck wrote:
+static int align_rtp_timestamp_offset(struct mgcp_endpoint *endp,
The caller do not check the return value and there is a side-effect to state. I would change it to void. Same goes for align_rtp_timestamp_offset.
@@ -72,21 +72,21 @@ Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 2 Out TS change: 160, dTS: 160, Seq change: 1, TS Err change: in +0, out +0 In TS: 320, dTS: 160, Seq: 3 -Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +1, out +1 +Out TS change: 0, dTS: 160, Seq change: 1, TS Err change: in +0, out +0
What do you think about including the absolute time of the output as well? The other thing that I think is not tested with the data is re-ordering of packages?
kind regards holger