module L3_Templates {

/* L3 Templates, building on top of MobileL3*_Types from Ericsson.
 *
 * (C) 2017-2018 by Harald Welte <laforge@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

import from General_Types all;
import from Osmocom_Types all;
import from MobileL3_Types all;
import from MobileL3_CommonIE_Types all;
import from MobileL3_MM_Types all;
import from MobileL3_RRM_Types all;
import from MobileL3_CC_Types all;
import from MobileL3_GMM_SM_Types all;
import from MobileL3_SMS_Types all;

/* TS 24.007 Table 11.3 TI Flag */
const BIT1 c_TIF_ORIG := '0'B;
const BIT1 c_TIF_REPL := '1'B;

type enumerated CmServiceType {
	CM_TYPE_MO_CALL		('0001'B),
	CM_TYPE_EMERG_CALL	('0010'B),
	CM_TYPE_MO_SMS		('0100'B),
	CM_TYPE_SS_ACT		('1000'B),
	CM_TYPE_VGCS		('1001'B),
	CM_TYPE_VBS		('1010'B),
	CM_TYPE_LCS		('1011'B)
}

/* TS 24.008 10.5.3.4 Identity Type */
type enumerated CmIdentityType {
	CM_ID_TYPE_IMSI			('001'B),
	CM_ID_TYPE_IMEI			('010'B),
	CM_ID_TYPE_IMEISV		('011'B),
	CM_ID_TYPE_TMSI			('100'B),
	CM_ID_TYPE_PTMSI_RAI_PTMSI_SIG	('101'B)
}

template ML3_Cause_TLV ts_ML3_Cause(BIT7 cause, BIT4 loc := '0001'B, BIT2 std := '11'B) := {
	elementIdentifier := '08'O,
	lengthIndicator := 0, /* overwritten */
	oct3 := {
		location := loc,
		spare1_1 := '0'B,
		codingStandard := std,
		ext1 := '0'B,
		recommendation := omit,
		ext2 := omit
	},
	oct4 := {
		causeValue := cause,
		ext3 := '1'B
	},
	diagnostics := omit
}


/* send template for Mobile Identity (TMSI) */
template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := {
		typeOfIdentity := '000'B,	/* overwritten */
		oddEvenInd_identity := {
			tmsi_ptmsi := {
				oddevenIndicator := '0'B,
				fillerDigit := '1111'B,
				octets := tmsi
			}
		}
	}
}

/* send template for Mobile Identity (TMSI) */
function ts_MI_TMSI_TLV(template (omit) OCT4 tmsi) return template (omit) MobileIdentityTLV {
	var template (omit) MobileIdentityTLV ret;
	if (istemplatekind(tmsi, "omit")) {
		return omit;
	} else {
		ret := {
			elementIdentifier := '0100011'B,
			spare1 := '0'B,
			mobileIdentityLV := ts_MI_TMSI_LV(valueof(tmsi))
		}
		return ret;
	}
}

template MobileIdentityTLV ts_MI_IMEISV_TLV(hexstring imeisv) := {
	elementIdentifier := '0100011'B,
	spare1 := '0'B,
	mobileIdentityLV := ts_MI_IMEISV_LV(imeisv)
}

private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
	var IMSI_L3 l3;
	var integer len := lengthof(digits);
	if (len rem 2 == 1) {	/* modulo remainder */
		l3.oddevenIndicator := '1'B;
		l3.fillerDigit := omit;
	} else {
		l3.oddevenIndicator := '0'B;
		l3.fillerDigit := '1111'B;
	}
	l3.digits := digits;
	return l3;
}

private function f_enc_IMEI_L3(hexstring digits) return IMEI_L3 {
	var IMEI_L3 l3;
	var integer len := lengthof(digits);
	if (len rem 2 == 1) {	/* modulo remainder */
		l3.oddevenIndicator := '1'B;
	} else {
		l3.oddevenIndicator := '0'B;
	}
	l3.digits := digits;
	return l3;
}

private function f_enc_IMEI_SV(hexstring digits) return IMEI_SV {
	var IMEI_SV l3;
	var integer len := lengthof(digits);
	if (len rem 2 == 1) {	/* modulo remainder */
		l3.oddevenIndicator := '1'B;
	} else {
		l3.oddevenIndicator := '0'B;
	}
	l3.digits := digits;
	l3.fillerDigit := '1111'B;
	return l3;
}

/* send template for Mobile Identity (IMSI) */
template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := {
		typeOfIdentity := '001'B,
		oddEvenInd_identity := {
			imsi := f_enc_IMSI_L3(imsi_digits)
		}
	}
}

/* send template for Mobile Identity (IMEI) */
template (value) MobileIdentityLV ts_MI_IMEI_LV(hexstring imei_digits) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := {
		typeOfIdentity := '010'B,
		oddEvenInd_identity := {
			imei := f_enc_IMEI_L3(imei_digits)
		}
	}
}

/* send template for Mobile Identity (IMEISV) */
template (value) MobileIdentityLV ts_MI_IMEISV_LV(hexstring imei_digits) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := {
		typeOfIdentity := '011'B,
		oddEvenInd_identity := {
			imei_sv := f_enc_IMEI_SV(imei_digits)
		}
	}
}


/* Send template for Classmark 2 */
template (value) MobileStationClassmark2_LV ts_CM2 := {
	lengthIndicator := 0,
	rf_PowerCapability := '000'B,
	a5_1 := '0'B,
	esind := '1'B,
	revisionLevel := '10'B,
	spare1_1 := '0'B,
	mobileStationClassmark2_oct4 := {
		fc := '1'B,
		vgcs := '0'B,
		vbs := '0'B,
		sm_Capability := '1'B,
		ss_ScreenIndicator := '01'B,
		ps_Capability := '1'B,
		spare2_1 := '0'B
	},
	mobileStationClassmark2_oct5 := {
		a5_2 := '0'B,
		a5_3 := '1'B,
		cmsp := '0'B,
		solsa := '0'B,
		ucs2 := '0'B,
		lcsva_cap := '0'B,
		spare5_7 :='0'B,
		cm3 := '0'B
	}
};

/* Send template for CM SERVICE REQUEST */
template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(CmServiceType serv_type, MobileIdentityLV mi_lv) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			cMServiceRequest := {
				messageType := '000000'B, /* overwritten */
				nsd := '00'B,
				cm_ServiceType := int2bit(enum2int(serv_type), 4),
				cipheringKeySequenceNumber := { '000'B, '0'B },
				mobileStationClassmark2 := ts_CM2,
				mobileIdentity := mi_lv,
				priorityLevel := omit,
				additionalUpdateParameterTV := omit,
				deviceProperties := omit
			}
		}
	}
}

template (value) CipheringKeySequenceNumberV ts_CKSN(integer key_seq) := {
	keySequence := int2bit(key_seq, 3),
	spare := '0'B
}

/* Send template for CM RE-ESTABLISH REQUEST */
template (value) PDU_ML3_MS_NW ts_CM_REEST_REQ(integer cksn, MobileIdentityLV mi_lv) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			cMReEstablReq := {
				messageType := '101000'B, /* overwritten */
				nsd := '00'B,
				cipheringKeySequenceNumber := ts_CKSN(cksn),
				spare := '0000'B,
				mobileStationClassmark2 := ts_CM2,
				mobileIdentityLV := mi_lv,
				locationAreaIdentification := omit,
				deviceProperties := omit
			}
		}
	}
}


template PDU_ML3_NW_MS tr_MT_simple(template BIT4 discr := ?) := {
	discriminator := discr,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := ?
}


template PDU_ML3_NW_MS tr_CM_SERV_ACC := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			cMServiceAccept := {
				messageType := '100001'B,
				nsd := ?
			}
		}
	}
}


template PDU_ML3_NW_MS tr_CM_SERV_REJ(template OCT1 rej_cause := ?) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			cMServiceReject := {
				messageType := '100010'B,
				nsd := ?,
				rejectCause := rej_cause,
				t3246_Value := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_PAGING_REQ1(template MobileIdentityLV mi1 := ?,
				      template MobileIdentityTLV mi2 := *) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			pagingReq_Type1 := {
				messageType := '00100001'B,
				pageMode := ?,
				channelNeeded := ?,
				mobileIdentity1 := mi1,
				mobileIdentity2 := mi2,
				p1RestOctets := ?
			}
		}
	}
}

/* Template for receiving a Paging Request Type1 message with a given TMSI in the first mobile identity. */
template MobileL3_CommonIE_Types.MobileIdentityLV tr_PAGING_REQ1_MI1_TMSI(octetstring tmsi) := {
	lengthIndicator := 5,
	mobileIdentityV := {
		typeOfIdentity := '100'B,
		oddEvenInd_identity := {
			tmsi_ptmsi := {
				oddevenIndicator := '0'B,
				fillerDigit := '1111'B,
				octets := tmsi
			}
		}
	}

}

template PDU_ML3_NW_MS tr_PAGING_REQ2(template TMSIP_TMSI_V mi1 := ?,
				      template TMSIP_TMSI_V mi2 := ?,
				      template MobileIdentityTLV mi3 := *) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			pagingReq_Type2 := {
				messageType := '00100010'B,
				pageMode := ?,
				channelNeeded := ?,
				mobileIdentity1 := mi1,
				mobileIdentity2 := mi2,
				mobileIdentity3 := mi3,
				p2RestOctets := ?
			}
		}
	}
}

template PDU_ML3_NW_MS tr_PAGING_REQ3(template TMSIP_TMSI_V mi1 := ?,
				      template TMSIP_TMSI_V mi2 := ?,
				      template TMSIP_TMSI_V mi3 := ?,
				      template TMSIP_TMSI_V mi4 := ?) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			pagingReq_Type3 := {
				messageType := '00100100'B,
				pageMode := ?,
				channelNeeded := ?,
				mobileIdentity1 := mi1,
				mobileIdentity2 := mi2,
				mobileIdentity3 := mi3,
				mobileIdentity4 := mi4,
				p3RestOctets := ?
			}
		}
	}
}



/* Send template for PAGING RESPONSE */
template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			pagingResponse := {
				messageType := '00000000'B, /* overwritten */
				cipheringKeySequenceNumber := { '000'B, '0'B },
				spare1_4 := '0000'B,
				mobileStationClassmark := ts_CM2,
				mobileIdentity := mi_lv,
				additionalUpdateParameters := omit
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_ModeModifyAck(ChannelDescription2_V desc, ChannelMode_V mode) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			channelModeModifyAck := {
				messageType := '00010111'B,
				channelDescription := desc,
				channelMode := mode,
				extendedTSCSet := omit
			}
		}
	}
}

template (value) PDU_ML3_NW_MS ts_RRM_CiphModeCmd(BIT3 alg_id) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			cipheringModeCommand := {
				messageType := '00110101'B,
				cipherModeSetting := {
					sC := '1'B,
					algorithmIdentifier := alg_id
				},
				cipherModeResponse := {
					cR := '0'B,
					spare := '000'B
				}
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_CiphModeCompl := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			cipheringModeComplete := {
				messageType := '00110010'B,
				mobileEquipmentIdentity := omit
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_AssignmentComplete(OCT1 cause) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			assignmentComplete := {
				messageType := '00101001'B,
				rR_Cause := {
					valuePart := cause
				}
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_AssignmentFailure(OCT1 cause) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			assignmentFailure := {
				messageType := '00101111'B,
				rR_Cause := {
					valuePart := cause
				}
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_HandoverFailure(OCT1 cause) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			handoverFailure := {
				messageType := '00101000'B,
				rRCause := {
					valuePart := cause
				},
				pSCause := omit
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_HandoverComplete(OCT1 cause) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			handoverComplete := {
				messageType := '00101100'B,
				rRCause := {
					valuePart := cause
				},
				mobileObsservedTimeDiff := omit,
				mobileTimeDifferenceHyperframe := omit
			}
		}
	}
}

template (present) PDU_ML3_NW_MS tr_RR_APP_INFO(template (present) BIT4 apdu_id,
						template (present) octetstring data,
						template (present) APDU_Flags_V flags := ?) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			applicationInformation := {
				messageType := '00111000'B,
				aPDU_ID := apdu_id,
				aPDU_Flags := flags,
				aPDU_Data := {
					lengthIndicator := ?,
					aPDU_DataValue := data
				}
			}
		}
	}
}

template (value) PDU_ML3_NW_MS ts_RR_HandoverCommand := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			handoverCommand := {
				messageType := '00101011'B,
				cellDescription := {
					bcc := '001'B,
					ncc := '010'B,
					BCCHArfcn_HighPart := '11'B,
					BCCHArfcn_LowPart := '04'O
				},
				channelDescription2 := {
					timeslotNumber := '110'B,
					channelTypeandTDMAOffset := '00001'B,
					octet3 := '00'O,
					octet4 := '09'O
				},
				handoverReference := {
					handoverReferenceValue := '00'O
				},
				powerCommandAndAccesstype := {
					powerlevel := '00000'B,
					fPC_EP := '0'B,
					ePC_Mode := '0'B,
					aTC := '0'B
				},
				synchronizationIndication := omit,
				frequencyShortListAfterTime := omit,
				frequencyListAfterTime := omit,
				cellChannelDescription := omit,
				multislotAllocation := omit,
				modeOfChannelSet1 := omit,
				modeOfChannelSet2 := omit,
				modeOfChannelSet3 := omit,
				modeOfChannelSet4 := omit,
				modeOfChannelSet5 := omit,
				modeOfChannelSet6 := omit,
				modeOfChannelSet7 := omit,
				modeOfChannelSet8 := omit,
				descrOf2ndCh_at := omit,
				modeOf2ndChannel := omit,
				frequencyChannelSequence_at := omit,
				mobileAllocation_at := omit,
				startingTime := omit,
				timeDifference := omit,
				timingAdvance := omit,
				frequencyShortListBeforeTime := omit,
				frequencyListBeforeTime := omit,
				descrOf1stCh_bt := omit,
				descrOf2ndCh_bt := omit,
				frequencyChannelSequence_bt := omit,
				mobileAllocation_bt := omit,
				cipherModeSetting := omit,
				vGCS_TargetModeIndication := omit,
				multiRateConfiguration := omit,
				dynamicARFCN_Mapping := omit,
				vGCS_Ciphering_Parameters := omit,
				dedicatedServiceInformation := omit,
				pLMNIndex := omit,
				extendedTSCSet_afterTime := omit,
				extendedTSCSet_beforeTime := omit
			}
		}
	}
}

template PDU_ML3_NW_MS tr_RR_HandoverCommand := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			handoverCommand := {
				messageType := '00101011'B,
				cellDescription := ?,
				channelDescription2 := ?,
				handoverReference := ?,
				powerCommandAndAccesstype := ?,
				synchronizationIndication := *,
				frequencyShortListAfterTime := *,
				frequencyListAfterTime := *,
				cellChannelDescription := *,
				multislotAllocation := *,
				modeOfChannelSet1 := *,
				modeOfChannelSet2 := *,
				modeOfChannelSet3 := *,
				modeOfChannelSet4 := *,
				modeOfChannelSet5 := *,
				modeOfChannelSet6 := *,
				modeOfChannelSet7 := *,
				modeOfChannelSet8 := *,
				descrOf2ndCh_at := *,
				modeOf2ndChannel := *,
				frequencyChannelSequence_at := *,
				mobileAllocation_at := *,
				startingTime := *,
				timeDifference := *,
				timingAdvance := *,
				frequencyShortListBeforeTime := *,
				frequencyListBeforeTime := *,
				descrOf1stCh_bt := *,
				descrOf2ndCh_bt := *,
				frequencyChannelSequence_bt := *,
				mobileAllocation_bt := *,
				cipherModeSetting := *,
				vGCS_TargetModeIndication := *,
				multiRateConfiguration := *,
				dynamicARFCN_Mapping := *,
				vGCS_Ciphering_Parameters := *,
				dedicatedServiceInformation := *,
				pLMNIndex := *,
				extendedTSCSet_afterTime := *,
				extendedTSCSet_beforeTime := *
			}
		}
	}
}

function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {
	if (not isvalue(cm3)) {
		return omit;
	}
	var template MobileStationClassmark3_TLV ret := {
		elementIdentifier := '20'O,
		lengthIndicator := 0, /* overwritten */
		valuePart := cm3
	}
	return ret;
}

template (value) PDU_ML3_MS_NW ts_RRM_CM_CHG(MobileStationClassmark2_LV cm2,
					     template (omit) MobileStationClassmark3_TLV cm3 := omit) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			classmarkChange := {
				messageType := '00010110'B,
				mobileStationClassmark2 := cm2,
				mobileStationClassmark3 := cm3
			}
		}
	}
}

template PDU_ML3_NW_MS tr_RRM_CM_ENQUIRY := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			classmarkEnquiry := {
				messageType := '00010011'B,
				classmarkEnquiryMask := *
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_UL_REL(OCT1 cause) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			uplinkRelease := {
				messageType := '00001110'B,
				rR_Cause := {
					valuePart := cause
				}
			}
		}
	}
}

template PDU_ML3_MS_NW tr_RRM_RR_STATUS(template OCT1 cause := ?) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			rR_Status := {
				messageType := '00010010'B,
				rR_Cause := {
					valuePart := cause
				}
			}
		}
	}
}

template PDU_ML3_NW_MS tr_RRM_RR_RELEASE(template OCT1 cause := ?) := {
	discriminator := '0110'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			channelRelease := {
				messageType := '00001101'B,
				rRCause := {
					valuePart := cause
				},
				bARange := *,
				groupChannelDescription := *,
				groupCipherKeyNumber := *,
				gPRSResumption := *,
				bAListPref := *,
				uTRANFrequencyList := *,
				cellChannelDescr := *,
				cellSelectionIndicator := *,
				enhanced_DTM_CS_Release_Indication := *,
				vGCS_Ciphering_Parameters := *,
				group_Channel_Description_2 := *,
				talkerIdentity := *,
				talkerPriorityStatus := *,
				vGCS_AMR_Configuration := *,
				individual_Priorities := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_RRM_RR_RELEASE_CSFB(template OCT1 cause := ?) modifies tr_RRM_RR_RELEASE := {
	msgs := {
		rrm := {
			channelRelease := {
				cellSelectionIndicator := {
					elementIdentifier := '77'O,
					lengthIndicator := ?,
					cellSelectionIndicatorValue := ?
				}
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO := {
	discriminator := '0000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := ?
}

template LocationUpdatingType ts_ML3_IE_LuType := {
	lut := ?,
	spare1_1 := '0'B,
	fop := '0'B
}

template LocationUpdatingType ts_ML3_IE_LuType_Normal modifies ts_ML3_IE_LuType := {
	lut := '00'B
}

template LocationUpdatingType ts_ML3_IE_LuType_Periodic modifies ts_ML3_IE_LuType := {
	lut := '01'B
}

template LocationUpdatingType ts_ML3_IE_LuType_Attach modifies ts_ML3_IE_LuType := {
	lut := '10'B
}

template CipheringKeySequenceNumberV ts_ML3_IE_CKSN(integer cksn) := {
	keySequence := int2bit(cksn, 3),
	spare := '0'B
}

template PDU_ML3_MS_NW ts_ML3_MO_LU_Req(LocationUpdatingType lu_type, LocationAreaIdentification_V lai,
					MobileIdentityLV mi, MobileStationClassmark1_V cm1)
modifies ts_ML3_MO := {
	msgs := {
		mm := {
			locationUpdateRequest := {
				messageType := '001000'B,
				nsd := '00'B, /* ? */
				locationUpdatingType := lu_type,
				cipheringKeySequenceNumber := ts_ML3_IE_CKSN(0),
				locationAreaIdentification := lai,
				mobileStationClassmark1 := cm1,
				mobileIdentityLV := mi,
				classmarkInformationType2_forUMTS := omit,
				additionalUpdateParameterTV := omit,
				deviceProperties := omit,
				mS_NetworkFeatureSupport := omit
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_TmsiRealloc_Cmpl modifies ts_ML3_MO := {
	msgs := {
		mm := {
			tmsiReallocComplete := {
				messageType := '011011'B,
				nsd := '00'B
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_LU_Acc := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			locationUpdateAccept := {
				messageType := '000010'B,
				nsd := '00'B,
				locationAreaIdentification := ?,
				mobileIdentityTLV := *,
				followOnProceed := *,
				cTS_Permission := *,
				equivalentPLMNs := *,
				emergencyNumberList := *,
				perMS_T3212 := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_LU_Rej(template OCT1 cause := ?) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			locationUpdateReject := {
				messageType := '000100'B,
				nsd := '00'B,
				rejectCause := cause,
				t3246_Value := *
			}
		}
	}
}

private function f_id_type_or_any(template CmIdentityType id_type) return template bitstring {
	if (istemplatekind(id_type, "?")) {
		return ?;
	} else {
		return int2bit(enum2int(valueof(id_type)), 3);
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_MM_ID_Req(template CmIdentityType id_type := ?) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			identityRequest := {
				messageType := '011000'B,
				nsd := '00'B,
				identityType := f_id_type_or_any(id_type),
				spare1_5 := ?
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp(MobileIdentityLV mi) modifies ts_ML3_MO := {
	msgs := {
		mm := {
			identityResponse := {
				messageType := '011001'B,
				nsd := '00'B,
				mobileIdentityLV := mi,
				p_TMSI_TypeTV := omit,
				routingAreaIdentification2TLV := omit,
				p_TMSISignature2TLV := omit
			}
		}
	}
}
template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMSI(hexstring imsi) :=
					ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMSI_LV(imsi)));
template PDU_ML3_MS_NW ts_ML3_MO_MM_ID_Rsp_IMEI(hexstring imei) :=
					ts_ML3_MO_MM_ID_Rsp(valueof(ts_MI_IMEI_LV(imei)));


template (value) MobileStationClassmark1_V ts_CM1(BIT1 a5_1_unavail := '0'B, BIT2 rev := '10'B, BIT1 esind := '1'B) := {
	rf_PowerCapability := '010'B,
	a5_1 := a5_1_unavail,
	esind := esind,
	revisionLevel := rev,
	spare1_1 := '0'B
}

template PDU_ML3_MS_NW ts_ML3_MO_MM_IMSI_DET_Ind(MobileIdentityLV mi,
						 template MobileStationClassmark1_V cm1 := ts_CM1)
modifies ts_ML3_MO := {
	msgs := {
		mm := {
			imsiDetachIndication := {
				messageType := '000001'B,
				nsd := '00'B,
				mobileStationClassmark1 := cm1,
				mobileIdentityLV := mi
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	}
}

template (value) CalledPartyBCD_Number ts_Called(hexstring digits) := {
	elementIdentifier := '5E'O,
	lengthIndicator := 0,			/* overwritten */
	numberingPlanIdentification := '0000'B,
	typeOfNumber := '000'B,			/* unknown */
	ext1 := '0'B,
	digits := digits
}

template CalledPartyBCD_Number tr_Called(template hexstring digits) := {
	elementIdentifier := '5E'O,
	lengthIndicator := ?,
	numberingPlanIdentification := ?,
	typeOfNumber := ?,
	ext1 := ?,
	digits := digits
}

private function f_pad_digits(hexstring digits) return hexstring {
	if (lengthof(digits) mod 2 != 0) {
		/* Add trailing nibble of 1-bit padding, like the CallingPartyBCD_Number encoder would do.
		 * Otherwise our template won't match the data received (see OS#2930). */
		return digits & 'F'H;
	}
	return digits;
}

template CallingPartyBCD_Number tr_Calling(template hexstring digits) := {
	elementIdentifier := '5C'O,
	lengthIndicator := ?,
	oct3 := ?,
	digits := f_pad_digits(valueof(digits))
}

type integer SpeechVer;

template (value) Speech_AuxiliarySpeech ts_SpeechAux(SpeechVer ver, BIT1 suffix) := {
	speechVersionIndication := int2bit(ver-1,3) & suffix,
	spare1_1 := '0'B,
	cTM_or_Spare := '0'B,
	coding := '0'B,
	extension_octet_3a_3b := '0'B
}

template (value) Speech_AuxiliarySpeech ts_SpeechAuxFR(SpeechVer ver) := ts_SpeechAux(ver, '0'B);
template (value) Speech_AuxiliarySpeech ts_SpeechAuxHR(SpeechVer ver) := ts_SpeechAux(ver, '1'B);

template (value) BearerCapability_TLV ts_Bcap_voice := {
	elementIdentifier := '04'O,
	lengthIndicator := 0, /* overwritten */
	octet3 := {
		informationTransferCapability := '000'B,
		transferMode := '0'B,
		codingStandard := '0'B,
		radioChannelRequirement := '11'B, /* FR preferred */
		extension_octet_3 := '0'B,	/* overwritten */
		speech_aux_3a_3b := {
			valueof(ts_SpeechAuxHR(3)),
			valueof(ts_SpeechAuxFR(3)),
			valueof(ts_SpeechAuxFR(2)),
			valueof(ts_SpeechAuxFR(1)),
			valueof(ts_SpeechAuxHR(1))
		}
	},
	octet4 := omit,
	octet5 := omit,
	octet6 := omit,
	octet7 := omit
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_SETUP(integer tid, hexstring called, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			setup_MS_NW := {
				messageType := '000101'B,
				nsd := '00'B,
				bcRepeatIndicator := omit,
				bearerCapability1 := bcap,
				bearerCapability2 := omit,
				facility := omit,
				callingPartySubAddress := omit,
				calledPartyBCD_Number := ts_Called(called),
				calledPartySubAddress := omit,
				llc_RepeatIndicator := omit,
				lowLayerCompatibility1 := omit,
				lowLayerCompatibility2 := omit,
				hlc_RepeatIndicator := omit,
				highLayerCompatibility1 := omit,
				highLayerCompatibility2 := omit,
				user_user := omit,
				ss_VersionIndicator := omit,
				clir_Suppression := omit,
				clir_Invocation := omit,
				cC_Capabilities := omit,
				facility_ccbs1 := omit,
				facility_ccbs2 := omit,
				streamIdentifier := omit,
				supportedCodecs := omit,
				redial := omit
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_EMERG_SETUP(integer tid, template BearerCapability_TLV bcap := ts_Bcap_voice) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			emergencySetup := {
				messageType := '001110'B,
				nsd := '00'B,
				bearerCapability := bcap,
				streamIdentifier := omit,
				supportedCodecs := omit,
				emergencyCategory := omit
			}
		}
	}
}


template PDU_ML3_NW_MS tr_ML3_MT_CC_CALL_PROC(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ?,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			callProceeding := {
				messageType := '000010'B,
				nsd := '00'B,
				repeatIndicator := *,
				bearerCapability1 := *,
				bearerCapability2 := *,
				facility := *,
				progressIndicator := *,
				priorityGranted := *,
				networkCCCapabilities := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_CC_ALERTING(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ?,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			alerting_NW_MS := {
				messageType := '000001'B,
				nsd := '00'B,
				facility := *,
				progressIndicator := *,
				user_user := *
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_ALERTING(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			alerting_MS_NW := {
				messageType := '000001'B,
				nsd := '00'B,
				facility := omit,
				user_user := omit,
				ss_VersionIndicator := omit
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MT_CC_ALERTING(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			alerting_MS_NW := {
				messageType := '000001'B,
				nsd := '00'B,
				facility := omit,
				user_user := omit,
				ss_VersionIndicator := omit
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			connect_MS_NW := {
				messageType := '000111'B,
				nsd := '00'B,
				facility := omit,
				connectedSubAddress := omit,
				user_user := omit,
				ss_VersionIndicator := omit,
				streamIdentifier := omit
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			connect_NW_MS := {
				messageType := '000111'B,
				nsd := '00'B,
				facility := *,
				progressIndicator := *,
				connectedNumber := *,
				connectedSubAddress := *,
				user_user := *
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			connectAck := {
				messageType := '001111'B,
				nsd := '00'B
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_START_DTMF(integer tid, charstring number) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			startDTMF := {
				messageType := '110101'B,
				nsd := '00'B,
				keypadFacility := {
					elementIdentifier := '2C'O,
					keypadInformation := int2bit(char2int(number), 7),
					spare_1 := '0'B
				}
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ?,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			disconnect_NW_MS := {
				messageType := '100101'B,
				nsd := '00'B,
				cause := ?,
				facility := *,
				progressIndicator := *,
				user_user := *,
				allowedActions := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_CC_RELEASE(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ?,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			release_NW_MS := {
				messageType := '101101'B,
				nsd := '00'B,
				cause := ?,
				secondCause := *,
				facility := *,
				user_user := *
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_RELEASE(integer tid, BIT1 tid_remote, BIT7 cause) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := tid_remote,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			release_MS_NW := {
				messageType := '101101'B,
				nsd := '00'B,
				cause := ts_ML3_Cause(cause),
				secondCause := omit,
				facility := omit,
				user_user := omit,
				ss_VersionIndicator := omit
			}
		}
	}
}


template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_REL_COMPL(integer tid, BIT1 tid_remote := '0'B) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := tid_remote,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			releaseComplete_MS_NW := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := omit,
				facility := omit,
				user_user := omit,
				ss_VersionIndicator := omit
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_CC_REL_COMPL(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ?,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			releaseComplete_NW_MS := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := *,
				facility := *,
				user_user := *
			}
		}
	}
}



template PDU_ML3_NW_MS tr_ML3_MT_MM_AUTH_REQ(template OCT16 rand := ?) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			authenticationRequest := {
				messageType := '010010'B,
				nsd := '00'B,
				cipheringKeySequenceNumber := ?,
				spare2_4 := ?,
				authenticationParRAND := rand,
				authenticationParAUTN := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_MM_AUTH_REQ_3G(template OCT16 rand := ?, template OCT16 autn) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			authenticationRequest := {
				messageType := '010010'B,
				nsd := '00'B,
				cipheringKeySequenceNumber := ?,
				spare2_4 := ?,
				authenticationParRAND := rand,
				authenticationParAUTN := {
					elementIdentifier := '20'O,
					lengthIndicator := ?,
					autnValue := autn
				}
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_2G(OCT4 sres) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			authenticationResponse := {
				messageType := '010100'B,
				nsd := '00'B,
				authenticationParSRES := sres,
				authenticationParSRESext := omit
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MT_MM_AUTH_RESP_3G(OCT4 sres, octetstring res) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			authenticationResponse := {
				messageType := '010100'B,
				nsd := '00'B,
				authenticationParSRES := sres,
				authenticationParSRESext := {
					elementIdentifier := '21'O,
					lengthIndicator := 0, /* overwritten */
					valueField := res
				}
			}
		}
	}
}

template PDU_ML3_MS_NW ts_ML3_MO_CC_CALL_CONF(integer tid,
						template BearerCapability_TLV bcap := omit) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_REPL, /* response from destination */
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			callConfirmed := {
				messageType := '001000'B,
				nsd := '00'B,
				repeatIndicator := omit,
				bearerCapability1 := bcap,
				bearerCapability2 := omit,
				cause := omit,
				cC_Capabilities := omit,
				streamIdentifier := omit,
				supportedCodecs := omit
			}
		}
	}
}


template PDU_ML3_NW_MS tr_ML3_MT_CC_SETUP(integer tid, template hexstring called := *,
					template hexstring calling := *,
					template BearerCapability_TLV bcap := *) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := c_TIF_ORIG, /* from originator */
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			setup_NW_MS := {
				messageType := '000101'B,
				nsd := '00'B,
				bcRepeatIndicator := *,
				bearerCapability1 := bcap,
				bearerCapability2 := *,
				facility := *,
				progressIndicator := *,
				signal := *,
				callingPartyBCD_Number := tr_Calling(calling) ifpresent,
				callingPartySubAddress := *,
				calledPartyBCD_Number := tr_Called(called) ifpresent,
				calledPartySubAddress := *,
				redirectingPartyBCDNumber := *,
				redirectingPartySubaddress := *,
				llc_RepeatIndicator := *,
				lowLayerCompatibility1 := *,
				lowLayerCompatibility2 := *,
				hlc_RepeatIndicator := *,
				highLayerCompatibility1 := *,
				highLayerCompatibility2 := *,
				user_user := *,
				priority := *,
				alert := *,
				networkCCCapabilities := *,
				causeofNoCli := *,
				backupBearerCapacity := *
			}
		}
	}
}

/***********************************************************************
 * Supplementary Services
 ***********************************************************************/

private template (value) Facility_TLV ts_FacTLV(OCTN facility) := {
	elementIdentifier := '1C'O,
	lengthIndicator := lengthof(facility),
	facilityInformation := facility
}
private template Facility_TLV tr_FacTLV(template OCTN facility) := {
	elementIdentifier := '1C'O,
	lengthIndicator := ?,
	facilityInformation := facility
}

private template (value) Facility_LV ts_FacLV(OCTN facility) := {
	lengthIndicator := lengthof(facility),
	facilityInformation := facility
}
private template Facility_LV tr_FacLV(template OCTN facility) := {
	lengthIndicator := ?,
	facilityInformation := facility
}

private function f_facility_or_omit(template (omit) OCTN facility)
return template (omit) Facility_TLV {
	if (istemplatekind(facility, "omit")) {
		return omit;
	} else {
		return ts_FacTLV(valueof(facility));
	}
}
private function f_facility_or_wc(template OCTN facility)
return template Facility_TLV {
	if (istemplatekind(facility, "*")) {
		return *;
	} else if (istemplatekind(facility, "?")) {
		return ?;
	} else if (istemplatekind(facility, "omit")) {
		return omit;
	} else {
		return tr_FacTLV(facility);
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MO_SS_REGISTER(
	uint3_t tid, BIT1 ti_flag,
	OCTN facility,
	template (omit) SS_VersionIndicator ss_ver := omit
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			register := {
				messageType := '111011'B,
				nsd := '00'B,
				facility := ts_FacTLV(facility),
				ss_version := ss_ver
			}
		}
	}
}
template PDU_ML3_MS_NW tr_ML3_MO_SS_REGISTER(
	template uint3_t tid, template BIT1 ti_flag,
	template OCTN facility,
	template SS_VersionIndicator ss_ver := omit
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			register := {
				messageType := '111011'B,
				nsd := '00'B,
				facility := tr_FacTLV(facility),
				ss_version := ss_ver
			}
		}
	}
}

template (value) PDU_ML3_NW_MS ts_ML3_MT_SS_REGISTER(
	uint3_t tid, BIT1 ti_flag,
	OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			register := {
				messageType := '111011'B,
				nsd := '00'B,
				facility := ts_FacTLV(facility)
			}
		}
	}
}
template PDU_ML3_NW_MS tr_ML3_MT_SS_REGISTER(
	template uint3_t tid, template BIT1 ti_flag,
	template OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			register := {
				messageType := '111011'B,
				nsd := '00'B,
				facility := tr_FacTLV(facility)
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MO_SS_FACILITY(
	uint3_t tid, BIT1 ti_flag,
	OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			facility := {
				messageType := '111010'B,
				nsd := '00'B,
				facility := ts_FacLV(facility)
			}
		}
	}
}
template PDU_ML3_MS_NW tr_ML3_MO_SS_FACILITY(
	template uint3_t tid, template BIT1 ti_flag,
	template OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			facility := {
				messageType := '111010'B,
				nsd := '00'B,
				facility := tr_FacLV(facility)
			}
		}
	}
}

template (value) PDU_ML3_NW_MS ts_ML3_MT_SS_FACILITY(
	uint3_t tid, BIT1 ti_flag,
	OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			facility := {
				messageType := '111010'B,
				nsd := '00'B,
				facility := ts_FacLV(facility)
			}
		}
	}
}
template PDU_ML3_NW_MS tr_ML3_MT_SS_FACILITY(
	template uint3_t tid, template BIT1 ti_flag,
	template OCTN facility
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			facility := {
				messageType := '111010'B,
				nsd := '00'B,
				facility := tr_FacLV(facility)
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_ML3_MO_SS_RELEASE_COMPLETE(
	uint3_t tid, BIT1 ti_flag,
	template (omit) ML3_Cause_TLV cause := omit,
	template (omit) OCTN facility := omit
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			releaseComplete_MS_NW := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := cause,
				facility := f_facility_or_omit(facility)
			}
		}
	}
}
template PDU_ML3_MS_NW tr_ML3_MO_SS_RELEASE_COMPLETE(
	template uint3_t tid, template BIT1 ti_flag,
	template ML3_Cause_TLV cause := *,
	template OCTN facility := *
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			releaseComplete_MS_NW := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := cause,
				facility := f_facility_or_wc(facility)
			}
		}
	}
}

template (value) PDU_ML3_NW_MS ts_ML3_MT_SS_RELEASE_COMPLETE(
	uint3_t tid, BIT1 ti_flag,
	template (omit) ML3_Cause_TLV cause := omit,
	template (omit) OCTN facility := omit
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			releaseComplete_NW_MS := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := cause,
				facility := f_facility_or_omit(facility)
			}
		}
	}
}
template PDU_ML3_NW_MS tr_ML3_MT_SS_RELEASE_COMPLETE(
	template uint3_t tid, template BIT1 ti_flag,
	template ML3_Cause_TLV cause := *,
	template OCTN facility := *
) := {
	discriminator := '1011'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		ss := {
			releaseComplete_NW_MS := {
				messageType := '101010'B,
				nsd := '00'B,
				cause := cause,
				facility := f_facility_or_wc(facility)
			}
		}
	}
}

/***********************************************************************
 * GPRS Mobility Management
 ***********************************************************************/

template (value) MSNetworkCapabilityV ts_GMM_MsNetCapV := {
	gea1bit := '1'B,
	smCapabilitiesviaDedicatedChannels := '1'B,
	smCapabilitiesviaGPRSChannels := '0'B,
	ucs2Support := '1'B,
	ssScreeningIndicator := '01'B,
	solSACapability := omit,
	revisionLevelIndicatior := omit,
	pFCFeatureMode := omit,
	extendedGEAbits := omit,
	lcsVAcapability := omit,
	pSInterRATHOtoUTRANIuModeCapability := omit,
	pSInterRATHOtoEUTRANS1ModeCapability := omit,
	eMMCombinedProceduresCapability := omit,
	iSRSupport := omit,
	sRVCCtoGERANUTRANCapability := omit,
	ePCCapability := omit,
	nFCapability := omit,
	gERANNertworkSharingCapability := omit,
	spare_octets := omit
};

template (value) MSNetworkCapabilityLV ts_GMM_MsNetCapLV := {
	lengthIndicator := 0, /* overwritten */
	msNetworkCapabilityV := ts_GMM_MsNetCapV
};

type enumerated GprsAttachType {
	GPRS_ATT_T_GPRS,
	GPRS_ATT_T_GPRS_IMSI_COMBINED
};

function ts_GMM_AttachType(boolean combined := false, boolean follow_on_pending := false)
return AttachTypeV {
	var AttachTypeV att;
	if (combined) {
		att.attachType := '011'B;
	} else {
		att.attachType := '001'B;
	}
	att.for_l3 := bool2bit(combined);
	return att;
}

type enumerated GprsUpdateType {
	GPRS_UPD_T_RA	('000'B),
	GPRS_UPD_T_RA_LA_COMBINED ('001'B),
	GPRS_UPD_T_RA_LA_COMBINED_IMSI_ATT ('010'B),
	GPRS_UPD_T_PERIODIC ('011'B)
};

/* 10.5.5.18 Update Type */
template UpdateTypeV ts_GMM_UpdateType(GprsUpdateType upd_t, boolean combined := false,
				       boolean follow_on_pending := false) := {
	valueField := int2bit(enum2int(upd_t), 3),
	for_l3 := bool2bit(combined)
}

template (value) DRXParameterV ts_DrxParameterV := {
	splitPGCycleCode := '00'O, /* no DRX */
	nonDRXTimer := '000'B, /* no non-DRX mode */
	splitOnCCCH := '0'B, /* not supported */
	cnSpecificDRXCycleLength := '0000'B /* SI value used */
};

template (value) AccessCapabilitiesStruct ts_AccesssCap := {
	lengthIndicator := 0, /* overwritten */
	accessCapabilities := {
		rfPowerCapability := '001'B, /* FIXME */
		presenceBitA5 := '0'B,
		a5bits := omit,
		esind := '1'B,
		psbit := '0'B,
		vgcs := '0'B,
		vbs := '0'B,
		presenceBitMultislot := '0'B,
		multislotcap := omit,
		accessCapAdditionsAfterRel97 := omit
	},
	spare_bits := omit
}

template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att) := {
	mSRACapabilityValues := {
		mSRACapabilityValuesExclude1111 := {
			accessTechnType := '0001'B, /* E-GSM */
			accessCapabilities := ts_AccesssCap
		}
	},
	presenceBitMSRACap := '0'B
};

template (value) MSRadioAccessCapabilityLV ts_MS_RaCapa := {
	lengthIndicator := 0, /* overwritten */
	msRadioAccessCapabilityV := {
		ts_RaCapRec('0001'B) /* E-GSM */
	}
}

template (value) PDU_L3_MS_SGSN
	ts_GMM_ATTACH_REQ(MobileIdentityLV mi_lv, RoutingAreaIdentificationV old_ra,
			  boolean combined := false, boolean follow_on_pending := false,
			  template (omit) MobileStationClassmark2_TLV cm2_tlv,
			  template (omit) MobileStationClassmark3_TLV cm3_tlv
		) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			attachRequest := {
				messageType := '00000000'B, /* overwritten */
				msNetworkCapability := ts_GMM_MsNetCapLV,
				attachType := valueof(ts_GMM_AttachType(combined, follow_on_pending)),
				gprsCKSN := { '111'B, '0'B },
				drxParam := ts_DrxParameterV,
				mobileIdentity := mi_lv,
				oldRoutingAreaID := old_ra,
				msRACap := ts_MS_RaCapa,
				ptmsiSignature := omit, /* TODO */
				reqGPRStimer := omit,
				tmsiStatus := omit,
				pC_LCSCapability := omit,
				mobileStationClassmark2 := cm2_tlv,
				mobileStationClassmark3 := cm3_tlv,
				supportedCodecs := omit,
				uENetworkCapability := omit,
				additionalMobileIdentity := omit,
				routingAreaIdentification2 := omit,
				voiceDomainandUEsUsageSetting := omit,
				deviceProperties := omit,
				p_TMSI_Type := omit,
				mS_NetworkFeatureSupport := omit,
				oldLocationAreaIdentification := omit,
				additionalUpdateType := omit,
				tMSIBasedNRIcontainer := omit,
				t3324 := omit,
				t3312_ExtendedValue := omit,
				extendedDRXParameters := omit
			}
		}
	}
}

private function tr_MI_TMSI_TLV(template OCT4 tmsi) return template MobileIdentityTLV {
	if (istemplatekind(tmsi, "*")) {
		return *;
	} else if (istemplatekind(tmsi, "?")) {
		return ?;
	} else {
		var template MobileIdentityTLV mi := {
			elementIdentifier := '0011000'B,
			spare1 := '0'B,
			mobileIdentityLV := {
				lengthIndicator := 4,
				mobileIdentityV := {
					typeOfIdentity := '100'B,
					oddEvenInd_identity := {
						tmsi_ptmsi := {
							oddevenIndicator := '1'B,
							fillerDigit := '1111'B,
							octets := tmsi
						}
					}
				}
			}
		};
		return mi;
	}
}

template PDU_L3_SGSN_MS tr_GMM_ATTACH_ACCEPT(template BIT3 res := ?,
					     template RoutingAreaIdentificationV ra := ?,
					     template OCT4 ptmsi := *) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			attachAccept := {
				messageType := '00000010'B,
				attachResult := { res, ? },
				forceToStandby := ?,
				updateTimer := ?,
				radioPriority := ?,
				radioPriorityTOM8 := ?,
				routingAreaIdentification := ra,
				ptmsiSignature := *,
				readyTimer := *,
				allocatedPTMSI := tr_MI_TMSI_TLV(ptmsi),
				msIdentity := *,
				gmmCause := *,
				t3302 := *,
				cellNotification := *,
				equivalentPLMNs := *,
				networkFeatureSupport := *,
				emergencyNumberList := *,
				requestedMSInformation := *,
				t3319 := *,
				t3323 := *,
				t3312_ExtendedValue := *,
				additionalNetworkFeatureSupport := *,
				t3324 := *,
				extendedDRXParameters := *
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_ATTACH_REJECT(template OCT1 cause) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			attachReject := {
				messageType := '00000100'B,
				gmmCause := {
					causeValue := cause
				},
				t3302 := *,
				t3346 := *
			}
		}
	}
}


template (value) PDU_L3_MS_SGSN ts_GMM_ATTACH_COMPL := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			attachComplete := {
				messageType := '00000000'B, /* overwritten */
				interRATHandoverInformation := omit,
				eUTRANinterRATHandoverInformation := omit
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN
	ts_GMM_RAU_REQ(MobileIdentityLV mi_lv, GprsUpdateType upd_type,
			  RoutingAreaIdentificationV old_ra,
			  boolean follow_on_pending := false,
			  template (omit) MobileStationClassmark2_TLV cm2_tlv,
			  template (omit) MobileStationClassmark3_TLV cm3_tlv,
			  template (omit) OCT4 p_tmsi := omit
		) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			routingAreaUpdateRequest := {
				messageType := '00000000'B, /* overwritten */
				updateType := ts_GMM_UpdateType(upd_type, follow_on_pending),
				gprsCKSN := { '111'B, '0'B },
				oldRoutingAreaId := old_ra,
				msRACap := ts_MS_RaCapa,
				oldPTMSISignature := omit, /* TODO */
				readyTimerValue := omit,
				drxParameter := omit,
				tmsiStatus := omit,
				ptmsi := ts_MI_TMSI_TLV(p_tmsi),
				mSNetworkCapability := omit,
				pdpContextStatus := omit, /* TODO */
				pC_LCSCapability := omit,
				mBMS_ContextStatus := omit,
				uENetworkCapability := omit,
				additionalMobileIdentity := omit,
				oldRoutingAreaIdentification2 := omit,
				mobileStationClassmark2 := cm2_tlv,
				mobileStationClassmark3 := cm3_tlv,
				supportedCodecs := omit,
				voiceDomainUEUsageSetting := omit,
				p_TMSI_Type := omit,
				deviceProperties := omit,
				mS_NetworkFeatureSupport := omit,
				oldLocationAreaIdentification := omit,
				additionalUpdateType := omit,
				tMSIBasedNRIcontainer := omit,
				t3324 := omit,
				t3312_ExtendedValue := omit,
				extendedDRXParameters := omit
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_RAU_REJECT(template OCT1 cause := ?) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			routingAreaUpdateReject := {
				messageType := '00001011'B,
				gmmCause := {
					causeValue := cause
				},
				forceToStandby := ?,
				spare := '0000'B,
				t3302 := *,
				t3346 := *
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_RAU_ACCEPT(template BIT3 res := ?,
					  template RoutingAreaIdentificationV ra := ?,
					  template OCT4 ptmsi := *) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			routingAreaUpdateAccept := {
				messageType := '00001001'B,
				forceToStandby := ?,
				updateResult := { res, ? },
				raUpdateTimer := ?,
				routingAreaId := ra,
				ptmsiSignature := *,
				allocatedPTMSI := tr_MI_TMSI_TLV(ptmsi),
				msIdentity := *,
				receiveNPDUNumbers := *,
				readyTimer := *,
				gmmCause := *,
				t3302 := *,
				cellNotification := *,
				equivalentPLMNs := *,
				pdpContextStatus := *,
				networkFeatureSupport := *,
				emergencyNumberList := *,
				mBMS_ContextStatus := *,
				requestedMSInformation := *,
				t3319 := *,
				t3323 := *,
				t3312_ExtendedValue := *,
				additionalNetworkFeatureSupport := *,
				t3324 := *,
				extendedDRXParameters := *
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_RAU_COMPL := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			routingAreaUpdateComplete := {
				messageType := '00000000'B, /* overwritten */
				receiveNPDUNumbers := omit,
				interRATHandoverInformation := omit,
				eUTRANinterRATHandoverInformation := omit
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_PTMSI_REALL_COMPL := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			p_TMSIReallocationComplete := {
				messageType := '00000000'B /* overwritten */
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_AUTH_CIPH_COMPL(ACReferenceNumberV ref, OCT4 res) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			authenticationAndCipheringResponse := {
				messageType := '00000000'B, /* overwritten */
				acReferenceNumber := ref,
				spare := '0000'B,
				authenticationParResp := {
					elementIdentifier := '22'O,
					valueField := res
				},
				imeisv := omit,
				authenticationRespParExt := omit
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_ID_REQ(template BIT3 id_type := ?) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			identityRequest := {
				messageType := '00010101'B,
				identityType := { id_type, '0'B },
				forceToStandby := ?
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_ID_RESP(MobileIdentityLV mi_lv) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			identityResponse := {
				messageType := '00000000'B, /* overwritten */
				mobileIdentity := mi_lv
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_AUTH_REQ(template OCT16 rand := ?, template BIT3 ciph_alg := ?) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			authenticationAndCipheringRequest := {
				messageType := '00010010'B,
				cipheringAlgorithm := { ciph_alg, '0'B },
				imeisvRequest := ?,
				forceToStandby := ?,
				acReferenceNumber := ?,
				authenticationParameterRAND := {
					elementIdentifier := '21'O,
					randValue := rand
				},
				cipheringKeySequenceNumber := *,
				authenticationParameterAUTN := *
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_AUTH_RESP_2G(BIT4 ac_ref, OCT4 sres) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			authenticationAndCipheringResponse := {
				messageType := '00010011'B,
				acReferenceNumber := { valueField := ac_ref },
				spare := '0000'B,
				authenticationParResp := {
					elementIdentifier := '22'O,
					valueField := sres
				},
				imeisv := omit,
				authenticationRespParExt := omit
			}
		}
	}
}

template PDU_L3_MS_SGSN ts_GMM_AUTH_FAIL_UMTS_AKA_RESYNC(octetstring auts) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			authenticationAndCipheringFailure := {
				messageType := '00011100'B,
				gmmCause := {
					causeValue := '15'O /* GMM_CAUSE_SYNC_FAIL 10.5.3.2.2 */
				},
				authenticationFailureParam := {
					elementIdentifier := '30'O,
					lengthIndicator := 14,
					valueField := auts
				}
			}
		}
	}
}


const BIT3 c_GMM_DTT_MO_GPRS := '001'B;
const BIT3 c_GMM_DTT_MO_IMSI := '010'B;
const BIT3 c_GMM_DTT_MO_GPRS_IMSI_COMBINED := '011'B;

const BIT3 c_GMM_DTT_MT_REATTACH_REQUIRED := '001'B;
const BIT3 c_GMM_DTT_MT_REATTACH_NOT_REQUIRED := '010'B;
const BIT3 c_GMM_DTT_MT_IMSI_DETACH := '011'B;

template (value) DetachTypeV ts_GMM_DetType(BIT3 dtt, boolean power_off := false) := {
	detachType := dtt,
	powerOffFlag := bool2bit(power_off)
}

function ts_PtmsiSigTV(template (omit) OCT3 val) return template (omit) P_TMSISignatureTV {
	var template (omit) P_TMSISignatureTV ret;
	if (istemplatekind(val, "omit")) {
		return omit;
	} else {
		ret := {
			elementIdentifier := '19'O,
			valueField := valueof(val)
		}
		return ret;
	}
}

function ts_PtmsiSigTLV(template (omit) OCT3 val) return template (omit) P_TMSISignature2TLV {
	var template (omit) P_TMSISignature2TLV ret;
	if (istemplatekind(val, "omit")) {
		return omit;
	} else {
		ret := {
			elementIdentifier := '19'O,
			lengthIndicator := 3,
			valueField := valueof(val)
		}
		return ret;
	}
}

template (value) PDU_L3_MS_SGSN ts_GMM_DET_REQ_MO(BIT3 dtt := c_GMM_DTT_MO_GPRS,
						  boolean power_off := false,
						  template (omit) OCT4 p_tmsi := omit,
						  template (omit) OCT3 p_tmsi_sig := omit) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			detachRequest_MS_SGSN := {
				messageType := '00000000'B, /* overwritten */
				detachType := valueof(ts_GMM_DetType(dtt, power_off)),
				spare := '0000'B,
				ptmsi := ts_MI_TMSI_TLV(p_tmsi),
				ptmsiSignature := ts_PtmsiSigTLV(p_tmsi_sig)
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_DET_ACCEPT_MT := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			detachAccept_SGSN_MS := {
				messageType := '00000110'B,
				forceToStandby := ?,
				spare := '0000'B
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_GMM_DET_REQ_MT(
		template BIT3 dtt := *,
		template BIT3 forceToStandby := ?,
		template OCT1 cause := *) := {
	discriminator := '1000'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			detachRequest_SGSN_MS := {
				messageType := '00000101'B,
				detachType := { dtt, ? },
				forceToStandby := { forceToStandby, '0'B },
				gmmCause := {
					elementIdentifier := '25'O,
					causeValue := { cause }
				}
			}
		}
	}
}

template PDU_L3_MS_SGSN ts_GMM_DET_ACCEPT_MO := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		gprs_mm := {
			detachAccept_MS_SGSN := {
				messageType := '00000000'B
			}
		}
	}
}

function ts_ApnTLV(template (omit) octetstring apn) return template (omit) AccessPointNameTLV {
	if (istemplatekind(apn, "omit")) {
		return omit;
	} else {
		var template (omit) AccessPointNameTLV ret := {
			elementIdentifier := '28'O,
			lengthIndicator := 0, /* overwritten */
			accessPointNameValue := apn
		}
		return ret;
	}
}

function ts_PcoTLV(template (omit) ProtocolConfigOptionsV pco)
					return template (omit) ProtocolConfigOptionsTLV {
	if (istemplatekind(pco, "omit")) {
		return omit;
	} else {
		var template (omit) ProtocolConfigOptionsTLV ret := {
			elementIdentifier := '27'O,
			lengthIndicator := 0, /* overwritten */
			protocolConfigOptionsV := pco
		}
		return ret;
	}
}

function ts_TearDownIndicatorTV(in template (omit) boolean ind)
					return template (omit) TearDownIndicatorTV {
	if (istemplatekind(ind, "omit")) {
		return omit;
	} else {
		var template (omit) TearDownIndicatorTV ret := {
			tearDownIndicatorV := {
				tdi_flag := bool2bit(valueof(ind)),
				spare := '000'B
			},
			elementIdentifier := '1001'B
		}
		return ret;
	}
}

template (value) PDU_L3_MS_SGSN ts_SM_ACT_PDP_REQ(BIT3 tid, BIT4 nsapi, BIT4 sapi, QoSV qos,
						  PDPAddressV addr,
						  template (omit) octetstring apn := omit,
						  template (omit) ProtocolConfigOptionsV pco := omit
						) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			activatePDPContextRequest := {
				messageType := '00000000'B, /* overwritten */
				requestedNSAPI := { nsapi, '0000'B },
				requestedLLCSAPI := { sapi, '0000'B },
				requestedQoS := {
					lengthIndicator := 0, /* overwritten */
					qoSV := qos
				},
				requestedPDPaddress := {
					lengthIndicator := 0, /* overwritten */
					pdpAddressV := addr
				},
				accessPointName := ts_ApnTLV(apn),
				protocolConfigOpts := ts_PcoTLV(pco),
				requestType := omit,
				deviceProperties := omit,
				nBIFOM_Container := omit
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_SM_ACT_PDP_REJ(template BIT3 tid := ?, template OCT1 cause := ?) := {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			activatePDPContextReject := {
				messageType := '01000011'B,
				smCause := cause,
				protocolConfigOpts := *,
				backOffTimer := *,
				reAttemptIndicator := *,
				nBIFOM_Container := *
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_SM_ACT_PDP_ACCEPT(template BIT3 tid := ?, template BIT4 sapi := ?,
					     template QoSV qos := ?)
:= {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			activatePDPContextAccept := {
				messageType := '01000010'B,
				negotiatedLLCSAPI := { sapi, '0000'B },
				negotiatedQoS := {
					lengthIndicator := ?,
					qoSV := qos
				},
				radioPriority := ?,
				spare := '0000'B,
				pdpAddress := *,
				protocolConfigOpts := *,
				packetFlowID := *,
				sMCause2 := *,
				connectivityType := *,
				wLANOffloadIndication := *,
				nBIFOM_Container := *
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_SM_DEACT_PDP_REQ_MO(BIT3 tid, OCT1 cause,
						  template (omit) boolean tdown := omit,
						  template (omit) ProtocolConfigOptionsV pco := omit
						) := {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextRequest := {
				messageType := '01000110'B,
				smCause := cause,
				tearDownIndicator := ts_TearDownIndicatorTV(tdown),
				protocolConfigOpts := ts_PcoTLV(pco),
				mBMSprotocolConfigOptions := omit,
				t3396 := omit,
				wLANOffloadIndication := omit,
				nBIFOM_Container := omit
			}
		}
	}
}

template (value) PDU_L3_SGSN_MS ts_SM_DEACT_PDP_REQ_MT(BIT3 tid, OCT1 cause,
						  template (omit) boolean tdown := omit,
						  template (omit) ProtocolConfigOptionsV pco := omit
						) := {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextRequest := {
				messageType := '01000110'B,
				smCause := cause,
				tearDownIndicator := ts_TearDownIndicatorTV(tdown),
				protocolConfigOpts := ts_PcoTLV(pco),
				mBMSprotocolConfigOptions := omit,
				t3396 := omit,
				wLANOffloadIndication := omit,
				nBIFOM_Container := omit
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_SM_DEACT_PDP_REQ_MT(template BIT3 tid, template OCT1 cause,
						template (omit) boolean tdown := omit,
						template (omit) ProtocolConfigOptionsV pco := omit
					) := {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextRequest := {
				messageType := '01000110'B,
				smCause := cause,
				tearDownIndicator := ts_TearDownIndicatorTV(tdown),
				protocolConfigOpts := ts_PcoTLV(pco),
				mBMSprotocolConfigOptions := *,
				t3396 := *,
				wLANOffloadIndication := *,
				nBIFOM_Container := *
			}
		}
	}
}

template PDU_L3_SGSN_MS tr_SM_DEACT_PDP_ACCEPT_MT(template BIT3 tid := ?)
:= {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_REPL,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextAccept := {
				messageType := '01000111'B,
				protocolConfigOpts := *,
				mBMSprotocolConfigOptions := *,
				nBIFOM_Container := *
			}
		}
	}
}

template PDU_L3_MS_SGSN tr_SM_DEACT_PDP_ACCEPT_MO(template BIT3 tid := ?)
:= {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_ORIG, 
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextAccept := {
				messageType := '01000111'B,
				protocolConfigOpts := *,
				mBMSprotocolConfigOptions := *,
				nBIFOM_Container := *
			}
		}
	}
}

template (value) PDU_L3_MS_SGSN ts_SM_DEACT_PDP_ACCEPT_MO(BIT3 tid)
:= {
	discriminator := '1010'B,
	tiOrSkip := {
		transactionId := {
			tio := tid,
			tiFlag := c_TIF_ORIG,
			tIExtension := omit
		}
	},
	msgs := {
		gprs_sm := {
			deactivatePDPContextAccept := {
				messageType := '01000111'B,
				protocolConfigOpts := omit,
				mBMSprotocolConfigOptions := omit,
				nBIFOM_Container := omit
			}
		}
	}
}



private function f_concat_pad(integer tot_len, hexstring prefix, integer suffix) return hexstring {
	var integer suffix_len := tot_len - lengthof(prefix);
	var charstring suffix_ch := int2str(suffix);
	var integer pad_len := suffix_len - lengthof(suffix_ch);

	return prefix & int2hex(0, pad_len) & str2hex(suffix_ch);
}

function f_gen_imei(integer suffix) return hexstring {
	return f_concat_pad(14, '49999'H, suffix);
}

function f_gen_imsi(integer suffix) return hexstring {
	return f_concat_pad(15, '26242'H, suffix);
}

function f_gen_msisdn(integer suffix) return hexstring {
	return f_concat_pad(12, '49123'H, suffix);
}

external function enc_MobileIdentityLV(in MobileIdentityLV si) return octetstring
	with { extension "prototype(convert) encode(RAW)" };



/* SMS TPDU Layer */

template (value) TPDU_RP_DATA_MS_SGSN ts_SMS_SUBMIT(OCT1 msg_ref, template (value) TP_DA dst_addr,
					  template (value) OCT1 pid, template (value) OCT1 dcs,
					  integer length_ind, octetstring user_data) := {
	sMS_SUBMIT := {
		tP_MTI := '01'B,	/* SUBMIT */
		tP_RD := '1'B,		/* reject duplicates */
		tP_VPF := '00'B,	/* not present */
		tP_SRR := '0'B,		/* no status report requested */
		tP_UDHI := '0'B,	/* no user data header in UD */
		tP_RP := '0'B,		/* no reply path */
		tP_MR := msg_ref,
		tP_DA := dst_addr,
		tP_PID := pid,
		tP_DCS := dcs,
		tP_VP := omit,
		tP_UDL_UD := {
			tP_LengthIndicator := length_ind,
			tP_UD := user_data
		}
	}
}

template TPDU_RP_DATA_SGSN_MS tr_SMS_DELIVER(template TP_OA src_addr := ?,
				    template octetstring user_data := ?,
				    template OCT1 pid := ?, template OCT1 dcs := ?,
				    template BIT1 mms := ?
				) := {
	sMS_DELIVER := {
		tP_MTI := '00'B,	/* DELIVER */
		tP_MMS := mms,		/* more messages to send */
		tP_LP := ?,		/* ?!? */
		tP_Spare := '0'B,
		tP_SRI := '0'B,		/* status report indication */
		tP_UDHI := '0'B,	/* no user data header in UD */
		tP_RP := '0'B,		/* no reply path */
		tP_OA := src_addr,
		tP_PID := pid,
		tP_DCS := dcs,
		tP_SCTS := ?,
		tP_UDL_UD := {
			tP_LengthIndicator := ?,
			tP_UD := user_data
		}
	}
}

/* RP Layer */

private function ts_RpOrig(template (omit) RP_NumberingPlan_and_NumberDigits rp_orig)
return RP_OriginatorAddressLV {
	var RP_OriginatorAddressLV ret;
	if (istemplatekind(rp_orig, "omit")) {
		ret := { 0, omit };
	} else {
		ret := { 0, valueof(rp_orig) };
	}
	return ret;
}

private function ts_RpDst(template (omit) RP_NumberingPlan_and_NumberDigits rp_dst)
return RP_DestinationAddressLV {
	var RP_DestinationAddressLV ret;
	if (istemplatekind(rp_dst, "omit")) {
		ret := { 0, omit };
	} else {
		ret := { 0, valueof(rp_dst) };
	}
	return ret;
}

template (value) RPDU_MS_SGSN ts_RP_DATA_MO(OCT1 msg_ref,
					    template (omit) RP_NumberingPlan_and_NumberDigits rp_orig,
					    template (omit) RP_NumberingPlan_and_NumberDigits rp_dst,
					    template (value) TPDU_RP_DATA_MS_SGSN tpdu) := {
	rP_DATA_MS_SGSN := {
		rP_MTI := '000'B,
		rP_Spare := '00000'B,
		rP_MessageReference := msg_ref,
		rP_OriginatorAddress := ts_RpOrig(rp_orig),
		rP_DestinationAddress := ts_RpDst(rp_dst),
		rP_User_Data := {
			rP_LengthIndicator := 0, /* overwritten */
			rP_TPDU := tpdu
		}
	}
}

template RPDU_SGSN_MS tr_RP_DATA_MT(template OCT1 msg_ref,
				    template RP_NumberingPlan_and_NumberDigits rp_orig,
				    template RP_NumberingPlan_and_NumberDigits rp_dst,
				    template TPDU_RP_DATA_SGSN_MS tpdu) := {
	rP_DATA_SGSN_MS := {
		rP_MTI := '001'B,
		rP_Spare := '00000'B,
		rP_MessageReference := msg_ref,
		rP_OriginatorAddress := { ?, rp_orig },
		rP_DestinationAddress := { ?, rp_dst },
		rP_User_Data := {
			rP_LengthIndicator := ?,
			rP_TPDU := tpdu
		}

	}
}

template (value) RPDU_MS_SGSN ts_RP_ACK_MO(OCT1 msg_ref) := {
	rP_ACK_MS_SGSN := {
		rP_MTI := '010'B,
		rP_Spare := '00000'B,
		rP_MessageReference := msg_ref,
		rP_User_Data := omit /* FIXME: report */
	}
}

template RPDU_SGSN_MS tr_RP_ACK_MT(template OCT1 msg_ref) := {
	rP_ACK_SGSN_MS := {
		rP_MTI := '011'B,
		rP_Spare := '00000'B,
		rP_MessageReference := msg_ref,
		rP_User_Data := omit /* FIXME: report */
	}
}

template (value) RPDU_MS_SGSN ts_RP_ERROR_MO(OCT1 msg_ref, uint7_t cause) := {
	rP_ERROR_MS_SGSN := {
		rP_MTI := '100'B,
		rP_Spare := '00000'B,
		rP_Message_Reference := msg_ref,
		rP_CauseLV := {
			rP_LengthIndicator := 0, /* overwritten */
			rP_CauseV := {
				causeValue := int2bit(cause, 7),
				ext := '0'B
			},
			rP_diagnisticField := omit
		},
		rP_User_Data := omit /* FIXME: report */
	}
}

private function f_cause_or_wc(template uint7_t cause) return template BIT7 {
	if (istemplatekind(cause, "?")) {
		return ?;
	} else if (istemplatekind(cause, "*")) {
		return *;
	} else {
		return int2bit(valueof(cause), 7);
	}
}

template RPDU_SGSN_MS tr_RP_ERROR_MT(template OCT1 msg_ref, template uint7_t cause) := {
	rP_ERROR_SGSN_MS := {
		rP_MTI := '101'B,
		rP_Spare := '00000'B,
		rP_Message_Reference := msg_ref,
		rP_CauseLV := {
			rP_LengthIndicator := 0, /* overwritten */
			rP_CauseV := {
				causeValue := f_cause_or_wc(cause),
				ext := '0'B
			},
			rP_diagnisticField := omit
		},
		rP_User_Data := omit /* FIXME: report */
	}
}


template (value) RPDU_MS_SGSN ts_RP_SMMA_MO(OCT1 msg_ref) := {
	rP_SMMA := {
		rP_MTI := '110'B,
		rP_Spare := '00000'B,
		rP_MessageReference := msg_ref
	}
}




/* CP Layer */

template (value) L3_SMS_MS_SGSN ts_CP_DATA_MO(template (value) RPDU_MS_SGSN rpdu) := {
	cP_DATA := {
		cP_messageType := '00000001'B,
		cP_User_Data := {
			lengthIndicator := 0, /* overwritten */
			cP_RPDU := rpdu
		}
	}
}

template (value) L3_SMS_MS_SGSN ts_CP_ACK_MO := {
	cP_ACK := {
		cP_messageType := '00000100'B
	}
}

template (value) L3_SMS_MS_SGSN ts_CP_ERROR_MO(OCT1 cause) := {
	cP_ERROR := {
		cP_messageType := '00010000'B,
		cP_Cause := {
			causeValue := cause
		}
	}
}

template L3_SMS_SGSN_MS tr_CP_DATA_MT(template RPDU_SGSN_MS rpdu) := {
	cP_DATA := {
		cP_messageType := '00000001'B,
		cP_User_Data := {
			lengthIndicator := ?,
			cP_RPDU := rpdu
		}
	}
}

template L3_SMS_SGSN_MS tr_CP_ACK_MT := {
	cP_ACK := {
		cP_messageType := '00000100'B
	}
}

template L3_SMS_SGSN_MS tr_CP_ERROR_MT(template OCT1 cause) := {
	cP_ERROR := {
		cP_messageType := '00010000'B,
		cP_Cause := {
			causeValue := cause
		}
	}
}

/* L3 Wrapper */

template (value) PDU_ML3_MS_NW ts_ML3_MO_SMS(uint3_t tid, BIT1 ti_flag,
					     template (value) L3_SMS_MS_SGSN sms_mo) := {
	discriminator := '1001'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		sms := sms_mo
	}
}

private function f_tid_or_wc(template uint3_t tid) return template BIT3 {
	var template BIT3 ret;
	if (istemplatekind(tid, "*")) {
		return *;
	} else if (istemplatekind(tid, "?")) {
		return ?;
	} else {
		return int2bit(valueof(tid), 3);
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_SMS(template uint3_t tid, template BIT1 ti_flag,
				     template L3_SMS_SGSN_MS sms_mt) := {
	discriminator := '1001'B,
	tiOrSkip := {
		transactionId := {
			tio := f_tid_or_wc(tid),
			tiFlag := ti_flag,
			tIExtension := omit
		}
	},
	msgs := {
		sms := sms_mt
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_MM_Info := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			mMInformation := {
				messageType := '110010'B,
				nsd := '00'B,
				fullNetworkName := *,
				shortNetworkName := *,
				localtimeZone := *,
				univTime := *,
				lSAIdentity := *,
				networkDST := *
			}
		}
	}
}



}
