L3_Templates: Add templates related to Supplementaryt Services

Change-Id: I919fa542a2e037b3fcf8cd5b0b9d7599b8c09070
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 824dbf2..593c990 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -1295,6 +1295,214 @@
 }
 
 /***********************************************************************
+ * 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
+}
+
+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)
+			}
+		}
+	}
+}
+
+/***********************************************************************
  * GPRS Mobility Management
  ***********************************************************************/