diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
new file mode 100644
index 0000000000..fef45773f9
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/attach_complete.pdml
@@ -0,0 +1,4242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
new file mode 100644
index 0000000000..e864f47edb
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/TEST_1MME_1ENB_1UE_ATTACH_GUTI/enb.band7.tm1.usrpb210.epc.local.conf
@@ -0,0 +1,174 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "95";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2660000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 120;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 32;
+ pdsch_referenceSignalPower = -26;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -90;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -108;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+ }
+ );
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "192.188.2.2";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "tun2";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "192.188.2.2/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "lo";
+ ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.1/24";
+ ENB_PORT_FOR_S1U = 2153; # Spec 2152
+ };
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ gtpu_log_level ="info";
+ gtpu_log_verbosity ="medium";
+ udp_log_level ="info";
+ udp_log_verbosity ="medium";
+ };
+
+ }
+);
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.c b/openair3/TEST/EPC_TEST/generate_scenario.c
index 6843766f95..eff91ea56f 100644
--- a/openair3/TEST/EPC_TEST/generate_scenario.c
+++ b/openair3/TEST/EPC_TEST/generate_scenario.c
@@ -43,6 +43,9 @@
#include
#include
#include
+#include
+#include
+#include
#include
#include
#include
@@ -95,11 +98,64 @@
#define ENB_CONFIG_MAX_XSLT_PARAMS 64
Enb_properties_array_t g_enb_properties[2];
-char *g_test_dir = "."; // default value
-char *g_pdml_in_basename = "trace.pdml"; // default value
+char *g_openair_dir = NULL;
+char *g_test_dir = NULL;
+char *g_pdml_in_origin = NULL;
+char *g_generic_scenario = NULL;
extern int xmlLoadExtDtdDefaultValue;
+
+#define GENERATE_PDML_FILE 1
+#define GENERATE_GENERIC_SCENARIO 2
+#define GENERATE_DEDICATED_SCENARIO 4
+
+#define GS_IS_FILE 1
+#define GS_IS_DIR 2
+
//------------------------------------------------------------------------------
-void generate_scenario(const char const * pdml_in_basenameP)
+// test if file exist in current directory
+int is_file_exists( const char const * file_nameP, const char const *file_roleP)
+{
+ struct stat s;
+ int err = stat(file_nameP, &s);
+ if(-1 == err) {
+ if(ENOENT == errno) {
+ fprintf(stderr, "Please provide a valid %s, %s does not exist\n", file_roleP, file_nameP);
+ } else {
+ perror("stat");
+ exit(1);
+ }
+ } else {
+ if(S_ISREG(s.st_mode)) {
+ return GS_IS_FILE;
+ } else if(S_ISDIR(s.st_mode)) {
+ return GS_IS_DIR;
+ } else {
+ fprintf(stderr, "Please provide a valid test %s, %s exists but is not found valid\n", file_roleP, file_nameP);
+ }
+ }
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+// return number of splitted items
+int split_path( char * pathP, char *** resP)
+{
+ char * saveptr1;
+ char * p = strtok_r (pathP, "/", &saveptr1);
+ int n_spaces = 0;
+
+ /// split string and append tokens to 'res'
+ while (p) {
+ *resP = realloc (*resP, sizeof (char*) * ++n_spaces);
+ AssertFatal (*resP, "realloc failed");
+ (*resP)[n_spaces-1] = p;
+ p = strtok_r (NULL, "/", &saveptr1);
+ }
+ return n_spaces;
+}
+
+//------------------------------------------------------------------------------
+void generate_generic_scenario(const char const * test_nameP, const char const * pdml_in_basenameP)
//------------------------------------------------------------------------------
{
//int fd_pdml_in;
@@ -107,33 +163,58 @@ void generate_scenario(const char const * pdml_in_basenameP)
xmlDocPtr doc, res;
const char *params[ENB_CONFIG_MAX_XSLT_PARAMS];
int nb_params = 0;
+ int i,j;
+ char astring[1024];
+ struct in_addr addr;
- if (chdir(g_test_dir) == 0) {
- printf( "working in %s directory\n", g_test_dir);
- /*fd_pdml_in = open(pdml_in_basenameP, O_RDONLY);
- AssertFatal (fd_pdml_in > 0,
- "Error while opening %s file in directory %s\n",
- pdml_in_basenameP,
- g_test_dir);*/
-
- params[nb_params] = NULL;
- xmlSubstituteEntitiesDefault(1);
- xmlLoadExtDtdDefaultValue = 1;
- cur = xsltParseStylesheetFile("enb_config.xsl");
- doc = xmlParseFile(pdml_in_basenameP);
- res = xsltApplyStylesheet(cur, doc, params);
- xsltSaveResultToFile(stdout, res, cur);
-
- xsltFreeStylesheet(cur);
- xmlFreeDoc(res);
- xmlFreeDoc(doc);
-
- xsltCleanupGlobals();
- xmlCleanupParser();
+ memset(astring, 0, sizeof(astring));
+ if (getcwd(astring, sizeof(astring)) != NULL) {
+ fprintf(stdout, "working in %s directory\n", astring);
} else {
- printf("Error: chdir %s returned %s\n", g_test_dir, strerror(errno));
- exit(-1);
+ perror("getcwd() error");
+ exit(1);
}
+
+ memset(astring, 0, sizeof(astring));
+ strcat(astring, g_openair_dir);
+ strcat(astring, "/openair3/TEST/EPC_TEST/generic_scenario.xsl");
+
+ xmlSubstituteEntitiesDefault(1);
+ xmlLoadExtDtdDefaultValue = 1;
+ cur = xsltParseStylesheetFile(astring);
+ doc = xmlParseFile(pdml_in_basenameP);
+ params[nb_params++] = "test_name";
+ sprintf(astring, "\"%s\"", test_nameP);
+ params[nb_params++] = strdup(astring);
+
+ for (i = 0; i < g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].number; i++) {
+ // eNB S1-C IPv4 address
+ sprintf(astring, "enb_s1c%d", i);
+ params[nb_params++] = strdup(astring);
+ addr.s_addr = g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->enb_ipv4_address_for_S1_MME;
+ sprintf(astring, "\"%s\"", inet_ntoa(addr));
+ params[nb_params++] = strdup(astring);
+
+ // MME S1-C IPv4 address
+ for (j = 0; j < g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->nb_mme; j++) {
+ sprintf(astring, "mme_s1c%d_%d", i, j);
+ params[nb_params++] = strdup(astring);
+ AssertFatal (g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->mme_ip_address[j].ipv4_address,
+ "Only support MME IPv4 address\n");
+ sprintf(astring, "\"%s\"", g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD].properties[i]->mme_ip_address[j].ipv4_address);
+ params[nb_params++] = strdup(astring);
+ }
+ }
+ params[nb_params] = NULL;
+ res = xsltApplyStylesheet(cur, doc, params);
+ xsltSaveResultToFile(stdout, res, cur);
+
+ xsltFreeStylesheet(cur);
+ xmlFreeDoc(res);
+ xmlFreeDoc(doc);
+
+ xsltCleanupGlobals();
+ xmlCleanupParser();
}
//------------------------------------------------------------------------------
@@ -403,14 +484,77 @@ static void usage (
{
fprintf (stdout, "Please report any bug to: openair4g-devel@lists.eurecom.fr\n\n");
fprintf (stdout, "Usage: %s [options]\n\n", argv[0]);
+ fprintf (stdout, "Mandatory options:\n");
+ fprintf (stdout, "\t-t | --test-dir Directory where a set of files related to a particular test are located\n");
+ fprintf (stdout, "\n");
fprintf (stdout, "Available options:\n");
- fprintf (stdout, "\t--help, -h Print this help and return\n");
- fprintf (stdout, "\t--new-enb-conf-file \n");
- fprintf (stdout, " Provide an updated eNB config file for generating a copy of the original test\n");
- fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
- fprintf (stdout, "\t--old-enb-conf-file \n");
- fprintf (stdout, " Provide the old eNB config file for generating a copy of the original test\n");
- fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
+ fprintf (stdout, "\t-h | --help Print this help and return\n");
+ fprintf (stdout, "\t-n | --new-enb-conf-file Provide an updated eNB config file for generating a copy of the original test\n");
+ fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
+ fprintf (stdout, "\t-o | --old-enb-conf-file Provide the old eNB config file for generating a copy of the original test\n");
+ fprintf (stdout, " This option is set as many times as there are some eNB config files in the original test\n");
+ fprintf (stdout, "\t-p | --pdml File name (with no path) of an original scenario that has to be reworked (IP addresses) with new testbed\n");
+ fprintf (stdout, "\t-s | --scenario-generic File name (with no path) of a scenario that has to be customized (IP addresses) with new testbed\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "Example of generate_scenario use cases: \n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " Case 1: generate a generix xml scenario from a captured pcap file: \n");
+ fprintf (stdout, " +---------------------+ \n");
+ fprintf (stdout, " |captured pcap-ng file| \n");
+ fprintf (stdout, " +----------+----------+ \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " mme_test_s1_pcap2pdml \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +--------V----------+ +------------------------+\n");
+ fprintf (stdout, " |'pdml-in-orig' file| |'old-enb-conf-file' file|\n");
+ fprintf (stdout, " +--------+----------+ +------------+-----------+\n");
+ fprintf (stdout, " | |\n");
+ fprintf (stdout, " +----------------------------+\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " generate_scenario -t -p -o \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +------------V--------------+\n");
+ fprintf (stdout, " +'xml-scenario-generic' file|\n");
+ fprintf (stdout, " +---------------------------+\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " Case 2: generate a dedicated xml scenario from generic xml scenario:\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " +---------------------------+ +------------------------+\n");
+ fprintf (stdout, " |'xml-scenario-generic' file| |'new-enb-conf-file' file|\n");
+ fprintf (stdout, " +--------+------------------+ +------------+-----------+\n");
+ fprintf (stdout, " | |\n");
+ fprintf (stdout, " +--------------------+---------------+\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " generate_scenario -t -s -n \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +--------------V--------------+\n");
+ fprintf (stdout, " +'xml-scenario-dedicated' file|\n");
+ fprintf (stdout, " +-----------------------------+\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " Case 3 = case 1 + case 2: generate a dedicated xml scenario from a captured pcap file:\n");
+ fprintf (stdout, "\n");
+ fprintf (stdout, " +---------------------+\n");
+ fprintf (stdout, " |captured pcap-ng file|\n");
+ fprintf (stdout, " +----------+----------+\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " mme_test_s1_pcap2pdml \n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " +------------------------+ +--------V----------+ +------------------------+\n");
+ fprintf (stdout, " |'old-enb-conf-file' file| |'pdml-in-orig' file| |'new-enb-conf-file' file|\n");
+ fprintf (stdout, " +------------+-----------+ +--------+----------+ +------------+-----------+\n");
+ fprintf (stdout, " | | |\n");
+ fprintf (stdout, " +----------------------+-------------------------+\n");
+ fprintf (stdout, " |\n");
+ fprintf (stdout, " V\n");
+ fprintf (stdout, " generate_scenario -t -p -o -n \n");
+ fprintf (stdout, " | ^ |\n");
+ fprintf (stdout, " | | |\n");
+ fprintf (stdout, " +--------------V------------+ +------------V----------------+\n");
+ fprintf (stdout, " |'xml-scenario-generic' file| |'xml-scenario-dedicated' file|\n");
+ fprintf (stdout, " +---------------------------+ +-----------------------------+\n");
}
@@ -422,20 +566,29 @@ config_parse_opt_line (
//------------------------------------------------------------------------------
{
int option;
- char *enb_config_file_name = NULL;
+ int rv = 0;
+ char *new_enb_config_file_name = NULL;
+ char *old_enb_config_file_name = NULL;
+ char *pdml_in_file_name = NULL;
+ char *generic_scenario_file_name = NULL;
+ char *test_dir_name = NULL;
enum long_option_e {
LONG_OPTION_START = 0x100, /* Start after regular single char options */
LONG_OPTION_NEW_ENB_CONF_FILE,
LONG_OPTION_OLD_ENB_CONF_FILE,
- LONG_OPTION_PDML_IN_BASENAME,
+ LONG_OPTION_PDML,
+ LONG_OPTION_TEST_DIR,
+ LONG_OPTION_SCENARIO_GENERIC,
LONG_OPTION_HELP,
};
static struct option long_options[] = {
{"old-enb-conf-file", required_argument, 0, LONG_OPTION_OLD_ENB_CONF_FILE},
{"new-enb-conf-file", required_argument, 0, LONG_OPTION_NEW_ENB_CONF_FILE},
- {"pdml_in_basename", required_argument, 0, LONG_OPTION_PDML_IN_BASENAME},
+ {"pdml ", required_argument, 0, LONG_OPTION_PDML},
+ {"test-dir", required_argument, 0, LONG_OPTION_TEST_DIR},
+ {"scenario-generic", required_argument, 0, LONG_OPTION_SCENARIO_GENERIC},
{"help", required_argument, 0, LONG_OPTION_HELP},
{NULL, 0, NULL, 0}
};
@@ -443,32 +596,53 @@ config_parse_opt_line (
/*
* Parsing command line
*/
- while ((option = getopt_long (argc, argv, "hp:n:o", long_options, NULL)) != -1) {
+ while ((option = getopt_long (argc, argv, "hp:n:o:s:t", long_options, NULL)) != -1) {
switch (option) {
case LONG_OPTION_OLD_ENB_CONF_FILE:
case 'o':
if (optarg) {
- enb_config_file_name = optarg;
- printf("Old eNB config file name is %s\n", enb_config_file_name);
- enb_config_init(enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_OLD);
- g_test_dir = strdup(dirname(enb_config_file_name));
+ old_enb_config_file_name = optarg;
+ printf("Old eNB config file name is %s\n", old_enb_config_file_name);
+ rv |= GENERATE_GENERIC_SCENARIO;
}
break;
case LONG_OPTION_NEW_ENB_CONF_FILE:
case 'n':
if (optarg) {
- enb_config_file_name = optarg;
- printf("New eNB config file name is %s\n", enb_config_file_name);
- enb_config_init(enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_NEW);
+ new_enb_config_file_name = optarg;
+ printf("New eNB config file name is %s\n", new_enb_config_file_name);
+ rv |= GENERATE_DEDICATED_SCENARIO;
}
break;
- case LONG_OPTION_PDML_IN_BASENAME:
+ case LONG_OPTION_PDML:
case 'p':
if (optarg) {
- g_pdml_in_basename = strdup(optarg);
- printf("PDML input file name is %s\n", g_pdml_in_basename);
+ pdml_in_file_name = strdup(optarg);
+ printf("PDML input file name is %s\n", pdml_in_file_name);
+ rv |= GENERATE_GENERIC_SCENARIO;
+ }
+ break;
+
+ case LONG_OPTION_TEST_DIR:
+ case 't':
+ if (optarg) {
+ test_dir_name = strdup(optarg);
+ if (is_file_exists(test_dir_name, "test dirname") != GS_IS_DIR) {
+ fprintf(stderr, "Please provide a valid test dirname, %s is not a valid directory name\n", test_dir_name);
+ exit(1);
+ }
+ printf("Test dir name is %s\n", test_dir_name);
+ }
+ break;
+
+ case LONG_OPTION_SCENARIO_GENERIC:
+ case 's':
+ if (optarg) {
+ generic_scenario_file_name = strdup(optarg);
+ printf("Generic XML scenario input file name is %s\n", generic_scenario_file_name);
+ rv |= GENERATE_DEDICATED_SCENARIO;
}
break;
@@ -479,18 +653,77 @@ config_parse_opt_line (
exit (0);
}
}
- return 0;
+ if (NULL == test_dir_name) {
+ fprintf(stderr, "Please provide a valid test dirname\n");
+ exit(1);
+ }
+ g_test_dir = test_dir_name; test_dir_name = NULL;
+ if (chdir(g_test_dir) != 0) {
+ fprintf(stderr, "Error: chdir %s returned %s\n", g_test_dir, strerror(errno));
+ exit(1);
+ }
+ if (rv & GENERATE_GENERIC_SCENARIO) {
+ if (NULL == old_enb_config_file_name) {
+ fprintf(stderr, "Error: please provide the original eNB config file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(old_enb_config_file_name, "Old eNB config file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: original eNB config file name %s is not found in dir %s\n", old_enb_config_file_name, g_test_dir);
+ }
+ enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_OLD);
+ enb_config_init(old_enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_OLD);
+
+ if (NULL == pdml_in_file_name) {
+ fprintf(stderr, "Error: please provide the PDML file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(pdml_in_file_name, "PDML file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: PDML file name %s is not found in dir %s\n", pdml_in_file_name, g_test_dir);
+ }
+ g_pdml_in_origin = pdml_in_file_name; pdml_in_file_name = NULL;
+ }
+
+ if (rv & GENERATE_DEDICATED_SCENARIO) {
+ if (NULL == new_enb_config_file_name) {
+ fprintf(stderr, "Error: please provide the new eNB config file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(new_enb_config_file_name, "New eNB config file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: New eNB config file name %s is not found in dir %s\n", new_enb_config_file_name, g_test_dir);
+ }
+ enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_NEW);
+ enb_config_init(new_enb_config_file_name, ENB_CONFIG_PROPERTIES_INDEX_NEW);
+
+ if (NULL == generic_scenario_file_name) {
+ fprintf(stderr, "Error: please provide the Generic scenario file name that should be in %s\n", g_test_dir);
+ }
+ if (is_file_exists(generic_scenario_file_name, "Generic scenario file") != GS_IS_FILE) {
+ fprintf(stderr, "Error: Generic scenario file name %s is not found in dir %s\n", generic_scenario_file_name, g_test_dir);
+ }
+ g_generic_scenario = generic_scenario_file_name; generic_scenario_file_name = NULL;
+ }
+ return rv;
}
//------------------------------------------------------------------------------
int main( int argc, char **argv )
//------------------------------------------------------------------------------
{
+ int actions = 0;
+
+ g_openair_dir = getenv("OPENAIR_DIR");
+ if (NULL == g_openair_dir) {
+ fprintf(stderr, "Error: Could not get OPENAIR_DIR environment variable\n");
+ exit(1);
+ }
+
memset((char*) &g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD], 0 , sizeof(g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_OLD]));
memset((char*) &g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_NEW], 0 , sizeof(g_enb_properties[ENB_CONFIG_PROPERTIES_INDEX_NEW]));
- config_parse_opt_line (argc, argv); //Command-line options
- enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_OLD);
- enb_config_display(ENB_CONFIG_PROPERTIES_INDEX_NEW);
- generate_scenario(g_pdml_in_basename);
+
+ actions = config_parse_opt_line (argc, argv); //Command-line options
+ if (actions & GENERATE_GENERIC_SCENARIO) {
+ generate_generic_scenario(g_test_dir, g_pdml_in_origin);
+ }
+ /*if (actions & GENERATE_DEDICATED_SCENARIO) {
+ generate_dedicated_scenario(g_test_dir, g_pdml_in_origin);
+ }*/
+
return 0;
}
diff --git a/openair3/TEST/EPC_TEST/generic_scenario.xsl b/openair3/TEST/EPC_TEST/generic_scenario.xsl
new file mode 100644
index 0000000000..99672a28f0
--- /dev/null
+++ b/openair3/TEST/EPC_TEST/generic_scenario.xsl
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml b/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
index b0a77e60f5..796fa9a45b 100755
--- a/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
+++ b/openair3/TEST/EPC_TEST/mme_test_s1_pcap2pdml
@@ -35,14 +35,25 @@ packets = orig_dom.getElementsByTagName("packet")
for packet in packets:
found_sctp = False
found_s1ap = False
+ sctp_node = None
+ frame_node = None
+ ip_node = None
protos = packet.getElementsByTagName("proto")
for proto in protos:
attrs = proto.attributes
urlnode = attrs['name']
- if urlnode.nodeValue == 'sctp':
+ if urlnode.nodeValue == 'frame':
+ frame_node = proto
+ elif urlnode.nodeValue == 'ip':
+ frame_node.appendChild(proto)
+ ip_node = proto
+ elif urlnode.nodeValue == 'sctp':
found_sctp = True
+ ip_node.appendChild(proto)
+ sctp_node = proto
elif urlnode.nodeValue == 's1ap':
found_s1ap = True
+ sctp_node.appendChild(proto)
elif urlnode.nodeValue == 'geninfo':
packet.removeChild(proto)
elif urlnode.nodeValue == 'eth':
@@ -54,20 +65,21 @@ for packet in packets:
#####################
# dom to xml string
#####################
-filtered_pdml_string = orig_dom.toxml()
+filtered_pdml_string = orig_dom.toprettyxml(indent=" ")
cleaned_pdml_string = ""
#####################
# remove blank lines in xml string
#####################
lines = filtered_pdml_string.splitlines()
for line in lines:
- if line[:-1]:
- cleaned_pdml_string += line + '\r\n'
+ if len(line.strip()):
+ if line[:-1]:
+ cleaned_pdml_string += line + '\r\n'
#print "'%s'" % cleaned_pdml_string
#####################
# write pdml string to pdml file
#####################
-out_pdml_file_name = os.path.dirname(orig_pcap_file_name) + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.pdml'
+out_pdml_file_name = os.path.dirname(orig_pcap_file_name) + '/' + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.pdml'
out_file = open(out_pdml_file_name, "w")
out_file.write(cleaned_pdml_string)
out_file.close()
@@ -86,7 +98,7 @@ filtered_html_string = etree.tostring(trans_root)
#####################
# write html string to html file
#####################
-out_html_file_name = os.path.dirname(orig_pcap_file_name) + os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.html'
+out_html_file_name = os.path.dirname(orig_pcap_file_name) + '/' +os.path.splitext(os.path.basename(orig_pcap_file_name))[0] + '.html'
out_file = open(out_html_file_name, "w")
out_file.write(filtered_html_string)
out_file.close()