RSL_Types: Add various IPA / Abis-IP specific IEs + templates
Change-Id: I683e7c23b217a993e0d8f079e5bf1a10403420bb
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 3e9baaa..a807ce2 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -487,6 +487,39 @@
RSL_SYSTEM_INFO_20 ('00101101'B)
} with { variant "FIELDLENGTH(8)" }
+ type record RSL_IE_IPA_ConnectionStats {
+ uint8_t len,
+ uint32_t tx_packets,
+ uint32_t tx_octets,
+ uint32_t rx_packets,
+ uint32_t rx_octets,
+ uint32_t lost_packets,
+ uint32_t jitter,
+ uint32_t avg_delay
+ } with { variant (len) "LENGTHTO(tx_packets,tx_octets,rx_packets,rx_octets,lost_packets,jitter,avg_delay)" }
+
+ type enumerated RSL_IPA_SpeechMode {
+ RSL_IPA_SPM_SENDRECV ('00'B),
+ RSL_IPA_SPM_RECVONLY ('01'B),
+ RSL_IPA_SPM_SENDONLY ('10'B),
+ RSL_IPA_SPM_RESERVED ('11'B)
+ } with { variant "FIELDLENGTH(2)" }
+
+ type enumerated RSL_IPA_Codec {
+ RSL_IPA_CODEC_FR ('0000'B),
+ RSL_IPA_CODEC_EFR ('0001'B),
+ RSL_IPA_CODEC_AMR_F ('0010'B),
+ RSL_IPA_CODEC_HR ('0011'B),
+ RSL_IPA_CODEC_AMR_H ('0101'B),
+ RSL_IPA_CODEC_RTP_PT ('1111'B)
+ } with { variant "FIELDLENGTH(4)" }
+
+ type record RSL_IE_IPA_SpeechMode {
+ BIT2 reserved,
+ RSL_IPA_SpeechMode mode,
+ RSL_IPA_Codec codec
+ }
+
/* union of all IE bodies */
type union RSL_IE_Body {
RslChannelNr chan_nr,
@@ -516,6 +549,16 @@
RSL_LV full_imm_ass_info,
RSL_LV ms_identity,
+ uint16_t ipa_conn_id,
+ uint16_t ipa_local_port,
+ uint16_t ipa_remote_port,
+ uint32_t ipa_local_ip,
+ uint32_t ipa_remote_ip,
+ uint8_t ipa_rtp_pt,
+ uint8_t ipa_rtp_pt2,
+ RSL_IE_IPA_ConnectionStats ipa_stats,
+ RSL_IE_IPA_SpeechMode ipa_speech_mode,
+
RSL_LV other
}
@@ -553,6 +596,16 @@
ms_identity, iei = RSL_IE_MS_IDENTITY;
other, iei = RSL_IE_FULL_BCCH_INFO;
+ ipa_conn_id, iei = RSL_IE_IPAC_CONN_ID;
+ ipa_remote_ip, iei = RSL_IE_IPAC_REMOTE_IP;
+ ipa_remote_port, iei = RSL_IE_IPAC_REMOTE_PORT;
+ ipa_local_ip, iei = RSL_IE_IPAC_LOCAL_IP;
+ ipa_local_port, iei = RSL_IE_IPAC_LOCAL_PORT;
+ ipa_rtp_pt, iei = RSL_IE_IPAC_RTP_PAYLOAD;
+ ipa_rtp_pt2, iei = RSL_IE_IPAC_RTP_PAYLOAD2;
+ ipa_stats, iei = RSL_IE_IPAC_CONN_STAT;
+ ipa_speech_mode, iei = RSL_IE_IPAC_SPEECH_MODE;
+
other, OTHERWISE;
)" };
@@ -866,4 +919,177 @@
}
}
+
+ /* Abis/IP specific messages */
+
+ template RSL_Message tr_RSL_IPA_CRCX(template RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ *
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_CRCX_ACK(RslChannelNr chan_nr,
+ uint16_t ipa_conn_id, uint32_t local_ip,
+ uint16_t local_port, uint7_t rtp_pt2) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_IP, RSL_IE_Body:{ipa_local_ip := local_ip}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_PORT, RSL_IE_Body:{ipa_local_port := local_port}),
+ t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_CRCX_NACK(RslChannelNr chan_nr, RSL_Cause cause) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+ template RSL_Message tr_RSL_IPA_MDCX(template RslChannelNr chan_nr,
+ template uint16_t ipa_conn_id) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_MDCX,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ *
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_MDCX_ACK(RslChannelNr chan_nr, template uint16_t ipa_conn_id,
+ uint32_t remote_ip, uint16_t remote_port,
+ uint7_t rtp_pt2) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ /* optional */
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_REMOTE_IP, RSL_IE_Body:{ipa_remote_ip := remote_ip}),
+ t_RSL_IE(RSL_IE_IPAC_REMOTE_PORT, RSL_IE_Body:{ipa_remote_port := remote_port}),
+ /* optional: RTP Payload Type */
+ t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_MDCX_NACK(RslChannelNr chan_nr, RSL_Cause cause,
+ template uint16_t ipa_conn_id) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_MDCX_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ /* optional connection ID */
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_DLCX_IND(RslChannelNr chan_nr, uint16_t ipa_conn_id,
+ RSL_IE_IPA_ConnectionStats stats, RSL_Cause cause) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_DLCX_IND,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_STAT, RSL_IE_Body:{ipa_stats := stats}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+ template RSL_Message tr_RSL_IPA_DLCX(template RslChannelNr chan_nr,
+ template uint16_t ipa_conn_id := omit) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_DLCX,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ /* FIXME: optional conn_id */
+ *
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_DLCX_ACK(RslChannelNr chan_nr, template uint16_t ipa_conn_id,
+ template RSL_IE_IPA_ConnectionStats stats) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_DLCX_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_STAT, RSL_IE_Body:{ipa_stats := stats})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_DLCX_NACK(RslChannelNr chan_nr, RSL_Cause cause,
+ template uint16_t ipa_conn_id) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_DLCX_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ /* optional connection ID */
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+ template RSL_Message tr_RSL_IPA_PDCH_ACT(template RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_ACT,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_PDCH_ACT_ACK(RslChannelNr chan_nr, RSL_IE_FrameNumber fn) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_ACT_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_FRAME_NUMBER, RSL_IE_Body:{frame_nr := fn})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_PDCH_ACT_NACK(RslChannelNr chan_nr, RSL_Cause cause) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_ACT_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+ template RSL_Message tr_RSL_IPA_PDCH_DEACT(template RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_DEACT,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_PDCH_DEACT_ACK(RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_DEACT_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})
+ }
+ }
+
+ template RSL_Message ts_RSL_IPA_PDCH_DEACT_NACK(RslChannelNr chan_nr, RSL_Cause cause) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_PDCH_DEACT_NACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_CAUSE, RSL_IE_Body:{cause := ts_RSL_IE_Cause(cause)})
+ }
+ }
+
+
+
} with { encode "RAW" ; variant "FIELDORDER(msb)" }