ggsn: Improve checks around Gy messages

Change-Id: I702796f2f941b78da904faa2ffdba4185333bc0d
diff --git a/library/DIAMETER_Templates.ttcn b/library/DIAMETER_Templates.ttcn
index adf4ee6..855358d 100644
--- a/library/DIAMETER_Templates.ttcn
+++ b/library/DIAMETER_Templates.ttcn
@@ -195,6 +195,21 @@
 	vendor_id := vendor_id_3GPP
 }
 
+template (present) AVP_Address tr_AVP_Address(template (present) AddressType addr_type := ?,
+					      template (present) octetstring addr_data := ?) := {
+	address_type := addr_type,
+	address_data := addr_data
+}
+
+template (present) GenericAVP tr_AVP_SubcrId(template (present) DCC_NONE_Subscription_Id t) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id),
+		avp_data := {
+			avp_DCC_NONE_Subscription_Id := t
+		}
+	}
+}
+
 template (present) GenericAVP tr_AVP_SubcrIdType(template (present) DCC_NONE_Subscription_Id_Type t) := {
 	avp := {
 		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id_Type),
@@ -204,6 +219,42 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_SubcrIdData(template (present) DCC_NONE_Subscription_Id_Data t) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id_Data),
+		avp_data := {
+			avp_DCC_NONE_Subscription_Id_Data := t
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_RequestedAction(template (present) DCC_NONE_Requested_Action t := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Requested_Action),
+		avp_data := {
+			avp_DCC_NONE_Requested_Action := t
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_MultipleServicesIndicator(template (present) DCC_NONE_Multiple_Services_Indicator t := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Indicator),
+		avp_data := {
+			avp_DCC_NONE_Multiple_Services_Indicator := t
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_ServiceContextId(template (present) DCC_NONE_Service_Context_Id id := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Service_Context_Id),
+		avp_data := {
+			avp_DCC_NONE_Service_Context_Id := id
+		}
+	}
+}
+
 template (value) GenericAVP ts_AVP_OriginHost(template (value) charstring host) := {
 	avp := {
 		avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Host),
@@ -257,6 +308,15 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_TerminationCause(template (present) BASE_NONE_Termination_Cause tc) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Termination_Cause),
+		avp_data := {
+			avp_BASE_NONE_Termination_Cause := tc
+		}
+	}
+}
+
 template (value) GenericAVP ts_AVP_HostIpAddr(template (value) OCTET4 ipv4_addr) := {
 	avp := {
 		avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Host_IP_Address),
@@ -381,7 +441,14 @@
 	}
 }
 
-
+template (present) GenericAVP tr_AVP_EventTimestamp(template (present) AVP_Unsigned32 n := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Event_Timestamp),
+		avp_data := {
+			avp_BASE_NONE_Event_Timestamp := n
+		}
+	}
+}
 
 
 template (value) GenericAVP ts_AVP_SuppVendorIdRaw(uint32_t vendor_id) := {
@@ -446,6 +513,15 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_DestinationHost(template (present) charstring host := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Host),
+		avp_data := {
+			avp_BASE_NONE_Destination_Host := host
+		}
+	}
+}
+
 /* 3.3 Destination Realm */
 template (value) GenericAVP ts_AVP_DestinationRealm(template (value) charstring dest_realm) := {
 	avp := {
@@ -611,7 +687,7 @@
 }
 
 /* TS 29.262 7.3.13 RAT-Type */
-template (value) GenericAVP ts_AVP_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := {
+template (value) GenericAVP ts_AVP_PCC_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := {
 	avp := {
 		avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
 		avp_data := {
@@ -619,7 +695,7 @@
 		}
 	}
 }
-template (present) GenericAVP tr_AVP_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := {
+template (present) GenericAVP tr_AVP_PCC_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := {
 	avp := {
 		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
 		avp_data := {
@@ -628,6 +704,15 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_GI_3GPP_RatType(template (present) GI_3GPP_3GPP_RAT_Type rat_type := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_RAT_Type),
+		avp_data := {
+			avp_GI_3GPP_3GPP_RAT_Type := rat_type
+		}
+	}
+}
+
 /* TS 29.262 7.3.7 ULR-Flags */
 template (value) GenericAVP ts_AVP_3GPP_UlrFlags(template (value) UINT32 flags) := {
 	avp := {
@@ -774,6 +859,15 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_3GPP_QoS_Information(template (present) AVP_list list := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Information),
+		avp_data := {
+			avp_PCC_3GPP_QoS_Information := list
+		}
+	}
+}
+
 template (value) GenericAVP ts_AVP_3GPP_QosClassId(uint32_t id) := {
 	avp := {
 		avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Class_Identifier),
@@ -850,7 +944,167 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_3GPP_Reporting_Reason(template (present) DCA_3GPP_Reporting_Reason r := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Reporting_Reason),
+		avp_data := {
+			avp_DCA_3GPP_Reporting_Reason := r
+		}
+	}
+}
 
+template (present) GenericAVP tr_AVP_3GPP_AoCRequestType(template (present) DCA_3GPP_AoC_Request_Type t := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_AoC_Request_Type),
+		avp_data := {
+			avp_DCA_3GPP_AoC_Request_Type := t
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_ServiceInformation(template (present) AVP_list content := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Service_Information),
+		avp_data := {
+			avp_DCA_3GPP_Service_Information := content
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_PSInformation(template (present) AVP_list content := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_PS_Information),
+		avp_data := {
+			avp_DCA_3GPP_PS_Information := content
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_ChargingId(template (present) AVP_OctetString id := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Charging_Id),
+		avp_data := {
+			avp_GI_3GPP_3GPP_Charging_Id := id
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_PDPType(template (present) GI_3GPP_3GPP_PDP_Type t := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_PDP_Type),
+		avp_data := {
+			avp_GI_3GPP_3GPP_PDP_Type := t
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_PDPAddress(template (present) DCA_3GPP_PDP_Address addr := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_PDP_Address),
+		avp_data := {
+			avp_DCA_3GPP_PDP_Address := addr
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_SGSNAddress(template (present) DCA_3GPP_SGSN_Address addr := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_SGSN_Address),
+		avp_data := {
+			avp_DCA_3GPP_SGSN_Address := addr
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_GGSNAddress(template (present) DCA_3GPP_GGSN_Address addr := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_GGSN_Address),
+		avp_data := {
+			avp_DCA_3GPP_GGSN_Address := addr
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_SelectionMode(template (present) GI_3GPP_3GPP_Selection_Mode sm := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Selection_Mode),
+		avp_data := {
+			avp_GI_3GPP_3GPP_Selection_Mode := sm
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_ChargingCharacteristics(template (present) GI_3GPP_3GPP_Charging_Characteristics cc := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Charging_Characteristics),
+		avp_data := {
+			avp_GI_3GPP_3GPP_Charging_Characteristics := cc
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_SGSNMCCMNC(template (present) GI_3GPP_3GPP_SGSN_MCC_MNC smn := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_SGSN_MCC_MNC),
+		avp_data := {
+			avp_GI_3GPP_3GPP_SGSN_MCC_MNC := smn
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_NSAPI(template (present) GI_3GPP_3GPP_NSAPI nsapi := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_NSAPI),
+		avp_data := {
+			avp_GI_3GPP_3GPP_NSAPI := nsapi
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_MS_TimeZone(template (present) GI_3GPP_3GPP_MS_TimeZone ms_tz := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_MS_TimeZone),
+		avp_data := {
+			avp_GI_3GPP_3GPP_MS_TimeZone := ms_tz
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_3GPP_ULI(template (present) GI_3GPP_3GPP_User_Location_Info uli := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_User_Location_Info),
+		avp_data := {
+			avp_GI_3GPP_3GPP_User_Location_Info := uli
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_UserEquipmentInfo(template (present) DCC_NONE_User_Equipment_Info uei := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info),
+		avp_data := {
+			avp_DCC_NONE_User_Equipment_Info := uei
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_UserEquipmentInfoType(template (present) DCC_NONE_User_Equipment_Info_Type ueit := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info_Type),
+		avp_data := {
+			avp_DCC_NONE_User_Equipment_Info_Type := ueit
+		}
+	}
+}
+
+template (present) GenericAVP tr_AVP_UserEquipmentInfoValue(template (present) DCC_NONE_User_Equipment_Info_Value ueiv := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info_Value),
+		avp_data := {
+			avp_DCC_NONE_User_Equipment_Info_Value := ueiv
+		}
+	}
+}
 
 /* TS 29.262 7.3.62 PDN-Type */
 template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Type pdn_type) := {
@@ -871,6 +1125,34 @@
 		}
 	}
 }
+template (present) GenericAVP tr_AVP_Multiple_Services_Credit_Control(template (present) AVP_list content := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Credit_Control),
+		avp_data := {
+			avp_DCC_NONE_Multiple_Services_Credit_Control := content
+		}
+	}
+}
+
+/* Requested-Service-Unit AVP */
+template (present) GenericAVP tr_AVP_Requested_Service_Unit(template (present) AVP_list content := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Requested_Service_Unit),
+		avp_data := {
+			avp_DCC_NONE_Requested_Service_Unit := content
+		}
+	}
+}
+
+/* Used-Service-Unit AVP */
+template (present) GenericAVP tr_AVP_Used_Service_Unit(template (present) AVP_list content := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Used_Service_Unit),
+		avp_data := {
+			avp_DCC_NONE_Used_Service_Unit := content
+		}
+	}
+}
 
 /* RFC4006 8.17 Granted-Service-Unit AVP */
 template (value) GenericAVP ts_AVP_Granted_Service_Unit(template (value) AVP_list content) := {
@@ -912,6 +1194,14 @@
 	}
 }
 
+template (present) GenericAVP tr_AVP_3GPP_CalledStationId(template (present) DNAS_NONE_Called_Station_Id id := ?) := {
+	avp := {
+		avp_header := tr_DIA_Hdr(c_AVP_Code_DNAS_NONE_Called_Station_Id),
+		avp_data := {
+			avp_DNAS_NONE_Called_Station_Id := id
+		}
+	}
+}
 
 
 /* 5.3.2 Capabilities Exchange Answer */
@@ -1076,7 +1366,7 @@
 			ts_AVP_UserNameImsi(imsi),
 			ts_AVP_3GPP_UlrFlags('00000000'O),
 			ts_AVP_3GPP_VisitedPlmnId('11111F'O),
-			ts_AVP_3GPP_RatType(EUTRAN),
+			ts_AVP_PCC_3GPP_RatType(EUTRAN),
 			ts_AVP_OriginHost(orig_host),
 			ts_AVP_OriginRealm(orig_realm),
 			ts_AVP_DestinationRealm(dest_realm)
@@ -1101,7 +1391,7 @@
 			tr_AVP_OriginRealm(orig_realm),
 			tr_AVP_DestinationRealm(dest_realm),
 			tr_AVP_UserNameImsi(imsi),
-			tr_AVP_3GPP_RatType(EUTRAN),
+			tr_AVP_PCC_3GPP_RatType,
 			tr_AVP_3GPP_UlrFlags,
 			tr_AVP_3GPP_VisitedPlmnId
 	));