aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/tests/trau/trau_test.c
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-12-06 16:59:10 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-12-19 10:12:28 +0100
commitd074f8f3964e3d98081736a42ab2c839987e0159 (patch)
tree0afe3de08ce44ac7504771667166c45d954be895 /openbsc/tests/trau/trau_test.c
parentb6f95161935969c270ef42f1c31e6957df5afe31 (diff)
Add EFR support to TRAU muxer + test case
Decoding and encoding of FR and EFR TRAU frames are put into seperate functions. CRC check is done to detect bad EFR TRAU frames. The test case includes FR and EFR transcoding. EFR support was tested with Nokia InSite BTS and Siemens BS11.
Diffstat (limited to 'openbsc/tests/trau/trau_test.c')
-rw-r--r--openbsc/tests/trau/trau_test.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/openbsc/tests/trau/trau_test.c b/openbsc/tests/trau/trau_test.c
new file mode 100644
index 000000000..f8a48dbd8
--- /dev/null
+++ b/openbsc/tests/trau/trau_test.c
@@ -0,0 +1,82 @@
+/* (C) 2013 by Andreas Eversberg <jolly@eversberg.eu>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <osmocom/abis/trau_frame.h>
+#include <openbsc/trau_mux.h>
+#include <osmocom/core/msgb.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+void test_trau_fr_efr(unsigned char *data)
+{
+ struct decoded_trau_frame tf;
+ struct msgb *msg;
+ struct gsm_data_frame *frame;
+
+ printf("Testing TRAU FR transcoding.\n");
+ data[0] = 0xd0;
+ trau_encode_fr(&tf, data);
+ tf.c_bits[11] = 0; /* clear BFI */
+ msg = trau_decode_fr(1, &tf);
+ OSMO_ASSERT(msg != NULL);
+ frame = (struct gsm_data_frame *)msg->data;
+ OSMO_ASSERT(frame->msg_type == GSM_TCHF_FRAME);
+ OSMO_ASSERT(!memcmp(frame->data, data, 33));
+ msgb_free(msg);
+
+ printf("Testing TRAU EFR transcoding.\n");
+ data[0] = 0xc0;
+ trau_encode_efr(&tf, data);
+ OSMO_ASSERT(tf.d_bits[0] == 1); /* spare bit must be 1 */
+ tf.c_bits[11] = 0; /* clear BFI */
+ msg = trau_decode_efr(1, &tf);
+ OSMO_ASSERT(msg != NULL);
+ frame = (struct gsm_data_frame *)msg->data;
+ OSMO_ASSERT(frame->msg_type == GSM_TCHF_FRAME_EFR);
+ OSMO_ASSERT(!memcmp(frame->data, data, 31));
+
+ printf("Testing TRAU EFR decoding with CRC error.\n");
+ tf.d_bits[0] = 0; /* spare bit must be included */
+ msg = trau_decode_efr(1, &tf);
+ OSMO_ASSERT(msg != NULL);
+ frame = (struct gsm_data_frame *)msg->data;
+ OSMO_ASSERT(frame->msg_type == GSM_TCHF_BAD_FRAME);
+ msgb_free(msg);
+}
+
+int main()
+{
+ unsigned char data[33];
+ int i;
+
+ memset(data, 0x00, sizeof(data));
+ test_trau_fr_efr(data);
+ memset(data, 0xff, sizeof(data));
+ test_trau_fr_efr(data);
+ srandom(42);
+ for (i = 0; i < sizeof(data); i++)
+ data[i] = random();
+ test_trau_fr_efr(data);
+ printf("Done\n");
+ return 0;
+}
+
+/* stubs */
+void vty_out() {}