pcu_sock: Forward imm.ass PCU originated messages

The PCU sends imm.ass messages in response to a rach request. Those
messages need to be forwarded to RSL in order to get them send. This
commit introduces the required functionality for that

Change-Id: Ice099c4ed7008200ed179e581aba1899c6c29455
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 62c12a8..d750df4 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -1993,6 +1993,7 @@
 	struct e1inp_sign_link *sign_link = msg->dst;
 	struct abis_rsl_dchan_hdr *rslh = msgb_l2(msg);
 	int rc = 0;
+	uint32_t tlli;
 
 	msg->lchan = lchan_lookup(sign_link->trx, rslh->chan_nr,
 				  "Abis RSL rx CCHAN: ");
@@ -2013,6 +2014,22 @@
 		LOGP(DRSL, LOGL_NOTICE, "Unimplemented Abis RSL TRX message "
 			"type 0x%02x\n", rslh->c.msg_type);
 		break;
+	case 0x10: /* Ericsson specific: Immediate Assign Sent */
+		/* FIXME: Replace the messy message parsing below
+		 * with proper TV parser */
+		LOGP(DRSL, LOGL_INFO, "IMM.ass sent\n");
+		if(msg->len < 8)
+			LOGP(DRSL, LOGL_ERROR, "short IMM.ass sent message!\n");
+		else if(msg->data[4] != 0xf1)
+			LOGP(DRSL, LOGL_ERROR, "unsupported IMM.ass message format! (please fix)\n");
+		else {
+			tlli =  msg->data[8];
+			tlli |= msg->data[7] << 8;
+			tlli |= msg->data[6] << 16;
+			tlli |= msg->data[5] << 24;
+			pcu_tx_imm_ass_sent(sign_link->trx->bts, tlli);
+		}
+		break;
 	default:
 		LOGP(DRSL, LOGL_NOTICE, "Unknown Abis RSL TRX message type "
 			"0x%02x\n", rslh->c.msg_type);