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
}


/* 3GPP TS 24.008, section 10.5.1.4 "Mobile Identity" */
template (value) MobileIdentityTLV ts_MI_TLV(template (value) MobileIdentityV mi) := {
	elementIdentifier := '0010111'B,
	spare1 := '0'B,
	mobileIdentityLV := ts_MI_LV(mi)
};
template MobileIdentityTLV tr_MI_TLV(template MobileIdentityV mi) := {
	elementIdentifier := '0010111'B,
	spare1 := '0'B,
	mobileIdentityLV := tr_MI_LV(mi)
};

template (value) MobileIdentityLV ts_MI_LV(template (value) MobileIdentityV mi) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := mi
};
template MobileIdentityLV tr_MI_LV(template MobileIdentityV mi) := {
	lengthIndicator := ?,
	mobileIdentityV := mi
};

/* Universal (send & receive) template for No Identity */
template MobileIdentityV t_MI_NoIdentity(template (present) hexstring filler := 'F'H) := {
	typeOfIdentity := '000'B,
	oddEvenInd_identity := {
		no_identity := {
			/* Always old, since length can be 1, 3, or 5 */
			oddevenIndicator := '0'B,
			fillerDigits := filler
		}
	}
};

/* Universal (send & receive) template for TMSI/P-TMSI */
template MobileIdentityV t_MI_TMSI(template (present) OCT4 tmsi) := {
	typeOfIdentity := '100'B,
	oddEvenInd_identity := {
		tmsi_ptmsi := {
			oddevenIndicator := '0'B,
			fillerDigit := '1111'B,
			octets := tmsi
		}
	}
};

private function f_tr_MI_IMSI(template (present) hexstring digits)
return template (present) IMSI_L3 {
	if (istemplatekind(digits, "?")) {
		return ?;
	} else {
		return f_enc_IMSI_L3(valueof(digits))
	}
}
template MobileIdentityV tr_MI_IMSI(template (present) hexstring imsi) := {
	typeOfIdentity := '001'B,
	oddEvenInd_identity := {
		imsi := f_tr_MI_IMSI(imsi)
	}
};
template (value) MobileIdentityV ts_MI_IMSI(hexstring imsi) := {
	typeOfIdentity := '001'B,
	oddEvenInd_identity := {
		imsi := f_enc_IMSI_L3(imsi)
	}
};


/* 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);
	/* IMEI_L3 is always 15 digits. That is actually a 14 digit IMEI + a Luhn checksum digit (see
	 * libosmocore/include/osmocom/gsm/protocol/gsm_23_003.h)
	 *
	 * Here, we must not make the oddevenIndicator depend on the 'digits' parameter, because:
	 * - The IMEI_L3 template assumes always 15 digits.
	 * - The 'digits' parameter, however, may also contain less digits, 14 in the case of
	 *   f_gen_imei().
	 * - The IMEI_L3 template will then fill up with zeros to make 15 digits.
	 * Hence oddevenIndicator must always indicate 'odd' == '1'B.
	 *
	 * FIXME: if the caller passes less than 15 digits, the Luhn checksum digit then ends up zero == most probably
	 * wrong.
	 */
	l3.oddevenIndicator := '1'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
	}
};

template LocationUpdatingType LU_Type_Normal := {
	lut := '00'B,
	spare1_1 := '0'B,
	fop := '0'B
};

template LocationUpdatingType LU_Type_Periodic := {
	lut := '01'B,
	spare1_1 := '0'B,
	fop := '0'B
};

template LocationUpdatingType LU_Type_IMSI_Attach := {
	lut := '10'B,
	spare1_1 := '0'B,
	fop := '0'B
};

/* Send template for LOCATION UPDATING REQUEST */
template PDU_ML3_MS_NW ts_LU_REQ(template LocationUpdatingType lu_type, MobileIdentityLV mi_lv,
				 OCT3 mcc_mnc := '123456'O) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			locationUpdateRequest := {
				messageType := '000000'B, /* overwritten */
				nsd := '00'B,
				locationUpdatingType := lu_type,
				cipheringKeySequenceNumber := { '000'B, '0'B },
				locationAreaIdentification := {
						mcc_mnc := mcc_mnc,
						lac := '172A'O
					},
				mobileStationClassmark1 := ts_CM1,
				mobileIdentityLV := mi_lv,
				classmarkInformationType2_forUMTS := omit,
				additionalUpdateParameterTV := omit,
				deviceProperties := omit,
				mS_NetworkFeatureSupport := omit
			}
		}
	}
}

template PDU_ML3_NW_MS ts_LU_ACCEPT(template MobileIdentityTLV mi_tlv := omit) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			locationUpdateAccept := {
				messageType := '000000'B, /* overwritten */
				nsd := '00'B,
				locationAreaIdentification := {
						mcc_mnc := '123456'O,
						lac := '172A'O
					},
				mobileIdentityTLV := mi_tlv,
				followOnProceed := omit,
				cTS_Permission := omit,
				equivalentPLMNs := omit,
				emergencyNumberList := omit,
				perMS_T3212 := omit
			}
		}
	}
}

/* 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 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_CellSelectInd(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
		}
	},
	msgs := -
}

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

template CalledPartyBCD_Number tr_Called(template hexstring digits) := {
	elementIdentifier := '5E'O,
	lengthIndicator := ?,
	numberingPlanIdentification := ?,
	typeOfNumber := ?,
	ext1 := '1'B, /* no extension */
	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 */
};

private function f_presence_bit_MultislotCap_GPRS(template (omit) MultislotCap_GPRS mscap_gprs) return BIT1 {
	if (istemplatekind(mscap_gprs, "omit")) {
		return '0'B;
	}
	return '1'B;
}
private function f_presence_bit_MultislotCap_EGPRS(template (omit) MultislotCap_EGPRS mscap_egprs) return BIT1 {
	if (istemplatekind(mscap_egprs, "omit")) {
		return '0'B;
	}
	return '1'B;
}
template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att := '0001'B /* E-GSM */, template (omit) MultislotCap_GPRS mscap_gprs := omit, template (omit) MultislotCap_EGPRS mscap_egprs := omit) := {
	mSRACapabilityValues := {
		mSRACapabilityValuesExclude1111 := {
			accessTechnType := att, /* E-GSM */
			accessCapabilities := {
				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 := '1'B,
					multislotcap := {
						presenceBitHscsd := '0'B,
						hscsdmultislotclass := omit,
						presenceBitGprs := f_presence_bit_MultislotCap_GPRS(mscap_gprs),
						gprsmultislot := mscap_gprs,
						presenceBitSms := '0'B,
						multislotCap_SMS := omit,
						multislotCapAdditionsAfterRel97 := {
								presenceBitEcsdmulti := '0'B,
								ecsdmultislotclass := omit,
								presenceBitEgprsmulti := f_presence_bit_MultislotCap_EGPRS(mscap_egprs),
								multislotCap_EGPRS := mscap_egprs,
								presenceBitDtmGprsmulti := '0'B,
								multislotCapdtmgprsmultislotsubclass := omit
						}
					},
					accessCapAdditionsAfterRel97 := omit
				},
				spare_bits := omit
			}
		}
	},
	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
			}
		}
	}
}



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

external function dec_MobileIdentityV(in octetstring mi) return MobileIdentityV
	with { extension "prototype(convert) decode(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 := ?,
			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 := *
			}
		}
	}
}

template (value) PDU_ML3_MS_NW ts_RRM_GprsSuspReq(template (value) OCT4 tlli,
						  template (value) RoutingAreaIdentificationV rai,
						  template (value) OCT1 cause) := {
	discriminator := '0000'B, /* overwritten */
	tiOrSkip := {
	skipIndicator := '0000'B
	},
	msgs := {
		rrm := {
			gPRS_suspensionRequest := {
				messageType := '00110100'B,
				tLLI := tlli,
				routingAreaIdentification := rai,
				suspensionCause := cause,
				service_Support := omit
			}
		}
	}
}



}
