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.
diff --git a/openbsc/include/openbsc/mncc.h b/openbsc/include/openbsc/mncc.h
index 4a99bb1..ffc247b 100644
--- a/openbsc/include/openbsc/mncc.h
+++ b/openbsc/include/openbsc/mncc.h
@@ -95,6 +95,7 @@
 
 #define GSM_TCHF_FRAME		0x0300
 #define GSM_TCHF_FRAME_EFR	0x0301
+#define GSM_TCHF_BAD_FRAME	0x03ff
 
 #define MNCC_SOCKET_HELLO	0x0400
 
diff --git a/openbsc/include/openbsc/trau_mux.h b/openbsc/include/openbsc/trau_mux.h
index 2c01b06..3de50f7 100644
--- a/openbsc/include/openbsc/trau_mux.h
+++ b/openbsc/include/openbsc/trau_mux.h
@@ -53,3 +53,13 @@
 
 /* callback invoked if we receive TRAU frames */
 int subch_cb(struct subch_demux *dmx, int ch, uint8_t *data, int len, void *_priv);
+
+/* TRAU frame transcoding */
+struct msgb *trau_decode_fr(uint32_t callref,
+	const struct decoded_trau_frame *tf);
+struct msgb *trau_decode_efr(uint32_t callref,
+	const struct decoded_trau_frame *tf);
+void trau_encode_fr(struct decoded_trau_frame *tf,
+	const unsigned char *data);
+void trau_encode_efr(struct decoded_trau_frame *tf,
+	const unsigned char *data);