module L3_Templates {

/* L3 Templates, building on top of MobileL3*_Types from Ericsson.
 *
 * (C) 2017 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.
 */

import from General_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;


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)
}


/* send template fro 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
			}
		}
	}
}

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;
}

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

/* send template fro Mobile Identity (IMEI) */
template (value) MobileIdentityLV ts_MI_IMEI_LV(hexstring imei_digits) := {
	lengthIndicator := 0, /* overwritten */
	mobileIdentityV := {
		typeOfIdentity := '000'B, /* overwritten */
		oddEvenInd_identity := {
			imei := f_enc_IMEI_L3(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 := *
			}
		}
	}
}

/* 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_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
			}
		}
	}
}

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 (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_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 := *
			}
		}
	}
}

template PDU_ML3_NW_MS tr_ML3_MT_MM_ID_Req(template BIT3 id_type := ?) := {
	discriminator := '0101'B,
	tiOrSkip := {
		skipIndicator := '0000'B
	},
	msgs := {
		mm := {
			identityRequest := {
				messageType := '011000'B,
				nsd := '00'B,
				identityType := 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) := {
	rf_PowerCapability := '010'B,
	a5_1 := a5_1_unavail,
	esind := '1'B,
	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 := '000'B,
			tiFlag := '0'B,
			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
}

template CallingPartyBCD_Number tr_Calling(template hexstring digits) := {
	elementIdentifier := '5C'O,
	lengthIndicator := ?,
	oct3 := ?,
	digits := 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 := '0'B,
			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 := '0'B,
			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_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := '1'B,
			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 := '0'B,
			tIExtension := omit
		}
	},
	msgs := {
		cc := {
			connectAck := {
				messageType := '001111'B,
				nsd := '00'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 (value) PDU_ML3_MS_NW ts_ML3_MO_CC_REL_COMPL(integer tid) := {
	discriminator := '0011'B,
	tiOrSkip := {
		transactionId := {
			tio := int2bit(tid, 3),
			tiFlag := '0'B,
			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_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 (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 := '1'B, /* 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 := '0'B, /* 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 := *
			}
		}
	}
}



}
