BSSGP: Add various templates for common messages
diff --git a/gprs_gb/BSSGP_Types.ttcn b/gprs_gb/BSSGP_Types.ttcn
index ec0ae4d..3bd1572 100644
--- a/gprs_gb/BSSGP_Types.ttcn
+++ b/gprs_gb/BSSGP_Types.ttcn
@@ -318,7 +318,60 @@
other, OTHERWISE)"
}
+ external function enc_BssgpPdu(in BssgpPdu pdu) return octetstring
+ with { extension "prototype(convert) encode(RAW)" };
external function dec_BssgpPdu(in octetstring stream) return BssgpPdu
with { extension "prototype(convert) decode(RAW)" };
+ template BssgpPdu t_BSSGP_other(template BssgpPduType pdu_type, template BssgpTLVs tlvs) := {
+ pdu_type := pdu_type,
+ u := {
+ other := {
+ tlvs := tlvs
+ }
+ }
+ }
+
+ template BssgpTLV t_BSSGP_IE_Cause(template BssgpCause cause) := {
+ iei := CAUSE,
+ len := 1,
+ u := { cause := cause }
+ }
+
+ template BssgpTLV t_BSSGP_IE_Bvci(template BssgpBvci bvci) := {
+ iei := BVCI,
+ len := 2,
+ u := { bvci := bvci }
+ }
+
+ template BssgpTLV t_BssgpIE(template BssgpIEI iei, template BssgpIeUnion u) := {
+ iei := iei,
+ len := 0,
+ u := u
+ }
+
+ template BssgpTLV t_BSSGP_IE_PDU(BssgpPdu pdu) :=
+ t_BssgpIE(PDU_IN_ERROR, { other := f_BSSGP_compact_len(enc_BssgpPdu(pdu)) });
+ template BssgpTLV t_BSSGP_IE_CellId(template BssgpCellId cid) := t_BssgpIE(CELL_ID, { cell_id := cid });
+
+ template BssgpPdu t_BVC_RESET(template BssgpCause cause, template BssgpBvci bvci, template BssgpCellId cell_id) :=
+ t_BSSGP_other(BVC_RESET, { t_BSSGP_IE_Cause(cause), t_BSSGP_IE_Bvci(bvci), t_BSSGP_IE_CellId(cell_id) });
+ template BssgpPdu t_BVC_RESET_ACK(template BssgpBvci bvci, template BssgpCellId cell_id) :=
+ t_BSSGP_other(BVC_RESET_ACK, { t_BSSGP_IE_Bvci(bvci), t_BSSGP_IE_CellId(cell_id) });
+
+ template BssgpPdu t_BVC_UNBLOCK(template BssgpBvci bvci) := t_BSSGP_other(BVC_UNBLOCK, { t_BSSGP_IE_Bvci(bvci) });
+ template BssgpPdu t_BVC_UNBLOCK_ACK(template BssgpBvci bvci) := t_BSSGP_other(BVC_UNBLOCK_ACK, { t_BSSGP_IE_Bvci(bvci) });
+
+ template BssgpPdu t_BVC_BLOCK(template BssgpBvci bvci, template BssgpCause cause) :=
+ t_BSSGP_other(BVC_BLOCK, { t_BSSGP_IE_Bvci(bvci), t_BSSGP_IE_Cause(cause) });
+ template BssgpPdu t_BVC_BLOCK_ACK(template BssgpBvci bvci) := t_BSSGP_other(BVC_BLOCK_ACK, { t_BSSGP_IE_Bvci(bvci) });
+
+ template BssgpPdu tr_BSSGP_type(template BssgpPduType pdu_type) := {
+ pdu_type := pdu_type,
+ u := ?
+ }
+
+
+ template BssgpPdu t_BSSGP_STATUS(template BssgpTLVs tlvs) := t_BSSGP_other(STATUS, tlvs);
+
} with { encode "RAW" };