GGSN_Tests: Verify EUA and PCO in PDP context creation

The EUA and PCO of the created PDP context mustmatc wat we sent in the
request.
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn
index 3d48109..b3e26d5 100644
--- a/ggsn_tests/GGSN_Tests.ttcn
+++ b/ggsn_tests/GGSN_Tests.ttcn
@@ -191,6 +191,14 @@
 		}
 	}
 	template EndUserAddress t_EuaIPv4Dyn := t_EuaIPv4(omit);
+	template EndUserAddress tr_EuaIPv4(template OCT4 ip_addr) modifies t_EuaIPv4 := {
+		endUserAddress := {
+			endUserAddressIPv4 := {
+				lengthf := 2+lengthof(ip_addr)
+			}
+		}
+	}
+
 	template EndUserAddress t_EuaIPv6(template OCT16 ip_addr) := {
 		type_gtpc := '80'O,
 		endUserAddress := {
@@ -204,6 +212,13 @@
 		}
 	}
 	template EndUserAddress t_EuaIPv6Dyn := t_EuaIPv6(omit);
+	template EndUserAddress tr_EuaIPv6(template OCT16 ip_addr) modifies t_EuaIPv6 := {
+		endUserAddress := {
+			endUserAddressIPv6 := {
+				lengthf := 2+lengthof(ip_addr)
+			}
+		}
+	}
 
 	template AccessPointName ts_APN(octetstring apn) := {
 		type_gtpc := '83'O,
@@ -336,6 +351,7 @@
 								sgsn_ip_data, msisdn, pco)), seq)
 	}
 
+	/* PCO send base template */
 	template ProtConfigOptions ts_PCO := {
 		type_gtpc := '84'O,
 		lengthf := 0,
@@ -344,13 +360,26 @@
 		extension0 := '1'B,
 		protocols := {}
 	}
-
+	/* PCO receive base template */
+	template ProtConfigOptions tr_PCO := {
+		type_gtpc := '84'O,
+		lengthf := ?,
+		configProtocol := '000'B,
+		spare := ?,
+		extension0 := '1'B,
+		protocols := {}
+	}
 
 	template ProtConfigOptions ts_PCO_IPv6_DNS modifies ts_PCO := {
 		protocols := {
 			{ protocolID := '0003'O, lengthProtoID := 0, protoIDContents := ''O }
 		}
 	}
+	template ProtConfigOptions tr_PCO_IPv6_DNS_resp(template OCT16 contents) modifies tr_PCO := {
+		protocols := {
+			{ protocolID := '0003'O, lengthProtoID := 16, protoIDContents := contents }
+		}
+	}
 
 	template ProtConfigOptions ts_PCO_IPv4_DNS_IPCP modifies ts_PCO := {
 		protocols := {
@@ -363,6 +392,12 @@
 			{ protocolID := '000d'O, lengthProtoID := 0, protoIDContents := ''O }
 		}
 	}
+	template ProtConfigOptions tr_PCO_IPv4_DNS_CONT_resp(template OCT4 contents) modifies tr_PCO := {
+		protocols := {
+			{ protocolID := '000d'O, lengthProtoID := 4, protoIDContents := contents }
+		}
+	}
+
 
 	function f_teardown_ind_IE(in template BIT1 ind) return template TearDownInd {
 /*
@@ -597,6 +632,28 @@
 			[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, createPDPContextResponse, ctx.teic)) -> value ud {
 				var CreatePDPContextResponse cpr := ud.gtpc.gtpc_pdu.createPDPContextResponse;
 				if (cpr.cause.causevalue == '80'O) {
+					/*  Check if EUA type corresponds to requested type */
+					if (match(ctx.eua, t_EuaIPv4(?)) and
+					    not match(cpr.endUserAddress, tr_EuaIPv4(?))){
+						setverdict(fail);
+					}
+					if (match(ctx.eua, t_EuaIPv6(?)) and
+					    not match(cpr.endUserAddress, tr_EuaIPv6(?))) {
+						setverdict(fail);
+					}
+					/* Check if PCO response corresponds to request */
+					if (ispresent(ctx.pco_req)) {
+						if (match(ctx.pco_req, ts_PCO_IPv4_DNS_CONT) and
+						    not match(cpr.protConfigOptions, tr_PCO_IPv4_DNS_CONT_resp(?))) {
+							log("IPv4 DNS Container requested, but missing");
+							setverdict(fail);
+						}
+						if (match(ctx.pco_req, ts_PCO_IPv6_DNS) and
+						    not match(cpr.protConfigOptions, tr_PCO_IPv6_DNS_resp(?))) {
+							log("IPv6 DNS Container requested, but missing");
+							setverdict(fail);
+						}
+					}
 					ctx.teid_remote := cpr.teidDataI.teidDataI;
 					ctx.teic_remote := cpr.teidControlPlane.teidControlPlane;
 					ctx.eua := cpr.endUserAddress;