diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e3b2be2e91b27eeb735ec602833d5515ae5ff4af
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+cscope.files
+cscope.files2
+cscope.in.out
+cscope.out
+cscope.po.out
+targets/bin/
+cmake_targets/log/
+cmake_targets/lte_build_oai/
diff --git a/LICENSE b/LICENSE
index 05b42e7c3046d795e55bf38134e40ebbaa69a6bb..44a9a405fb51c1fa27438fdbf7ff1bf7be82df49 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,94 +1,200 @@
-                      OAI PUBLIC LICENSE V1.0
+				The OpenAirInterface Software Alliance (OSA)
+					OAI Public License (Version 1.1)
 
- Copyright (C) 2016 OpenAirInterface Software Alliance, Inc. <http://www.openairinterface.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
+LICENSE TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION OF OPENAIR 5G SOFTWARE.
 
-Definitions.
-“License” shall mean the terms and conditions for use, reproduction, and distribution set forth in this  document.
+1.	Definitions.
 
-“Licensor” shall mean the OpenAirInterface Software Alliance.
-
-“Legal Entity” shall mean the union, at the time an acting entity joins the Alliance, of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
-
-“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.
-
-“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
-
-“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
-
-“OpenAirInterface Software Alliance” shall mean the endowment fund established at the initiative of Eurecom, an educational and research establishment located at Campus Sophia Tech, 450 Route des Chappes, 06410 Biot, France, which statutes were signed on 18 November 2014.
-
-“ “Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
-
-“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-“Contribution” shall mean any work of authorship that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, , or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work “Contributor License Agreement” shall mean the agreement signed by any Contributor setting forth the terms and conditions applicable to its Contribution. “Contributor” shall mean any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+“License” shall mean the terms and conditions for use, reproduction, and distribution set forth 
+in this document.
 
-Grant of Copyright License.
-Subject to the terms and conditions of this License, Licensor and each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form
-
-3. Grant of Patent License.
-
-3.1 Grant of Patent License for non-commercial purposes:
-
-Subject to the terms and conditions of this License, Licensor and each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work, for non-commercial purposes, where such license applies only to those patent claims licensable by such Contributor or Licensor that are necessarily infringed by the Work and/or their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted.
-
-3.2 Grant of Patent License for commercial purposes:
-
-For commercial purposes, and subject to the terms and conditions of this License, You commits to be prepared to negotiate a patent license with each Contributor and/or the Licensor on Fair, Reasonable and Non-Discriminatory (“FRAND”) terms and conditions for the Work or Contribution(s) incorporated within the Work.
+“Licensor” shall mean the OpenAirInterface Software Alliance.
 
-Licensor and/or each Contributor, by submitting a Contribution, will identify any patent it owns related to the Work and/or its Contribution.
+“Legal Entity” shall mean the union, at the time an acting entity joins the Alliance, of the 
+acting entity and all other entities that control, are controlled by, or are under common control 
+with that entity. For the purposes of this definition, “control” means (i) the power, direct or 
+indirect, to cause the direction or management of such entity, whether by contract or 
+otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) 
+beneficial ownership of such entity.
+
+“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by 
+this License.
+
+“Source” form shall mean the preferred form for making modifications, including but not 
+limited to software source code, documentation source, and configuration files.
+
+“Object” form shall mean any form resulting from mechanical transformation or translation of 
+a Source form, including but not limited to compiled object code, generated documentation, 
+and conversions to other media types.
+
+“OpenAirInterface Software Alliance” shall mean the endowment fund established at the 
+initiative of Eurecom, an educational and research establishment located at Campus Sophia 
+Tech, 450 Route des Chappes, 06410 Biot, France, which statutes were signed on 18 
+November 2014.
+
+“Work” shall mean the work of authorship, whether in Source or Object form, made available 
+under the License, as indicated by a copyright notice that is included in or attached to the 
+work (an example is provided in the Appendix below).
+
+“Derivative Works” shall mean any work, whether in Source or Object form, that is based on 
+(or derived from) the Work and for which the editorial revisions, annotations, elaborations, or 
+other modifications represent, as a whole, an original work of authorship. For the purposes of 
+this License, Derivative Works shall not include works that remain separable from, or merely 
+link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+“Contribution” shall mean any work of authorship that is intentionally submitted to Licensor 
+for inclusion in the Work by the copyright owner or by an individual or Legal Entity 
+authorized to submit on behalf of the copyright owner. For the purposes of this definition, 
+“submitted” means any form of electronic, , or written communication sent to the Licensor or 
+its representatives, including but not limited to communication on electronic mailing lists, 
+source code control systems, and issue tracking systems that are managed by, or on behalf of, 
+the Licensor for the purpose of discussing and improving the Work
+
+“Contributor License Agreement” shall mean the agreement signed by any Contributor setting 
+forth the terms and conditions applicable to its Contribution. 
+
+“Contributor” shall mean any individual or Legal Entity on behalf of whom a Contribution 
+has been received by Licensor and subsequently incorporated within the Work.
+
+2.	Grant of Copyright License.
+Subject to the terms and conditions of this License, Licensor and each Contributor hereby 
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable 
+copyright license to reproduce, prepare Derivative Works of, publicly display, publicly 
+perform, and distribute the Work and such Derivative Works in Source or Object form
+
+3. 	Grant of Patent License.
+
+3.1 Grant of Patent License for study, testing and research purposes:
+Subject to the terms and conditions of this License, Licensor and each Contributor hereby 
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable 
+(except as stated in this section) patent license to make, have made, use, and otherwise 
+transfer (excluding selling) the Work, solely for study, testing and research purposes, where 
+such license applies only to those patent claims licensable by Licensor or such Contributor 
+that are necessarily infringed respectively by the Work and/or the said Contributor 
+Contribution(s) alone or by combination of their Contribution(s) with the Work  to which 
+such Contribution(s) was submitted (“Essential Patents”).
+
+3.2 Grant of Patent License for purposes other than study and research:
+For purposes other than study, testing and research, and subject to the terms and conditions of 
+this License, You commit to be prepared to negotiate a non-exclusive, non-transferable, non-
+assignable license of Essential Patents with each Contributor and/or the Licensor on Fair, 
+Reasonable and Non-Discriminatory (“FRAND”) terms and conditions for the use of the 
+Work or Contribution(s) incorporated within the Work.
+Licensor and/or each Contributor, by submitting a Contribution, will identify any of its known 
+Essential Patent it owns related to the Work and/or its Contribution.
 
 3.3 Patent Litigation
-
-If You institute patent litigation against any entity making non-commercial use of the Work (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistibution
-
-Subject to terms and conditions set forth in articles 2 and 3, You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
-
-
-
-
-1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
-
-2. You must cause any modified files by You to carry prominent notices stating that You changed the files; and
-
-3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
-
-4. If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
-
-
-You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement such as the Contributor License Agreement You may have executed with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall Licensor and any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor and/or the Licensor,and only if You agree to indemnify, defend, and hold each Contributor and/or the Licensor harmless for any liability incurred by, or claims asserted against, such Contributor and/or Licensor by reason of Your accepting any such warranty or additional liability.
-
-10. Applicable law. The present license shall be governed by the laws of France.
+If You institute patent litigation against any entity making use of the Work solely for study, 
+testing and research purposes (including a cross-claim or counterclaim in a lawsuit) alleging 
+that the Work or a Contribution incorporated within the Work constitutes direct or 
+contributory patent infringement, then the patent licenses granted to You under section 3.1 of 
+this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Sublicensing
+You may grant sublicenses under the licenses granted under sections 2 and 3.1 provided that 
+the sublicense is subject to and inclusive of all the terms of and rights under this License to 
+which the Work is or was distributed by the OpenAirInterface Software Alliance.
+
+5. Redistribution
+Subject to terms and conditions set forth in sections 2 and 3, You may reproduce and 
+distribute copies of the Work or Derivative Works thereof in any medium, with or without 
+modifications, and in Source or Object form, provided that You meet the following 
+conditions:  
+
+1. You must give any other recipients of the Work or Derivative Works a copy of this 
+License; and
+
+2. You must cause any modified files by You to carry prominent notices stating that You 
+changed the files; and
+
+3. You must retain, in the Source form of any Derivative Works that You distribute, all 
+copyright, patent, trademark, and attribution notices from the Source form of the Work, 
+excluding those notices that do not pertain to any part of the Derivative Works; and
+
+4. If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative 
+Works that You distribute must include a readable copy of the attribution notices contained 
+within such NOTICE file, excluding those notices that do not pertain to any part of the 
+Derivative Works, in at least one of the following places: within a NOTICE text file 
+distributed as part of the Derivative Works; within the Source form or documentation, if 
+provided along with the Derivative Works; or, within a display generated by the Derivative 
+Works, if and wherever such third-party notices normally appear. The contents of the 
+NOTICE file are for informational purposes only and do not modify the License. You may 
+add Your own attribution notices within Derivative Works that You distribute, alongside or as 
+an addendum to the NOTICE text from the Work, provided that such additional attribution 
+notices cannot be construed as modifying the License. 
+You may add Your own copyright statement to Your modifications and may provide 
+additional or different license terms and conditions for use, reproduction, or distribution of 
+Your modifications, or for any such Derivative Works as a whole, provided Your use, 
+reproduction, and distribution of the Work otherwise complies with the conditions stated in 
+this License.
+
+6. Submission of Contributions. 
+Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be 
+under the terms and conditions of this License, without any additional terms or conditions. 
+Notwithstanding the above, nothing herein shall supersede or modify the terms of any 
+separate license agreement such as the Contributor License Agreement You may have 
+executed with Licensor regarding such Contributions.
+
+7. Trademarks. 
+This License does not grant permission to use the trade names, trademarks, service marks, or 
+product names of the Licensor, except as required for reasonable and customary use in 
+describing the origin of the Work and reproducing the content of the NOTICE file.
+
+8. Disclaimer of Warranty. 
+Unless required by applicable law or agreed to in writing, Licensor provides the Work (and 
+each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT 
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, 
+without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, 
+MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely 
+responsible for determining the appropriateness of using or redistributing the Work and 
+assume any risks associated with your exercise of permissions under this License.
+
+9. Limitation of Liability. 
+In no event and under no legal theory, whether in tort (including negligence), contract, or 
+otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or 
+agreed to in writing, shall Licensor and any Contributor, as such, be liable to You for 
+damages, including any direct, indirect, special, incidental, or consequential damages of any 
+character arising as a result of this License or out of Your use or inability to use the Work 
+(including but not limited to damages for loss of goodwill, work stoppage, computer failure or 
+malfunction, or any and all other commercial damages or losses), even if such Contributor has 
+been advised of the possibility of such damages.
+
+10. Accepting Warranty or Additional Liability. 
+While redistributing the Work or Derivative Works thereof, You may choose to offer, and 
+charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations 
+and/or rights consistent with this License. However, in accepting such obligations, You may 
+act only on Your own behalf and on Your sole responsibility, not on behalf of any other 
+Contributor and/or the Licensor, and only if You agree to indemnify, defend, and hold each 
+Contributor and/or the Licensor harmless for any liability incurred by, or claims asserted 
+against, such Contributor and/or Licensor by reason of Your accepting any such warranty or 
+additional liability.
+
+11. Applicable law. 
+The present license shall be governed by the laws of France.
 
 END OF TERMS AND CONDITIONS
 
-APPENDIX: How to apply the PRESENT OPENAIR 5G License to your work
-To apply the present License to your work, attach the following boilerplate notice, with the fields enclosed by brackets “[]” replaced with your own identifying information. (Don’t include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.
+1.	APPENDIX: How to apply the PRESENT OPENAIR 5G License to your work
+To apply the present License to your work, attach the following boilerplate notice, with the 
+fields enclosed by brackets “[]” replaced with your own identifying information. (Don’t 
+include the brackets!) The text should be enclosed in the appropriate comment syntax for the 
+file format. We also recommend that a file or class name and description of purpose be 
+included on the same “printed page” as the copyright notice for easier identification within 
+third-party archives.
 
 Copyright [yyyy] [name of copyright owner]
-Licensed under the License terms and conditions for use, reproduction, and distribution of OPENAIR 5G software (the “License”);
 
-you may not use this file except in compliance with the License.You may obtain a copy of the License at
-Unless required by applicable law or agreed to in writing, software
+Licensed under the License terms and conditions for use, reproduction, and distribution of 
+OPENAIR 5G software (the “License”);
+
+you may not use this file except in compliance with the License. You may obtain a copy of 
+the License at
 
-distributed under the License is distributed on an “AS IS” BASIS,
+Unless required by applicable law or agreed to in writing, software distributed under the 
+License is distributed on an “AS IS” BASIS,
 
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-See the License for the specific language governing permissions and
+See the License for the specific language governing permissions and limitations under the 
+License.
 
-limitations under the License.
diff --git a/README.txt b/README.txt
index bff09c7a2a0cc911d21f9ef7309ccdcb50e98a43..edd233830fb125cb581eeaf5092311fee5cfed16 100644
--- a/README.txt
+++ b/README.txt
@@ -43,3 +43,4 @@ v0.5.2 -> Last version with old code for oaisim (abstraction mode works)
 v0.6 -> RRH functionality, UE greatly improved, better TDD support,
         a lot of bugs fixed. WARNING: oaisim in PHY abstraction mode does not
         work, you need to use v0.5.2 for that.
+v0.6.1 -> Mostly bugfixes. This is the last version without NFAPI.
diff --git a/attach_accept.pcapng b/attach_accept.pcapng
new file mode 100644
index 0000000000000000000000000000000000000000..6884b4c192f16cc5b9bb1a0dc9241089f81b809f
Binary files /dev/null and b/attach_accept.pcapng differ
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 8b969db3497de1ebf81ada58b3faf5c0cdf8ca70..b8ab24f9fa03ee8ef0ca15fb8443b8a2024bf1bf 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
@@ -27,8 +27,8 @@ cmake_minimum_required (VERSION 2.8)
 # Base directories, compatible with legacy OAI building
 ################################################
 set (OPENAIR_DIR     $ENV{OPENAIR_DIR})
-#set (NFAPI_DIR       $ENV{NFAPI_DIR})
-set (NFAPI_DIR       ${OPENAIR_DIR}/nfapi)
+set (NFAPI_DIR       $ENV{NFAPI_DIR})
+set (NFAPI_USER_DIR  ${OPENAIR_DIR}/nfapi)
 set (OPENAIR1_DIR    ${OPENAIR_DIR}/openair1)
 set (OPENAIR2_DIR    ${OPENAIR_DIR}/openair2)
 set (OPENAIR3_DIR    ${OPENAIR_DIR}/openair3)
@@ -291,7 +291,7 @@ elseif (${RRC_ASN1_VERSION} STREQUAL "CBA")
 elseif (${RRC_ASN1_VERSION} STREQUAL "Rel10")
   set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/EUTRA-RRC-Definitions-a20.asn)
 else()
-  set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e10.asn)
+  set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e30.asn)
 endif  (${RRC_ASN1_VERSION} STREQUAL "Rel8")
 
 set (RRC_FULL_DIR ${asn1_generated_dir}/${RRC_ASN1_VERSION})
@@ -312,11 +312,11 @@ if (NOT ${ret} STREQUAL 0)
   message(FATAL_ERROR "${fix_asn1c_call}: error")
 endif (NOT ${ret} STREQUAL 0)
 file(GLOB rrc_source ${RRC_FULL_DIR}/*.c)
-set(rrc_source  ${rrc_source} ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1_msg.c)
 file(GLOB rrc_h ${RRC_FULL_DIR}/*.h)
 set(rrc_h ${rrc_h} ${RRC_FULL_DIR}/asn1_constants.h)
 set_source_files_properties(${rrc_source} PROPERTIES COMPILE_FLAGS -w) # suppress warnings from generated code
-add_library(RRC_LIB ${rrc_h} ${rrc_source})
+add_library(RRC_LIB ${rrc_h} ${rrc_source}
+    ${OPENAIR2_DIR}/RRC/LITE/MESSAGES/asn1_msg.c)
 include_directories ("${RRC_FULL_DIR}")
 
 # add the command to generate the source code
@@ -768,7 +768,12 @@ else()
   include_directories("${OPENAIR2_DIR}/UTIL")
   include_directories("${OPENAIR2_DIR}/UTIL/LOG")
 endif()
-include_directories("${NFAPI_DIR}")
+include_directories("${NFAPI_DIR}/nfapi/public_inc")
+include_directories("${NFAPI_DIR}/common/public_inc")
+include_directories("${NFAPI_DIR}/pnf/public_inc")
+include_directories("${NFAPI_DIR}/nfapi/inc")
+include_directories("${NFAPI_DIR}/sim_common/inc")
+include_directories("${NFAPI_DIR}/pnf_sim/inc")
 include_directories("${OPENAIR1_DIR}")
 include_directories("${OPENAIR2_DIR}/NAS")
 include_directories("${OPENAIR2_DIR}")
@@ -1010,6 +1015,58 @@ set(SCHED_SRC
 )
 add_library(SCHED_LIB ${SCHED_SRC})
 
+# nFAPI
+#################################
+set(NFAPI_COMMON_SRC
+  ${NFAPI_DIR}/common/src/debug.c
+)
+add_library(NFAPI_COMMON_LIB ${NFAPI_COMMON_SRC})
+
+include_directories(${NFAPI_DIR}/common/public_inc)
+
+set(NFAPI_SRC
+  ${NFAPI_DIR}/nfapi/src/nfapi.c
+  ${NFAPI_DIR}/nfapi/src/nfapi_p4.c
+  ${NFAPI_DIR}/nfapi/src/nfapi_p5.c
+  ${NFAPI_DIR}/nfapi/src/nfapi_p7.c
+)
+add_library(NFAPI_LIB ${NFAPI_SRC})
+
+include_directories(${NFAPI_DIR}/nfapi/public_inc)
+include_directories(${NFAPI_DIR}/nfapi/inc)
+
+set(NFAPI_PNF_SRC
+  ${NFAPI_DIR}/pnf/src/pnf.c
+  ${NFAPI_DIR}/pnf/src/pnf_interface.c
+  ${NFAPI_DIR}/pnf/src/pnf_p7.c
+  ${NFAPI_DIR}/pnf/src/pnf_p7_interface.c
+)
+add_library(NFAPI_PNF_LIB ${NFAPI_PNF_SRC})
+
+include_directories(${NFAPI_DIR}/pnf/public_inc)
+include_directories(${NFAPI_DIR}/pnf/inc)
+
+set(NFAPI_VNF_SRC
+  ${NFAPI_DIR}/vnf/src/vnf.c
+  ${NFAPI_DIR}/vnf/src/vnf_interface.c
+  ${NFAPI_DIR}/vnf/src/vnf_p7.c
+  ${NFAPI_DIR}/vnf/src/vnf_p7_interface.c
+)
+add_library(NFAPI_VNF_LIB ${NFAPI_VNF_SRC})
+
+include_directories(${NFAPI_DIR}/vnf/public_inc)
+include_directories(${NFAPI_DIR}/vnf/inc)
+
+# nFAPI user defined code
+#############################
+set(NFAPI_USER_SRC
+${NFAPI_USER_DIR}/nfapi.c
+${NFAPI_USER_DIR}/nfapi_pnf.c
+${NFAPI_USER_DIR}/nfapi_vnf.c
+)
+add_library(NFAPI_USER_LIB ${NFAPI_USER_SRC})
+include_directories(${NFAPI_USER_DIR})
+
 # Layer 1
 #############################
 set(PHY_SRC
@@ -1206,6 +1263,8 @@ add_library(L2
   ${ENB_APP_SRC})
 #  ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c)
 
+include_directories(${NFAPI_USER_DIR})
+
 if (FLEXRAN_AGENT_SB_IF)
 
 #Test for adding a shared library
@@ -1619,6 +1678,13 @@ add_library(OPENAIR0_LIB
   ${OPENAIR_TARGETS}/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
 )
 
+include_directories("${NFAPI_DIR}/nfapi/public_inc")
+include_directories("${NFAPI_DIR}/common/public_inc")
+include_directories("${NFAPI_DIR}/pnf/public_inc")
+include_directories("${NFAPI_DIR}/nfapi/inc")
+include_directories("${NFAPI_DIR}/sim_common/inc")
+include_directories("${NFAPI_DIR}/pnf_sim/inc")
+
 # System packages that are required
 # We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/
 # or cmake provide a generic interface to pkg-config that widely used
@@ -1674,6 +1740,26 @@ endif()
 add_definitions("-DNETTLE_VERSION_MAJOR=${NETTLE_VERSION_MAJOR}")
 add_definitions("-DNETTLE_VERSION_MINOR=${NETTLE_VERSION_MINOR}")
 
+#pkg_search_module(NFAPI nfapi)
+#if(NOT ${NFAPI_FOUND})
+  #message( FATAL_ERROR "PACKAGE nfapi not found: some targets will fail. Run build_oai -I again!")
+#else()
+  #include_directories(${NFAPI_INCLUDE_DIRS})
+  #message( "PACKAGE nfapi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+  #message( "${NFAPI_INCLUDE_DIR}")
+  #message( "${NFAPI_COMMON_INCLUDE_DIR}")
+  #message( "${NFAPI_VNF_INCLUDE_DIR}")
+  #message( "${NFAPI_PNF_INCLUDE_DIR}")
+  #message( "XXX")
+  #message( "${NFAPI_LIBRARY}")
+  #message( "${NFAPI_COMMON_LIBRARY}")
+  #message( "${NFAPI_PNF_LIBRARY}")
+  #message( "XXX")
+  #message( "${NFAPI_LIBRARIES}")
+  #message( "XXX")
+#endif()
+
+
 pkg_search_module(XPM xpm)
 if(NOT ${XPM_FOUND})
   message("PACKAGE xpm not found: some targets will fail")
@@ -1729,6 +1815,12 @@ if (${T_TRACER})
   set (T_LIB "rt")
 endif (${T_TRACER})
 
+#if (${NFAPI_DIR})
+#set (NFAPI_PNF_LIB "nfapi_pnf")
+#set (NFAPI_LIB "nfapi")
+#set (NFAPI_COMMON_LIB "nfapi_common")
+#endif (${NFAPI_DIR})
+#
 #Some files in the T directory are generated.
 #This rule and the following deal with it.
 add_custom_command (
@@ -1785,10 +1877,12 @@ add_executable(lte-softmodem
   ${SHLIB_LOADER_SOURCES}
   )
 
-target_link_libraries (lte-softmodem -ldl 
+target_link_libraries (lte-softmodem
   -Wl,--start-group
   RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
-  -Wl,--end-group )
+  NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB
+  NFAPI_USER_LIB
+  -Wl,--end-group z dl)
 
 target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
 target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp  ${XFORMS_LIBRARIES} ${PROTOBUF_LIB}  ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
@@ -1910,22 +2004,44 @@ add_executable(oaisim
   ${SHLIB_LOADER_SOURCES}
 )
 
+#add_library( imp_nfapi STATIC IMPORTED)
+#set_property(TARGET imp_nfapi PROPERTY IMPORTED_LOCATION ${NFAPI_DIR}/libnfapi.a)
+#set_property(TARGET imp_nfapi PROPERTY IMPORTED_IMPLIB ${NFAPI_DIR}/libnfapi.a)
+#target_link_libraries(oaisim imp_nfapi)
+
+#add_library( imp_nfapi_common STATIC IMPORTED)
+#set_property(TARGET imp_nfapi_common PROPERTY IMPORTED_LOCATION ${NFAPI_DIR}/common/libnfapi_common.a)
+#set_property(TARGET imp_nfapi_common PROPERTY IMPORTED_IMPLIB ${NFAPI_DIR}/common/libnfapi_common.a)
+#target_link_libraries(oaisim imp_nfapi_common)
+
+#add_library( imp_nfapi_pnf STATIC IMPORTED)
+#set_property(TARGET imp_nfapi_pnf PROPERTY IMPORTED_LOCATION ${NFAPI_DIR}/pnf/libnfapi_pnf.a)
+#set_property(TARGET imp_nfapi_pnf PROPERTY IMPORTED_IMPLIB ${NFAPI_DIR}/pnf/libnfapi_pnf.a)
+#target_link_libraries(oaisim imp_nfapi_pnf)
+
+#
+#add_library (imp_nfapi_common STATIC IMPORTED)
+#set_target_properties(imp_nfapi_common PROPERTIES IMPORTED_LOCATION ${NFAPI_DIR}/common/libnfapi_common.a
+#set_target_properties(oaisim PROPERTIES LINK_FLAGS ${NFAPI_DIR}/nfapi/libnfapi.a ${NFAPI_DIR}/pnf/libnfapi_pnf.a ${NFAPI_DIR}/common/libnfapi_common.a)
+
+
 
 target_include_directories(oaisim PUBLIC  ${OPENAIR_TARGETS}/SIMU/USER)
 target_link_libraries (oaisim
   -Wl,-ldl,--start-group
   RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${MSC_LIB} L2 ${RAL_LIB} LIB_NAS_UE SIMU SECU_OSA ${ITTI_LIB}  ${MIH_LIB}
+  NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB
+  NFAPI_USER_LIB
   -Wl,--end-group )
 
 target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
-target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES}  ${NETTLE_LIBRARIES} sctp 
-  ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES})
+target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES}  ${NETTLE_LIBRARIES} sctp z
+  ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} )
 #Force link with forms, regardless XFORMS option
 target_link_libraries (oaisim forms)
 target_link_libraries (oaisim ${T_LIB})
 
 
-
 # A all in one network simulator
 ################
 add_executable(oaisim_nos1
diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt
index db49a9181d6009523a8e596b18d54add9603da16..54f369f97772e7bdbf8214b191afdfb89e7cfce4 100755
--- a/cmake_targets/at_commands/CMakeLists.txt
+++ b/cmake_targets/at_commands/CMakeLists.txt
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/core.py b/cmake_targets/autotests/core.py
index 2665e57372a196c62c639f0c8b27956eb6f4712e..09785df1203c9bf8829a5e0a786fb755ea0033ef 100644
--- a/cmake_targets/autotests/core.py
+++ b/cmake_targets/autotests/core.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/log.py b/cmake_targets/autotests/log.py
index 25eb2b5ffb0254c1e5bfcd9c7019b1f64119225a..5a97b19cf23429b5a430a465d31e2dfcda8728a1 100644
--- a/cmake_targets/autotests/log.py
+++ b/cmake_targets/autotests/log.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py
index 7ad118ef1bba19a1d9e6f186ecbd341dfb7d8f5f..beb12cd2a20821f123b281ec18bb4954d6c88daf 100644
--- a/cmake_targets/autotests/openair.py
+++ b/cmake_targets/autotests/openair.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/run_compilation_autotests.bash b/cmake_targets/autotests/run_compilation_autotests.bash
index a6a861cb60b4763acda8a479ec4ecdbc342d0d05..10e4caa04ba5417404a363f6804c516841afef9c 100755
--- a/cmake_targets/autotests/run_compilation_autotests.bash
+++ b/cmake_targets/autotests/run_compilation_autotests.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash
index 5551ede44d01da3a763b3c74f4c39fee5ec79efc..ff38ae9d3c2431fba0c3e4792777d08c3b54f02e 100755
--- a/cmake_targets/autotests/run_exec_autotests.bash
+++ b/cmake_targets/autotests/run_exec_autotests.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
index 9f08a00d1aa0f7ad0605145cb87b67e7ff071f25..65bcfd5af89be73c17fed0602dda18b206eddb63 100755
--- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
+++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
index f03facc7daaa11fe440c74f8b6e911632473e320..ee4f3f93bc0f058b64a41af7d23ee1b407e87c87 100755
--- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
index 52178a32a181a2500767fcb6c121b6243453fc3d..42e4b2ea9a68a85333ffadd5f0f93bdfa6f2edf1 100755
--- a/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py b/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
index 42ed5fdeba77da2d62f59bffb6cba86ff8daedb1..8c2c1dd7f209eba509f22dbf75de900be680e4fb 100755
--- a/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
+++ b/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/configure_usrpb210.py b/cmake_targets/autotests/tools/configure_usrpb210.py
index 860a717d721b23a5254139cd1030dc9aa5465f7f..588bde9d33f548c629384e3fbad8715f45f3341c 100755
--- a/cmake_targets/autotests/tools/configure_usrpb210.py
+++ b/cmake_targets/autotests/tools/configure_usrpb210.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/find_usb_path.bash b/cmake_targets/autotests/tools/find_usb_path.bash
index c115d7a9dca5e5bcf32c8f94324012e0815e084e..91156012b766636be052b5ae06ab0354ec57cfdb 100755
--- a/cmake_targets/autotests/tools/find_usb_path.bash
+++ b/cmake_targets/autotests/tools/find_usb_path.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/free_mem.bash b/cmake_targets/autotests/tools/free_mem.bash
index 8196bf342830ad25d4e4b85467c4b2a673513bd5..a5b2b00cb6ffac2a669a14cd4592c1e88f1f3887 100755
--- a/cmake_targets/autotests/tools/free_mem.bash
+++ b/cmake_targets/autotests/tools/free_mem.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/git-retry.sh b/cmake_targets/autotests/tools/git-retry.sh
index 9f4d96af8d01bf8cc082defc11323ced98b77ad8..f0366b2ae58deb439459318f1b74dd0b9392d6fe 100755
--- a/cmake_targets/autotests/tools/git-retry.sh
+++ b/cmake_targets/autotests/tools/git-retry.sh
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/iperf3_script b/cmake_targets/autotests/tools/iperf3_script
index bf506bbc65b8f59174349b47d7ebf9d91dc6ebab..93aa742bd346a942f671fac3e22a011a5ec487dc 100755
--- a/cmake_targets/autotests/tools/iperf3_script
+++ b/cmake_targets/autotests/tools/iperf3_script
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/iperf3_script_phone b/cmake_targets/autotests/tools/iperf3_script_phone
index e4ccc382371306f293b7132ff651fe1fcbeb2632..1d9e9322a17ef30107f6c68d90d48e4ae44557de 100755
--- a/cmake_targets/autotests/tools/iperf3_script_phone
+++ b/cmake_targets/autotests/tools/iperf3_script_phone
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/iperf_script b/cmake_targets/autotests/tools/iperf_script
index 28f239af09d2d1dde01cc0adc7a013865928c22f..d74462cbcc1af9c547ffc787e586460cb599ddb1 100755
--- a/cmake_targets/autotests/tools/iperf_script
+++ b/cmake_targets/autotests/tools/iperf_script
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/iperf_script_phone b/cmake_targets/autotests/tools/iperf_script_phone
index 0195ee9eb324e409fb772d187ea49a816a9357e4..29c670f82675f42dd2b91edb6e5f87aa4ff47341 100755
--- a/cmake_targets/autotests/tools/iperf_script_phone
+++ b/cmake_targets/autotests/tools/iperf_script_phone
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/lib_autotest.py b/cmake_targets/autotests/tools/lib_autotest.py
index 2e9a7df11f086dd6923ba157be3b1517aa29db6b..54be808e1dd9894de5c907e04ca39c1eff9abca5 100644
--- a/cmake_targets/autotests/tools/lib_autotest.py
+++ b/cmake_targets/autotests/tools/lib_autotest.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/run_gdb b/cmake_targets/autotests/tools/run_gdb
index 9dea2d350cd489ef274871fa9184f5edb08982b2..ace8e7a2965a85df7781a72643697addea4f7ff0 100755
--- a/cmake_targets/autotests/tools/run_gdb
+++ b/cmake_targets/autotests/tools/run_gdb
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py
index c3e73ccde48127f6d5d1353858fc47bfefd41df9..f34533cfd0a9f895f32cdd62ef84f659b83cb8fa 100755
--- a/cmake_targets/autotests/tools/search_repl.py
+++ b/cmake_targets/autotests/tools/search_repl.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 01d94da73ea8d9716ab8f58e00f5663b468dac94..1ff853d58fbaf2e3dda1dd5a30bafd5bb1213feb 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
@@ -196,7 +196,7 @@ function main() {
             GDB=1
             CMAKE_BUILD_TYPE="Debug"
             echo_info "Will Compile with gdb symbols and disable compiler optimization"
-            CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug"
+            CMAKE_CMD="$CMAKE_CMD -DCMAKE_BUILD_TYPE=Debug --trace-expand"
             shift;;
        --eNB)
             eNB=1
@@ -856,11 +856,9 @@ function main() {
 	      ln -sf $dbin/liboai_exmimodevif.so.$REL $dbin/liboai_device.so
 	      echo_info "liboai_device.so is linked to EXMIMO device library"       
 	  elif [ "$HW" == "OAI_USRP" ] ; then
-	      if [ -d "/usr/include/uhd" ] ; then
-		  compilations \
-		      $build_dir oai_usrpdevif \
-		      liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
-	      fi
+              compilations \
+                  $build_dir oai_usrpdevif \
+                  liboai_usrpdevif.so $dbin/liboai_usrpdevif.so.$REL
 
 	      ln -sf liboai_usrpdevif.so liboai_device.so
 	      ln -sf $dbin/liboai_usrpdevif.so.$REL $dbin/liboai_device.so
diff --git a/cmake_targets/tools/asn1tostruct.py b/cmake_targets/tools/asn1tostruct.py
index e8ebb03d6d2c7dd87b9655278fd9c98460ec02f1..8c0f7e8a16a52ca7588a40cefb73428156a14f7d 100644
--- a/cmake_targets/tools/asn1tostruct.py
+++ b/cmake_targets/tools/asn1tostruct.py
@@ -38,7 +38,7 @@ def outputHeaderToFile(f, filename):
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index f6c51944d2a1be7b9c467e4f91fe63caeb6a47aa..e98a2b9fbf96ea73f1b57c130c3f4d3ed3b10510 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
@@ -230,6 +230,7 @@ install_protobuf_c_from_source(){
     rm -rf /tmp/protobuf-c
     git clone https://github.com/protobuf-c/protobuf-c.git
     cd protobuf-c
+	git checkout 2a46af42784abf86804d536f6e0122d47cfeea45
     ./autogen.sh
     ./configure
     echo "Compiling protobuf-c"
diff --git a/cmake_targets/tools/build_test_epc_tools b/cmake_targets/tools/build_test_epc_tools
index f9d8057c93c96d4a1759dcc5639f2d3105442afe..dc2d01654593d1b4f2290cd6720143c3b0b7e679 100755
--- a/cmake_targets/tools/build_test_epc_tools
+++ b/cmake_targets/tools/build_test_epc_tools
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
index 546ae1ba86d8d749dc363ee03600ea3c0504da35..238554f8e2a71ccb667c537d5086c0e99c40a442 100644
--- a/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
+++ b/cmake_targets/tools/example_enb_exmimo_mme_hss.txt
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
index baccdbc2881905dac922a6b035b78fd627d5e5c4..9996a53e1907cf3ddd75550187c984917d9158f7 100644
--- a/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
+++ b/cmake_targets/tools/example_oaisim_enb_ue_mme_virtual.txt
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/fix_asn1 b/cmake_targets/tools/fix_asn1
index 805a4ce66a2a58bbc430f5ed439e3bd5217d07e8..5cdab5ffd8cae3b43bb41b6908924de5ec04985b 100755
--- a/cmake_targets/tools/fix_asn1
+++ b/cmake_targets/tools/fix_asn1
@@ -4,7 +4,7 @@
 #   <file> <sha1sum of file (without line 4 which changes depending on the location of the files)> <patch to apply to file>
 
 RRC_Rel14=(
-  "SystemInformation-r8-IEs.h" 562e3c3aeb7c6d76d722f31bf24488a26e627f33 "fix_asn1.data/RRC.rel14/SystemInformation-r8-IEs.h.diff"
+  "SystemInformation-r8-IEs.h" 4df485c5ddf2540eca271876cdc512caa19b0890 "fix_asn1.data/RRC.rel14/SystemInformation-r8-IEs.h.diff"
 )
 
 RRC_Rel10=(
diff --git a/cmake_targets/tools/indent_source_code b/cmake_targets/tools/indent_source_code
index 17a29fb073cfd5be34c32e5cba4f5ea8d4a97f37..a16914a91dde6e3f89ddf60ecc56e26a379adcad 100755
--- a/cmake_targets/tools/indent_source_code
+++ b/cmake_targets/tools/indent_source_code
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/init_exmimo2 b/cmake_targets/tools/init_exmimo2
index 1ed65cf0e05588016bf6f78e8f89922dbcb2eb01..8e902a8433d7fe760b72d28aa16165f10626b15e 100755
--- a/cmake_targets/tools/init_exmimo2
+++ b/cmake_targets/tools/init_exmimo2
@@ -5,7 +5,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/init_nas_nos1 b/cmake_targets/tools/init_nas_nos1
index 3aaf547823b344685244e5b62b144a03cd26ed50..9bcaa0afb5bd8d0961315443620aa7d643374df8 100755
--- a/cmake_targets/tools/init_nas_nos1
+++ b/cmake_targets/tools/init_nas_nos1
@@ -5,7 +5,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/init_nas_s1 b/cmake_targets/tools/init_nas_s1
index 003a3ae600a12cfa225b6d627af6d0c6d93a2814..cab4ad047bf4d42d9a4ba1890c9cef9967ec2a00 100644
--- a/cmake_targets/tools/init_nas_s1
+++ b/cmake_targets/tools/init_nas_s1
@@ -8,7 +8,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/perf_oai.bash b/cmake_targets/tools/perf_oai.bash
index 44d9d1c74aa610be95a16123d9483dab9efcc76a..cd1ef5a40004d3588637d1d936122c4cfedbe314 100755
--- a/cmake_targets/tools/perf_oai.bash
+++ b/cmake_targets/tools/perf_oai.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/run_enb_s1_exmimo b/cmake_targets/tools/run_enb_s1_exmimo
index 028b492341981a317bf6f5951efc6eaba1932a0b..1bb6ce44254e4bacfb7eae3440bf63cd5e299475 100755
--- a/cmake_targets/tools/run_enb_s1_exmimo
+++ b/cmake_targets/tools/run_enb_s1_exmimo
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/run_enb_s1_usrp b/cmake_targets/tools/run_enb_s1_usrp
index 3d49fe40bdbb7cddf555e6eefa592cee10250971..e11912668303a3c441e44350f4f50939e265d3cd 100755
--- a/cmake_targets/tools/run_enb_s1_usrp
+++ b/cmake_targets/tools/run_enb_s1_usrp
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/run_enb_ue_virt_noS1 b/cmake_targets/tools/run_enb_ue_virt_noS1
index a5139d4b44c250ab7e1c056d45ef014988f4798b..79d5bc35dc1586fbbde90762affd87a718f50c91 100755
--- a/cmake_targets/tools/run_enb_ue_virt_noS1
+++ b/cmake_targets/tools/run_enb_ue_virt_noS1
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1
index 8e717f393a28b637771b9698e61b7f547bb3c444..50fc819ec869b243da177435bcc19ea6a571dd7d 100755
--- a/cmake_targets/tools/run_enb_ue_virt_s1
+++ b/cmake_targets/tools/run_enb_ue_virt_s1
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/cmake_targets/tools/stop_exmimo2 b/cmake_targets/tools/stop_exmimo2
index 85d9bec309743b9546041fc368e883598b8abf08..fdfe19425ddcaac7c04b8523b0fafce98de78b6b 100755
--- a/cmake_targets/tools/stop_exmimo2
+++ b/cmake_targets/tools/stop_exmimo2
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c
index ad2e355d528153d8591ba7f89065b7c6cdeae2a4..339889ea2f209ef720fd2034495c45777b056410 100644
--- a/common/config/config_userapi.c
+++ b/common/config/config_userapi.c
@@ -124,6 +124,7 @@ int config_get(paramdef_t *params,int numparams, char *prefix)
 {
 int ret= -1;
 
+printf("numparams:%d prefix:%s\n", numparams, prefix);
 if (CONFIG_ISFLAGSET(CONFIG_ABORT)) {
     fprintf(stderr,"[CONFIG] config_get skipped, config module not properly initialized\n");
     return ret;
diff --git a/common/utils/T/.gitignore b/common/utils/T/.gitignore
index f5724e6ff8c25fd4bf1fc8701f7ca881de58194a..817780592428b38fd48b57f26be6b3a73868ae63 100644
--- a/common/utils/T/.gitignore
+++ b/common/utils/T/.gitignore
@@ -10,4 +10,9 @@ tracer/replay
 tracer/textlog
 tracer/vcd
 tracer/macpdu2wireshark
+tracer/ue
+tracer/to_vcd
+tracer/extract_input_subframe
+tracer/extract_output_subframe
+tracer/extract
 tracee/tracee
diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h
index 65f2430265574103ceaccd47970f84307f6bfaa6..24845b6b9eafb2241ad62e7cc9e9ad643f0ecbbb 100644
--- a/common/utils/T/T_defs.h
+++ b/common/utils/T/T_defs.h
@@ -29,10 +29,10 @@ typedef struct {
 #define T_SHM_FILENAME "/T_shm_segment"
 
 /* number of VCD functions (to be kept up to date! see in T_messages.txt) */
-#define VCD_NUM_FUNCTIONS 172
+#define VCD_NUM_FUNCTIONS 178
 
 /* number of VCD variables (to be kept up to date! see in T_messages.txt) */
-#define VCD_NUM_VARIABLES 118
+#define VCD_NUM_VARIABLES 128
 
 /* first VCD function (to be kept up to date! see in T_messages.txt) */
 #define VCD_FIRST_FUNCTION    ((uintptr_t)T_VCD_FUNCTION_RT_SLEEP)
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index 0eef56505a1e8484f24134d8779f0cfe8c96d19a..3e37b5ea150c7913d5c596001c03d364db13f828 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -958,6 +958,38 @@ ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_ENB
     DESC = VCD variable SUBFRAME_NUMBER_RX1_ENB
     GROUP = ALL:VCD:ENB:VCD_VARIABLE
     FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_TX0_RU
+    DESC = VCD variable FRAME_NUMBER_TX0_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_TX1_RU
+    DESC = VCD variable FRAME_NUMBER_TX1_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_RX0_RU
+    DESC = VCD variable FRAME_NUMBER_RX0_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_FRAME_NUMBER_RX1_RU
+    DESC = VCD variable FRAME_NUMBER_RX1_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX0_RU
+    DESC = VCD variable SUBFRAME_NUMBER_TX0_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_TX1_RU
+    DESC = VCD variable SUBFRAME_NUMBER_TX1_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX0_RU
+    DESC = VCD variable SUBFRAME_NUMBER_RX0_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_SUBFRAME_NUMBER_RX1_RU
+    DESC = VCD variable SUBFRAME_NUMBER_RX1_RU
+    GROUP = ALL:VCD:ENB:VCD_VARIABLE
+    FORMAT = ulong,value
 ID = VCD_VARIABLE_RUNTIME_TX_ENB
     DESC = VCD variable RUNTIME_TX_ENB
     GROUP = ALL:VCD:ENB:VCD_VARIABLE
@@ -1050,6 +1082,14 @@ ID = VCD_VARIABLE_TRX_TST
     DESC = VCD variable TRX_TST
     GROUP = ALL:VCD:ENB:VCD_VARIABLE
     FORMAT = ulong,value
+ID = VCD_VARIABLE_TRX_TS_UE
+    DESC = VCD variable TRX_TS_UE
+    GROUP = ALL:VCD:UE:VCD_VARIABLE
+    FORMAT = ulong,value
+ID = VCD_VARIABLE_TRX_TST_UE
+    DESC = VCD variable TRX_TST_UE
+    GROUP = ALL:VCD:UE:VCD_VARIABLE
+    FORMAT = ulong,value
 ID = VCD_VARIABLE_TRX_WRITE_FLAGS
     DESC = VCD variable TRX_WRITE_FLAGS
     GROUP = ALL:VCD:ENB:VCD_VARIABLE
@@ -1413,6 +1453,14 @@ ID = VCD_FUNCTION_TRX_WRITE
     DESC = VCD function TRX_WRITE
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
+ID = VCD_FUNCTION_TRX_READ_UE
+    DESC = VCD function TRX_READ_UE
+    GROUP = ALL:VCD:UE:VCD_FUNCTION
+    FORMAT = int,value
+ID = VCD_FUNCTION_TRX_WRITE_UE
+    DESC = VCD function TRX_WRITE_UE
+    GROUP = ALL:VCD:UE:VCD_FUNCTION
+    FORMAT = int,value
 ID = VCD_FUNCTION_TRX_READ_IF
     DESC = VCD function TRX_READ_IF
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
@@ -1565,12 +1613,28 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_TX1
     DESC = VCD function PHY_PROCEDURES_ENB_TX1
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
-ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON
-    DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX
+    DESC = VCD function PHY_PROCEDURES_RU_FEPRX
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPRX1
+    DESC = VCD function PHY_PROCEDURES_RU_FEPRX1
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM
+    DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_OFDM1
+    DESC = VCD function PHY_PROCEDURES_RU_FEPTX_OFDM1
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC
+    DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
-ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_COMMON1
-    DESC = VCD function PHY_PROCEDURES_ENB_RX_COMMON1
+ID = VCD_FUNCTION_PHY_PROCEDURES_RU_FEPTX_PREC1
+    DESC = VCD function PHY_PROCEDURES_RU_FEPTX_PREC1
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
 ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC
@@ -1581,10 +1645,6 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1
     DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
-ID = VCD_FUNCTION_ENB_SLOT_FEP
-    DESC = VCD function ENB_SLOT_FEP
-    GROUP = ALL:VCD:ENB:VCD_FUNCTION
-    FORMAT = int,value
 ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX
     DESC = VCD function PHY_PROCEDURES_UE_TX
     GROUP = ALL:VCD:UE:VCD_FUNCTION
@@ -1781,6 +1841,10 @@ ID = VCD_FUNCTION_PHY_ENB_PRACH_RX
     DESC = VCD function PHY_ENB_PRACH_RX
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
     FORMAT = int,value
+ID = VCD_FUNCTION_PHY_RU_PRACH_RX
+    DESC = VCD function PHY_RU_PRACH_RX
+    GROUP = ALL:VCD:ENB:VCD_FUNCTION
+    FORMAT = int,value
 ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX
     DESC = VCD function PHY_ENB_PDCCH_TX
     GROUP = ALL:VCD:ENB:VCD_FUNCTION
diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile
index 6546345968637809eeed85e630e393035dcf0589..1c4a77587c3916c9140a9ef71465b08e8a9313aa 100644
--- a/common/utils/T/tracer/Makefile
+++ b/common/utils/T/tracer/Makefile
@@ -3,10 +3,11 @@ CFLAGS=-Wall -g -pthread -DT_TRACER -I.
 
 #CFLAGS += -O3 -ffast-math -fomit-frame-pointer
 
-LIBS=-lX11 -lm -lpng -lXft
+LIBS=-lm
+XLIBS=-lX11 -lpng -lXft
 
 all: record replay extract_config textlog enb ue vcd macpdu2wireshark \
-     extract_input_subframe
+     extract_input_subframe extract_output_subframe to_vcd extract
 
 record: utils.o record.o database.o config.o
 	$(CC) $(CFLAGS) -o record $^ $(LIBS)
@@ -21,25 +22,36 @@ extract_input_subframe: extract_input_subframe.o database.o event.o utils.o \
     config.o
 	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
 
+extract_output_subframe: extract_output_subframe.o database.o event.o utils.o \
+    config.o
+	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
+
+extract: extract.o database.o event.o utils.o config.o
+	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
+
 textlog: utils.o textlog.o database.o event.o handler.o config.o \
          event_selector.o view/view.a gui/gui.a logger/logger.a \
          filter/filter.a
-	$(CC) $(CFLAGS) -o textlog $^ $(LIBS)
+	$(CC) $(CFLAGS) -o textlog $^ $(LIBS) $(XLIBS)
 
 enb: utils.o enb.o database.o event.o handler.o config.o \
          event_selector.o view/view.a gui/gui.a logger/logger.a \
          filter/filter.a
-	$(CC) $(CFLAGS) -o enb $^ $(LIBS)
+	$(CC) $(CFLAGS) -o enb $^ $(LIBS) $(XLIBS)
 
 ue: utils.o ue.o database.o event.o handler.o config.o \
          event_selector.o view/view.a gui/gui.a logger/logger.a \
          filter/filter.a
-	$(CC) $(CFLAGS) -o ue $^ $(LIBS)
+	$(CC) $(CFLAGS) -o ue $^ $(LIBS) $(XLIBS)
 
 vcd: utils.o vcd.o database.o event.o handler.o config.o \
          event_selector.o view/view.a gui/gui.a logger/logger.a \
          filter/filter.a
-	$(CC) $(CFLAGS) -o vcd $^ $(LIBS)
+	$(CC) $(CFLAGS) -o vcd $^ $(LIBS) $(XLIBS)
+
+to_vcd: to_vcd.o database.o event.o handler.o utils.o config.o \
+         logger/logger.a filter/filter.a
+	$(CC) $(CFLAGS) -o to_vcd $^ $(LIBS)
 
 macpdu2wireshark: macpdu2wireshark.o database.o utils.o handler.o event.o \
                   config.o
@@ -65,6 +77,7 @@ filter/filter.a:
 clean:
 	rm -f *.o core tracer_remote textlog enb ue vcd record replay
 	rm -f extract_config macpdu2wireshark extract_input_subframe
+	rm -f extract_output_subframe to_vcd extract
 	cd gui && make clean
 	cd view && make clean
 	cd logger && make clean
diff --git a/common/utils/T/tracer/extract.c b/common/utils/T/tracer/extract.c
new file mode 100644
index 0000000000000000000000000000000000000000..b9fca959eddf6a8428aee25b5aabf37cd51419b5
--- /dev/null
+++ b/common/utils/T/tracer/extract.c
@@ -0,0 +1,124 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include "database.h"
+#include "event.h"
+#include "config.h"
+
+void usage(void)
+{
+  printf(
+"usage: [options] <file> <event> <buffer name>\n"
+"options:\n"
+"    -d <database file>        this option is mandatory\n"
+"    -o <output file>          this option is mandatory\n"
+"    -f <name> <value>         field 'name' of 'event' has to match 'value'\n"
+"                              type of 'name' must be int\n"
+"                              (you can use several -f options)\n"
+  );
+  exit(1);
+}
+
+int get_filter_arg(database_event_format *f, char *field, char *type)
+{
+  int i;
+  for (i = 0; i < f->count; i++)
+    if (!strcmp(f->name[i], field)) {
+      if (strcmp(f->type[i], type)) break;
+      return i;
+    }
+  printf("bad field %s, check that it exists and has type '%s'\n",field,type);
+  exit(1);
+}
+
+int main(int n, char **v)
+{
+  char *database_filename = NULL;
+  void *database;
+  int i;
+  int input_event_id;
+  database_event_format f;
+  char *file = NULL;
+  char *output_file = NULL;
+  FILE *out;
+  int fd;
+  char *event_name = NULL;
+  char *buffer_name = NULL;
+  char *filter[n];
+  int filter_arg[n];
+  int filter_value[n];
+  int filter_count = 0;
+  int buffer_arg;
+  int found;
+
+  for (i = 1; i < n; i++) {
+    if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+    if (!strcmp(v[i], "-d"))
+      { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-o"))
+      { if (i > n-2) usage(); output_file = v[++i]; continue; }
+    if (!strcmp(v[i], "-f")) { if (i>n-3) usage();
+      filter[filter_count]         = v[++i];
+      filter_value[filter_count++] = atoi(v[++i]);
+      continue;
+    }
+    if (file == NULL) { file = v[i]; continue; }
+    if (event_name == NULL) { event_name = v[i]; continue; }
+    if (buffer_name == NULL) { buffer_name = v[i]; continue; }
+    usage();
+  }
+  if (file == NULL || event_name == NULL || buffer_name == NULL) usage();
+
+  if (database_filename == NULL) {
+    printf("ERROR: provide a database file (-d)\n");
+    exit(1);
+  }
+
+  if (output_file == NULL) {
+    printf("gimme -o <output file>, thanks\n");
+    exit(1);
+  }
+
+  out = fopen(output_file, "w"); if(out==NULL){perror(output_file);exit(1);}
+
+  database = parse_database(database_filename);
+
+  load_config_file(database_filename);
+
+  input_event_id = event_id_from_name(database, event_name);
+  f = get_format(database, input_event_id);
+
+  buffer_arg = get_filter_arg(&f, buffer_name, "buffer");
+
+  for (i = 0; i < filter_count; i++)
+    filter_arg[i] = get_filter_arg(&f, filter[i], "int");
+
+  fd = open(file, O_RDONLY);
+  if (fd == -1) { perror(file); exit(1); }
+
+  found = 0;
+
+  while (1) {
+    char v[T_BUFFER_MAX];
+    event e;
+    e = get_event(fd, v, database);
+    if (e.type == -1) break;
+    if (e.type != input_event_id) continue;
+    for (i = 0; i < filter_count; i++)
+      if (filter_value[i] != e.e[filter_arg[i]].i)
+        break;
+    if (i != filter_count)
+      continue;
+    if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1)
+      { perror(output_file); exit(1); }
+    found = 1;
+    break;
+  }
+
+  if (found == 0) printf("ERROR: event not found\n");
+
+  fclose(out);
+
+  return 0;
+}
diff --git a/common/utils/T/tracer/extract_output_subframe.c b/common/utils/T/tracer/extract_output_subframe.c
new file mode 100644
index 0000000000000000000000000000000000000000..b82ad0e7665d259358e08b27f7c1816659ca3b3b
--- /dev/null
+++ b/common/utils/T/tracer/extract_output_subframe.c
@@ -0,0 +1,158 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include "database.h"
+#include "event.h"
+#include "config.h"
+
+void usage(void)
+{
+  printf(
+"usage: [options] <file> <frame> <subframe> <number of subframes>\n"
+"    the program dumps 'number of subframes' subframes starting\n"
+"    at 'frame:suubframe'\n"
+"options:\n"
+"    -d <database file>        this option is mandatory\n"
+"    -o <output file>          output to file (default: stdout)\n"
+"    -v                        verbose\n"
+  );
+  exit(1);
+}
+
+int main(int n, char **v)
+{
+  char *database_filename = NULL;
+  void *database;
+  int i;
+  int output_event_id;
+  database_event_format f;
+  char *file = NULL;
+  int fd;
+  int frame = -1, subframe = -1;
+  int number_of_subframes = -1;
+  int frame_arg, subframe_arg, buffer_arg;
+  int verbose = 0;
+  char *out_filename = NULL;
+  FILE *out;
+
+  for (i = 1; i < n; i++) {
+    if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+    if (!strcmp(v[i], "-d"))
+      { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-o"))
+      { if (i > n-2) usage(); out_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-v")) { verbose = 1; continue; }
+    if (file == NULL)              { file = v[i]; continue; }
+    if (frame == -1)               { frame = atoi(v[i]); continue; }
+    if (subframe == -1)            { subframe = atoi(v[i]); continue; }
+    if (number_of_subframes == -1) {number_of_subframes=atoi(v[i]);continue;}
+    usage();
+  }
+  if (file == NULL || frame == -1 || subframe == -1 ||
+      number_of_subframes == -1) usage();
+
+  if (database_filename == NULL) {
+    printf("ERROR: provide a database file (-d)\n");
+    exit(1);
+  }
+
+  if (out_filename == NULL) out = stdout;
+  else {
+    out = fopen(out_filename, "w");
+    if (out == NULL) { perror(out_filename); exit(1); }
+  }
+
+  database = parse_database(database_filename);
+
+  load_config_file(database_filename);
+
+  output_event_id = event_id_from_name(database, "ENB_PHY_OUTPUT_SIGNAL");
+  f = get_format(database, output_event_id);
+
+  frame_arg = subframe_arg = buffer_arg = -1;
+  for (i = 0; i < f.count; i++) {
+    if (!strcmp(f.name[i], "frame")) {
+      if (frame_arg != -1) goto err;
+      if (strcmp(f.type[i], "int")) goto err;
+      frame_arg = i;
+    }
+    if (!strcmp(f.name[i], "subframe")) {
+      if (subframe_arg != -1) goto err;
+      if (strcmp(f.type[i], "int")) goto err;
+      subframe_arg = i;
+    }
+    if (!strcmp(f.name[i], "txdata")) {
+      if (buffer_arg != -1) goto err;
+      if (strcmp(f.type[i], "buffer")) goto err;
+      buffer_arg = i;
+    }
+    continue;
+err:
+    printf("cannot deal with ENB_PHY_OUTPUT_SIGNAL from database file\n");
+    exit(1);
+  }
+  if (frame_arg == -1 || subframe_arg == -1 || buffer_arg == -1) goto err;
+
+  fd = open(file, O_RDONLY);
+  if (fd == -1) { perror(file); exit(1); }
+
+  int last_frame = -1;
+  int last_subframe = -1;
+  int subframe_written = 0;
+  while (1) {
+    char v[T_BUFFER_MAX];
+    event e;
+    e = get_event(fd, v, database);
+    if (e.type == -1) break;
+    if (e.type != output_event_id) continue;
+    if (verbose)
+      printf("found output frame %d subframe %d size %d\n",
+             e.e[frame_arg].i, e.e[subframe_arg].i, e.e[buffer_arg].bsize);
+    if (!(last_frame != -1 ||
+          (frame == e.e[frame_arg].i && subframe == e.e[subframe_arg].i)))
+      continue;
+    frame = e.e[frame_arg].i;
+    subframe = e.e[subframe_arg].i;
+    if (last_frame != -1) {
+      if (frame*10+subframe != (last_frame*10+last_subframe + 1) % 10240) {
+        printf("error: discontinuity, not what you want...\n");
+        exit(1);
+      }
+    }
+    last_frame = frame;
+    last_subframe = subframe;
+#if 0
+for (i = 0; i < e.e[buffer_arg].bsize/2; i++) {
+short *x = e.e[buffer_arg].b;
+x[i] *= 14;
+}
+#endif
+    if (verbose)
+      printf("save output frame %d subframe %d size %d\n",
+             e.e[frame_arg].i, e.e[subframe_arg].i, e.e[buffer_arg].bsize);
+    if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1) {
+      perror(out_filename);
+      exit(1);
+    }
+    subframe_written++;
+    if (subframe_written != number_of_subframes)
+      continue;
+
+    /* done */
+    fflush(out);
+    if (out_filename != NULL) {
+      if (fclose(out)) perror(out_filename);
+    }
+    if (verbose)
+      printf("%d subframes written\n", subframe_written);
+    return 0;
+  }
+
+  printf("error with input file, %d subframe written\n", subframe_written);
+  fflush(out);
+  if (out_filename != NULL) {
+    if (fclose(out)) perror(out_filename);
+  }
+  return 1;
+}
diff --git a/common/utils/T/tracer/to_vcd.c b/common/utils/T/tracer/to_vcd.c
new file mode 100644
index 0000000000000000000000000000000000000000..82cd3393d7e9e26e59305cb3928a209d879bfdc4
--- /dev/null
+++ b/common/utils/T/tracer/to_vcd.c
@@ -0,0 +1,302 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <signal.h>
+#include <unistd.h>
+#include "database.h"
+#include "utils.h"
+#include "handler.h"
+#include "config.h"
+#include "logger/logger.h"
+#include "view/view.h"
+
+typedef struct {
+  char *event;
+  char *arg;
+  char *vcd_name;
+  int boolean;
+} vcd_vars;
+
+/****************************************************************************/
+/* VCD file handling begin                                                  */
+/****************************************************************************/
+
+FILE *out;
+
+uint64_t start_time;
+int start_time_inited;
+
+void vcd_init(char *file)
+{
+  out = fopen(file, "w"); if (out == NULL) { perror(file); exit(1); }
+}
+
+void vcd_write_header(vcd_vars *v, int n)
+{
+  int i;
+
+  if (fprintf(out,
+"$date\n"
+"  January, 1, 1970.\n"
+"$end\n"
+"$version\n"
+"  to_vcd\n"
+"$end\n"
+"$timescale 1ns $end\n"
+"$scope module logic $end\n") <= 0) abort();
+
+  for (i = 0; i < n; i++)
+    if (fprintf(out, "$var wire %d %s %s $end\n",
+           v[i].boolean ? 1 : 64,
+           v[i].vcd_name, v[i].vcd_name) <= 0) abort();
+
+  if (fprintf(out,
+"$upscope $end\n"
+"$enddefinitions $end\n"
+"$dumpvars\n") <= 0) abort();
+
+  for (i = 0; i < n; i++)
+    if (v[i].boolean) {
+      if (fprintf(out, "0%s\n", v[i].vcd_name) <= 0) abort();
+    } else {
+      if (fprintf(out, "b0 %s\n", v[i].vcd_name) <= 0) abort();
+    }
+
+  if (fprintf(out,
+"$end\n") <= 0) abort();
+
+}
+
+void vcd_end(void)
+{
+  if (fclose(out)) { perror("error closing VCD file"); exit(1); }
+}
+
+char *b64(uint64_t val)
+{
+  static char v[65];
+  char *s = &v[64];
+  *s = 0;
+  if (val == 0) { s--; *s = '0'; return s; }
+  while (val) {
+    s--;
+    *s = val&1 ? '1' : '0';
+    val >>= 1;
+  }
+  return s;
+}
+
+void vcd_dump(char *v)
+{
+  uint64_t h, m, s, ns;
+  char t;
+  uint64_t val;
+  uint64_t time;
+  char var[256];
+  if (sscanf(v, "%"SCNu64":%"SCNu64":%"SCNu64".%"SCNu64": %c %"SCNu64" %s",
+      &h, &m, &s, &ns, &t, &val, var) != 7)
+    goto err;
+  time = h*60*60*1000000000 +
+            m*60*1000000000 +
+               s*1000000000 +
+                         ns;
+  if (!start_time_inited) {
+    start_time = time;
+    start_time_inited = 1;
+  }
+  if (fprintf(out, "#%"PRIu64"\n", time - start_time) <= 0) abort();
+  switch (t) {
+  case 'b': if (fprintf(out, "%d%s\n", val!=0, var) <= 0) abort(); break;
+  case 'l': if (fprintf(out, "b%s %s\n", b64(val), var) <= 0) abort(); break;
+  default: goto err;
+  }
+
+  return;
+
+err:
+  printf("bad vcd_dump line '%s'\n", v);
+  exit(1);
+}
+
+/****************************************************************************/
+/* VCD file handling end                                                    */
+/****************************************************************************/
+
+
+/****************************************************************************/
+/* vcd view start                                                           */
+/****************************************************************************/
+
+struct vcd_view {
+  view common;
+};
+
+static void vcd_view_clear(view *this)
+{
+  /* nothing */
+}
+
+static void vcd_view_append(view *_this, char *s)
+{
+  vcd_dump(s);
+}
+
+static view *new_view_vcd(void)
+{
+  struct vcd_view *ret = calloc(1, sizeof(struct vcd_view));
+  if (ret == NULL) abort();
+  ret->common.clear = vcd_view_clear;
+  ret->common.append = (void (*)(view *, ...))vcd_view_append;
+  return (view *)ret;
+}
+
+/****************************************************************************/
+/* vcd view end                                                             */
+/****************************************************************************/
+
+void activate_traces(int socket, int number_of_events, int *is_on)
+{
+  char t = 1;
+  if (socket_send(socket, &t, 1) == -1 ||
+      socket_send(socket, &number_of_events, sizeof(int)) == -1 ||
+      socket_send(socket, is_on, number_of_events * sizeof(int)) == -1)
+    abort();
+}
+
+void usage(void)
+{
+  printf(
+"options:\n"
+"    -d <database file>           this option is mandatory\n"
+"    -o <output file>             this option is mandatory\n"
+"    -ip <host>                   connect to given IP address (default %s)\n"
+"    -p <port>                    connect to given port (default %d)\n"
+"    -b <event> <arg> <vcd name>  trace as binary (0 off, anything else on)\n"
+"    -l <event> <arg> <vcd name>  trace as uint64_t\n",
+  DEFAULT_REMOTE_IP,
+  DEFAULT_REMOTE_PORT
+  );
+  exit(1);
+}
+
+int run = 1;
+static int socket = -1;
+
+void force_stop(int x)
+{
+  printf("\ngently quit...\n");
+  close(socket);
+  socket = -1;
+  run = 0;
+}
+
+int main(int n, char **v)
+{
+  char *output_filename = NULL;
+  char *database_filename = NULL;
+  void *database;
+  char *ip = DEFAULT_REMOTE_IP;
+  int port = DEFAULT_REMOTE_PORT;
+  int *is_on;
+  int number_of_events;
+  int i;
+  vcd_vars vars[n];
+  int nvars = 0;
+  view *vcd_view;
+  event_handler *h;
+  logger *textlog;
+
+  /* write on a socket fails if the other end is closed and we get SIGPIPE */
+  if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
+
+  for (i = 1; i < n; i++) {
+    if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
+    if (!strcmp(v[i], "-d"))
+      { if (i > n-2) usage(); database_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-o"))
+      { if (i > n-2) usage(); output_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
+    if (!strcmp(v[i], "-p"))
+      { if (i > n-2) usage(); port = atoi(v[++i]); continue; }
+    if (!strcmp(v[i], "-b")) { if(i>n-4)usage();
+      vars[nvars].event     = v[++i];
+      vars[nvars].arg       = v[++i];
+      vars[nvars].vcd_name  = v[++i];
+      vars[nvars++].boolean = 1;
+      continue;
+    }
+    if (!strcmp(v[i], "-l")) { if(i>n-4)usage();
+      vars[nvars].event     = v[++i];
+      vars[nvars].arg       = v[++i];
+      vars[nvars].vcd_name  = v[++i];
+      vars[nvars++].boolean = 0;
+      continue;
+    }
+    usage();
+  }
+
+  if (output_filename == NULL) {
+    printf("ERROR; provide an output file (-o)\n");
+    exit(1);
+  }
+
+  if (database_filename == NULL) {
+    printf("ERROR: provide a database file (-d)\n");
+    exit(1);
+  }
+
+  database = parse_database(database_filename);
+
+  load_config_file(database_filename);
+
+  number_of_events = number_of_ids(database);
+  is_on = calloc(number_of_events, sizeof(int));
+  if (is_on == NULL) abort();
+
+  h = new_handler(database);
+
+  /* create the view */
+  vcd_view = new_view_vcd();
+
+  /* setup traces */
+  for (i = 0; i < nvars; i++) {
+    char format[256];
+    if (strlen(vars[i].arg) > 256-3) abort();
+    if (strlen(vars[i].vcd_name) > 256-1) abort();
+    sprintf(format, "%c [%s] %s",
+        vars[i].boolean ? 'b' : 'l',
+        vars[i].arg,
+        vars[i].vcd_name);
+    textlog = new_textlog(h, database, vars[i].event, format);
+    logger_add_view(textlog, vcd_view);
+    on_off(database, vars[i].event, is_on, 1);
+  }
+
+  socket = connect_to(ip, port);
+
+  /* activate selected traces */
+  activate_traces(socket, number_of_events, is_on);
+
+  vcd_init(output_filename);
+  vcd_write_header(vars, nvars);
+
+  /* exit on ctrl+c and ctrl+z */
+  if (signal(SIGQUIT, force_stop) == SIG_ERR) abort();
+  if (signal(SIGINT, force_stop) == SIG_ERR) abort();
+  if (signal(SIGTSTP, force_stop) == SIG_ERR) abort();
+
+  /* read messages */
+  while (run) {
+    char v[T_BUFFER_MAX];
+    event e;
+    e = get_event(socket, v, database);
+    if (e.type == -1) { printf("disconnected? let's quit gently\n"); break; }
+    handle_event(h, e);
+  }
+
+  vcd_end();
+
+  return 0;
+}
diff --git a/common/utils/asn1_conversions.h b/common/utils/asn1_conversions.h
index 8eed4faaad5da20430ce39a27093c2e22ab04f6e..050c065d9d548bf5874c6d9fb58f4d80f2e09b66 100644
--- a/common/utils/asn1_conversions.h
+++ b/common/utils/asn1_conversions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/assertions.h b/common/utils/assertions.h
index 18675fb8fb687ef6edb6ba801841ecd1240a14a7..f6728caf7bb5ee213b4f1c8b175c911d92a8962d 100644
--- a/common/utils/assertions.h
+++ b/common/utils/assertions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/hashtable/hashtable.c b/common/utils/hashtable/hashtable.c
index b82affb4a3ed377727fa0b1ee535a09c87d9f4c7..6322b1dea634b7063f6057e339b8fbde2fe7b652 100644
--- a/common/utils/hashtable/hashtable.c
+++ b/common/utils/hashtable/hashtable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under 
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.  
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/hashtable/hashtable.h b/common/utils/hashtable/hashtable.h
index 2fd08e6625da179fe9d866ba2cbba342fb29090e..62002fb60f89c738d8d2a941d9cd31fac9e268f5 100644
--- a/common/utils/hashtable/hashtable.h
+++ b/common/utils/hashtable/hashtable.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under 
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.  
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/hashtable/obj_hashtable.c b/common/utils/hashtable/obj_hashtable.c
index caae391ae2097d92f7606547b1f0d11b2b6f9297..7fb68d16817993c86e75f211e2b0b2c257039e19 100644
--- a/common/utils/hashtable/obj_hashtable.c
+++ b/common/utils/hashtable/obj_hashtable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under 
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.  
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/hashtable/obj_hashtable.h b/common/utils/hashtable/obj_hashtable.h
index 45f97a6baab7d9eb8ffc2e76b89394d298702eef..a43d472a471377d602c0cdf002db7465ae7a413f 100644
--- a/common/utils/hashtable/obj_hashtable.h
+++ b/common/utils/hashtable/obj_hashtable.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under 
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.  
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/assertions.h b/common/utils/itti/assertions.h
index a411bd539728b93cb563ad39843f5eefbf5bd88e..bb6c27cbab358db0b8ed54478beb70d4110ce8ed 100644
--- a/common/utils/itti/assertions.h
+++ b/common/utils/itti/assertions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/backtrace.c b/common/utils/itti/backtrace.c
index ed7849ab4d394054d370d6b8f7170a3d800d7838..889e0d84d148f3694ce363a2f74ac33065cbeb26 100644
--- a/common/utils/itti/backtrace.c
+++ b/common/utils/itti/backtrace.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/backtrace.h b/common/utils/itti/backtrace.h
index 701bc0ab0e171a24f251d063421530585eb333f0..9a77767cf4a11ede13185e9140b475e2f404adba 100644
--- a/common/utils/itti/backtrace.h
+++ b/common/utils/itti/backtrace.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c
index 193b2c13fbf4f784225bbb5d9f5ca9fc56f32c29..6c9a95732bccddc1d96f19f6529e4f2d980554fe 100644
--- a/common/utils/itti/intertask_interface.c
+++ b/common/utils/itti/intertask_interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface.h b/common/utils/itti/intertask_interface.h
index a2137c119d3ad0ead24589d40c51670e4eb9634d..191d9199c33b58d9bb67a7879e21d30e296f9928 100644
--- a/common/utils/itti/intertask_interface.h
+++ b/common/utils/itti/intertask_interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface_dump.c b/common/utils/itti/intertask_interface_dump.c
index 8f08475c6a06303f194dffd17789ad5b3cffcfcf..a06b97c63b36eea50583a43ffd20e53a70058f3c 100644
--- a/common/utils/itti/intertask_interface_dump.c
+++ b/common/utils/itti/intertask_interface_dump.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface_dump.h b/common/utils/itti/intertask_interface_dump.h
index 14b3b4dbb6bcccfb683efba1e73ed64d2167b4b6..a34dcecbf67d806346e4cb7dd4ff508e81ac2de3 100644
--- a/common/utils/itti/intertask_interface_dump.h
+++ b/common/utils/itti/intertask_interface_dump.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface_init.h b/common/utils/itti/intertask_interface_init.h
index df87202955b6e6766dc14f8c29affe77e33d3cc2..333b0653d72169d24218c2bc5675d533283c5b15 100644
--- a/common/utils/itti/intertask_interface_init.h
+++ b/common/utils/itti/intertask_interface_init.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_interface_types.h b/common/utils/itti/intertask_interface_types.h
index d7386b0b73b5d8ef0d19ed4a495a0496f1f89b34..af1b4e9aa98931b52de2cea454f720e13748171a 100644
--- a/common/utils/itti/intertask_interface_types.h
+++ b/common/utils/itti/intertask_interface_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_messages_def.h b/common/utils/itti/intertask_messages_def.h
index d75f927a92476e4e4e723e1a63c1c8f865def4cf..57c344c8132b5b4f216ab4c5e05f25c48c8ea73e 100644
--- a/common/utils/itti/intertask_messages_def.h
+++ b/common/utils/itti/intertask_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/intertask_messages_types.h b/common/utils/itti/intertask_messages_types.h
index 2aa8545ee0ceb23e687e149a548e5638e235f2d3..145f57648ffcd62288d501ac49182652465ea72d 100644
--- a/common/utils/itti/intertask_messages_types.h
+++ b/common/utils/itti/intertask_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/itti_types.h b/common/utils/itti/itti_types.h
index e5bbf448308cbaba0976c63bb819c81f38882274..7f01901712346275b778fd75dd59889b0edccad8 100644
--- a/common/utils/itti/itti_types.h
+++ b/common/utils/itti/itti_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/memory_pools.c b/common/utils/itti/memory_pools.c
index 955e29440ac24f96dcf37dc24c3b981a985762ca..23c53b71ae210400cb10b0d171d90c3bc935f2b2 100644
--- a/common/utils/itti/memory_pools.c
+++ b/common/utils/itti/memory_pools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/memory_pools.h b/common/utils/itti/memory_pools.h
index 6c6e5a5d80cc28b974b8734fc91c457929849022..1c1997f7f22590308d0b6d53dbe7c1005b5c2fb4 100644
--- a/common/utils/itti/memory_pools.h
+++ b/common/utils/itti/memory_pools.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/messages_def.h b/common/utils/itti/messages_def.h
index 0366cf8f509643ac96d5796b9208163b0c9af506..f312669848120a2ea022a4ac50ad172471e51ce4 100644
--- a/common/utils/itti/messages_def.h
+++ b/common/utils/itti/messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/messages_types.h b/common/utils/itti/messages_types.h
index 0fbdf29ecc1ffa5b3bf407a5f08a2a1924906b4d..d390bf0159c18ab58767e44f467fe2b4019c667b 100644
--- a/common/utils/itti/messages_types.h
+++ b/common/utils/itti/messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c
index e495e301f86c571608df6fc457510104a9a60809..9767ba3f67b01a29166c07ce86bae598317905e0 100644
--- a/common/utils/itti/signals.c
+++ b/common/utils/itti/signals.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/signals.h b/common/utils/itti/signals.h
index efb25f34d8b7c25cddf1681ab954e4b3b387eea9..5277e216a3d4a19230991d2f8eafdb86abfd2d16 100644
--- a/common/utils/itti/signals.h
+++ b/common/utils/itti/signals.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/tasks_def.h b/common/utils/itti/tasks_def.h
index 18ac6ac5c9046f1a4928ab66b51e731739bec74f..d54d09a26aee84822bb4714ab0857869682f1da5 100644
--- a/common/utils/itti/tasks_def.h
+++ b/common/utils/itti/tasks_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/timer.c b/common/utils/itti/timer.c
index c180cfcda40d8fea03c785061530ab0d7eabc983..6327aeacfb675140bda39f76feed86ddc2541c18 100644
--- a/common/utils/itti/timer.c
+++ b/common/utils/itti/timer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/timer.h b/common/utils/itti/timer.h
index 22d1d75d4672fe80f6bb4ceb6267870ec9108c85..4f568a348c5755802f7fadb018d8b2790935b608 100644
--- a/common/utils/itti/timer.h
+++ b/common/utils/itti/timer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/timer_messages_def.h b/common/utils/itti/timer_messages_def.h
index 4cef672c13bb1244bdf257b6187d53888ca4beb1..761034730d236136692f3d879aa44f252acc205c 100644
--- a/common/utils/itti/timer_messages_def.h
+++ b/common/utils/itti/timer_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti/timer_messages_types.h b/common/utils/itti/timer_messages_types.h
index 4abf34605d0da23e09c2f4a4280338bce2301f59..0d06e3eebfd15c33e9fe9555b0ba7fb5c6253fb0 100644
--- a/common/utils/itti/timer_messages_types.h
+++ b/common/utils/itti/timer_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/common/itti_types.h b/common/utils/itti_analyzer/common/itti_types.h
index a4234583497d438ba1d32e49f0525feb2c223308..d405e48cbdc3bf90bc4d5a4d8e1dfb7b9e1f8ad4 100644
--- a/common/utils/itti_analyzer/common/itti_types.h
+++ b/common/utils/itti_analyzer/common/itti_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/common/logs.h b/common/utils/itti_analyzer/common/logs.h
index 8d5c4876ff245d983026a147f630841381295d24..bd901cc3949b36e9bf20e4c20228b92636550522 100644
--- a/common/utils/itti_analyzer/common/logs.h
+++ b/common/utils/itti_analyzer/common/logs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/common/rc.h b/common/utils/itti_analyzer/common/rc.h
index 9643d712ebc388c75f8c27702ea7ce74a0d16ce4..50786f460fdbb93533801ce423cf574bcbfd4e38 100644
--- a/common/utils/itti_analyzer/common/rc.h
+++ b/common/utils/itti_analyzer/common/rc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/itti_analyzer.c b/common/utils/itti_analyzer/itti_analyzer.c
index e19b3757986eb8218c8a69a097beced890018472..d87deb46e2f5a1dcad5c58e0133cdf57927e59a1 100644
--- a/common/utils/itti_analyzer/itti_analyzer.c
+++ b/common/utils/itti_analyzer/itti_analyzer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/buffers.c b/common/utils/itti_analyzer/libbuffers/buffers.c
index a2d526d584bfc1ea6abf886d335b702d9285a84e..870c9cd40aac19e3aa0b7f5f9ddf3dd22bb98d61 100644
--- a/common/utils/itti_analyzer/libbuffers/buffers.c
+++ b/common/utils/itti_analyzer/libbuffers/buffers.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/buffers.h b/common/utils/itti_analyzer/libbuffers/buffers.h
index 7dd59b8067c53084d251f4dec1722d72ec5776e5..34ecb355ab351529ec59702c2d011a7dfe3d5e54 100644
--- a/common/utils/itti_analyzer/libbuffers/buffers.h
+++ b/common/utils/itti_analyzer/libbuffers/buffers.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/file.c b/common/utils/itti_analyzer/libbuffers/file.c
index ea429a66d14070401c05b94e5d90d5d8f06968cd..291bf2d2163f432894a60b8b5ddcb7e610ef5704 100644
--- a/common/utils/itti_analyzer/libbuffers/file.c
+++ b/common/utils/itti_analyzer/libbuffers/file.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/file.h b/common/utils/itti_analyzer/libbuffers/file.h
index 36912a69ba7e4a00bc5e0186e90506560a1d2c4d..be0fa6ba2d07e6616be2c32321c32cbef1411b1f 100644
--- a/common/utils/itti_analyzer/libbuffers/file.h
+++ b/common/utils/itti_analyzer/libbuffers/file.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/socket.c b/common/utils/itti_analyzer/libbuffers/socket.c
index 0e1ad49e49982910dd30a700298f6024366ea06d..f732af70ec532ca65a5aa3d68da258e652c3edf8 100644
--- a/common/utils/itti_analyzer/libbuffers/socket.c
+++ b/common/utils/itti_analyzer/libbuffers/socket.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libbuffers/socket.h b/common/utils/itti_analyzer/libbuffers/socket.h
index d64fd46b91ff20ba6bdce003576fcc8eae978c44..8c2be2243e228d9c7ea56003cf59a9e382e601cb 100644
--- a/common/utils/itti_analyzer/libbuffers/socket.h
+++ b/common/utils/itti_analyzer/libbuffers/socket.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/array_type.c b/common/utils/itti_analyzer/libparser/array_type.c
index 028835e9d29612b5129628c4c326d30d37ab92c9..1d9f7412815605ade54315e98269908324500ce9 100644
--- a/common/utils/itti_analyzer/libparser/array_type.c
+++ b/common/utils/itti_analyzer/libparser/array_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/array_type.h b/common/utils/itti_analyzer/libparser/array_type.h
index 9e13dec282d3ee02f03232b2ef5cfe21b5eb9b22..b336934dbb94978b78be2440f57c1e446d0ab5d8 100644
--- a/common/utils/itti_analyzer/libparser/array_type.h
+++ b/common/utils/itti_analyzer/libparser/array_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/enum_type.c b/common/utils/itti_analyzer/libparser/enum_type.c
index a00f6545564de48bcacf3e17b3bbdc728e9d32b7..dbc99095bcd9a84ba3206fa05957ad4e0ec3d28d 100644
--- a/common/utils/itti_analyzer/libparser/enum_type.c
+++ b/common/utils/itti_analyzer/libparser/enum_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/enum_type.h b/common/utils/itti_analyzer/libparser/enum_type.h
index 9faa21b79a8ccf6c111b2cc56d9aa7c40842a819..4538829e78366bad075231ae19617555e6563e8c 100644
--- a/common/utils/itti_analyzer/libparser/enum_type.h
+++ b/common/utils/itti_analyzer/libparser/enum_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/enum_value_type.c b/common/utils/itti_analyzer/libparser/enum_value_type.c
index 8035acb257f9d11c48f8601bab3f8f73b7f01a2d..801317daafcba2d6d990e6007f188bef4361ed84 100644
--- a/common/utils/itti_analyzer/libparser/enum_value_type.c
+++ b/common/utils/itti_analyzer/libparser/enum_value_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/enum_value_type.h b/common/utils/itti_analyzer/libparser/enum_value_type.h
index d30e3a67069a28f802b6a018cfafb56bf4610569..997e6cc3fe91f9b124d53d32dae17c0cd2f650a8 100644
--- a/common/utils/itti_analyzer/libparser/enum_value_type.h
+++ b/common/utils/itti_analyzer/libparser/enum_value_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/field_type.c b/common/utils/itti_analyzer/libparser/field_type.c
index 9415ad0effe9909f99e63c97d2ab49fbfba8cc02..b64d3bd0c17397422a8b6616ab7ecfc8e41fb41c 100644
--- a/common/utils/itti_analyzer/libparser/field_type.c
+++ b/common/utils/itti_analyzer/libparser/field_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/field_type.h b/common/utils/itti_analyzer/libparser/field_type.h
index f9bdd78cb768ed3facf107b298348bdda98e8360..329e90c3be7a92f0df5fe2a5e77eb1013db7fbca 100644
--- a/common/utils/itti_analyzer/libparser/field_type.h
+++ b/common/utils/itti_analyzer/libparser/field_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/file_type.c b/common/utils/itti_analyzer/libparser/file_type.c
index 3e9bf697a6161b82c2dc67ef5c9aa8da32ce4cd9..04d66b7a0869fcd894bd7110f30e1fc2361cb948 100644
--- a/common/utils/itti_analyzer/libparser/file_type.c
+++ b/common/utils/itti_analyzer/libparser/file_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/file_type.h b/common/utils/itti_analyzer/libparser/file_type.h
index 7142f30d518f0dec247c72f304c7ea3f4dbd167f..34ebea6745e226d167946cd57427bd32922f21e5 100644
--- a/common/utils/itti_analyzer/libparser/file_type.h
+++ b/common/utils/itti_analyzer/libparser/file_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/fundamental_type.c b/common/utils/itti_analyzer/libparser/fundamental_type.c
index 9383431c84ff9bfb3ecaa3a037e3047b9d0178ac..92dd1c75cb9b1ffef3a3777c890dbf794a2c89d1 100644
--- a/common/utils/itti_analyzer/libparser/fundamental_type.c
+++ b/common/utils/itti_analyzer/libparser/fundamental_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/fundamental_type.h b/common/utils/itti_analyzer/libparser/fundamental_type.h
index 94e939e117870dd2fc62cfbfd133cba17a6839c1..07ceb3b9ed3cdfad9191c307fd0221a12bb9cd1a 100644
--- a/common/utils/itti_analyzer/libparser/fundamental_type.h
+++ b/common/utils/itti_analyzer/libparser/fundamental_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/intertask_contexts.h b/common/utils/itti_analyzer/libparser/intertask_contexts.h
index a490064612730a6d0876fee5b6c5fbe150c6b8b0..cfe8f59402b8015ac4d12b980fcdbff92010b29d 100644
--- a/common/utils/itti_analyzer/libparser/intertask_contexts.h
+++ b/common/utils/itti_analyzer/libparser/intertask_contexts.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/pointer_type.c b/common/utils/itti_analyzer/libparser/pointer_type.c
index 8b263f64a9e38ac90143340813c83ccb2e92a75b..e4571f9f48048f87f41838f39e64facbd369358a 100644
--- a/common/utils/itti_analyzer/libparser/pointer_type.c
+++ b/common/utils/itti_analyzer/libparser/pointer_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/pointer_type.h b/common/utils/itti_analyzer/libparser/pointer_type.h
index 6f4f644e735f2c46680ec7163ba48565e1195d4c..be2b6cc33cc48d4552f7d8bf0328cd4ed295b333 100644
--- a/common/utils/itti_analyzer/libparser/pointer_type.h
+++ b/common/utils/itti_analyzer/libparser/pointer_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/reference_type.c b/common/utils/itti_analyzer/libparser/reference_type.c
index 7cd3b0a5095a6307230b455e3cc4800df2a6847b..8d0fec4e614381ff13159cfa11e7cc557228b111 100644
--- a/common/utils/itti_analyzer/libparser/reference_type.c
+++ b/common/utils/itti_analyzer/libparser/reference_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/reference_type.h b/common/utils/itti_analyzer/libparser/reference_type.h
index 5f9d0a0b889c5eccea69eaa780e8d9338a73c1b0..da56e9f942d5ed48ea5121644c96190fa9996f8c 100644
--- a/common/utils/itti_analyzer/libparser/reference_type.h
+++ b/common/utils/itti_analyzer/libparser/reference_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/struct_type.c b/common/utils/itti_analyzer/libparser/struct_type.c
index 758851269d3012384944de54d3f538fba93848d0..09d5280ea55c16df171ed183b842b7ac7b461904 100644
--- a/common/utils/itti_analyzer/libparser/struct_type.c
+++ b/common/utils/itti_analyzer/libparser/struct_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/struct_type.h b/common/utils/itti_analyzer/libparser/struct_type.h
index 1efa4ef3245f64e82a6ef12e6728a0025c9fd4b6..29d4113b6f07b3782a48bea7f6ba587e19ddf012 100644
--- a/common/utils/itti_analyzer/libparser/struct_type.h
+++ b/common/utils/itti_analyzer/libparser/struct_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/typedef_type.c b/common/utils/itti_analyzer/libparser/typedef_type.c
index 6c7246b47c89bdf1dc843bce7c099b94d9d92916..e5cee1a1cfdac32fd094b23c38f5830c2de86177 100644
--- a/common/utils/itti_analyzer/libparser/typedef_type.c
+++ b/common/utils/itti_analyzer/libparser/typedef_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/typedef_type.h b/common/utils/itti_analyzer/libparser/typedef_type.h
index cad3436a636f4d0ffd044dea704beb71e16b988f..b5710dbfcba3c28f48e77b79a87c2bfe14dd6fd2 100644
--- a/common/utils/itti_analyzer/libparser/typedef_type.h
+++ b/common/utils/itti_analyzer/libparser/typedef_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/types.c b/common/utils/itti_analyzer/libparser/types.c
index 6f36089a7b19830e6d7afecbb9fc635b0329a143..406db5249cd536c757089771867ab67530e04d43 100644
--- a/common/utils/itti_analyzer/libparser/types.c
+++ b/common/utils/itti_analyzer/libparser/types.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/types.h b/common/utils/itti_analyzer/libparser/types.h
index 0f7812b84b84d1fd291c18ff7d568cca418e9e14..c449c445fd505d86bf60b7a7a75a7aed9fe9a7b1 100644
--- a/common/utils/itti_analyzer/libparser/types.h
+++ b/common/utils/itti_analyzer/libparser/types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/union_type.c b/common/utils/itti_analyzer/libparser/union_type.c
index f2518685c61a2cfe46ca09c0968735e84c953dc2..f38b7a1ccca60ac4af40fd21feaa49cddd954c28 100644
--- a/common/utils/itti_analyzer/libparser/union_type.c
+++ b/common/utils/itti_analyzer/libparser/union_type.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/union_type.h b/common/utils/itti_analyzer/libparser/union_type.h
index e4552bf7701dcd16f8a3c3439f2b4edce69f8d77..ed2dca73ba9bbae5e95e5e5e5010a2b4be809190 100644
--- a/common/utils/itti_analyzer/libparser/union_type.h
+++ b/common/utils/itti_analyzer/libparser/union_type.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/xml_parse.c b/common/utils/itti_analyzer/libparser/xml_parse.c
index 651fcde2f7157bca40b5a71ed0c54fb47b867689..352b10d6161fdb91606b3963d75119d2bbdc6d0d 100644
--- a/common/utils/itti_analyzer/libparser/xml_parse.c
+++ b/common/utils/itti_analyzer/libparser/xml_parse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libparser/xml_parse.h b/common/utils/itti_analyzer/libparser/xml_parse.h
index 968fb96b68d50a3ceef98a69c33436b5a6cde1e5..f9624bc06b69cb2d91f43d01751d53c76cbafd96 100644
--- a/common/utils/itti_analyzer/libparser/xml_parse.h
+++ b/common/utils/itti_analyzer/libparser/xml_parse.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libresolver/locate_root.c b/common/utils/itti_analyzer/libresolver/locate_root.c
index f78674108c25805414e0a465cdabe2188762d93a..dffd489944ca817e571b88489725b422e9fa9967 100644
--- a/common/utils/itti_analyzer/libresolver/locate_root.c
+++ b/common/utils/itti_analyzer/libresolver/locate_root.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libresolver/locate_root.h b/common/utils/itti_analyzer/libresolver/locate_root.h
index 0e952d8f599fd3a28a28dee86bcc2004a3caaf40..5cb2eb258872bd66bef980ca0218480dd7c849cb 100644
--- a/common/utils/itti_analyzer/libresolver/locate_root.h
+++ b/common/utils/itti_analyzer/libresolver/locate_root.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libresolver/resolvers.c b/common/utils/itti_analyzer/libresolver/resolvers.c
index 856a2123964eeb6cc995e476153e928d96ba0ba4..8702c08942704599c809ac1d34742aea855eaa4f 100644
--- a/common/utils/itti_analyzer/libresolver/resolvers.c
+++ b/common/utils/itti_analyzer/libresolver/resolvers.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libresolver/resolvers.h b/common/utils/itti_analyzer/libresolver/resolvers.h
index 4d8a5c08d1556ba41af5de7f1d2ebc4d331da38a..17e16462b4ae32aa24641ea549b65d17dd7a5a58 100644
--- a/common/utils/itti_analyzer/libresolver/resolvers.h
+++ b/common/utils/itti_analyzer/libresolver/resolvers.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c
index 3dd4218abc95cabb1cf546691a76f2a27b2d6223..6fc480e33387508531dc522470ca57c68fbb8309 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.c
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.h b/common/utils/itti_analyzer/libui/ui_callbacks.h
index e09abdbc7e6756ff9ffa5e78156daa6090d403b0..b3d4b31c601ec4dce136b26dbeec7628d6cf58fc 100644
--- a/common/utils/itti_analyzer/libui/ui_callbacks.h
+++ b/common/utils/itti_analyzer/libui/ui_callbacks.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c
index 38ab6ac909d47de97c39240cbb5f1c9e4c378fae..8a6321a538d12a5c4d34d0d1ab667428500da56f 100644
--- a/common/utils/itti_analyzer/libui/ui_filters.c
+++ b/common/utils/itti_analyzer/libui/ui_filters.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_filters.h b/common/utils/itti_analyzer/libui/ui_filters.h
index 575a46b80822f72c2fb00e8108d7b6285b5eaba1..16bb38834b10fc29f1d9aa10479242e918bac43d 100644
--- a/common/utils/itti_analyzer/libui/ui_filters.h
+++ b/common/utils/itti_analyzer/libui/ui_filters.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_interface.c b/common/utils/itti_analyzer/libui/ui_interface.c
index 4b8582ef97a4f5e3dab45d8df84ba23dd9c1719f..56139a8c6ba4bda1f6cbc2d56d1b891aad837fa9 100644
--- a/common/utils/itti_analyzer/libui/ui_interface.c
+++ b/common/utils/itti_analyzer/libui/ui_interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_interface.h b/common/utils/itti_analyzer/libui/ui_interface.h
index 7f219b68f7a13d2ebae26f4e78b58d4746bcb511..f77ec144d1b5f573ff0c2b4b50457c35de5b0320 100644
--- a/common/utils/itti_analyzer/libui/ui_interface.h
+++ b/common/utils/itti_analyzer/libui/ui_interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.c b/common/utils/itti_analyzer/libui/ui_main_screen.c
index 7ae2485cb79bb2ec57579963368ebae4dee35fbf..3d6ea266be1ce485a356adc85207a77ebb0e22cd 100644
--- a/common/utils/itti_analyzer/libui/ui_main_screen.c
+++ b/common/utils/itti_analyzer/libui/ui_main_screen.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.h b/common/utils/itti_analyzer/libui/ui_main_screen.h
index 98a38ebbde38b1ad5338882821c3a17760ccf2f0..0411d687bead751fc58baa998f66ec33357f06e2 100644
--- a/common/utils/itti_analyzer/libui/ui_main_screen.h
+++ b/common/utils/itti_analyzer/libui/ui_main_screen.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c
index da6b133a296eaf9c69fe6669bab76c3dd0ea918e..62b51b3b9f5ccfeee55ce9b3c06f001f7b5d8e21 100644
--- a/common/utils/itti_analyzer/libui/ui_menu_bar.c
+++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.h b/common/utils/itti_analyzer/libui/ui_menu_bar.h
index b66d4bf95a20a8e85bbc732fb0b5ceba2b3442ae..037dc5edca4445b380158f8322534a7c4d0347de 100644
--- a/common/utils/itti_analyzer/libui/ui_menu_bar.h
+++ b/common/utils/itti_analyzer/libui/ui_menu_bar.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notebook.c b/common/utils/itti_analyzer/libui/ui_notebook.c
index f04cbb77aba830b14b28e077b33d3e3603d57bc9..93a439335f22cd08a5b5562ad56c4d48d7991bc4 100644
--- a/common/utils/itti_analyzer/libui/ui_notebook.c
+++ b/common/utils/itti_analyzer/libui/ui_notebook.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notebook.h b/common/utils/itti_analyzer/libui/ui_notebook.h
index 2b17be16a733b4c970ef353344d11f983c19270b..6f87856e8470381c75e2bda0a7b17730217319de 100644
--- a/common/utils/itti_analyzer/libui/ui_notebook.h
+++ b/common/utils/itti_analyzer/libui/ui_notebook.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.c b/common/utils/itti_analyzer/libui/ui_notif_dlg.c
index cf1f1b5eecf20325bc3b1953b1a093583a614e14..4be4aa52cf847d41b000aa15d0d6c329f643572e 100644
--- a/common/utils/itti_analyzer/libui/ui_notif_dlg.c
+++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notif_dlg.h b/common/utils/itti_analyzer/libui/ui_notif_dlg.h
index 51856e0487e5782e3ceb9da320e36b147b785c40..361ec818506edf7b32cd45c023b8055cce07b643 100644
--- a/common/utils/itti_analyzer/libui/ui_notif_dlg.h
+++ b/common/utils/itti_analyzer/libui/ui_notif_dlg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c
index 99d6b8bc1cbcd37f58fcfad29058f8b04b9ca05a..6e7897c85081f766b454fbd0c7f82ef3604163ba 100644
--- a/common/utils/itti_analyzer/libui/ui_notifications.c
+++ b/common/utils/itti_analyzer/libui/ui_notifications.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_notifications.h b/common/utils/itti_analyzer/libui/ui_notifications.h
index 90f4c5909de570c4012533467ef57b4884920363..33ef0ff5c0918ec4d3f97b38260311f2efae4233 100644
--- a/common/utils/itti_analyzer/libui/ui_notifications.h
+++ b/common/utils/itti_analyzer/libui/ui_notifications.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c
index dcf2acd8b2157de1914c738df5ed9754108efeff..859eb66b03ced23cd54731362bd0150cee21945e 100644
--- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c
+++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h
index 936d3ee27d1aa970def4127dc2fa21eb935a4be9..a5ccf6a9eb46b879c3a93dfd52cbe72c0e6906c5 100644
--- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h
+++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c
index 0de6bde945c8a5f3396dead76895a2055833cb51..0396e248191af2cb6137fd6851e033e7b69a97c6 100644
--- a/common/utils/itti_analyzer/libui/ui_tree_view.c
+++ b/common/utils/itti_analyzer/libui/ui_tree_view.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.h b/common/utils/itti_analyzer/libui/ui_tree_view.h
index d1eac10c6078d78b5a869e07a4897cebddae0c1f..88ab2fce71ba799613ba62ae6463569d77744e2d 100644
--- a/common/utils/itti_analyzer/libui/ui_tree_view.h
+++ b/common/utils/itti_analyzer/libui/ui_tree_view.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c
index 7de2a47f981f97aa12cefc7da5eb67e1c175c4d1..307eeb30a51c8a1216d57f87f4c89a327a93d166 100644
--- a/common/utils/msc/msc.c
+++ b/common/utils/msc/msc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h
index eccff7951814943ec86e8b3f31231d27835d3da1..4493a5239a40f2c41aa79461443c8bb51b9737d9 100644
--- a/common/utils/msc/msc.h
+++ b/common/utils/msc/msc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/system.c b/common/utils/system.c
index 52fb950e37f2179c9c4de895c1ab9dd456f93230..dcec681e2dcf2596b78352560672439e7bba58ee 100644
--- a/common/utils/system.c
+++ b/common/utils/system.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/common/utils/system.h b/common/utils/system.h
index 784c15fc9a045d6b83e5136fe00122a65c7789b6..658c17adc1a476ce68c03d1510623c87c382ab29 100644
--- a/common/utils/system.h
+++ b/common/utils/system.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/nfapi/nfapi.c b/nfapi/nfapi.c
new file mode 100644
index 0000000000000000000000000000000000000000..1c4e917e65baf0d08bfeba0bdebc3f6de9f4646b
--- /dev/null
+++ b/nfapi/nfapi.c
@@ -0,0 +1,176 @@
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <ifaddrs.h>
+#include <netdb.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#if 0
+#if 0
+//DJP
+#include <mutex>
+#include <queue>
+#include <list>
+#endif
+
+//DJP struct phy_pdu
+typedef struct
+{
+#if 0
+	phy_pdu() : buffer_len(1500), buffer(0), len(0)
+	{
+		buffer = (char*) malloc(buffer_len);
+	}
+	
+	virtual ~phy_pdu()
+	{
+		free(buffer);
+	}
+#endif
+
+	unsigned buffer_len;
+	char* buffer;
+	unsigned len;
+} phy_pdu;
+
+// DJP class fapi_private 
+typedef struct
+{
+		//std::mutex mutex;
+		//std::queue<phy_pdu*> rx_buffer;
+
+		//std::queue<phy_pdu*> free_store;
+#if 0
+	public:
+
+		fapi_private()
+			: byte_count(0), tick(0), first_dl_config(false)
+		{
+		}
+
+		phy_pdu* allocate_phy_pdu()
+		{
+			phy_pdu* pdu = 0;
+			mutex.lock();
+			if(free_store.empty())
+			{
+				pdu = new phy_pdu();
+			}
+			else
+			{
+				pdu = free_store.front();
+				free_store.pop();
+			}
+			mutex.unlock();
+			return pdu;
+		}
+
+		void release_phy_pdu(phy_pdu* pdu)
+		{
+			mutex.lock();
+			free_store.push(pdu);
+			mutex.unlock();
+		}
+
+		bool rx_buffer_empty()
+		{
+			bool empty;
+			mutex.lock();
+			empty = rx_buffer.empty();
+			mutex.unlock();
+
+			return empty;
+		}
+		
+
+		void push_rx_buffer(phy_pdu* buff)
+		{
+			mutex.lock();
+			rx_buffer.push(buff);
+			mutex.unlock();
+		}
+
+		phy_pdu* pop_rx_buffer()
+		{
+			phy_pdu* buff = 0;
+			mutex.lock();
+			if(!rx_buffer.empty())
+			{
+				buff = rx_buffer.front();
+				rx_buffer.pop();
+			}
+			mutex.unlock();
+			return buff;
+		}
+#endif
+
+		uint32_t byte_count;
+		uint32_t tick;
+		uint8_t first_dl_config;
+
+} fapi_private ;
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+	typedef struct fapi_internal
+	{
+		fapi_t _public;
+
+		fapi_cb_t callbacks;
+
+		uint8_t state;
+		fapi_config_t config;
+
+		int rx_sock;
+		int tx_sock;
+		struct sockaddr_in tx_addr;
+
+		uint32_t tx_byte_count;
+		uint32_t tick;
+		
+		fapi_private* fapi;
+
+	} fapi_internal_t;
+#if defined(__cplusplus)
+}
+#endif
+#endif
+
+void set_thread_priority(int priority)
+{
+	//printf("%s(priority:%d)\n", __FUNCTION__, priority);
+	
+	pthread_attr_t ptAttr;
+	
+	struct sched_param schedParam;
+	schedParam.__sched_priority = priority; //79;
+	if(sched_setscheduler(0, SCHED_RR, &schedParam) != 0)
+	{
+		printf("Failed to set scheduler to SCHED_RR\n");
+	}
+
+	if(pthread_attr_setschedpolicy(&ptAttr, SCHED_RR) != 0)
+	{
+		printf("Failed to set pthread sched policy SCHED_RR\n");
+	}
+
+	pthread_attr_setinheritsched(&ptAttr, PTHREAD_EXPLICIT_SCHED);
+
+	struct sched_param thread_params;
+	thread_params.sched_priority = 20;
+	if(pthread_attr_setschedparam(&ptAttr, &thread_params) != 0)
+	{
+		printf("failed to set sched param\n");
+	}
+}
diff --git a/nfapi/nfapi_pnf.c b/nfapi/nfapi_pnf.c
new file mode 100644
index 0000000000000000000000000000000000000000..e1a62b0c07f01ec323ada59f9e012a1d29b7c951
--- /dev/null
+++ b/nfapi/nfapi_pnf.c
@@ -0,0 +1,1899 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "debug.h"
+#include "nfapi_pnf_interface.h"
+#include "nfapi.h"
+#include "nfapi_pnf.h"
+#include "common/ran_context.h"
+//#include "openair1/PHY/vars.h"
+extern RAN_CONTEXT_t RC;
+
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+#include <assert.h>
+#include <arpa/inet.h>
+#include <pthread.h>
+#include <errno.h>
+
+#include <vendor_ext.h>
+#include "fapi_stub.h"
+//#include "fapi_l1.h"
+#include "UTIL/LOG/log.h"
+
+#define NUM_P5_PHY 2
+
+#define _GNU_SOURCE
+
+extern void phy_init_RU(RU_t*);
+extern int config_sync_var;
+
+extern pthread_cond_t nfapi_sync_cond;
+extern pthread_mutex_t nfapi_sync_mutex;
+extern int nfapi_sync_var;
+
+extern int sync_var;
+
+extern void init_eNB_afterRU(void);
+extern void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB, eNB_rxtx_proc_t *proc, nfapi_dl_config_request_pdu_t *dl_config_pdu);
+extern void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, nfapi_ul_config_request_pdu_t *ul_config_pdu, uint16_t frame,uint8_t subframe,uint8_t srs_present);
+extern void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,  nfapi_dl_config_request_pdu_t *dl_config_pdu, uint8_t codeword_index, uint8_t *sdu);
+extern void handle_nfapi_hi_dci0_dci_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu);
+extern void handle_nfapi_hi_dci0_hi_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu);
+extern void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, nfapi_dl_config_request_pdu_t *dl_config_pdu, uint8_t *sdu);
+
+extern uint8_t  nfapi_mode;
+
+nfapi_tx_request_pdu_t* tx_request_pdu[1023][10][10]; // [frame][subframe][max_num_pdus]
+
+
+uint16_t phy_antenna_capability_values[] = { 1, 2, 4, 8, 16 };
+
+nfapi_pnf_param_response_t g_pnf_param_resp;
+
+
+nfapi_pnf_p7_config_t *p7_config_g = NULL;
+
+void* pnf_allocate(size_t size)
+{
+  //DJP
+  //return (void*)memory_pool::allocate(size);
+  return malloc(size);
+}
+
+void pnf_deallocate(void* ptr)
+{
+  //DJP
+  //memory_pool::deallocate((uint8_t*)ptr);
+  free(ptr);
+}
+
+
+//class udp_data
+//DJP
+typedef struct 
+{
+  //public:
+  uint8_t enabled;
+  uint32_t rx_port;
+  uint32_t tx_port;
+  //std::string tx_addr;
+  char tx_addr[80];
+}udp_data;
+
+//class phy_info
+//DJP
+typedef struct 
+{
+#if 0
+  public:
+
+    phy_info()
+      : first_subframe_ind(0), fapi(0),
+      dl_ues_per_subframe(0), ul_ues_per_subframe(0), 
+      timing_window(0), timing_info_mode(0), timing_info_period(0)
+  {
+    index = 0;
+    id = 0;
+
+    local_port = 0;
+    remote_addr = 0;
+    remote_port = 0;
+
+    duplex_mode = 0;
+    dl_channel_bw_support = 0;
+    ul_channel_bw_support = 0;
+    num_dl_layers_supported = 0;
+    num_ul_layers_supported = 0;
+    release_supported = 0;
+    nmm_modes_supported = 0;
+  }
+#endif
+
+    uint16_t index;
+    uint16_t id;
+    //std::vector<uint8_t> rfs;
+    //std::vector<uint8_t> excluded_rfs;
+    uint8_t rfs[2];
+    uint8_t excluded_rfs[2];
+
+    udp_data udp;
+
+    //std::string local_addr;
+    char local_addr[80];
+    int local_port;
+
+    char* remote_addr;
+    int remote_port;
+
+    uint8_t duplex_mode;
+    uint16_t dl_channel_bw_support;
+    uint16_t ul_channel_bw_support;
+    uint8_t num_dl_layers_supported;
+    uint8_t num_ul_layers_supported;
+    uint16_t release_supported;
+    uint8_t nmm_modes_supported;
+
+    uint8_t dl_ues_per_subframe;
+    uint8_t ul_ues_per_subframe;
+
+    uint8_t first_subframe_ind;
+
+    // timing information recevied from the vnf
+    uint8_t timing_window;
+    uint8_t timing_info_mode;
+    uint8_t timing_info_period;
+
+    //fapi_t* fapi;
+
+}phy_info;
+
+//class rf_info
+//DJP
+typedef struct 
+{
+  //public:
+  uint16_t index;
+  uint16_t band;
+  int16_t max_transmit_power;
+  int16_t min_transmit_power;
+  uint8_t num_antennas_supported;
+  uint32_t min_downlink_frequency;
+  uint32_t max_downlink_frequency;
+  uint32_t max_uplink_frequency;
+  uint32_t min_uplink_frequency;
+}rf_info;
+
+
+//class pnf_info
+//DJP
+typedef struct 
+{
+#if 0
+  public:
+
+    pnf_info() 
+      : release(13), wireshark_test_mode(0),
+      max_total_power(0), oui(0)
+
+  {
+    release = 0;
+
+    sync_mode = 0;
+    location_mode = 0;
+    dl_config_timing = 0;
+    ul_config_timing = 0;
+    tx_timing = 0;
+    hi_dci0_timing = 0;
+
+    max_phys = 0;
+    max_total_bw = 0;
+    max_total_dl_layers = 0;
+    max_total_ul_layers = 0;
+    shared_bands = 0;
+    shared_pa = 0;
+
+  }
+#endif
+
+    int release;
+    //DJPstd::vector<phy_info> phys;
+    //std::vector<rf_info> rfs;
+    phy_info phys[2];
+    rf_info rfs[2];
+
+    uint8_t sync_mode;
+    uint8_t location_mode;
+    uint8_t location_coordinates[6];
+    uint32_t dl_config_timing;
+    uint32_t ul_config_timing;
+    uint32_t tx_timing;
+    uint32_t hi_dci0_timing;
+
+    uint16_t max_phys;
+    uint16_t max_total_bw;
+    uint16_t max_total_dl_layers;
+    uint16_t max_total_ul_layers;
+    uint8_t shared_bands;
+    uint8_t shared_pa;
+    int16_t max_total_power;
+    uint8_t oui;
+
+    uint8_t wireshark_test_mode;
+
+}pnf_info;
+
+// DJP struct pnf_phy_user_data_t
+typedef struct 
+{
+  uint16_t phy_id;
+  nfapi_pnf_config_t* config;
+  phy_info* phy;
+  nfapi_pnf_p7_config_t* p7_config;
+}pnf_phy_user_data_t;
+
+static pnf_info pnf;
+static pthread_t pnf_start_pthread;
+
+
+extern void nfapi_log(char *file, char *func, int line, int comp, int level, const char* format, va_list args);
+
+void pnf_nfapi_trace(nfapi_trace_level_t nfapi_level, const char* message, ...)
+{
+#if 1
+
+  va_list    args;
+  int oai_level;
+
+  if (nfapi_level==NFAPI_TRACE_ERROR)
+  {
+    oai_level = LOG_ERR;
+  }
+  else if (nfapi_level==NFAPI_TRACE_WARN)
+  {
+    oai_level = LOG_WARNING;
+  }
+  else if (nfapi_level==NFAPI_TRACE_NOTE)
+  {
+    oai_level = LOG_INFO;
+  }
+  else if (nfapi_level==NFAPI_TRACE_INFO)
+  {
+    oai_level = LOG_INFO;
+  }
+  else
+  {
+    oai_level = LOG_INFO;
+  }
+
+  va_start(args, message);
+  nfapi_log("FILE>", "FUNC", 999, PHY, oai_level, message, args);
+  va_end(args);
+  #else
+  va_list    args;
+  va_start(args, message);
+  vprintf(message, args);
+  va_end(args);
+  #endif
+}
+
+void pnf_set_thread_priority(int priority)
+{
+  //printf("%s(priority:%d)\n", __FUNCTION__, priority);
+
+  pthread_attr_t ptAttr;
+
+  struct sched_param schedParam;
+  schedParam.__sched_priority = priority; //79;
+  if(sched_setscheduler(0, SCHED_RR, &schedParam) != 0)
+  {
+    printf("failed to set SCHED_RR\n");
+  }
+
+  if(pthread_attr_setschedpolicy(&ptAttr, SCHED_RR) != 0)
+  {
+    printf("failed to set pthread SCHED_RR %d\n", errno);
+  }
+
+  pthread_attr_setinheritsched(&ptAttr, PTHREAD_EXPLICIT_SCHED);
+
+  struct sched_param thread_params;
+  thread_params.sched_priority = 20;
+  if(pthread_attr_setschedparam(&ptAttr, &thread_params) != 0)
+  {
+    printf("failed to set sched param\n");
+  }
+}
+
+void* pnf_p7_thread_start(void* ptr)
+{
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] P7 THREAD %s\n", __FUNCTION__);
+
+  pnf_set_thread_priority(79);
+
+  nfapi_pnf_p7_config_t* config = (nfapi_pnf_p7_config_t*)ptr;
+  nfapi_pnf_p7_start(config);
+
+  return 0;
+}
+
+
+
+int pnf_param_request(nfapi_pnf_config_t* config, nfapi_pnf_param_request_t* req)
+{
+  printf("[PNF] pnf param request\n");
+
+  nfapi_pnf_param_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_PNF_PARAM_RESPONSE;
+  resp.error_code = NFAPI_MSG_OK;
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+
+  resp.pnf_param_general.tl.tag = NFAPI_PNF_PARAM_GENERAL_TAG;
+  resp.pnf_param_general.nfapi_sync_mode = pnf->sync_mode;
+  resp.pnf_param_general.location_mode = pnf->location_mode;
+  //uint8_t location_coordinates[NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH];
+  resp.pnf_param_general.dl_config_timing = pnf->dl_config_timing;
+  resp.pnf_param_general.tx_timing = pnf->tx_timing;
+  resp.pnf_param_general.ul_config_timing = pnf->ul_config_timing;
+  resp.pnf_param_general.hi_dci0_timing = pnf->hi_dci0_timing;
+  resp.pnf_param_general.maximum_number_phys = pnf->max_phys;
+  resp.pnf_param_general.maximum_total_bandwidth = pnf->max_total_bw;
+  resp.pnf_param_general.maximum_total_number_dl_layers = pnf->max_total_dl_layers;
+  resp.pnf_param_general.maximum_total_number_ul_layers = pnf->max_total_ul_layers;
+  resp.pnf_param_general.shared_bands = pnf->shared_bands;
+  resp.pnf_param_general.shared_pa = pnf->shared_pa;
+  resp.pnf_param_general.maximum_total_power = pnf->max_total_power;
+  //uint8_t oui[NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH];
+
+  resp.pnf_phy.tl.tag = NFAPI_PNF_PHY_TAG;
+  //DJP resp.pnf_phy.number_of_phys = pnf->phys.size();
+  resp.pnf_phy.number_of_phys = 1;
+
+  //for(int i = 0; i < pnf->phys.size(); ++i)
+  for(int i = 0; i < 1; ++i)
+  {
+    resp.pnf_phy.phy[i].phy_config_index = pnf->phys[i].index; 
+    resp.pnf_phy.phy[i].downlink_channel_bandwidth_supported = pnf->phys[i].dl_channel_bw_support;
+    resp.pnf_phy.phy[i].uplink_channel_bandwidth_supported = pnf->phys[i].ul_channel_bw_support;
+    resp.pnf_phy.phy[i].number_of_dl_layers_supported = pnf->phys[i].num_dl_layers_supported;
+    resp.pnf_phy.phy[i].number_of_ul_layers_supported = pnf->phys[i].num_ul_layers_supported;
+    resp.pnf_phy.phy[i].maximum_3gpp_release_supported = pnf->phys[i].release_supported;
+    resp.pnf_phy.phy[i].nmm_modes_supported = pnf->phys[i].nmm_modes_supported;
+
+    //DJP resp.pnf_phy.phy[i].number_of_rfs = pnf->phys[i].rfs.size();
+    resp.pnf_phy.phy[i].number_of_rfs = 2;
+    //for(int j = 0; j < pnf->phys[i].rfs.size(); ++j)
+    for(int j = 0; j < 1; ++j)
+    {
+      resp.pnf_phy.phy[i].rf_config[j].rf_config_index = pnf->phys[i].rfs[j];
+    }
+
+    //DJP resp.pnf_phy.phy[i].number_of_rf_exclusions = pnf->phys[i].excluded_rfs.size();
+    resp.pnf_phy.phy[i].number_of_rf_exclusions = 0;
+    //DJP for(int j = 0; j < pnf->phys[i].excluded_rfs.size(); ++j)
+    for(int j = 0; j < 0; ++j)
+    {
+      resp.pnf_phy.phy[i].excluded_rf_config[j].rf_config_index = pnf->phys[i].excluded_rfs[j];
+    }
+  }
+
+
+  resp.pnf_rf.tl.tag = NFAPI_PNF_RF_TAG;
+  //DJPresp.pnf_rf.number_of_rfs = pnf->rfs.size();
+  resp.pnf_rf.number_of_rfs = 2;
+
+  //for(int i = 0; i < pnf->rfs.size(); ++i)
+  for(int i = 0; i < 2; ++i)
+  {
+    resp.pnf_rf.rf[i].rf_config_index = pnf->rfs[i].index; 
+    resp.pnf_rf.rf[i].band = pnf->rfs[i].band;
+    resp.pnf_rf.rf[i].maximum_transmit_power = pnf->rfs[i].max_transmit_power; 
+    resp.pnf_rf.rf[i].minimum_transmit_power = pnf->rfs[i].min_transmit_power;
+    resp.pnf_rf.rf[i].number_of_antennas_suppported = pnf->rfs[i].num_antennas_supported;
+    resp.pnf_rf.rf[i].minimum_downlink_frequency = pnf->rfs[i].min_downlink_frequency;
+    resp.pnf_rf.rf[i].maximum_downlink_frequency = pnf->rfs[i].max_downlink_frequency;
+    resp.pnf_rf.rf[i].minimum_uplink_frequency = pnf->rfs[i].min_uplink_frequency;
+    resp.pnf_rf.rf[i].maximum_uplink_frequency = pnf->rfs[i].max_uplink_frequency;
+  }
+
+  if(pnf->release >= 10)
+  {
+    resp.pnf_phy_rel10.tl.tag = NFAPI_PNF_PHY_REL10_TAG;
+    //DJPresp.pnf_phy_rel10.number_of_phys = pnf->phys.size();
+    resp.pnf_phy_rel10.number_of_phys = 1;
+
+    //for(int i = 0; i < pnf->phys.size(); ++i)
+    for(int i = 0; i < 1; ++i)
+    {
+      resp.pnf_phy_rel10.phy[i].phy_config_index = pnf->phys[i].index; 
+      resp.pnf_phy_rel10.phy[i].transmission_mode_7_supported = 0;
+      resp.pnf_phy_rel10.phy[i].transmission_mode_8_supported = 1;
+      resp.pnf_phy_rel10.phy[i].two_antenna_ports_for_pucch = 0;
+      resp.pnf_phy_rel10.phy[i].transmission_mode_9_supported = 1;
+      resp.pnf_phy_rel10.phy[i].simultaneous_pucch_pusch = 0;
+      resp.pnf_phy_rel10.phy[i].four_layer_tx_with_tm3_and_tm4 = 1;
+
+    }
+  }
+
+  if(pnf->release >= 11)
+  {
+    resp.pnf_phy_rel11.tl.tag = NFAPI_PNF_PHY_REL11_TAG;
+    //DJP resp.pnf_phy_rel11.number_of_phys = pnf->phys.size();
+    resp.pnf_phy_rel11.number_of_phys = 1;
+
+    //DJP for(int i = 0; i < pnf->phys.size(); ++i)
+    for(int i = 0; i < 1; ++i)
+    {
+      resp.pnf_phy_rel11.phy[i].phy_config_index = pnf->phys[i].index; 
+      resp.pnf_phy_rel11.phy[i].edpcch_supported = 0;
+      resp.pnf_phy_rel11.phy[i].multi_ack_csi_reporting = 1;
+      resp.pnf_phy_rel11.phy[i].pucch_tx_diversity = 0;
+      resp.pnf_phy_rel11.phy[i].ul_comp_supported = 1;
+      resp.pnf_phy_rel11.phy[i].transmission_mode_5_supported = 0;
+    }
+  }
+
+  if(pnf->release >= 12)
+  {
+    resp.pnf_phy_rel12.tl.tag = NFAPI_PNF_PHY_REL12_TAG;
+    //DJP resp.pnf_phy_rel12.number_of_phys = pnf->phys.size();
+    resp.pnf_phy_rel12.number_of_phys = 1;
+
+    //DJP for(int i = 0; i < pnf->phys.size(); ++i)
+    for(int i = 0; i < 1; ++i)
+    {
+      resp.pnf_phy_rel12.phy[i].phy_config_index = pnf->phys[i].index; 
+      resp.pnf_phy_rel12.phy[i].csi_subframe_set = 0;
+      resp.pnf_phy_rel12.phy[i].enhanced_4tx_codebook = 2; // yes this is invalid
+      resp.pnf_phy_rel12.phy[i].drs_supported = 0;
+      resp.pnf_phy_rel12.phy[i].ul_64qam_supported = 1;
+      resp.pnf_phy_rel12.phy[i].transmission_mode_10_supported = 0;
+      resp.pnf_phy_rel12.phy[i].alternative_bts_indices = 1;
+    }
+  }
+
+  if(pnf->release >= 13)
+  {
+    resp.pnf_phy_rel13.tl.tag = NFAPI_PNF_PHY_REL13_TAG;
+    //DJP resp.pnf_phy_rel13.number_of_phys = pnf->phys.size();
+    resp.pnf_phy_rel13.number_of_phys = 1;
+
+    //for(int i = 0; i < pnf->phys.size(); ++i)
+    for(int i = 0; i < 1; ++i)
+    {
+      resp.pnf_phy_rel13.phy[i].phy_config_index = pnf->phys[i].index; 
+      resp.pnf_phy_rel13.phy[i].pucch_format4_supported = 0;
+      resp.pnf_phy_rel13.phy[i].pucch_format5_supported = 1;
+      resp.pnf_phy_rel13.phy[i].more_than_5_ca_support = 0;
+      resp.pnf_phy_rel13.phy[i].laa_supported = 1;
+      resp.pnf_phy_rel13.phy[i].laa_ending_in_dwpts_supported = 0;
+      resp.pnf_phy_rel13.phy[i].laa_starting_in_second_slot_supported = 1;
+      resp.pnf_phy_rel13.phy[i].beamforming_supported = 0;
+      resp.pnf_phy_rel13.phy[i].csi_rs_enhancement_supported = 1;
+      resp.pnf_phy_rel13.phy[i].drms_enhancement_supported = 0;
+      resp.pnf_phy_rel13.phy[i].srs_enhancement_supported = 1;
+    }
+
+    resp.pnf_phy_rel13_nb_iot.tl.tag = NFAPI_PNF_PHY_REL13_NB_IOT_TAG;
+    //DJP resp.pnf_phy_rel13_nb_iot.number_of_phys = pnf->phys.size();		
+    resp.pnf_phy_rel13_nb_iot.number_of_phys = 1;
+
+    //for(int i = 0; i < pnf->phys.size(); ++i)
+    for(int i = 0; i < 1; ++i)
+    {
+      resp.pnf_phy_rel13_nb_iot.phy[i].phy_config_index = pnf->phys[i].index; 
+
+      //DJP resp.pnf_phy_rel13_nb_iot.phy[i].number_of_rfs = pnf->phys[i].rfs.size();
+      resp.pnf_phy_rel13_nb_iot.phy[i].number_of_rfs = 1;
+      //DJP for(int j = 0; j < pnf->phys[i].rfs.size(); ++j)
+      for(int j = 0; j < 1; ++j)
+      {
+        resp.pnf_phy_rel13_nb_iot.phy[i].rf_config[j].rf_config_index = pnf->phys[i].rfs[j];
+      }
+
+      //DJP resp.pnf_phy_rel13_nb_iot.phy[i].number_of_rf_exclusions = pnf->phys[i].excluded_rfs.size();
+      resp.pnf_phy_rel13_nb_iot.phy[i].number_of_rf_exclusions = 1;
+      //DJP for(int j = 0; j < pnf->phys[i].excluded_rfs.size(); ++j)
+      for(int j = 0; j < 1; ++j)
+      {
+        resp.pnf_phy_rel13_nb_iot.phy[i].excluded_rf_config[j].rf_config_index = pnf->phys[i].excluded_rfs[j];
+      }
+
+      resp.pnf_phy_rel13_nb_iot.phy[i].number_of_dl_layers_supported = pnf->phys[i].num_dl_layers_supported;
+      resp.pnf_phy_rel13_nb_iot.phy[i].number_of_ul_layers_supported = pnf->phys[i].num_ul_layers_supported;
+      resp.pnf_phy_rel13_nb_iot.phy[i].maximum_3gpp_release_supported = pnf->phys[i].release_supported;
+      resp.pnf_phy_rel13_nb_iot.phy[i].nmm_modes_supported = pnf->phys[i].nmm_modes_supported;
+
+    }
+  }
+
+
+  nfapi_pnf_pnf_param_resp(config, &resp);
+
+  return 0;
+}
+
+int pnf_config_request(nfapi_pnf_config_t* config, nfapi_pnf_config_request_t* req)
+{
+  printf("[PNF] pnf config request\n");
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+
+#if 0
+  for(int i = 0; i < req->pnf_phy_rf_config.number_phy_rf_config_info; ++i)
+  {
+    auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item)
+        { return item.index == req->pnf_phy_rf_config.phy_rf_config[i].phy_config_index; });
+
+    if(found != pnf->phys.end())
+    {
+      phy_info& phy = (*found);
+      phy.id = req->pnf_phy_rf_config.phy_rf_config[i].phy_id;
+      printf("[PNF] pnf config request assigned phy_id %d to phy_config_index %d\n", phy.id, req->pnf_phy_rf_config.phy_rf_config[i].phy_config_index);
+    }
+    else
+    {
+      // did not find the phy
+      printf("[PNF] pnf config request did not find phy_config_index %d\n", req->pnf_phy_rf_config.phy_rf_config[i].phy_config_index);
+    }
+
+  }
+#endif
+  //DJP
+  phy_info *phy = pnf->phys;
+  phy->id = req->pnf_phy_rf_config.phy_rf_config[0].phy_id;
+  printf("[PNF] pnf config request assigned phy_id %d to phy_config_index %d\n", phy->id, req->pnf_phy_rf_config.phy_rf_config[0].phy_config_index);
+  //DJP
+
+  nfapi_pnf_config_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_PNF_CONFIG_RESPONSE;
+  resp.error_code = NFAPI_MSG_OK;
+  nfapi_pnf_pnf_config_resp(config, &resp);
+  printf("[PNF] Sent pnf_config_resp\n");
+
+  return 0;
+}
+
+void nfapi_send_pnf_start_resp(nfapi_pnf_config_t* config, uint16_t phy_id)
+{
+  printf("Sending NFAPI_START_RESPONSE config:%p phy_id:%d\n", config, phy_id);
+
+  nfapi_start_response_t start_resp;
+  memset(&start_resp, 0, sizeof(start_resp));
+  start_resp.header.message_id = NFAPI_START_RESPONSE;
+  start_resp.header.phy_id = phy_id;
+  start_resp.error_code = NFAPI_MSG_OK;
+
+  nfapi_pnf_start_resp(config, &start_resp);
+}
+
+int pnf_start_request(nfapi_pnf_config_t* config, nfapi_pnf_start_request_t* req)
+{
+  printf("Received NFAPI_PNF_START_REQUEST\n");
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+
+  // start all phys that have been configured
+  //for(phy_info& phy : pnf->phys)
+  phy_info* phy = pnf->phys;
+  if(phy->id != 0)
+  {
+    //auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item)
+    //		{ return item.id == req->header.phy_id; });
+    //
+    //	if(found != pnf->phys.end())
+    //	{
+    //		phy_info& phy = (*found);
+    //}
+
+    nfapi_pnf_start_response_t resp;
+    memset(&resp, 0, sizeof(resp));
+    resp.header.message_id = NFAPI_PNF_START_RESPONSE;
+    resp.error_code = NFAPI_MSG_OK;
+    nfapi_pnf_pnf_start_resp(config, &resp);
+    printf("[PNF] Sent NFAPI_PNF_START_RESP\n");
+  }
+  return 0;
+}
+
+int pnf_stop_request(nfapi_pnf_config_t* config, nfapi_pnf_stop_request_t* req)
+{
+  printf("[PNF] Received NFAPI_PNF_STOP_REQ\n");
+
+  nfapi_pnf_stop_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_PNF_STOP_RESPONSE;
+  resp.error_code = NFAPI_MSG_OK;
+  nfapi_pnf_pnf_stop_resp(config, &resp);
+  printf("[PNF] Sent NFAPI_PNF_STOP_REQ\n");
+
+  return 0;
+}
+
+int param_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_param_request_t* req)
+{
+  printf("[PNF] Received NFAPI_PARAM_REQUEST phy_id:%d\n", req->header.phy_id);
+
+  //pnf_info* pnf = (pnf_info*)(config->user_data);
+
+  nfapi_param_response_t nfapi_resp;
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+
+  memset(&nfapi_resp, 0, sizeof(nfapi_resp));
+  nfapi_resp.header.message_id = NFAPI_PARAM_RESPONSE;
+  nfapi_resp.header.phy_id = req->header.phy_id;
+  nfapi_resp.error_code = 0; // DJP - what value???
+
+  struct sockaddr_in pnf_p7_sockaddr;
+
+  pnf_p7_sockaddr.sin_addr.s_addr = inet_addr(pnf->phys[0].local_addr);
+  nfapi_resp.nfapi_config.p7_pnf_address_ipv4.tl.tag = NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG;
+  memcpy(nfapi_resp.nfapi_config.p7_pnf_address_ipv4.address, &pnf_p7_sockaddr.sin_addr.s_addr, 4);
+  nfapi_resp.num_tlv++;
+
+  // P7 PNF Port
+  nfapi_resp.nfapi_config.p7_pnf_port.tl.tag = NFAPI_NFAPI_P7_PNF_PORT_TAG;
+  nfapi_resp.nfapi_config.p7_pnf_port.value = 32123; // DJP - hard code alert!!!! FIXME TODO
+  nfapi_resp.num_tlv++;
+
+  nfapi_pnf_param_resp(config, &nfapi_resp);
+
+  printf("[PNF] Sent NFAPI_PARAM_RESPONSE phy_id:%d number_of_tlvs:%u\n", req->header.phy_id, nfapi_resp.num_tlv);
+#if 0
+  //DJP
+  auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item)
+      { return item.id == req->header.phy_id; });
+
+  if(found != pnf->phys.end())
+#endif
+  {
+    //DJP phy_info& phy_info = (*found);
+    //phy_info *phy_info = pnf->phys;
+
+  }
+#if 0
+  else
+  {
+    // did not find the phy
+  }
+#endif
+
+  printf("[PNF] param request .. exit\n");
+
+  return 0;
+}
+
+// From MAC config.c
+extern uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn);
+extern int32_t get_uldl_offset(int eutra_bandP);
+
+int config_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_config_request_t* req)
+{
+  printf("[PNF] Received NFAPI_CONFIG_REQ phy_id:%d\n", req->header.phy_id);
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+  uint8_t num_tlv = 0;
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+  LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
+
+#if 0
+  //DJP
+  auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item)
+      { return item.id == req->header.phy_id; });
+
+  if(found != pnf->phys.end())
+  {
+    phy_info& phy_info = (*found);
+  }
+#endif
+  //DJP 
+  phy_info* phy_info = pnf->phys;
+
+  if(req->nfapi_config.timing_window.tl.tag == NFAPI_NFAPI_TIMING_WINDOW_TAG)
+  {
+    phy_info->timing_window = req->nfapi_config.timing_window.value;
+    printf("Phy_info:Timing window:%u NFAPI_CONFIG:timing_window:%u\n", phy_info->timing_window, req->nfapi_config.timing_window.value);
+    num_tlv++;
+  }
+
+  if(req->nfapi_config.timing_info_mode.tl.tag == NFAPI_NFAPI_TIMING_INFO_MODE_TAG)
+  {
+    printf("timing info mode:%d\n", req->nfapi_config.timing_info_mode.value);
+    phy_info->timing_info_mode = req->nfapi_config.timing_info_mode.value;
+    num_tlv++;
+  }
+  else 
+  {
+    phy_info->timing_info_mode = 0;
+    printf("NO timing info mode provided\n");
+  }
+
+  if(req->nfapi_config.timing_info_period.tl.tag == NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG)
+  {
+    printf("timing info period provided value:%d\n", req->nfapi_config.timing_info_period.value);
+    phy_info->timing_info_period = req->nfapi_config.timing_info_period.value;
+    num_tlv++;
+  }
+  else 
+  {
+    phy_info->timing_info_period = 0;
+  }
+
+  if(req->rf_config.dl_channel_bandwidth.tl.tag == NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG)
+  {
+    phy_info->dl_channel_bw_support = req->rf_config.dl_channel_bandwidth.value;
+    fp->N_RB_DL = req->rf_config.dl_channel_bandwidth.value;
+    num_tlv++;
+    NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG N_RB_DL:%u\n", __FUNCTION__, fp->N_RB_DL);
+  }
+  else
+  {
+    NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() Missing NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG\n", __FUNCTION__);
+  }
+
+  if(req->rf_config.ul_channel_bandwidth.tl.tag == NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG)
+  {
+    phy_info->ul_channel_bw_support = req->rf_config.ul_channel_bandwidth.value;
+    fp->N_RB_UL = req->rf_config.ul_channel_bandwidth.value;
+    num_tlv++;
+  }
+
+  if(req->nfapi_config.rf_bands.tl.tag == NFAPI_NFAPI_RF_BANDS_TAG)
+  {
+    pnf->rfs[0].band = req->nfapi_config.rf_bands.rf_band[0];
+    fp->eutra_band = req->nfapi_config.rf_bands.rf_band[0];
+    num_tlv++;
+  }
+
+  if(req->nfapi_config.earfcn.tl.tag == NFAPI_NFAPI_EARFCN_TAG)
+  {
+    fp->dl_CarrierFreq = from_earfcn(fp->eutra_band, req->nfapi_config.earfcn.value); // DJP - TODO FIXME - hard coded to first rf
+    fp->ul_CarrierFreq = fp->dl_CarrierFreq - (get_uldl_offset(fp->eutra_band) * 1e5);
+    num_tlv++;
+
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() earfcn:%u dl_carrierFreq:%u ul_CarrierFreq:%u band:%u N_RB_DL:%u\n", 
+        __FUNCTION__, req->nfapi_config.earfcn.value, fp->dl_CarrierFreq, fp->ul_CarrierFreq, pnf->rfs[0].band, fp->N_RB_DL);
+  }
+
+  if (req->subframe_config.duplex_mode.tl.tag == NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG)
+  {
+    fp->frame_type = req->subframe_config.duplex_mode.value==0 ? TDD : FDD;
+    num_tlv++;
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() frame_type:%d\n", __FUNCTION__, fp->frame_type);
+  }
+  if (req->subframe_config.dl_cyclic_prefix_type.tl.tag == NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG)
+  {
+    fp->Ncp = req->subframe_config.dl_cyclic_prefix_type.value;
+    num_tlv++;
+  }
+
+  if (req->subframe_config.ul_cyclic_prefix_type.tl.tag == NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG)
+  {
+    fp->Ncp_UL = req->subframe_config.ul_cyclic_prefix_type.value;
+    num_tlv++;
+  }
+
+  fp->num_MBSFN_config = 0; // DJP - hard code alert
+
+  if (req->sch_config.physical_cell_id.tl.tag == NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG)
+  {
+    fp->Nid_cell = req->sch_config.physical_cell_id.value;
+    fp->nushift = fp->Nid_cell%6;
+    num_tlv++;
+  }
+
+  if (req->rf_config.tx_antenna_ports.tl.tag == NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG)
+  {
+    fp->nb_antennas_tx = req->rf_config.tx_antenna_ports.value;
+    fp->nb_antenna_ports_eNB = 1;
+    num_tlv++;
+  }
+
+  if (req->rf_config.rx_antenna_ports.tl.tag == NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG)
+  {
+    fp->nb_antennas_rx = req->rf_config.rx_antenna_ports.value;
+    num_tlv++;
+  }
+
+  if (req->phich_config.phich_resource.tl.tag == NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG)
+  {
+    fp->phich_config_common.phich_resource = req->phich_config.phich_resource.value;
+    num_tlv++;
+  }
+
+  if (req->phich_config.phich_duration.tl.tag == NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG)
+  {
+    fp->phich_config_common.phich_duration = req->phich_config.phich_duration.value;
+    num_tlv++;
+  }
+
+  if (req->phich_config.phich_power_offset.tl.tag == NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG)
+  {
+    LOG_E(PHY, "%s() NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG tag:%d not supported\n", __FUNCTION__, req->phich_config.phich_power_offset.tl.tag);
+    //fp->phich_config_common.phich_power_offset = req->phich_config.
+    num_tlv++;
+  }
+
+  // UL RS Config
+  if (req->uplink_reference_signal_config.cyclic_shift_1_for_drms.tl.tag == NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG)
+  {
+    fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = req->uplink_reference_signal_config.cyclic_shift_1_for_drms.value;
+    num_tlv++;
+  }
+
+  if (req->uplink_reference_signal_config.uplink_rs_hopping.tl.tag == NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG)
+  {
+    fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = req->uplink_reference_signal_config.uplink_rs_hopping.value;
+    num_tlv++;
+  }
+
+  if (req->uplink_reference_signal_config.group_assignment.tl.tag == NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG)
+  {
+    fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = req->uplink_reference_signal_config.group_assignment.value;
+    num_tlv++;
+  }
+
+  if (req->pusch_config.hopping_mode.tl.tag == NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG) { }  // DJP - not being handled?
+
+  fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 0; // DJP - not being handled
+
+  if (req->prach_config.configuration_index.tl.tag == NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG)
+  {
+    fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex=req->prach_config.configuration_index.value;
+    num_tlv++;
+  }
+
+  if (req->prach_config.root_sequence_index.tl.tag == NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG)
+  {
+    fp->prach_config_common.rootSequenceIndex=req->prach_config.root_sequence_index.value;
+    num_tlv++;
+  }
+
+  if (req->prach_config.zero_correlation_zone_configuration.tl.tag == NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG)
+  {
+    fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig=req->prach_config.zero_correlation_zone_configuration.value;
+    num_tlv++;
+  }
+
+  if (req->prach_config.high_speed_flag.tl.tag == NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG)
+  {
+    fp->prach_config_common.prach_ConfigInfo.highSpeedFlag=req->prach_config.high_speed_flag.value;
+    num_tlv++;
+  }
+
+  if (req->prach_config.frequency_offset.tl.tag == NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG)
+  {
+    fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset=req->prach_config.frequency_offset.value;
+    num_tlv++;
+  }
+
+  printf("[PNF] CONFIG_REQUEST[num_tlv:%d] TLVs processed:%d\n", req->num_tlv, num_tlv);
+
+  printf("[PNF] Simulating PHY CONFIG - DJP\n");
+  PHY_Config_t phy_config;
+  phy_config.Mod_id = 0;
+  phy_config.CC_id=0;
+  phy_config.cfg = req;
+
+  phy_config_request(&phy_config);
+
+  dump_frame_parms(fp);
+
+  phy_info->remote_port = req->nfapi_config.p7_vnf_port.value;
+
+  struct sockaddr_in vnf_p7_sockaddr;
+  memcpy(&vnf_p7_sockaddr.sin_addr.s_addr, &(req->nfapi_config.p7_vnf_address_ipv4.address[0]), 4);
+  phy_info->remote_addr = inet_ntoa(vnf_p7_sockaddr.sin_addr);
+
+  printf("[PNF] %d vnf p7 %s:%d timing %d %d %d\n", phy_info->id, phy_info->remote_addr, phy_info->remote_port, 
+      phy_info->timing_window, phy_info->timing_info_mode, phy_info->timing_info_period);
+
+  nfapi_config_response_t nfapi_resp;
+  memset(&nfapi_resp, 0, sizeof(nfapi_resp));
+  nfapi_resp.header.message_id = NFAPI_CONFIG_RESPONSE;
+  nfapi_resp.header.phy_id = phy_info->id;
+  nfapi_resp.error_code = 0; // DJP - some value resp->error_code;
+  nfapi_pnf_config_resp(config, &nfapi_resp);
+  printf("[PNF] Sent NFAPI_CONFIG_RESPONSE phy_id:%d\n", phy_info->id);
+
+  return 0;
+}
+
+nfapi_p7_message_header_t* pnf_phy_allocate_p7_vendor_ext(uint16_t message_id, uint16_t* msg_size)
+{
+  if(message_id == P7_VENDOR_EXT_REQ)
+  {
+    (*msg_size) = sizeof(vendor_ext_p7_req);
+    return (nfapi_p7_message_header_t*)malloc(sizeof(vendor_ext_p7_req));
+  }
+
+  return 0;
+}
+
+void pnf_phy_deallocate_p7_vendor_ext(nfapi_p7_message_header_t* header)
+{
+  free(header);
+}
+
+int pnf_phy_hi_dci0_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req)
+{
+  LOG_D(PHY,"[PNF] hi dci0 request sfn_sf:%d dci:%d hi:%d\n", NFAPI_SFNSF2DEC(req->sfn_sf), req->hi_dci0_request_body.number_of_dci, req->hi_dci0_request_body.number_of_hi);
+
+  //phy_info* phy = (phy_info*)(pnf_p7->user_data);
+
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+  eNB_rxtx_proc_t *proc = &eNB->proc.proc_rxtx[0];
+
+  for (int i=0; i<req->hi_dci0_request_body.number_of_dci + req->hi_dci0_request_body.number_of_hi; i++)
+  {
+    //LOG_D(PHY,"[PNF] HI_DCI0_REQ sfn_sf:%d PDU[%d]\n", NFAPI_SFNSF2DEC(req->sfn_sf), i);
+
+    if (req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE)
+    {
+      LOG_D(PHY,"[PNF] HI_DCI0_REQ sfn_sf:%d PDU[%d] - NFAPI_HI_DCI0_DCI_PDU_TYPE\n", NFAPI_SFNSF2DEC(req->sfn_sf), i);
+
+      nfapi_hi_dci0_request_pdu_t *hi_dci0_req_pdu = &req->hi_dci0_request_body.hi_dci0_pdu_list[i];
+
+      handle_nfapi_hi_dci0_dci_pdu(eNB,proc,hi_dci0_req_pdu);
+
+      eNB->pdcch_vars[NFAPI_SFNSF2SF(req->sfn_sf)&1].num_dci++;
+    }
+    else if (req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type == NFAPI_HI_DCI0_HI_PDU_TYPE)
+    {
+      LOG_D(PHY,"[PNF] HI_DCI0_REQ sfn_sf:%d PDU[%d] - NFAPI_HI_DCI0_HI_PDU_TYPE\n", NFAPI_SFNSF2DEC(req->sfn_sf), i);
+
+      nfapi_hi_dci0_request_pdu_t *hi_dci0_req_pdu = &req->hi_dci0_request_body.hi_dci0_pdu_list[i];
+
+      handle_nfapi_hi_dci0_hi_pdu(eNB, proc, hi_dci0_req_pdu);
+    }
+    else
+    {
+      LOG_E(PHY,"[PNF] HI_DCI0_REQ sfn_sf:%d PDU[%d] - unknown pdu type:%d\n", NFAPI_SFNSF2DEC(req->sfn_sf), i, req->hi_dci0_request_body.hi_dci0_pdu_list[i].pdu_type);
+    }
+  }
+
+  return 0;
+}
+
+int pnf_phy_dl_config_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req)
+{
+  LOG_D(PHY,"[PNF] %s() sfn_sf:%d pdcch:%u dl_cfg[dci:%u pdus:%d pdsch_rnti:%d] pcfich:%u\n", __FUNCTION__,NFAPI_SFNSF2DEC(req->sfn_sf), req->dl_config_request_body.number_pdcch_ofdm_symbols, req->dl_config_request_body.number_dci, req->dl_config_request_body.number_pdu, req->dl_config_request_body.number_pdsch_rnti, req->dl_config_request_body.transmission_power_pcfich);
+
+  if (RC.ru == 0)
+  {
+    return -1;
+  }
+
+  if (RC.eNB == 0)
+  {
+    return -2;
+  }
+
+  if (RC.eNB[0][0] == 0)
+  {
+    return -3;
+  }
+
+  if (sync_var != 0)
+  { 
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() Main system not up - is this a dummy subframe?\n", __FUNCTION__);
+    return -4;
+  }
+
+  int sfn = NFAPI_SFNSF2SFN(req->sfn_sf);
+  int sf = NFAPI_SFNSF2SF(req->sfn_sf);
+
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+  eNB_rxtx_proc_t *proc = &eNB->proc.proc_rxtx[0];
+  nfapi_dl_config_request_pdu_t* dl_config_pdu_list = req->dl_config_request_body.dl_config_pdu_list;
+  LTE_eNB_PDCCH *pdcch_vars = &eNB->pdcch_vars[sf&1];
+
+  pdcch_vars->num_pdcch_symbols = req->dl_config_request_body.number_pdcch_ofdm_symbols;
+  pdcch_vars->num_dci = 0;
+
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() TX:%d/%d RX:%d/%d sfn_sf:%d DCI:%d PDU:%d\n", __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->frame_rx, proc->subframe_rx, NFAPI_SFNSF2DEC(req->sfn_sf), req->dl_config_request_body.number_dci, req->dl_config_request_body.number_pdu);
+
+  for (int i=0;i<req->dl_config_request_body.number_pdu;i++)
+  {
+    //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() sfn/sf:%d PDU[%d] size:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), i, dl_config_pdu_list[i].pdu_size);
+
+    if (dl_config_pdu_list[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)
+    {
+      handle_nfapi_dci_dl_pdu(eNB,proc,&dl_config_pdu_list[i]);
+
+      pdcch_vars->num_dci++; // Is actually number of DCI PDUs
+
+      //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() pdcch_vars->num_dci:%d\n", __FUNCTION__, pdcch_vars->num_dci);
+    }
+    else if (dl_config_pdu_list[i].pdu_type == NFAPI_DL_CONFIG_BCH_PDU_TYPE)
+    {
+      nfapi_dl_config_bch_pdu *bch_pdu = &dl_config_pdu_list[i].bch_pdu;
+      uint16_t pdu_index = bch_pdu->bch_pdu_rel8.pdu_index;
+
+      if (tx_request_pdu[sfn][sf][pdu_index] != NULL)
+      {
+        uint8_t *sdu = malloc(tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length);
+
+        memcpy(sdu, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_data, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length);
+
+        //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PDU:%d BCH: pdu_index:%u pdu_length:%d sdu_length:%d BCH_SDU:%x,%x,%x\n", __FUNCTION__, i, pdu_index, bch_pdu->bch_pdu_rel8.length, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length, sdu[0], sdu[1], sdu[2]);
+
+        handle_nfapi_bch_pdu(eNB, proc, &dl_config_pdu_list[i], sdu);
+
+        eNB->pbch_configured=1;
+      }
+      else
+      {
+        NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() BCH NULL TX PDU SFN/SF:%d PDU_INDEX:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pdu_index); 
+      }
+    }
+    else if (dl_config_pdu_list[i].pdu_type == NFAPI_DL_CONFIG_DLSCH_PDU_TYPE)
+    {
+      nfapi_dl_config_dlsch_pdu *dlsch_pdu = &dl_config_pdu_list[i].dlsch_pdu;
+      nfapi_dl_config_dlsch_pdu_rel8_t *rel8_pdu = &dlsch_pdu->dlsch_pdu_rel8;
+      nfapi_tx_request_pdu_t *tx_pdu = tx_request_pdu[sfn][sf][rel8_pdu->pdu_index];
+
+      if (tx_pdu != NULL)
+      {
+        uint8_t *dlsch_sdu = malloc(tx_pdu->segments[0].segment_length);
+
+// **********************************************************************
+// THIS IS CREATING AN INTENTIONAL LEAK - I think...
+//
+// nFAPI won't be managing dlsch_sdu
+//
+// not sure about the stack, but it does seem to allow it to stay up!!!
+//
+// I THINK I NEED TO FIX THIS - unless it IS getting freed by the stack
+//
+// **********************************************************************
+      memcpy(dlsch_sdu, tx_pdu->segments[0].segment_data, tx_pdu->segments[0].segment_length);
+
+      //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() DLSCH:pdu_index:%d handle_nfapi_dlsch_pdu(eNB, proc_rxtx, dlsch_pdu, transport_blocks:%d sdu:%p) eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols:%d\n", __FUNCTION__, rel8_pdu->pdu_index, rel8_pdu->transport_blocks, dlsch_sdu, eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols);
+
+      handle_nfapi_dlsch_pdu(
+          eNB,
+          &eNB->proc.proc_rxtx[0],
+          &dl_config_pdu_list[i],
+          rel8_pdu->transport_blocks-1,
+          dlsch_sdu);
+      }
+      else
+      {
+        NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() DLSCH NULL TX PDU SFN/SF:%d PDU_INDEX:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), rel8_pdu->pdu_index);
+      }
+    }
+    else
+    {
+      NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() UNKNOWN:%d\n", __FUNCTION__, dl_config_pdu_list[i].pdu_type);
+    }
+  }
+
+  if(req->vendor_extension)
+    free(req->vendor_extension);
+
+  return 0;
+}
+
+int  pnf_phy_tx_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_tx_request_t* req)
+{
+  uint16_t sfn = NFAPI_SFNSF2SFN(req->sfn_sf);
+  uint16_t sf = NFAPI_SFNSF2SF(req->sfn_sf);
+
+  if (req->tx_request_body.number_of_pdus==0)
+    LOG_D(PHY,"%s() SFN/SF:%d%d PDUs:%d\n", __FUNCTION__, sfn, sf, req->tx_request_body.number_of_pdus);
+
+  if (req->tx_request_body.tl.tag==NFAPI_TX_REQUEST_BODY_TAG)
+  {
+    for (int i=0; i<req->tx_request_body.number_of_pdus; i++)
+    {
+      LOG_D(PHY,"%s() SFN/SF:%d%d number_of_pdus:%d [PDU:%d] pdu_length:%d pdu_index:%d num_segments:%d\n",
+          __FUNCTION__,
+          sfn, sf,
+          req->tx_request_body.number_of_pdus,
+          i,
+          req->tx_request_body.tx_pdu_list[i].pdu_length,
+          req->tx_request_body.tx_pdu_list[i].pdu_index,
+          req->tx_request_body.tx_pdu_list[i].num_segments
+          );
+
+      tx_request_pdu[sfn][sf][i] = &req->tx_request_body.tx_pdu_list[i];
+    }
+  }
+
+  return 0;
+}
+
+int pnf_phy_ul_config_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req)
+{
+  if (0)LOG_D(PHY,"[PNF] UL_CONFIG_REQ %s() sfn_sf:%d pdu:%d rach_prach_frequency_resources:%d srs_present:%u\n", 
+      __FUNCTION__,
+      NFAPI_SFNSF2DEC(req->sfn_sf), 
+      req->ul_config_request_body.number_of_pdus,
+      req->ul_config_request_body.rach_prach_frequency_resources,
+      req->ul_config_request_body.srs_present
+      );
+
+  if (RC.ru == 0)
+  {
+    return -1;
+  }
+
+  if (RC.eNB == 0)
+  {
+    return -2;
+  }
+
+  if (RC.eNB[0][0] == 0)
+  {
+    return -3;
+  }
+
+  if (sync_var != 0)
+  { 
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() Main system not up - is this a dummy subframe?\n", __FUNCTION__);
+    return -4;
+  }
+
+  uint16_t curr_sfn = NFAPI_SFNSF2SFN(req->sfn_sf);
+  uint16_t curr_sf = NFAPI_SFNSF2SF(req->sfn_sf);
+
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+  eNB_rxtx_proc_t *proc = &eNB->proc.proc_rxtx[0];
+  nfapi_ul_config_request_pdu_t* ul_config_pdu_list = req->ul_config_request_body.ul_config_pdu_list;
+
+  for (int i=0;i<req->ul_config_request_body.number_of_pdus;i++)
+  {
+    //LOG_D(PHY, "%s() sfn/sf:%d PDU[%d] size:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), i, ul_config_pdu_list[i].pdu_size);
+
+    if (
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE ||
+        ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
+       )
+    {
+      //LOG_D(PHY, "%s() handle_nfapi_ul_pdu() for PDU:%d\n", __FUNCTION__, i);
+
+      handle_nfapi_ul_pdu(eNB,proc,&ul_config_pdu_list[i],curr_sfn,curr_sf,req->ul_config_request_body.srs_present);
+    }
+    else
+    {
+      NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() PDU:%i UNKNOWN type :%d\n", __FUNCTION__, i, ul_config_pdu_list[i].pdu_type);
+    }
+  }
+
+  return 0;
+}
+
+int pnf_phy_lbt_dl_config_req(nfapi_pnf_p7_config_t* config, nfapi_lbt_dl_config_request_t* req)
+{
+  //printf("[PNF] lbt dl config request\n");
+  return 0;
+}
+
+int pnf_phy_vendor_ext(nfapi_pnf_p7_config_t* config, nfapi_p7_message_header_t* msg)
+{
+  if(msg->message_id == P7_VENDOR_EXT_REQ)
+  {
+    //vendor_ext_p7_req* req = (vendor_ext_p7_req*)msg;
+    //printf("[PNF] vendor request (1:%d 2:%d)\n", req->dummy1, req->dummy2);
+  }
+  else
+  {
+    printf("[PNF] unknown vendor ext\n");
+  }
+  return 0;
+}
+
+int pnf_phy_pack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t** ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* codex)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+  if(header->message_id == P7_VENDOR_EXT_IND)
+  {
+    vendor_ext_p7_ind* ind = (vendor_ext_p7_ind*)(header);
+    if(!push16(ind->error_code, ppWritePackedMsg, end))
+      return 0;
+
+    return 1;
+  }
+  return -1;
+}
+
+int pnf_phy_unpack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t** ppReadPackedMessage, uint8_t *end, nfapi_p7_codec_config_t* codec)
+{
+  if(header->message_id == P7_VENDOR_EXT_REQ)
+  {
+    //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+    vendor_ext_p7_req* req = (vendor_ext_p7_req*)(header);
+    if(!(pull16(ppReadPackedMessage, &req->dummy1, end) &&
+          pull16(ppReadPackedMessage, &req->dummy2, end)))
+      return 0;
+    return 1;
+  }
+  return -1;
+}
+
+int pnf_phy_unpack_vendor_extension_tlv(nfapi_tl_t* tl, uint8_t **ppReadPackedMessage, uint8_t* end, void** ve, nfapi_p7_codec_config_t* config)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "pnf_phy_unpack_vendor_extension_tlv\n");
+
+  switch(tl->tag)
+  {
+    case VENDOR_EXT_TLV_1_TAG:
+      *ve = malloc(sizeof(vendor_ext_tlv_1));
+      if(!pull32(ppReadPackedMessage, &((vendor_ext_tlv_1*)(*ve))->dummy, end))
+	return 0;
+
+      return 1;
+      break;
+  }
+
+  return -1;
+}
+
+int pnf_phy_pack_vendor_extention_tlv(void* ve, uint8_t **ppWritePackedMsg, uint8_t* end, nfapi_p7_codec_config_t* config)
+{
+  //printf("%s\n", __FUNCTION__);
+  (void)ve;
+  (void)ppWritePackedMsg;
+  return -1;
+}
+
+int pnf_sim_unpack_vendor_extension_tlv(nfapi_tl_t* tl, uint8_t **ppReadPackedMessage, uint8_t *end, void** ve, nfapi_p4_p5_codec_config_t* config)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "pnf_sim_unpack_vendor_extension_tlv\n");
+
+  switch(tl->tag)
+  {
+    case VENDOR_EXT_TLV_2_TAG:
+      *ve = malloc(sizeof(vendor_ext_tlv_2));
+      if(!pull32(ppReadPackedMessage, &((vendor_ext_tlv_2*)(*ve))->dummy, end))
+	return 0;
+
+      return 1;
+      break;
+  }
+
+  return -1;
+}
+
+int pnf_sim_pack_vendor_extention_tlv(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config)
+{
+  //printf("%s\n", __FUNCTION__);
+  (void)ve;
+  (void)ppWritePackedMsg;
+  return -1;
+}
+
+nfapi_dl_config_request_t dummy_dl_config_req;
+nfapi_tx_request_t dummy_tx_req;
+
+nfapi_pnf_p7_subframe_buffer_t dummy_subframe;
+
+int start_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_start_request_t* req)
+{
+  printf("[PNF] Received NFAPI_START_REQ phy_id:%d\n", req->header.phy_id);
+
+  nfapi_set_trace_level(NFAPI_TRACE_INFO);
+
+  pnf_info* pnf = (pnf_info*)(config->user_data);
+
+#if 0
+  //DJP
+  auto found = std::find_if(pnf->phys.begin(), pnf->phys.end(), [&](phy_info& item)
+      { return item.id == req->header.phy_id; });
+
+  if(found != pnf->phys.end())
+#endif
+  {
+    //DJP phy_info& phy_info = (*found);
+    phy_info* phy_info = pnf->phys;
+
+    nfapi_pnf_p7_config_t* p7_config = nfapi_pnf_p7_config_create();
+
+    p7_config->phy_id = phy->phy_id;
+
+    p7_config->remote_p7_port = phy_info->remote_port;
+    p7_config->remote_p7_addr = phy_info->remote_addr;
+    p7_config->local_p7_port = 32123; // DJP - good grief cannot seem to get the right answer phy_info->local_port;
+    //DJP p7_config->local_p7_addr = (char*)phy_info->local_addr.c_str();
+    p7_config->local_p7_addr = phy_info->local_addr;
+
+    printf("[PNF] P7 remote:%s:%d local:%s:%d\n", p7_config->remote_p7_addr, p7_config->remote_p7_port, p7_config->local_p7_addr, p7_config->local_p7_port);
+
+    p7_config->user_data = phy_info;
+
+    p7_config->malloc = &pnf_allocate;
+    p7_config->free = &pnf_deallocate;
+    p7_config->codec_config.allocate = &pnf_allocate;
+    p7_config->codec_config.deallocate = &pnf_deallocate;
+
+    p7_config->trace = &pnf_nfapi_trace;
+
+    phy->user_data = p7_config;
+
+    p7_config->subframe_buffer_size = phy_info->timing_window;
+    printf("subframe_buffer_size configured using phy_info->timing_window:%d\n", phy_info->timing_window);
+    if(phy_info->timing_info_mode & 0x1)
+    {
+      p7_config->timing_info_mode_periodic = 1;
+      p7_config->timing_info_period = phy_info->timing_info_period;
+    }
+
+    if(phy_info->timing_info_mode & 0x2)
+    {
+      p7_config->timing_info_mode_aperiodic = 1;
+    }
+
+    p7_config->dl_config_req = &pnf_phy_dl_config_req;
+    p7_config->ul_config_req = &pnf_phy_ul_config_req;
+    p7_config->hi_dci0_req = &pnf_phy_hi_dci0_req;
+    p7_config->tx_req = &pnf_phy_tx_req;
+    p7_config->lbt_dl_config_req = &pnf_phy_lbt_dl_config_req;
+
+    memset(&dummy_dl_config_req, 0, sizeof(dummy_dl_config_req));
+    dummy_dl_config_req.dl_config_request_body.tl.tag=NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+    dummy_dl_config_req.dl_config_request_body.number_pdcch_ofdm_symbols=1;
+    dummy_dl_config_req.dl_config_request_body.number_dci=0;
+    dummy_dl_config_req.dl_config_request_body.number_pdu=0;
+    dummy_dl_config_req.dl_config_request_body.number_pdsch_rnti=0;
+    dummy_dl_config_req.dl_config_request_body.transmission_power_pcfich=6000;
+    dummy_dl_config_req.dl_config_request_body.dl_config_pdu_list=0;
+
+    memset(&dummy_tx_req, 0, sizeof(dummy_tx_req));
+    dummy_tx_req.tx_request_body.number_of_pdus=0;
+    dummy_tx_req.tx_request_body.tl.tag=NFAPI_TX_REQUEST_BODY_TAG;
+
+    dummy_subframe.dl_config_req = &dummy_dl_config_req;
+    dummy_subframe.tx_req = 0;//&dummy_tx_req;
+
+    dummy_subframe.ul_config_req=0;
+    dummy_subframe.hi_dci0_req=0;
+    dummy_subframe.lbt_dl_config_req=0;
+
+    p7_config->dummy_subframe = dummy_subframe;
+
+    p7_config->vendor_ext = &pnf_phy_vendor_ext;
+
+    p7_config->allocate_p7_vendor_ext = &pnf_phy_allocate_p7_vendor_ext;
+    p7_config->deallocate_p7_vendor_ext = &pnf_phy_deallocate_p7_vendor_ext;
+
+    p7_config->codec_config.unpack_p7_vendor_extension = &pnf_phy_unpack_p7_vendor_extension;
+    p7_config->codec_config.pack_p7_vendor_extension = &pnf_phy_pack_p7_vendor_extension;
+    p7_config->codec_config.unpack_vendor_extension_tlv = &pnf_phy_unpack_vendor_extension_tlv;
+    p7_config->codec_config.pack_vendor_extension_tlv = &pnf_phy_pack_vendor_extention_tlv;
+
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] Creating P7 thread %s\n", __FUNCTION__);
+    pthread_t p7_thread;
+    pthread_create(&p7_thread, NULL, &pnf_p7_thread_start, p7_config);
+
+    //((pnf_phy_user_data_t*)(phy_info->fapi->user_data))->p7_config = p7_config;
+
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] Calling l1_north_init_eNB() %s\n", __FUNCTION__);
+    l1_north_init_eNB();
+
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] DJP - HACK - Set p7_config global ready for subframe ind%s\n", __FUNCTION__);
+    p7_config_g = p7_config;
+
+    // Need to wait for main thread to create RU structures
+    while(config_sync_var<0)
+    {
+      usleep(5000000);
+      printf("[PNF] waiting for OAI to be configured (eNB/RU)\n");
+    }
+    printf("[PNF] OAI eNB/RU configured\n");
+
+    //printf("[PNF] About to call phy_init_RU() for RC.ru[0]:%p\n", RC.ru[0]);
+    //phy_init_RU(RC.ru[0]);
+
+    printf("[PNF] About to call init_eNB_afterRU()\n");
+    init_eNB_afterRU();
+
+    // Signal to main thread that it can carry on - otherwise RU will startup too quickly and it is not initialised
+    {
+      pthread_mutex_lock(&nfapi_sync_mutex);
+      nfapi_sync_var=0;
+      pthread_cond_broadcast(&nfapi_sync_cond);
+      pthread_mutex_unlock(&nfapi_sync_mutex);
+    }
+
+    while(sync_var<0)
+    {
+      usleep(5000000);
+      printf("[PNF] waiting for OAI to be started\n");
+    }
+
+    printf("[PNF] Sending PNF_START_RESP\n");
+    nfapi_send_pnf_start_resp(config, p7_config->phy_id);
+
+    printf("[PNF] Sending first P7 subframe ind\n");
+    nfapi_pnf_p7_subframe_ind(p7_config, p7_config->phy_id, 0); // DJP - SFN_SF set to zero - correct???
+    printf("[PNF] Sent first P7 subframe ind\n");
+  }
+
+  return 0;
+}
+
+int measurement_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_measurement_request_t* req)
+{
+  nfapi_measurement_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_MEASUREMENT_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_MSG_OK;
+  nfapi_pnf_measurement_resp(config, &resp);
+  return 0;
+}
+
+int rssi_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_rssi_request_t* req)
+{
+  nfapi_rssi_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_RSSI_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_rssi_resp(config, &resp);
+
+  nfapi_rssi_indication_t ind;
+  memset(&ind, 0, sizeof(ind));
+  ind.header.message_id = NFAPI_RSSI_INDICATION;
+  ind.header.phy_id = req->header.phy_id;
+  ind.error_code = NFAPI_P4_MSG_OK;
+  ind.rssi_indication_body.tl.tag = NFAPI_RSSI_INDICATION_TAG;
+  ind.rssi_indication_body.number_of_rssi = 1;
+  ind.rssi_indication_body.rssi[0] = -42;
+  nfapi_pnf_rssi_ind(config, &ind);
+  return 0;
+}
+
+int cell_search_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_cell_search_request_t* req)
+{
+  nfapi_cell_search_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_CELL_SEARCH_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_cell_search_resp(config, &resp);
+
+  nfapi_cell_search_indication_t ind;
+  memset(&ind, 0, sizeof(ind));
+  ind.header.message_id = NFAPI_CELL_SEARCH_INDICATION;
+  ind.header.phy_id = req->header.phy_id;
+  ind.error_code = NFAPI_P4_MSG_OK;
+
+  switch(req->rat_type)
+  {
+    case NFAPI_RAT_TYPE_LTE:
+      {
+        ind.lte_cell_search_indication.tl.tag = NFAPI_LTE_CELL_SEARCH_INDICATION_TAG;
+        ind.lte_cell_search_indication.number_of_lte_cells_found = 1;
+        ind.lte_cell_search_indication.lte_found_cells[0].pci = 123;
+        ind.lte_cell_search_indication.lte_found_cells[0].rsrp = 123;
+        ind.lte_cell_search_indication.lte_found_cells[0].rsrq = 123;
+        ind.lte_cell_search_indication.lte_found_cells[0].frequency_offset = 123;
+      }
+      break;
+    case NFAPI_RAT_TYPE_UTRAN:
+      {
+        ind.utran_cell_search_indication.tl.tag = NFAPI_UTRAN_CELL_SEARCH_INDICATION_TAG;
+        ind.utran_cell_search_indication.number_of_utran_cells_found = 1;
+        ind.utran_cell_search_indication.utran_found_cells[0].psc = 89;
+        ind.utran_cell_search_indication.utran_found_cells[0].rscp = 89;
+        ind.utran_cell_search_indication.utran_found_cells[0].ecno = 89;
+        ind.utran_cell_search_indication.utran_found_cells[0].frequency_offset = -89;
+
+      }
+      break;
+    case NFAPI_RAT_TYPE_GERAN:
+      {
+        ind.geran_cell_search_indication.tl.tag = NFAPI_GERAN_CELL_SEARCH_INDICATION_TAG;
+        ind.geran_cell_search_indication.number_of_gsm_cells_found = 1;
+        ind.geran_cell_search_indication.gsm_found_cells[0].bsic = 23;
+        ind.geran_cell_search_indication.gsm_found_cells[0].rxlev = 23;
+        ind.geran_cell_search_indication.gsm_found_cells[0].rxqual = 23;
+        ind.geran_cell_search_indication.gsm_found_cells[0].frequency_offset = -23;
+        ind.geran_cell_search_indication.gsm_found_cells[0].sfn_offset = 230;
+
+      }
+      break;
+  }
+
+  ind.pnf_cell_search_state.tl.tag = NFAPI_PNF_CELL_SEARCH_STATE_TAG;
+  ind.pnf_cell_search_state.length = 3;
+
+  nfapi_pnf_cell_search_ind(config, &ind);	
+
+  return 0;
+}
+
+int broadcast_detect_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_broadcast_detect_request_t* req)
+{
+  nfapi_broadcast_detect_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_BROADCAST_DETECT_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_broadcast_detect_resp(config, &resp);
+
+  nfapi_broadcast_detect_indication_t ind;
+  memset(&ind, 0, sizeof(ind));
+  ind.header.message_id = NFAPI_BROADCAST_DETECT_INDICATION;
+  ind.header.phy_id = req->header.phy_id;
+  ind.error_code = NFAPI_P4_MSG_OK;
+
+  switch(req->rat_type)
+  {
+    case NFAPI_RAT_TYPE_LTE:
+      {
+        ind.lte_broadcast_detect_indication.tl.tag = NFAPI_LTE_BROADCAST_DETECT_INDICATION_TAG;
+        ind.lte_broadcast_detect_indication.number_of_tx_antenna = 1;
+        ind.lte_broadcast_detect_indication.mib_length = 4;
+        //ind.lte_broadcast_detect_indication.mib...
+        ind.lte_broadcast_detect_indication.sfn_offset = 77;
+
+      }
+      break;
+    case NFAPI_RAT_TYPE_UTRAN:
+      {
+        ind.utran_broadcast_detect_indication.tl.tag = NFAPI_UTRAN_BROADCAST_DETECT_INDICATION_TAG;
+        ind.utran_broadcast_detect_indication.mib_length = 4;
+        //ind.utran_broadcast_detect_indication.mib...
+        // ind.utran_broadcast_detect_indication.sfn_offset; DJP - nonsense line
+
+      }
+      break;
+  }
+
+  ind.pnf_cell_broadcast_state.tl.tag = NFAPI_PNF_CELL_BROADCAST_STATE_TAG;
+  ind.pnf_cell_broadcast_state.length = 3;
+
+  nfapi_pnf_broadcast_detect_ind(config, &ind);	
+
+  return 0;
+}
+
+int system_information_schedule_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_system_information_schedule_request_t* req)
+{
+  nfapi_system_information_schedule_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_system_information_schedule_resp(config, &resp);
+
+  nfapi_system_information_schedule_indication_t ind;
+  memset(&ind, 0, sizeof(ind));
+  ind.header.message_id = NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION;
+  ind.header.phy_id = req->header.phy_id;
+  ind.error_code = NFAPI_P4_MSG_OK;
+
+  ind.lte_system_information_indication.tl.tag = NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG;
+  ind.lte_system_information_indication.sib_type = 3;
+  ind.lte_system_information_indication.sib_length = 5;
+  //ind.lte_system_information_indication.sib...
+
+  nfapi_pnf_system_information_schedule_ind(config, &ind);		
+
+  return 0;
+}
+
+int system_information_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_system_information_request_t* req)
+{
+  nfapi_system_information_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_SYSTEM_INFORMATION_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_system_information_resp(config, &resp);
+
+  nfapi_system_information_indication_t ind;
+  memset(&ind, 0, sizeof(ind));
+  ind.header.message_id = NFAPI_SYSTEM_INFORMATION_INDICATION;
+  ind.header.phy_id = req->header.phy_id;
+  ind.error_code = NFAPI_P4_MSG_OK;
+
+  switch(req->rat_type)
+  {
+    case NFAPI_RAT_TYPE_LTE:
+      {
+        ind.lte_system_information_indication.tl.tag = NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG;
+        ind.lte_system_information_indication.sib_type = 1;
+        ind.lte_system_information_indication.sib_length = 3;
+        //ind.lte_system_information_indication.sib...
+      }
+      break;
+    case NFAPI_RAT_TYPE_UTRAN:
+      {
+        ind.utran_system_information_indication.tl.tag = NFAPI_UTRAN_SYSTEM_INFORMATION_INDICATION_TAG;
+        ind.utran_system_information_indication.sib_length = 3;
+        //ind.utran_system_information_indication.sib...
+
+      }
+      break;
+    case NFAPI_RAT_TYPE_GERAN:
+      {
+        ind.geran_system_information_indication.tl.tag = NFAPI_GERAN_SYSTEM_INFORMATION_INDICATION_TAG;
+        ind.geran_system_information_indication.si_length = 3;
+        //ind.geran_system_information_indication.si...
+
+      }
+      break;
+  }
+
+  nfapi_pnf_system_information_ind(config, &ind);		
+
+  return 0;
+}
+
+int nmm_stop_request(nfapi_pnf_config_t* config, nfapi_pnf_phy_config_t* phy, nfapi_nmm_stop_request_t* req)
+{
+  nfapi_nmm_stop_response_t resp;
+  memset(&resp, 0, sizeof(resp));
+  resp.header.message_id = NFAPI_NMM_STOP_RESPONSE;
+  resp.header.phy_id = req->header.phy_id;
+  resp.error_code = NFAPI_P4_MSG_OK;
+  nfapi_pnf_nmm_stop_resp(config, &resp);
+  return 0;
+}
+
+int vendor_ext(nfapi_pnf_config_t* config, nfapi_p4_p5_message_header_t* msg)
+{
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] P5 %s %p\n", __FUNCTION__, msg);
+
+  switch(msg->message_id)
+  {
+    case P5_VENDOR_EXT_REQ:
+      {
+        vendor_ext_p5_req* req = (vendor_ext_p5_req*)msg;
+        NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] P5 Vendor Ext Req (%d %d)\n", req->dummy1, req->dummy2);
+        // send back the P5_VENDOR_EXT_RSP
+        vendor_ext_p5_rsp rsp;
+        memset(&rsp, 0, sizeof(rsp));
+        rsp.header.message_id = P5_VENDOR_EXT_RSP;
+        rsp.error_code = NFAPI_MSG_OK;
+        nfapi_pnf_vendor_extension(config, &rsp.header, sizeof(vendor_ext_p5_rsp));
+      }
+      break;
+  }
+
+  return 0;
+}
+
+nfapi_p4_p5_message_header_t* pnf_sim_allocate_p4_p5_vendor_ext(uint16_t message_id, uint16_t* msg_size)
+{
+  if(message_id == P5_VENDOR_EXT_REQ)
+  {
+    (*msg_size) = sizeof(vendor_ext_p5_req);
+    return (nfapi_p4_p5_message_header_t*)malloc(sizeof(vendor_ext_p5_req));
+  }
+
+  return 0;
+}
+
+void pnf_sim_deallocate_p4_p5_vendor_ext(nfapi_p4_p5_message_header_t* header)
+{
+  free(header);
+}
+
+int pnf_sim_pack_p4_p5_vendor_extension(nfapi_p4_p5_message_header_t* header, uint8_t** ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* config)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+  if(header->message_id == P5_VENDOR_EXT_RSP)
+  {
+    vendor_ext_p5_rsp* rsp = (vendor_ext_p5_rsp*)(header);
+    return (!push16(rsp->error_code, ppWritePackedMsg, end));
+  }
+  return 0;
+}
+
+int pnf_sim_unpack_p4_p5_vendor_extension(nfapi_p4_p5_message_header_t* header, uint8_t** ppReadPackedMessage, uint8_t *end, nfapi_p4_p5_codec_config_t* codec)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+  if(header->message_id == P5_VENDOR_EXT_REQ)
+  {
+    vendor_ext_p5_req* req = (vendor_ext_p5_req*)(header);
+    return (!(pull16(ppReadPackedMessage, &req->dummy1, end) &&
+          pull16(ppReadPackedMessage, &req->dummy2, end)));
+
+    //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s (%d %d)\n", __FUNCTION__, req->dummy1, req->dummy2);
+  }
+  return 0;
+}
+
+/*------------------------------------------------------------------------------*/
+
+void* pnf_start_thread(void* ptr)
+{
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] IN PNF NFAPI start thread %s\n", __FUNCTION__);
+
+  nfapi_pnf_config_t *config = (nfapi_pnf_config_t*)ptr;
+
+  struct sched_param sp;
+  sp.sched_priority = 20;
+  pthread_setschedparam(pthread_self(),SCHED_FIFO,&sp);
+
+  nfapi_pnf_start(config);
+
+  return (void*)0;
+}
+
+void configure_nfapi_pnf(char *vnf_ip_addr, int vnf_p5_port, char *pnf_ip_addr, int pnf_p7_port, int vnf_p7_port)
+{
+  printf("%s() PNF\n\n\n\n\n\n", __FUNCTION__);
+
+  nfapi_mode = 1;  // PNF!
+
+  nfapi_pnf_config_t* config = nfapi_pnf_config_create();
+
+  config->vnf_ip_addr = vnf_ip_addr;
+  config->vnf_p5_port = vnf_p5_port;
+
+  pnf.phys[0].udp.enabled = 1;
+  pnf.phys[0].udp.rx_port = pnf_p7_port;
+  pnf.phys[0].udp.tx_port = vnf_p7_port;
+  strcpy(pnf.phys[0].udp.tx_addr, vnf_ip_addr);
+
+  strcpy(pnf.phys[0].local_addr, pnf_ip_addr);
+
+  printf("%s() VNF:%s:%d PNF_PHY[addr:%s UDP:tx_addr:%s:%d rx:%d]\n", 
+      __FUNCTION__, 
+      config->vnf_ip_addr, config->vnf_p5_port, 
+      pnf.phys[0].local_addr,
+      pnf.phys[0].udp.tx_addr, pnf.phys[0].udp.tx_port,
+      pnf.phys[0].udp.rx_port);
+
+  config->pnf_param_req = &pnf_param_request;
+  config->pnf_config_req = &pnf_config_request;
+  config->pnf_start_req = &pnf_start_request;
+  config->pnf_stop_req = &pnf_stop_request;
+  config->param_req = &param_request;
+  config->config_req = &config_request;
+  config->start_req = &start_request;
+
+  config->measurement_req = &measurement_request;
+  config->rssi_req = &rssi_request;
+  config->cell_search_req = &cell_search_request;
+  config->broadcast_detect_req = &broadcast_detect_request;
+  config->system_information_schedule_req = &system_information_schedule_request;
+  config->system_information_req = &system_information_request;
+  config->nmm_stop_req = &nmm_stop_request;
+
+  config->vendor_ext = &vendor_ext;
+
+  config->trace = &pnf_nfapi_trace;
+
+  config->user_data = &pnf;
+
+  // To allow custom vendor extentions to be added to nfapi
+  config->codec_config.unpack_vendor_extension_tlv = &pnf_sim_unpack_vendor_extension_tlv;
+  config->codec_config.pack_vendor_extension_tlv = &pnf_sim_pack_vendor_extention_tlv;
+
+  config->allocate_p4_p5_vendor_ext = &pnf_sim_allocate_p4_p5_vendor_ext;
+  config->deallocate_p4_p5_vendor_ext = &pnf_sim_deallocate_p4_p5_vendor_ext;
+
+  config->codec_config.unpack_p4_p5_vendor_extension = &pnf_sim_unpack_p4_p5_vendor_extension;
+  config->codec_config.pack_p4_p5_vendor_extension = &pnf_sim_pack_p4_p5_vendor_extension;
+
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] Creating PNF NFAPI start thread %s\n", __FUNCTION__);
+  pthread_create(&pnf_start_pthread, NULL, &pnf_start_thread, config);
+
+  pthread_setname_np(pnf_start_pthread, "NFAPI_PNF");
+
+}
+
+void oai_subframe_ind(uint16_t sfn, uint16_t sf)
+{
+  //LOG_D(PHY,"%s(sfn:%d, sf:%d)\n", __FUNCTION__, sfn, sf);
+
+  //TODO FIXME - HACK - DJP - using a global to bodge it in 
+
+  if (p7_config_g != NULL && sync_var==0)
+  {
+    uint16_t sfn_sf_tx = sfn<<4 | sf;
+
+    if ((sfn % 100 == 0) && sf==0)
+    {
+      struct timespec ts;
+
+      clock_gettime(CLOCK_MONOTONIC, &ts);
+
+      NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] %s %d.%d (sfn:%u sf:%u) SFN/SF(TX):%u\n", __FUNCTION__, ts.tv_sec, ts.tv_nsec, sfn, sf, NFAPI_SFNSF2DEC(sfn_sf_tx));
+    }
+
+    int subframe_ret = nfapi_pnf_p7_subframe_ind(p7_config_g, p7_config_g->phy_id, sfn_sf_tx);
+
+    if (subframe_ret)
+    {
+      NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF] %s(frame:%u subframe:%u) SFN/SF(TX):%u - PROBLEM with pnf_p7_subframe_ind()\n", __FUNCTION__, sfn, sf, sfn_sf_tx, NFAPI_SFNSF2DEC(sfn_sf_tx));
+    }
+    else
+    {
+      //NFAPI_TRACE(NFAPI_TRACE_INFO, "***NFAPI subframe handler finished *** \n");
+    }
+  }
+  else
+  {
+  }
+}
+
+int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind)
+{
+  rach_ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+
+  LOG_E(PHY, "%s() sfn_sf:%d preambles:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(rach_ind->sfn_sf), rach_ind->rach_indication_body.number_of_preambles);
+
+  return nfapi_pnf_p7_rach_ind(p7_config_g, rach_ind);
+}
+
+int oai_nfapi_harq_indication(nfapi_harq_indication_t *harq_ind)
+{
+  harq_ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+  harq_ind->header.message_id = NFAPI_HARQ_INDICATION;
+
+  LOG_E(PHY, "%s() sfn_sf:%d number_of_harqs:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(harq_ind->sfn_sf), harq_ind->harq_indication_body.number_of_harqs);
+
+  int retval = nfapi_pnf_p7_harq_ind(p7_config_g, harq_ind);
+
+  if (retval != 0) LOG_E(PHY, "%s() sfn_sf:%d number_of_harqs:%d nfapi_pnf_p7_harq_ind()=%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(harq_ind->sfn_sf), harq_ind->harq_indication_body.number_of_harqs, retval);
+  return retval;
+}
+
+int oai_nfapi_crc_indication(nfapi_crc_indication_t *crc_ind)
+{
+  crc_ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+  crc_ind->header.message_id = NFAPI_CRC_INDICATION;
+
+  //LOG_E(PHY, "%s() sfn_sf:%d number_of_crcs:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(crc_ind->sfn_sf), crc_ind->crc_indication_body.number_of_crcs);
+
+  return nfapi_pnf_p7_crc_ind(p7_config_g, crc_ind);
+}
+
+int oai_nfapi_cqi_indication(nfapi_cqi_indication_t *ind)
+{
+  ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+  ind->header.message_id = NFAPI_RX_CQI_INDICATION;
+
+  //LOG_E(PHY, "%s() sfn_sf:%d number_of_cqis:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->cqi_indication_body.number_of_cqis);
+
+  return nfapi_pnf_p7_cqi_ind(p7_config_g, ind);
+}
+
+int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind)
+{
+  ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+  ind->header.message_id = NFAPI_RX_ULSCH_INDICATION;
+
+  int retval = nfapi_pnf_p7_rx_ind(p7_config_g, ind);
+
+  //LOG_D(PHY,"%s() SFN/SF:%d pdus:%d retval:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->rx_indication_body.number_of_pdus, retval);
+
+  //free(ind.rx_indication_body.rx_pdu_list);
+
+  return retval;
+}
+
+int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind)
+{
+  ind->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+
+  int retval = nfapi_pnf_p7_sr_ind(p7_config_g, ind);
+
+  //LOG_E(PHY,"%s() SFN/SF:%d srs:%d retval:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->sr_indication_body.number_of_srs, retval);
+
+  //free(ind.rx_indication_body.rx_pdu_list);
+
+  return retval;
+}
diff --git a/nfapi/nfapi_pnf.h b/nfapi/nfapi_pnf.h
new file mode 100644
index 0000000000000000000000000000000000000000..12f2f8e9927c21e272412a0edd213c151d770fac
--- /dev/null
+++ b/nfapi/nfapi_pnf.h
@@ -0,0 +1,6 @@
+#if !defined(NFAPI_PNF_H__)
+#define NFAPI_PNF_H__
+
+void configure_nfapi_pnf(char *vnf_ip_addr, int vnf_p5_port, char *pnf_ip_addr, int pnf_p7_port, int vnf_p7_port);
+
+#endif
diff --git a/nfapi/nfapi_vnf.c b/nfapi/nfapi_vnf.c
new file mode 100644
index 0000000000000000000000000000000000000000..d987ad732b4a7d54ffb754b6d920e2325d1264c9
--- /dev/null
+++ b/nfapi/nfapi_vnf.c
@@ -0,0 +1,1512 @@
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include "nfapi_interface.h"
+#include "nfapi_vnf_interface.h"
+#include "nfapi.h"
+#include "vendor_ext.h"
+
+#include "nfapi_vnf.h"
+
+
+#include "common/ran_context.h"
+//#include "openair1/PHY/vars.h"
+extern RAN_CONTEXT_t RC;
+
+typedef struct 
+{
+	//public:
+		uint8_t enabled;
+		uint32_t rx_port;
+		uint32_t tx_port;
+		//std::string tx_addr;
+		char tx_addr[80];
+} udp_data;
+
+//class phy_info
+//DJP
+typedef struct 
+{
+#if 0
+	public:
+
+		phy_info()
+			: first_subframe_ind(0), fapi(0),
+			  dl_ues_per_subframe(0), ul_ues_per_subframe(0), 
+			  timing_window(0), timing_info_mode(0), timing_info_period(0)
+		{
+			index = 0;
+			id = 0;
+
+			local_port = 0;
+			remote_addr = 0;
+			remote_port = 0;
+	
+			duplex_mode = 0;
+			dl_channel_bw_support = 0;
+			ul_channel_bw_support = 0;
+			num_dl_layers_supported = 0;
+			num_ul_layers_supported = 0;
+			release_supported = 0;
+			nmm_modes_supported = 0;
+		}
+#endif
+
+		uint16_t index;
+		uint16_t id;
+		//std::vector<uint8_t> rfs;
+		//std::vector<uint8_t> excluded_rfs;
+		uint8_t rfs[2];
+		uint8_t excluded_rfs[2];
+
+		udp_data udp;
+
+		//std::string local_addr;
+		char local_addr[80];
+		int local_port;
+
+		char* remote_addr;
+		int remote_port;
+
+		uint8_t duplex_mode;
+		uint16_t dl_channel_bw_support;
+		uint16_t ul_channel_bw_support;
+		uint8_t num_dl_layers_supported;
+		uint8_t num_ul_layers_supported;
+		uint16_t release_supported;
+		uint8_t nmm_modes_supported;
+
+		uint8_t dl_ues_per_subframe;
+		uint8_t ul_ues_per_subframe;
+
+		uint8_t first_subframe_ind;
+
+		// timing information recevied from the vnf
+		uint8_t timing_window;
+		uint8_t timing_info_mode;
+		uint8_t timing_info_period;
+
+    // DJP
+		//fapi_t* fapi;
+
+} phy_info;
+
+//class rf_info
+//DJP
+typedef struct 
+{
+	//public:
+		uint16_t index;
+		uint16_t band;
+		int16_t max_transmit_power;
+		int16_t min_transmit_power;
+		uint8_t num_antennas_supported;
+		uint32_t min_downlink_frequency;
+		uint32_t max_downlink_frequency;
+		uint32_t max_uplink_frequency;
+		uint32_t min_uplink_frequency;
+} rf_info;
+
+
+//class pnf_info
+//DJP
+typedef struct 
+{
+#if 0
+	public:
+
+		pnf_info() 
+		: release(13), wireshark_test_mode(0),
+		  max_total_power(0), oui(0)
+					
+		{
+			release = 0;
+	
+			sync_mode = 0;
+			location_mode = 0;
+			dl_config_timing = 0;
+			ul_config_timing = 0;
+			tx_timing = 0;
+			hi_dci0_timing = 0;
+	
+			max_phys = 0;
+			max_total_bw = 0;
+			max_total_dl_layers = 0;
+			max_total_ul_layers = 0;
+			shared_bands = 0;
+			shared_pa = 0;
+			
+		}
+#endif
+
+		int release;
+		//DJPstd::vector<phy_info> phys;
+		//std::vector<rf_info> rfs;
+		phy_info phys[2];
+		rf_info rfs[2];
+
+		uint8_t sync_mode;
+		uint8_t location_mode;
+		uint8_t location_coordinates[6];
+		uint32_t dl_config_timing;
+		uint32_t ul_config_timing;
+		uint32_t tx_timing;
+		uint32_t hi_dci0_timing;
+
+		uint16_t max_phys;
+		uint16_t max_total_bw;
+		uint16_t max_total_dl_layers;
+		uint16_t max_total_ul_layers;
+		uint8_t shared_bands;
+		uint8_t shared_pa;
+		int16_t max_total_power;
+		uint8_t oui;
+		
+		uint8_t wireshark_test_mode;
+
+} pnf_info;
+
+typedef struct mac mac_t;
+
+typedef struct mac
+{
+	void* user_data;
+
+	void (*dl_config_req)(mac_t* mac, nfapi_dl_config_request_t* req);
+	void (*ul_config_req)(mac_t* mac, nfapi_ul_config_request_t* req);
+	void (*hi_dci0_req)(mac_t* mac, nfapi_hi_dci0_request_t* req);
+	void (*tx_req)(mac_t* mac, nfapi_tx_request_t* req);
+} mac_t;
+
+//class vnf_p7_info
+typedef struct 
+{
+	//public:
+
+#if 0
+		vnf_p7_info()
+			: thread_started(false), 
+			  config(nfapi_vnf_p7_config_create(), 
+				     [] (nfapi_vnf_p7_config_t* f) { nfapi_vnf_p7_config_destory(f); }),
+			  mac(0)
+		{
+			local_port = 0;
+			
+			timing_window = 0;
+			periodic_timing_enabled = 0;
+			aperiodic_timing_enabled = 0;
+			periodic_timing_period = 0;
+			
+			//config = nfapi_vnf_p7_config_create();
+		}
+		
+		vnf_p7_info(const vnf_p7_info& other)  = default;
+		
+		vnf_p7_info(vnf_p7_info&& other) = default;
+		
+		vnf_p7_info& operator=(const vnf_p7_info&) = default;
+		
+		vnf_p7_info& operator=(vnf_p7_info&&) = default;
+		
+		
+		
+		virtual	~vnf_p7_info()
+		{
+			//NFAPI_TRACE(NFAPI_TRACE_INFO, "*** vnf_p7_info delete ***\n");
+			
+			//nfapi_vnf_p7_config_destory(config);
+			
+			// should we delete the mac?
+		}
+#endif
+		
+
+		int local_port;
+		//DJP std::string local_addr;
+		char local_addr[80];
+
+		unsigned timing_window;
+		unsigned periodic_timing_enabled;
+		unsigned aperiodic_timing_enabled;
+		unsigned periodic_timing_period;
+
+		// This is not really the right place if we have multiple PHY, 
+		// should be part of the phy struct
+		udp_data udp;
+
+		uint8_t thread_started;
+
+		nfapi_vnf_p7_config_t* config;
+		//std::shared_ptr<nfapi_vnf_p7_config_t> config;
+
+		mac_t* mac;
+
+} vnf_p7_info;
+
+//class vnf_info
+typedef struct
+{
+	//public:
+	
+		uint8_t wireshark_test_mode;
+
+		//std::map<uint16_t, pnf_info> pnfs;
+		pnf_info pnfs[2];
+
+		//std::vector<vnf_p7_info> p7_vnfs;
+		vnf_p7_info p7_vnfs[2];
+} vnf_info;
+
+int vnf_pack_vendor_extension_tlv(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* codec)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "vnf_pack_vendor_extension_tlv\n");
+  nfapi_tl_t* tlv = (nfapi_tl_t*)ve;
+  switch(tlv->tag)
+  {
+    case VENDOR_EXT_TLV_2_TAG:
+      {
+        //NFAPI_TRACE(NFAPI_TRACE_INFO, "Packing VENDOR_EXT_TLV_2\n");
+        vendor_ext_tlv_2* ve = (vendor_ext_tlv_2*)tlv;
+        if(!push32(ve->dummy, ppWritePackedMsg, end))
+          return 0;
+        return 1;
+      }
+      break;
+  }
+  return -1;
+}
+int vnf_unpack_vendor_extension_tlv(nfapi_tl_t* tl, uint8_t **ppReadPackedMessage, uint8_t *end, void** ve, nfapi_p4_p5_codec_config_t* codec)
+{
+  return -1;
+}
+
+void install_schedule_handlers(IF_Module_t *if_inst);
+extern int single_thread_flag;
+extern void init_eNB_afterRU(void);
+extern uint16_t sf_ahead;
+
+void oai_create_enb(void)
+{
+  int bodge_counter=0;
+  PHY_VARS_eNB *eNB = RC.eNB[0][0];
+
+  printf("[VNF] RC.eNB[0][0]. Mod_id:%d CC_id:%d nb_CC[0]:%d abstraction_flag:%d single_thread_flag:%d td:%p te:%p if_inst:%p\n", eNB->Mod_id, eNB->CC_id, RC.nb_CC[0], eNB->abstraction_flag, eNB->single_thread_flag, eNB->td, eNB->te, eNB->if_inst);
+
+  eNB->Mod_id  = bodge_counter;
+  eNB->CC_id   = bodge_counter;
+  eNB->abstraction_flag   = 0;
+  eNB->single_thread_flag = 0;//single_thread_flag;
+  eNB->td                   = ulsch_decoding_data;//(single_thread_flag==1) ? ulsch_decoding_data_2thread : ulsch_decoding_data;
+  eNB->te                   = dlsch_encoding;//(single_thread_flag==1) ? dlsch_encoding_2threads : dlsch_encoding;
+
+  RC.nb_CC[bodge_counter] = 1;
+
+  if (eNB->if_inst==0) {
+    eNB->if_inst = IF_Module_init(bodge_counter);
+  }
+
+  // This will cause phy_config_request to be installed. That will result in RRC configuring the PHY
+  // that will result in eNB->configured being set to TRUE.
+  // See we need to wait for that to happen otherwise the NFAPI message exchanges won't contain the right parameter values
+  if (RC.eNB[0][0]->if_inst==0 || RC.eNB[0][0]->if_inst->PHY_config_req==0 || RC.eNB[0][0]->if_inst->schedule_response==0)
+  {
+    printf("RC.eNB[0][0]->if_inst->PHY_config_req is not installed - install it\n");
+    install_schedule_handlers(RC.eNB[0][0]->if_inst);
+  }
+
+  do {
+    printf("%s() Waiting for eNB to become configured (by RRC/PHY) - need to wait otherwise NFAPI messages won't contain correct values\n", __FUNCTION__);
+    usleep(50000);
+  } while(eNB->configured != 1);
+  printf("%s() eNB is now configured\n", __FUNCTION__);
+}
+
+void oai_enb_init(void)
+{
+  printf("%s() About to call init_eNB_afterRU()\n", __FUNCTION__);
+  init_eNB_afterRU();
+}
+
+int pnf_connection_indication_cb(nfapi_vnf_config_t* config, int p5_idx)
+{
+  printf("[VNF] pnf connection indication idx:%d\n", p5_idx);
+
+  //pnf_info pnf;
+  //vnf_info* vnf = (vnf_info*)(config->user_data);
+  //vnf->pnfs.insert(std::pair<uint16_t, pnf_info>(p5_idx, pnf));
+
+  oai_create_enb();
+
+  nfapi_pnf_param_request_t req;
+  memset(&req, 0, sizeof(req));
+  req.header.message_id = NFAPI_PNF_PARAM_REQUEST;
+  nfapi_vnf_pnf_param_req(config, p5_idx, &req);
+  return 0;
+}
+
+int pnf_disconnection_indication_cb(nfapi_vnf_config_t* config, int p5_idx)
+{
+  printf("[VNF] pnf disconnection indication idx:%d\n", p5_idx);
+
+  vnf_info* vnf = (vnf_info*)(config->user_data);
+#if 0
+  auto find_result = vnf->pnfs.find(p5_idx);
+
+  if(find_result != vnf->pnfs.end())
+  {
+    pnf_info& pnf = find_result->second;
+
+    for(phy_info& phy : pnf.phys)
+    {
+      vnf_p7_info& p7_vnf = vnf->p7_vnfs[0];
+      nfapi_vnf_p7_del_pnf((p7_vnf.config.get()), phy.id);
+    }
+  }
+#else
+  pnf_info *pnf = vnf->pnfs;
+  phy_info *phy = pnf->phys;
+
+  vnf_p7_info* p7_vnf = vnf->p7_vnfs;
+  // DJP nfapi_vnf_p7_del_pnf((p7_vnf->config.get()), phy->id);
+  nfapi_vnf_p7_del_pnf((p7_vnf->config), phy->id);
+#endif
+
+  return 0;
+}
+
+int pnf_param_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_pnf_param_response_t* resp)
+{
+  printf("[VNF] pnf param response idx:%d error:%d\n", p5_idx, resp->error_code);
+
+  vnf_info* vnf = (vnf_info*)(config->user_data);
+
+#if 0
+  auto find_result = vnf->pnfs.find(p5_idx);
+  if(find_result != vnf->pnfs.end())
+  {
+    pnf_info& pnf = find_result->second;
+#else
+    {
+      pnf_info *pnf = vnf->pnfs;
+#endif
+
+      for(int i = 0; i < resp->pnf_phy.number_of_phys; ++i)
+      {
+        phy_info phy;
+        phy.index = resp->pnf_phy.phy[i].phy_config_index;
+
+        printf("[VNF] (PHY:%d) phy_config_idx:%d\n", i, resp->pnf_phy.phy[i].phy_config_index);
+
+        nfapi_vnf_allocate_phy(config, p5_idx, &(phy.id));
+
+        for(int j = 0; j < resp->pnf_phy.phy[i].number_of_rfs; ++j)
+        {
+          printf("[VNF] (PHY:%d) (RF%d) %d\n", i, j, resp->pnf_phy.phy[i].rf_config[j].rf_config_index);
+          phy.rfs[0] = resp->pnf_phy.phy[i].rf_config[j].rf_config_index;
+        }
+
+        pnf->phys[0] = phy;
+      }
+
+      for(int i = 0; i < resp->pnf_rf.number_of_rfs; ++i)
+      {
+        rf_info rf;
+        rf.index = resp->pnf_rf.rf[i].rf_config_index;
+
+        printf("[VNF] (RF:%d) rf_config_idx:%d\n", i, resp->pnf_rf.rf[i].rf_config_index);
+
+        pnf->rfs[0] = rf;
+    }
+
+    nfapi_pnf_config_request_t req;
+    memset(&req, 0, sizeof(req));
+    req.header.message_id = NFAPI_PNF_CONFIG_REQUEST;
+
+    req.pnf_phy_rf_config.tl.tag = NFAPI_PNF_PHY_RF_TAG;
+    req.pnf_phy_rf_config.number_phy_rf_config_info = 2; // DJP pnf.phys.size();
+    printf("DJP:Hard coded num phy rf to 2\n");
+
+    // DJP for(unsigned i = 0; i < pnf.phys.size(); ++i)
+    for(unsigned i = 0; i < 2; ++i)
+    {
+      req.pnf_phy_rf_config.phy_rf_config[i].phy_id = pnf->phys[i].id;
+      req.pnf_phy_rf_config.phy_rf_config[i].phy_config_index = pnf->phys[i].index;
+      req.pnf_phy_rf_config.phy_rf_config[i].rf_config_index = pnf->phys[i].rfs[0];
+    }
+
+    nfapi_vnf_pnf_config_req(config, p5_idx, &req);
+  }
+  return 0;
+}
+
+int pnf_config_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_pnf_config_response_t* resp)
+{
+  printf("[VNF] pnf config response idx:%d resp[header[phy_id:%u message_id:%02x message_length:%u]]\n", p5_idx, resp->header.phy_id, resp->header.message_id, resp->header.message_length);
+
+  if(1)
+  {
+    //vnf_info* vnf = (vnf_info*)(config->user_data);
+#if 0
+    auto find_result = vnf->pnfs.find(p5_idx);
+    if(find_result != vnf->pnfs.end())
+    {
+      //pnf_info& pnf = find_result->second;
+    }
+#else
+      nfapi_pnf_start_request_t req;
+      memset(&req, 0, sizeof(req));
+      req.header.phy_id = resp->header.phy_id;
+      req.header.message_id = NFAPI_PNF_START_REQUEST;
+      nfapi_vnf_pnf_start_req(config, p5_idx, &req);
+#endif
+  }
+  else
+  {
+    // Rather than send the pnf_start_request we will demonstrate
+    // sending a vendor extention message. The start request will be
+    // send when the vendor extension response is received 
+
+    //vnf_info* vnf = (vnf_info*)(config->user_data);
+    vendor_ext_p5_req req;
+    memset(&req, 0, sizeof(req));
+    req.header.message_id = P5_VENDOR_EXT_REQ;
+    req.dummy1 = 45;
+    req.dummy2 = 1977;
+    nfapi_vnf_vendor_extension(config, p5_idx, &req.header);
+  }
+  return 0;
+}
+
+int wake_eNB_rxtx(PHY_VARS_eNB *eNB, uint16_t sfn, uint16_t sf)
+{
+  eNB_proc_t *proc=&eNB->proc;
+
+  eNB_rxtx_proc_t *proc_rxtx=&proc->proc_rxtx[sf&1];
+
+  LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
+
+  //printf("%s(eNB:%p, sfn:%d, sf:%d)\n", __FUNCTION__, eNB, sfn, sf);
+
+  //int i;
+  struct timespec wait;
+
+  wait.tv_sec=0;
+  wait.tv_nsec=5000000L;
+
+#if 0
+  /* accept some delay in processing - up to 5ms */
+  for (i = 0; i < 10 && proc_rxtx->instance_cnt_rxtx == 0; i++) {
+    LOG_W( PHY,"[eNB] sfn/sf:%d:%d proc_rxtx[%d]:TXsfn:%d/%d eNB RXn-TXnp4 thread busy!! (cnt_rxtx %i)\n", sfn, sf, sf&1, proc_rxtx->frame_tx, proc_rxtx->subframe_tx, proc_rxtx->instance_cnt_rxtx);
+    usleep(500);
+  }
+  if (proc_rxtx->instance_cnt_rxtx == 0) {
+    exit_fun( "TX thread busy" );
+    return(-1);
+  }
+#endif
+
+  // wake up TX for subframe n+sf_ahead
+  // lock the TX mutex and make sure the thread is ready
+  if (pthread_mutex_timedlock(&proc_rxtx->mutex_rxtx,&wait) != 0) {
+    LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RXTX thread %d (IC %d)\n", proc_rxtx->subframe_rx&1,proc_rxtx->instance_cnt_rxtx );
+    exit_fun( "error locking mutex_rxtx" );
+    return(-1);
+  }
+
+  {
+    static uint16_t old_sf = 0;
+    static uint16_t old_sfn = 0;
+
+    proc->subframe_rx = old_sf;
+    proc->frame_rx = old_sfn;
+
+    // Try to be 1 frame back
+    old_sf = sf;
+    old_sfn = sfn;
+
+    if (old_sf == 0 && old_sfn % 100==0) LOG_W( PHY,"[eNB] sfn/sf:%d%d old_sfn/sf:%d%d proc[rx:%d%d]\n", sfn, sf, old_sfn, old_sf, proc->frame_rx, proc->subframe_rx);
+  }
+
+  ++proc_rxtx->instance_cnt_rxtx;
+
+  //LOG_E( PHY,"[VNF-subframe_ind] sfn/sf:%d:%d proc[frame_rx:%d subframe_rx:%d] proc_rxtx->instance_cnt_rxtx:%d \n", sfn, sf, proc->frame_rx, proc->subframe_rx, proc_rxtx->instance_cnt_rxtx);
+
+  // We have just received and processed the common part of a subframe, say n.
+  // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired
+  // transmitted timestamp of the next TX slot (first).
+  // The last (TS_rx mod samples_per_frame) was n*samples_per_tti,
+  // we want to generate subframe (n+N), so TS_tx = TX_rx+N*samples_per_tti,
+  // and proc->subframe_tx = proc->subframe_rx+sf_ahead
+  proc_rxtx->timestamp_tx = proc->timestamp_rx + (sf_ahead*fp->samples_per_tti);
+  proc_rxtx->frame_rx     = proc->frame_rx;
+  proc_rxtx->subframe_rx  = proc->subframe_rx;
+  proc_rxtx->frame_tx     = (proc_rxtx->subframe_rx > (9-sf_ahead)) ? (proc_rxtx->frame_rx+1)&1023 : proc_rxtx->frame_rx;
+  proc_rxtx->subframe_tx  = (proc_rxtx->subframe_rx + sf_ahead)%10;
+
+  LOG_D(PHY, "sfn/sf:%d%d proc[rx:%d%d] proc_rxtx[instance_cnt_rxtx:%d rx:%d%d] About to wake rxtx thread\n\n", sfn, sf, proc->frame_rx, proc->subframe_rx, proc_rxtx->instance_cnt_rxtx, proc_rxtx->frame_rx, proc_rxtx->subframe_rx);
+
+  // the thread can now be woken up
+  if (pthread_cond_signal(&proc_rxtx->cond_rxtx) != 0) {
+    LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RXn-TXnp4 thread\n");
+    exit_fun( "ERROR pthread_cond_signal" );
+    return(-1);
+  }
+
+  //LOG_D(PHY,"%s() About to attempt pthread_mutex_unlock\n", __FUNCTION__);
+  pthread_mutex_unlock( &proc_rxtx->mutex_rxtx );
+  //LOG_D(PHY,"%s() UNLOCKED pthread_mutex_unlock\n", __FUNCTION__);
+
+  return(0);
+}
+
+extern pthread_cond_t nfapi_sync_cond;
+extern pthread_mutex_t nfapi_sync_mutex;
+extern int nfapi_sync_var;
+
+int phy_sync_indication(struct nfapi_vnf_p7_config* config, uint8_t sync)
+{
+  //vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+
+  printf("[VNF] SYNC %s\n", sync==1 ? "ACHIEVED" : "LOST");
+  
+  if (1)
+  {
+    if (sync==1 && nfapi_sync_var!=0)
+    {
+
+      printf("[VNF] Signal to OAI main code that it can go\n");
+      pthread_mutex_lock(&nfapi_sync_mutex);
+      nfapi_sync_var=0;
+      pthread_cond_broadcast(&nfapi_sync_cond);
+      pthread_mutex_unlock(&nfapi_sync_mutex);
+    }
+  }
+
+  return(0);
+}
+
+int phy_subframe_indication(struct nfapi_vnf_p7_config* config, uint16_t phy_id, uint16_t sfn_sf)
+{
+  static uint8_t first_time = 1;
+  if (first_time)
+  {
+    printf("[VNF] subframe indication %d\n", NFAPI_SFNSF2DEC(sfn_sf));
+    first_time = 0;
+  }
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_subframe_ind(p7_vnf->mac, phy_id, sfn_sf);
+
+#if 1
+  //if (RC.eNB) printf("RC.eNB[0][0]->configured:%d\n", RC.eNB[0][0]->configured);
+
+  if (RC.eNB && RC.eNB[0][0]->configured)
+  {
+    uint16_t sfn = NFAPI_SFNSF2SFN(sfn_sf);
+    uint16_t sf = NFAPI_SFNSF2SF(sfn_sf);
+
+    //LOG_E(PHY,"[VNF] subframe indication sfn_sf:%d sfn:%d sf:%d\n", sfn_sf, sfn, sf);
+
+    wake_eNB_rxtx(RC.eNB[0][0], sfn, sf);
+  }
+  else
+  {
+    printf("[VNF] %s() RC.eNB:%p\n", __FUNCTION__, RC.eNB);
+    if (RC.eNB) printf("RC.eNB[0][0]->configured:%d\n", RC.eNB[0][0]->configured);
+  }
+#endif
+
+  return 0;
+}
+
+int phy_rach_indication(struct nfapi_vnf_p7_config* config, nfapi_rach_indication_t* ind)
+{
+  LOG_E(MAC, "%s() NFAPI SFN/SF:%d number_of_preambles:%u\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->rach_indication_body.number_of_preambles);
+
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  printf("[VNF] RACH_IND eNB:%p sfn_sf:%d number_of_preambles:%d\n", eNB, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->rach_indication_body.number_of_preambles);
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  eNB->UL_INFO.rach_ind = *ind;
+  eNB->UL_INFO.rach_ind.rach_indication_body.preamble_list                       = eNB->preamble_list;
+
+  for (int i=0;i<ind->rach_indication_body.number_of_preambles;i++)
+  {
+    if (ind->rach_indication_body.preamble_list[i].preamble_rel8.tl.tag == NFAPI_PREAMBLE_REL8_TAG)
+    {
+      printf("preamble[%d]: rnti:%02x preamble:%d timing_advance:%d\n", 
+          i,
+          ind->rach_indication_body.preamble_list[i].preamble_rel8.rnti,
+          ind->rach_indication_body.preamble_list[i].preamble_rel8.preamble,
+          ind->rach_indication_body.preamble_list[i].preamble_rel8.timing_advance
+          );
+    }
+
+    if(ind->rach_indication_body.preamble_list[i].preamble_rel13.tl.tag == NFAPI_PREAMBLE_REL13_TAG)
+    {
+      printf("RACH PREAMBLE REL13 present\n");
+    }
+
+    eNB->preamble_list[i] = ind->rach_indication_body.preamble_list[i];
+  }
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_rach_ind(p7_vnf->mac, ind);
+  return 1;
+}
+
+int phy_harq_indication(struct nfapi_vnf_p7_config* config, nfapi_harq_indication_t* ind)
+{
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  LOG_D(MAC, "%s() NFAPI SFN/SF:%d number_of_harqs:%u\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->harq_indication_body.number_of_harqs);
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  eNB->UL_INFO.harq_ind = *ind;
+  eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = eNB->harq_pdu_list;
+
+  for (int i=0; i<ind->harq_indication_body.number_of_harqs; i++)
+  {
+    memcpy(&eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[i], &ind->harq_indication_body.harq_pdu_list[i], sizeof(eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[i]));
+  }
+
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_harq_ind(p7_vnf->mac, ind);
+  return 1;
+}
+
+int phy_crc_indication(struct nfapi_vnf_p7_config* config, nfapi_crc_indication_t* ind)
+{
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  eNB->UL_INFO.crc_ind = *ind;
+
+  nfapi_crc_indication_t *dest_ind = &eNB->UL_INFO.crc_ind;
+  nfapi_crc_indication_pdu_t *dest_pdu_list = eNB->crc_pdu_list;
+
+  *dest_ind = *ind;
+  dest_ind->crc_indication_body.crc_pdu_list = dest_pdu_list;
+
+  if (ind->crc_indication_body.number_of_crcs==0)
+    LOG_E(MAC, "%s() NFAPI SFN/SF:%d IND:number_of_crcs:%u UL_INFO:crcs:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->crc_indication_body.number_of_crcs, eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs);
+
+  for (int i=0; i<ind->crc_indication_body.number_of_crcs; i++)
+  {
+    memcpy(&dest_ind->crc_indication_body.crc_pdu_list[i], &ind->crc_indication_body.crc_pdu_list[i], sizeof(ind->crc_indication_body.crc_pdu_list[0]));
+
+    LOG_D(MAC, "%s() NFAPI SFN/SF:%d CRC_IND:number_of_crcs:%u UL_INFO:crcs:%d PDU[%d] rnti:%04x UL_INFO:rnti:%04x\n", 
+        __FUNCTION__,
+        NFAPI_SFNSF2DEC(ind->sfn_sf), ind->crc_indication_body.number_of_crcs, eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs,
+        i, 
+        ind->crc_indication_body.crc_pdu_list[i].rx_ue_information.rnti, 
+        eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list[i].rx_ue_information.rnti);
+
+  }
+
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+	//mac_crc_ind(p7_vnf->mac, ind);
+  return 1;
+}
+
+int phy_rx_indication(struct nfapi_vnf_p7_config* config, nfapi_rx_indication_t* ind)
+{
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  if (ind->rx_indication_body.number_of_pdus==0)
+  {
+    LOG_E(MAC, "%s() NFAPI SFN/SF:%d number_of_pdus:%u\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->rx_indication_body.number_of_pdus);
+  }
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  nfapi_rx_indication_t *dest_ind = &eNB->UL_INFO.rx_ind;
+  nfapi_rx_indication_pdu_t *dest_pdu_list = eNB->rx_pdu_list;
+
+  *dest_ind = *ind;
+  dest_ind->rx_indication_body.rx_pdu_list = dest_pdu_list;
+
+  for(int i=0; i<ind->rx_indication_body.number_of_pdus; i++)
+  {
+    nfapi_rx_indication_pdu_t *dest_pdu = &dest_ind->rx_indication_body.rx_pdu_list[i];
+    nfapi_rx_indication_pdu_t *src_pdu = &ind->rx_indication_body.rx_pdu_list[i];
+
+    memcpy(dest_pdu, src_pdu, sizeof(*src_pdu));
+
+    // DJP - TODO FIXME - intentional memory leak
+    dest_pdu->data = malloc(dest_pdu->rx_indication_rel8.length);
+
+    memcpy(dest_pdu->data, src_pdu->data, dest_pdu->rx_indication_rel8.length);
+
+    LOG_E(PHY, "%s() NFAPI SFN/SF:%d PDUs:%d [PDU:%d] handle:%d rnti:%04x length:%d offset:%d ul_cqi:%d ta:%d data:%p\n",
+        __FUNCTION__,
+        NFAPI_SFNSF2DEC(ind->sfn_sf), ind->rx_indication_body.number_of_pdus, i,
+        dest_pdu->rx_ue_information.handle,
+        dest_pdu->rx_ue_information.rnti,
+        dest_pdu->rx_indication_rel8.length,
+        dest_pdu->rx_indication_rel8.offset,
+        dest_pdu->rx_indication_rel8.ul_cqi,
+        dest_pdu->rx_indication_rel8.timing_advance,
+        dest_pdu->data
+        );
+  }
+
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_rx_ind(p7_vnf->mac, ind);
+  return 1;
+}
+int phy_srs_indication(struct nfapi_vnf_p7_config* config, nfapi_srs_indication_t* ind)
+{
+	// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+	//mac_srs_ind(p7_vnf->mac, ind);
+	return 1;
+}
+int phy_sr_indication(struct nfapi_vnf_p7_config* config, nfapi_sr_indication_t* ind)
+{
+
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  LOG_D(MAC, "%s() NFAPI SFN/SF:%d srs:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->sr_indication_body.number_of_srs);
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  nfapi_sr_indication_t *dest_ind = &eNB->UL_INFO.sr_ind;
+  nfapi_sr_indication_pdu_t *dest_pdu_list = eNB->sr_pdu_list;
+
+  *dest_ind = *ind;
+  dest_ind->sr_indication_body.sr_pdu_list = dest_pdu_list;
+
+  LOG_D(MAC,"%s() eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs:%d\n", __FUNCTION__, eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs);
+
+  for (int i=0;i<eNB->UL_INFO.sr_ind.sr_indication_body.number_of_srs;i++)
+  {
+    nfapi_sr_indication_pdu_t *dest_pdu = &dest_ind->sr_indication_body.sr_pdu_list[i];
+    nfapi_sr_indication_pdu_t *src_pdu = &ind->sr_indication_body.sr_pdu_list[i];
+
+    LOG_D(MAC, "SR_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", i, src_pdu->rx_ue_information.rnti, src_pdu->ul_cqi_information.ul_cqi, src_pdu->ul_cqi_information.channel);
+
+    memcpy(dest_pdu, src_pdu, sizeof(*src_pdu));
+  }
+
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_sr_ind(p7_vnf->mac, ind);
+  return 1;
+}
+
+int phy_cqi_indication(struct nfapi_vnf_p7_config* config, nfapi_cqi_indication_t* ind)
+{
+  // vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+  //mac_cqi_ind(p7_vnf->mac, ind);
+  struct PHY_VARS_eNB_s *eNB = RC.eNB[0][0];
+
+  LOG_E(MAC, "%s() NFAPI SFN/SF:%d number_of_cqis:%u\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind->sfn_sf), ind->cqi_indication_body.number_of_cqis);
+
+  pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
+  eNB->UL_INFO.cqi_ind = ind->cqi_indication_body;
+
+  pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
+  return 1;
+}
+
+int phy_lbt_dl_indication(struct nfapi_vnf_p7_config* config, nfapi_lbt_dl_indication_t* ind)
+{
+	// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+	//mac_lbt_dl_ind(p7_vnf->mac, ind);
+	return 1;
+}
+int phy_nb_harq_indication(struct nfapi_vnf_p7_config* config, nfapi_nb_harq_indication_t* ind)
+{
+	// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+	//mac_nb_harq_ind(p7_vnf->mac, ind);
+	return 1;
+}
+int phy_nrach_indication(struct nfapi_vnf_p7_config* config, nfapi_nrach_indication_t* ind)
+{
+	// vnf_p7_info* p7_vnf = (vnf_p7_info*)(config->user_data);
+	//mac_nrach_ind(p7_vnf->mac, ind);
+	return 1;
+}
+
+void* vnf_allocate(size_t size)
+{
+	//return (void*)memory_pool::allocate(size);
+	return (void*)malloc(size);
+}
+
+void vnf_deallocate(void* ptr)
+{
+	//memory_pool::deallocate((uint8_t*)ptr);
+	free(ptr);
+}
+
+extern void nfapi_log(char *file, char *func, int line, int comp, int level, const char* format, va_list args);
+void vnf_trace(nfapi_trace_level_t nfapi_level, const char* message, ...)
+{
+#if 1
+
+  va_list    args;
+  int oai_level;
+
+  if (nfapi_level==NFAPI_TRACE_ERROR)
+  {
+    oai_level = LOG_ERR;
+  }
+  else if (nfapi_level==NFAPI_TRACE_WARN)
+  {
+    oai_level = LOG_WARNING;
+  }
+  else if (nfapi_level==NFAPI_TRACE_NOTE)
+  {
+    oai_level = LOG_INFO;
+  }
+  else if (nfapi_level==NFAPI_TRACE_INFO)
+  {
+    oai_level = LOG_INFO;
+  }
+  else
+  {
+    oai_level = LOG_INFO;
+  }
+
+  va_start(args, message);
+  nfapi_log("FILE>", "FUNC", 999, PHY, oai_level, message, args);
+  va_end(args);
+#else
+  va_list args;
+  va_start(args, message);
+  vprintf(message, args);
+  va_end(args);
+#endif
+}
+
+int phy_vendor_ext(struct nfapi_vnf_p7_config* config, nfapi_p7_message_header_t* msg)
+{
+	if(msg->message_id == P7_VENDOR_EXT_IND)
+	{
+		//vendor_ext_p7_ind* ind = (vendor_ext_p7_ind*)msg;
+		//printf("[VNF] vendor_ext (error_code:%d)\n", ind->error_code);
+	}
+	else
+	{
+		printf("[VNF] unknown %02x\n", msg->message_id);
+	}
+	return 0;
+}
+
+nfapi_p7_message_header_t* phy_allocate_p7_vendor_ext(uint16_t message_id, uint16_t* msg_size)
+{
+	if(message_id == P7_VENDOR_EXT_IND)
+	{
+		*msg_size = sizeof(vendor_ext_p7_ind);
+		return (nfapi_p7_message_header_t*)malloc(sizeof(vendor_ext_p7_ind));
+	}
+	return 0;
+}
+
+void phy_deallocate_p7_vendor_ext(nfapi_p7_message_header_t* header)
+{
+	free(header);
+}
+
+/// maybe these should be in the mac file...
+int phy_unpack_vendor_extension_tlv(nfapi_tl_t* tl, uint8_t **ppReadPackedMessage, uint8_t *end, void** ve, nfapi_p7_codec_config_t* codec)
+{
+	(void)tl;
+	(void)ppReadPackedMessage;
+	(void)ve;
+	return -1;
+}
+
+int phy_pack_vendor_extension_tlv(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* codec)
+{
+	//NFAPI_TRACE(NFAPI_TRACE_INFO, "phy_pack_vendor_extension_tlv\n");
+
+	nfapi_tl_t* tlv = (nfapi_tl_t*)ve;
+	switch(tlv->tag)
+	{
+		case VENDOR_EXT_TLV_1_TAG:
+			{
+				//NFAPI_TRACE(NFAPI_TRACE_INFO, "Packing VENDOR_EXT_TLV_1\n");
+				vendor_ext_tlv_1* ve = (vendor_ext_tlv_1*)tlv;
+				if(!push32(ve->dummy, ppWritePackedMsg, end))
+					return 0;
+				return 1;
+			}
+			break;
+		default:
+			return -1;
+			break;
+	}
+}
+
+int phy_unpack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t** ppReadPackedMessage, uint8_t *end, nfapi_p7_codec_config_t* config)
+{
+	//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+	if(header->message_id == P7_VENDOR_EXT_IND)
+	{
+		vendor_ext_p7_ind* req = (vendor_ext_p7_ind*)(header);
+		if(!pull16(ppReadPackedMessage, &req->error_code, end))
+			return 0;
+	}
+	return 1;
+}
+
+int phy_pack_p7_vendor_extension(nfapi_p7_message_header_t* header, uint8_t** ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t* config)
+{
+	//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+	if(header->message_id == P7_VENDOR_EXT_REQ)
+	{
+		//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+		vendor_ext_p7_req* req = (vendor_ext_p7_req*)(header);
+		if(!(push16(req->dummy1, ppWritePackedMsg, end) &&
+			 push16(req->dummy2, ppWritePackedMsg, end)))
+			return 0;
+	}
+	return 1;
+}
+
+int vnf_pack_p4_p5_vendor_extension(nfapi_p4_p5_message_header_t* header, uint8_t** ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t* codec)
+{
+	//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+	if(header->message_id == P5_VENDOR_EXT_REQ)
+	{
+		vendor_ext_p5_req* req = (vendor_ext_p5_req*)(header);
+		//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s %d %d\n", __FUNCTION__, req->dummy1, req->dummy2);
+		return (!(push16(req->dummy1, ppWritePackedMsg, end) &&
+				  push16(req->dummy2, ppWritePackedMsg, end)));
+	}
+	return 0;
+}
+
+static pthread_t vnf_start_pthread;
+static pthread_t vnf_p7_start_pthread;
+void* vnf_p7_start_thread(void *ptr)
+{
+  printf("%s()\n", __FUNCTION__);
+
+  nfapi_vnf_p7_config_t* config = (nfapi_vnf_p7_config_t*)ptr;
+
+  nfapi_vnf_p7_start(config);
+
+  return config;
+}
+
+void set_thread_priority(int priority);
+
+void* vnf_p7_thread_start(void* ptr)
+{
+	set_thread_priority(79);
+
+	vnf_p7_info* p7_vnf = (vnf_p7_info*)ptr;
+
+	p7_vnf->config->port = p7_vnf->local_port;
+	p7_vnf->config->sync_indication = &phy_sync_indication;
+	p7_vnf->config->subframe_indication = &phy_subframe_indication;
+	p7_vnf->config->harq_indication = &phy_harq_indication;
+	p7_vnf->config->crc_indication = &phy_crc_indication;
+	p7_vnf->config->rx_indication = &phy_rx_indication;
+	p7_vnf->config->rach_indication = &phy_rach_indication;
+	p7_vnf->config->srs_indication = &phy_srs_indication;
+	p7_vnf->config->sr_indication = &phy_sr_indication;
+	p7_vnf->config->cqi_indication = &phy_cqi_indication;
+	p7_vnf->config->lbt_dl_indication = &phy_lbt_dl_indication;
+	p7_vnf->config->nb_harq_indication = &phy_nb_harq_indication;
+	p7_vnf->config->nrach_indication = &phy_nrach_indication;
+	p7_vnf->config->malloc = &vnf_allocate;
+	p7_vnf->config->free = &vnf_deallocate;
+
+	p7_vnf->config->trace = &vnf_trace;
+
+	p7_vnf->config->vendor_ext = &phy_vendor_ext;
+	p7_vnf->config->user_data = p7_vnf;
+
+	p7_vnf->mac->user_data = p7_vnf;
+
+	p7_vnf->config->codec_config.unpack_p7_vendor_extension = &phy_unpack_p7_vendor_extension;
+	p7_vnf->config->codec_config.pack_p7_vendor_extension = &phy_pack_p7_vendor_extension;
+	p7_vnf->config->codec_config.unpack_vendor_extension_tlv = &phy_unpack_vendor_extension_tlv;
+	p7_vnf->config->codec_config.pack_vendor_extension_tlv = &phy_pack_vendor_extension_tlv;
+	p7_vnf->config->codec_config.allocate = &vnf_allocate;
+	p7_vnf->config->codec_config.deallocate = &vnf_deallocate;
+
+	p7_vnf->config->allocate_p7_vendor_ext = &phy_allocate_p7_vendor_ext;
+	p7_vnf->config->deallocate_p7_vendor_ext = &phy_deallocate_p7_vendor_ext;
+
+        {
+          NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] Creating VNF NFAPI start thread %s\n", __FUNCTION__);
+          pthread_create(&vnf_p7_start_pthread, NULL, &vnf_p7_start_thread, p7_vnf->config);
+        }
+	return 0;
+}
+
+int pnf_start_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_pnf_start_response_t* resp)
+{
+  vnf_info* vnf = (vnf_info*)(config->user_data);
+  vnf_p7_info *p7_vnf = vnf->p7_vnfs;
+
+  printf("[VNF] pnf start response idx:%d config:%p user_data:%p p7_vnf[config:%p thread_started:%d]\n", p5_idx, config, config->user_data, vnf->p7_vnfs[0].config, vnf->p7_vnfs[0].thread_started);
+
+  if(p7_vnf->thread_started == 0)
+  {
+    pthread_t vnf_p7_thread;
+    pthread_create(&vnf_p7_thread, NULL, &vnf_p7_thread_start, p7_vnf);
+    p7_vnf->thread_started = 1;
+  }
+  else
+  {
+    // P7 thread already running. 
+  }
+
+  // start all the phys in the pnf.
+
+#if 0
+  auto find_result = vnf->pnfs.find(p5_idx);
+  if(find_result != vnf->pnfs.end())
+  {
+    pnf_info& pnf = find_result->second;
+
+    for(unsigned i = 0; i < pnf.phys.size(); ++i)
+    {
+      pnf_info& pnf = find_result->second;
+    }
+  }
+#else
+  {
+    pnf_info *pnf = vnf->pnfs;
+    nfapi_param_request_t req;
+
+    printf("[VNF] Sending NFAPI_PARAM_REQUEST phy_id:%d\n", pnf->phys[0].id);
+
+    memset(&req, 0, sizeof(req));
+    req.header.message_id = NFAPI_PARAM_REQUEST;
+    req.header.phy_id = pnf->phys[0].id;
+
+    nfapi_vnf_param_req(config, p5_idx, &req);
+  }
+#endif
+
+  return 0;
+}
+
+extern uint32_t to_earfcn(int eutra_bandP,uint32_t dl_CarrierFreq,uint32_t bw);
+
+int param_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_param_response_t* resp)
+{
+  printf("[VNF] Received NFAPI_PARAM_RESP idx:%d phy_id:%d\n", p5_idx, resp->header.phy_id);
+
+  vnf_info* vnf = (vnf_info*)(config->user_data);
+
+#if 0
+  auto find_result = vnf->pnfs.find(p5_idx);
+  if(find_result != vnf->pnfs.end())
+  {
+    pnf_info& pnf = find_result->second;
+
+    auto found = std::find_if(pnf.phys.begin(), pnf.phys.end(), [&](phy_info& item)
+        { return item.id == resp->header.phy_id; });
+
+    if(found != pnf.phys.end())
+    {
+      phy_info& phy = (*found);
+#else
+  pnf_info *pnf = vnf->pnfs;
+  phy_info *phy = pnf->phys;
+  {
+    {
+#endif
+
+      phy->remote_port = resp->nfapi_config.p7_pnf_port.value;
+
+      struct sockaddr_in pnf_p7_sockaddr;
+      memcpy(&pnf_p7_sockaddr.sin_addr.s_addr, &(resp->nfapi_config.p7_pnf_address_ipv4.address[0]), 4);
+
+      phy->remote_addr = inet_ntoa(pnf_p7_sockaddr.sin_addr);
+
+      // for now just 1
+      vnf_p7_info *p7_vnf = vnf->p7_vnfs;
+
+      printf("[VNF] %d.%d pnf p7 %s:%d timing %d %d %d %d\n", p5_idx, phy->id, phy->remote_addr, phy->remote_port, p7_vnf->timing_window, p7_vnf->periodic_timing_period, p7_vnf->aperiodic_timing_enabled, p7_vnf->periodic_timing_period);
+
+      nfapi_config_request_t *req = &RC.mac[0]->config[0];
+
+      //memset(&req, 0, sizeof(req));
+      req->header.message_id = NFAPI_CONFIG_REQUEST;
+      req->header.phy_id = phy->id;
+
+      printf("[VNF] Send NFAPI_CONFIG_REQUEST\n");
+
+      req->nfapi_config.p7_vnf_port.tl.tag = NFAPI_NFAPI_P7_VNF_PORT_TAG;
+      req->nfapi_config.p7_vnf_port.value = p7_vnf->local_port;
+      req->num_tlv++;
+
+printf("[VNF] DJP local_port:%d\n", p7_vnf->local_port);
+
+      req->nfapi_config.p7_vnf_address_ipv4.tl.tag = NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG;
+      struct sockaddr_in vnf_p7_sockaddr;
+      vnf_p7_sockaddr.sin_addr.s_addr = inet_addr(p7_vnf->local_addr);
+      memcpy(&(req->nfapi_config.p7_vnf_address_ipv4.address[0]), &vnf_p7_sockaddr.sin_addr.s_addr, 4);
+      req->num_tlv++;
+printf("[VNF] DJP local_addr:%s\n", p7_vnf->local_addr);
+
+      req->nfapi_config.timing_window.tl.tag = NFAPI_NFAPI_TIMING_WINDOW_TAG;
+      req->nfapi_config.timing_window.value = p7_vnf->timing_window;
+printf("[VNF] Timing window:%d\n", p7_vnf->timing_window);
+      req->num_tlv++;
+
+      if(p7_vnf->periodic_timing_enabled || p7_vnf->aperiodic_timing_enabled)
+      {
+        req->nfapi_config.timing_info_mode.tl.tag = NFAPI_NFAPI_TIMING_INFO_MODE_TAG;
+        req->nfapi_config.timing_info_mode.value = (p7_vnf->aperiodic_timing_enabled << 1) | (p7_vnf->periodic_timing_enabled);
+        req->num_tlv++;
+
+        if(p7_vnf->periodic_timing_enabled)
+        {
+          req->nfapi_config.timing_info_period.tl.tag = NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG;
+          req->nfapi_config.timing_info_period.value = p7_vnf->periodic_timing_period;
+          req->num_tlv++;
+        }
+      }
+
+      vendor_ext_tlv_2 ve2;
+      memset(&ve2, 0, sizeof(ve2));
+      ve2.tl.tag = VENDOR_EXT_TLV_2_TAG;
+      ve2.dummy = 2016;
+      req->vendor_extension = &ve2.tl;
+
+      nfapi_vnf_config_req(config, p5_idx, req);
+      printf("[VNF] Sent NFAPI_CONFIG_REQ num_tlv:%u\n",req->num_tlv);
+    }
+#if 0
+    else
+    {
+      printf("[VNF] param response failed to find pnf %d phy %d\n", p5_idx, resp->header.phy_id);
+    }
+#endif
+  }
+#if 0
+  else
+  {
+    printf("[VNF] param response failed to find pnf %d\n", p5_idx);
+  }
+#endif
+
+  return 0;
+}
+
+int config_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_config_response_t* resp)
+{
+  nfapi_start_request_t req;
+
+  printf("[VNF] Received NFAPI_CONFIG_RESP idx:%d phy_id:%d\n", p5_idx, resp->header.phy_id);
+
+  printf("[VNF] Calling oai_enb_init()\n");
+  oai_enb_init();
+
+  memset(&req, 0, sizeof(req));
+  req.header.message_id = NFAPI_START_REQUEST;
+  req.header.phy_id = resp->header.phy_id;
+  nfapi_vnf_start_req(config, p5_idx, &req);
+
+  printf("[VNF] Send NFAPI_START_REQUEST idx:%d phy_id:%d\n", p5_idx, resp->header.phy_id);
+
+  return 0;
+}
+
+int start_resp_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_start_response_t* resp)
+{
+  printf("[VNF] Received NFAPI_START_RESP idx:%d phy_id:%d\n", p5_idx, resp->header.phy_id);
+
+  vnf_info* vnf = (vnf_info*)(config->user_data);
+
+#if 0
+  auto find_result = vnf->pnfs.find(p5_idx);
+  if(find_result != vnf->pnfs.end())
+  {
+    pnf_info& pnf = find_result->second;
+
+
+    auto found = std::find_if(pnf.phys.begin(), pnf.phys.end(), [&](phy_info& item)
+        { return item.id == resp->header.phy_id; });
+
+    if(found != pnf.phys.end())
+    {
+      phy_info& phy = (*found);
+
+      vnf_p7_info& p7_vnf = vnf->p7_vnfs[0];
+
+      nfapi_vnf_p7_add_pnf((p7_vnf.config.get()), phy.remote_addr.c_str(), phy.remote_port, phy.id);
+
+    }
+  }
+#else
+  pnf_info *pnf = vnf->pnfs;
+  phy_info *phy = pnf->phys;
+  vnf_p7_info *p7_vnf = vnf->p7_vnfs;
+  nfapi_vnf_p7_add_pnf((p7_vnf->config), phy->remote_addr, phy->remote_port, phy->id);
+
+
+#if 0
+  {
+    extern pthread_cond_t nfapi_sync_cond;
+    extern pthread_mutex_t nfapi_sync_mutex;
+    extern int nfapi_sync_var;
+
+    printf("[VNF] Signal to OAI main code that it can go\n");
+    pthread_mutex_lock(&nfapi_sync_mutex);
+    nfapi_sync_var=0;
+    pthread_cond_broadcast(&nfapi_sync_cond);
+    pthread_mutex_unlock(&nfapi_sync_mutex);
+  }
+#endif
+
+#endif
+
+  return 0;
+}
+
+int vendor_ext_cb(nfapi_vnf_config_t* config, int p5_idx, nfapi_p4_p5_message_header_t* msg)
+{
+  printf("[VNF] %s\n", __FUNCTION__);
+
+  switch(msg->message_id)
+  {
+    case P5_VENDOR_EXT_RSP:
+      {
+        vendor_ext_p5_rsp* rsp = (vendor_ext_p5_rsp*)msg;
+        printf("[VNF] P5_VENDOR_EXT_RSP error_code:%d\n", rsp->error_code);
+
+        // send the start request
+
+        nfapi_pnf_start_request_t req;
+        memset(&req, 0, sizeof(req));
+        req.header.message_id = NFAPI_PNF_START_REQUEST;
+        nfapi_vnf_pnf_start_req(config, p5_idx, &req);
+      }
+      break;
+  }
+
+  return 0;
+}
+
+int vnf_unpack_p4_p5_vendor_extension(nfapi_p4_p5_message_header_t* header, uint8_t** ppReadPackedMessage, uint8_t *end, nfapi_p4_p5_codec_config_t* codec)
+{
+  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s\n", __FUNCTION__);
+  if(header->message_id == P5_VENDOR_EXT_RSP)
+  {
+    vendor_ext_p5_rsp* req = (vendor_ext_p5_rsp*)(header);
+    return(!pull16(ppReadPackedMessage, &req->error_code, end));
+  }
+  return 0;
+}
+
+nfapi_p4_p5_message_header_t* vnf_allocate_p4_p5_vendor_ext(uint16_t message_id, uint16_t* msg_size)
+{
+  if(message_id == P5_VENDOR_EXT_RSP)
+  {
+    *msg_size = sizeof(vendor_ext_p5_rsp);
+    return (nfapi_p4_p5_message_header_t*)malloc(sizeof(vendor_ext_p5_rsp));
+  }
+  return 0;
+}
+
+void vnf_deallocate_p4_p5_vendor_ext(nfapi_p4_p5_message_header_t* header)
+{
+  free(header);
+}
+
+nfapi_vnf_config_t *config = 0;
+
+void vnf_start_thread(void* ptr)
+{
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] VNF NFAPI thread - nfapi_vnf_start()%s\n", __FUNCTION__);
+
+  config = (nfapi_vnf_config_t*)ptr;
+
+  nfapi_vnf_start(config);
+}
+
+static vnf_info vnf;
+extern uint8_t nfapi_mode;
+/*------------------------------------------------------------------------------*/
+void configure_nfapi_vnf(char *vnf_addr, int vnf_p5_port)
+{
+  nfapi_mode = 2;
+
+  memset(&vnf, 0, sizeof(vnf));
+
+  memset(vnf.p7_vnfs, 0, sizeof(vnf.p7_vnfs));
+
+  vnf.p7_vnfs[0].timing_window = 32;
+  vnf.p7_vnfs[0].periodic_timing_enabled = 1;
+  vnf.p7_vnfs[0].aperiodic_timing_enabled = 0;
+  vnf.p7_vnfs[0].periodic_timing_period = 10;
+
+  vnf.p7_vnfs[0].config = nfapi_vnf_p7_config_create();
+  NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] %s() vnf.p7_vnfs[0].config:%p VNF ADDRESS:%s:%d\n", __FUNCTION__, vnf.p7_vnfs[0].config, vnf_addr, vnf_p5_port);
+
+  strcpy(vnf.p7_vnfs[0].local_addr, vnf_addr);
+  vnf.p7_vnfs[0].local_port = 50001;
+  vnf.p7_vnfs[0].mac = (mac_t*)malloc(sizeof(mac_t));
+
+  nfapi_vnf_config_t* config = nfapi_vnf_config_create();
+
+  config->malloc = malloc;
+  config->free = free;
+  config->trace = &vnf_trace;
+
+  config->vnf_p5_port = vnf_p5_port;
+  config->vnf_ipv4 = 1;
+  config->vnf_ipv6 = 0;
+
+  config->pnf_list = 0;
+  config->phy_list = 0;
+
+  config->pnf_connection_indication = &pnf_connection_indication_cb;
+  config->pnf_disconnect_indication = &pnf_disconnection_indication_cb;
+  config->pnf_param_resp = &pnf_param_resp_cb;
+  config->pnf_config_resp = &pnf_config_resp_cb;
+  config->pnf_start_resp = &pnf_start_resp_cb;
+  config->param_resp = &param_resp_cb;
+  config->config_resp = &config_resp_cb;
+  config->start_resp = &start_resp_cb;
+  config->vendor_ext = &vendor_ext_cb;
+
+  config->user_data = &vnf;
+
+  // To allow custom vendor extentions to be added to nfapi
+  config->codec_config.unpack_vendor_extension_tlv = &vnf_unpack_vendor_extension_tlv;
+  config->codec_config.pack_vendor_extension_tlv = &vnf_pack_vendor_extension_tlv;
+
+  config->codec_config.unpack_p4_p5_vendor_extension = &vnf_unpack_p4_p5_vendor_extension;
+  config->codec_config.pack_p4_p5_vendor_extension = &vnf_pack_p4_p5_vendor_extension;
+  config->allocate_p4_p5_vendor_ext = &vnf_allocate_p4_p5_vendor_ext;
+  config->deallocate_p4_p5_vendor_ext = &vnf_deallocate_p4_p5_vendor_ext;
+  config->codec_config.allocate = &vnf_allocate;
+  config->codec_config.deallocate = &vnf_deallocate;
+
+  {
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] Creating VNF NFAPI start thread %s\n", __FUNCTION__);
+    pthread_create(&vnf_start_pthread, NULL, (void*)&vnf_start_thread, config);
+    NFAPI_TRACE(NFAPI_TRACE_INFO, "[VNF] Created VNF NFAPI start thread %s\n", __FUNCTION__);
+  }
+}
+
+int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req)
+{
+  nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
+
+  dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+  //dl_config_req->header.message_id = NFAPI_DL_CONFIG_BCH_PDU_TYPE;
+
+  //LOG_D(PHY, "[VNF] %s() header message_id:%02x\n", __FUNCTION__, dl_config_req->header.message_id);
+
+  //LOG_D(PHY, "[VNF] %s() DL_CONFIG sfn_sf:%d pdcch:%d dci:%d pdu:%d pdsch_rnti:%d pcfich:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(dl_config_req->sfn_sf), dl_config_req->dl_config_request_body.number_pdcch_ofdm_symbols, dl_config_req->dl_config_request_body.number_dci, dl_config_req->dl_config_request_body.number_pdu, dl_config_req->dl_config_request_body.number_pdsch_rnti, dl_config_req->dl_config_request_body.transmission_power_pcfich);
+
+  int retval = nfapi_vnf_p7_dl_config_req(p7_config, dl_config_req);
+
+  dl_config_req->dl_config_request_body.number_pdcch_ofdm_symbols           = 1;
+  dl_config_req->dl_config_request_body.number_dci                          = 0;
+  dl_config_req->dl_config_request_body.number_pdu                          = 0;
+  dl_config_req->dl_config_request_body.number_pdsch_rnti                   = 0;
+
+  if (retval!=0)
+  {
+    LOG_E(PHY, "%s() Problem sending retval:%d\n", __FUNCTION__, retval);
+  }
+  return retval;
+}
+
+int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req)
+{
+  nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
+
+  tx_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+
+  //LOG_D(PHY, "[VNF] %s() TX_REQ sfn_sf:%d number_of_pdus:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(tx_req->sfn_sf), tx_req->tx_request_body.number_of_pdus);
+
+  int retval = nfapi_vnf_p7_tx_req(p7_config, tx_req);
+
+
+  if (retval!=0)
+  {
+    LOG_E(PHY, "%s() Problem sending retval:%d\n", __FUNCTION__, retval);
+  }
+  else
+  {
+    tx_req->tx_request_body.number_of_pdus = 0;
+  }
+  return retval;
+}
+
+int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req)
+{
+  nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
+
+  hi_dci0_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+
+  //LOG_D(PHY, "[VNF] %s() HI_DCI0_REQ sfn_sf:%d dci:%d hi:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(hi_dci0_req->sfn_sf), hi_dci0_req->hi_dci0_request_body.number_of_dci, hi_dci0_req->hi_dci0_request_body.number_of_hi);
+
+  int retval = nfapi_vnf_p7_hi_dci0_req(p7_config, hi_dci0_req);
+
+
+  if (retval!=0)
+  {
+    LOG_E(PHY, "%s() Problem sending retval:%d\n", __FUNCTION__, retval);
+  }
+  else
+  {
+    hi_dci0_req->hi_dci0_request_body.number_of_hi = 0;
+    hi_dci0_req->hi_dci0_request_body.number_of_dci = 0;
+  }
+  return retval;
+}
+
+int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req)
+{
+  nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config;
+
+  ul_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!!
+
+  //LOG_D(PHY, "[VNF] %s() header message_id:%02x\n", __FUNCTION__, ul_config_req->header.message_id);
+
+  //LOG_D(PHY, "[VNF] %s() UL_CONFIG sfn_sf:%d PDUs:%d rach_prach_frequency_resources:%d srs_present:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ul_config_req->sfn_sf), ul_config_req->ul_config_request_body.number_of_pdus, ul_config_req->ul_config_request_body.rach_prach_frequency_resources, ul_config_req->ul_config_request_body.srs_present);
+
+  int retval = nfapi_vnf_p7_ul_config_req(p7_config, ul_config_req);
+
+  if (retval!=0)
+  {
+    LOG_E(PHY, "%s() Problem sending retval:%d\n", __FUNCTION__, retval);
+  }
+  else
+  {
+    // Reset number of PDUs so that it is not resent
+    ul_config_req->ul_config_request_body.number_of_pdus = 0;
+    ul_config_req->ul_config_request_body.rach_prach_frequency_resources = 0;
+    ul_config_req->ul_config_request_body.srs_present = 0;
+  }
+  return retval;
+}
diff --git a/nfapi/nfapi_vnf.h b/nfapi/nfapi_vnf.h
new file mode 100644
index 0000000000000000000000000000000000000000..5a608d49555c22a5d2fed4436cfa4465545dc09b
--- /dev/null
+++ b/nfapi/nfapi_vnf.h
@@ -0,0 +1,6 @@
+#if !defined(NFAPI_VNF_H__)
+#define NFAPI_VNF_H__
+
+void configure_nfapi_vnf(char *vnf_addr, int vnf_p5_port);
+
+#endif
diff --git a/nfapi/vendor_ext.h b/nfapi/vendor_ext.h
new file mode 100644
index 0000000000000000000000000000000000000000..d0fd57837d2eef4650700eb58399c0249eb68918
--- /dev/null
+++ b/nfapi/vendor_ext.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2017 Cisco Systems, Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _VENDOR_EXT_H_
+#define _VENDOR_EXT_H_
+
+#include "nfapi_interface.h"
+
+typedef enum 
+{
+	P5_VENDOR_EXT_REQ = NFAPI_VENDOR_EXT_MSG_MIN,
+	P5_VENDOR_EXT_RSP,
+
+	P7_VENDOR_EXT_REQ,
+	P7_VENDOR_EXT_IND
+
+} vendor_ext_message_id_e;
+
+typedef struct {
+	nfapi_p4_p5_message_header_t header;
+	uint16_t dummy1;
+	uint16_t dummy2;
+} vendor_ext_p5_req;
+
+typedef struct {
+	nfapi_p4_p5_message_header_t header;
+	uint16_t error_code;
+} vendor_ext_p5_rsp;
+
+typedef struct {
+	nfapi_p7_message_header_t header;
+	uint16_t dummy1;
+	uint16_t dummy2;
+} vendor_ext_p7_req;
+
+typedef struct {
+	nfapi_p7_message_header_t header;
+	uint16_t error_code;
+} vendor_ext_p7_ind;
+
+typedef struct {
+	nfapi_tl_t tl;
+	uint32_t dummy;
+} vendor_ext_tlv_1;
+
+#define VENDOR_EXT_TLV_1_TAG 0xF001
+
+typedef struct {
+	nfapi_tl_t tl;
+	uint32_t dummy;
+} vendor_ext_tlv_2;
+
+#define VENDOR_EXT_TLV_2_TAG 0xF002
+
+
+
+
+#endif // _VENDOR_EXT_
diff --git a/oaienv b/oaienv
index f6b298debf69e2e24c2c65cce458291b9ff0a513..94a49495a1a897cb039a4293e9ee2a6ec364991c 100644
--- a/oaienv
+++ b/oaienv
@@ -17,3 +17,11 @@ alias oait='cd $OPENAIR_TARGETS'
 alias oailte='cd $OPENAIR_TARGETS/RT/USER'
 alias oais='cd $OPENAIR_TARGETS/SIMU/USER'
 alias oaiex='cd $OPENAIR_TARGETS/SIMU/EXAMPLES'
+
+export NFAPI_DIR=${HOME}/open-nFAPI
+
+alias bld='cd $OPENAIR_HOME/cmake_targets ; ./build_oai --eNB -x -w USRP'
+alias b='cd $OPENAIR_HOME/cmake_targets ; ./build_oai --eNB -x -w USRP'
+alias run='cd $OPENAIR_HOME/cmake_targets/lte_build_oai/build'
+alias nf='cd $OPENAIR_HOME/nfapi'
+alias conf='cd $OPENAIR_HOME/targets/PROJECTS/GENERIC-LTE-EPC/CONF'
diff --git a/open-nfapi.oai.patch b/open-nfapi.oai.patch
index 95aeb2e64a40eb403a1f4df3c4b60cbcc056596c..5b91e3675b0ab0483cd68d940595c58e2060ea29 100644
--- a/open-nfapi.oai.patch
+++ b/open-nfapi.oai.patch
@@ -1,25 +1,21 @@
+diff --git a/common/public_inc/debug.h b/common/public_inc/debug.h
+index 05e9870..14f97a1 100644
+--- a/common/public_inc/debug.h
++++ b/common/public_inc/debug.h
+@@ -39,7 +39,8 @@ extern nfapi_trace_fn_t nfapi_trace_g;
+ extern nfapi_trace_level_t nfapi_trace_level_g;
+ 
+ /*! NFAPI trace macro */
+-#define NFAPI_TRACE(level, format, ...) { if(nfapi_trace_g && ((nfapi_trace_level_t)level <= nfapi_trace_level_g)) (*nfapi_trace_g)(level, format, ##__VA_ARGS__); }
++//#define NFAPI_TRACE(level, format, ...) { if(nfapi_trace_g && ((nfapi_trace_level_t)level <= nfapi_trace_level_g)) (*nfapi_trace_g)(level, format, ##__VA_ARGS__); }
++#define NFAPI_TRACE(level, format, ...) { if (nfapi_trace_g) (*nfapi_trace_g)(level, format, ##__VA_ARGS__); }
+ 
+ /*! Function to change the trace level 
+  * \param new_level The modified trace level
 diff --git a/nfapi/public_inc/nfapi_interface.h b/nfapi/public_inc/nfapi_interface.h
-index 2d58c2a..45af99a 100644
+index 2d58c2a..f665d11 100644
 --- a/nfapi/public_inc/nfapi_interface.h
 +++ b/nfapi/public_inc/nfapi_interface.h
-@@ -34,7 +34,7 @@
- #define NFAPI_MAX_NUM_ANTENNAS 8
- #define NFAPI_MAX_NUM_SUBBANDS 13
- #define NFAPI_MAX_BF_VECTORS 8
--#define NFAPI_MAX_CC 1
-+#define NFAPI_MAX_CC 2
- #define NFAPI_MAX_NUM_PHYSICAL_ANTENNAS 8
- #define NFAPI_MAX_RSSI 8
- #define NFAPI_MAX_PSC_LIST 32
-@@ -1689,7 +1689,7 @@ typedef struct {
- 	uint16_t number_pdu;
- 	uint8_t number_pdsch_rnti;
- 	uint16_t transmission_power_pcfich;
--	nfapi_dl_config_request_pdu_t* dl_config_pdu_list;
-+        nfapi_dl_config_request_pdu_t* dl_config_pdu_list;
- } nfapi_dl_config_request_body_t;
- #define NFAPI_DL_CONFIG_REQUEST_BODY_TAG 0x2000
- 
 @@ -1772,7 +1772,7 @@ typedef struct {
  	uint8_t number_of_cc;
  	struct {
@@ -29,12 +25,19986 @@ index 2d58c2a..45af99a 100644
  	} cc[NFAPI_MAX_CC];
  } nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t;
  
-@@ -1962,7 +1962,7 @@ typedef struct {
- } nfapi_ul_config_harq_information_rel8_fdd_t;
- #define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG 0x2019
+diff --git a/nfapi/src/nfapi.c b/nfapi/src/nfapi.c
+index 0e06963..3f017bc 100644
+--- a/nfapi/src/nfapi.c
++++ b/nfapi/src/nfapi.c
+@@ -823,6 +823,10 @@ uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *e
+ 		{
+ 			NFAPI_TRACE(NFAPI_TRACE_WARN, "Warning pack_tlv tag 0x%x does not match expected 0x%x\n", tl->tag, tag);
+ 		}
++                else
++                {
++			//NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning pack_tlv tag 0x%x ZERO does not match expected 0x%x\n", tl->tag, tag);
++                }
+ 	}
+ 
+ 	return 1;
+diff --git a/nfapi/src/nfapi_p7.c b/nfapi/src/nfapi_p7.c
+index a3b0141..69ff860 100644
+--- a/nfapi/src/nfapi_p7.c
++++ b/nfapi/src/nfapi_p7.c
+@@ -111,6 +111,8 @@ static uint8_t pack_dl_config_dci_dl_pdu_rel8_value(void* tlv, uint8_t **ppWrite
+ {
+ 	nfapi_dl_config_dci_dl_pdu_rel8_t* value = (nfapi_dl_config_dci_dl_pdu_rel8_t*)tlv;
+ 	
++        //NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() dci_format:%u\n", __FUNCTION__, value->dci_format);
++
+ 	return ( push8(value->dci_format, ppWritePackedMsg, end) &&
+ 			 push8(value->cce_idx, ppWritePackedMsg, end) &&
+ 			 push8(value->aggregation_level, ppWritePackedMsg, end) &&
+@@ -234,6 +236,8 @@ static uint8_t pack_dl_config_bch_pdu_rel8_value(void* tlv, uint8_t **ppWritePac
+ {
+ 	nfapi_dl_config_bch_pdu_rel8_t* value = (nfapi_dl_config_bch_pdu_rel8_t*)tlv;
+ 	
++        //NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s()\n", __FUNCTION__);
++
+ 	return( push16(value->length, ppWritePackedMsg, end) &&
+ 			push16(value->pdu_index, ppWritePackedMsg, end) &&
+ 			push16(value->transmission_power, ppWritePackedMsg, end));
+@@ -545,6 +549,8 @@ static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePac
+ {
+ 	nfapi_dl_config_request_body_t* value = (nfapi_dl_config_request_body_t*)tlv;
+ 
++        //NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() dci:%u pdu:%u pdsch:%u rnti:%u pcfich:%u\n", __FUNCTION__, value->number_dci, value->number_pdu, value->number_pdsch_rnti, value->transmission_power_pcfich);
++
+ 	if(!(push8(value->number_pdcch_ofdm_symbols, ppWritePackedMsg, end) &&
+ 		 push8(value->number_dci, ppWritePackedMsg, end) &&
+ 		 push16(value->number_pdu, ppWritePackedMsg, end) &&
+@@ -574,6 +580,8 @@ static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePac
+ 		{
+ 			case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE:
+ 				{
++                                  //NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE\n", __FUNCTION__);
++
+ 					if(!(pack_tlv(NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel8, ppWritePackedMsg, end, &pack_dl_config_dci_dl_pdu_rel8_value) &&
+ 					pack_tlv(NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel9, ppWritePackedMsg, end, &pack_dl_config_dci_dl_pdu_rel9_value) &&
+ 					pack_tlv(NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG, &pdu->dci_dl_pdu.dci_dl_pdu_rel10, ppWritePackedMsg, end, &pack_dl_config_dci_dl_pdu_rel10_value) &&
+@@ -587,6 +595,8 @@ static uint8_t pack_dl_config_request_body_value(void* tlv, uint8_t **ppWritePac
+ 				break;
+ 			case NFAPI_DL_CONFIG_BCH_PDU_TYPE:
+ 				{
++                                  //NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s() NFAPI_DL_CONFIG_BCH_PDU_TYPE\n", __FUNCTION__);
++
+ 					if(!(pack_tlv(NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG, &pdu->bch_pdu.bch_pdu_rel8, ppWritePackedMsg, end, &pack_dl_config_bch_pdu_rel8_value)))
+ 						return 0;
+ 				}
+@@ -684,10 +694,21 @@ static uint8_t pack_dl_config_request(void *msg, uint8_t **ppWritePackedMsg, uin
+ {
+ 	nfapi_dl_config_request_t *pNfapiMsg = (nfapi_dl_config_request_t*)msg;
+ 	
+-	return ( push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end) &&
+-			 pack_tlv(NFAPI_DL_CONFIG_REQUEST_BODY_TAG, &pNfapiMsg->dl_config_request_body, ppWritePackedMsg, end, &pack_dl_config_request_body_value) &&
+-			 pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
++	//return ( push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end) &&
++			 //pack_tlv(NFAPI_DL_CONFIG_REQUEST_BODY_TAG, &pNfapiMsg->dl_config_request_body, ppWritePackedMsg, end, &pack_dl_config_request_body_value) &&
++			 //pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
++        { 
++          uint8_t x = push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end);
++          uint8_t y = pack_tlv(NFAPI_DL_CONFIG_REQUEST_BODY_TAG, &pNfapiMsg->dl_config_request_body, ppWritePackedMsg, end, &pack_dl_config_request_body_value);
++          uint8_t z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
+ 
++          if (!x || !y || !z)
++          {
++            NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_DL_CONFIG_REQUEST x:%u y:%u z:%u \n", __FUNCTION__,x,y,z);
++          }
++
++          return x && y && z;
++        }
+ }
+ 
+ static uint8_t pack_ul_config_request_ulsch_rel8_value(void *tlv, uint8_t **ppWritePackedMsg, uint8_t * end)
+@@ -796,9 +817,10 @@ static uint8_t pack_ul_config_request_cqi_ri_rel9_value(void *tlv, uint8_t **ppW
+ 					if(push8(cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].ri_size, ppWritePackedMsg, end) == 0)
+ 						return 0;
+ 
+-					if(cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].ri_size > 0)
++                                        uint8_t j;
++                                        for(j = 0; j < 8; ++j)
+ 					{
+-						if(push8(cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].dl_cqi_pmi_size, ppWritePackedMsg, end) == 0)
++                                              if(push8(cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].dl_cqi_pmi_size[j], ppWritePackedMsg, end) == 0)
+ 							return 0;
+ 					}
+ 				}
+@@ -1518,7 +1540,21 @@ static uint8_t pack_tx_request_body_value(void* tlv, uint8_t **ppWritePackedMsg,
+ 		for(j = 0; j < pdu->num_segments; ++j)
+ 		{
+ 			// Use -1 as it is unbounded 
+-			if(pusharray8(pdu->segments[j].segment_data, (uint32_t)(-1), pdu->segments[j].segment_length, ppWritePackedMsg, end) == 0)
++			// DJP - does not handle -1
++                        // DJP - if(pusharray8(pdu->segments[j].segment_data, (uint32_t)(-1), pdu->segments[j].segment_length, ppWritePackedMsg, end) == 0)
++			int push_ret = pusharray8(pdu->segments[j].segment_data, 65535, pdu->segments[j].segment_length, ppWritePackedMsg, end);
++                        
++                        if (0 && pdu->segments[j].segment_length == 3)
++                        {
++                          NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__, 
++                          pdu->segments[j].segment_data[0], 
++                          pdu->segments[j].segment_data[1], 
++                          pdu->segments[j].segment_data[2]
++                          );
++                        }
++                        //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() segment_data:%p segment_length:%u pusharray8()=%d\n", __FUNCTION__, pdu->segments[j].segment_data, pdu->segments[j].segment_length, push_ret);
++
++                        if (push_ret == 0)
+ 			{
+ 				return 0;
+ 			}
+@@ -1532,9 +1568,13 @@ static uint8_t pack_tx_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *e
+ {
+ 	nfapi_tx_request_t *pNfapiMsg = (nfapi_tx_request_t*)msg;
+ 	
+-	return ( push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end) &&
+-			 pack_tlv(NFAPI_TX_REQUEST_BODY_TAG, &pNfapiMsg->tx_request_body, ppWritePackedMsg, end, &pack_tx_request_body_value) &&
+-			 pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config));
++	int x = push16(pNfapiMsg->sfn_sf, ppWritePackedMsg, end);
++        int y = pack_tlv(NFAPI_TX_REQUEST_BODY_TAG, &pNfapiMsg->tx_request_body, ppWritePackedMsg, end, &pack_tx_request_body_value);
++        int z = pack_p7_vendor_extension_tlv(pNfapiMsg->vendor_extension, ppWritePackedMsg, end, config);
++
++        //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() x:%d y:%d z:%d\n", __FUNCTION__, x, y, z);
++
++        return x && y && z;
+ }
+ 
+ static uint8_t pack_rx_ue_information_value(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
+@@ -1844,6 +1884,8 @@ static uint8_t pack_rx_ulsch_indication_body_value(void *tlv, uint8_t **ppWriteP
+ {
+ 	nfapi_rx_indication_body_t* value = (nfapi_rx_indication_body_t*)tlv;
+ 
++        //printf("RX ULSCH BODY\n");
++
+ 	if( push16(value->number_of_pdus, ppWritePackedMsg, end) == 0)
+ 		return 0;
+ 
+@@ -1851,21 +1893,26 @@ static uint8_t pack_rx_ulsch_indication_body_value(void *tlv, uint8_t **ppWriteP
+ 	uint16_t i = 0;
+ 	uint16_t offset = 2; // taking into account the number_of_pdus
+ 	uint16_t total_number_of_pdus = value->number_of_pdus;
++        //printf("ULSCH:pdus:%d\n", total_number_of_pdus);
++
+ 	for(i = 0; i < total_number_of_pdus; ++i)
+ 	{
+ 		nfapi_rx_indication_pdu_t* pdu = &(value->rx_pdu_list[i]);
+ 		if(pdu->rx_ue_information.tl.tag == NFAPI_RX_UE_INFORMATION_TAG)
+ 		{
++                  //printf("NFAPI_RX_UE_INFORMATION_TAG\n");
+ 			offset += 4 + 6; 
+ 		}
+ 				
+ 		if(pdu->rx_indication_rel8.tl.tag == NFAPI_RX_INDICATION_REL8_TAG)
+ 		{
++                  //printf("NFAPI_RX_INDICATION_REL8_TAG\n");
+ 			offset += 4 + 7;
+ 		}
+ 
+ 		if(pdu->rx_indication_rel9.tl.tag == NFAPI_RX_INDICATION_REL9_TAG)
+ 		{
++                  //printf("NFAPI_RX_INDICATION_REL9_TAG\n");
+ 			offset += 4 + 2;
+ 		}
+ 	}
+@@ -2592,11 +2639,16 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
+ 		return -1;
+ 	}
+ 
++        if (pMessageHeader->message_id != NFAPI_TIMING_INFO)
++        {
++          //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() message_id:0x%04x phy_id:%u m_segment_sequence:%u timestamp:%u\n", __FUNCTION__, pMessageHeader->message_id, pMessageHeader->phy_id, pMessageHeader->m_segment_sequence, pMessageHeader->transmit_timestamp);
++        }
+ 	// look for the specific message
+ 	uint8_t result = 0;
+ 	switch (pMessageHeader->message_id)
+ 	{
+ 		case NFAPI_DL_CONFIG_REQUEST:
++                  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_DL_CONFIG_REQUEST\n", __FUNCTION__);
+ 			result = pack_dl_config_request(pMessageHeader, &pWritePackedMessage, end, config);
+ 			break;
+ 
+@@ -2609,6 +2661,7 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
+ 			break;
+ 
+ 		case NFAPI_TX_REQUEST:
++                        //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() NFAPI_TX_REQUEST\n", __FUNCTION__);
+ 			result = pack_tx_request(pMessageHeader, &pWritePackedMessage, end, config);
+ 			break;
+ 
+@@ -2621,6 +2674,7 @@ int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBu
+ 			break;
+ 
+ 		case NFAPI_RX_ULSCH_INDICATION:
++                        //printf("RX ULSCH\n");
+ 			result = pack_rx_ulsch_indication(pMessageHeader, &pWritePackedMessage, end, config);
+ 			break;
+ 
+@@ -3482,9 +3536,10 @@ static uint8_t unpack_ul_config_cqi_ri_info_rel9_value(void *tlv, uint8_t **ppRe
+ 					if(pull8(ppReadPackedMsg, &cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].ri_size, end) == 0)
+ 						return 0;
+ 
+-					if(cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].ri_size > 0)
++                                        uint8_t j;
++                                        for(j = 0; j < 8; ++j)
+ 					{
+-						if(pull8(ppReadPackedMsg, &cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].dl_cqi_pmi_size, end) == 0)
++						if(pull8(ppReadPackedMsg, &cqi_ri_info_rel9->aperiodic_cqi_pmi_ri_report.cc[i].dl_cqi_pmi_size[j], end) == 0)
+ 							return 0;
+ 					}
+ 				}
+@@ -4394,6 +4449,14 @@ static uint8_t unpack_tx_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *
+ 					{
+ 						if(!pullarray8(ppReadPackedMsg, pdu->segments[0].segment_data, pdu->segments[0].segment_length, pdu->segments[0].segment_length, end))
+ 							return 0;
++                                                if (0 && pdu->segments[0].segment_length == 3)
++                                                {
++                                                  NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() BCH? segment_data:%x %x %x\n", __FUNCTION__, 
++                                                      pdu->segments[0].segment_data[0], 
++                                                      pdu->segments[0].segment_data[1], 
++                                                      pdu->segments[0].segment_data[2]
++                                                      );
++                                                }
+ 					}
+ 					else
+ 					{
+diff --git a/pnf/public_inc/nfapi_pnf_interface.h b/pnf/public_inc/nfapi_pnf_interface.h
+index f93624d..b25caf2 100644
+--- a/pnf/public_inc/nfapi_pnf_interface.h
++++ b/pnf/public_inc/nfapi_pnf_interface.h
+@@ -319,10 +319,10 @@ typedef struct nfapi_pnf_config
+  *  0 will be returned if it fails.
+  * 
+  * \code
+- * nfapi_pnf_config_t* config = nfapi_pnf_config_create();
++ * nfapi_pnf_config_t* config = nfapi_pnf_config_create(void);
+  * \endcode
+  */
+-nfapi_pnf_config_t* nfapi_pnf_config_create();
++nfapi_pnf_config_t* nfapi_pnf_config_create(void);
+ 
+ /*! Delete a pnf configuration 
+  * \param config A pointer to a pnf configuraiton
+@@ -681,7 +681,7 @@ typedef struct nfapi_pnf_p7_config
+ /*! Create and initialise a nfapi_pnf_p7_config structure
+  * \return A pointer to a PNF P7 config structure
+  */
+-nfapi_pnf_p7_config_t* nfapi_pnf_p7_config_create();
++nfapi_pnf_p7_config_t* nfapi_pnf_p7_config_create(void);
+ 
+ /*! Delete an nfapi_pnf_p7_config structure
+  * \param config 
+diff --git a/pnf/src/pnf.c b/pnf/src/pnf.c
+index d6cf364..d0a7fa6 100644
+--- a/pnf/src/pnf.c
++++ b/pnf/src/pnf.c
+@@ -412,10 +412,10 @@ void pnf_handle_start_request(pnf_t* pnf, void *pRecvMsg, int recvMsgLen)
+ 	{
+ 		nfapi_start_request_t req;
+ 	
+-		NFAPI_TRACE(NFAPI_TRACE_INFO, "START.request received\n");
+-	
+ 		nfapi_pnf_config_t* config = &(pnf->_public);
+ 	
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() START.request received state:%d\n", __FUNCTION__, config->state);
++	
+ 		// unpack the message
+ 		if (nfapi_p5_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(req), &config->codec_config) >= 0)
+ 		{
+diff --git a/pnf/src/pnf_interface.c b/pnf/src/pnf_interface.c
+index 74f29a0..7310fc0 100644
+--- a/pnf/src/pnf_interface.c
++++ b/pnf/src/pnf_interface.c
+@@ -76,6 +76,7 @@ int nfapi_pnf_start(nfapi_pnf_config_t* config)
+ 
+ 		sleep(1);
+ 	}
++	NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() terminate=1 - EXITTING............\n", __FUNCTION__);
+ 
+ 	return 0;
+ }
+@@ -227,7 +228,7 @@ int nfapi_pnf_start_resp(nfapi_pnf_config_t* config, nfapi_start_response_t* res
+ 	}
+ 	else
+ 	{
+-		NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: unknow phy id %d\n", __FUNCTION__, resp->header.phy_id);
++		NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s: unknown phy id %d\n", __FUNCTION__, resp->header.phy_id);
+ 		return -1;
+ 	}
+ 
+diff --git a/pnf/src/pnf_p7.c b/pnf/src/pnf_p7.c
+index 0fd7828..02b828d 100644
+--- a/pnf/src/pnf_p7.c
++++ b/pnf/src/pnf_p7.c
+@@ -25,12 +25,64 @@
+ #include <unistd.h>
+ #include <errno.h>
+ #include <pthread.h>
++#include <stdio.h>
+ 
+ #include "pnf_p7.h"
+ 
+ #define FAPI2_IP_DSCP	0
+ 
+-uint32_t get_current_time_hr()
++extern uint16_t sf_ahead;
++//uint16_t sf_ahead=4;
++
++void add_sf(uint16_t *frameP, uint16_t *subframeP, int offset)
++{
++    *frameP    = *frameP + ((*subframeP + offset) / 10);
++
++    *subframeP = ((*subframeP + offset) % 10);
++}
++
++void subtract_sf(uint16_t *frameP, uint16_t *subframeP, int offset)
++{
++  if (*subframeP < offset)
++  {
++    *frameP = (*frameP+1024-1)%1024;
++  }
++  *subframeP = (*subframeP+10-offset)%10;
++}
++
++uint16_t sfnsf_add_sf(uint16_t sfnsf, int offset)
++{
++  uint16_t new_sfnsf;
++  uint16_t sfn = NFAPI_SFNSF2SFN(sfnsf);
++  uint16_t sf  = NFAPI_SFNSF2SF(sfnsf);
++
++  //printf("%s() sfn:%u sf:%u\n", __FUNCTION__, sfn, sf);
++  add_sf(&sfn, &sf, offset);
++
++  new_sfnsf = sfn<<4|sf;
++
++  //printf("%s() sfn:%u sf:%u offset:%d sfnsf:%d(DEC:%d) new:%d(DEC:%d)\n", __FUNCTION__, sfn, sf, offset, sfnsf, NFAPI_SFNSF2DEC(sfnsf), new_sfnsf, NFAPI_SFNSF2DEC(new_sfnsf));
++
++  return new_sfnsf;
++}
++
++uint16_t sfnsf_subtract_sf(uint16_t sfnsf, int offset)
++{
++  uint16_t new_sfnsf;
++  uint16_t sfn = NFAPI_SFNSF2SFN(sfnsf);
++  uint16_t sf  = NFAPI_SFNSF2SF(sfnsf);
++
++  //printf("%s() sfn:%u sf:%u\n", __FUNCTION__, sfn, sf);
++  subtract_sf(&sfn, &sf, offset);
++
++  new_sfnsf = sfn<<4|sf;
++
++  //printf("%s() offset:%d sfnsf:%d(DEC:%d) new:%d(DEC:%d)\n", __FUNCTION__, offset, sfnsf, NFAPI_SFNSF2DEC(sfnsf), new_sfnsf, NFAPI_SFNSF2DEC(new_sfnsf));
++
++  return new_sfnsf;
++}
++
++uint32_t pnf_get_current_time_hr(void)
+ {
+ 	struct timeval now;
+ 	(void)gettimeofday(&now, NULL);
+@@ -64,11 +116,14 @@ void pnf_p7_free(pnf_p7_t* pnf_p7, void* ptr)
+ // todo : for now these just malloc/free need to move to a memory cache
+ nfapi_dl_config_request_t* allocate_nfapi_dl_config_request(pnf_p7_t* pnf_p7) 
+ { 
+-	return pnf_p7_malloc(pnf_p7, sizeof(nfapi_dl_config_request_t));
++	void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_dl_config_request_t));
++        //printf("%s() ptr:%p\n", __FUNCTION__, ptr);
++        return ptr;
+ }
+ 
+ void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t* pnf_p7) 
+ { 
++  //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->dl_config_request_body.dl_config_pdu_list);
+ 	if(pnf_p7->_public.codec_config.deallocate)
+ 	{
+ 		(pnf_p7->_public.codec_config.deallocate)(req->dl_config_request_body.dl_config_pdu_list);
+@@ -77,17 +132,21 @@ void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t
+ 	{
+ 		free(req->dl_config_request_body.dl_config_pdu_list);
+ 	}
++        req->dl_config_request_body.dl_config_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+ 
+ nfapi_ul_config_request_t* allocate_nfapi_ul_config_request(pnf_p7_t* pnf_p7) 
+ { 
+-	return pnf_p7_malloc(pnf_p7, sizeof(nfapi_ul_config_request_t));
++	void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_ul_config_request_t));
++        //printf("%s() ptr:%p\n", __FUNCTION__, ptr);
++        return ptr;
+ }
+ 
+ void deallocate_nfapi_ul_config_request(nfapi_ul_config_request_t* req, pnf_p7_t* pnf_p7) 
+ { 
++  //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->ul_config_request_body.ul_config_pdu_list);
+ 	if(pnf_p7->_public.codec_config.deallocate)
+ 	{
+ 		(pnf_p7->_public.codec_config.deallocate)(req->ul_config_request_body.ul_config_pdu_list);
+@@ -96,6 +155,7 @@ void deallocate_nfapi_ul_config_request(nfapi_ul_config_request_t* req, pnf_p7_t
+ 	{
+ 		free(req->ul_config_request_body.ul_config_pdu_list);
+ 	}
++        req->ul_config_request_body.ul_config_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -107,6 +167,7 @@ nfapi_hi_dci0_request_t* allocate_nfapi_hi_dci0_request(pnf_p7_t* pnf_p7)
+ 
+ void deallocate_nfapi_hi_dci0_request(nfapi_hi_dci0_request_t* req, pnf_p7_t* pnf_p7) 
+ { 
++  //printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->hi_dci0_request_body.hi_dci0_pdu_list);
+ 	if(pnf_p7->_public.codec_config.deallocate)
+ 	{
+ 		(pnf_p7->_public.codec_config.deallocate)(req->hi_dci0_request_body.hi_dci0_pdu_list);
+@@ -115,6 +176,7 @@ void deallocate_nfapi_hi_dci0_request(nfapi_hi_dci0_request_t* req, pnf_p7_t* pn
+ 	{
+ 		free(req->hi_dci0_request_body.hi_dci0_pdu_list);
+ 	}
++        req->hi_dci0_request_body.hi_dci0_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -127,6 +189,9 @@ nfapi_tx_request_t* allocate_nfapi_tx_request(pnf_p7_t* pnf_p7)
+ void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7) 
+ { 
+ 	int i = 0;
++
++  //printf("%s() SFN/SF:%d %s req:%p pdu[0]:data:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->tx_request_body.tx_pdu_list[i].segments[0].segment_data);
++
+ 	for(i = 0; i < req->tx_request_body.number_of_pdus; ++i)
+ 	{
+ 		void* data = req->tx_request_body.tx_pdu_list[i].segments[0].segment_data;
+@@ -139,6 +204,7 @@ void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7)
+ 		{
+ 			free(data);
+ 		}
++                data=0;
+ 	}
+ 
+ 
+@@ -150,6 +216,7 @@ void deallocate_nfapi_tx_request(nfapi_tx_request_t* req, pnf_p7_t* pnf_p7)
+ 	{
+ 		free(req->tx_request_body.tx_pdu_list);
+ 	}
++        req->tx_request_body.tx_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -169,6 +236,7 @@ void deallocate_nfapi_lbt_dl_config_request(nfapi_lbt_dl_config_request_t* req,
+ 	{
+ 		free(req->lbt_dl_config_request_body.lbt_dl_config_req_pdu_list);
+ 	}
++        req->lbt_dl_config_request_body.lbt_dl_config_req_pdu_list=0;
+ 
+ 	pnf_p7_free(pnf_p7, req);
+ }
+@@ -307,11 +375,11 @@ void pnf_p7_rx_reassembly_queue_remove_old_msgs(pnf_p7_t* pnf_p7, pnf_p7_rx_reas
+ }
+ 
+ 
+-uint32_t get_sf_time(uint32_t now_hr, uint32_t sf_start_hr)
++static uint32_t get_sf_time(uint32_t now_hr, uint32_t sf_start_hr)
+ {
+ 	if(now_hr < sf_start_hr)
+ 	{
+-		NFAPI_TRACE(NFAPI_TRACE_INFO, "now is earlier that start of subframe\n");
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "now is earlier than start of subframe now_hr:%u sf_start_hr:%u\n", now_hr, sf_start_hr);
+ 		return 0;
+ 	}
+ 	else
+@@ -482,29 +550,41 @@ void pnf_pack_and_send_timing_info(pnf_p7_t* pnf_p7)
+ 
+ void send_dummy_subframe(pnf_p7_t* pnf_p7, uint16_t sfn_sf)
+ {
++  struct timespec t;
++  clock_gettime( CLOCK_MONOTONIC, &t);
++
++  //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(sfn_sf:%d) t:%ld.%09ld\n", __FUNCTION__, NFAPI_SFNSF2DEC(sfn_sf), t.tv_sec, t.tv_nsec);
++
++	if(pnf_p7->_public.tx_req && pnf_p7->_public.dummy_subframe.tx_req)
++	{
++		pnf_p7->_public.dummy_subframe.tx_req->sfn_sf = sfn_sf;
++		//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy tx_req - enter\n");
++		(pnf_p7->_public.tx_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.tx_req);
++		//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy tx_req - exit\n");
++	}
+ 	if(pnf_p7->_public.dl_config_req && pnf_p7->_public.dummy_subframe.dl_config_req)
+ 	{
+ 		pnf_p7->_public.dummy_subframe.dl_config_req->sfn_sf = sfn_sf;
++		//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy dl_config_req - enter\n");
+ 		(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
++		//NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy dl_config_req - exit\n");
+ 	}
+ 	if(pnf_p7->_public.ul_config_req && pnf_p7->_public.dummy_subframe.ul_config_req)
+ 	{
+ 		pnf_p7->_public.dummy_subframe.ul_config_req->sfn_sf = sfn_sf;
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy ul_config_req - enter\n");
+ 		(pnf_p7->_public.ul_config_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.ul_config_req);
+ 	}
+ 	if(pnf_p7->_public.hi_dci0_req && pnf_p7->_public.dummy_subframe.hi_dci0_req)
+ 	{
+ 		pnf_p7->_public.dummy_subframe.hi_dci0_req->sfn_sf = sfn_sf;
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy hi_dci0 - enter\n");
+ 		(pnf_p7->_public.hi_dci0_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.hi_dci0_req);
+ 	}
+-	if(pnf_p7->_public.tx_req && pnf_p7->_public.dummy_subframe.tx_req)
+-	{
+-		pnf_p7->_public.dummy_subframe.tx_req->sfn_sf = sfn_sf;
+-		(pnf_p7->_public.tx_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.tx_req);
+-	}
+ 	if(pnf_p7->_public.lbt_dl_config_req && pnf_p7->_public.dummy_subframe.lbt_dl_config_req)
+ 	{
+ 		pnf_p7->_public.dummy_subframe.lbt_dl_config_req->sfn_sf = sfn_sf;
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "Dummy lbt - enter\n");
+ 		(pnf_p7->_public.lbt_dl_config_req)(&pnf_p7->_public, pnf_p7->_public.dummy_subframe.lbt_dl_config_req);
+ 	}
+ }
+@@ -526,10 +606,14 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 		return -1;
+ 	}
+ 
++#if 1
+ 	// save the curren time and sfn_sf
+-	pnf_p7->sf_start_time_hr = get_current_time_hr();
++	pnf_p7->sf_start_time_hr = pnf_get_current_time_hr();
+ 	pnf_p7->sfn_sf = sfn_sf;
+ 
++        uint32_t sfn_sf_tx = sfnsf_add_sf(sfn_sf, sf_ahead);
++        uint32_t tx_sfn_sf_dec = NFAPI_SFNSF2DEC(sfn_sf_tx);
++
+ 	// If the subframe_buffer has been configured
+ 	if(pnf_p7->_public.subframe_buffer_size != 0)
+ 	{
+@@ -550,6 +634,10 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 			NFAPI_TRACE(NFAPI_TRACE_INFO, "Applying shift %d to sfn/sf (%d -> %d)\n", pnf_p7->sfn_sf_shift, NFAPI_SFNSF2DEC(sfn_sf), shifted_sfn_sf);
+ 			sfn_sf = shifted_sfn_sf;
+ 
++                        //
++                        // DJP - why does the shift not apply to pnf_p7->sfn_sf???
++                        //
++
+ 			pnf_p7->sfn_sf_shift = 0;
+ 		}
+ 
+@@ -558,77 +646,119 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 
+ 		nfapi_pnf_p7_subframe_buffer_t* subframe_buffer = &(pnf_p7->subframe_buffer[buffer_index]);
+ 
++		uint8_t tx_buffer_index = tx_sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
++		nfapi_pnf_p7_subframe_buffer_t* tx_subframe_buffer = &(pnf_p7->subframe_buffer[tx_buffer_index]);
++
++                //printf("sfn_sf_dec:%d tx_sfn_sf_dec:%d\n", sfn_sf_dec, tx_sfn_sf_dec);
++
++                if (0) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() shift:%d subframe_buffer->sfn_sf:%d tx_subframe_buffer->sfn_sf:%d sfn_sf:%d subframe_buffer[buffer_index:%u dl_config_req:%p tx_req:%p] "
++                    "TX:sfn_sf:%d:tx_buffer_index:%d[dl_config_req:%p tx_req:%p]\n", 
++                    __FUNCTION__, 
++                    pnf_p7->sfn_sf_shift, 
++                    NFAPI_SFNSF2DEC(subframe_buffer->sfn_sf), 
++                    NFAPI_SFNSF2DEC(tx_subframe_buffer->sfn_sf), 
++                       sfn_sf_dec,    buffer_index,    subframe_buffer->dl_config_req,    subframe_buffer->tx_req, 
++                    tx_sfn_sf_dec, tx_buffer_index, tx_subframe_buffer->dl_config_req, tx_subframe_buffer->tx_req);
++
+ 		// if the subframe buffer sfn sf is set then we have atlease 1 message
+ 		// from the vnf. 
+ 		// todo : how to handle the messages we don't have, send dummies for
+ 		// now
+-		if(subframe_buffer->sfn_sf == sfn_sf)
++
++                //printf("tx_subframe_buffer->sfn_sf:%d sfn_sf_tx:%d\n", tx_subframe_buffer->sfn_sf, sfn_sf_tx);
++                //printf("subframe_buffer->sfn_sf:%d sfn_sf:%d\n", subframe_buffer->sfn_sf, sfn_sf);
++		if(tx_subframe_buffer->sfn_sf == sfn_sf_tx)
+ 		{
+-			if(subframe_buffer->dl_config_req != 0)
++			if(tx_subframe_buffer->tx_req != 0)
+ 			{
+-				if(pnf_p7->_public.dl_config_req)
+-					(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), subframe_buffer->dl_config_req);
++				if(pnf_p7->_public.tx_req)
++					(pnf_p7->_public.tx_req)(&(pnf_p7->_public), tx_subframe_buffer->tx_req);
+ 
+-				deallocate_nfapi_dl_config_request(subframe_buffer->dl_config_req, pnf_p7);
++				//deallocate_nfapi_tx_request(subframe_buffer->tx_req, pnf_p7);
+ 			}
+ 			else
+ 			{
+ 				// send dummy
+-				if(pnf_p7->_public.dl_config_req && pnf_p7->_public.dummy_subframe.dl_config_req)
++				if(pnf_p7->_public.tx_req && pnf_p7->_public.dummy_subframe.tx_req)
+ 				{
+-					pnf_p7->_public.dummy_subframe.dl_config_req->sfn_sf = sfn_sf;
+-					(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
++					pnf_p7->_public.dummy_subframe.tx_req->sfn_sf = sfn_sf_tx;
++					(pnf_p7->_public.tx_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.tx_req);
+ 				}
+ 			}
+ 
+-			if(subframe_buffer->ul_config_req != 0)
++			if(tx_subframe_buffer->dl_config_req != 0)
+ 			{
+-				if(pnf_p7->_public.ul_config_req)
+-					(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), subframe_buffer->ul_config_req);
++				if(pnf_p7->_public.dl_config_req)
++					(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), tx_subframe_buffer->dl_config_req);
+ 
+-				deallocate_nfapi_ul_config_request(subframe_buffer->ul_config_req, pnf_p7);
++				//deallocate_nfapi_dl_config_request(subframe_buffer->dl_config_req, pnf_p7);
+ 			}
+ 			else
+ 			{
+ 				// send dummy
+-				if(pnf_p7->_public.ul_config_req && pnf_p7->_public.dummy_subframe.ul_config_req)
++				if(pnf_p7->_public.dl_config_req && pnf_p7->_public.dummy_subframe.dl_config_req)
+ 				{
+-					pnf_p7->_public.dummy_subframe.ul_config_req->sfn_sf = sfn_sf;
+-					(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.ul_config_req);
++					pnf_p7->_public.dummy_subframe.dl_config_req->sfn_sf = sfn_sf_tx;
++					(pnf_p7->_public.dl_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.dl_config_req);
+ 				}
+ 			}
+ 
+-			if(subframe_buffer->hi_dci0_req != 0)
++			if(tx_subframe_buffer->hi_dci0_req != 0)
+ 			{
+ 				if(pnf_p7->_public.hi_dci0_req)
+-					(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), subframe_buffer->hi_dci0_req);
++					(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), tx_subframe_buffer->hi_dci0_req);
+ 
+-				deallocate_nfapi_hi_dci0_request(subframe_buffer->hi_dci0_req, pnf_p7);
++				//deallocate_nfapi_hi_dci0_request(subframe_buffer->hi_dci0_req, pnf_p7);
+ 			}
+ 			else
+ 			{
+ 				//send dummy
+ 				if(pnf_p7->_public.hi_dci0_req && pnf_p7->_public.dummy_subframe.hi_dci0_req)
+ 				{
+-					pnf_p7->_public.dummy_subframe.hi_dci0_req->sfn_sf = sfn_sf;
++					pnf_p7->_public.dummy_subframe.hi_dci0_req->sfn_sf = sfn_sf_tx;
+ 					(pnf_p7->_public.hi_dci0_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.hi_dci0_req);
+ 				}
+ 			}
+ 
+-			if(subframe_buffer->tx_req != 0)
++                        if(tx_subframe_buffer->dl_config_req != 0)
++                        {
++                          deallocate_nfapi_dl_config_request(tx_subframe_buffer->dl_config_req, pnf_p7);
++                          tx_subframe_buffer->dl_config_req = 0;
++                        }
++			if(tx_subframe_buffer->tx_req != 0)
++                        {
++                          deallocate_nfapi_tx_request(tx_subframe_buffer->tx_req, pnf_p7);
++                          tx_subframe_buffer->tx_req = 0;
++                        }
++                        if(tx_subframe_buffer->hi_dci0_req != 0)
++                        {
++                          deallocate_nfapi_hi_dci0_request(tx_subframe_buffer->hi_dci0_req, pnf_p7);
++                          tx_subframe_buffer->hi_dci0_req = 0;
++                        }
++                }
++		else
++		{
++                  // If we ever need to "send" a dummy ul_config this won't work!!!
++                  send_dummy_subframe(pnf_p7, sfn_sf_tx);
++		}
++
++                if(subframe_buffer->sfn_sf == sfn_sf)
++		{
++
++			if(subframe_buffer->ul_config_req != 0)
+ 			{
+-				if(pnf_p7->_public.tx_req)
+-					(pnf_p7->_public.tx_req)(&(pnf_p7->_public), subframe_buffer->tx_req);
++				if(pnf_p7->_public.ul_config_req)
++					(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), subframe_buffer->ul_config_req);
+ 
+-				deallocate_nfapi_tx_request(subframe_buffer->tx_req, pnf_p7);
++				//deallocate_nfapi_ul_config_request(subframe_buffer->ul_config_req, pnf_p7);
+ 			}
+ 			else
+ 			{
+ 				// send dummy
+-				if(pnf_p7->_public.tx_req && pnf_p7->_public.dummy_subframe.tx_req)
++				if(pnf_p7->_public.ul_config_req && pnf_p7->_public.dummy_subframe.ul_config_req)
+ 				{
+-					pnf_p7->_public.dummy_subframe.tx_req->sfn_sf = sfn_sf;
+-					(pnf_p7->_public.tx_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.tx_req);
++					pnf_p7->_public.dummy_subframe.ul_config_req->sfn_sf = sfn_sf;
++					(pnf_p7->_public.ul_config_req)(&(pnf_p7->_public), pnf_p7->_public.dummy_subframe.ul_config_req);
+ 				}
+ 			}
+ 
+@@ -637,7 +767,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 				if(pnf_p7->_public.lbt_dl_config_req)
+ 					(pnf_p7->_public.lbt_dl_config_req)(&(pnf_p7->_public), subframe_buffer->lbt_dl_config_req);
+ 
+-				deallocate_nfapi_lbt_dl_config_request(subframe_buffer->lbt_dl_config_req, pnf_p7);
++				//deallocate_nfapi_lbt_dl_config_request(subframe_buffer->lbt_dl_config_req, pnf_p7);
+ 			}
+ 			else
+ 			{
+@@ -650,14 +780,35 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 
+ 			}
+ 
+-			memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
+-			pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
+-		}
+-		else
+-		{
+-			send_dummy_subframe(pnf_p7, sfn_sf);
++                        //if(subframe_buffer->dl_config_req != 0)
++                          //deallocate_nfapi_dl_config_request(subframe_buffer->dl_config_req, pnf_p7);
++			//if(subframe_buffer->tx_req != 0)
++                          //deallocate_nfapi_tx_request(subframe_buffer->tx_req, pnf_p7);
++                        if(subframe_buffer->ul_config_req != 0)
++                        {
++                          deallocate_nfapi_ul_config_request(subframe_buffer->ul_config_req, pnf_p7);
++                          subframe_buffer->ul_config_req = 0;
++
++                        }
++                        //if(subframe_buffer->hi_dci0_req != 0)
++                          //deallocate_nfapi_hi_dci0_request(subframe_buffer->hi_dci0_req, pnf_p7);
++			if(subframe_buffer->lbt_dl_config_req != 0)
++                        {
++                          deallocate_nfapi_lbt_dl_config_request(subframe_buffer->lbt_dl_config_req, pnf_p7);
++                          subframe_buffer->lbt_dl_config_req = 0;
++                        }
++                } // sfn_sf match
++
++                if (subframe_buffer->dl_config_req == 0 && subframe_buffer->tx_req == 0 && subframe_buffer->ul_config_req == 0 && subframe_buffer->lbt_dl_config_req == 0)
++                {
++                  memset(&(pnf_p7->subframe_buffer[buffer_index]), 0, sizeof(nfapi_pnf_p7_subframe_buffer_t));
++                  pnf_p7->subframe_buffer[buffer_index].sfn_sf = -1;
+ 		}
+ 
++                //printf("pnf_p7->_public.timing_info_mode_periodic:%d pnf_p7->timing_info_period_counter:%d pnf_p7->_public.timing_info_period:%d\n", pnf_p7->_public.timing_info_mode_periodic, pnf_p7->timing_info_period_counter, pnf_p7->_public.timing_info_period);
++                //printf("pnf_p7->_public.timing_info_mode_aperiodic:%d pnf_p7->timing_info_aperiodic_send:%d\n", pnf_p7->_public.timing_info_mode_aperiodic, pnf_p7->timing_info_aperiodic_send);
++                //printf("pnf_p7->timing_info_ms_counter:%d\n", pnf_p7->timing_info_ms_counter);
++
+ 		// send the periodic timing info if configured
+ 		if(pnf_p7->_public.timing_info_mode_periodic && (pnf_p7->timing_info_period_counter++) == pnf_p7->_public.timing_info_period)
+ 		{
+@@ -678,14 +829,15 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 	}
+ 	else
+ 	{
+-		send_dummy_subframe(pnf_p7, sfn_sf);
++		//send_dummy_subframe(pnf_p7, sfn_sf_tx);
+ 	}
+ 
+ 
++        //printf("pnf_p7->tick:%d\n", pnf_p7->tick);
+ 	if(pnf_p7->tick == 1000)
+ 	{
+ 
+-		NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF P7:%d] DL:(%d/%d) UL:(%d/%d) HI:(%d/%d) TX:(%d/%d)\n", pnf_p7->_public.phy_id,
++		NFAPI_TRACE(NFAPI_TRACE_INFO, "[PNF P7:%d] (ONTIME/LATE) DL:(%d/%d) UL:(%d/%d) HI:(%d/%d) TX:(%d/%d)\n", pnf_p7->_public.phy_id,
+ 					pnf_p7->stats.dl_conf_ontime, pnf_p7->stats.dl_conf_late, 
+ 					pnf_p7->stats.ul_conf_ontime, pnf_p7->stats.ul_conf_late, 
+ 					pnf_p7->stats.hi_dci0_ontime, pnf_p7->stats.hi_dci0_late, 
+@@ -694,6 +846,7 @@ int pnf_p7_subframe_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn_sf)
+ 		memset(&pnf_p7->stats, 0, sizeof(pnf_p7->stats));
+ 	}
+ 	pnf_p7->tick++;
++#endif
+ 
+ 	if(pthread_mutex_unlock(&(pnf_p7->mutex)) != 0)
+ 	{
+@@ -724,7 +877,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+ 			if(recv_sfn_sf_dec > ((current_sfn_sf_dec + timing_window) % NFAPI_MAX_SFNSFDEC))
+ 			{
+ 				// out of window
+-				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is late %d (with wrap)\n", current_sfn_sf_dec, name, recv_sfn_sf_dec);
++				NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is late %d (with wrap)\n", current_sfn_sf_dec, name, recv_sfn_sf_dec);
+ 			}
+ 			else
+ 			{
+@@ -736,7 +889,7 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+ 		else
+ 		{
+ 			// too late
+-			//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is in late %d (%d)\n", current_sfn_sf_dec, name, recv_sfn_sf_dec, (current_sfn_sf_dec - recv_sfn_sf_dec));
++			NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is in late %d (delta:%d)\n", current_sfn_sf_dec, name, recv_sfn_sf_dec, (current_sfn_sf_dec - recv_sfn_sf_dec));
+ 		}
+ 
+ 	}
+@@ -751,8 +904,8 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
+ 		}
+ 		else
+ 		{
+-			// to far in the future
+-			//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is out of window %d (%d) [%d]\n", current_sfn_sf_dec, name, recv_sfn_sf_dec,  (recv_sfn_sf_dec - current_sfn_sf_dec), timing_window);
++			// too far in the future
++			NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is out of window %d (delta:%d) [max:%d]\n", current_sfn_sf_dec, name, recv_sfn_sf_dec,  (recv_sfn_sf_dec - current_sfn_sf_dec), timing_window);
+ 		}
+ 
+ 	}
+@@ -785,15 +938,35 @@ void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
+ 			return;
+ 		}
+ 
+-		if(is_p7_request_in_window(req->sfn_sf, "dl_config_request", pnf_p7))
+-		{
+-			uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
+-			uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
++                if (
++                    0 && 
++                    (NFAPI_SFNSF2DEC(req->sfn_sf) % 100 ==0 ||
++                     NFAPI_SFNSF2DEC(req->sfn_sf) % 105 ==0 
++                    )
++                )
++                  NFAPI_TRACE(NFAPI_TRACE_INFO, "DL_CONFIG.req sfn_sf:%d pdcch:%u dci:%u pdu:%u pdsch_rnti:%u pcfich:%u\n", 
++                      NFAPI_SFNSF2DEC(req->sfn_sf),
++                      req->dl_config_request_body.number_pdcch_ofdm_symbols,
++                      req->dl_config_request_body.number_dci,
++                      req->dl_config_request_body.number_pdu,
++                      req->dl_config_request_body.number_pdsch_rnti,
++                      req->dl_config_request_body.transmission_power_pcfich
++                      );
++
++                if(is_p7_request_in_window(req->sfn_sf, "dl_config_request", pnf_p7))
++                {
++                  uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
++                  uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
++
++                        struct timespec t;
++                        clock_gettime(CLOCK_MONOTONIC, &t);
++
++                  NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE DL_CONFIG_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, sfn_sf_dec, buffer_index);
+ 
+ 			// if there is already an dl_config_req make sure we free it.
+ 			if(pnf_p7->subframe_buffer[buffer_index].dl_config_req != 0)
+ 			{
+-				NFAPI_TRACE(NFAPI_TRACE_NOTE, "HERE HERE HERE\n");
++				NFAPI_TRACE(NFAPI_TRACE_NOTE, "%s() is_p7_request_in_window()=TRUE buffer_index occupied - free it first sfn_sf:%d buffer_index:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), buffer_index);
+ 				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)", 
+ 				//			pMyPhyInfo->sfnSf, bufferIdx,
+ 				//			SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf));
+@@ -860,6 +1033,11 @@ void pnf_handle_ul_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
+ 			uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
+ 			uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
+ 
++                        struct timespec t;
++                        clock_gettime(CLOCK_MONOTONIC, &t);
++
++                        NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE UL_CONFIG_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, sfn_sf_dec, buffer_index);
++
+ 			if(pnf_p7->subframe_buffer[buffer_index].ul_config_req != 0)
+ 			{
+ 				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing ul_config_req at index %d (%d/%d)", 
+@@ -876,7 +1054,7 @@ void pnf_handle_ul_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
+ 		}
+ 		else
+ 		{
+-			//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] NOT storing ul_config_req SFN/SF %d/%d\n", pMyPhyInfo->sfnSf, SFNSF2SFN(req->sfn_sf), SFNSF2SF(req->sfn_sf));
++			NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] NOT storing ul_config_req OUTSIDE OF TRANSMIT BUFFER WINDOW SFN/SF %d\n", NFAPI_SFNSF2DEC(pnf_p7->sfn_sf), NFAPI_SFNSF2DEC(req->sfn_sf));
+ 			deallocate_nfapi_ul_config_request(req, pnf_p7);
+ 
+ 			if(pnf_p7->_public.timing_info_mode_aperiodic)
+@@ -994,6 +1172,16 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
+ 			uint32_t sfn_sf_dec = NFAPI_SFNSF2DEC(req->sfn_sf);
+ 			uint8_t buffer_index = sfn_sf_dec % pnf_p7->_public.subframe_buffer_size;
+ 
++                        struct timespec t;
++                        clock_gettime(CLOCK_MONOTONIC, &t);
++
++                        NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE TX_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, sfn_sf_dec, buffer_index);
++
++                        if (0 && NFAPI_SFNSF2DEC(req->sfn_sf)%100==0) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() TX_REQ.req sfn_sf:%d pdus:%d - TX_REQ is within window\n",
++                            __FUNCTION__,
++                            NFAPI_SFNSF2DEC(req->sfn_sf),
++                            req->tx_request_body.number_of_pdus);
++
+ 			if(pnf_p7->subframe_buffer[buffer_index].tx_req != 0)
+ 			{
+ 				//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing tx_req at index %d (%d/%d)", 
+@@ -1010,6 +1198,8 @@ void pnf_handle_tx_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
+ 		}
+ 		else
+ 		{
++                  NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() TX_REQUEST Request is outside of window REQ:SFN_SF:%d CURR:SFN_SF:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), NFAPI_SFNSF2DEC(pnf_p7->sfn_sf));
++
+ 			deallocate_nfapi_tx_request(req, pnf_p7);
+ 
+ 			if(pnf_p7->_public.timing_info_mode_aperiodic)
+@@ -1126,12 +1316,27 @@ uint32_t calculate_t2(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
+ 	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
+ 	uint32_t t2 = (NFAPI_SFNSF2DEC(sfn_sf) * 1000) + sf_time_us;
+ 
++        if (0)
++        {
++          static uint32_t prev_t2 = 0;
++
++          NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s(now_time_hr:%u sfn_sf:%d sf_start_time_Hr:%u) sf_time_us:%u t2:%u prev_t2:%u diff:%u\n",
++              __FUNCTION__,
++              now_time_hr, NFAPI_SFNSF2DEC(sfn_sf), sf_start_time_hr,
++              sf_time_us,
++              t2,
++              prev_t2,
++              t2-prev_t2);
++
++          prev_t2 = t2;
++        }
++
+ 	return t2;
+ }
+ 
+ uint32_t calculate_t3(uint16_t sfn_sf, uint32_t sf_start_time_hr)
+ {
+-	uint32_t now_time_hr = get_current_time_hr();
++	uint32_t now_time_hr = pnf_get_current_time_hr();
+ 
+ 	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
+ 
+@@ -1391,6 +1596,8 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
+ 			// read the segment
+ 			recvfrom_result = recvfrom(pnf_p7->p7_sock, pnf_p7->rx_message_buffer, header.message_length, MSG_DONTWAIT, (struct sockaddr*)&remote_addr, &remote_addr_size);
+ 
++		now_hr_time = pnf_get_current_time_hr(); //DJP - moved to here - get closer timestamp???
++
+ 			if(recvfrom_result > 0)
+ 			{
+ 				pnf_handle_p7_message(pnf_p7->rx_message_buffer, recvfrom_result, pnf_p7, now_hr_time);
+@@ -1417,7 +1624,10 @@ void pnf_nfapi_p7_read_dispatch_message(pnf_p7_t* pnf_p7, uint32_t now_hr_time)
+ 
+ 		// need to update the time as we would only use the value from the
+ 		// select
+-		now_hr_time = get_current_time_hr();
++#if 0
++// DJP - why do this here and not on return from recv???
++		now_hr_time = pnf_get_current_time_hr();
++#endif
+ 	}
+ 	while(recvfrom_result > 0);
+ }
+@@ -1512,7 +1722,7 @@ int pnf_p7_message_pump(pnf_p7_t* pnf_p7)
+ 
+ 		selectRetval = select(pnf_p7->p7_sock+1, &rfds, NULL, NULL, &timeout);
+ 
+-		uint32_t now_hr_time = get_current_time_hr();
++		uint32_t now_hr_time = pnf_get_current_time_hr();
+ 
+ 		if(selectRetval == 0)
+ 		{	
+diff --git a/pnf_sim/src/main.cpp b/pnf_sim/src/main.cpp
+index 38767d8..e2622cf 100644
+--- a/pnf_sim/src/main.cpp
++++ b/pnf_sim/src/main.cpp
+@@ -1124,16 +1124,18 @@ int fapi_rx_ulsch_ind(fapi_t* fapi, fapi_rx_ulsch_ind_t* ind)
+ 	rx_ind.header.phy_id = data->p7_config->phy_id;
+ 	rx_ind.sfn_sf = ind->sfn_sf;
+ 	
+-	if(((pnf_info*)(data->config->user_data))->wireshark_test_mode)
++	if(1)//((pnf_info*)(data->config->user_data))->wireshark_test_mode)
+ 	{
+ 		rx_ind.rx_indication_body.tl.tag = NFAPI_RX_INDICATION_BODY_TAG;
+-		rx_ind.rx_indication_body.number_of_pdus = 8;
++		rx_ind.rx_indication_body.number_of_pdus = 1;
+ 		
+ 		uint8_t rx_data[1024];
+ 		
+ 		nfapi_rx_indication_pdu_t pdus[rx_ind.rx_indication_body.number_of_pdus];
+ 		memset(&pdus, 0, sizeof(pdus));
+ 		
++                strcpy((char*)rx_data, (char*)"123456789");
++
+ 		for(int i = 0; i < rx_ind.rx_indication_body.number_of_pdus;++i)
+ 		{
+ 		
+@@ -1142,13 +1144,13 @@ int fapi_rx_ulsch_ind(fapi_t* fapi, fapi_rx_ulsch_ind_t* ind)
+ 			pdus[i].rx_ue_information.rnti = rand_range(1, 65535);
+ 			
+ 			pdus[i].rx_indication_rel8.tl.tag = NFAPI_RX_INDICATION_REL8_TAG;
+-			pdus[i].rx_indication_rel8.length = rand_range(0, 1024);
+-			pdus[i].rx_indication_rel8.offset = 1;
++			pdus[i].rx_indication_rel8.length = 10;//rand_range(0, 1024);
++			pdus[i].rx_indication_rel8.offset = 0;//djp - 1;
+ 			pdus[i].rx_indication_rel8.ul_cqi = rand_range(0, 255);
+ 			pdus[i].rx_indication_rel8.timing_advance = rand_range(0, 63);
+ 			
+-			pdus[i].rx_indication_rel9.tl.tag = NFAPI_RX_INDICATION_REL9_TAG;
+-			pdus[i].rx_indication_rel9.timing_advance_r9 = rand_range(0, 7690);
++			//pdus[i].rx_indication_rel9.tl.tag = NFAPI_RX_INDICATION_REL9_TAG;
++			//pdus[i].rx_indication_rel9.timing_advance_r9 = rand_range(0, 7690);
+ 			
+ 			pdus[i].data = &rx_data[0];
+ 		}
+diff --git a/vnf/inc/vnf_p7.h b/vnf/inc/vnf_p7.h
+index ab9a335..fc2ab4e 100644
+--- a/vnf/inc/vnf_p7.h
++++ b/vnf/inc/vnf_p7.h
+@@ -116,7 +116,8 @@ typedef struct {
+ 	
+ } vnf_p7_t;
+ 
+-uint32_t get_current_time_hr();
++uint32_t vnf_get_current_time_hr(void);
++
+ uint16_t increment_sfn_sf(uint16_t sfn_sf);
+ int vnf_sync(vnf_p7_t* vnf_p7, nfapi_vnf_p7_connection_info_t* p7_info);
+ int send_mac_subframe_indications(vnf_p7_t* config);
+diff --git a/vnf/public_inc/nfapi_vnf_interface.h b/vnf/public_inc/nfapi_vnf_interface.h
+index 6659e5d..4629013 100644
+--- a/vnf/public_inc/nfapi_vnf_interface.h
++++ b/vnf/public_inc/nfapi_vnf_interface.h
+@@ -450,7 +450,7 @@ typedef struct nfapi_vnf_config
+ /*! Creates and initialise the vnf config structure before use
+  * \return A pointer to a vnf config structure
+  */
+-nfapi_vnf_config_t* nfapi_vnf_config_create();
++nfapi_vnf_config_t* nfapi_vnf_config_create(void);
+ 
+ /*! Delete an vnf config
+  */
+@@ -864,7 +864,7 @@ typedef struct nfapi_vnf_p7_config
+ /*! Creates and initializes the nfapi_vnf_p7_config structure before use
+  *  \return A pointer to an allocated vnf p7 configuration
+  */
+-nfapi_vnf_p7_config_t* nfapi_vnf_p7_config_create();
++nfapi_vnf_p7_config_t* nfapi_vnf_p7_config_create(void);
+ 
+ /*! Cleanup and delete nfapi_vnf_p7_config structure
+  *  \param config A pointer to an vnf p7 configuration structure
+diff --git a/vnf/src/vnf.c b/vnf/src/vnf.c
+index fea3cf7..6800ee2 100644
+--- a/vnf/src/vnf.c
++++ b/vnf/src/vnf.c
+@@ -82,11 +82,18 @@ void nfapi_vnf_pnf_list_add(nfapi_vnf_config_t* config, nfapi_vnf_pnf_info_t* no
+ 
+ nfapi_vnf_pnf_info_t* nfapi_vnf_pnf_list_find(nfapi_vnf_config_t* config, int p5_idx)
+ {
++	NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s : config->pnf_list:%p\n", __FUNCTION__, config->pnf_list);
++
+ 	nfapi_vnf_pnf_info_t* curr = config->pnf_list;
+ 	while(curr != 0)
+ 	{
+ 		if(curr->p5_idx == p5_idx)
++                {
++                  NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s : curr->p5_idx:%d p5_idx:%d\n", __FUNCTION__, curr->p5_idx, p5_idx);
+ 			return curr;
++                        }
++
++                NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s : curr->next:%p\n", __FUNCTION__, curr->next);
+ 
+ 		curr = curr->next;
+ 	}
+diff --git a/vnf/src/vnf_interface.c b/vnf/src/vnf_interface.c
+index e559730..0aba0a2 100644
+--- a/vnf/src/vnf_interface.c
++++ b/vnf/src/vnf_interface.c
+@@ -342,6 +342,7 @@ int nfapi_vnf_start(nfapi_vnf_config_t* config)
+ 				{
+ 					NFAPI_TRACE(NFAPI_TRACE_INFO, "PNF connection (fd:%d) accepted from %s:%d \n", p5Sock,  inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
+ 					nfapi_vnf_pnf_info_t* pnf = (nfapi_vnf_pnf_info_t*)malloc(sizeof(nfapi_vnf_pnf_info_t));
++					NFAPI_TRACE(NFAPI_TRACE_INFO, "MALLOC nfapi_vnf_pnf_info_t for pnf_list pnf:%p\n", pnf);
+ 					memset(pnf, 0, sizeof(nfapi_vnf_pnf_info_t));
+ 					pnf->p5_sock = p5Sock;
+ 					pnf->p5_idx = p5_idx++;
+@@ -663,7 +664,7 @@ int nfapi_vnf_allocate_phy(nfapi_vnf_config_t* config, int p5_idx, uint16_t* phy
+ 	info->p5_idx = p5_idx;
+ 	info->phy_id = vnf->next_phy_id++;
+ 
+-	info->timing_window = 10;
++	info->timing_window = 30;       // This seems to override what gets set by the user - why???
+ 	info->timing_info_mode = 0x03;
+ 	info->timing_info_period = 128;
+ 
+diff --git a/vnf/src/vnf_p7.c b/vnf/src/vnf_p7.c
+index 8630385..1304176 100644
+--- a/vnf/src/vnf_p7.c
++++ b/vnf/src/vnf_p7.c
+@@ -15,6 +15,8 @@
+  */
+ 
+ 
++#include <time.h>
++
+ #include <sys/time.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -159,7 +161,7 @@ vnf_p7_rx_message_t* vnf_p7_rx_reassembly_queue_add_segment(vnf_p7_t* vnf_p7, vn
+ 		msg->sequence_number = sequence_number;
+ 		msg->num_segments_expected = m ? 255 : segment_number + 1;
+ 		msg->num_segments_received = 1;
+-		msg->rx_hr_time = get_current_time_hr();
++		msg->rx_hr_time = vnf_get_current_time_hr();
+ 
+ 		msg->segments[segment_number].buffer = (uint8_t*)vnf_p7_malloc(vnf_p7, data_len);
+ 		memcpy(msg->segments[segment_number].buffer, data, data_len);
+@@ -216,7 +218,7 @@ void vnf_p7_rx_reassembly_queue_remove_old_msgs(vnf_p7_t* vnf_p7, vnf_p7_rx_reas
+ 	vnf_p7_rx_message_t* iterator = queue->msg_queue;
+ 	vnf_p7_rx_message_t* previous = 0;
+ 
+-	uint32_t rx_hr_time = get_current_time_hr();
++	uint32_t rx_hr_time = vnf_get_current_time_hr();
+ 
+ 	while(iterator != 0)
+ 	{
+@@ -254,7 +256,7 @@ void vnf_p7_rx_reassembly_queue_remove_old_msgs(vnf_p7_t* vnf_p7, vnf_p7_rx_reas
+ 	}
+ }
+ 
+-uint32_t get_current_time_hr()
++uint32_t vnf_get_current_time_hr()
+ {
+ 	struct timeval now;
+ 	(void)gettimeofday(&now, NULL);
+@@ -297,7 +299,7 @@ struct timespec timespec_delta(struct timespec start, struct timespec end)
+ 	return temp;
+ }
+ 
+-uint32_t get_sf_time(uint32_t now_hr, uint32_t sf_start_hr)
++static uint32_t get_sf_time(uint32_t now_hr, uint32_t sf_start_hr)
+ {
+ 	if(now_hr < sf_start_hr)
+ 	{
+@@ -321,7 +323,7 @@ uint32_t get_sf_time(uint32_t now_hr, uint32_t sf_start_hr)
+ 
+ uint32_t calculate_t1(uint16_t sfn_sf, uint32_t sf_start_time_hr)
+ {
+-	uint32_t now_time_hr = get_current_time_hr();
++	uint32_t now_time_hr = vnf_get_current_time_hr();
+ 
+ 	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
+ 
+@@ -344,7 +346,7 @@ uint32_t calculate_t4(uint32_t now_time_hr, uint16_t sfn_sf, uint32_t sf_start_t
+ 
+ uint32_t calculate_transmit_timestamp(uint16_t sfn_sf, uint32_t sf_start_time_hr)
+ {
+-	uint32_t now_time_hr = get_current_time_hr();
++	uint32_t now_time_hr = vnf_get_current_time_hr();
+ 
+ 	uint32_t sf_time_us = get_sf_time(now_time_hr, sf_start_time_hr);
+ 
+@@ -410,6 +412,8 @@ int vnf_p7_pack_and_send_p7_msg(vnf_p7_t* vnf_p7, nfapi_p7_message_header_t* hea
+ 		
+ 		int len = nfapi_p7_message_pack(header, buffer, sizeof(buffer), &vnf_p7->_public.codec_config);
+ 		
++                //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() phy_id:%d nfapi_p7_message_pack()=len=%d vnf_p7->_public.segment_size:%u\n", __FUNCTION__, header->phy_id, len, vnf_p7->_public.segment_size);
++
+ 		if(len < 0) 
+ 		{
+ 			NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() failed to pack p7 message phy_id:%d\n", __FUNCTION__, header->phy_id);
+@@ -429,6 +433,7 @@ int vnf_p7_pack_and_send_p7_msg(vnf_p7_t* vnf_p7, nfapi_p7_message_header_t* hea
+ 			int segment = 0;
+ 			int offset = NFAPI_P7_HEADER_LENGTH;
+ 			uint8_t tx_buffer[vnf_p7->_public.segment_size];
++                        NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() MORE THAN ONE SEGMENT phy_id:%d nfapi_p7_message_pack()=len=%d vnf_p7->_public.segment_size:%u\n", __FUNCTION__, header->phy_id, len, vnf_p7->_public.segment_size);
+ 			for(segment = 0; segment < segment_count; ++segment)
+ 			{
+ 				uint8_t last = 0;
+@@ -851,7 +856,7 @@ void vnf_handle_p7_vendor_extension(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vn
+ 
+ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ {
+-	uint32_t now_time_hr = get_current_time_hr();
++	uint32_t now_time_hr = vnf_get_current_time_hr();
+ 
+ 	if (pRecvMsg == NULL || vnf_p7  == NULL)
+ 	{
+@@ -871,7 +876,7 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 	nfapi_vnf_p7_connection_info_t* phy = vnf_p7_connection_info_list_find(vnf_p7, ind.header.phy_id);
+ 	uint32_t t4 = calculate_t4(now_time_hr, phy->sfn_sf, vnf_p7->sf_start_time_hr);
+ 
+-	uint32_t tx_2_rx = t4 - ind.t1;
++	uint32_t tx_2_rx = t4>ind.t1 ? t4 - ind.t1 : t4 + NFAPI_MAX_SFNSFDEC - ind.t1 ;
+ 	uint32_t pnf_proc_time = ind.t3 - ind.t2;
+ 
+ 	// divide by 2 using shift operator
+@@ -881,7 +886,7 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 	{
+ 		phy->latency[phy->min_sync_cycle_count] = latency;
+ 
+-		NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%d/%d) PNF to VNF !sync phy_id:%d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d\n",
++		NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%4d/%d) PNF to VNF !sync phy_id:%d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d\n",
+ 				NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ind.header.phy_id, ind.t1, ind.t2, ind.t3, t4, 
+ 				tx_2_rx, pnf_proc_time, latency);
+ 	}
+@@ -923,15 +928,27 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 
+ 		if(1)
+ 		{
+-			NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%4d/%1d) PNF to VNF phy_id:%2d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d offset(us):%8d filtered(us):%8d wrap[t1:%u t2:%u]\n", 
+-					NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ind.header.phy_id,
++                  struct timespec ts;
++                  clock_gettime(CLOCK_MONOTONIC, &ts);
++
++			NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%4d/%1d) %d.%d PNF to VNF phy_id:%2d (t1/2/3/4:%8u, %8u, %8u, %8u) txrx:%4u procT:%3u latency(us):%4d(avg:%4d) offset(us):%8d filtered(us):%8d wrap[t1:%u t2:%u]\n", 
++					NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ts.tv_sec, ts.tv_nsec, ind.header.phy_id,
+ 					ind.t1, ind.t2, ind.t3, t4, 
+-					tx_2_rx, pnf_proc_time, latency, phy->sf_offset, phy->sf_offset_filtered,
++					tx_2_rx, pnf_proc_time, latency, phy->average_latency, phy->sf_offset, phy->sf_offset_filtered,
+ 					(ind.t1<phy->previous_t1), (ind.t2<phy->previous_t2));
+ 		}
+ 
+ 	}
+ 
++        if (phy->filtered_adjust && (phy->sf_offset_filtered > 1e6 || phy->sf_offset_filtered < -1e6))
++        {
++          phy->filtered_adjust = 0;
++          phy->zero_count=0;
++          phy->min_sync_cycle_count = 2;
++          phy->in_sync = 0;
++          NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s - ADJUST TOO BAD - go out of filtered phy->sf_offset_filtered:%d\n", __FUNCTION__, phy->sf_offset_filtered);
++        }
++
+ 	if(phy->min_sync_cycle_count)
+ 		phy->min_sync_cycle_count--;
+ 
+@@ -954,7 +971,6 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 			phy->sf_offset = ind.t2 - (ind.t1 - phy->average_latency);
+ 
+ 			sfn_sf_dec += (phy->sf_offset / 1000);
+-
+ 		}
+ 		else
+ 		{
+@@ -976,12 +992,11 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 		{
+ 			phy->adjustment = NFAPI_SFNSF2DEC(new_sfn_sf) - NFAPI_SFNSF2DEC(curr_sfn_sf);
+ 
+-			//NFAPI_TRACE(NFAPI_TRACE_NOTE, "PNF to VNF phy_id:%d adjustment%d\n", ind.header.phy_id, phy->adjustment);
++			NFAPI_TRACE(NFAPI_TRACE_NOTE, "PNF to VNF phy_id:%d adjustment%d phy->previous_sf_offset_filtered:%d phy->previous_sf_offset_filtered:%d phy->sf_offset_trend:%d\n", ind.header.phy_id, phy->adjustment, phy->previous_sf_offset_filtered, phy->previous_sf_offset_filtered, phy->sf_offset_trend);
+ 
+ 			phy->previous_t1 = 0;
+ 			phy->previous_t2 = 0;
+ 
+-
+ 			if(phy->previous_sf_offset_filtered > 0)
+ 			{
+ 				if( phy->sf_offset_filtered > phy->previous_sf_offset_filtered)
+@@ -1083,9 +1098,14 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 
+ 						if(phy->insync_minor_adjustment != 0)
+ 						{
+-							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d suframes (sf_offset_filtered:%d) %d %d %d\n", 
++							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%4d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d subframes (sf_offset_filtered:%d) %d %d %d NEW:%d CURR:%d adjustment:%d\n", 
+ 										NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ind.header.phy_id,
+-										phy->insync_minor_adjustment, phy->insync_minor_adjustment_duration, phy->sf_offset_filtered, insync_minor_adjustment_1, insync_minor_adjustment_2, phy->sf_offset_trend); 
++										phy->insync_minor_adjustment, phy->insync_minor_adjustment_duration, 
++                                                                                phy->sf_offset_filtered, 
++                                                                                insync_minor_adjustment_1, insync_minor_adjustment_2, phy->sf_offset_trend,
++                                                                                NFAPI_SFNSF2DEC(new_sfn_sf),
++                                                                                NFAPI_SFNSF2DEC(curr_sfn_sf),
++                                                                                phy->adjustment); 
+ 						}
+ 					}
+ 				}
+@@ -1121,10 +1141,13 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 								// out of sync?
+ 							}
+ 							
+-							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d suframes (adjusment:%d sf_offset_filtered:%d) %d %d %d\n", 
++							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%4d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d subframes (adjustment:%d sf_offset_filtered:%d) %d %d %d NEW:%d CURR:%d adj:%d\n", 
+ 										NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ind.header.phy_id,
+ 										phy->insync_minor_adjustment, phy->insync_minor_adjustment_duration, phy->adjustment, phy->sf_offset_filtered,
+-										insync_minor_adjustment_1, insync_minor_adjustment_2, phy->sf_offset_trend); 
++										insync_minor_adjustment_1, insync_minor_adjustment_2, phy->sf_offset_trend,
++                                                                                NFAPI_SFNSF2DEC(new_sfn_sf),
++                                                                                NFAPI_SFNSF2DEC(curr_sfn_sf),
++                                                                                phy->adjustment); 
+ 							
+ 						}
+ 						else if(phy->adjustment < 0)
+@@ -1151,7 +1174,7 @@ void vnf_handle_ul_node_sync(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 								// out of sync?
+ 							}
+ 
+-							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d suframes (adjusment:%d sf_offset_filtered:%d) %d %d %d\n", 
++							NFAPI_TRACE(NFAPI_TRACE_NOTE, "(%d/%d) VNF phy_id:%d Apply minor insync adjustment %dus for %d subframes (adjustment:%d sf_offset_filtered:%d) %d %d %d\n", 
+ 										NFAPI_SFNSF2SFN(phy->sfn_sf), NFAPI_SFNSF2SF(phy->sfn_sf), ind.header.phy_id,
+ 										phy->insync_minor_adjustment, phy->insync_minor_adjustment_duration, phy->adjustment, phy->sf_offset_filtered,
+ 										insync_minor_adjustment_1, insync_minor_adjustment_2, phy->sf_offset_trend); 
+@@ -1219,7 +1242,16 @@ void vnf_handle_timing_info(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+ 		return;
+ 	}
+ 
+-	// todo : how to use this?
++        if (vnf_p7 && vnf_p7->p7_connections)
++        {
++          int16_t vnf_pnf_sfnsf_delta = NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf) - NFAPI_SFNSF2DEC(ind.last_sfn_sf);
++
++          //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PNF:SFN/SF:%d VNF:SFN/SF:%d deltaSFNSF:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(ind.last_sfn_sf), NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf), vnf_pnf_sfnsf_delta);
++          if (vnf_pnf_sfnsf_delta>1 || vnf_pnf_sfnsf_delta < -1)
++          {
++            NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() LARGE SFN/SF DELTA between PNF and VNF delta:%d VNF:%d PNF:%d\n\n\n\n\n\n\n\n\n", __FUNCTION__, vnf_pnf_sfnsf_delta, NFAPI_SFNSF2DEC(vnf_p7->p7_connections[0].sfn_sf), NFAPI_SFNSF2DEC(ind.last_sfn_sf));
++          }
++        }
+ }
+ 
+ void vnf_dispatch_p7_message(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf_p7)
+diff --git a/vnf/src/vnf_p7_interface.c b/vnf/src/vnf_p7_interface.c
+index ab4f00c..a35d8e3 100644
+--- a/vnf/src/vnf_p7_interface.c
++++ b/vnf/src/vnf_p7_interface.c
+@@ -142,6 +142,7 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 	NFAPI_TRACE(NFAPI_TRACE_INFO, "VNF P7 bind succeeded...\n");
+ 
+ 
++	//struct timespec original_pselect_timeout;
+ 	struct timespec pselect_timeout;
+ 	pselect_timeout.tv_sec = 0;
+ 	pselect_timeout.tv_nsec = 1000000; // ns in a 1 us
+@@ -157,13 +158,13 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 
+ 	struct timespec sf_duration;
+ 	sf_duration.tv_sec = 0;
+-	sf_duration.tv_nsec = 1000000; // ns in a 1 us
++	sf_duration.tv_nsec = 1e6; // We want 1ms pause
+ 
+ 	struct timespec sf_start;
+ 	clock_gettime(CLOCK_MONOTONIC, &sf_start);
+ 	long millisecond = sf_start.tv_nsec / 1e6;
+ 	sf_start = timespec_add(sf_start, sf_duration);
+-	//NFAPI_TRACE(NFAPI_TRACE_INFO, "next subframe will start at %d.%d\n", sf_start.tv_sec, sf_start.tv_nsec);
++	NFAPI_TRACE(NFAPI_TRACE_INFO, "next subframe will start at %d.%d\n", sf_start.tv_sec, sf_start.tv_nsec);
+ 
+ 	while(vnf_p7->terminate == 0)
+ 	{
+@@ -181,6 +182,8 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 
+ 		if((last_millisecond == -1) || (millisecond == last_millisecond) || (millisecond == (last_millisecond + 1) % 1000) )
+ 		{
++                  //NFAPI_TRACE(NFAPI_TRACE_INFO, "pselect_start:%d.%d sf_start:%d.%d\n", pselect_start.tv_sec, pselect_start.tv_nsec, sf_start.tv_sec, sf_start.tv_nsec);
++
+ 
+ 			if((pselect_start.tv_sec > sf_start.tv_sec) || 
+ 			   ((pselect_start.tv_sec == sf_start.tv_sec) && (pselect_start.tv_nsec > sf_start.tv_nsec)))
+@@ -196,16 +199,26 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 			{
+ 				// still time before the end of the subframe wait
+ 				pselect_timeout = timespec_sub(sf_start, pselect_start);
++
++#if 0
++                                NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() sf_start:%d.%ld pselect_start:%d.%ld pseclect_timeout:%d.%ld\n",
++                                    __FUNCTION__,
++                                    sf_start.tv_sec, sf_start.tv_nsec,
++                                    pselect_start.tv_sec, pselect_start.tv_nsec,
++                                    pselect_timeout.tv_sec, pselect_timeout.tv_nsec);
++#endif
+ 			}
+ 
++//original_pselect_timeout = pselect_timeout;
++
+ 			// detemine how long to sleep in ns before the start of the next 1ms
+ 			//pselect_timeout.tv_nsec = 1e6 - (pselect_start.tv_nsec % 1000000);
+ 
+-			//uint8_t underun_possiable =0;
++			//uint8_t underrun_possible =0;
+ 			
+ 			// if we are not sleeping until the next milisecond due to the
+ 			// insycn minor adjment flag it so we don't consider it an error
+-			//uint8_t underun_possiable =0;
++			//uint8_t underrun_possible =0;
+ 			/*
+ 			{
+ 				nfapi_vnf_p7_connection_info_t* phy = vnf_p7->p7_connections;
+@@ -222,7 +235,7 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 							pselect_timeout.tv_nsec = pselect_timeout.tv_nsec - (phy->insync_minor_adjustment * 1000);
+ 
+ 
+-						//underun_possiable = 1;
++						//underrun_possible = 1;
+ 					}
+ 					else if(phy->insync_minor_adjustment < 0)
+ 					{
+@@ -237,41 +250,98 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 			*/
+ 			
+ 
++//long wraps = pselect_timeout.tv_nsec % 1e9;
++
++
+ 			selectRetval = pselect(maxSock+1, &rfds, NULL, NULL, &pselect_timeout, NULL);
+ 
+ 			clock_gettime(CLOCK_MONOTONIC, &pselect_stop);
+ 
++                        nfapi_vnf_p7_connection_info_t* phy = vnf_p7->p7_connections;
++
++if (selectRetval==-1 && errno == 22)
++{
++  NFAPI_TRACE(NFAPI_TRACE_ERROR, "INVAL: pselect_timeout:%d.%ld adj[dur:%d adj:%d], sf_dur:%d.%ld\n", 
++  pselect_timeout.tv_sec, pselect_timeout.tv_nsec, 
++  phy->insync_minor_adjustment_duration, phy->insync_minor_adjustment, 
++  sf_duration.tv_sec, sf_duration.tv_nsec);
++}
++#if 0
++                        if (selectRetval != 0 || phy->insync_minor_adjustment_duration != 0)
++                          NFAPI_TRACE(NFAPI_TRACE_NOTE, "pselect()=%d maxSock:%d vnf_p7->socket:%d pselect_timeout:%u.%u original_pselect_timeout:%u.%u\n", 
++                              selectRetval, maxSock, vnf_p7->socket, pselect_timeout.tv_sec, pselect_timeout.tv_nsec,
++                              original_pselect_timeout.tv_sec, original_pselect_timeout.tv_nsec);
++#endif
++
+ 			if(selectRetval == 0)
+ 			{
+-				// calcualte the start of the next subframe
++				// calculate the start of the next subframe
+ 				sf_start = timespec_add(sf_start, sf_duration);
+ 				//NFAPI_TRACE(NFAPI_TRACE_INFO, "next subframe will start at %d.%d\n", sf_start.tv_sec, sf_start.tv_nsec);
+ 
+-				nfapi_vnf_p7_connection_info_t* phy = vnf_p7->p7_connections;
+ 				if(phy && phy->in_sync && phy->insync_minor_adjustment != 0 && phy->insync_minor_adjustment_duration > 0)
+ 				{
+-					NFAPI_TRACE(NFAPI_TRACE_NOTE, "[VNF] Subframe minor adjustment %dus\n", phy->insync_minor_adjustment);
++                                        long insync_minor_adjustment_ns = (phy->insync_minor_adjustment * 1000);
++
++                                        sf_start.tv_nsec -= insync_minor_adjustment_ns;
++
++#if 1
++                                        if (sf_start.tv_nsec > 1e9)
++                                        {
++                                          sf_start.tv_sec++;
++                                          sf_start.tv_nsec-=1e9;
++                                        }
++                                        else if (sf_start.tv_nsec < 0)
++                                        {
++                                          sf_start.tv_sec--;
++                                          sf_start.tv_nsec+=1e9;
++                                        }
++#else
++                                        //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[VNF] BEFORE adjustment - Subframe minor adjustment %dus sf_start.tv_nsec:%d\n", phy->insync_minor_adjustment, sf_start.tv_nsec);
+ 					if(phy->insync_minor_adjustment > 0)
+ 					{
+ 						// decrease the subframe duration a little
+-						sf_start.tv_nsec = sf_start.tv_nsec - (phy->insync_minor_adjustment * 1000);
++                                                if (sf_start.tv_nsec > insync_minor_adjustment_ns)
++                                                  sf_start.tv_nsec -= insync_minor_adjustment_ns;
++                                                else
++                                                {
++                                                  NFAPI_TRACE(NFAPI_TRACE_ERROR, "[VNF] Adjustment would make it negative sf:%d.%ld adjust:%ld\n\n\n", sf_start.tv_sec, sf_start.tv_nsec, insync_minor_adjustment_ns);
++                                                  sf_start.tv_sec--;
++                                                  sf_start.tv_nsec += 1e9 - insync_minor_adjustment_ns;
++                                                }
+ 					}
+ 					else if(phy->insync_minor_adjustment < 0)
+ 					{
+ 						// todo check we don't go below 0
+ 						// increase the subframe duration a little
+-						sf_start.tv_nsec = sf_start.tv_nsec - (phy->insync_minor_adjustment * 1000);
++						sf_start.tv_nsec += insync_minor_adjustment_ns;
++
++                                                if (sf_start.tv_nsec < 0)
++                                                {
++                                                  NFAPI_TRACE(NFAPI_TRACE_ERROR, "[VNF] OVERFLOW %d.%ld\n\n\n\n", sf_start.tv_sec, sf_start.tv_nsec);
++                                                  sf_start.tv_sec++;
++                                                  sf_start.tv_nsec += 1e9;
++                                                }
+ 					}
++#endif
+ 
+ 					//phy->insync_minor_adjustment = 0;
+-					phy->insync_minor_adjustment_duration--;
++                                        phy->insync_minor_adjustment_duration--;
++
++                                        NFAPI_TRACE(NFAPI_TRACE_NOTE, "[VNF] AFTER adjustment - Subframe minor adjustment %dus sf_start.tv_nsec:%d duration:%u\n", 
++                                            phy->insync_minor_adjustment, sf_start.tv_nsec, phy->insync_minor_adjustment_duration);
++
++                                        if (phy->insync_minor_adjustment_duration==0)
++                                        {
++                                          phy->insync_minor_adjustment = 0;
++                                        }
+ 				}
+ 				/*
+ 				long pselect_stop_millisecond = pselect_stop.tv_nsec / 1e6;
+ 				if(millisecond == pselect_stop_millisecond)
+ 				{
+ 					// we have woke up in the same subframe
+-					if(underun_possiable == 0)
++					if(underrun_possible == 0)
+ 						NFAPI_TRACE(NFAPI_TRACE_WARN, "subframe pselect underrun %ld (%d.%d)\n", millisecond, pselect_stop.tv_sec, pselect_stop.tv_nsec);
+ 				}
+ 				else if(((millisecond + 1) % 1000) != pselect_stop_millisecond)
+@@ -298,7 +368,7 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 
+ 		if(selectRetval == 0)
+ 		{
+-			vnf_p7->sf_start_time_hr = get_current_time_hr();
++			vnf_p7->sf_start_time_hr = vnf_get_current_time_hr();
+ 
+ 			// pselect timed out
+ 			nfapi_vnf_p7_connection_info_t* curr = vnf_p7->p7_connections;
+@@ -326,14 +396,18 @@ int nfapi_vnf_p7_start(nfapi_vnf_p7_config_t* config)
+ 		else
+ 		{
+ 			// pselect error
+-			if(selectRetval == EINTR)
++			if(selectRetval == -1 && errno == EINTR)
+ 			{
+ 				// a sigal was received.
+ 			}
+ 			else
+ 			{
+-				NFAPI_TRACE(NFAPI_TRACE_INFO, "P7 select failed result %d errno %d timeout:%d.%d\n", selectRetval, errno, pselect_timeout.tv_sec, pselect_timeout.tv_nsec);
++				NFAPI_TRACE(NFAPI_TRACE_INFO, "P7 select failed result %d errno %d timeout:%d.%d orginal:%d.%d last_ms:%ld ms:%ld\n", selectRetval, errno, pselect_timeout.tv_sec, pselect_timeout.tv_nsec, pselect_timeout.tv_sec, pselect_timeout.tv_nsec, last_millisecond, millisecond);
+ 				// should we exit now?
++                                if (selectRetval == -1 && errno == 22) // invalid argument??? not sure about timeout duration
++                                {
++                                  usleep(100000);
++                                }
+ 			}
+ 		}
+ 
+@@ -360,10 +434,12 @@ int nfapi_vnf_p7_stop(nfapi_vnf_p7_config_t* config)
+ 
+ int nfapi_vnf_p7_add_pnf(nfapi_vnf_p7_config_t* config, const char* pnf_p7_addr, int pnf_p7_port, int phy_id)
+ {
+-	NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(phy_id:%d pnf_addr:%s:%d)\n", __FUNCTION__, phy_id,  pnf_p7_addr, pnf_p7_port);
++	NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(config:%p phy_id:%d pnf_addr:%s pnf_p7_port:%d)\n", __FUNCTION__, config, phy_id,  pnf_p7_addr, pnf_p7_port);
+ 
+ 	if(config == 0)
+-		return -1;
++        {
++          return -1;
++        }
+ 
+ 	vnf_p7_t* vnf_p7 = (vnf_p7_t*)config;
+ 
+@@ -411,6 +487,8 @@ int nfapi_vnf_p7_del_pnf(nfapi_vnf_p7_config_t* config, int phy_id)
+ }
+ int nfapi_vnf_p7_dl_config_req(nfapi_vnf_p7_config_t* config, nfapi_dl_config_request_t* req)
+ {
++	//NFAPI_TRACE(NFAPI_TRACE_INFO, "%s(config:%p req:%p)\n", __FUNCTION__, config, req);
++
+ 	if(config == 0 || req == 0)
+ 		return -1;
+ 
+diff --git a/vnf_sim/src/mac.cpp b/vnf_sim/src/mac.cpp
+index aa97f72..fa6f487 100644
+--- a/vnf_sim/src/mac.cpp
++++ b/vnf_sim/src/mac.cpp
+@@ -743,7 +743,7 @@ extern "C"
+ 			{
+ 				cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.number_of_cc = 1;
+ 				cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size = rand_range(0, 3);
+-				cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size = rand_range(0, 255);
++				cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[0] = rand_range(0, 255);
+ 			}
+ 			
+ 			cqi_ri_information.cqi_ri_information_rel13.tl.tag = NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL13_TAG;
+diff --git a/vnf_sim/src/main.cpp b/vnf_sim/src/main.cpp
+index b79ac40..5dc7161 100644
+--- a/vnf_sim/src/main.cpp
++++ b/vnf_sim/src/main.cpp
+@@ -428,6 +428,20 @@ void phy_deallocate_p7_vendor_ext(nfapi_p7_message_header_t* header)
+ 	free(header);
+ }
+ 
++//static pthread_t vnf_start_pthread;
++static pthread_t vnf_p7_start_pthread;
++void* vnf_p7_start_thread(void *ptr)
++{
++  printf("%s()\n", __FUNCTION__);
++
++  //std::shared_ptr<nfapi_vnf_p7_config> config = std::shared_ptr<nfapi_vnf_p7_config>(ptr);
++  nfapi_vnf_p7_config_t *config = (nfapi_vnf_p7_config_t *)ptr;
++
++  nfapi_vnf_p7_start(config);
++
++  return 0;
++}
++
+ void set_thread_priority(int priority)
+ {
+ 	//printf("%s(priority:%d)\n", __FUNCTION__, priority);
+@@ -458,6 +472,8 @@ void set_thread_priority(int priority)
+ 
+ void* vnf_p7_thread_start(void* ptr)
+ {
++  printf("%s()\n", __FUNCTION__);
++
+ 	set_thread_priority(79);
+ 
+ 	vnf_p7_info* p7_vnf = (vnf_p7_info*)ptr;
+@@ -494,10 +510,10 @@ void* vnf_p7_thread_start(void* ptr)
+ 	p7_vnf->config->allocate_p7_vendor_ext = &phy_allocate_p7_vendor_ext;
+ 	p7_vnf->config->deallocate_p7_vendor_ext = &phy_deallocate_p7_vendor_ext;
+ 
+-	nfapi_vnf_p7_start(p7_vnf->config.get());
++        printf("[VNF] Creating VNF NFAPI start thread %s\n", __FUNCTION__);
++        pthread_create(&vnf_p7_start_pthread, NULL, &vnf_p7_start_thread, p7_vnf->config.get());
+ 
+ 	return 0;
+-
+ }
+ 
+ int pnf_connection_indication_cb(nfapi_vnf_config_t* config, int p5_idx)
+diff --git a/wireshark/packet-nfapi.c b/wireshark/packet-nfapi.c
+index da0edb0..7e0f23f 100755
+--- a/wireshark/packet-nfapi.c
++++ b/wireshark/packet-nfapi.c
+@@ -1,6069 +1,12284 @@
+-/*
++/* packet-nfapi.c
++* Routines for Network Function Application Platform Interface (nFAPI) dissection
+ * Copyright 2017 Cisco Systems, Inc.
+ *
+-* Licensed under the Apache License, Version 2.0 (the "License");
+-* you may not use this file except in compliance with the License.
+-* You may obtain a copy of the License at
++* Wireshark - Network traffic analyzer
++* By Gerald Combs <gerald@wireshark.org>
++* Copyright 1998 Gerald Combs
++*
++* This program is free software; you can redistribute it and/or
++* modify it under the terms of the GNU General Public License
++* as published by the Free Software Foundation; either version 2
++* of the License, or (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program; if not, write to the Free Software
++* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+-* http://www.apache.org/licenses/LICENSE-2.0
++* References:
++* SCF082.09.04  http://scf.io/en/documents/082_-_nFAPI_and_FAPI_specifications.php
+ *
+-* Unless required by applicable law or agreed to in writing, software
+-* distributed under the License is distributed on an "AS IS" BASIS,
+-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-* See the License for the specific language governing permissions and
+-* limitations under the License.
+ */
+-
+-
+-#include "config.h" 
+-
+-#include <windows.h>
+-#include <stdio.h>
+-#include <stdint.h>
+-
+-#include <epan/packet.h>
+-#include <epan/exceptions.h>
+-#include <epan/prefs.h>
+-#include <epan/expert.h>
+-#include <epan/reassemble.h>
+-
++
++#include "config.h"
++
++#include <epan/packet.h>
++#include <epan/exceptions.h>
++#include <epan/expert.h>
++#include <epan/reassemble.h>
++#include <epan/wmem/wmem.h>
++
++#include <ptvcursor.h>
++
++void proto_register_nfapi(void);
++void proto_reg_handoff_nfapi(void);
++
+ #define NFAPI_HEADER_LENGTH 8
+-#define NFAPI_P7_HEADER_LENGTH 16
+-
+-typedef int(*Decode_operation)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset);
+-
+-static const value_string nfapi_error_vals[] = {
+-	{ 0x0, "MSG_OK" },
+-	{ 0x1, "MSG_INVALID_STATE" },
+-	{ 0x2, "MSG_INVALID_CONFIG" },
+-	{ 0x3, "SFN_OUT_OF_SYNC" },
+-	{ 0x4, "MSG_SUBFRAME_ERR" },
+-	{ 0x5, "MSG_BCH_MISSING" },
+-	{ 0x6, "MSG_BCH_MISSING" },
+-	{ 0x7, "MSG_HI_ERR" },
+-	{ 0x8, "MSG_TX_ERR" },
+-	{ 0, NULL },
+-};
+-
+-static const value_string nfapi_p4_error_vals[] = {
+-	{ 100, "MSG_OK" },
+-	{ 101, "MSG_INVALID_STATE" },
+-	{ 102, "MSG_INVALID_CONFIG" },
+-	{ 103, "MSG_RAT_NOT_SUPPORTED" },
+-	{ 200, "MSG_NMM_STOP_OK" },
+-	{ 201, "MSG_NMM_STOP_IGNORED" },
+-	{ 202, "MSG_NMM_STOP_INVALID_STATE" },
+-	{ 300, "MSG_PROCEDURE_COMPLETE" },
+-	{ 301, "MSG_PROCEDURE_STOPPED" },
+-	{ 302, "MSG_PARTIAL_RESULTS" },
+-	{ 303, "MSG_TIMEOUT" },
+-	{ 0, NULL },
+-};
+-
+-static const value_string nfapi_rat_type_vals[] = {
+-	{ 0, "LTE" },
+-	{ 1, "UTRAN" },
+-	{ 2, "GERAN" },
+-	{ 0, NULL },
+-};
+-
+-typedef enum{
+-	UN_ALIGNED_SYNCHRONIZATION = 0,
+-	INTERNAL_PNF_FRAME_ALIGNMENT,
+-	ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION
+-} nfapi_sync_mode_e;
+-
+-static const value_string nfapi_sync_mode_vals[] = {
+-	{ UN_ALIGNED_SYNCHRONIZATION, "UN-ALIGNED SYNCHRONIZATION" },
+-	{ INTERNAL_PNF_FRAME_ALIGNMENT, "INTERNAL PNF FRAME ALIGNMENT" },
+-	{ ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION, "ABSOLUTE TIME ALIGNED SYNCHRONIZATION" }
+-};
+-
+-typedef enum {
+-	NONE = 0,
+-	GPS,
+-	GLONASS,
+-	BEIDOU
+-} location_mode_e;
+-
+-static const value_string location_mode_vals[] = {
+-	{ NONE, "NONE" },
+-	{ GPS, "GPS" },
+-	{ GLONASS, "GLONASS" },
+-	{ BEIDOU, "BeiDou" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_uplink_rs_hopping_vals[] = {
+-	{ 0, "RS_NO_HOPPING" },
+-	{ 1, "RS_GROUP_HOPPING" },
+-	{ 2, "RS_SEQUENCE_HOPPING" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_laa_carrier_type_vals[] = {
+-	{ 0, "No multi carrier support" },
+-	{ 1, "Mode A1" },
+-	{ 2, "Mode A12" },
+-	{ 3, "Mode B1" },
+-	{ 4, "Mode B2" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_mutli_carrier_lbt_support_vals[] = {
+-	{ 0, "Multi carrier Mode A1" },
+-	{ 1, "Multi carrier Mode A2" },
+-	{ 2, "Multi carrier Mode B1" },
+-	{ 3, "Multi carrier Mode B2" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_lbt_dl_req_pdu_type[] = {
+-	{ 0, "LBT_PDSCH_REQ PDU" },
+-	{ 1, "LBT_DRS_REQ PDU" },
+-	{ 0, NULL }
+-};
+-
+-
+-static const value_string nfapi_lbt_dl_ind_pdu_type[] = {
+-	{ 0, "LBT_PDSCH_RSP PDU" },
+-	{ 1, "LBT_DRS_RSP PDU" },
+-
+-	{ 0, NULL }
+-};
+-
+-
+-
+-
+-/* These are definitions where data 0 & 1 represent/provide a string name*/
+-
+-static const true_false_string true_false_strname = {
+-	"TRUE",
+-	"FALSE"
+-};
+-
+-static const true_false_string  nfapi_csi_report_type_strname = {
+-	"Periodic",
+-	"Aperiodic",
+-};
+-
+-static const true_false_string nfapi_control_type_string_name = {
+-	"CQI/PMI",
+-	"RI",
+-};
+-
+-static const true_false_string transport_block_to_codeword_swap_flag = {
+-	"NO_SWAPPING",
+-	"SWAPPED"
+-};
+-
+-static const true_false_string virtual_resource_block_assignment_flag = {
+-	"LOCALIZED",
+-	"DISTRIBUTED"
+-};
+-
+-static const true_false_string ngap_string_name = {
+-	"N-GAP 1",
+-	"N-GAP 2"
+-};
+-
+-static const true_false_string  nprb_strname = {
+-	"= 2",
+-	"= 3",
+-};
+-
+-static const true_false_string cyclic_prefix_type_strname = {
+-	"CP_NORMAL",
+-	"CP_EXTENDED"
+-};
+-
+-static const true_false_string support_strname = {
+-	"No Support",
+-	"Support"
+-};
+-
+-static const true_false_string partial_sf_support_strname =
+-{
+-	"Start partial SF support",
+-	"End partial SF support"
+-};
+-
+-static const true_false_string phich_duration_strname = {
+-	"PHICH_D_NORMAL",
+-	"PHICH_D_EXTENDED"
+-};
+-
+-static const true_false_string high_speed_flag_strname = {
+-	"HS_UNRESTRICTED_SET",
+-	"HS_RESTRICTED_SET"
+-};
+-
+-static const true_false_string hopping_mode_strname = {
+-	"HM_INTER_SF",
+-	"HM_INTRA_INTER_SF"
+-};
+-
+-static const true_false_string enabled_disabled_strname = {
+-	"Enabled",
+-	"Disabled"
+-};
+-
+-static const true_false_string srs_simult_tx_strname = {
+-	"No Simultaneous Transmission",
+-	"Simultaneous Transmission"
+-};
+-
+-static const true_false_string crc_flag_strname = {
+-	"CRC_CORRECT",
+-	"CRC_ERROR"
+-};
+-
+-static const true_false_string hi_value_strname = {
+-	"HI_NACK",
+-	"HI_ACK"
+-};
+-
+-static const true_false_string flag_tb2_strname = {
+-	"HI_NOT_PRESENT",
+-	"HI_PRESENT"
+-};
+-
+-static const true_false_string nfapi_multi_carrier_tx_strname = {
+-	"Mutual transmission (self-deferral support for current carrier)",
+-	"Transmit on channel access win (no self-deferral)"
+-};
+-
+-static const true_false_string nfapi_multi_carrier_freeze_strname = {
+-	"Absence of other technology isn’t guaranteed",
+-	"Absence of other technology is guaranteed"
+-};
+-
+-static const value_string nfapi_dl_config_pdu_type_vals[] = {
+-	{ 0, "DL_CONFIG_DCI_DL_PDU" },
+-	{ 1, "DL_CONFIG_BCH_PDU" },
+-	{ 2, "DL_CONFIG_MCH_PDU" },
+-	{ 3, "DL_CONFIG_DLSCH_PDU" },
+-	{ 4, "DL_CONFIG_PCH_PDU" },
+-	{ 5, "DL_CONFIG_PRS_PDU" },
+-	{ 6, "DL_CONFIG_CSI_RS_PDU" },
+-	{ 7, "DL_CONFIG_EPDCCH_DL_PDU" },
+-	{ 8, "DL_CONFIG_EPDCCH_DL_PDU" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_duplex_mode_vals[] = {
+-	{ 0, "TDD" },
+-	{ 1, "FDD" },
+-	{ 2, "HD-FDD" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string modulation_vals[] = {
+-	{ 2, "QPSK" },
+-	{ 4, "16QAM" },
+-	{ 6, "64QAM" },
+-	{ 8, "256QAM" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string pch_modulation_vals[] = {
+-	{ 0, "QPSK" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string ue_mode_vals[] = {
+-	{ 0, "non LC/CE UE" },
+-	{ 1, "LC/CE UE" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string csi_rs_class_vals[] = {
+-	{ 0, "not used" },
+-	{ 1, "Class A" },
+-	{ 1, "Class B" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string csi_rs_cdm_type_vals[] = {
+-	{ 0, "cdm 2" },
+-	{ 1, "cdm 4" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string antenna_ports_vals[] = {
+-	{ 0, "1 antenna ports" },
+-	{ 1, "2 antenna ports" },
+-	{ 2, "4 antenna ports" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string combs_vals[] = {
+-	{ 0, "2 TC" },
+-	{ 1, "4 TC" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string resource_allocation_type_vals[] = {
+-	{ 0, "type 0" },
+-	{ 1, "type 1" },
+-	{ 2, "type 2 1A/1B/1D" },
+-	{ 3, "type 2 1C" },
+-	{ 4, "type 2 6-1A" },
+-	{ 5, "type UEModeB" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string transmission_scheme_vals[] = {
+-	{ 0, "SINGLE_ANTENNA_PORT_0" },
+-	{ 1, "TX_DIVERSITY" },
+-	{ 2, "LARGE_DELAY_CDD" },
+-	{ 3, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
+-	{ 4, "MULTI_USER_MIMO" },
+-	{ 5, "CLOSED_LOOP_RANK_1_PRECODING" },
+-	{ 6, "SINGLE_ANTENNA_PORT_5" },
+-	{ 7, "SINGLE_ANTENNA_PORT_7" },
+-	{ 8, "SINGLE_ANTENNA_PORT_8" },
+-	{ 9, "DUAL_LAYER_TX_PORT_7_AND_8" },
+-	{ 10, "UP_TO_8_LAYER_TX" },
+-	{ 11, "SINGLE_ANTENNA_PORT_11" },
+-	{ 12, "SINGLE_ANTENNA_PORT_13" },
+-	{ 13, "SINGLE_ANTENNA_PORT_11_13" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string ul_transmission_scheme_vals[] = {
+-	{ 0, "SINGLE_ANTENNA_PORT_10" },
+-	{ 1, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
+-};
+-
+-static const value_string dci_format_vals[] = {
+-	{ 0, "1" },
+-	{ 1, "1A" },
+-	{ 2, "1B" },
+-	{ 3, "1C" },
+-	{ 4, "1D" },
+-	{ 5, "2" },
+-	{ 6, "2A" },
+-	{ 7, "2B" },
+-	{ 8, "2C" },
+-	{ 9, "2D" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string pa_vals[] = {
+-	{ 0, "-6dB" },
+-	{ 1, "-4.77dB" },
+-	{ 2, "-3dB" },
+-	{ 3, "-1.77dB" },
+-	{ 4, "0dB" },
+-	{ 5, "1dB" },
+-	{ 6, "2dB" },
+-	{ 7, "3dB" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string transmission_mode_vals[] = {
+-	{ 1, "Mode 1" },
+-	{ 2, "Mode 2" },
+-	{ 3, "Mode 3" },
+-	{ 4, "Mode 4" },
+-	{ 5, "Mode 5" },
+-	{ 6, "Mode 6" },
+-	{ 7, "Mode 7" },
+-	{ 8, "Mode 8" },
+-	{ 9, "Mode 9" },
+-	{ 10, "Mode 10" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string nfapi_ul_config_pdu_type_vals[] = {
+-	{ 0, "ULSCH" },
+-	{ 1, "ULSCH_CQI_RI" },
+-	{ 2, "ULSCH_HARQ" },
+-	{ 3, "ULSCH_CQI_HARQ_RI" },
+-	{ 4, "UCI_CQI" },
+-	{ 5, "UCI_SR" },
+-	{ 6, "UCI_HARQ" },
+-	{ 7, "UCI_SR_HARQ" },
+-	{ 8, "UCI_CQI_HARQ" },
+-	{ 9, "UCI_CQI_SR" },
+-	{ 10, "UCI_CQI_SR_HARQ" },
+-	{ 11, "SRS" },
+-	{ 12, "HARQ_BUFFER" },
+-	{ 13, "ULSCH_UCI_CSI" },
+-	{ 14, "ULSCH_UCI_HARQ" },
+-	{ 15, "ULSCH_CSI_UCI_HARQ" },
+-	{ 0, NULL }
+-};
+-
+-typedef enum {
+-	NFAPI_ACK_NACK_MODE_BUNDLING = 0,
+-	NFAPI_ACK_NACK_MODE_MULTIPLEXING,
+-	NFAPI_ACK_NACK_MODE_FORMAT_1B_WITH_CHAN_SEL,
+-	NFAPI_ACK_NACK_MODE_FORMAT_3,
+-} nfapi_ack_nack_mode_e;
+-
+-static const value_string nfapi_ack_nack_mode_vals[] = {
+-	{ NFAPI_ACK_NACK_MODE_BUNDLING, "Bundling" },
+-	{ NFAPI_ACK_NACK_MODE_MULTIPLEXING, "Multiplexing" },
+-	{ NFAPI_ACK_NACK_MODE_FORMAT_1B_WITH_CHAN_SEL, "Format 1b with channel selection" },
+-	{ NFAPI_ACK_NACK_MODE_FORMAT_3, "Format 3" },
+-	{ 0, NULL }
+-};
+-
+-typedef enum {
+-	NFAPI_ANTENNA_PORT1 = 0,
+-	NFAPI_ANTENNA_PORT2,
+-	NFAPI_ANTENNA_PORT4,
+-} nfapi_ack_nack_mode_e;
+-
+-static const value_string nfapi_antenna_port_vals[] = {
+-	{ NFAPI_ANTENNA_PORT1, "1 " },
+-	{ NFAPI_ANTENNA_PORT2, "2 " },
+-	{ NFAPI_ANTENNA_PORT4, "4 " },
+-	{ 0, NULL }
+-};
+-
+-typedef enum{
+-	PHICH_R_ONE_SIXTH = 0,
+-	PHICH_R_HALF,
+-	PHICH_R_ONE,
+-	PHICH_R_TWO
+-} nfapi_phich_resource_e;
+-
+-static const value_string nfapi_phich_resource_vals[] = {
+-	{ PHICH_R_ONE_SIXTH, "PHICH_R_ONE_SIXTH " },
+-	{ PHICH_R_HALF, "PHICH_R_HALF" },
+-	{ PHICH_R_ONE, "PHICH_R_ONE" },
+-	{ PHICH_R_TWO, "PHICH_R_TWO" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string local_distributed_vals[] = {
+-	{ 0, "localized" },
+-	{ 1, "distributed" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string transport_block_to_codeword_swap_flag_vals[] = {
+-	{ 0, "no swapping" },
+-	{ 1, "swapped" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string ngap_vals[] = {
+-	{ 0, "Ngap1" },
+-	{ 1, "Ngap2" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string true_false_vals[] = {
+-	{ 0, "false" },
+-	{ 1, "true" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string exhustive_search_vals[] = {
+-	{ 0, "non-exhaustive search" },
+-	{ 1, "exhaustive search" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string not_used_enabled_vals[] = {
+-	{ 0, "not used" },
+-	{ 1, "enabled" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string hopping_vals[] = {
+-	{ 0, "no hopping" },
+-	{ 1, "hopping enabled" },
+-	{ 0, NULL }
+-};
+-
+-
+-static const value_string rnti_type_vals[] = {
+-	{ 1, "C-RNTI" },
+-	{ 2, "RA-RNTI, P-RNTI, SI-RNTI, SC-RNTI, G-RNTI" },
+-	{ 3, "SPS-CRNTI" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string primary_cells_type_vals[] = {
+-	{ 1, "TDD" },
+-	{ 2, "FDD" },
+-	{ 3, "HD_FDD" },
+-	{ 0, NULL }
+-};
+-
+-static const value_string ul_rssi_supported_vals[] = {
+-	{ 0, "Uplink RSSI not supported" },
+-	{ 1, "Uplink RSSI supported" },
+-	{ 0, NULL}
+-};
+-
+-
+-typedef enum
+-{
+-	NMM_NONE = 0,
+-	NMM_ONLY,
+-	NMM_IN_CONFIGURED_STATE,
+-	NMM_IN_RUNNING_STATE,
+-	NMM_IN_CONFIGURED_AND_RUNNING_STATE
+-} nmm_modes_supported_e;
+-
+-static const value_string nmm_modes_supported_vals[] =
+-{
+-	{ NMM_NONE, "NONE" },
+-	{ NMM_ONLY, "NMM_ONLY" },
+-	{ NMM_IN_CONFIGURED_STATE, "NMM_IN_CONFIGURED_STATE" },
+-	{ NMM_IN_RUNNING_STATE, "NMM_IN_RUNNING_STATE" },
+-	{ NMM_IN_CONFIGURED_AND_RUNNING_STATE, "NMM_IN_CONFIGURED_AND_RUNNING_STAT" },
+-	{ 0, NULL }
+-};
+-
+-
+-
+-
+-
+-static int proto_nfapi = -1;
+-
+-/* These are for the subtrees */
+-static gint ett_nfapi_message_tree = -1;
+-static gint ett_nfapi_p4_p5_message_header = -1;
+-static gint ett_nfapi_p7_message_header = -1;
+-static gint ett_nfapi_tlv_tree = -1;
+-static gint ett_nfapi_tl = -1;
+-static gint ett_nfapi_pnf_param_response = -1;
+-static gint ett_nfapi_pnf_phy = -1;
+-static gint ett_nfapi_pnf_phy_rel10 = -1;
+-static gint ett_nfapi_pnf_phy_rel11 = -1;
+-static gint ett_nfapi_pnf_phy_rel12 = -1;
+-static gint ett_nfapi_pnf_phy_rel13 = -1;
+-static gint ett_nfapi_pnf_rf = -1;
+-static gint ett_nfapi_phy_rf_config_info = -1;
+-static gint ett_nfapi_pnf_phy_rf_config = -1;
+-static gint ett_nfapi_pnf_phy_rf_config_instance = -1;
+-static gint ett_nfapi_phy_state = -1;
+-static gint ett_nfapi_l1_status = -1;
+-static gint ett_nfapi_rf_bands = -1;
+-static gint ett_nfapi_tx_antenna_ports = -1;
+-static gint ett_nfapi_harq_ack_nack_data = -1;
+-static gint ett_nfapi_harq_data = -1;
+-static gint ett_nfapi_cc = -1;
+-static gint ett_nfapi_rbs = -1;
+-static gint ett_nfapi_antennas = -1;
+-static gint ett_nfapi_dl_config_dci_dl_pdu_rel8 = -1;
+-static gint ett_nfapi_dl_config_dci_dl_pdu_rel9 = -1;
+-static gint ett_nfapi_dl_config_dci_dl_pdu_rel10 = -1;
+-static gint ett_nfapi_dl_config_dci_dl_pdu = -1;
+-static gint ett_nfapi_dl_config_request_pdu = -1;
+-static gint ett_nfapi_dl_config_request_body = -1;
+-static gint ett_nfapi_dl_config_request_pdu_list = -1;
+-static gint ett_nfapi_ul_config_request_pdu_list = -1;
+-static gint ett_nfapi_hi_dci0_request_pdu_list = -1;
+-static gint ett_nfapi_tx_request_pdu_list = -1;
+-static gint ett_nfapi_rx_indication_pdu_list = -1;
+-static gint ett_nfapi_harq_indication_pdu_list = -1;
+-static gint ett_nfapi_crc_indication_pdu_list = -1;
+-static gint ett_nfapi_sr_indication_pdu_list = -1;
+-static gint ett_nfapi_cqi_indication_pdu_list = -1;
+-static gint ett_nfapi_preamble_indication_pdu_list = -1;
+-static gint ett_nfapi_srs_indication_pdu_list = -1;
+-static gint ett_nfapi_lbt_dl_config_pdu_list = -1;
+-static gint ett_nfapi_lbt_dl_indication_pdu_list = -1;
+-static gint ett_nfapi_dl_node_sync = -1;
+-static gint ett_nfapi_ul_node_sync = -1;
+-static gint ett_nfapi_timing_info = -1;
+-static gint ett_nfapi_dl_config_request_dlsch_pdu_rel8 = -1;
+-static gint ett_nfapi_subbands = -1;
+-static gint ett_nfapi_dl_config_request_dlsch_pdu_rel9 = -1;
+-static gint ett_nfapi_dl_config_request_dlsch_pdu_rel10 = -1;
+-static gint ett_nfapi_dl_config_bch_pdu_rel8 = -1;
+-static gint ett_nfapi_dl_config_mch_pdu_rel8 = -1;
+-static gint ett_nfapi_dl_config_pch_pdu_rel8 = -1;
+-static gint ett_nfapi_dl_config_prs_pdu_rel9 = -1;
+-static gint ett_nfapi_dl_config_csi_rs_pdu_rel10 = -1;
+-static gint ett_nfapi_ul_config_request_body = -1;
+-static gint ett_nfapi_ul_config_harq_buffer_pdu = -1;
+-static gint ett_nfapi_ul_config_ue_information_rel8 = -1;
+-static gint ett_nfapi_ul_config_sr_information_pdu_rel8 = -1;
+-static gint ett_nfapi_ul_config_ulsch_pdu_rel8 = -1;
+-static gint ett_nfapi_ul_config_ulsch_pdu_rel10 = -1;
+-static gint ett_nfapi_ul_config_cqi_ri_information_rel8 = -1;
+-static gint ett_nfapi_ul_config_cqi_ri_information_rel9 = -1;
+-static gint ett_nfapi_ul_config_ulsch_harq_information_rel10 = -1;
+-static gint ett_nfapi_ul_config_initial_transmission_parameters_rel8 = -1;
+-static gint ett_nfapi_ul_config_cqi_information_rel8 = -1;
+-static gint ett_nfapi_ul_config_cqi_information_rel10 = -1;
+-static gint ett_nfapi_ul_config_sr_information_rel8 = -1;
+-static gint ett_nfapi_ul_config_sr_information_rel10 = -1;
+-static gint ett_nfapi_ul_config_harq_information_rel10_tdd = -1;
+-static gint ett_nfapi_ul_config_harq_information_rel8_fdd = -1;
+-static gint ett_nfapi_ul_config_harq_information_rel9_fdd = -1;
+-static gint ett_nfapi_ul_config_srs_pdu_rel8 = -1;
+-static gint ett_nfapi_ul_config_srs_pdu_rel10 = -1;
+-static gint ett_nfapi_crc_indication_body = -1;
+-static gint ett_nfapi_bf_vector_antennas = -1;
+-static gint ett_nfapi_bf_vectors = -1;
+-static gint ett_nfapi_csi_rs_resource_configs = -1;
+-static gint ett_nfapi_csi_rs_bf_vector = -1;
+-static gint ett_nfapi_epdcch_prbs = -1;
+-static gint ett_nfapi_precoding = -1;
+-static gint ett_nfapi_earfcn_list = -1;
+-static gint ett_nfapi_uarfcn_list = -1;
+-static gint ett_nfapi_arfcn_list = -1;
+-static gint ett_nfapi_rssi_list = -1;
+-static gint ett_nfapi_pci_list = -1;
+-static gint ett_nfapi_psc_list = -1;
+-static gint ett_nfapi_lte_cells_found_list = -1;
+-static gint ett_nfapi_utran_cells_found_list = -1;
+-static gint ett_nfapi_geran_cells_found_list = -1;
+-static gint ett_nfapi_si_periodicity_list = -1;
+-
+-static expert_field ei_invalid_range = EI_INIT;
+-static expert_field ei_power_invalid = EI_INIT;
+-static expert_field ei_ref_sig_power_invalid = EI_INIT;
+-
+-
+-static int hf_nfapi_message_tree = -1;
+-
+-static int hf_nfapi_p4_p5_message_header = -1;
+-static int hf_nfapi_p4_p5_message_header_phy_id = -1;
+-static int hf_nfapi_p4_p5_message_header_message_id = -1;
+-static int hf_nfapi_p4_p5_message_header_message_length = -1;
+-static int hf_nfapi_p4_p5_message_header_spare = -1;
+-
+-static int hf_nfapi_p7_message_header = -1;
+-static int hf_nfapi_p7_message_header_phy_id = -1;
+-static int hf_nfapi_p7_message_header_message_id = -1;
+-static int hf_nfapi_p7_message_header_message_length = -1;
+-static int hf_nfapi_p7_message_header_m = -1;
+-static int hf_nfapi_p7_message_header_segment = -1;
+-static int hf_nfapi_p7_message_header_sequence_number = -1;
+-static int hf_nfapi_p7_message_header_checksum = -1;
+-static int hf_nfapi_p7_message_header_transmit_timestamp = -1;
+-
+-static int hf_nfapi_tlv_tree = -1;
+-
+-static int hf_nfapi_tl = -1;
+-static int hf_nfapi_tl_tag = -1;
+-static int hf_nfapi_tl_length = -1;
+-static int hf_nfapi_tag_uint8_value = -1;
+-static int hf_nfapi_tag_uint16_value = -1;
+-
+-static int hf_nfapi_pnf_param_general = -1;
+-static int hf_nfapi_sync_mode = -1;
+-static int hf_nfapi_location_mode = -1;
+-static int hf_nfapi_location_coordinates = -1;
+-static int hf_nfapi_location_coordinates_length = -1;
+-static int hf_nfapi_dl_config_timing = -1;
+-static int hf_nfapi_tx_timing = -1;
+-static int hf_nfapi_ul_config_timing = -1;
+-static int hf_nfapi_hi_dci0_timing = -1;
+-static int hf_nfapi_maximum_number_phys = -1;
+-static int hf_nfapi_maximum_total_bandwidth = -1;
+-static int hf_nfapi_maximum_total_number_dl_layers = -1;
+-static int hf_nfapi_maximum_total_number_ul_layers = -1;
+-static int hf_nfapi_shared_bands = -1;
+-static int hf_nfapi_shared_pa = -1;
+-static int hf_nfapi_maximum_total_power = -1;
+-static int hf_nfapi_oui= -1;
+-
+-static int hf_nfapi_pdu = -1;
+-
+-static int hf_nfapi_pnf_phy = -1;
+-static int hf_nfapi_pnf_phy_nfapi_tl = -1; /* structure hf_nfapi_tl*/
+-static int hf_nfapi_pnf_phy_number_phy = -1;
+-static int hf_nfapi_pnf_phy_config_index = -1;
+-static int hf_nfapi_number_of_rf_exclusions = -1;
+-static int hf_nfapi_dl_bandwidth_support = -1;
+-static int hf_nfapi_ul_bandwidth_support = -1;
+-static int hf_nfapi_downlink_channel_bandwidth_supported = -1;
+-static int hf_nfapi_uplink_channel_bandwidth_supported = -1;
+-static int hf_nfapi_number_of_dl_layers_supported = -1;
+-static int hf_nfapi_number_of_ul_layers_supported = -1;
+-static int hf_nfapi_maximum_3gpp_release_supported = -1;
+-static int hf_nfapi_nmm_modes_supported = -1;
+-
+-
+-static int hf_nfapi_pnf_rf = -1;
+-static int hf_nfapi_pnf_rf_nfapi_tl = -1;
+-static int hf_nfapi_number_of_rfs = -1;
+-static int hf_nfapi_rf_config_index = -1;
+-static int hf_nfapi_band = -1;
+-static int hf_nfapi_maximum_transmit_power = -1;
+-static int hf_nfapi_earfcn = -1;
+-static int hf_nfapi_minimum_transmit_power = -1;
+-static int hf_nfapi_number_of_antennas_suppported = -1;
+-static int hf_nfapi_minimum_downlink_frequency = -1;
+-static int hf_nfapi_maximum_downlink_frequency = -1;
+-static int hf_nfapi_minimum_uplink_frequency = -1;
+-static int hf_nfapi_maximum_uplink_frequency = -1;
+-
+-static int hf_nfapi_number_of_rf_bands = -1;
+-static int hf_nfapi_nmm_uplink_rssi_supported = -1;
+-
+-static int hf_nfapi_phy_rf_config_info = -1;
+-static int hf_nfapi_phy_rf_config_info_phy_id = -1;
+-static int hf_nfapi_phy_rf_config_info_band = -1;
+-
+-static int hf_nfapi_pnf_phy_rf_config = -1;
+-static int hf_nfapi_pnf_phy_rf_config_number_phy_rf_config_info = -1;
+-static int hf_nfapi_pnf_phy_rf_config_array_phy_rf_config_info = -1;
+-
+-static int hf_nfapi_pnf_phy_rel10 = -1;
+-static int hf_nfapi_transmission_mode7_supported = -1;
+-static int hi_nfapi_transmission_mode8_supported = -1;
+-static int hi_nfapi_two_antennas_ports_for_pucch = -1;
+-static int hi_nfapi_transmission_mode_9_supported = -1;
+-static int hi_nfapi_simultaneous_pucch_pusch = -1;
+-static int hi_nfapi_for_layer_tx_with_tm3_and_tm4 = -1;
+-
+-static int hf_nfapi_pnf_phy_rel11 = -1;
+-static int hf_nfapi_epdcch_supported = -1;
+-static int hi_nfapi_multi_ack_csi_reporting = -1;
+-static int hi_nfapi_pucch_tx_diversity_with_channel_selection = -1;
+-static int hi_nfapi_ul_comp_supported = -1;
+-static int hi_nfapi_transmission_mode_5_supported = -1;
+-
+-static int hf_nfapi_pnf_phy_rel12 = -1;
+-static int hf_nfapi_csi_subframe_set = -1;
+-static int hi_nfapi_enhanced_4tx_codebook = -1;
+-static int hi_nfapi_drs_supported = -1;
+-static int hi_nfapi_ul_64qam_supported = -1;
+-static int hi_nfapi_transmission_mode_10_supported = -1;
+-static int hi_nfapi_alternative_tbs_indices = -1;
+-
+-static int hf_nfapi_pnf_phy_rel13 = -1;
+-static int hf_nfapi_pucch_format_4_supported = -1;
+-static int hf_nfapi_pucch_format_5_supported = -1;
+-static int hf_nfapi_more_than_5_ca_supported = -1;
+-static int hf_nfapi_laa_supported = -1;
+-static int hf_nfapi_laa_ending_in_dwpts_supported = -1;
+-static int hf_nfapi_laa_starting_in_second_slot_supported = -1;
+-static int hf_nfapi_beamforming_supported = -1;
+-static int hf_nfapi_csi_rs_enhancements_supported = -1;
+-static int hf_nfapi_drms_enhancements_supported = -1;
+-static int hf_nfapi_srs_enhancements_supported = -1;
+-
+-
+-// P5 Message Structures
+-static int hf_nfapi_pnf_param_response_pnf_param_general = -1;
+-static int hf_nfapi_pnf_param_response_pnf_phy = -1;
+-static int hf_nfapi_pnf_param_response_pnf_rf = -1;
+-
+-static int hf_nfapi_pnf_param_request = -1;
+-static int hf_nfapi_pnf_param_response = -1;
+-static int hf_nfapi_pnf_config_request = -1;
+-static int hf_nfapi_pnf_config_response = -1;
+-static int hf_nfapi_pnf_start_request = -1;
+-static int hf_nfapi_pnf_start_response = -1;
+-static int hf_nfapi_pnf_stop_request = -1;
+-static int hf_nfapi_pnf_stop_response = -1;
+-static int hf_nfapi_param_response = -1;
+-static int hf_nfapi_start_request = -1;
+-static int hf_nfapi_start_response = -1;
+-static int hf_nfapi_stop_request = -1;
+-static int hf_nfapi_stop_response = -1;
+-
+-static int hf_nfapi_uint8_tag = -1;
+-static int hf_nfapi_uint16_tag = -1;
+-
+-static int hf_nfapi_error_code = -1;
+-static int hf_nfapi_p4_error_code = -1;
+-static int hf_nfapi_rat_type = -1;
+-static int hf_nfapi_num_tlv = -1;
+-static int hf_nfapi_phy_state = -1;
+-//	static int hf_nfapi_bandwidth_support = -1;
+-	
+-static int hf_nfapi_modulation_support = -1;
+-static int hf_nfapi_phy_antenna_capability = -1;
+-static int hf_nfapi_release_capability = -1;
+-static int hf_nfapi_mbsfn_capability = -1;
+-
+-static int hf_nfapi_laa_capability = -1;
+-static int hf_nfapi_pd_sensing_lbt_support = -1;
+-static int hf_nfapi_multi_carrier_lbt_support = -1;
+-static int hf_nfapi_partial_sf_support = -1;
+-	
+-/* nfapi nfapi */
+-static int hf_nfapi_pnf_address = -1;
+-static int hf_nfapi_pnf_address_ipv4 = -1;
+-static int hf_nfapi_pnf_address_ipv6 = -1;
+-
+-static int hf_nfapi_vnf_address = -1;
+-static int hf_nfapi_vnf_address_ipv4 = -1;
+-static int hf_nfapi_vnf_address_ipv6 = -1;
+-	
+-static int hf_nfapi_pnf_port = -1;
+-static int hf_nfapi_vnf_port = -1;
+-static int hf_nfapi_dl_ue_per_sf = -1;
+-static int hf_nfapi_ul_ue_per_sf = -1;
+-
+-static int hf_nfapi_rf_bands = -1;
+-static int hf_nfapi_rf_bands_nfapi_tl = -1;
+-static int hf_nfapi_rf_bands_count = -1;
+-static int hf_nfapi_rf_bands_value = -1;
+-
+-static int hf_nfapi_timing_window = -1;
+-static int hf_nfapi_timing_info_mode = -1;
+-static int hf_nfapi_timing_info_period = -1;
+-static int hf_nfapi_max_transmit_power = -1;
+-	
+-/* subframe config */
+-static int hf_nfapi_duplex_mode = -1;
+-static int hf_nfapi_pcfich_power_offset = -1;
+-static int hf_nfapi_pb = -1;
+-static int hf_nfapi_dl_cyclic_prefix_type = -1;
+-static int hf_nfapi_ul_cyclic_prefix_type = -1;
+-
+-static int hf_nfapi_tx_antenna_ports = -1;
+-static int hf_nfapi_rx_antenna_ports = -1;
+-
+-
+-
+-/* RF Config */
+-static int hf_nfapi_downlink_channel_bandwidth = -1;
+-static int hf_nfapi_uplink_channel_bandwidth = -1;
+-static int hf_nfapi_reference_signal_power = -1;
+-
+-/* PHICH config*/
+-static int hf_nfapi_phich_resource = -1;
+-static int hf_nfapi_phich_duration = -1;
+-static int hf_nfapi_phich_power_offset = -1;
+-
+-static int hf_nfapi_value_float = -1;
+-
+-/* SCH Config */
+-static int hf_nfapi_primary_synchronization_signal_epre_eprers = -1;
+-static int hf_nfapi_secondary_synchronization_signal_epre_eprers = -1;
+-static int hf_nfapi_physical_cell_id = -1;
+-
+-/* PRACH config */
+-static int hf_nfapi_configuration_index = -1;
+-static int hf_nfapi_root_sequence_index = -1;
+-static int hf_nfapi_zero_correlation_zone_configuration = -1;
+-static int hf_nfapi_high_speed_flag = -1;
+-static int hf_nfapi_frequency_offset = -1;
+-
+-/* PUSCH config */
+-static int hf_nfapi_hopping_mode = -1;
+-static int hf_nfapi_hopping_offset = -1;
+-
+-/* PUCCH config */
+-static int hf_nfapi_delta_pucch_shift = -1;
+-static int hf_nfapi_n_cqi_rb = -1;
+-static int hf_nfapi_n_an_cs = -1;
+-static int hf_nfapi_n1_pucch_an = -1;
+-
+-/* SRS config */
+-static int hf_nfapi_bandwidth_configuration = -1;
+-static int hf_nfapi_max_up_pts = -1;
+-static int hf_nfapi_srs_subframe_configuration = -1;
+-static int hf_nfapi_srs_acknack_srs_simultaneous_transmission = -1;
+-
+-/* uplink reference signal config */
+-static int hf_nfapi_uplink_rs_hopping = -1;
+-static int hf_nfapi_group_assignment = -1;
+-static int hf_nfapi_cyclic_shift_1_for_drms = -1;
+-
+-/* tdd frame structure */
+-static int hf_nfapi_subframe_assignment = -1;
+-static int hf_nfapi_special_subframe_patterns = -1;
+-
+-/* laa config */
+-static int hf_nfapi_ed_threshold_for_lbt_for_pdsch = -1;
+-static int hf_nfapi_ed_threshold_for_lbt_for_drs = -1;
+-static int hf_nfapi_pd_threshold = -1;
+-static int hf_nfapi_multi_carrier_type = -1;
+-static int hf_nfapi_multi_carrier_tx = -1;
+-static int hf_nfapi_multi_carrier_freeze = -1;
+-static int hf_nfapi_tx_antenna_ports_for_drs = -1;
+-static int hf_nfapi_transmission_power_for_drs = -1;
+-
+-/* eMTC config */
+-static int hf_nfapi_pbch_repetitions_enabled_r13 = -1;
+-static int hf_nfapi_prach_cat_m_root_sequence_index = -1;
+-static int hf_nfapi_prach_cat_m_zero_correlation_zone_configuration = -1;
+-static int hf_nfapi_prach_cat_m_high_speed_flag = -1;
+-
+-static int hf_nfapi_prach_ce_level_0_enable = -1;
+-static int hf_nfapi_prach_ce_level_0_configuration_index = -1;
+-static int hf_nfapi_prach_ce_level_0_frequency_offset = -1;
+-static int hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt = -1;
+-static int hf_nfapi_prach_ce_level_0_starting_subframe_periodicity = -1;
+-static int hf_nfapi_prach_ce_level_0_hopping_enabled = -1;
+-static int hf_nfapi_prach_ce_level_0_hopping_offset = -1;
+-
+-static int hf_nfapi_prach_ce_level_1_enable = -1;
+-static int hf_nfapi_prach_ce_level_1_configuration_index = -1;
+-static int hf_nfapi_prach_ce_level_1_frequency_offset = -1;
+-static int hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt = -1;
+-static int hf_nfapi_prach_ce_level_1_starting_subframe_periodicity = -1;
+-static int hf_nfapi_prach_ce_level_1_hopping_enabled = -1;
+-static int hf_nfapi_prach_ce_level_1_hopping_offset = -1;
+-
+-static int hf_nfapi_prach_ce_level_2_enable = -1;
+-static int hf_nfapi_prach_ce_level_2_configuration_index = -1;
+-static int hf_nfapi_prach_ce_level_2_frequency_offset = -1;
+-static int hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt = -1;
+-static int hf_nfapi_prach_ce_level_2_starting_subframe_periodicity = -1;
+-static int hf_nfapi_prach_ce_level_2_hopping_enabled = -1;
+-static int hf_nfapi_prach_ce_level_2_hopping_offset = -1;
+-
+-static int hf_nfapi_prach_ce_level_3_enable = -1;
+-static int hf_nfapi_prach_ce_level_3_configuration_index = -1;
+-static int hf_nfapi_prach_ce_level_3_frequency_offset = -1;
+-static int hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt = -1;
+-static int hf_nfapi_prach_ce_level_3_starting_subframe_periodicity = -1;
+-static int hf_nfapi_prach_ce_level_3_hopping_enabled = -1;
+-static int hf_nfapi_prach_ce_level_3_hopping_offset = -1;
+-static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b = -1;
+-static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a = -1;
+-
+-static int hf_nfapi_dl_modulation_support = -1;
+-static int hf_nfapi_ul_modulation_support = -1;
+-
+-/* 123 config */
+-static int hf_nfapi_data_report_mode = -1;
+-static int hf_nfapi_sfnsf = -1;
+-
+-// P7 Sub Structures
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel8 = -1;
+-static int hf_nfapi_dci_format = -1;
+-static int hf_nfapi_cce_idx = -1;
+-static int hf_nfapi_aggregation_level = -1;
+-static int hf_nfapi_mcs_1 = -1;
+-static int hf_nfapi_redundancy_version_1 = -1;
+-static int hf_nfapi_new_data_indicator_1 = -1;
+-static int hf_nfapi_mcs_2 = -1;
+-static int hf_nfapi_redundancy_version_2 = -1;
+-static int hf_nfapi_new_data_indicator_2 = -1;
+-static int hf_nfapi_harq_process = -1;
+-static int hf_nfapi_tpmi = -1;
+-static int hf_nfapi_pmi = -1;
+-static int hf_nfapi_precoding_information = -1;
+-static int hf_nfapi_tpc = -1;
+-static int hf_nfapi_downlink_assignment_index = -1;
+-static int hf_nfapi_transport_block_size_index = -1;
+-static int hf_nfapi_downlink_power_offset = -1;
+-static int hf_nfapi_allocate_prach_flag = -1;
+-static int hf_nfapi_preamble_index = -1;
+-static int hf_nfapi_prach_mask_index = -1;
+-static int hf_nfapi_rnti_type = -1;
+-
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel9 = -1;
+-static int hf_nfapi_mcch_flag = -1;
+-static int hf_nfapi_mcch_change_notification = -1;
+-static int hf_nfapi_scrambling_identity = -1;
+-
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel10 = -1;
+-static int hf_nfapi_cross_carrier_scheduling_flag = -1;
+-static int hf_nfapi_carrier_indicator = -1;
+-static int hf_nfapi_srs_flag = -1;
+-static int hf_nfapi_srs_request = -1;
+-static int hf_nfapi_antenna_ports_scrambling_and_layers = -1;
+-static int hf_nfapi_total_dci_length_including_padding = -1;
+-static int hf_nfapi_n_dl_rb = -1;
+-
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel11 = -1;
+-static int hf_nfapi_harq_ack_resource_offset = -1;
+-static int hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator = -1;
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel12 = -1;
+-static int hf_nfapi_primary_cell_type = -1;
+-static int hf_nfapi_ul_dl_configuration_flag = -1;
+-static int hf_nfapi_number_of_ul_dl_configurations = -1;
+-static int hf_nfapi_ul_dl_configuration_index = -1;
+-static int hf_nfapi_dl_config_dci_dl_pdu_rel13 = -1;
+-static int hf_nfapi_laa_end_partial_sf_flag = -1;
+-static int hf_nfapi_laa_end_partial_sf_configuration = -1;
+-static int hf_nfapi_initial_lbt_sf = -1;
+-static int hf_nfapi_codebooksize_determination_r13 = -1;
+-static int hf_nfapi_rel13_drms_table_flag = -1;
+-
+-
+-static int hf_nfapi_dl_config_dci_dl_pdu = -1;
+-static int hf_nfapi_dl_config_dci_dl_pdu_nfapi_dl_config_dci_dl_pdu_rel8 = -1;
+-static int hf_nfapi_dl_config_dci_dl_pdu_nfapi_dl_config_dci_dl_pdu_rel9 = -1;
+-static int hf_nfapi_dl_config_dci_dl_pdu_nfapi_dl_config_dci_dl_pdu_rel10 = -1;
+-
+-static int hf_nfapi_bf_vector_antennas = -1;
+-static int hf_nfapi_subbands = -1;
+-static int hf_nfapi_bf_vectors = -1;
+-static int hf_nfapi_csi_rs_resource_config = -1;
+-static int hf_nfapi_csi_rs_number_if_nzp_configurations = -1;
+-static int hf_nfapi_csi_rs_resource_configs = -1;
+-static int hf_nfapi_pdsch_start = -1;
+-static int hf_nfapi_drms_config_flag = -1;
+-static int hf_nfapi_drms_scrambling = -1;
+-static int hf_nfapi_csi_config_flag = -1;
+-static int hf_nfapi_csi_scrambling = -1;
+-static int hf_nfapi_pdsch_re_mapping_flag = -1;
+-static int hf_nfapi_pdsch_re_mapping_antenna_ports = -1;
+-static int hf_nfapi_pdsch_re_mapping_freq_shift = -1;
+-static int hf_nfapi_alt_cqi_table_r12 = -1;
+-static int hf_nfapi_max_layers = -1;
+-static int hf_nfapi_n_dl_harq = -1;
+-static int hf_nfapi_dwpts_symbols = -1;
+-static int hf_nfapi_ue_type = -1;
+-static int hf_nfapi_pdsch_payload_type = -1;
+-static int hf_nfapi_initial_transmission_sf = -1;
+-static int hf_nfapi_req13_drms_table_flag = -1;
+-static int hf_nfapi_prnti = -1;
+-static int hf_nfapi_mcs = -1;
+-static int hf_nfapi_number_of_transport_blocks = -1;
+-static int hf_nfapi_ue_mode = -1;
+-static int hf_prs_bandwidth = -1;
+-static int hf_prs_cyclic_prefix_type = -1;
+-static int hf_prs_muting = -1;
+-static int hf_nfapi_csi_rs_number_of_nzp_configuration = -1;
+-static int hf_nfapi_csi_rs_resource_index = -1;
+-static int hf_nfapi_csi_rs_class = -1;
+-static int hf_nfapi_cdm_type = -1;
+-static int hf_nfapi_csi_rs_bf_vector = -1;
+-static int hf_nfapi_edpcch_prb_index = -1;
+-static int hf_nfapi_epdcch_resource_assignment_flag = -1;
+-static int hf_nfapi_epdcch_id = -1;
+-static int hf_nfapi_epdcch_start_symbol = -1;
+-static int hf_nfapi_epdcch_num_prb = -1;
+-static int hf_nfapi_epdcch_prbs = -1;
+-static int hf_nfapi_precoding_value = -1;
+-static int hf_nfapi_mpdcch_narrowband = -1;
+-static int hf_nfapi_number_of_prb_pairs = -1;
+-static int hf_nfapi_resource_block_assignment = -1;
+-static int hf_nfapi_start_symbol = -1;
+-static int hf_nfapi_ecce_index = -1;
+-static int hf_nfapi_ce_mode = -1;
+-static int hf_nfapi_drms_scrabmling_init = -1;
+-static int hf_nfapi_pdsch_reception_levels = -1;
+-static int hf_nfapi_new_data_indicator = -1;
+-static int hf_nfapi_tpmi_length = -1;
+-static int hf_nfapi_pmi_flag = -1;
+-static int hf_nfapi_harq_resource_offset = -1;
+-static int hf_nfapi_dci_subframe_repetition_number = -1;
+-static int hf_nfapi_downlink_assignment_index_length = -1;
+-static int hf_nfapi_starting_ce_level = -1;
+-static int hf_nfapi_antenna_ports_and_scrambling_identity_flag = -1;
+-static int hf_nfapi_antenna_ports_and_scrambling_identity = -1;
+-static int hf_nfapi_paging_direct_indication_differentiation_flag = -1;
+-static int hf_nfapi_direct_indication = -1;
+-static int hf_nfapi_number_of_tx_antenna_ports = -1;
+-static int hf_nfapi_precoding = -1;
+-
+-
+-
+-// P7 Message Structures
+-static int hf_nfapi_dl_node_sync = -1;
+-static int hf_nfapi_dl_node_sync_nfapi_p7_message_header = -1;
+-static int hf_nfapi_dl_node_sync_t1 = -1;
+-static int hf_nfapi_dl_node_sync_delta_sfn_sf = -1;
+-
+-static int hf_nfapi_ul_node_sync = -1;
+-static int hf_nfapi_ul_node_sync_nfapi_p7_message_header = -1;
+-static int hf_nfapi_ul_node_sync_t1 = -1;
+-static int hf_nfapi_ul_node_sync_t2 = -1;
+-static int hf_nfapi_ul_node_sync_t3 = -1;
+-
+-static int hf_nfapi_timing_info = -1;
+-static int hf_nfapi_timing_info_nfapi_p7_message_header = -1;
+-static int hf_nfapi_timing_info_last_sfn_sf = -1;
+-static int hf_nfapi_timing_info_time_since_last_timing_info = -1;
+-static int hf_nfapi_timing_info_dl_config_jitter = -1;
+-static int hf_nfapi_timing_info_tx_request_jitter = -1;
+-static int hf_nfapi_timing_info_ul_config_jitter = -1;
+-static int hf_nfapi_timing_info_hi_dci0_jitter = -1;
+-static int hf_nfapi_timing_info_dl_config_latest_delay = -1;
+-static int hf_nfapi_timing_info_tx_request_latest_delay = -1;
+-static int hf_nfapi_timing_info_ul_config_latest_delay = -1;
+-static int hf_nfapi_timing_info_hi_dci0_latest_delay = -1;
+-static int hf_nfapi_timing_info_dl_config_earliest_arrival = -1;
+-static int hf_nfapi_timing_info_tx_request_earliest_arrival = -1;
+-static int hf_nfapi_timing_info_ul_config_earliest_arrival = -1;
+-static int hf_nfapi_timing_info_hi_dci0_earliest_arrival = -1;
+-
+-static int hf_nfapi_dl_config_request = -1;
+-static int hf_nfapi_sfn_sf = -1;
+-
+-static int hf_nfapi_dl_config_request_body = -1;
+-static int hf_nfapi_number_pdcch_ofdm_symbols = -1;
+-static int hf_nfapi_number_dci = -1;
+-static int hf_nfapi_number_pdus = -1;
+-static int hf_nfapi_number_pdsch_rnti = -1;
+-static int hf_nfapi_transmission_power_pcfich = -1;
+-
+-static int hf_nfapi_number_of_harqs = -1;
+-static int hf_nfapi_number_of_crcs = -1;
+-static int hf_nfapi_number_of_srs = -1;
+-static int hf_nfapi_number_of_cqi = -1;
+-static int hf_nfapi_number_of_preambles = -1;
+-static int hf_nfapi_number_of_srss = -1;
+-static int hf_nfapi_lbt_dl_req_pdu_type = -1;
+-static int hf_nfapi_lbt_dl_ind_pdu_type = -1;
+-
+-static int hf_nfapi_dl_config_request_pdu_list = -1;
+-static int hf_nfapi_ul_config_request_pdu_list = -1;
+-static int hf_nfapi_hi_dci0_request_pdu_list = -1;
+-static int hf_nfapi_tx_request_pdu_list = -1;
+-static int hf_nfapi_rx_indication_pdu_list = -1;
+-static int hf_nfapi_harq_indication_pdu_list = -1;
+-static int hf_nfapi_crc_indication_pdu_list = -1;
+-static int hf_nfapi_sr_indication_pdu_list = -1;
+-static int hf_nfapi_cqi_indication_pdu_list = -1;
+-static int hf_nfapi_preamble_indication_pdu_list = -1;
+-static int hf_nfapi_srs_indication_pdu_list = -1;
+-static int hf_nfapi_lbt_dl_config_pdu_list = -1;
+-static int hf_nfapi_lbt_dl_indication_pdu_list = -1;
+-
+-
+-static int hf_nfapi_dl_config_pdu_type = -1;
+-static int hf_nfapi_pdu_size = -1;
+-static int hf_nfapi_instance_length = -1;
+-
+-static int hf_nfapi_dl_config_dlsch_pdu_rel8 = -1;
+-static int hf_nfapi_length;
+-static int hf_nfapi_pdu_index = -1;
+-static int hf_nfapi_rnti = -1;
+-static int hf_nfapi_resource_allocation_type = -1;
+-static int hf_nfapi_virtual_resource_block_assignment_flag = -1;
+-static int hf_nfapi_resource_block_coding = -1;
+-static int hf_nfapi_modulation = -1;
+-static int hf_nfapi_redundancy_version = -1;
+-static int hf_nfapi_transport_blocks = -1;
+-static int hf_nfapi_transport_block_to_codeword_swap_flag = -1;
+-static int hf_nfapi_transmission_scheme = -1;
+-static int hf_nfapi_ul_transmission_scheme = -1;
+-static int hf_nfapi_number_of_layers = -1;
+-static int hf_nfapi_number_of_subbands = -1;
+-static int hf_nfapi_codebook_index = -1;
+-static int hf_nfapi_ue_category_capacity = -1;
+-static int hf_nfapi_pa = -1;
+-static int hf_nfapi_delta_power_offset_index = -1;
+-static int hf_nfapi_ngap = -1;
+-static int hf_nfapi_nprb = -1;
+-static int hf_nfapi_transmission_mode = -1;
+-static int hf_nfapi_num_bf_prb_per_subband = -1;
+-
+-static int hf_nfapi_num_bf_vector = -1;
+-static int hf_nfapi_bf_vector_subband_index = -1;
+-static int hf_nfapi_bf_vector_num_antennas = -1;
+-static int hf_nfapi_bf_vector_bf_value = -1;
+-
+-static int hf_nfapi_dl_config_dlsch_pdu_rel9 = -1;
+-static int hf_nfapi_nscid = -1;
+-
+-static int hf_nfapi_dl_config_dlsch_pdu_rel10 = -1;
+-static int hf_nfapi_csi_rs_flag = -1;
+-static int hf_nfapi_csi_rs_resource_config_r10 = -1;
+-static int hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10 = -1;
+-
+-static int hf_nfapi_dl_config_bch_pdu_rel8 = -1;
+-static int hf_nfapi_transmission_power = -1;
+-
+-static int hf_nfapi_dl_config_mch_pdu_rel8 = -1;
+-static int hf_nfapi_mbsfn_area_id = -1;
+-
+-static int hf_nfapi_dl_config_pch_pdu_rel8 = -1;
+-
+-static int hf_nfapi_dl_config_prs_pdu_rel9 = -1;
+-static int hf_nfapi_prs_bandwidth = -1;
+-static int hf_nfapi_prs_cyclic_prefix_type = -1;
+-		
+-static int hf_nfapi_dl_config_csi_rs_pdu_rel10 = -1;
+-static int hf_nfapi_csi_rs_antenna_port_count_r10 = -1;
+-
+-static int hf_nfapi_ul_config_request = -1;
+-static int hf_nfapi_ul_config_request_body = -1;
+-static int hf_nfapi_ul_config_pdu_type = -1;
+-
+-static int hf_nfapi_rach_prach_frequency_resources = -1;
+-static int hf_nfapi_srs_present = -1;
+-static int hf_nfapi_ul_config_harq_buffer_pdu = -1;
+-
+-static int hf_nfapi_ul_config_ue_information_rel8 = -1;
+-static int hf_nfapi_handle = -1;
+-static int hf_nfapi_ul_config_sr_information_pdu_rel8 = -1;
+-static int hf_nfapi_pucch_index = -1;
+-static int hf_nfapi_size = -1;
+-static int hf_nfapi_resource_block_start = -1;
+-static int hf_nfapi_number_of_resource_blocks = -1;
+-static int hf_nfapi_cyclic_shift_2_for_drms = -1;
+-static int hf_nfapi_frequency_hopping_enabled_flag = -1;
+-static int hf_nfapi_frequency_hopping_bits = -1;
+-static int hf_nfapi_new_data_indication = -1;
+-static int hf_nfapi_harq_process_number = -1;
+-static int hf_nfapi_ul_tx_mode = -1;
+-static int hf_nfapi_current_tx_nb = -1;
+-static int hf_nfapi_n_srs = -1;
+-static int hf_nfapi_disable_sequence_hopping_flag = -1;
+-static int hf_nfapi_dl_cqi_pmi_size_rank_1 = -1;
+-static int hf_nfapi_dl_cqi_pmi_size_rank_greater_1 = -1;
+-static int hf_nfapi_ri_size = -1;
+-static int hf_nfapi_delta_offset_cqi = -1;
+-static int hf_nfapi_delta_offset_ri = -1;
+-static int hf_nfapi_harq_size = -1;
+-static int hf_nfapi_delta_offset_harq = -1;
+-static int hf_nfapi_ack_nack_mode = -1;
+-static int hf_nfapi_n_srs_initial = -1;
+-static int hf_nfapi_initial_number_of_resource_blocks = -1;
+-static int hf_nfapi_dl_cqi_pmi_size = -1;
+-static int hf_nfapi_report_type = -1;
+-static int hf_nfapi_dl_cqi_ri_pmi_size = -1;
+-static int hf_nfapi_control_type = -1;
+-static int hf_nfapi_number_of_cc = -1;
+-static int hf_nfapi_virtual_cell_id_enabled_flag = -1;
+-static int hf_nfapi_npusch_identity = -1;
+-static int hf_nfapi_ndrms_csh_identity = -1;
+-static int hf_nfapi_total_number_of_repetitions = -1;
+-static int hf_nfapi_repetition_number = -1;
+-static int hf_nfapi_initial_sf_io = -1;
+-static int hf_nfapi_empty_symbols_due_to_retunning = -1;
+-static int hf_nfapi_dl_cqi_ri_pmi_size_2 = -1;
+-static int hf_nfapi_npucch_identity = -1;
+-static int hf_nfapi_harq_size_2 = -1;
+-static int hf_nfapi_delta_offset_harq_2 = -1;
+-static int hf_nfapi_empty_symbols = -1;
+-static int hf_nfapi_total_number_of_repetitons = -1;
+-static int hf_nfapi_csi_mode = -1;
+-static int hf_nfapi_dl_cqi_pmi_size_2 = -1;
+-static int hf_nfapi_statring_prb = -1;
+-static int hf_nfapi_cdm_index = -1;
+-static int hf_nfapi_nsrs = -1;
+-static int hf_nfapi_num_ant_ports = -1;
+-static int hf_nfapi_n_pucch_2_0 = -1;
+-static int hf_nfapi_n_pucch_2_1 = -1;
+-static int hf_nfapi_n_pucch_2_2 = -1;
+-static int hf_nfapi_n_pucch_2_3 = -1;
+-static int hf_nfapi_starting_prb = -1;
+-static int hf_nfapi_antenna_port = -1;
+-static int hf_nfapi_number_of_combs = -1;
+-
+-
+-
+-static int hf_nfapi_number_of_pucch_resource = -1;
+-static int hf_nfapi_pucch_index_p1 = -1;
+-static int hf_nfapi_n_pucch_1_0 = -1;
+-static int hf_nfapi_n_pucch_1_1 = -1;
+-static int hf_nfapi_n_pucch_1_2 = -1;
+-static int hf_nfapi_n_pucch_1_3 = -1;
+-static int hf_nfapi_srs_bandwidth = -1;
+-static int hf_nfapi_frequency_domain_position = -1;
+-static int hf_nfapi_srs_hopping_bandwidth = -1;
+-static int hf_nfapi_transmission_comb = -1;
+-static int hf_nfapi_i_srs = -1;
+-static int hf_nfapi_sounding_reference_cyclic_shift = -1;
+-static int hf_nfapi_antenna_ports = -1;
+-static int hf_nfapi_ul_config_srs_pdu_rel10 = -1;
+-static int hf_nfapi_ul_config_srs_pdu_rel8 = -1;
+-static int hf_nfapi_ul_config_harq_information_rel9_fdd = -1;
+-static int hf_nfapi_ul_config_harq_information_rel8_fdd = -1;
+-static int hf_nfapi_ul_config_harq_information_rel10_tdd = -1;
+-static int hf_nfapi_ul_config_sr_information_rel10 = -1;
+-static int hf_nfapi_ul_config_sr_information_rel8 = -1;
+-static int hf_nfapi_ul_config_cqi_information_rel10 = -1;
+-static int hf_nfapi_ul_config_cqi_information_rel8 = -1;
+-static int hf_nfapi_ul_config_initial_transmission_parameters_rel8 = -1;
+-static int hf_nfapi_ul_config_ulsch_harq_information_rel10 = -1;
+-
+-/* Tx request */
+-static int hf_nfapi_pdu_length = -1;
+-static int hf_nfapi_num_segments = -1;
+-static int hf_nfapi_segment_length = -1;
+-static int hf_nfapi_segment_data = -1;
+-
+-/* CRC Indication */
+-static int hf_nfapi_crc_indication_body = -1;
+-static int hf_nfapi_crc_flag = -1;
+-
+-static int hf_nfapi_number_of_hi_pdus = -1;
+-static int hf_nfapi_number_of_dci_pdus = -1;
+-static int hf_nfapi_pdu_type = -1;
+-static int hf_nfapi_hi_value = -1;
+-static int hf_nfapi_i_phich = -1;
+-static int hf_nfapi_flag_tb2 = -1;
+-static int hf_nfapi_hi_value_2 = -1;
+-static int hf_nfapi_ue_tx_antenna_selection = -1;
+-static int hf_nfapi_cqi_csi_request = -1;
+-static int hf_nfapi_ul_index = -1;
+-static int hf_nfapi_dl_assignment_index = -1;
+-static int hf_nfapi_tpc_bitmap = -1;
+-static int hf_nfapi_new_data_indication_two = -1;
+-static int hf_nfapi_size_of_cqi_csi_feild = -1;
+-static int hf_nfapi_resource_allocation_flag = -1;
+-static int hf_nfapi_number_of_antenna_ports =-1 ;
+-
+-static int hf_nfapi_n_ul_rb = -1;
+-static int hf_nfapi_pscch_resource = -1;
+-static int hf_nfapi_time_resource_pattern = -1;
+-static int hf_nfapi_mpdcch_transmission_type = -1;
+-static int hf_nfapi_drms_scrambling_init = -1;
+-static int hf_nfapi_pusch_repetition_levels = -1;
+-static int hf_nfapi_frequency_hopping_flag = -1;
+-static int hf_nfapi_csi_request = -1;
+-static int hf_nfapi_dai_presence_flag = -1;
+-static int hf_nfapi_total_dci_length_include_padding = -1;
+-static int hf_nfapi_data_offset = -1;
+-static int hf_nfapi_ul_cqi = -1;
+-static int hf_nfapi_timing_advance_r9 = -1;
+-static int hf_nfapi_timing_advance = -1;
+-static int hf_nfapi_harq_data_value_0 = -1;
+-static int hf_nfapi_harq_data_value_1 = -1;
+-static int hf_nfapi_harq_data_value_2 = -1;
+-static int hf_nfapi_harq_data_value_3 = -1;
+-static int hf_nfapi_harq_mode = -1;
+-static int hf_nfapi_number_of_ack_nack = -1;
+-static int hf_nfapi_harq_ack_nack_data = -1;
+-static int hf_nfapi_harq_tb_1 = -1;
+-static int hf_nfapi_harq_tb_2 = -1;
+-static int hf_nfapi_harq_tb_n = -1;
+-static int hf_nfapi_harq_data = -1;
+-static int hf_nfapi_channel = -1;
+-static int hf_nfapi_ri = -1;
+-static int hf_nfapi_number_of_cc_reported = -1;
+-static int hf_nfapi_cc = -1;
+-static int hf_nfapi_preamble = -1;
+-static int hf_nfapi_rach_resource_type = -1;
+-static int hf_nfapi_snr = -1;
+-static int hf_nfapi_doppler_estimation = -1;
+-static int hf_nfapi_rb_start = -1;
+-static int hf_nfapi_rbs = -1;
+-static int hf_nfapi_up_pts_symbol = -1;
+-static int hf_nfapi_number_prb_per_subband = -1;
+-static int hf_nfapi_number_antennas = -1;
+-static int hf_nfapi_subband_index = -1;
+-static int hf_nfapi_antennas = -1;
+-static int hf_nfapi_channel_coefficient = -1;
+-static int hf_nfapi_ul_rtoa = -1;
+-static int hf_nfapi_mp_cca = -1;
+-static int hf_nfapi_n_cca = -1;
+-static int hf_nfapi_offset = -1;
+-static int hf_nfapi_lte_txop_sf = -1;
+-static int hf_nfapi_txop_sfn_sf_end = -1;
+-static int hf_nfapi_lbt_mode = -1;
+-static int hf_nfapi_sfn_sf_end = -1;
+-static int hf_nfapi_result = -1;
+-static int hf_nfapi_txop_symbols = -1;
+-static int hf_nfapi_initial_partial_sf = -1;
+-
+-
+-static int hf_nfapi_frequency_band_indicator = -1;
+-static int hf_nfapi_measurement_period = -1;
+-static int hf_nfapi_bandwidth = -1;
+-static int hf_nfapi_timeout = -1;
+-static int hf_nfapi_number_of_earfcns = -1;
+-static int hf_nfapi_earfcn_list = -1;
+-static int hf_nfapi_uarfcn = -1;
+-static int hf_nfapi_number_of_uarfcns = -1;
+-static int hf_nfapi_uarfcn_list = -1;
+-static int hf_nfapi_arfcn = -1;
+-static int hf_nfapi_arfcn_direction = -1;
+-static int hf_nfapi_number_of_arfcns = -1;
+-static int hf_nfapi_arfcn_list = -1;
+-static int hf_nfapi_rssi = -1;
+-static int hf_nfapi_number_of_rssi = -1;
+-static int hf_nfapi_rssi_list = -1;
+-static int hf_nfapi_pci = -1;
+-static int hf_nfapi_measurement_bandwidth = -1;
+-static int hf_nfapi_exhaustive_search = -1;
+-static int hf_nfapi_number_of_pci = -1;
+-static int hf_nfapi_pci_list = -1;
+-static int hf_nfapi_psc = -1;
+-static int hf_nfapi_number_of_psc = -1;
+-static int hf_nfapi_psc_list = -1;
+-static int hf_nfapi_rsrp = -1;
+-static int hf_nfapi_rsrq = -1;
+-static int hf_nfapi_number_of_lte_cells_found = -1;
+-static int hf_nfapi_lte_cells_found_list = -1;
+-static int hf_nfapi_rscp = -1;
+-static int hf_nfapi_enco = -1;
+-static int hf_nfapi_number_of_utran_cells_found = -1;
+-static int hf_nfapi_utran_cells_found_list = -1;
+-static int hf_nfapi_bsic = -1;
+-static int hf_nfapi_rxlev = -1;
+-static int hf_nfapi_rxqual = -1;
+-static int hf_nfapi_sfn_offset = -1;
+-static int hf_nfapi_number_of_geran_cells_found = -1;
+-static int hf_nfapi_geran_cells_found_list = -1;
+-static int hf_nfapi_number_of_tx_antenna = -1;
+-static int hf_nfapi_mib_length = -1;
+-static int hf_nfapi_mib = -1;
+-static int hf_nfapi_phich_configuration = -1;
+-static int hf_nfapi_retry_count = -1;
+-static int hf_nfapi_sib1 = -1;
+-static int hf_nfapi_si_periodicity = -1;
+-static int hf_nfapi_si_index = -1;
+-static int hf_nfapi_number_of_si_periodicity = -1;
+-static int hf_nfapi_si_periodicity_list = -1;
+-static int hf_nfapi_si_window_length = -1;
+-static int hf_nfapi_sib_type = -1;
+-static int hf_nfapi_sib_len = -1;
+-static int hf_nfapi_sib = -1;
+-static int hf_nfapi_si_len = -1;
+-static int hf_nfapi_si = -1;
+-
+-static int hf_nfapi_pnf_search_state = -1;
+-static int hf_nfapi_pnf_broadcast_state = -1;
+-
+-static const value_string message_id_vals[]	= {	{ 0x80, "DL_CONFIG.request"},
+-												{ 0x81, "UL_CONFIG.request"},
+-												{ 0x82, "SUBFRAME_INDICATION"},
+-												{ 0x83, "HI_DCI0.request"},
+-												{ 0x84, "TX.request"},
+-												{ 0x85, "HARQ.indication"},
+-												{ 0x86, "CRC.indication"},
+-												{ 0x87, "RX_ULSCH.indication"},
+-												{ 0x88, "RACH.indication" },
+-												{ 0x89, "SRS.indication" },
+-												{ 0x8A, "RX_SR.indication" },
+-												{ 0x8B, "RX_CQI.indication" },
+-												{ 0x8C,	"LBT_DL_CONFIG.request" } ,
+-												{ 0x8D,	"LBT_DL.indication" } , 
+-
+-												{ 0x0100, "PNF_PARAM.request" },
+-												{ 0x0101, "PNF_PARAM.response" },
+-												{ 0x0102, "PNF_CONFIG.request" },
+-												{ 0x0103, "PNF_CONFIG.response" },
+-												{ 0x0104, "PNF_START.request" },
+-												{ 0x0105, "PNF_START.response" },
+-												{ 0x0106, "PNF_STOP.request" },
+-												{ 0x0107, "PNF_STOP.response" },
+-												{ 0x0108, "PARAM.request" },
+-												{ 0x0109, "PARAM.response" },
+-												{ 0x010A, "CONFIG.request" },
+-												{ 0x010B, "CONFIG.response" },
+-												{ 0x010C, "START.request" },
+-												{ 0x010D, "START.response" },
+-												{ 0x010E, "STOP.request" },
+-												{ 0x010F, "STOP.response" },
+-												{ 0x0110, "MEASUREMENT.request" },
+-												{ 0x0111, "MEASUREMENT.response" },
+-
+-												{ 0x0180, "UL_NODE_SYNC" },
+-												{ 0x0181, "DL_NODE_SYNC" },
+-												{ 0x0182, "TIMING_INFO" },
+-
+-												{ 0x0200, "RSSI.request" },
+-												{ 0x0201, "RSSI.response" },
+-												{ 0x0202, "RSSI.indication" },
+-												{ 0x0203, "CELL_SEARCH.request" },
+-												{ 0x0204, "CELL_SEARCH.response" },
+-												{ 0x0205, "CELL_SEARCH.indication" },
+-												{ 0x0206, "BROADCAST_DETECT.request" },
+-												{ 0x0207, "BROADCAST_DETECT.response" },
+-												{ 0x0208, "BROADCAST_DETECT.indication" },
+-												{ 0x0209, "SYSTEM_INFORMATION_SCHEDULE.request" },
+-												{ 0x020A, "SYSTEM_INFORMATION_SCHEDULE.response" },
+-												{ 0x020B, "SYSTEM_INFORMATION_SCHEDULE.indication" },
+-												{ 0x020C, "SYSTEM_INFORMATION.request" },
+-												{ 0x020D, "SYSTEM_INFORMATION.response" },
+-												{ 0x020E, "SYSTEM_INFORMATION.indication" },
+-												{ 0x020F, "NMM_STOP.request" },
+-												{ 0x0210, "NMM_STOP.response" },
+-
+-												{ 0 , NULL },	
+-};
+-
+-
+-typedef int(*tlv_decode)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end);
+-
+-typedef struct
+-{
+-	uint16_t tag_id;
+-	char* name;
+-	tlv_decode decode;
+-} tlv_t;
+-
+-static int dissect_tlv_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint end);
+-
+-
+-
+-
+-static guint8 proto_tree_add_uint8(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, char* units)
+-{
+-	guint8 value = tvb_get_guint8(tvb, *offset);
+-	proto_item * item =  proto_tree_add_item(tree, hfindex, tvb, *offset, 1, ENC_NA);
+-
+-	if (units != NULL)
+-	{
+-		proto_item_append_text(item, " ");
+-		proto_item_append_text(item, units);
+-	}
+-
+-	*offset += 1;
+-
+-	return value;
+-}
+-
+-static guint8 proto_tree_add_uint8_with_range(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, packet_info *pinfo, guint8 min, guint8 max, char* units)
+-{
+-	guint8 value = tvb_get_guint8(tvb, *offset);
+-	proto_item * item = proto_tree_add_item(tree, hfindex, tvb, *offset, 1, ENC_NA);
+-
+-	if (units != NULL)
+-	{
+-		proto_item_append_text(item, " ");
+-		proto_item_append_text(item, units);
+-	}
+-
+-	*offset += 1;
+-
+-	if (value < min || value > max)
+-	{
+-		expert_add_info(pinfo, tree, &ei_invalid_range);
+-	}
+-
+-
+-	return value;
+-}
+-
+-static guint16 proto_tree_add_uint16(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, char* units)
+-{
+-	guint16 value = tvb_get_guint16(tvb, *offset, ENC_NA);
+-	proto_item * item =  proto_tree_add_item(tree, hfindex, tvb, *offset, 2, ENC_NA);
+-
+-	if (units != NULL)
+-	{
+-		proto_item_append_text(item, " ");
+-		proto_item_append_text(item, units);
+-	}
+-
+-	*offset += 2;
+-
+-	return value;
+-}
+-
+-static void proto_tree_add_int16(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, char* units)
+-{
+-	proto_item * item = proto_tree_add_item(tree, hfindex, tvb, *offset, 2, ENC_NA);
+-
+-	if (units != NULL)
+-	{
+-		proto_item_append_text(item, " ");
+-		proto_item_append_text(item, units);
+-	}
+-
+-	*offset += 2;
+-}
+-
+-typedef int(*uint8_value_conversion)(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint8 value);
+-
+-static guint8 proto_tree_add_uint8_with_conversion(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, uint8_value_conversion conversion)
+-{
+-	guint8 value = tvb_get_guint8(tvb, *offset);
+-
+-	conversion(tree, hfindex, tvb, offset, value);
+-
+-	*offset += 1;
+-
+-	return value;
+-}
+-
+-typedef int(*uint16_value_conversion)(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value);
+-
+-static guint16 proto_tree_add_uint16_with_conversion(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, uint16_value_conversion conversion)
+-{
+-	guint16 value = tvb_get_guint16(tvb, *offset, ENC_NA);
+-
+-	conversion(tree, hfindex, tvb, offset, value);
+-
+-	*offset += 2;
+-
+-	return value;
+-}
+-
+-typedef int(*int16_value_conversion)(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, gint16 value);
+-
+-static gint16 proto_tree_add_int16_with_conversion(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, int16_value_conversion conversion)
+-{
+-	gint16 value = (gint16)(tvb_get_guint16(tvb, *offset, ENC_NA));
+-
+-	conversion(tree, hfindex, tvb, offset, value);
+-
+-	*offset += 2;
+-
+-	return value;
+-}
+-
+-
+-static void proto_tree_add_uint32(proto_tree *tree, int hfindex, tvbuff_t *tvb, guint* offset, char* units)
+-{
+-	proto_item * item = proto_tree_add_item(tree, hfindex, tvb, *offset, 4, ENC_NA);
+-
+-	if (units != NULL)
+-	{
+-		proto_item_append_text(item, " ");
+-		proto_item_append_text(item, units);
+-	}
+-
+-	*offset += 4;
+-}
+-
+-static void proto_tree_add_uint8_array(proto_tree *tree, int hfindex, guint len, tvbuff_t *tvb, guint* offset)
+-{
+-	proto_tree_add_item(tree, hfindex, tvb, *offset, len, ENC_NA);
+-
+-	*offset += len;
+-}
+-
+-
+-
+-
+-
+-int dissect_array_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end, const char* name, guint32 hf_idx, guint32 ett_idx, guint32 count, tlv_decode decode)
+-{
+-	guint16 i = 0;
+-
+-	if (count > 0)
+-	{
+-		proto_item *list_ti = proto_tree_add_string_format(tree, hf_idx, tvb, *offset, 2, "", name);
+-		proto_tree *list_tree = proto_item_add_subtree(list_ti, ett_idx);
+-
+-		gint start_of_list = *offset;
+-
+-		for (i = 0; i < count; ++i)
+-		{
+-			proto_item *item_ti = proto_tree_add_string_format(list_tree, hf_idx, tvb, *offset, 2, "", "[%d]", i);
+-			proto_tree *item_tree = proto_item_add_subtree(item_ti, ett_idx);
+-
+-			gint start_of_item = *offset;
+-
+-			decode(tvb, pinfo, item_tree, data, offset, end);
+-
+-			if (item_ti != NULL)
+-				item_ti->finfo->length = *offset - start_of_item;
+-		}
+-
+-		if (list_ti != NULL)
+-			list_ti->finfo->length = *offset - start_of_list;
+-	}
+-
+-	return 0;
+-}
+-
+-int dissect_pnf_param_general_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_sync_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_location_mode, tvb, offset, 0);
+-	guint16 len = proto_tree_add_uint16(tree, hf_nfapi_location_coordinates_length, tvb, offset, 0);
+-	if (len > 0)
+-		proto_tree_add_uint8_array(tree, hf_nfapi_location_coordinates, len, tvb, offset);
+-	proto_tree_add_uint32(tree, hf_nfapi_dl_config_timing, tvb, offset, "milliseconds");
+-	proto_tree_add_uint32(tree, hf_nfapi_tx_timing, tvb, offset, "milliseconds");
+-	proto_tree_add_uint32(tree, hf_nfapi_ul_config_timing, tvb, offset, "milliseconds");
+-	proto_tree_add_uint32(tree, hf_nfapi_hi_dci0_timing, tvb, offset, "milliseconds");
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_number_phys, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_total_bandwidth, tvb, offset, "(100 khz)");
+-	proto_tree_add_uint8(tree, hf_nfapi_maximum_total_number_dl_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_maximum_total_number_ul_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_shared_bands, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_shared_pa, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_total_power, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_oui, 3, tvb, offset);
+-	
+-	return 0;
+-}
+-
+-int dissect_pnf_rf_config_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_rf_config_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	guint16 num_rf_configs = proto_tree_add_uint16(tree, hf_nfapi_number_of_rfs, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Config List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy, num_rf_configs, dissect_pnf_rf_config_instance_value);
+-	guint16 num_rf_exclusions = proto_tree_add_uint16(tree, hf_nfapi_number_of_rf_exclusions, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Exclustion List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy, num_rf_exclusions, dissect_pnf_rf_config_instance_value);
+-	proto_tree_add_uint16(tree, hf_nfapi_downlink_channel_bandwidth_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_uplink_channel_bandwidth_supported, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_dl_layers_supported, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_ul_layers_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_3gpp_release_supported, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nmm_modes_supported, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_phy = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy, num_phy, dissect_pnf_phy_instance_value);
+-
+-
+-	return 0;
+-
+-}
+-
+-
+-int dissect_pnf_rf_config_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_rf_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_band, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_transmit_power, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_minimum_transmit_power, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_antennas_suppported, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_minimum_downlink_frequency, tvb, offset, "(100 khz)");
+-	proto_tree_add_uint32(tree, hf_nfapi_maximum_downlink_frequency, tvb, offset, "(100 khz)");
+-	proto_tree_add_uint32(tree, hf_nfapi_minimum_uplink_frequency, tvb, offset, "(100 khz)");
+-	proto_tree_add_uint32(tree, hf_nfapi_maximum_uplink_frequency, tvb, offset, "(100 khz)");
+-
+-	return 0;
+-}
+-
+-
+-int dissect_pnf_rf_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_rf = proto_tree_add_uint16(tree, hf_nfapi_number_of_rfs, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF List", hf_nfapi_pnf_phy_rf_config_array_phy_rf_config_info, ett_nfapi_pnf_phy_rf_config, num_rf, dissect_pnf_rf_config_value);
+-
+-	return 0;
+-
+-}
+-
+-int dissect_pnf_phy_rel10_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_transmission_mode7_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_transmission_mode8_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_two_antennas_ports_for_pucch, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_transmission_mode_9_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_simultaneous_pucch_pusch, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_for_layer_tx_with_tm3_and_tm4, tvb, offset, 0);
+-
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_phy = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY Rel 10 List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy_rel10, num_phy, dissect_pnf_phy_rel10_instance_value);
+-
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel11_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_epdcch_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_multi_ack_csi_reporting, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_pucch_tx_diversity_with_channel_selection, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_ul_comp_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_transmission_mode_5_supported, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_phy = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY Rel 11 List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy_rel11, num_phy, dissect_pnf_phy_rel11_instance_value);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel12_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_csi_subframe_set, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_enhanced_4tx_codebook, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_drs_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_ul_64qam_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_transmission_mode_10_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hi_nfapi_alternative_tbs_indices, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel12_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_phy = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY Rel 12 List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy_rel12, num_phy, dissect_pnf_phy_rel12_instance_value);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel13_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_format_4_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_format_5_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_more_than_5_ca_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_laa_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_laa_ending_in_dwpts_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_laa_starting_in_second_slot_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_beamforming_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_csi_rs_enhancements_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_drms_enhancements_supported, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_srs_enhancements_supported, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_phy = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY Rel 13 List", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy_rel13, num_phy, dissect_pnf_phy_rel13_instance_value);
+-	return 0;
+-}
+-
+-int dissect_pnf_phy_rf_config_instance_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_phy_rf_config_info_phy_id, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_config_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rf_config_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-int dissect_pnf_phy_rf_config_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_configs = proto_tree_add_uint16(tree, hf_nfapi_pnf_phy_number_phy, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PHY RF Config List", hf_nfapi_pnf_phy_rf_config, ett_nfapi_pnf_phy_rf_config, num_configs, dissect_pnf_phy_rf_config_instance_value);
+-	return 0;
+-}
+-
+-int bandwidth_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	/*
+-	guint8 comma = 0;
+-
+-	proto_item_append_text(item, "(");
+-
+-	if (value & 0x1)
+-	{
+-		proto_item_append_text(item, "6 Mhz");
+-		comma = 1;
+-	}
+-
+-	if (comma)
+-		proto_item_append_text(item, ", ");
+-
+-	if (value & 0x2)
+-	{
+-		proto_item_append_text(item, "15 Mhz");
+-		comma = 1;
+-	}
+-
+-	if (comma)
+-		proto_item_append_text(item, ", ");
+-
+-	if (value & 0x4)
+-	{
+-		proto_item_append_text(item, "25 Mhz");
+-		comma = 1;
+-	}
+-
+-	if (comma)
+-		proto_item_append_text(item, ", ");
+-
+-	if (value & 0x8)
+-	{
+-		proto_item_append_text(item, "50 Mhz");
+-		comma = 1;
+-	}
+-
+-	if (comma)
+-		proto_item_append_text(item, ", ");
+-
+-	if (value & 0x10)
+-	{
+-		proto_item_append_text(item, "75 Mhz");
+-		comma = 1;
+-	}
+-
+-	if (comma)
+-		proto_item_append_text(item, ", ");
+-
+-	if (value & 0x20)
+-	{
+-		proto_item_append_text(item, "100 Mhz");
+-		comma = 1;
+-	}
+-
+-	proto_item_append_text(item, ")");
+-	*/
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "?? (%d)", value);
+-	return 0;
+-
+-}
+-
+-int sfn_sf_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "%d/%d (%d)", value >> 3, value & 0x0007, value);
+-	return 0;
+-}
+-
+-
+-int dissect_duplex_mode_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_duplex_mode, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int power_offset_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "%.2f dB (%d)", (((float)value * 0.001) - 6.0), value);
+-	return 0;
+-}
+-
+-int dissect_pcfich_power_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 value = proto_tree_add_uint16_with_conversion(tree, hf_nfapi_pcfich_power_offset, tvb, offset, power_offset_conversion);
+-
+-	if (value > 10000)
+-	{
+-		expert_add_info(pinfo, tree, &ei_power_invalid);
+-	}
+-
+-	return 0;
+-}
+-
+-int dissect_pb_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 value = proto_tree_add_uint16(tree, hf_nfapi_pb, tvb, offset, 0);
+-
+-	if (value > 3)
+-	{
+-		expert_add_info(pinfo, tree, &ei_power_invalid);
+-	}
+-	return 0;
+-}
+-
+-int dissect_dl_cyclic_prefix_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_dl_cyclic_prefix_type, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_cyclic_prefix_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_ul_cyclic_prefix_type, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_dl_channel_bandwidth_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_downlink_channel_bandwidth, tvb, offset, bandwidth_conversion);
+-	return 0;
+-}
+-int dissect_ul_channel_bandwidth_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_uplink_channel_bandwidth, tvb, offset, bandwidth_conversion);
+-	return 0;
+-}
+-
+-
+-int reference_signal_power_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "%.2f dB (%d)", (((float)value * 0.25) - 63.75), value);
+-	return 0;
+-}
+-
+-int dissect_reference_signal_power_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_reference_signal_power, tvb, offset, reference_signal_power_conversion);
+-	return 0;
+-}
+-int dissect_tx_antenna_ports_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_tx_antenna_ports, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_rx_antenna_ports_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_rx_antenna_ports, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_phich_resource_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_phich_resource, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_phich_duration_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_phich_duration, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_phich_power_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_phich_power_offset, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-int dissect_psch_synch_signal_epre_eprers_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_primary_synchronization_signal_epre_eprers, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-int dissect_physical_cell_id_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_physical_cell_id, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ssch_synch_signal_epre_eprers_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_secondary_synchronization_signal_epre_eprers, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-int dissect_prach_configuration_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_prach_root_sequence_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_root_sequence_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_prach_zero_correlation_zone_configuration_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_zero_correlation_zone_configuration, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_prach_high_speed_flag_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_high_speed_flag, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_prach_frequency_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pusch_hopping_mode_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_hopping_mode, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pusch_hopping_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_hopping_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pusch_number_of_subbands_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_number_of_subbands, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pucch_delta_pucch_shift_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_delta_pucch_shift, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pucch_n_cqi_rb_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_n_cqi_rb, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pucch_n_an_cs_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_n_an_cs, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_pucch_n1_pucch_an_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_n1_pucch_an, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_srs_bandwidth_configuration_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_bandwidth_configuration, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_srs_max_uppts_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_max_up_pts, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_srs_subframe_configuration_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_srs_subframe_configuration, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_srs_acknack_srs_sim_tx_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_srs_acknack_srs_simultaneous_transmission, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_uplink_rs_hopping_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_uplink_rs_hopping, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_group_assignment_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_group_assignment, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_cyclic_shift_1_for_drms_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_cyclic_shift_1_for_drms, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_tdd_subframe_assignement_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_subframe_assignment, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_tdd_subframe_patterns_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_special_subframe_patterns, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int laa_threshold_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "%.2f dB (%d)", (float)(value * -100.00), value);
+-	return 0;
+-}
+-
+-int dissect_laa_ed_threashold_for_lbt_for_pdsch_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_ed_threshold_for_lbt_for_pdsch, tvb, offset, laa_threshold_conversion);
+-	return 0;
+-}
+-int dissect_laa_ed_threashold_for_lbt_for_drs_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_ed_threshold_for_lbt_for_drs, tvb, offset, laa_threshold_conversion);
+-	return 0;
+-}
+-int dissect_laa_pd_threshold_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_pd_threshold, tvb, offset, laa_threshold_conversion);
+-	return 0;
+-}
+-int dissect_laa_multi_carrier_type_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_multi_carrier_type, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_multi_carrier_tx_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_multi_carrier_tx, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_multi_carrier_freeze_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_multi_carrier_freeze, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_tx_antenna_port_for_drs_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_tx_antenna_ports_for_drs, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_transmission_power_for_drs_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power_for_drs, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-
+-int dissect_emtc_pbch_repeitions_enabled_r13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pbch_repetitions_enabled_r13, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_cat_m_root_sequence_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_cat_m_root_sequence_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_cat_m_zero_correlation_zone_configuration, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_cat_m_high_speed_flag_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_cat_m_high_speed_flag, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_emtc_prach_ce_level_0_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_enable, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_0_configuration_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_0_frequency_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_ce_level_0_starting_subframe_periodicity_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_starting_subframe_periodicity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_0_hopping_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_hopping_enabled, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_0_hopping_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_0_hopping_offset, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_emtc_prach_ce_level_1_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_enable, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_1_configuration_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_1_frequency_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_ce_level_1_starting_subframe_periodicity_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_starting_subframe_periodicity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_1_hopping_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_hopping_enabled, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_1_hopping_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_1_hopping_offset, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_emtc_prach_ce_level_2_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_enable, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_2_configuration_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_2_frequency_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_ce_level_2_starting_subframe_periodicity_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_starting_subframe_periodicity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_2_hopping_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_hopping_enabled, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_2_hopping_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_2_hopping_offset, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_emtc_prach_ce_level_3_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_enable, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_3_configuration_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_prach_ce_level_3_frequency_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_ce_level_3_starting_subframe_periodicity_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_starting_subframe_periodicity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_3_hopping_enabled_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_hopping_enabled, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_preach_ce_level_3_hopping_offset_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_prach_ce_level_3_hopping_offset, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-int dissect_dl_bandwidth_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_dl_bandwidth_support, tvb, offset, bandwidth_conversion);
+-	return 0;
+-}
+-
+-int dissect_ul_bandwidth_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_ul_bandwidth_support, tvb, offset, bandwidth_conversion);
+-	return 0;
+-}
+-
+-int dl_modulation_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "?? (%d)", value);
+-	return 0;
+-}
+-
+-int dissect_dl_modulation_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_dl_modulation_support, tvb, offset, dl_modulation_conversion);
+-	return 0;
+-}
+-
+-int ul_modulation_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "?? (%d)", value);
+-	return 0;
+-}
+-int dissect_ul_modulation_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_ul_modulation_support, tvb, offset, ul_modulation_conversion);
+-	return 0;
+-}
+-int dissect_phy_antenna_capability_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_phy_antenna_capability, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int release_capability_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint16 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 2, value, "?? (%d)", value);
+-	return 0;
+-}
+-int dissect_release_capability_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_release_capability, tvb, offset, release_capability_conversion);
+-	return 0;
+-}
+-int dissect_mbsfn_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_mbsfn_capability, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_laa_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_laa_capability, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_pd_sensing_lbt_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pd_sensing_lbt_support, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_multi_carrier_lbt_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_multi_carrier_lbt_support, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_laa_partial_sf_support_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_partial_sf_support, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_data_report_mode_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_data_report_mode, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_sfn_sf_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_sfnsf, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_phy_state_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_phy_state, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-
+-int dissect_p7_vnf_address_ipv4_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_vnf_address_ipv4, 4, tvb, offset);
+-	return 0;
+-}
+-int dissect_p7_vnf_address_ipv6_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_vnf_address_ipv4, 16, tvb, offset);
+-	return 0;
+-}
+-int dissect_p7_vnf_port_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_vnf_port, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_p7_pnf_address_ipv4_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_pnf_address_ipv4, 4, tvb, offset);
+-	return 0;
+-}
+-int dissect_p7_pnf_address_ipv6_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_pnf_address_ipv4, 16, tvb, offset);
+-	return 0;
+-}
+-int dissect_p7_pnf_port_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pnf_port, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_downlink_ues_per_subframe_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_ue_per_sf, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_uplink_ues_per_subframe_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_ue_per_sf, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_rf_band_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_band, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_rf_bands_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 count = proto_tree_add_uint16(tree, hf_nfapi_number_of_rf_bands, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Band List", hf_nfapi_rf_bands, ett_nfapi_rf_bands, count, dissect_rf_band_value);
+-	return 0;
+-}
+-
+-int dissect_timing_window_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_timing_window, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_timing_info_mode_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_timing_info_mode, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_timing_info_period_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_timing_info_period, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_maximum_transmit_power_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_maximum_transmit_power, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_earfcn_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_earfcn, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_nmm_gsm_frequency_bands_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 count = proto_tree_add_uint16(tree, hf_nfapi_number_of_rf_bands, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Band List", hf_nfapi_rf_bands, ett_nfapi_rf_bands, count, dissect_rf_band_value);
+-	return 0;
+-}
+-int dissect_nmm_umts_frequency_bands_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 count = proto_tree_add_uint16(tree, hf_nfapi_number_of_rf_bands, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Band List", hf_nfapi_rf_bands, ett_nfapi_rf_bands, count, dissect_rf_band_value);
+-	return 0;
+-}
+-int dissect_nmm_lte_frequency_bands_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 count = proto_tree_add_uint16(tree, hf_nfapi_number_of_rf_bands, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RF Band List", hf_nfapi_rf_bands, ett_nfapi_rf_bands, count, dissect_rf_band_value);
+-	return 0;
+-}
+-int dissect_nmm_uplink_rssi_supported_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_nmm_uplink_rssi_supported, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_dl_config_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_config_pdu_type, tvb, offset, 0);
+-	guint8 size = proto_tree_add_uint8(tree, hf_nfapi_pdu_size, tvb, offset, 0);
+-
+-	guint pdu_end = (*offset + size - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-
+-	return 0;
+-}
+-
+-
+-static int dissect_dl_config_request_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_pdcch_ofdm_symbols, tvb, offset, 0);
+-	guint16 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_dci, tvb, offset, 0);
+-	num_pdu += proto_tree_add_uint16(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_pdsch_rnti, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power_pcfich, tvb, offset, power_offset_conversion);
+-
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "DL Config PDU List", hf_nfapi_dl_config_request_pdu_list, ett_nfapi_dl_config_request_pdu_list, num_pdu, dissect_dl_config_pdu);
+-
+-
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_bch_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pdu_index, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_dl_dci_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_format, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cce_idx, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_aggregation_level, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_virtual_resource_block_assignment_flag, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indicator_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_block_to_codeword_swap_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indicator_2, tvb, offset, 0);
+-	proto_tree_add_uint8_with_range(tree, hf_nfapi_harq_process, tvb, offset, pinfo, 0, 15, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpmi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_precoding_information, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpc, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_downlink_assignment_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ngap, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_block_size_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_downlink_power_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_allocate_prach_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_preamble_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_prach_mask_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rnti_type, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-static int dissect_dl_config_request_dl_dci_pdu_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_mcch_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcch_change_notification, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_scrambling_identity, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_dl_dci_pdu_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_cross_carrier_scheduling_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_carrier_indicator, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_size_of_cqi_csi_feild, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_antenna_ports_scrambling_and_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_total_dci_length_including_padding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_n_dl_rb, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_dl_dci_pdu_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_ack_resource_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_ul_dl_configuration_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_dl_configuration_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-static int dissect_dl_config_request_dl_dci_pdu_rel12_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_primary_cell_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_dl_configuration_flag, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_ul_dl_configurations, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "UL/DL Configurations", hf_nfapi_pnf_phy, ett_nfapi_pnf_phy, count, dissect_ul_dl_configuration_index_value);
+-
+-	return 0;
+-}
+-static int dissect_dl_config_request_dl_dci_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_laa_end_partial_sf_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_laa_end_partial_sf_configuration, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_initial_lbt_sf, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_codebooksize_determination_r13, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rel13_drms_table_flag, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_mch_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pdu_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_modulation, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	proto_tree_add_uint16(tree, hf_nfapi_mbsfn_area_id, tvb, offset, 0);
+-
+-	return 0;
+-}
+-
+-int dissect_codebook_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_codebook_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_bf_vector_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_bf_vector_bf_value, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_bf_vector_type_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_bf_vector_subband_index, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_bf_vector_num_antennas, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Antennas", hf_nfapi_bf_vector_antennas, ett_nfapi_bf_vector_antennas, count, dissect_bf_vector_value);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_dlsch_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pdu_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);		
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_virtual_resource_block_assignment_flag, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_modulation, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_block_to_codeword_swap_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transmission_scheme, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_layers, tvb, offset, 0);
+-	guint8 num_subbands = proto_tree_add_uint8(tree, hf_nfapi_number_of_subbands, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Subbands", hf_nfapi_subbands, ett_nfapi_subbands, num_subbands, dissect_codebook_index_value);
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_category_capacity, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pa, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_power_offset_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ngap, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nprb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transmission_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_num_bf_prb_per_subband, tvb, offset, 0);
+-	guint8 num_vectors = proto_tree_add_uint8(tree, hf_nfapi_num_bf_vector, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Beamforming Vectors", hf_nfapi_bf_vectors, ett_nfapi_bf_vectors, num_vectors, dissect_bf_vector_type_value);
+-
+-	
+-	return 0;
+-}
+-
+-int dissect_csi_rs_resource_config_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_resource_config, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_dlsch_pdu_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_nscid, tvb, offset, 0);
+-
+-	return 0;
+-}
+-static int dissect_dl_config_request_dlsch_pdu_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_resource_config_r10, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_csi_rs_number_if_nzp_configurations, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "CSI-RS Resource Configs", hf_nfapi_csi_rs_resource_configs, ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_start, tvb, offset, 0);
+-
+-	return 0;
+-}
+-static int dissect_dl_config_request_dlsch_pdu_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_drms_config_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_drms_scrambling, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_config_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_csi_scrambling, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_re_mapping_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_re_mapping_antenna_ports, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_re_mapping_freq_shift, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_dlsch_pdu_rel12_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_alt_cqi_table_r12, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_max_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_n_dl_harq, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_dlsch_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dwpts_symbols, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_initial_lbt_sf, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_payload_type, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_initial_transmission_sf, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_req13_drms_table_flag, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_pch_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pdu_index, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_prnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_virtual_resource_block_assignment_flag, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_transport_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_block_to_codeword_swap_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transmission_scheme, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_codebook_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_category_capacity, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pa, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	proto_tree_add_uint8(tree, hf_nfapi_nprb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ngap, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_pch_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_mode, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_initial_transmission_sf, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_prs_pdu_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	proto_tree_add_uint8(tree, hf_prs_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_prs_cyclic_prefix_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_prs_muting, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_dl_config_request_csi_rs_pdu_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_antenna_port_count_r10, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_resource_config_r10, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	proto_tree_add_uint16(tree, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_csi_rs_number_if_nzp_configurations, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "CSI-RS Resource Configs", hf_nfapi_csi_rs_resource_configs, ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
+-	return 0;
+-}
+-
+-
+-int dissect_csi_rs_bf_vector_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_resource_index, tvb, offset, 0);
+-	//proto_tree_add_uint8(tree, hf_nfapi_csi_rs_resource_config, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_csi_rs_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_rs_class, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cdm_type, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_num_bf_vector, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Beamforming Vector", hf_nfapi_csi_rs_bf_vector, ett_nfapi_csi_rs_bf_vector, count, dissect_csi_rs_bf_vector_value);
+-	return 0;
+-}
+-
+-int dissect_epdcch_prb_index_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_edpcch_prb_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_edpcch_params_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_epdcch_resource_assignment_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_epdcch_id, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_epdcch_start_symbol, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_epdcch_num_prb, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PRBs", hf_nfapi_epdcch_prbs, ett_nfapi_epdcch_prbs, count, dissect_epdcch_prb_index_value);
+-	dissect_bf_vector_type_value(tvb, pinfo, tree, data, offset, end);
+-
+-	return 0;
+-}
+-static int dissect_dl_config_request_edpcch_params_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dwpts_symbols, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_initial_lbt_sf, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_precoding_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_precoding_value, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_dl_config_request_mpdpcch_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_mpdcch_narrowband, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_prb_pairs, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_block_assignment, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_start_symbol, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ecce_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_aggregation_level, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rnti_type, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ce_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_drms_scrabmling_init, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_initial_transmission_sf, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_transmission_power, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_format, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_resource_block_coding	, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pdsch_reception_levels , tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indicator, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_process, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpmi_length, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpmi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pmi_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_resource_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_subframe_repetition_number, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpc, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_downlink_assignment_index_length, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_downlink_assignment_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_allocate_prach_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_preamble_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_prach_mask_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_starting_ce_level, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_antenna_ports_and_scrambling_identity_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_antenna_ports_and_scrambling_identity, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_enabled_flag , tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_paging_direct_indication_differentiation_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_direct_indication, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_total_dci_length_including_padding, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_tx_antenna_ports, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Precoding", hf_nfapi_precoding, ett_nfapi_precoding, count, dissect_precoding_value);
+-	
+-	return 0;
+-}
+-
+-int dissect_ul_config_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_config_pdu_type, tvb, offset, 0);
+-	guint8 size = proto_tree_add_uint8(tree, hf_nfapi_pdu_size, tvb, offset, 0);
+-
+-	guint pdu_end = (*offset + size - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-
+-	return 0;
+-}
+-
+-static int  dissect_ul_config_request_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rach_prach_frequency_resources, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_present, tvb, offset, 0);
+-
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "UL Config PDU List", hf_nfapi_ul_config_request_pdu_list, ett_nfapi_ul_config_request_pdu_list, num_pdu, dissect_ul_config_pdu);
+-
+-	return 0;
+-}
+-
+-
+-int dissect_ul_config_ulsch_pdu_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_size, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_block_start, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_resource_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_modulation, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cyclic_shift_2_for_drms, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_enabled_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_bits, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indication, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_process_number, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_tx_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_current_tx_nb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_n_srs, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ulsch_pdu_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transport_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_transmission_scheme, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_layers, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_codebook_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_disable_sequence_hopping_flag, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ulsch_pdu_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_virtual_cell_id_enabled_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_npusch_identity, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_drms_config_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_ndrms_csh_identity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ulsch_pdu_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_type, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_total_number_of_repetitions, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_repetition_number, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_initial_sf_io, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_empty_symbols_due_to_retunning, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_init_tx_params_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_n_srs_initial, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_initial_number_of_resource_blocks, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_cqi_ri_info_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_cqi_pmi_size_rank_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_cqi_pmi_size_rank_greater_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ri_size, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_cqi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_ri, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_cqi_ri_info_rel9_later_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 type = proto_tree_add_uint8(tree, hf_nfapi_report_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_cqi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_ri, tvb, offset, 0);
+-
+-	switch (type)
+-	{
+-		case 0:
+-		{
+-			proto_tree_add_uint8(tree, hf_nfapi_dl_cqi_ri_pmi_size, tvb, offset, 0);
+-			proto_tree_add_uint8(tree, hf_nfapi_control_type, tvb, offset, 0);
+-			break;
+-		}
+-		case 1:
+-		{
+-			/*guint8 num_cc = */proto_tree_add_uint8(tree, hf_nfapi_number_of_cc, tvb, offset, 0);
+-
+-			// todo ...
+-
+-			break;
+-		}
+-	}
+-	return 0;
+-}
+-int dissect_ul_config_cqi_ri_info_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_dl_cqi_ri_pmi_size_2, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_ulsch_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_size, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_harq, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ack_nack_mode, tvb, offset, 0);
+-
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_ulsch_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_harq_size_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_delta_offset_harq_2, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ue_info_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ue_info_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_virtual_cell_id_enabled_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_npucch_identity, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_ue_info_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_empty_symbols, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_total_number_of_repetitions, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_repetition_number, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_cqi_info_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_cqi_pmi_size, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_cqi_info_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_pucch_resource, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_index_p1, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_cqi_info_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_mode, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_dl_cqi_pmi_size_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_statring_prb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nprb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cdm_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nsrs, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_sr_info_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_pucch_index, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_sr_info_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_pucch_resource, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pucch_index_p1, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_uci_rel10_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_size, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ack_nack_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_pucch_resource, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_0, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_1, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_2, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_3, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_uci_rel8_fdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_0, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_size, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_uci_rel9_later_fdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_size, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ack_nack_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_pucch_resource, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_0, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_1, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_2, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_1_3, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_num_ant_ports, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_2_0, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_2_1, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_2_2, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_n_pucch_2_3, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_harq_size_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_starting_prb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nprb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cdm_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_nsrs, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_srs_info_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_size, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_domain_position, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_hopping_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_transmission_comb, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_i_srs, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_sounding_reference_cyclic_shift, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_srs_info_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_antenna_port, tvb, offset, 0);
+-	return 0;
+-}
+-int dissect_ul_config_srs_info_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_combs, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_hi_dci0_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_pdu_type, tvb, offset, 0);
+-	guint8 size = proto_tree_add_uint8(tree, hf_nfapi_pdu_size, tvb, offset, 0);
+-
+-	guint pdu_end = (*offset + size - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-
+-	return 0;
+-}
+-
+-static int dissect_hi_dci0_request_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_sfn_sf, tvb, offset, 0);
+-	guint8 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_of_dci_pdus, tvb, offset, 0);
+-	num_pdu += proto_tree_add_uint8(tree, hf_nfapi_number_of_hi_pdus, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "HI DCI0 PDU List", hf_nfapi_hi_dci0_request_pdu_list, ett_nfapi_hi_dci0_request_pdu_list, num_pdu, dissect_hi_dci0_pdu);
+-	return 0;
+-}
+-
+-static int dissect_hi_dci0_hi_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_block_start, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cyclic_shift_2_for_drms, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_hi_value, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_i_phich, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-static int dissect_hi_dci0_hi_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_flag_tb2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_hi_value_2, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_hi_dci0_dci_ul_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_format, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cce_idx, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_aggregation_level, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_block_start, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_resource_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cyclic_shift_2_for_drms, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_enabled_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_bits, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indication, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ue_tx_antenna_selection, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpc, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_cqi_csi_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_assignment_index, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_tpc_bitmap, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	return 0;
+-}
+-static int dissect_hi_dci0_dci_ul_rel10_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_cross_carrier_scheduling_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_carrier_indicator, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_size_of_cqi_csi_feild, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_resource_allocation_type, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_coding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indication_two, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_antenna_ports, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpmi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_total_dci_length_including_padding, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_n_ul_rb, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_hi_dci0_dci_ul_rel12_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_pscch_resource, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_time_resource_pattern, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_hi_dci0_edpcch_dci_ul_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_epdcch_resource_assignment_flag, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_epdcch_id, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_epdcch_start_symbol, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_epdcch_num_prb, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PRBs", hf_nfapi_epdcch_prbs, ett_nfapi_epdcch_prbs, count, dissect_epdcch_prb_index_value);
+-	dissect_bf_vector_type_value(tvb, pinfo, tree, data, offset, end);
+-	return 0;
+-}
+-
+-static int dissect_hi_dci0_mdpcch_dci_ul_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_mpdcch_narrowband, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_prb_pairs, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_resource_block_assignment, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mpdcch_transmission_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_start_symbol, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ecce_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_aggregation_level, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rnti_type, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ce_mode, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_drms_scrambling_init, tvb, offset, 0);
+-	proto_tree_add_uint16_with_conversion(tree, hf_nfapi_transmission_power, tvb, offset, power_offset_conversion);
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_format, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_resource_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_mcs, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_pusch_repetition_levels, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_hopping_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_new_data_indication, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_process, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_redundancy_version, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_tpc, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_csi_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dai_presence_flag, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dl_assignment_index, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_srs_request, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_dci_subframe_repetition_number, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_tpc_bitmap, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_total_dci_length_include_padding, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_tx_antenna_ports, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "TX Antenna Ports", hf_nfapi_tx_antenna_ports, ett_nfapi_tx_antenna_ports, count, dissect_precoding_value);
+-
+-
+-	return 0;
+-}
+-static int dissect_rx_ue_info_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_rx_indication_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	int data_offset = proto_tree_add_uint16(tree, hf_nfapi_data_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_cqi, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance, tvb, offset, 0);
+-	return data_offset;
+-}
+-static int dissect_rx_indication_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance_r9, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_bundling_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_1, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_multplexing_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_2, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_3, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_special_bundling_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_channel_selection_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_format_3_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_data_format_4_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-static int dissect_harq_indication_data_format_5_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_data_value_0, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-
+-static int dissect_harq_indication_rel8_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 mode = proto_tree_add_uint8(tree, hf_nfapi_harq_mode, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_ack_nack, tvb, offset, 0);
+-
+-	switch (mode)
+-	{
+-		case 0:
+-		{
+-			dissect_harq_indication_data_bundling_value(tvb, pinfo, tree, data, offset, end);
+-			break;
+-		}
+-		case 1:
+-		{
+-			dissect_harq_indication_data_multplexing_value(tvb, pinfo, tree, data, offset, end);
+-			break;
+-		}
+-		case 2:
+-		{
+-			dissect_harq_indication_data_special_bundling_value(tvb, pinfo, tree, data, offset, end);
+-			break;
+-		}
+-	};
+-
+-	return 0;
+-}
+-static int dissect_harq_indication_rel9_later_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 mode = proto_tree_add_uint8(tree, hf_nfapi_harq_mode, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_ack_nack, tvb, offset, 0);
+-
+-	// Have to do this as the mode value is need to decode the value
+-	guint16 i = 0;
+-
+-	proto_item *list_ti = proto_tree_add_string_format(tree, hf_nfapi_harq_ack_nack_data, tvb, *offset, 2, "", "ACK/NACK Data");
+-	proto_tree *list_tree = proto_item_add_subtree(list_ti, ett_nfapi_harq_ack_nack_data);
+-
+-	for (i = 0; i < count; ++i)
+-	{
+-
+-		proto_item *item_ti = proto_tree_add_string_format(list_tree, hf_nfapi_harq_ack_nack_data, tvb, *offset, 2, "", "[%d]", i);
+-		proto_tree *item_tree = proto_item_add_subtree(item_ti, ett_nfapi_harq_ack_nack_data);
+-
+-		switch (mode)
+-		{
+-			case 0:
+-			{
+-				dissect_harq_indication_data_bundling_value(tvb, pinfo, item_tree, data, offset, end);
+-				break;
+-			}
+-			case 1:
+-			{
+-				dissect_harq_indication_data_multplexing_value(tvb, pinfo, item_tree, data, offset, end);
+-				break;
+-			}
+-			case 2:
+-			{
+-				dissect_harq_indication_data_special_bundling_value(tvb, pinfo, item_tree, data, offset, end);
+-				break;
+-			}
+-			case 3:
+-			{
+-				dissect_harq_indication_data_channel_selection_value(tvb, pinfo, item_tree, data, offset, end);
+-				break;
+-			}
+-			case 4:
+-			{
+-				dissect_harq_indication_data_format_3_value(tvb, pinfo, item_tree, data, offset, end);
+-				break;
+-			}
+-		};
+-	}
+-
+-	return 0;
+-}
+-static int dissect_harq_indication_rel13_later_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 mode = proto_tree_add_uint8(tree, hf_nfapi_harq_mode, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_ack_nack, tvb, offset, 0);
+-
+-	// Have to do this as the mode value is need to decode the value
+-	guint16 i = 0;
+-
+-	proto_item *list_ti = proto_tree_add_string_format(tree, hf_nfapi_harq_ack_nack_data, tvb, *offset, 2, "", "ACK/NACK Data");
+-	proto_tree *list_tree = proto_item_add_subtree(list_ti, ett_nfapi_harq_ack_nack_data);
+-
+-	for (i = 0; i < count; ++i)
+-	{
+-		proto_item *item_ti = proto_tree_add_string_format(list_tree, hf_nfapi_harq_ack_nack_data, tvb, *offset, 2, "", "[%d]", i);
+-		proto_tree *item_tree = proto_item_add_subtree(item_ti, ett_nfapi_harq_ack_nack_data);
+-
+-		switch (mode)
+-		{
+-		case 0:
+-		{
+-			dissect_harq_indication_data_bundling_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 1:
+-		{
+-			dissect_harq_indication_data_multplexing_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 2:
+-		{
+-			dissect_harq_indication_data_special_bundling_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 3:
+-		{
+-			dissect_harq_indication_data_channel_selection_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 4:
+-		{
+-			dissect_harq_indication_data_format_3_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 5:
+-		{
+-			dissect_harq_indication_data_format_4_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		case 6:
+-		{
+-			dissect_harq_indication_data_format_5_value(tvb, pinfo, item_tree, data, offset, end);
+-			break;
+-		}
+-		};
+-	}
+-
+-	return 0;
+-}
+-static int dissect_harq_indication_rel8_fdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_tb_1, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_tb_2, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_harq_tb_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_harq_tb_n, tvb, offset, 0);
+-	return 0;
+-}
+-
+-
+-static int dissect_harq_indication_rel9_later_fdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_mode, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_ack_nack, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "HARQ TB List", hf_nfapi_harq_data, ett_nfapi_harq_data, count, dissect_harq_tb_value);
+-	return 0;
+-}
+-static int dissect_harq_indication_rel13_later_fdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_harq_mode, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_ack_nack, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "HARQ TB List", hf_nfapi_harq_data, ett_nfapi_harq_data, count, dissect_harq_tb_value);
+-	return 0;
+-}
+-static int dissect_ul_cqi_information_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_cqi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_channel, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_crc_indication_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_crc_flag, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_rx_cqi_indication_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_data_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_cqi, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ri, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_ri_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_ri, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_rx_cqi_indication_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_data_offset, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_ul_cqi, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_cc_reported, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "CC List", hf_nfapi_cc, ett_nfapi_cc, count, dissect_ri_value);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance_r9, tvb, offset, 0);
+-
+-	return 0;
+-}
+-static int dissect_rach_indication_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_rnti, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_preamble, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_rach_indication_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance_r9, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_rach_indication_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_rach_resource_type, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_snr_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_snr, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_srs_indication_rel8_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_doppler_estimation, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance, tvb, offset, 0);
+-	guint8 count = proto_tree_add_uint8(tree, hf_nfapi_number_of_resource_blocks, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rb_start, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "RB List", hf_nfapi_rbs, ett_nfapi_rbs, count, dissect_snr_value);
+-
+-
+-	return 0;
+-}
+-static int dissect_srs_indication_rel9_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_timing_advance_r9, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_srs_indication_rel10_tdd_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_up_pts_symbol, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_tdd_channel_measuerment_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_prb_per_subband, tvb, offset, 0);
+-	guint8 num_subbands = proto_tree_add_uint8(tree, hf_nfapi_number_of_subbands, tvb, offset, 0);
+-	guint8 num_phy_ant = proto_tree_add_uint8(tree, hf_nfapi_number_antennas, tvb, offset, 0);
+-
+-	guint16 i = 0;
+-	guint16 j = 0;
+-
+-	proto_item *sb_list_ti = proto_tree_add_string_format(tree, hf_nfapi_subbands, tvb, *offset, 2, "", "Subbands");
+-	proto_tree *sb_list_tree = proto_item_add_subtree(sb_list_ti, ett_nfapi_subbands);
+-
+-	for (i = 0; i < num_subbands; ++i)
+-	{
+-		proto_item *sb_item_ti = proto_tree_add_string_format(sb_list_tree, hf_nfapi_subbands, tvb, *offset, 2, "", "[%d]", i);
+-		proto_tree *sb_item_tree = proto_item_add_subtree(sb_item_ti, ett_nfapi_subbands);
+-
+-		proto_tree_add_uint8(sb_item_ti, hf_nfapi_subband_index, tvb, offset, 0);
+-
+-
+-		proto_item *ant_list_ti = proto_tree_add_string_format(sb_item_tree, hf_nfapi_antennas, tvb, *offset, 2, "", "Physical Antennas");
+-		proto_tree *ant_list_tree = proto_item_add_subtree(ant_list_ti, ett_nfapi_antennas);
+-
+-		for (j = 0; j < num_phy_ant; ++j)
+-		{
+-			proto_item *ant_item_ti = proto_tree_add_string_format(ant_list_tree, hf_nfapi_antennas, tvb, *offset, 2, "", "[%d]", j);
+-			proto_tree *ant_item_tree = proto_item_add_subtree(ant_item_ti, ett_nfapi_antennas);
+-
+-			proto_tree_add_uint16(ant_item_tree, hf_nfapi_channel_coefficient, tvb, offset, 0);
+-		}
+-	}
+-
+-	return 0;
+-}
+-
+-static int dissect_srs_indication_rel11_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_ul_rtoa, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_lbt_dl_config_request_pdsch_req_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_mp_cca, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_n_cca, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_offset, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_lte_txop_sf, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_txop_sfn_sf_end, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_lbt_mode, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_lbt_dl_config_request_drs_req_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_offset, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_sfn_sf_end, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_lbt_mode, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_lbt_dl_config_request_pdsch_resp_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_result, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_txop_symbols, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_initial_partial_sf, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_lbt_dl_config_request_drs_resp_rel13_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_handle, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_result, tvb, offset, 0);
+-	return 0;
+-}
+-
+-int dissect_tx_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 len = proto_tree_add_uint16(tree, hf_nfapi_pdu_length, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pdu_index, tvb, offset, 0);
+-
+-	proto_tree_add_uint8_array(tree, hf_nfapi_pdu, len, tvb, offset);
+-
+-	return 0;
+-}
+-
+-static int dissect_tx_request_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "TX PDU List", hf_nfapi_tx_request_pdu_list, ett_nfapi_tx_request_pdu_list, num_pdu, dissect_tx_pdu);
+-	return 0;
+-
+-}
+-
+-int dissect_rx_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	//guint end = (*offset + size - 2);
+-	//dissect_tlv_list(tvb, pinfo, tree, data, offset, end);
+-	return 0;
+-}
+-
+-
+-
+-int dissect_harq_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-
+-static int dissect_harq_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_of_harqs, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "HARQ PDU List", hf_nfapi_harq_indication_pdu_list, ett_nfapi_harq_indication_pdu_list, num_pdu, dissect_harq_indication_pdu);
+-	return 0;
+-}
+-
+-int dissect_crc_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-
+-
+-static int dissect_crc_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_of_crcs, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "CRC PDU List", hf_nfapi_crc_indication_pdu_list, ett_nfapi_crc_indication_pdu_list, num_pdu, dissect_crc_indication_pdu);
+-	return 0;
+-}
+-int dissect_sr_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-
+-static int dissect_rx_sr_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_of_srs, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "SR PDU List", hf_nfapi_sr_indication_pdu_list, ett_nfapi_sr_indication_pdu_list, num_pdu, dissect_sr_indication_pdu);
+-	return 0;
+-}
+-int dissect_cqi_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-static int dissect_rx_cqi_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_of_cqi, tvb, offset, 0);
+-
+-	guint16* lengths = malloc(num_pdu * 2);
+-	memset(lengths, 0, num_pdu * 2);
+-
+-	guint8 tmp_offset = *offset;
+-
+-	int i = 0;
+-	for (i = 0; i < num_pdu; ++i)
+-	{
+-		guint16 instance_len = tvb_get_guint16(tvb, tmp_offset, ENC_NA);
+-		tmp_offset += 2;
+-		guint8 pdu_end = tmp_offset + instance_len;
+-
+-		while (tmp_offset < pdu_end)
+-		{
+-			guint16 tlv_id = tvb_get_guint16(tvb, tmp_offset, ENC_NA);
+-			tmp_offset += 2;
+-			guint16 tlv_len = tvb_get_guint16(tvb, tmp_offset, ENC_NA);
+-			tmp_offset += 2;
+-
+-			if (tlv_id == 0x202F)
+-			{
+-				lengths[i] = tvb_get_guint16(tvb, tmp_offset, ENC_NA);
+-			}
+-			else if (tlv_id == 0x2030)
+-			{
+-				lengths[i] = tvb_get_guint16(tvb, tmp_offset, ENC_NA);
+-			}
+-
+-			tmp_offset += tlv_len;
+-		}
+-
+-	}
+-
+-
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "CQI PDU List", hf_nfapi_cqi_indication_pdu_list, ett_nfapi_cqi_indication_pdu_list, num_pdu, dissect_cqi_indication_pdu);
+-
+-
+-	for (i = 0; i < num_pdu; ++i)
+-	{
+-		proto_tree_add_uint8_array(tree, hf_nfapi_pdu, lengths[i], tvb, offset);
+-	}
+-
+-	free(lengths);
+-
+-	return 0;
+-}
+-int dissect_preamble_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-static int dissect_rach_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_pdu = proto_tree_add_uint16(tree, hf_nfapi_number_of_preambles, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Preamble PDU List", hf_nfapi_preamble_indication_pdu_list, ett_nfapi_preamble_indication_pdu_list, num_pdu, dissect_preamble_indication_pdu);
+-	return 0;
+-}
+-int dissect_srs_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 pdu_len = proto_tree_add_uint16(tree, hf_nfapi_instance_length, tvb, offset, 0);
+-	guint pdu_end = (*offset + pdu_len - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-static int dissect_srs_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-
+-	guint8 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_of_srss, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "SRS PDU List", hf_nfapi_srs_indication_pdu_list, ett_nfapi_srs_indication_pdu_list, num_pdu, dissect_srs_indication_pdu);
+-	return 0;
+-}
+-int dissect_lbt_dl_config_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_lbt_dl_req_pdu_type, tvb, offset, 0);
+-	guint8 size = proto_tree_add_uint8(tree, hf_nfapi_pdu_size, tvb, offset, 0);
+-	guint pdu_end = (*offset + size - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-static int dissect_lbt_dl_config_request_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "LBT DL PDU List", hf_nfapi_lbt_dl_config_pdu_list, ett_nfapi_lbt_dl_config_pdu_list, num_pdu, dissect_lbt_dl_config_pdu);
+-
+-	return 0;
+-}
+-int dissect_lbt_dl_indication_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_lbt_dl_ind_pdu_type, tvb, offset, 0);
+-	guint8 size = proto_tree_add_uint8(tree, hf_nfapi_pdu_size, tvb, offset, 0);
+-	guint pdu_end = (*offset + size - 2);
+-	dissect_tlv_list(tvb, pinfo, tree, data, offset, pdu_end);
+-	return 0;
+-}
+-static int dissect_lbt_indication_message_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint8 num_pdu = proto_tree_add_uint8(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "LBT DL PDU List", hf_nfapi_lbt_dl_indication_pdu_list, ett_nfapi_lbt_dl_indication_pdu_list, num_pdu, dissect_lbt_dl_indication_pdu);
+-	return 0;
+-}
+-
+-static int dissect_lte_rssi_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_band_indicator, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_measurement_period, tvb, offset, "ms");
+-	proto_tree_add_uint8(tree, hf_nfapi_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_earfcns = proto_tree_add_uint8(tree, hf_nfapi_number_of_earfcns, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "EARFCNs", hf_nfapi_earfcn_list, ett_nfapi_earfcn_list, num_earfcns, dissect_earfcn_value);
+-	return 0;
+-}
+-
+-int dissect_uarfcn_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_uarfcn, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_utran_rssi_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_band_indicator, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_measurement_period, tvb, offset, "ms");
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_uarfcns = proto_tree_add_uint8(tree, hf_nfapi_number_of_uarfcns, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "UARFCNs", hf_nfapi_uarfcn_list, ett_nfapi_uarfcn_list, num_uarfcns, dissect_uarfcn_value);
+-	return 0;
+-}
+-
+-int dissect_arfcn_dir_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_arfcn, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_arfcn_direction, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_geran_rssi_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_frequency_band_indicator, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_measurement_period, tvb, offset, "ms");
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_arfcns = proto_tree_add_uint8(tree, hf_nfapi_number_of_arfcns, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "ARFCNs", hf_nfapi_arfcn_list, ett_nfapi_arfcn_list, num_arfcns, dissect_arfcn_dir_value);
+-	return 0;
+-}
+-
+-
+-int rssi_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, gint16 value)
+-{
+-	proto_tree_add_int_format_value(tree, hfindex, tvb, *offset, 2, value, "%.2f dB (%d)", ((float)value * 0.1), value);
+-	return 0;
+-}
+-int dissect_rssi_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_int16_with_conversion(tree, hf_nfapi_rssi, tvb, offset, rssi_conversion);
+-	return 0;
+-}
+-static int dissect_rssi_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_rssi = proto_tree_add_uint16(tree, hf_nfapi_number_of_rssi, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "ARFCNs", hf_nfapi_rssi_list, ett_nfapi_rssi_list, num_rssi, dissect_rssi_value);
+-	return 0;
+-}
+-
+-int dissect_pci_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pci, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_lte_cell_search_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_earfcn, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_measurement_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_exhaustive_search, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_pci = proto_tree_add_uint8(tree, hf_nfapi_number_of_pci, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PCIs", hf_nfapi_pci_list, ett_nfapi_pci_list, num_pci, dissect_pci_value);
+-	return 0;
+-}
+-
+-int dissect_psc_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_psc, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_utran_cell_search_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_uarfcn, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_exhaustive_search, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_psc = proto_tree_add_uint8(tree, hf_nfapi_number_of_psc, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "PSCs", hf_nfapi_psc_list, ett_nfapi_psc_list, num_psc, dissect_psc_value);
+-	return 0;
+-}
+-
+-int dissect_arfcn_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_arfcn, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_geran_cell_search_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	guint8 num_arfcn = proto_tree_add_uint8(tree, hf_nfapi_number_of_arfcns, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "ARFCNs", hf_nfapi_arfcn_list, ett_nfapi_arfcn_list, num_arfcn, dissect_arfcn_value);
+-	return 0;
+-}
+-
+-int neg_pow_conversion(proto_item* tree, int hfindex, tvbuff_t *tvb, guint* offset, guint8 value)
+-{
+-	proto_tree_add_uint_format_value(tree, hfindex, tvb, *offset, 1, value, "%d dB (%d)", ((gint16)value * (-1)), value);
+-	return 0;
+-}
+-
+-int dissect_lte_cell_found_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_pci, tvb, offset, 0);
+-	proto_tree_add_uint8_with_conversion(tree, hf_nfapi_rsrp, tvb, offset, neg_pow_conversion);
+-	proto_tree_add_uint8_with_conversion(tree, hf_nfapi_rsrq, tvb, offset, neg_pow_conversion);
+-	proto_tree_add_int16(tree, hf_nfapi_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_lte_cell_search_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_lte_cells = proto_tree_add_uint16(tree, hf_nfapi_number_of_lte_cells_found, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "LTE Cells Found", hf_nfapi_lte_cells_found_list, ett_nfapi_lte_cells_found_list, num_lte_cells, dissect_lte_cell_found_value);
+-	return 0;
+-}
+-int dissect_utran_cell_found_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_psc, tvb, offset, 0);
+-	proto_tree_add_uint8_with_conversion(tree, hf_nfapi_rscp, tvb, offset, neg_pow_conversion);
+-	proto_tree_add_uint8_with_conversion(tree, hf_nfapi_enco, tvb, offset, neg_pow_conversion);
+-	proto_tree_add_int16(tree, hf_nfapi_frequency_offset, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_utran_cell_search_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_utran_cells = proto_tree_add_uint16(tree, hf_nfapi_number_of_utran_cells_found, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "UTRAN Cells Found", hf_nfapi_utran_cells_found_list, ett_nfapi_utran_cells_found_list, num_utran_cells, dissect_utran_cell_found_value);
+-	return 0;
+-}
+-
+-int dissect_geran_cell_found_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_arfcn, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_bsic, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rxlev, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_rxqual, tvb, offset, 0);
+-	proto_tree_add_int16(tree, hf_nfapi_frequency_offset, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_sfn_offset, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_geran_cell_search_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 num_geran_cells = proto_tree_add_uint16(tree, hf_nfapi_number_of_geran_cells_found, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "GERAN Cells Found", hf_nfapi_geran_cells_found_list, ett_nfapi_geran_cells_found_list, num_geran_cells, dissect_geran_cell_found_value);
+-
+-	return 0;
+-}
+-static int dissect_pnf_cell_search_state_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_pnf_search_state, *end - *offset, tvb, offset);
+-	return 0;
+-}
+-
+-static int dissect_pnf_cell_broadcast_state_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8_array(tree, hf_nfapi_pnf_broadcast_state, *end - *offset, tvb, offset);
+-	return 0;
+-}
+-static int dissect_lte_broadcast_detect_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_earfcn, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pci, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	return 0;
+-}
+-static int dissect_utran_broadcast_detect_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_uarfcn, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_psc, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, "ms");
+-	return 0;
+-}
+-
+-static int dissect_lte_broadcast_detect_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_tx_antenna, tvb, offset, 0);
+-	guint16 mib_len = proto_tree_add_uint16(tree, hf_nfapi_mib_length, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_mib, mib_len, tvb, offset);
+-	proto_tree_add_uint32(tree, hf_nfapi_sfn_offset, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_utran_broadcast_detect_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 mib_len = proto_tree_add_uint16(tree, hf_nfapi_mib_length, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_mib, mib_len, tvb, offset);
+-	proto_tree_add_uint32(tree, hf_nfapi_sfn_offset, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_lte_system_information_schedule_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_earfcn, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pci, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_downlink_channel_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_phich_configuration, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_tx_antenna, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_retry_count, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, 0);
+-	return 0;
+-}
+-//static int dissect_pnf_cell_broadcast_state_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-//{
+-//	return 0;
+-//}
+-static int dissect_lte_system_information_schedule_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	// this needs to be SIB 1
+-	proto_tree_add_uint8_array(tree, hf_nfapi_sib1, (*end - *offset), tvb, offset);
+-	return 0;
+-}
+-
+-int dissect_si_periodicity_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_si_periodicity, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_si_index, tvb, offset, 0);
+-	return 0;
+-}
+-
+-static int dissect_lte_system_information_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_earfcn, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_pci, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_downlink_channel_bandwidth, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_phich_configuration, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_number_of_tx_antenna, tvb, offset, 0);
+-	guint8 si_priodicity = proto_tree_add_uint8(tree, hf_nfapi_number_of_si_periodicity, tvb, offset, 0);
+-	dissect_array_value(tvb, pinfo, tree, data, offset, end, "Number SI Periodicity", hf_nfapi_si_periodicity_list, ett_nfapi_si_periodicity_list, si_priodicity, dissect_si_periodicity_value);
+-	proto_tree_add_uint8(tree, hf_nfapi_si_window_length, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, 0);
+-
+-	return 0;
+-}
+-static int dissect_utran_system_information_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_uarfcn, tvb, offset, 0);
+-	proto_tree_add_uint16(tree, hf_nfapi_psc, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, 0);
+-	return 0;
+-}
+-static int dissect_geran_system_information_request_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint16(tree, hf_nfapi_arfcn, tvb, offset, 0);
+-	proto_tree_add_uint8(tree, hf_nfapi_bsic, tvb, offset, 0);
+-	proto_tree_add_uint32(tree, hf_nfapi_timeout, tvb, offset, 0);
+-	return 0;
+-}
+-//static int dissect_pnf_cell_broadcast_state_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-//{
+-//	return 0;
+-//}
+-static int dissect_lte_system_information_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	proto_tree_add_uint8(tree, hf_nfapi_sib_type, tvb, offset, 0);
+-	guint16 sib_len = proto_tree_add_uint16(tree, hf_nfapi_sib_len, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_sib, sib_len, tvb, offset);
+-	return 0;
+-}
+-static int dissect_utran_system_information_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 sib_len = proto_tree_add_uint16(tree, hf_nfapi_sib_len, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_sib, sib_len, tvb, offset);
+-	return 0;
+-}
+-static int dissect_geran_system_information_indication_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint16 si_len = proto_tree_add_uint16(tree, hf_nfapi_si_len, tvb, offset, 0);
+-	proto_tree_add_uint8_array(tree, hf_nfapi_si, si_len, tvb, offset);
+-	return 0;
+-}
+-
+-static int dissect_rx_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end);
+-
+-const tlv_t tags[] =
+-{
+-	{ 0x1000, "PNF Param General", dissect_pnf_param_general_value },
+-	{ 0x1001, "PNF PHY", dissect_pnf_phy_value },
+-	{ 0x1002, "PNF RF", dissect_pnf_rf_value },
+-	{ 0x100A, "PNF PHY Rel 10", dissect_pnf_phy_rel10_value },
+-	{ 0x100B, "PNF PHY Rel 11", dissect_pnf_phy_rel11_value },
+-	{ 0x100C, "PNF PHY Rel 12", dissect_pnf_phy_rel12_value },
+-	{ 0x100D, "PNF PHY Rel 13", dissect_pnf_phy_rel13_value },
+-	{ 0x1003, "PNF PHY RF Config", dissect_pnf_phy_rf_config_value },
+-
+-	{ 0x0001, "Subframe config - Duplex Mode", dissect_duplex_mode_value },
+-	{ 0x0002, "Subframe config - PCFICH power offset TLV", dissect_pcfich_power_offset_value },
+-	{ 0x0003, "Subframe config - P-B", dissect_pb_value },
+-	{ 0x0004, "Subframe config - DL cyclic prefix type", dissect_dl_cyclic_prefix_value },
+-	{ 0x0005, "Subframe config - UL cyclic prefix type", dissect_ul_cyclic_prefix_value },
+-	{ 0x000A, "RF config - Downlink channel bandwidth", dissect_dl_channel_bandwidth_value },
+-	{ 0x000B, "RF config - Uplink channel bandwidth", dissect_ul_channel_bandwidth_value },
+-	{ 0x000C, "RF config - Reference signal power", dissect_reference_signal_power_value },
+-	{ 0x000D, "RF config - Tx antenna ports", dissect_tx_antenna_ports_value },
+-	{ 0x000E, "RF config - Rx Antenna ports", dissect_rx_antenna_ports_value },
+-	{ 0x0014, "PHICH config - PHICH resource", dissect_phich_resource_value },
+-	{ 0x0015, "PHICH config - PHICH duration", dissect_phich_duration_value },
+-	{ 0x0016, "PHICH config - PHICH power offset", dissect_phich_power_offset_value },
+-	{ 0x001E, "SCH config - Primary synchronization signal EPRE/EPRERS", dissect_psch_synch_signal_epre_eprers_value },
+-	{ 0x001F, "SCH config - Secondary synchronization signal EPRE/EPRERS", dissect_ssch_synch_signal_epre_eprers_value },
+-	{ 0x0020, "SCH config - Physical Cell Id", dissect_physical_cell_id_value },
+-	{ 0x0028, "PRACH config - Configuration index", dissect_prach_configuration_index_value },
+-	{ 0x0029, "PRACH config - Root sequence index", dissect_prach_root_sequence_index_value },
+-	{ 0x002A, "PRACH config - Zero correlation zone configuration", dissect_prach_zero_correlation_zone_configuration_value },
+-	{ 0x002B, "PRACH config - High speed flag", dissect_prach_high_speed_flag_value },
+-	{ 0x002C, "PRACH config - Frequency offset", dissect_prach_frequency_offset_value },
+-	{ 0x0032, "PUSCH config - Hopping mode", dissect_pusch_hopping_mode_value },
+-	{ 0x0033, "PUSCH config - Hopping offset", dissect_pusch_hopping_offset_value },
+-	{ 0x0034, "PUSCH config - Number of sub-bands", dissect_pusch_number_of_subbands_value },
+-	{ 0x003C, "PUCCH config - Delta PUCCH Shift", dissect_pucch_delta_pucch_shift_value },
+-	{ 0x003D, "PUCCH config - N_CQI RB", dissect_pucch_n_cqi_rb_value },
+-	{ 0x003E, "PUCCH config - N_AN CS", dissect_pucch_n_an_cs_value },
+-	{ 0x003F, "PUCCH config - N1Pucch-AN", dissect_pucch_n1_pucch_an_value },
+-	{ 0x0046, "SRS config - Bandwidth configuration", dissect_srs_bandwidth_configuration_value },
+-	{ 0x0047, "SRS config - MaxUpPTS", dissect_srs_max_uppts_value },
+-	{ 0x0048, "SRS config - SRS subframe configuration", dissect_srs_subframe_configuration_value },
+-	{ 0x0049, "SRS config - SRS AckNack SRS simultaneous transmission", dissect_srs_acknack_srs_sim_tx_value },
+-	{ 0x0050, "Uplink reference signal config - Uplink RS hopping", dissect_uplink_rs_hopping_value },
+-	{ 0x0051, "Uplink reference signal config - Group assignment (delta sequence-shift pattern)", dissect_group_assignment_value },
+-	{ 0x0052, "Uplink reference signal config - Cyclic Shift 1 for DMRS", dissect_cyclic_shift_1_for_drms_value },
+-	{ 0x005A, "TDD frame structure config - Subframe assignment", dissect_tdd_subframe_assignement_value },
+-	{ 0x005B, "TDD frame structure config - Special sub-frame patterns", dissect_tdd_subframe_patterns_value },
+-	{ 0x0064, "LAA config - ED Threshold for LBT for PDSCH", dissect_laa_ed_threashold_for_lbt_for_pdsch_value },
+-	{ 0x0065, "LAA config - ED Threshold for LBT for DRS", dissect_laa_ed_threashold_for_lbt_for_drs_value },
+-	{ 0x0066, "LAA config - PD Threshold", dissect_laa_pd_threshold_value },
+-	{ 0x0067, "LAA config - Multi carrier type", dissect_laa_multi_carrier_type_value },
+-	{ 0x0068, "LAA config - Multi carrier TX", dissect_laa_multi_carrier_tx_value },
+-	{ 0x0069, "LAA config - Multi carrier freeze ", dissect_laa_multi_carrier_freeze_value },
+-	{ 0x006A, "LAA config - Tx antenna ports for DRS", dissect_laa_tx_antenna_port_for_drs_value },
+-	{ 0x006B, "LAA config - Transmission power for DRS", dissect_laa_transmission_power_for_drs_value },
+-
+-	{ 0x0078, "eMTC config - PBCH Repetitions enable R13", dissect_emtc_pbch_repeitions_enabled_r13_value },
+-	{ 0x0079, "eMTC config - PRACH CAT-M Root sequence index", dissect_emtc_prach_cat_m_root_sequence_index_value },
+-	{ 0x007A, "eMTC config - PRACH CAT-M Zero correlation zone configuration", dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value },
+-	{ 0x007B, "eMTC config - PRACH CAT-M High speed flag", dissect_emtc_prach_cat_m_high_speed_flag_value },
+-	{ 0x007C, "eMTC config - PRACH CE level #0 Enable", dissect_emtc_prach_ce_level_0_enabled_value },
+-	{ 0x007D, "eMTC config - PRACH CE level #0 Configuration index", dissect_emtc_prach_ce_level_0_configuration_offset_value },
+-	{ 0x007E, "eMTC config - PRACH CE level #0 Frequency offset", dissect_emtc_prach_ce_level_0_frequency_offset_value },
+-	{ 0x007F, "eMTC config - PRACH CE level #0 Number of repetitions per attempt", dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value },
+-	{ 0x0080, "eMTC config - CE level #0 Starting subframe periodicity", dissect_emtc_ce_level_0_starting_subframe_periodicity_value },
+-	{ 0x0081, "eMTC config - PRACH CE level #0 Hopping Enable", dissect_emtc_preach_ce_level_0_hopping_enabled_value },
+-	{ 0x0082, "eMTC config - PRACH CE level #0 Hopping Offset", dissect_emtc_preach_ce_level_0_hopping_offset_value },
+-	{ 0x0083, "eMTC config - PRACH CE level #1 Enable", dissect_emtc_prach_ce_level_1_enabled_value },
+-	{ 0x0084, "eMTC config - PRACH CE level #1 Configuration index", dissect_emtc_prach_ce_level_1_configuration_offset_value },
+-	{ 0x0085, "eMTC config - PRACH CE level #1 Frequency offset", dissect_emtc_prach_ce_level_1_frequency_offset_value },
+-	{ 0x0086, "eMTC config - PRACH CE level #1 Number of repetitions per attempt", dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value },
+-	{ 0x0087, "eMTC config - CE level #1 Starting subframe periodicity", dissect_emtc_ce_level_1_starting_subframe_periodicity_value },
+-	{ 0x0088, "eMTC config - PRACH CE level #1 Hopping Enable", dissect_emtc_preach_ce_level_1_hopping_enabled_value },
+-	{ 0x0089, "eMTC config - PRACH CE level #1 Hopping Offset", dissect_emtc_preach_ce_level_1_hopping_offset_value },
+-	{ 0x008A, "eMTC config - PRACH CE level #2 Enable", dissect_emtc_prach_ce_level_2_enabled_value },
+-	{ 0x008B, "eMTC config - PRACH CE level #2 Configuration index", dissect_emtc_prach_ce_level_2_configuration_offset_value },
+-	{ 0x008C, "eMTC config - PRACH CE level #2 Frequency offset", dissect_emtc_prach_ce_level_2_frequency_offset_value },
+-	{ 0x008D, "eMTC config - PRACH CE level #2 Number of repetitions per attempt", dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value },
+-	{ 0x008E, "eMTC config - CE level #2 Starting subframe periodicity", dissect_emtc_ce_level_2_starting_subframe_periodicity_value },
+-	{ 0x008F, "eMTC config - PRACH CE level #2 Hopping Enable", dissect_emtc_preach_ce_level_2_hopping_enabled_value },
+-	{ 0x0090, "eMTC config - PRACH CE level #2 Hopping Offset", dissect_emtc_preach_ce_level_2_hopping_offset_value },
+-	{ 0x0091, "eMTC config - PRACH CE level #3 Enable", dissect_emtc_prach_ce_level_3_enabled_value },
+-	{ 0x0092, "eMTC config - PRACH CE level #3 Configuration index", dissect_emtc_prach_ce_level_3_configuration_offset_value },
+-	{ 0x0093, "eMTC config - PRACH CE level #3 Frequency offset", dissect_emtc_prach_ce_level_3_frequency_offset_value },
+-	{ 0x0094, "eMTC config - PRACH CE level #3 Number of repetitions per attempt", dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value },
+-	{ 0x0095, "eMTC config - CE level #3 Starting subframe periodicity", dissect_emtc_ce_level_3_starting_subframe_periodicity_value },
+-	{ 0x0096, "eMTC config - PRACH CE level #3 Hopping Enable", dissect_emtc_preach_ce_level_3_hopping_enabled_value },
+-	{ 0x0097, "eMTC config - PRACH CE level #3 Hopping Offset", dissect_emtc_preach_ce_level_3_hopping_offset_value },
+-	{ 0x0098, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeA", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value },
+-	{ 0x0099, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeB", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value },
+-	
+-	{ 0x00C8, "Layer 2/3 - Downlink Bandwidth Support", dissect_dl_bandwidth_support_value },
+-	{ 0x00C9, "Layer 2/3 - Uplink Bandwidth Support", dissect_ul_bandwidth_support_value },
+-	{ 0x00CA, "Layer 2/3 - Downlink modulation support", dissect_dl_modulation_value },
+-	{ 0x00CB, "Layer 2/3 - Uplink modulation support", dissect_ul_modulation_value },
+-	{ 0x00CC, "Layer 2/3 - PHY antenna capability", dissect_phy_antenna_capability_value },
+-	{ 0x00CD, "Layer 2/3 - Release capability", dissect_release_capability_value },
+-	{ 0x00CE, "Layer 2/3 - MBSFN capability", dissect_mbsfn_value },
+-
+-	{ 0x00D1, "LAA Capability - LAA support", dissect_laa_support_value },
+-	{ 0x00D1, "LAA Capability - PD sensing LBT support", dissect_laa_pd_sensing_lbt_support_value },
+-	{ 0x00D1, "LAA Capability - Multi carrier LBT support", dissect_laa_multi_carrier_lbt_support_value },
+-	{ 0x00D1, "LAA Capability - Partial SF support", dissect_laa_partial_sf_support_value },
+-
+-	{ 0x00F0, "Layer 2/3 - Data report mode", dissect_data_report_mode_value },
+-	{ 0x00F1, "Layer 2/3 - SFN/SF", dissect_sfn_sf_value },
+-	{ 0x00FA, "Layer 1 - PHY state", dissect_phy_state_value },
+-
+-	{ 0x0100, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv4_value },
+-	{ 0x0101, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv6_value },
+-	{ 0x0102, "NFAPI - P7 Port", dissect_p7_vnf_port_value },
+-	{ 0x0103, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv4_value },
+-	{ 0x0104, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv6_value },
+-	{ 0x0105, "NFAPI - P7 Port", dissect_p7_pnf_port_value },
+-	{ 0x010A, "NFAPI - Downlink UEs per Subframe", dissect_downlink_ues_per_subframe_value },
+-	{ 0x010B, "NFAPI - Uplink UEs per Subframe", dissect_uplink_ues_per_subframe_value },
+-
+-	{ 0x0114, "NFAPI - nFAPI RF Bands", dissect_rf_bands_value },
+-
+-	{ 0x011E, "NFAPI - Timing window", dissect_timing_window_value },
+-	{ 0x011F, "NFAPI - Timing info mode", dissect_timing_info_mode_value },
+-	{ 0x0120, "NFAPI - Timing info period", dissect_timing_info_period_value },
+-	{ 0x0128, "NFAPI - Maximum Transmit Power", dissect_maximum_transmit_power_value },
+-	{ 0x0129, "NFAPI - EARFCN", dissect_earfcn_value },
+-	{ 0x0130, "NFAPI - NMM GSM Frequency Bands", dissect_nmm_gsm_frequency_bands_value },
+-	{ 0x0131, "NFAPI - NMM UMTS Frequency Bands", dissect_nmm_umts_frequency_bands_value },
+-	{ 0x0132, "NFAPI - NMM LTE Frequency Bands", dissect_nmm_lte_frequency_bands_value },
+-	{ 0x0133, "NFAPI - NMM Uplink RSSI supported", dissect_nmm_uplink_rssi_supported_value },
+-
+-	{ 0x2000, "DL Config Request Body", dissect_dl_config_request_body_value },
+-
+-	{ 0x2001, "DL DCI PDU Release 8", dissect_dl_config_request_dl_dci_pdu_rel8_value },
+-	{ 0x2002, "DL DCI PDU Release 9", dissect_dl_config_request_dl_dci_pdu_rel9_value },
+-	{ 0x2003, "DL DCI PDU Release 10", dissect_dl_config_request_dl_dci_pdu_rel10_value },
+-	{ 0x2039, "DL DCI PDU Release 11", dissect_dl_config_request_dl_dci_pdu_rel11_value },
+-	{ 0x203A, "DL DCI PDU Release 12", dissect_dl_config_request_dl_dci_pdu_rel12_value },
+-	{ 0x203B, "DL DCI PDU Release 13", dissect_dl_config_request_dl_dci_pdu_rel13_value },
+-
+-
+-	{ 0x2004, "BCH PDU Release 8", dissect_dl_config_request_bch_pdu_rel8_value },
+-
+-	{ 0x2005, "MCH PDU Release 8", dissect_dl_config_request_mch_pdu_rel8_value },
+-
+-	{ 0x2006, "DLSCH PDU Release 8", dissect_dl_config_request_dlsch_pdu_rel8_value },
+-	{ 0x2007, "DLSCH PDU Release 9", dissect_dl_config_request_dlsch_pdu_rel9_value },
+-	{ 0x2008, "DLSCH PDU Release 10", dissect_dl_config_request_dlsch_pdu_rel10_value },
+-	{ 0x203C, "DLSCH PDU Release 11", dissect_dl_config_request_dlsch_pdu_rel11_value },
+-	{ 0x203D, "DLSCH PDU Release 12", dissect_dl_config_request_dlsch_pdu_rel12_value },
+-	{ 0x203E, "DLSCH PDU Release 13", dissect_dl_config_request_dlsch_pdu_rel13_value },
+-
+-	{ 0x2009, "PCH PDU Release 8", dissect_dl_config_request_pch_pdu_rel8_value },
+-	{ 0x203F, "PCH PDU Release 13", dissect_dl_config_request_pch_pdu_rel13_value },
+-
+-	{ 0x200A, "PRS PDU Release 9", dissect_dl_config_request_prs_pdu_rel9_value },
+-
+-	{ 0x200B, "CSI-RS PDU Release 10", dissect_dl_config_request_csi_rs_pdu_rel10_value },
+-	{ 0x2040, "CSI-RS PDU Release 13", dissect_dl_config_request_csi_rs_pdu_rel13_value },
+-
+-	//{ 0x2001, "EDPCCH PDU Release 8", ?? },
+-	//{ 0x2002, "EDPCCH PDU Release 8", ?? },
+-	//{ 0x2003, "EDPCCH PDU Release 8", ?? },
+-	//{ 0x2039, "EDPCCH PDU Release 11", ?? },
+-	//{ 0x203A, "EDPCCH PDU Release 12", ?? },
+-	//{ 0x203B, "EDPCCH PDU Release 13", ?? },
+-	{ 0x2041, "EDPCCH PDU Release 11 Parameters", dissect_dl_config_request_edpcch_params_rel11_value },
+-	{ 0x2042, "EDPCCH PDU Release 13 Parameters", dissect_dl_config_request_edpcch_params_rel13_value },
+-
+-	{ 0x205B, "MPDCCH PDU Release 13", dissect_dl_config_request_mpdpcch_pdu_rel13_value },
+-
+-
+-	{ 0x200C, "UL Config Request Body", dissect_ul_config_request_body_value },
+-	{ 0x200D, "ULSCH PDU Release 8", dissect_ul_config_ulsch_pdu_rel8_value },
+-	{ 0x200E, "ULSCH PDU Release 10", dissect_ul_config_ulsch_pdu_rel10_value },
+-	{ 0x2043, "ULSCH PDU Release 11", dissect_ul_config_ulsch_pdu_rel11_value },
+-	{ 0x2044, "ULSCH PDU Release 13", dissect_ul_config_ulsch_pdu_rel13_value },
+-	{ 0x200F, "Initial Transmission Paramters Release 8", dissect_ul_config_init_tx_params_rel8_value },
+-	{ 0x2010, "CQI RI Information Release 8", dissect_ul_config_cqi_ri_info_rel8_value },
+-	{ 0x2011, "CQI RI Information Release 9 or later", dissect_ul_config_cqi_ri_info_rel9_later_value },
+-	{ 0x2045, "CQI RI Information Release 13", dissect_ul_config_cqi_ri_info_rel13_value },
+-	{ 0x2012, "HARQ Information (ULSCH) Release 10", dissect_ul_config_harq_info_ulsch_rel10_value },
+-	{ 0x2046, "HARQ Information (ULSCH) Release 13", dissect_ul_config_harq_info_ulsch_rel13_value },
+-	{ 0x2013, "UE Information Release 8", dissect_ul_config_ue_info_rel8_value },
+-	{ 0x2047, "UE Information Release 11", dissect_ul_config_ue_info_rel11_value },
+-	{ 0x2048, "UE Information Release 13", dissect_ul_config_ue_info_rel13_value },
+-	{ 0x2014, "CQI Information Release 8", dissect_ul_config_cqi_info_rel8_value },
+-	{ 0x2015, "CQI Information Release 10", dissect_ul_config_cqi_info_rel10_value },
+-	{ 0x2049, "CQI Information Release 13", dissect_ul_config_cqi_info_rel13_value },
+-	{ 0x2016, "SR Information Release 8", dissect_ul_config_sr_info_rel8_value },
+-	{ 0x2017, "SR Information Release 10", dissect_ul_config_sr_info_rel10_value },
+-	{ 0x2018, "HARQ Information (UCI) Release 10 TDD", dissect_ul_config_harq_info_uci_rel10_tdd_value },
+-	{ 0x2019, "HARQ Information (UCI) Release 8 FDD", dissect_ul_config_harq_info_uci_rel8_fdd_value },
+-	{ 0x201A, "HARQ Information (UCI) Release 9 or later FDD", dissect_ul_config_harq_info_uci_rel9_later_fdd_value },
+-	{ 0x204A, "HARQ Information (UCI) Release 11 FDD/TDD", dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value },
+-	{ 0x204B, "HARQ Information (UCI) Release 13 FDD/TDD", dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value },
+-	{ 0x201B, "SRS Information Release 8", dissect_ul_config_srs_info_rel8_value },
+-	{ 0x201C, "SRS Information Release 10", dissect_ul_config_srs_info_rel10_value },
+-	{ 0x204C, "SRS Information Release 13", dissect_ul_config_srs_info_rel13_value },
+-
+-	{ 0x201D, "HI DCI0 Request Body", dissect_hi_dci0_request_body_value },
+-	{ 0x201E, "HI PDU Release 8", dissect_hi_dci0_hi_rel8_value },
+-	{ 0x201F, "HI PDU Release 10", dissect_hi_dci0_hi_rel10_value },
+-	{ 0x2020, "DCI UL PDU Release 8", dissect_hi_dci0_dci_ul_rel8_value },
+-	{ 0x2021, "DCI UL PDU Release 10", dissect_hi_dci0_dci_ul_rel10_value },
+-	{ 0x204D, "DCI UL PDU Release 12", dissect_hi_dci0_dci_ul_rel12_value },
+-	//{ 0x2041, "EDPCCH DCI UL PDU Release 11", dissect_hi_dci0_edpcch_dci_ul_rel11_value },
+-	{ 0x204E, "MDPCCH DCI UL PDU Release 13", dissect_hi_dci0_mdpcch_dci_ul_rel13_value },
+-
+-	{ 0x2022, "Tx Request Body", dissect_tx_request_body_value },
+-
+-	{ 0x2038, "RX UE Information", dissect_rx_ue_info_value },
+-
+-	{ 0x2023, "RX Indication Body", dissect_rx_indication_body_value },
+-	{ 0x2024, "RX PDU Release 8", dissect_rx_indication_rel8_value },
+-	{ 0x2025, "RX PDU Release 9", dissect_rx_indication_rel9_value },
+-
+-	{ 0x2026, "HARQ Indication Body", dissect_harq_indication_body_value },
+-	{ 0x2027, "HARQ PDU Release 8 TDD", dissect_harq_indication_rel8_tdd_value },
+-	{ 0x2028, "HARQ PDU Release 9 or later TDD", dissect_harq_indication_rel9_later_tdd_value },
+-	{ 0x204F, "HARQ PDU Release 13 or later TDD", dissect_harq_indication_rel13_later_tdd_value },
+-	{ 0x2029, "HARQ PDU Release 8 FDD", dissect_harq_indication_rel8_fdd_value },
+-	{ 0x202A, "HARQ PDU Release 9 or later FDD", dissect_harq_indication_rel9_later_fdd_value },
+-	{ 0x2050, "HARQ PDU Release 13 or later FDD", dissect_harq_indication_rel13_later_fdd_value },
+-	{ 0x2052, "UL CQI Information", dissect_ul_cqi_information_value },
+-
+-	{ 0x202B, "CRC Indication Body", dissect_crc_indication_body_value },
+-	{ 0x202C, "CRC PDU Release 8", dissect_crc_indication_rel8_value },
+-
+-	{ 0x202D, "RX SR Indication Body", dissect_rx_sr_indication_body_value },
+-
+-	{ 0x202E, "RX CQI Indication Body", dissect_rx_cqi_indication_body_value },
+-	{ 0x202F, "CQI PDU Release 8", dissect_rx_cqi_indication_rel8_value },
+-	{ 0x2030, "CQI PDU Release 9", dissect_rx_cqi_indication_rel9_value },
+-
+-	{ 0x2031, "RACH Indication Body", dissect_rach_indication_body_value },
+-	{ 0x2032, "Preamable PDU Release 8", dissect_rach_indication_rel8_value },
+-	{ 0x2033, "Preamable PDU Release 9", dissect_rach_indication_rel9_value },
+-	{ 0x2051, "Preamable PDU Release 13", dissect_rach_indication_rel13_value },
+-
+-	{ 0x2034, "SRS Indication Body", dissect_srs_indication_body_value },
+-	{ 0x2035, "SRS PDU Release 8", dissect_srs_indication_rel8_value },
+-	{ 0x2036, "SRS PDU Release 9", dissect_srs_indication_rel9_value },
+-	{ 0x2037, "SRS PDU Release 10 TDD", dissect_srs_indication_rel10_tdd_value },
+-	{ 0x2054, "TDD Channel Measurement", dissect_tdd_channel_measuerment_value },
+-	{ 0x2053, "SRS PDU Release 11", dissect_srs_indication_rel11_value },
+-
+-
+-	{ 0x2055, "LBT DL Config Request Body", dissect_lbt_dl_config_request_body_value },
+-	{ 0x2056, "LBT PDSCH Req PDU Release 13", dissect_lbt_dl_config_request_pdsch_req_rel13_value },
+-	{ 0x2057, "LBT DRS req PDU Release 13", dissect_lbt_dl_config_request_drs_req_rel13_value },
+-
+-	{ 0x2058, "LBT DL Indication Message Body", dissect_lbt_indication_message_body_value },
+-	{ 0x2056, "LBT PDSCH Resp PDU Release 13", dissect_lbt_dl_config_request_pdsch_resp_rel13_value },
+-	{ 0x2057, "LBT DRS Resp PDU Release 13", dissect_lbt_dl_config_request_drs_resp_rel13_value },
+-
+-	{ 0x3000, "LTE RSSI Request", dissect_lte_rssi_request_value },
+-	{ 0x3001, "UTRAN RSSI Request", dissect_utran_rssi_request_value },
+-	{ 0x3002, "GERAN RSSI Request", dissect_geran_rssi_request_value },
+-	{ 0x3003, "RSSI Indication", dissect_rssi_indication_value },
+-	{ 0x3004, "LTE CELL SEARCH Request", dissect_lte_cell_search_value },
+-	{ 0x3005, "UTRAN CELL SEARCH Request", dissect_utran_cell_search_value },
+-	{ 0x3006, "GERAN CELL SEARCH Request", dissect_geran_cell_search_value },
+-	{ 0x3007, "LTE CELL SEARCH Indication", dissect_lte_cell_search_indication_value },
+-	{ 0x3008, "UTRAN CELL SEARCH Indication", dissect_utran_cell_search_indication_value },
+-	{ 0x3009, "GERAN CELL SEARCH Indication", dissect_geran_cell_search_indication_value },
+-	{ 0x300a, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
+-	{ 0x300b, "LTE BROADCAST DETECT Request", dissect_lte_broadcast_detect_request_value },
+-	{ 0x300c, "UTRAN BROADCAST DETECT Request", dissect_utran_broadcast_detect_request_value },
+-	{ 0x300d, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
+-	{ 0x300e, "LTE BROADCAST DETECT Indication", dissect_lte_broadcast_detect_indication_value },
+-	{ 0x300f, "UTRAN BROADCAST DETECT Indication", dissect_utran_broadcast_detect_indication_value },
+-	{ 0x3010, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
+-	{ 0x3011, "LTE SYSTEM INFORMATION SCHEDULE Request", dissect_lte_system_information_schedule_request_value },
+-	{ 0x3012, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
+-	{ 0x3013, "LTE SYSTEM INFORMATION SCHEDULE Indication", dissect_lte_system_information_schedule_indication_value },
+-	{ 0x3014, "LTE SYSTEM INFORMATION Request", dissect_lte_system_information_request_value },
+-	{ 0x3015, "UTRAN SYSTEM INFORMATION Request", dissect_utran_system_information_request_value },
+-	{ 0x3016, "GERAN SYSTEM INFORMATION Request", dissect_geran_system_information_request_value },
+-	{ 0x3017, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
+-	{ 0x3018, "LTE SYSTEM INFORMATION Indication", dissect_lte_system_information_indication_value },
+-	{ 0x3019, "UTRAN SYSTEM INFORMATION Indication", dissect_utran_system_information_indication_value },
+-	{ 0x301a, "GERAN SYSTEM INFORMATION Indication", dissect_geran_system_information_indication_value },
+-
+-
+-
+-
+-};
+-
+-int look_up_tlv(int tag_id)
+-{
+-	int i;
+-	int num_tags = sizeof(tags) / sizeof(tlv_t);
+-
+-	for (i = 0; i < num_tags; i++)
+-	{
+-		if (tag_id == tags[i].tag_id)
+-			return i;
+-	}
+-	return -1;
+-}
+-
+-static int dissect_tl_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset)
+-{
+-	proto_item *tl_ti = proto_tree_add_string_format(tree, hf_nfapi_tl, tvb, *offset, 4, "", "TL");
+-	proto_tree *tl_tree = proto_item_add_subtree(tl_ti, ett_nfapi_tl);
+-
+-	proto_tree_add_uint16(tl_tree, hf_nfapi_tl_tag, tvb, offset, 0);
+-	proto_tree_add_uint16(tl_tree, hf_nfapi_tl_length, tvb, offset, "bytes");
+-
+-	return 0;
+-
+-}
+-
+-static int dissect_tlv_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint len)
+-{	
+-	while (*offset < len)
+-	{
+-		guint16 tlv_id = tvb_get_guint16(tvb, *offset, ENC_NA);
+-		guint16 tlv_len = tvb_get_guint16(tvb, *offset + 2, ENC_NA);
+-
+-		int tlv_index = look_up_tlv(tlv_id);
+-
+-		char* tlv_name = tlv_index != -1 ? tags[tlv_index].name : "Unknown";
+-
+-		proto_item *tlv_ti = proto_tree_add_string_format(tree, hf_nfapi_tlv_tree, tvb, *offset, tlv_len + 4, "", tlv_name);
+-		proto_tree *tlv_tree = proto_item_add_subtree(tlv_ti, ett_nfapi_tlv_tree);
+-
+-		dissect_tl_header(tvb, pinfo, tlv_tree, data, offset);
+-
+-		if (tags[tlv_index].decode != NULL)
+-		{
+-			guint tmp = *offset;
+-			guint end = *offset + tlv_len;
+-			tags[tlv_index].decode(tvb, pinfo, tlv_tree, data, &tmp, &end);
+-			*offset += tlv_len;
+-		}
+-		else
+-		{
+-			*offset += tlv_len;
+-		}
+-	}
+-
+-	return 0;
+-}
+-
+-static int dissect_rx_indication_body_value(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint* end)
+-{
+-	guint number_of_pdu_addr = *offset;
+-	guint16 count = proto_tree_add_uint16(tree, hf_nfapi_number_pdus, tvb, offset, 0);
+-	//dissect_array_value(tvb, pinfo, tree, data, offset, "RX PDU List", hf_nfapi_rx_indication_pdu_list, ett_nfapi_rx_indication_pdu_list, num_pdu, dissect_rx_pdu);
+-
+-	guint16* lengths = malloc(count * 2);
+-	memset(lengths, 0, count * 2);
+-
+-	guint16 i = 0;
+-
+-	if (count > 0)
+-	{
+-		proto_item *list_ti = proto_tree_add_string_format(tree, hf_nfapi_rx_indication_pdu_list, tvb, *offset, 2, "", "RX PDU List");
+-		proto_tree *list_tree = proto_item_add_subtree(list_ti, ett_nfapi_rx_indication_pdu_list);
+-
+-		//for (i = 0; i < count; ++i)
+-		proto_tree *item_tree = 0;
+-
+-		guint pdu_end = *end;
+-		while (*offset < *end && *offset < pdu_end)
+-		{
+-
+-			guint16 tlv_id = tvb_get_guint16(tvb, *offset, ENC_NA);
+-			guint16 tlv_len = tvb_get_guint16(tvb, *offset + 2, ENC_NA);
+-
+-			if (tlv_id == 0x2038)
+-			{
+-				proto_item *item_ti = proto_tree_add_string_format(list_tree, hf_nfapi_rx_indication_pdu_list, tvb, *offset, 2, "", "[%d]", i);
+-				item_tree = proto_item_add_subtree(item_ti, ett_nfapi_rx_indication_pdu_list);
+-
+-				i++;
+-			}
+-
+-			int tlv_index = look_up_tlv(tlv_id);
+-
+-			char* tlv_name = tlv_index != -1 ? tags[tlv_index].name : "Unknown";
+-
+-			proto_item *tlv_ti = proto_tree_add_string_format(item_tree, hf_nfapi_tlv_tree, tvb, *offset, tlv_len + 4, "", tlv_name);
+-			proto_tree *tlv_tree = proto_item_add_subtree(tlv_ti, ett_nfapi_tlv_tree);
+-
+-
+-	
+-
+-			dissect_tl_header(tvb, pinfo, tlv_tree, data, offset);
+-
+-			guint tmp_offset = *offset;
+-
+-			if (tlv_id == 0x2038)
+-			{
+-				dissect_rx_ue_info_value(tvb, pinfo, tlv_tree, data, &tmp_offset, end);
+-			}
+-
+-			else if (tlv_id == 0x2024)
+-			{
+-				//int data_offset = dissect_rx_indication_rel8_value(tvb, pinfo, tlv_tree, data, &tmp_offset, end);
+-
+-				lengths[i-1] = proto_tree_add_uint16(tlv_tree, hf_nfapi_length, tvb, &tmp_offset, 0);
+-				int data_offset = proto_tree_add_uint16(tlv_tree, hf_nfapi_data_offset, tvb, &tmp_offset, 0);
+-				proto_tree_add_uint8(tlv_tree, hf_nfapi_ul_cqi, tvb, &tmp_offset, 0);
+-				proto_tree_add_uint16(tlv_tree, hf_nfapi_timing_advance, tvb, &tmp_offset, 0);
+-				
+-				if ((data_offset > 0) && (pdu_end == *end))
+-				{
+-					pdu_end = number_of_pdu_addr + data_offset;
+-				}
+-
+-			}
+-			else if (tlv_id == 0x2025)
+-			{
+-				dissect_rx_indication_rel9_value(tvb, pinfo, tlv_tree, data, &tmp_offset, end);
+-			}
+-
+-
+-			*offset += tlv_len;
+-		}
+-
+-	}
+-
+-	for (i = 0; i < count; ++i)
+-	{
+-		proto_tree_add_uint8_array(tree, hf_nfapi_pdu, lengths[i], tvb, offset);
+-	}
+-
+-	free(lengths);
+-
+-	// more to follow here ??
+-	return 0;
+-
+-}
+-
+-
+-// ----------------------------------------------------------------------------|
+-
+-
+-static int dissect_p45_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset)
+-{
+-	proto_item *p4_p5_header_ti = proto_tree_add_string_format(tree, hf_nfapi_p4_p5_message_header, tvb, *offset, NFAPI_HEADER_LENGTH, "", "P4 P5 Header");
+-	proto_tree *p4_p5_header_tree = proto_item_add_subtree(p4_p5_header_ti, ett_nfapi_p4_p5_message_header);
+-
+-	proto_tree_add_uint16(p4_p5_header_tree, hf_nfapi_p4_p5_message_header_phy_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p4_p5_header_tree, hf_nfapi_p4_p5_message_header_message_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p4_p5_header_tree, hf_nfapi_p4_p5_message_header_message_length, tvb, offset, 0);
+-	proto_tree_add_uint16(p4_p5_header_tree, hf_nfapi_p4_p5_message_header_spare, tvb, offset, 0);
+-
+-	return 0;
+-}
+-
+-static int dissect_p7_header_new(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset, guint8* m, guint8* seg, guint8* seq)
+-{
+-	proto_item *p7_header_ti = proto_tree_add_string_format(tree, hf_nfapi_p7_message_header, tvb, *offset, NFAPI_P7_HEADER_LENGTH, "", "P7 Header");
+-	proto_tree *p7_header_tree = proto_item_add_subtree(p7_header_ti, ett_nfapi_p7_message_header);
+-
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_phy_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_message_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_message_length, tvb, offset, "bytes");
+-
+-	// decoding bits for p7 header
+-
+-	guint8 m_seg = tvb_get_guint8(tvb, *offset);
+-	*m = (m_seg & 0x80) >> 7;
+-	*seg = m_seg & 0x7F;
+-
+-
+-	proto_tree_add_bits_item(p7_header_tree, hf_nfapi_p7_message_header_m, tvb, (*offset) * 8, 1, ENC_NA);
+-	proto_tree_add_bits_item(p7_header_tree, hf_nfapi_p7_message_header_segment, tvb, ((*offset) * 8) + 1, 7, ENC_NA);
+-	*offset += 1;
+-
+-	*seq = tvb_get_guint8(tvb, *offset);
+-	proto_tree_add_uint8(p7_header_tree, hf_nfapi_p7_message_header_sequence_number, tvb, offset, 0);
+-
+-
+-	proto_tree_add_uint32(p7_header_tree, hf_nfapi_p7_message_header_checksum, tvb, offset, 0);
+-	proto_tree_add_uint32(p7_header_tree, hf_nfapi_p7_message_header_transmit_timestamp, tvb, offset, "microseconds");
+-
+-	return 0;
+-
+-}
+-
+-
+-
+-
+-static int dissect_p7_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data, guint* offset)
+-{
+-	proto_item *p7_header_ti = proto_tree_add_string_format(tree, hf_nfapi_p7_message_header, tvb, *offset, NFAPI_P7_HEADER_LENGTH, "", "P7 Header");
+-	proto_tree *p7_header_tree = proto_item_add_subtree(p7_header_ti, ett_nfapi_p7_message_header);
+-
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_phy_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_message_id, tvb, offset, 0);
+-	proto_tree_add_uint16(p7_header_tree, hf_nfapi_p7_message_header_message_length, tvb, offset, "bytes");
+-
+-
+-	proto_tree_add_bits_item(p7_header_tree, hf_nfapi_p7_message_header_m, tvb, (*offset) * 8, 1, ENC_NA);
+-	proto_tree_add_bits_item(p7_header_tree, hf_nfapi_p7_message_header_segment, tvb, ((*offset) * 8) + 1, 7, ENC_NA);
+-	*offset += 1;
+-
+-	proto_tree_add_uint8(p7_header_tree, hf_nfapi_p7_message_header_sequence_number, tvb, offset, 0);
+-	
+-
+-	proto_tree_add_uint32(p7_header_tree, hf_nfapi_p7_message_header_checksum, tvb, offset, 0);
+-	proto_tree_add_uint32(p7_header_tree, hf_nfapi_p7_message_header_transmit_timestamp, tvb, offset, "microseconds");
+-
+-	return 0;
+-
+-}
+-
+-static reassembly_table ul_p7_reassemble_table;
+-static reassembly_table dl_p7_reassemble_table;
+-
+-
+-
+-static int hf_msg_fragments = -1;
+-static int hf_msg_fragment = -1;
+-static int hf_msg_fragment_overlap = -1;
+-static int hf_msg_fragment_overlap_conflicts = -1;
+-static int hf_msg_fragment_multiple_tails = -1;
+-static int hf_msg_fragment_too_long_fragment = -1;
+-static int hf_msg_fragment_error = -1;
+-static int hf_msg_fragment_count = -1;
+-static int hf_msg_reassembled_in = -1;
+-static int hf_msg_reassembled_length = -1;
+-static int hf_msg_reassembled_data = -1;
+-static gint ett_msg_fragment = -1;
+-static gint ett_msg_fragments = -1;
+-
+-static const fragment_items msg_frag_items = {
+-	/* Fragment subtrees */
+-	&ett_msg_fragment,
+-	&ett_msg_fragments,
+-	/* Fragment fields */
+-	&hf_msg_fragments,
+-	&hf_msg_fragment,
+-	&hf_msg_fragment_overlap,
+-	&hf_msg_fragment_overlap_conflicts,
+-	&hf_msg_fragment_multiple_tails,
+-	&hf_msg_fragment_too_long_fragment,
+-	&hf_msg_fragment_error,
+-	&hf_msg_fragment_count,
+-	/* Reassembled in field */
+-	&hf_msg_reassembled_in,
+-	/* Reassembled length field */
+-	&hf_msg_reassembled_length,
+-	NULL,
+-	/* Tag */
+-	"Message fragments"
+-};
+-
+-static int dissect_nfapi_ul_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
+-{
+-	guint8 m;
+-	guint8 seg;
+-	guint8 seq;
+-	guint offset = 0;
+-
+-	guint16 msg_id = tvb_get_guint16(tvb, 2, ENC_NA);
+-	guint16 msg_len	= tvb_get_guint16(tvb, 4, ENC_NA);
+-
+-	dissect_p7_header_new(tvb, pinfo, tree, data, &offset, &m, &seg, &seq);
+-	
+-	guint8 save_fragmented = pinfo->fragmented;
+-
+-	// not sure why I need to do this, but if I don't it does not reasses the protocol
+-	pinfo->fd->flags.visited = 0;
+-
+-	if (m == 1 || (m == 0 && seg > 0))
+-	{
+-		pinfo->fragmented = TRUE;
+-
+-		fragment_head *fd_head = fragment_add_seq_check(&ul_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
+-
+-		guint8 reassembled = 0;
+-		if (fd_head)
+-		{
+-			tvbuff_t * new_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled UL P7", fd_head, &msg_frag_items, NULL, tree);
+-
+-			if (new_tvb)
+-			{ 
+-				// set the tvb to the new reassembled buffer.
+-				tvb = new_tvb;
+-				reassembled = 1;
+-				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
+-
+-				// reset the offset for the new tvb
+-				offset = 0;
+-			}
+-			else
+-			{
+-				// Is this a failure to reassemble the data
+-				return 0;
+-			}
+-		}
+-		else
+-		{
+-			// this is a segement skip the body
+-			col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
+-			return 0;
+-		}
+-	}
+-		
+-	pinfo->fragmented = save_fragmented;
+-	
+-	{
+-		switch (msg_id)
+-		{
+-			//HARQ.indication
+-			case 0x85: 
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//CRC.indication
+-			case 0x86:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//RX_ULSCH.indication
+-			case 0x87:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//RACH.indication
+-			case 0x88:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//SRS.indication
+-			case 0x89:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//RX_SR.indication
+-			case 0x8A:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-			//RX_CQI.indication
+-			case 0x8B:
+-			{
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-			}
+-			break;
+-		};
+-	}
+-	
+-	return 0;
+-}
+-
+-static int dissect_nfapi_dl_p7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
+-{
+-	guint8 m;
+-	guint8 seg;
+-	guint8 seq;
+-	guint offset = 0;
+-
+-	guint16 msg_id = tvb_get_guint16(tvb, 2, ENC_NA);
+-	guint16 msg_len = tvb_get_guint16(tvb, 4, ENC_NA);
+-
+-	dissect_p7_header_new(tvb, pinfo, tree, data, &offset, &m, &seg, &seq);
+-
+-	guint8 save_fragmented = pinfo->fragmented;
+-
+-	// not sure why I need to do this, but if I don't it does not reasses the protocol
+-	pinfo->fd->flags.visited = 0;
+-
+-	if (m == 1 || (m == 0 && seg > 0))
+-	{
+-		pinfo->fragmented = TRUE;
+-
+-		fragment_head *fd_head = fragment_add_seq_check(&dl_p7_reassemble_table, tvb, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
+-
+-		guint8 reassembled = 0;
+-		if (fd_head)
+-		{
+-			tvbuff_t * new_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled DL P7", fd_head, &msg_frag_items, NULL, tree);
+-
+-			if (new_tvb)
+-			{
+-				// set the tvb to the new reassembled buffer.
+-				tvb = new_tvb;
+-				reassembled = 1;
+-				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
+-
+-				// reset the offset for the new tvb
+-				offset = 0;
+-			}
+-			else
+-			{
+-				// Is this a failure to reassemble the data
+-				return 0;
+-			}
+-		}
+-		else
+-		{
+-			// this is a segement skip the body
+-			col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
+-			return 0;
+-		}
+-	}
+-
+-	pinfo->fragmented = save_fragmented;
+-
+-	{
+-		switch (msg_id)
+-		{
+-			// DL_CONFIG.request
+-			case 0x80:
+-			{
+-				//dissect_p7_header(tvb, pinfo, tree, data, &offset);
+-				proto_tree_add_uint16_with_conversion(tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-				dissect_tlv_list(tvb, pinfo, tree, data, &offset, tvb_reported_length(tvb));
+-				break;
+-			}
+-	
+-		};
+-	}
+-
+-	return 0;
+-}
+-
+-
+-static int dissect_nfapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
+-{
+-	col_set_str(pinfo->cinfo, COL_PROTOCOL, "NFAPI");
+-
+-	guint16 msg_id = tvb_get_guint16(tvb, 2, ENC_NA);
+-	guint16 msg_len = tvb_get_guint16(tvb, 4, ENC_NA);
+-
+-	const gchar* message_str = val_to_str_const(msg_id, message_id_vals, "Unknown");
+-
+-	col_clear(pinfo->cinfo,COL_INFO);
+-	col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", message_str);
+-
+-	proto_item *msg_tree_ti = proto_tree_add_string_format(tree, hf_nfapi_message_tree,
+-															tvb, 0, msg_len,
+-															"", message_str);
+-
+-	proto_tree *msg_tree = proto_item_add_subtree(msg_tree_ti, ett_nfapi_message_tree);
+-
+-	guint offset = 0;
+-
+-
+-	switch (msg_id)
+-	{
+-		// HARQ.indication
+-		case 0x85:
+-		// CRC.indication
+-		case 0x86:
+-		// RX_ULSCH.indicatoin
+-		case 0x87:
+-		// RACH.indication
+-		case 0x88:
+-		// SRS.indication
+-		case 0x89:
+-		// RX_SR.indication
+-		case 0x8A:
+-		// RX_CQI.indication
+-		case 0x8B:
+-		{
+-			dissect_nfapi_ul_p7(tvb, pinfo, msg_tree, data);
+-		}
+-		break;
+-
+-		// DL_CONFIG.request
+-		case 0x80:
+-		{
+-			dissect_nfapi_dl_p7(tvb, pinfo, msg_tree, data);
+-			//dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			//proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			//dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-	
+-		// UL_CONFIG.request
+-		case 0x81:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-		}
+-		break;
+-		// HI_DCI0.request
+-		case 0x83:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-		}
+-		break;
+-		// TX.request
+-		case 0x84:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-		}
+-		break;
+-
+-		// LBT_DL_CONFIG.request
+-		case 0x8C:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-		}
++#define NFAPI_P7_HEADER_LENGTH 16
++
++static const unit_name_string khz_100_units_db = { " (100)khz", NULL };
++
++typedef enum{
++	NFAPI_DL_CONFIG_REQUEST_MSG_ID = 0x0080,
++	NFAPI_UL_CONFIG_REQUEST_MSG_ID,
++	NFAPI_SUBFRAME_INDICATION_MSG_ID,
++	NFAPI_HI_DCI0_REQUEST_MSG_ID,
++	NFAPI_TX_REQUEST_MSG_ID,
++	NFAPI_HARQ_INDICATION_MSG_ID,
++	NFAPI_CRC_INDICATION_MSG_ID,
++	NFAPI_RX_ULSCH_INDICATION_MSG_ID,
++	NFAPI_RACH_INDICATION_MSG_ID,
++	NFAPI_SRS_INDICATION_MSG_ID,
++	NFAPI_RX_SR_INDICATION_MSG_ID,
++	NFAPI_RX_CQI_INDICATION_MSG_ID,
++	NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID,
++	NFAPI_LBT_DL_INDICATION_MSG_ID,
++
++	NFAPI_PNF_PARAM_REQUEST_MSG_ID = 0x0100,
++	NFAPI_PNF_PARAM_RESPONSE_MSG_ID,
++	NFAPI_PNF_CONFIG_REQUEST_MSG_ID,
++	NFAPI_PNF_CONFIG_RESPONSE_MSG_ID,
++	NFAPI_PNF_START_REQUEST_MSG_ID,
++	NFAPI_PNF_START_RESPONSE_MSG_ID,
++	NFAPI_PNF_STOP_REQUEST_MSG_ID,
++	NFAPI_PNF_STOP_RESPONSE_MSG_ID,
++	NFAPI_PARAM_REQUEST_MSG_ID,
++	NFAPI_PARAM_RESPONSE_MSG_ID,
++	NFAPI_CONFIG_REQUEST_MSG_ID,
++	NFAPI_CONFIG_RESPONSE_MSG_ID,
++	NFAPI_START_REQUEST_MSG_ID,
++	NFAPI_START_RESPONSE_MSG_ID,
++	NFAPI_STOP_REQUEST_MSG_ID,
++	NFAPI_STOP_RESPONSE_MSG_ID,
++	NFAPI_MEASUREMENT_REQUEST_MSG_ID,
++	NFAPI_MEASUREMENT_RESPONSE_MSG_ID,
++
++	NFAPI_DL_NODE_SYNC_MSG_ID = 0x0180,
++	NFAPI_UL_NODE_SYNC_MSG_ID,
++	NFAPI_TIMING_INFO_MSG_ID,
++
++	NFAPI_RSSI_REQUEST_MSG_ID = 0x0200,
++	NFAPI_RSSI_RESPONSE_MSG_ID,
++	NFAPI_RSSI_INDICATION_MSG_ID,
++	NFAPI_CELL_SEARCH_REQUEST_MSG_ID,
++	NFAPI_CELL_SEARCH_RESPONSE_MSG_ID,
++	NFAPI_CELL_SEARCH_INDICATION_MSG_ID,
++	NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID,
++	NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID,
++	NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID,
++	NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID,
++	NFAPI_NMM_STOP_REQUEST_MSG_ID,
++	NFAPI_NMM_STOP_RESPONSE_MSG_ID,
++} nfapi_message_id_e;
++
++static const value_string nfapi_error_vals[] = {
++	{ 0x0, "MSG_OK" },
++	{ 0x1, "MSG_INVALID_STATE" },
++	{ 0x2, "MSG_INVALID_CONFIG" },
++	{ 0x3, "SFN_OUT_OF_SYNC" },
++	{ 0x4, "MSG_SUBFRAME_ERR" },
++	{ 0x5, "MSG_BCH_MISSING" },
++	{ 0x6, "MSG_BCH_MISSING" },
++	{ 0x7, "MSG_HI_ERR" },
++	{ 0x8, "MSG_TX_ERR" },
++	{ 0, NULL },
++};
++
++static const value_string nfapi_p4_error_vals[] = {
++	{ 100, "MSG_OK" },
++	{ 101, "MSG_INVALID_STATE" },
++	{ 102, "MSG_INVALID_CONFIG" },
++	{ 103, "MSG_RAT_NOT_SUPPORTED" },
++	{ 200, "MSG_NMM_STOP_OK" },
++	{ 201, "MSG_NMM_STOP_IGNORED" },
++	{ 202, "MSG_NMM_STOP_INVALID_STATE" },
++	{ 300, "MSG_PROCEDURE_COMPLETE" },
++	{ 301, "MSG_PROCEDURE_STOPPED" },
++	{ 302, "MSG_PARTIAL_RESULTS" },
++	{ 303, "MSG_TIMEOUT" },
++	{ 0, NULL },
++};
++
++static const value_string nfapi_rat_type_vals[] = {
++	{ 0, "LTE" },
++	{ 1, "UTRAN" },
++	{ 2, "GERAN" },
++	{ 0, NULL },
++};
++
++typedef enum{
++	UN_ALIGNED_SYNCHRONIZATION = 0,
++	INTERNAL_PNF_FRAME_ALIGNMENT,
++	ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION
++} nfapi_sync_mode_e;
++
++static const value_string nfapi_sync_mode_vals[] = {
++	{ UN_ALIGNED_SYNCHRONIZATION, "UN-ALIGNED SYNCHRONIZATION" },
++	{ INTERNAL_PNF_FRAME_ALIGNMENT, "INTERNAL PNF FRAME ALIGNMENT" },
++	{ ABSOLUTE_TIME_ALIGNED_SYNCHRONIZATION, "ABSOLUTE TIME ALIGNED SYNCHRONIZATION" },
++	{ 0, NULL },
++};
++
++typedef enum {
++	NONE = 0,
++	GPS,
++	GLONASS,
++	BEIDOU
++} location_mode_e;
++
++static const value_string location_mode_vals[] = {
++	{ NONE, "NONE" },
++	{ GPS, "GPS" },
++	{ GLONASS, "GLONASS" },
++	{ BEIDOU, "BeiDou" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_uplink_rs_hopping_vals[] = {
++	{ 0, "RS_NO_HOPPING" },
++	{ 1, "RS_GROUP_HOPPING" },
++	{ 2, "RS_SEQUENCE_HOPPING" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_laa_carrier_type_vals[] = {
++	{ 0, "No multi carrier support" },
++	{ 1, "Mode A1" },
++	{ 2, "Mode A12" },
++	{ 3, "Mode B1" },
++	{ 4, "Mode B2" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_mutli_carrier_lbt_support_vals[] = {
++	{ 0, "Multi carrier Mode A1" },
++	{ 1, "Multi carrier Mode A2" },
++	{ 2, "Multi carrier Mode B1" },
++	{ 3, "Multi carrier Mode B2" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_lbt_dl_req_pdu_type[] = {
++	{ 0, "LBT_PDSCH_REQ PDU" },
++	{ 1, "LBT_DRS_REQ PDU" },
++	{ 0, NULL }
++};
++
++
++static const value_string nfapi_lbt_dl_ind_pdu_type[] = {
++	{ 0, "LBT_PDSCH_RSP PDU" },
++	{ 1, "LBT_DRS_RSP PDU" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_phy_state_vals[] = {
++	{ 0, "IDLE" },
++	{ 1, "CONFIGURED" },
++	{ 2, "RUNNING" },
++	{ 0, NULL },
++};
++
++
++/* These are definitions where data 0 & 1 represent/provide a string name*/
++static const true_false_string  nfapi_csi_report_type_strname = {
++	"Periodic",
++	"Aperiodic",
++};
++
++static const true_false_string nfapi_control_type_string_name = {
++	"CQI/PMI",
++	"RI",
++};
++
++static const true_false_string cyclic_prefix_type_strname = {
++	"CP_NORMAL",
++	"CP_EXTENDED"
++};
++
++static const true_false_string support_strname = {
++	"No Support",
++	"Support"
++};
++
++static const true_false_string partial_sf_support_strname =
++{
++	"Start partial SF support",
++	"End partial SF support"
++};
++
++static const true_false_string phich_duration_strname = {
++	"PHICH_D_NORMAL",
++	"PHICH_D_EXTENDED"
++};
++
++static const true_false_string high_speed_flag_strname = {
++	"HS_UNRESTRICTED_SET",
++	"HS_RESTRICTED_SET"
++};
++
++static const true_false_string hopping_mode_strname = {
++	"HM_INTER_SF",
++	"HM_INTRA_INTER_SF"
++};
++
++static const true_false_string srs_simult_tx_strname = {
++	"No Simultaneous Transmission",
++	"Simultaneous Transmission"
++};
++
++static const true_false_string crc_flag_strname = {
++	"CRC_ERROR",
++	"CRC_CORRECT"
++};
++
++static const true_false_string hi_value_strname = {
++	"HI_ACK",
++	"HI_NACK"
++};
++
++static const true_false_string flag_tb2_strname = {
++	"HI_NOT_PRESENT",
++	"HI_PRESENT"
++};
++
++static const true_false_string nfapi_multi_carrier_tx_strname = {
++	"Mutual transmission (self-deferral support for current carrier)",
++	"Transmit on channel access win (no self-deferral)"
++};
++
++static const true_false_string nfapi_multi_carrier_freeze_strname = {
++	"Absence of other technology is not guaranteed",
++	"Absence of other technology is guaranteed"
++};
++
++static const true_false_string initial_partial_sf_strname = {
++	"Full SF",
++	"Partial SF"
++};
++
++static const true_false_string lbt_mode_strname = {
++	"Full LBT",
++	"Partial LBT"
++};
++
++static const true_false_string data_report_mode_vals = {
++	"Crc reported in CRC.indication",
++	"Crc reported in RX.indication"
++};
++
++static const true_false_string mcch_flag_string_name = {
++	"MCCH or SC-MCCH change notification field is not valid",
++	"MCCH or SC-MCCH change notification field is valid"
++};
++
++static const true_false_string cross_carrier_scheduling_flag_strname = {
++	"Carrier indicator field is not valid",
++	"Carrier indicator field is valid"
++};
++
++static const true_false_string srs_flag_strname = {
++	"SRS request field is not valid",
++	"SRS request field is valid"
++};
++static const true_false_string srs_request_strname = {
++	"SRS not requested",
++	"SRS requested"
++};
++
++static const true_false_string ul_dl_configuration_flag_strname = {
++	"UL/DL configuration field is not valid",
++	"UL/DL configuration field is valid"
++};
++
++static const true_false_string prs_cyclic_prefix_type_strname = {
++	"normal cyclic prefix",
++	"extended cyclic prefix"
++};
++
++static const true_false_string prs_muting_strname = {
++	"no muting",
++	"muting"
++};
++
++
++static const value_string nfapi_dl_config_pdu_type_vals[] = {
++	{ 0, "DL_CONFIG_DCI_DL_PDU" },
++	{ 1, "DL_CONFIG_BCH_PDU" },
++	{ 2, "DL_CONFIG_MCH_PDU" },
++	{ 3, "DL_CONFIG_DLSCH_PDU" },
++	{ 4, "DL_CONFIG_PCH_PDU" },
++	{ 5, "DL_CONFIG_PRS_PDU" },
++	{ 6, "DL_CONFIG_CSI_RS_PDU" },
++	{ 7, "DL_CONFIG_EPDCCH_DL_PDU" },
++	{ 8, "DL_CONFIG_EPDCCH_DL_PDU" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_duplex_mode_vals[] = {
++	{ 0, "TDD" },
++	{ 1, "FDD" },
++	{ 2, "HD-FDD" },
++	{ 0, NULL }
++};
++
++static const value_string modulation_vals[] = {
++	{ 2, "QPSK" },
++	{ 4, "16QAM" },
++	{ 6, "64QAM" },
++	{ 8, "256QAM" },
++	{ 0, NULL }
++};
++
++static const value_string pch_modulation_vals[] = {
++	{ 0, "QPSK" },
++	{ 0, NULL }
++};
++
++static const value_string ue_mode_vals[] = {
++	{ 0, "non LC/CE UE" },
++	{ 1, "LC/CE UE" },
++	{ 0, NULL }
++};
++
++static const value_string csi_rs_class_vals[] = {
++	{ 0, "not used" },
++	{ 1, "Class A" },
++	{ 1, "Class B" },
++	{ 0, NULL }
++};
++
++static const value_string csi_rs_cdm_type_vals[] = {
++	{ 0, "cdm 2" },
++	{ 1, "cdm 4" },
++	{ 0, NULL }
++};
++
++static const value_string antenna_ports_vals[] = {
++	{ 0, "1 antenna ports" },
++	{ 1, "2 antenna ports" },
++	{ 2, "4 antenna ports" },
++	{ 0, NULL }
++};
++
++static const value_string combs_vals[] = {
++	{ 0, "2 TC" },
++	{ 1, "4 TC" },
++	{ 0, NULL }
++};
++
++static const value_string resource_allocation_type_vals[] = {
++	{ 0, "type 0" },
++	{ 1, "type 1" },
++	{ 2, "type 2 1A/1B/1D" },
++	{ 3, "type 2 1C" },
++	{ 4, "type 2 6-1A" },
++	{ 5, "type UEModeB" },
++	{ 6, "NB index" },
++	{ 0, NULL }
++};
++
++static const value_string transmission_scheme_vals[] = {
++	{ 0, "SINGLE_ANTENNA_PORT_0" },
++	{ 1, "TX_DIVERSITY" },
++	{ 2, "LARGE_DELAY_CDD" },
++	{ 3, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
++	{ 4, "MULTI_USER_MIMO" },
++	{ 5, "CLOSED_LOOP_RANK_1_PRECODING" },
++	{ 6, "SINGLE_ANTENNA_PORT_5" },
++	{ 7, "SINGLE_ANTENNA_PORT_7" },
++	{ 8, "SINGLE_ANTENNA_PORT_8" },
++	{ 9, "DUAL_LAYER_TX_PORT_7_AND_8" },
++	{ 10, "UP_TO_8_LAYER_TX" },
++	{ 11, "SINGLE_ANTENNA_PORT_11" },
++	{ 12, "SINGLE_ANTENNA_PORT_13" },
++	{ 13, "DUAL_LAYER_TX_PORT_11_13" },
++	{ 0, NULL }
++};
++
++static const value_string ul_transmission_scheme_vals[] = {
++	{ 0, "SINGLE_ANTENNA_PORT_10" },
++	{ 1, "CLOSED_LOOP_SPATIAL_MULTIPLEXING" },
++	{ 0, NULL },
++};
++
++static const value_string dl_dci_format_vals[] = {
++	{ 0, "1" },
++	{ 1, "1A" },
++	{ 2, "1B" },
++	{ 3, "1C" },
++	{ 4, "1D" },
++	{ 5, "2" },
++	{ 6, "2A" },
++	{ 7, "2B" },
++	{ 8, "2C" },
++	{ 9, "2D" },
++	{ 10, "6-1A" },
++	{ 11, "6-1B" },
++	{ 12, "6-2" },
++	{ 0, NULL }
++};
++
++static const value_string ul_dci_format_vals[] = {
++	{ 0, "0" },
++	{ 1, "3" },
++	{ 2, "3A" },
++	{ 3, "4" },
++	{ 4, "5" },
++	{ 0, NULL }
++};
++
++static const value_string mpdcch_ul_dci_format_vals[] = {
++	{ 1, "3" },
++	{ 2, "3A" },
++	{ 4, "6-0A" },
++	{ 5, "6-0B" },
++	{ 0, NULL }
++};
++
++
++static const value_string pa_vals[] = {
++	{ 0, "-6dB" },
++	{ 1, "-4.77dB" },
++	{ 2, "-3dB" },
++	{ 3, "-1.77dB" },
++	{ 4, "0dB" },
++	{ 5, "1dB" },
++	{ 6, "2dB" },
++	{ 7, "3dB" },
++	{ 0, NULL }
++};
++
++static const value_string transmission_mode_vals[] = {
++	{ 1, "Mode 1" },
++	{ 2, "Mode 2" },
++	{ 3, "Mode 3" },
++	{ 4, "Mode 4" },
++	{ 5, "Mode 5" },
++	{ 6, "Mode 6" },
++	{ 7, "Mode 7" },
++	{ 8, "Mode 8" },
++	{ 9, "Mode 9" },
++	{ 10, "Mode 10" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_ul_config_pdu_type_vals[] = {
++	{ 0, "ULSCH" },
++	{ 1, "ULSCH_CQI_RI" },
++	{ 2, "ULSCH_HARQ" },
++	{ 3, "ULSCH_CQI_HARQ_RI" },
++	{ 4, "UCI_CQI" },
++	{ 5, "UCI_SR" },
++	{ 6, "UCI_HARQ" },
++	{ 7, "UCI_SR_HARQ" },
++	{ 8, "UCI_CQI_HARQ" },
++	{ 9, "UCI_CQI_SR" },
++	{ 10, "UCI_CQI_SR_HARQ" },
++	{ 11, "SRS" },
++	{ 12, "HARQ_BUFFER" },
++	{ 13, "ULSCH_UCI_CSI" },
++	{ 14, "ULSCH_UCI_HARQ" },
++	{ 15, "ULSCH_CSI_UCI_HARQ" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_tdd_ack_nack_mode_vals[] = {
++	{ 0, "Bundling" },
++	{ 1, "Multiplexing" },
++	{ 2, "Format 1b with channel selection" },
++	{ 3, "Format 3" },
++	{ 4, "Format 4" },
++	{ 5, "Format 5" },
++	{ 0, NULL }
++};
++static const value_string nfapi_fdd_ack_nack_mode_vals[] = {
++	{ 0, "Format 1a/1b" },
++	{ 1, "Channel selection" },
++	{ 2, "Format 3" },
++	{ 3, "Format 4" },
++	{ 4, "Format 5" },
++	{ 0, NULL }
++};
++
++static const value_string nfapi_phich_resource_vals[] = {
++	{ 0, "PHICH_R_ONE_SIXTH " },
++	{ 1, "PHICH_R_HALF" },
++	{ 2, "PHICH_R_ONE" },
++	{ 3, "PHICH_R_TWO" },
++	{ 0, NULL }
++};
++
++static const value_string local_distributed_vals[] = {
++	{ 0, "localized" },
++	{ 1, "distributed" },
++	{ 0, NULL }
++};
++
++static const value_string transport_block_to_codeword_swap_flag_vals[] = {
++	{ 0, "no swapping" },
++	{ 1, "swapped" },
++	{ 0, NULL }
++};
++
++static const value_string ngap_vals[] = {
++	{ 0, "Ngap1" },
++	{ 1, "Ngap2" },
++	{ 0, NULL }
++};
++
++static const value_string pmi_vals[] = {
++	{ 0, "Use precoding indicated in TPMI field" },
++	{ 1, "Use precoding indicated in last PMI report on PUSCH" },
++	{ 2, "use precoding indicated in TPM field" },
++	{ 0, NULL }
++};
++
++static const value_string true_false_vals[] = {
++	{ 0, "false" },
++	{ 1, "true" },
++	{ 0, NULL }
++};
++
++static const value_string exhustive_search_vals[] = {
++	{ 0, "non-exhaustive search" },
++	{ 1, "exhaustive search" },
++	{ 0, NULL }
++};
++
++static const value_string not_used_enabled_vals[] = {
++	{ 0, "not used" },
++	{ 1, "enabled" },
++	{ 0, NULL }
++};
++
++static const value_string hopping_vals[] = {
++	{ 0, "no hopping" },
++	{ 1, "hopping enabled" },
++	{ 0, NULL }
++};
++
++
++static const value_string mpdcch_rnti_type_vals[] = {
++	{ 1, "Temporary C-RNTI" },
++	{ 2, "RA-RNTI" },
++	{ 3, "P-RNTI" },
++	{ 4, "other" },
++	{ 0, NULL }
++};
++
++static const value_string rnti_type_vals[] = {
++	{ 1, "C-RNTI" },
++	{ 2, "RA-RNTI, P-RNTI, SI-RNTI, SC-RNTI, G-RNTI" },
++	{ 3, "SPS-CRNTI" },
++	{ 0, NULL }
++};
++
++static const value_string primary_cells_type_vals[] = {
++	{ 1, "TDD" },
++	{ 2, "FDD" },
++	{ 3, "HD_FDD" },
++	{ 0, NULL }
++};
++
++static const value_string ul_rssi_supported_vals[] = {
++	{ 0, "Uplink RSSI not supported" },
++	{ 1, "Uplink RSSI supported" },
++	{ 0, NULL }
++};
++
++static const value_string nprb_vals[] = {
++	{ 0, "2" },
++	{ 1, "3" },
++	{ 0, NULL }
++};
++
++static const value_string nmm_modes_supported_vals[] =
++{
++	{ 0, "NONE" },
++	{ 1, "NMM_ONLY" },
++	{ 2, "NMM_IN_CONFIGURED_STATE" },
++	{ 3, "NMM_IN_RUNNING_STATE" },
++	{ 4, "NMM_IN_CONFIGURED_AND_RUNNING_STATE" },
++	{ 0, NULL }
++};
++
++static const value_string dlsch_re13_ue_type_vals[] = {
++	{ 0, "non LC/CE UE" },
++	{ 1, "LC/CE CEModeA UE" },
++	{ 2, "LC/CE CEModeB UE" },
++	{ 0, NULL }
++};
++
++static const value_string dlsch_re13_pdsch_payload_type_vals[] = {
++	{ 0, "PDSCH carrying SIB1-BR " },
++	{ 1, "PDSCH carrying SI message (except for SIB1-BR or PCH)" },
++	{ 2, "PDSCH carrying other" },
++	{ 0, NULL }
++};
++
++static const value_string csi_rs_flags_strname[] = {
++	{ 0, "CSI - RS parameters are not valid" },
++	{ 1, "CSI - RS parameters are valid" },
++	{ 0, NULL}
++};
++
++
++static const value_string paging_direct_indication_differtiation_flag_vals[] = {
++	{ 0, "Direct Information" },
++	{ 1, "Paging" },
++	{ 0, NULL }
++};
++
++static const value_string ul_tx_mode_vals[] = {
++	{ 0, "SISO/MIMO" },
++	{ 1, "MIMO" },
++	{ 0, NULL }
++};
++
++static const value_string n_srs_vals[] = {
++	{ 0, "No overlap" },
++	{ 1, "Overlap" },
++	{ 0, NULL }
++};
++
++static const value_string n_srs_initial_vals[] = {
++	{ 0, "Last OFDM symbol is not punctured" },
++	{ 1, "Last OFDM symbol is punctured." },
++	{ 0, NULL }
++};
++
++
++static const value_string csi_mode_vals[] = {
++	{ 0, "PUCCH format 2/2a/2b/3" },
++	{ 1, "PUCCH format 4" },
++	{ 2, "PUCCH format 5" },
++	{ 0, NULL }
++};
++
++static const value_string hi_dci0_pdu_type_vals[] = {
++	{ 0, "HI" },
++	{ 1, "DCI UL" },
++	{ 2, "EDPCCH DCI UL" },
++	{ 3, "MDPCCH DCI UL" },
++	{ 0, NULL }
++};
++
++static const value_string ue_tx_antenna_selection_vals[] = {
++	{ 0, "Not Configured" },
++	{ 1, "Configured and using UE port 0" },
++	{ 2, "Configured and using UE port 1" },
++	{ 0, NULL }
++};
++
++static const value_string size_of_cqi_csi_feild_vals[] = {
++	{ 0, "1 bit" },
++	{ 1, "2 bits" },
++	{ 2, "3 bits" },
++	{ 0, NULL }
++};
++
++static const value_string number_of_antenna_port_vals[] = {
++	{ 0, "1 antenna port" },
++	{ 1, "2 antenna ports" },
++	{ 2, "4 antenna ports" },
++	{ 0, NULL }
++};
++
++static const value_string ce_mode_vals[] = {
++	{ 1, "CEModeA" },
++	{ 2, "CEModeB" },
++	{ 0, NULL }
++};
++
++
++static const value_string csi_request_vals[] = {
++	{ 0, "Aperiodic CSI not requested" },
++	{ 1, "Aperiodic CSI requested" },
++	{ 0, NULL }
++};
++
++static const value_string tdd_harq_mode_vals[] = {
++	{ 0, "Format 1a/1b BUNDLING" },
++	{ 1, "Format 1a/1b MULTIPLEXING" },
++	{ 2, "Format 1a/1b  SPECIAL BUNDLING" },
++	{ 3, "Channel Selection" },
++	{ 4, "Format 3" },
++	{ 5, "Format 4" },
++	{ 6, "Format 5" },
++	{ 0, NULL }
++};
++
++static const value_string fdd_harq_mode_vals[] = {
++	{ 0, "Format 1a/1b" },
++	{ 1, "Channel Selection" },
++	{ 2, "Format 3" },
++	{ 3, "Format 4" },
++	{ 4, "Format 5" },
++	{ 0, NULL }
++};
++
++static const value_string harq_value_vals[] = {
++	{ 1, "ACK" },
++	{ 2, "NACK" },
++	{ 3, "ACK or NACK" },
++	{ 4, "DTX" },
++	{ 5, "ACK or DTX" },
++	{ 6, "NACK or DTX" },
++	{ 7, "ACK or NACK or DTX" },
++	{ 0, NULL }
++};
++
++
++static const value_string harq_special_value_vals[] = {
++	{ 0, "0 or None" },
++	{ 1, "1 or 4 or 7 ACKs reported" },
++	{ 2, "2 or 5 or 8 ACKs reported" },
++	{ 3, "3 or 6 or 9 ACKs reported" },
++	{ 4, "DTX (UE did not transmit anything)" },
++	{ 0, NULL }
++};
++
++static const value_string channel_vals[] = {
++	{ 0, "PUCCH" },
++	{ 1, "PUSCH" },
++	{ 0, NULL }
++};
++
++static const value_string rach_resource_type_vals[] = {
++	{ 0, "Non LC / CE RACH" },
++	{ 1, "LC / CE RACH CE level 0" },
++	{ 2, "LC / CE RACH CE level 1" },
++	{ 3, "LC / CE RACH CE level 2" },
++	{ 4, "LC / CE RACH CE level 3" },
++	{ 0, NULL }
++};
++
++static const value_string up_pts_symbol_vals[] = {
++	{ 0, "Symbol 0" },
++	{ 1, "Symbol 1" },
++	{ 0, NULL }
++};
++
++static const value_string arfcn_direction_vals[] = {
++	{ 0, "DL" },
++	{ 1, "UL" },
++	{ 0, NULL }
++};
++
++static int proto_nfapi = -1;
++
++/* These are for the subtrees */
++static gint ett_nfapi_message_tree = -1;
++static gint ett_nfapi_p4_p5_message_header = -1;
++static gint ett_nfapi_p7_message_header = -1;
++static gint ett_nfapi_tlv_tree = -1;
++static gint ett_nfapi_tl = -1;
++static gint ett_nfapi_pnf_phy = -1;
++static gint ett_nfapi_pnf_phy_rel10 = -1;
++static gint ett_nfapi_pnf_phy_rel11 = -1;
++static gint ett_nfapi_pnf_phy_rel12 = -1;
++static gint ett_nfapi_pnf_phy_rel13 = -1;
++static gint ett_nfapi_pnf_phy_rf_config = -1;
++static gint ett_nfapi_rf_bands = -1;
++static gint ett_nfapi_tx_antenna_ports = -1;
++static gint ett_nfapi_harq_ack_nack_data = -1;
++static gint ett_nfapi_harq_data = -1;
++static gint ett_nfapi_cqi_pmi_size = -1;
++static gint ett_nfapi_cc = -1;
++static gint ett_nfapi_rbs = -1;
++static gint ett_nfapi_antennas = -1;
++static gint ett_nfapi_dl_config_request_pdu_list = -1;
++static gint ett_nfapi_ul_config_request_pdu_list = -1;
++static gint ett_nfapi_hi_dci0_request_pdu_list = -1;
++static gint ett_nfapi_tx_request_pdu_list = -1;
++static gint ett_nfapi_rx_indication_pdu_list = -1;
++static gint ett_nfapi_harq_indication_pdu_list = -1;
++static gint ett_nfapi_crc_indication_pdu_list = -1;
++static gint ett_nfapi_sr_indication_pdu_list = -1;
++static gint ett_nfapi_cqi_indication_pdu_list = -1;
++static gint ett_nfapi_preamble_indication_pdu_list = -1;
++static gint ett_nfapi_srs_indication_pdu_list = -1;
++static gint ett_nfapi_lbt_dl_config_pdu_list = -1;
++static gint ett_nfapi_lbt_dl_indication_pdu_list = -1;
++static gint ett_nfapi_subbands = -1;
++static gint ett_nfapi_bf_vector_antennas = -1;
++static gint ett_nfapi_bf_vectors = -1;
++static gint ett_nfapi_csi_rs_resource_configs = -1;
++static gint ett_nfapi_csi_rs_bf_vector = -1;
++static gint ett_nfapi_epdcch_prbs = -1;
++static gint ett_nfapi_precoding = -1;
++static gint ett_nfapi_earfcn_list = -1;
++static gint ett_nfapi_uarfcn_list = -1;
++static gint ett_nfapi_arfcn_list = -1;
++static gint ett_nfapi_rssi_list = -1;
++static gint ett_nfapi_pci_list = -1;
++static gint ett_nfapi_psc_list = -1;
++static gint ett_nfapi_lte_cells_found_list = -1;
++static gint ett_nfapi_utran_cells_found_list = -1;
++static gint ett_nfapi_geran_cells_found_list = -1;
++static gint ett_nfapi_si_periodicity_list = -1;
++static gint ett_nfapi_downlink_bandwidth_support = -1;
++static gint ett_nfapi_uplink_bandwidth_support = -1;
++static gint ett_nfapi_downlink_modulation_support = -1;
++static gint ett_nfapi_uplink_modulation_support = -1;
++static gint ett_nfapi_received_interference_power_mesurement_results = -1;
++static gint ett_nfapi_release_support = -1;
++static expert_field ei_invalid_range = EI_INIT;
++static expert_field ei_invalid_tlv_length = EI_INIT;
++
++static int hf_nfapi_p4_p5_message_header_phy_id = -1;
++static int hf_nfapi_p4_p5_message_header_message_id = -1;
++static int hf_nfapi_p4_p5_message_header_message_length = -1;
++static int hf_nfapi_p4_p5_message_header_spare = -1;
++static int hf_nfapi_p7_message_header_phy_id = -1;
++static int hf_nfapi_p7_message_header_message_id = -1;
++static int hf_nfapi_p7_message_header_message_length = -1;
++static int hf_nfapi_p7_message_header_m = -1;
++static int hf_nfapi_p7_message_header_segment = -1;
++static int hf_nfapi_p7_message_header_sequence_number = -1;
++static int hf_nfapi_p7_message_header_checksum = -1;
++static int hf_nfapi_p7_message_header_transmit_timestamp = -1;
++static int hf_nfapi_tl_tag = -1;
++static int hf_nfapi_tl_length = -1;
++static int hf_nfapi_sync_mode = -1;
++static int hf_nfapi_location_mode = -1;
++static int hf_nfapi_location_coordinates = -1;
++static int hf_nfapi_location_coordinates_length = -1;
++static int hf_nfapi_dl_config_timing = -1;
++static int hf_nfapi_tx_timing = -1;
++static int hf_nfapi_ul_config_timing = -1;
++static int hf_nfapi_hi_dci0_timing = -1;
++static int hf_nfapi_maximum_number_phys = -1;
++static int hf_nfapi_maximum_total_bandwidth = -1;
++static int hf_nfapi_maximum_total_number_dl_layers = -1;
++static int hf_nfapi_maximum_total_number_ul_layers = -1;
++static int hf_nfapi_shared_bands = -1;
++static int hf_nfapi_shared_pa = -1;
++static int hf_nfapi_maximum_total_power = -1;
++static int hf_nfapi_oui = -1;
++static int hf_nfapi_pdu = -1;
++static int hf_nfapi_pnf_phy_number_phy = -1;
++static int hf_nfapi_pnf_phy_config_index = -1;
++static int hf_nfapi_number_of_rf_exclusions = -1;
++static int hf_nfapi_dl_bandwidth_support = -1;
++static int hf_nfapi_dl_bandwidth_support_6 = -1;
++static int hf_nfapi_dl_bandwidth_support_15 = -1;
++static int hf_nfapi_dl_bandwidth_support_25 = -1;
++static int hf_nfapi_dl_bandwidth_support_50 = -1;
++static int hf_nfapi_dl_bandwidth_support_75 = -1;
++static int hf_nfapi_dl_bandwidth_support_100 = -1;
++static int hf_nfapi_ul_bandwidth_support = -1;
++static int hf_nfapi_ul_bandwidth_support_6 = -1;
++static int hf_nfapi_ul_bandwidth_support_15= -1;
++static int hf_nfapi_ul_bandwidth_support_25 = -1;
++static int hf_nfapi_ul_bandwidth_support_50 = -1;
++static int hf_nfapi_ul_bandwidth_support_75 = -1;
++static int hf_nfapi_ul_bandwidth_support_100 = -1;
++static int hf_nfapi_downlink_channel_bandwidth_supported = -1;
++static int hf_nfapi_uplink_channel_bandwidth_supported = -1;
++static int hf_nfapi_number_of_dl_layers_supported = -1;
++static int hf_nfapi_number_of_ul_layers_supported = -1;
++static int hf_nfapi_maximum_3gpp_release_supported = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel8 = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel9 = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel10 = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel11 = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel12 = -1;
++static int hf_nfapi_maximum_3gpp_release_supported_rel13 = -1;
++static int hf_nfapi_nmm_modes_supported = -1;
++static int hf_nfapi_number_of_rfs = -1;
++static int hf_nfapi_rf_config_index = -1;
++static int hf_nfapi_band = -1;
++static int hf_nfapi_maximum_transmit_power = -1;
++static int hf_nfapi_maximum_transmit_power_2 = -1;
++static int hf_nfapi_earfcn = -1;
++static int hf_nfapi_minimum_transmit_power = -1;
++static int hf_nfapi_number_of_antennas_suppported = -1;
++static int hf_nfapi_minimum_downlink_frequency = -1;
++static int hf_nfapi_maximum_downlink_frequency = -1;
++static int hf_nfapi_minimum_uplink_frequency = -1;
++static int hf_nfapi_maximum_uplink_frequency = -1;
++static int hf_nfapi_number_of_rf_bands = -1;
++static int hf_nfapi_nmm_uplink_rssi_supported = -1;
++static int hf_nfapi_phy_rf_config_info_phy_id = -1;
++static int hf_nfapi_transmission_mode7_supported = -1;
++static int hi_nfapi_transmission_mode8_supported = -1;
++static int hi_nfapi_two_antennas_ports_for_pucch = -1;
++static int hi_nfapi_transmission_mode_9_supported = -1;
++static int hi_nfapi_simultaneous_pucch_pusch = -1;
++static int hi_nfapi_four_layer_tx_with_tm3_and_tm4 = -1;
++static int hf_nfapi_epdcch_supported = -1;
++static int hi_nfapi_multi_ack_csi_reporting = -1;
++static int hi_nfapi_pucch_tx_diversity_with_channel_selection = -1;
++static int hi_nfapi_ul_comp_supported = -1;
++static int hi_nfapi_transmission_mode_5_supported = -1;
++static int hf_nfapi_csi_subframe_set = -1;
++static int hi_nfapi_enhanced_4tx_codebook = -1;
++static int hi_nfapi_drs_supported = -1;
++static int hi_nfapi_ul_64qam_supported = -1;
++static int hi_nfapi_transmission_mode_10_supported = -1;
++static int hi_nfapi_alternative_tbs_indices = -1;
++static int hf_nfapi_pucch_format_4_supported = -1;
++static int hf_nfapi_pucch_format_5_supported = -1;
++static int hf_nfapi_more_than_5_ca_supported = -1;
++static int hf_nfapi_laa_supported = -1;
++static int hf_nfapi_laa_ending_in_dwpts_supported = -1;
++static int hf_nfapi_laa_starting_in_second_slot_supported = -1;
++static int hf_nfapi_beamforming_supported = -1;
++static int hf_nfapi_csi_rs_enhancements_supported = -1;
++static int hf_nfapi_drms_enhancements_supported = -1;
++static int hf_nfapi_srs_enhancements_supported = -1;
++static int hf_nfapi_dl_rs_tx_power = -1;
++static int hf_nfapi_received_interference_power = -1;
++static int hf_nfapi_thermal_noise_power = -1;
++static int hf_nfapi_dl_rs_tx_power_measurement = -1;
++static int hf_nfapi_received_interference_power_measurement = -1;
++static int hf_nfapi_thermal_noise_power_measurement = -1;
++
++// P5 Message Structures
++static int hf_nfapi_error_code = -1;
++static int hf_nfapi_p4_error_code = -1;
++static int hf_nfapi_rat_type = -1;
++static int hf_nfapi_num_tlv = -1;
++static int hf_nfapi_phy_state = -1;
++static int hf_nfapi_phy_antenna_capability = -1;
++static int hf_nfapi_release_capability = -1;
++static int hf_nfapi_mbsfn_capability = -1;
++static int hf_nfapi_laa_capability = -1;
++static int hf_nfapi_pd_sensing_lbt_support = -1;
++static int hf_nfapi_multi_carrier_lbt_support = -1;
++static int hf_nfapi_partial_sf_support = -1;
++
++static int hf_nfapi_pnf_address_ipv4 = -1;
++static int hf_nfapi_pnf_address_ipv6 = -1;
++static int hf_nfapi_vnf_address_ipv4 = -1;
++static int hf_nfapi_vnf_address_ipv6 = -1;
++static int hf_nfapi_pnf_port = -1;
++static int hf_nfapi_vnf_port = -1;
++static int hf_nfapi_dl_ue_per_sf = -1;
++static int hf_nfapi_ul_ue_per_sf = -1;
++static int hf_nfapi_timing_window = -1;
++static int hf_nfapi_timing_info_mode = -1;
++static int hf_nfapi_timing_info_period = -1;
++static int hf_nfapi_duplex_mode = -1;
++static int hf_nfapi_pcfich_power_offset = -1;
++static int hf_nfapi_pb = -1;
++static int hf_nfapi_dl_cyclic_prefix_type = -1;
++static int hf_nfapi_ul_cyclic_prefix_type = -1;
++static int hf_nfapi_tx_antenna_ports = -1;
++static int hf_nfapi_rx_antenna_ports = -1;
++static int hf_nfapi_downlink_channel_bandwidth = -1;
++static int hf_nfapi_uplink_channel_bandwidth = -1;
++static int hf_nfapi_reference_signal_power = -1;
++static int hf_nfapi_phich_resource = -1;
++static int hf_nfapi_phich_duration = -1;
++static int hf_nfapi_phich_power_offset = -1;
++static int hf_nfapi_primary_synchronization_signal_epre_eprers = -1;
++static int hf_nfapi_secondary_synchronization_signal_epre_eprers = -1;
++static int hf_nfapi_physical_cell_id = -1;
++static int hf_nfapi_configuration_index = -1;
++static int hf_nfapi_root_sequence_index = -1;
++static int hf_nfapi_zero_correlation_zone_configuration = -1;
++static int hf_nfapi_high_speed_flag = -1;
++static int hf_nfapi_frequency_offset = -1;
++static int hf_nfapi_hopping_mode = -1;
++static int hf_nfapi_hopping_offset = -1;
++static int hf_nfapi_delta_pucch_shift = -1;
++static int hf_nfapi_n_cqi_rb = -1;
++static int hf_nfapi_n_an_cs = -1;
++static int hf_nfapi_n1_pucch_an = -1;
++static int hf_nfapi_bandwidth_configuration = -1;
++static int hf_nfapi_max_up_pts = -1;
++static int hf_nfapi_srs_subframe_configuration = -1;
++static int hf_nfapi_srs_acknack_srs_simultaneous_transmission = -1;
++static int hf_nfapi_uplink_rs_hopping = -1;
++static int hf_nfapi_group_assignment = -1;
++static int hf_nfapi_cyclic_shift_1_for_drms = -1;
++static int hf_nfapi_subframe_assignment = -1;
++static int hf_nfapi_special_subframe_patterns = -1;
++static int hf_nfapi_ed_threshold_for_lbt_for_pdsch = -1;
++static int hf_nfapi_ed_threshold_for_lbt_for_drs = -1;
++static int hf_nfapi_pd_threshold = -1;
++static int hf_nfapi_multi_carrier_type = -1;
++static int hf_nfapi_multi_carrier_tx = -1;
++static int hf_nfapi_multi_carrier_freeze = -1;
++static int hf_nfapi_tx_antenna_ports_for_drs = -1;
++static int hf_nfapi_transmission_power_for_drs = -1;
++static int hf_nfapi_pbch_repetitions_enabled_r13 = -1;
++static int hf_nfapi_prach_cat_m_root_sequence_index = -1;
++static int hf_nfapi_prach_cat_m_zero_correlation_zone_configuration = -1;
++static int hf_nfapi_prach_cat_m_high_speed_flag = -1;
++static int hf_nfapi_prach_ce_level_0_enable = -1;
++static int hf_nfapi_prach_ce_level_0_configuration_index = -1;
++static int hf_nfapi_prach_ce_level_0_frequency_offset = -1;
++static int hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt = -1;
++static int hf_nfapi_prach_ce_level_0_starting_subframe_periodicity = -1;
++static int hf_nfapi_prach_ce_level_0_hopping_enabled = -1;
++static int hf_nfapi_prach_ce_level_0_hopping_offset = -1;
++static int hf_nfapi_prach_ce_level_1_enable = -1;
++static int hf_nfapi_prach_ce_level_1_configuration_index = -1;
++static int hf_nfapi_prach_ce_level_1_frequency_offset = -1;
++static int hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt = -1;
++static int hf_nfapi_prach_ce_level_1_starting_subframe_periodicity = -1;
++static int hf_nfapi_prach_ce_level_1_hopping_enabled = -1;
++static int hf_nfapi_prach_ce_level_1_hopping_offset = -1;
++static int hf_nfapi_prach_ce_level_2_enable = -1;
++static int hf_nfapi_prach_ce_level_2_configuration_index = -1;
++static int hf_nfapi_prach_ce_level_2_frequency_offset = -1;
++static int hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt = -1;
++static int hf_nfapi_prach_ce_level_2_starting_subframe_periodicity = -1;
++static int hf_nfapi_prach_ce_level_2_hopping_enabled = -1;
++static int hf_nfapi_prach_ce_level_2_hopping_offset = -1;
++static int hf_nfapi_prach_ce_level_3_enable = -1;
++static int hf_nfapi_prach_ce_level_3_configuration_index = -1;
++static int hf_nfapi_prach_ce_level_3_frequency_offset = -1;
++static int hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt = -1;
++static int hf_nfapi_prach_ce_level_3_starting_subframe_periodicity = -1;
++static int hf_nfapi_prach_ce_level_3_hopping_enabled = -1;
++static int hf_nfapi_prach_ce_level_3_hopping_offset = -1;
++static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b = -1;
++static int hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a = -1;
++static int hf_nfapi_dl_modulation_support = -1;
++static int hf_nfapi_dl_modulation_support_qpsk = -1;
++static int hf_nfapi_dl_modulation_support_16qam = -1;
++static int hf_nfapi_dl_modulation_support_64qam = -1;
++static int hf_nfapi_dl_modulation_support_256qam = -1;
++static int hf_nfapi_ul_modulation_support = -1;
++static int hf_nfapi_ul_modulation_support_qpsk = -1;
++static int hf_nfapi_ul_modulation_support_16qam = -1;
++static int hf_nfapi_ul_modulation_support_64qam = -1;
++static int hf_nfapi_data_report_mode = -1;
++static int hf_nfapi_sfnsf = -1;
++
++// P7 Sub Structures
++static int hf_nfapi_dl_dci_format = -1;
++static int hf_nfapi_ul_dci_format = -1;
++static int hf_nfapi_mpdcch_ul_dci_format = -1;
++static int hf_nfapi_cce_idx = -1;
++static int hf_nfapi_aggregation_level = -1;
++static int hf_nfapi_mcs_1 = -1;
++static int hf_nfapi_redundancy_version_1 = -1;
++static int hf_nfapi_new_data_indicator_1 = -1;
++static int hf_nfapi_mcs_2 = -1;
++static int hf_nfapi_redundancy_version_2 = -1;
++static int hf_nfapi_new_data_indicator_2 = -1;
++static int hf_nfapi_harq_process = -1;
++static int hf_nfapi_tpmi = -1;
++static int hf_nfapi_pmi = -1;
++static int hf_nfapi_precoding_information = -1;
++static int hf_nfapi_tpc = -1;
++static int hf_nfapi_downlink_assignment_index = -1;
++static int hf_nfapi_transport_block_size_index = -1;
++static int hf_nfapi_downlink_power_offset = -1;
++static int hf_nfapi_allocate_prach_flag = -1;
++static int hf_nfapi_preamble_index = -1;
++static int hf_nfapi_prach_mask_index = -1;
++static int hf_nfapi_rnti_type = -1;
++static int hf_nfapi_mpdcch_rnti_type = -1;
++static int hf_nfapi_mcch_flag = -1;
++static int hf_nfapi_mcch_change_notification = -1;
++static int hf_nfapi_scrambling_identity = -1;
++static int hf_nfapi_cross_carrier_scheduling_flag = -1;
++static int hf_nfapi_carrier_indicator = -1;
++static int hf_nfapi_srs_flag = -1;
++static int hf_nfapi_srs_request = -1;
++static int hf_nfapi_antenna_ports_scrambling_and_layers = -1;
++static int hf_nfapi_total_dci_length_including_padding = -1;
++static int hf_nfapi_harq_ack_resource_offset = -1;
++static int hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator = -1;
++static int hf_nfapi_primary_cell_type = -1;
++static int hf_nfapi_ul_dl_configuration_flag = -1;
++static int hf_nfapi_number_of_ul_dl_configurations = -1;
++static int hf_nfapi_ul_dl_configuration_index = -1;
++static int hf_nfapi_laa_end_partial_sf_flag = -1;
++static int hf_nfapi_laa_end_partial_sf_configuration = -1;
++static int hf_nfapi_initial_lbt_sf = -1;
++static int hf_nfapi_codebooksize_determination_r13 = -1;
++static int hf_nfapi_rel13_drms_table_flag = -1;
++static int hf_nfapi_csi_rs_resource_config = -1;
++static int hf_nfapi_csi_rs_number_of_nzp_configurations = -1;
++static int hf_nfapi_pdsch_start = -1;
++static int hf_nfapi_drms_config_flag = -1;
++static int hf_nfapi_drms_scrambling = -1;
++static int hf_nfapi_csi_config_flag = -1;
++static int hf_nfapi_csi_scrambling = -1;
++static int hf_nfapi_pdsch_re_mapping_flag = -1;
++static int hf_nfapi_pdsch_re_mapping_antenna_ports = -1;
++static int hf_nfapi_pdsch_re_mapping_freq_shift = -1;
++static int hf_nfapi_alt_cqi_table_r12 = -1;
++static int hf_nfapi_max_layers = -1;
++static int hf_nfapi_n_dl_harq = -1;
++static int hf_nfapi_dwpts_symbols = -1;
++static int hf_nfapi_ue_type = -1;
++static int hf_nfapi_pdsch_payload_type = -1;
++static int hf_nfapi_initial_transmission_sf = -1;
++static int hf_nfapi_req13_drms_table_flag = -1;
++static int hf_nfapi_prnti = -1;
++static int hf_nfapi_mcs = -1;
++static int hf_nfapi_number_of_transport_blocks = -1;
++static int hf_nfapi_ue_mode = -1;
++static int hf_prs_bandwidth = -1;
++static int hf_prs_cyclic_prefix_type = -1;
++static int hf_prs_muting = -1;
++static int hf_nfapi_csi_rs_resource_index = -1;
++static int hf_nfapi_csi_rs_class = -1;
++static int hf_nfapi_cdm_type = -1;
++static int hf_nfapi_edpcch_prb_index = -1;
++static int hf_nfapi_epdcch_resource_assignment_flag = -1;
++static int hf_nfapi_epdcch_id = -1;
++static int hf_nfapi_epdcch_start_symbol = -1;
++static int hf_nfapi_epdcch_num_prb = -1;
++static int hf_nfapi_precoding_value = -1;
++static int hf_nfapi_mpdcch_narrowband = -1;
++static int hf_nfapi_number_of_prb_pairs = -1;
++static int hf_nfapi_resource_block_assignment = -1;
++static int hf_nfapi_start_symbol = -1;
++static int hf_nfapi_ecce_index = -1;
++static int hf_nfapi_ce_mode = -1;
++static int hf_nfapi_drms_scrabmling_init = -1;
++static int hf_nfapi_pdsch_reception_levels = -1;
++static int hf_nfapi_new_data_indicator = -1;
++static int hf_nfapi_tpmi_length = -1;
++static int hf_nfapi_pmi_flag = -1;
++static int hf_nfapi_harq_resource_offset = -1;
++static int hf_nfapi_dci_subframe_repetition_number = -1;
++static int hf_nfapi_downlink_assignment_index_length = -1;
++static int hf_nfapi_starting_ce_level = -1;
++static int hf_nfapi_antenna_ports_and_scrambling_identity_flag = -1;
++static int hf_nfapi_antenna_ports_and_scrambling_identity = -1;
++static int hf_nfapi_paging_direct_indication_differentiation_flag = -1;
++static int hf_nfapi_direct_indication = -1;
++static int hf_nfapi_number_of_tx_antenna_ports = -1;
++
++// P7 Message Structures
++static int hf_nfapi_dl_node_sync_t1 = -1;
++static int hf_nfapi_dl_node_sync_delta_sfn_sf = -1;
++static int hf_nfapi_ul_node_sync_t1 = -1;
++static int hf_nfapi_ul_node_sync_t2 = -1;
++static int hf_nfapi_ul_node_sync_t3 = -1;
++static int hf_nfapi_timing_info_last_sfn_sf = -1;
++static int hf_nfapi_timing_info_time_since_last_timing_info = -1;
++static int hf_nfapi_timing_info_dl_config_jitter = -1;
++static int hf_nfapi_timing_info_tx_request_jitter = -1;
++static int hf_nfapi_timing_info_ul_config_jitter = -1;
++static int hf_nfapi_timing_info_hi_dci0_jitter = -1;
++static int hf_nfapi_timing_info_dl_config_latest_delay = -1;
++static int hf_nfapi_timing_info_tx_request_latest_delay = -1;
++static int hf_nfapi_timing_info_ul_config_latest_delay = -1;
++static int hf_nfapi_timing_info_hi_dci0_latest_delay = -1;
++static int hf_nfapi_timing_info_dl_config_earliest_arrival = -1;
++static int hf_nfapi_timing_info_tx_request_earliest_arrival = -1;
++static int hf_nfapi_timing_info_ul_config_earliest_arrival = -1;
++static int hf_nfapi_timing_info_hi_dci0_earliest_arrival = -1;
++static int hf_nfapi_sfn_sf = -1;
++static int hf_nfapi_number_pdcch_ofdm_symbols = -1;
++static int hf_nfapi_number_dci = -1;
++static int hf_nfapi_number_pdus = -1;
++static int hf_nfapi_number_pdsch_rnti = -1;
++static int hf_nfapi_transmission_power_pcfich = -1;
++static int hf_nfapi_number_of_harqs = -1;
++static int hf_nfapi_number_of_crcs = -1;
++static int hf_nfapi_number_of_srs = -1;
++static int hf_nfapi_number_of_cqi = -1;
++static int hf_nfapi_number_of_preambles = -1;
++static int hf_nfapi_number_of_srss = -1;
++static int hf_nfapi_lbt_dl_req_pdu_type = -1;
++static int hf_nfapi_lbt_dl_ind_pdu_type = -1;
++static int hf_nfapi_dl_config_pdu_type = -1;
++static int hf_nfapi_pdu_size = -1;
++static int hf_nfapi_instance_length = -1;
++static int hf_nfapi_length;
++static int hf_nfapi_pdu_index = -1;
++static int hf_nfapi_rnti = -1;
++static int hf_nfapi_resource_allocation_type = -1;
++static int hf_nfapi_virtual_resource_block_assignment_flag = -1;
++static int hf_nfapi_resource_block_coding = -1;
++static int hf_nfapi_modulation = -1;
++static int hf_nfapi_redundancy_version = -1;
++static int hf_nfapi_transport_blocks = -1;
++static int hf_nfapi_transport_block_to_codeword_swap_flag = -1;
++static int hf_nfapi_transmission_scheme = -1;
++static int hf_nfapi_ul_transmission_scheme = -1;
++static int hf_nfapi_number_of_layers = -1;
++static int hf_nfapi_number_of_subbands = -1;
++static int hf_nfapi_codebook_index = -1;
++static int hf_nfapi_ue_category_capacity = -1;
++static int hf_nfapi_pa = -1;
++static int hf_nfapi_delta_power_offset_index = -1;
++static int hf_nfapi_ngap = -1;
++static int hf_nfapi_nprb = -1;
++static int hf_nfapi_transmission_mode = -1;
++static int hf_nfapi_num_bf_prb_per_subband = -1;
++static int hf_nfapi_num_bf_vector = -1;
++static int hf_nfapi_bf_vector_subband_index = -1;
++static int hf_nfapi_bf_vector_num_antennas = -1;
++static int hf_nfapi_bf_vector_bf_value = -1;
++static int hf_nfapi_nscid = -1;
++static int hf_nfapi_csi_rs_flag = -1;
++static int hf_nfapi_csi_rs_resource_config_r10 = -1;
++static int hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10 = -1;
++static int hf_nfapi_transmission_power = -1;
++static int hf_nfapi_mbsfn_area_id = -1;
++static int hf_nfapi_csi_rs_antenna_port_count_r10 = -1;
++static int hf_nfapi_ul_config_pdu_type = -1;
++static int hf_nfapi_rach_prach_frequency_resources = -1;
++static int hf_nfapi_srs_present = -1;
++static int hf_nfapi_handle = -1;
++static int hf_nfapi_pucch_index = -1;
++static int hf_nfapi_size = -1;
++static int hf_nfapi_resource_block_start = -1;
++static int hf_nfapi_number_of_resource_blocks = -1;
++static int hf_nfapi_cyclic_shift_2_for_drms = -1;
++static int hf_nfapi_frequency_hopping_enabled_flag = -1;
++static int hf_nfapi_frequency_hopping_bits = -1;
++static int hf_nfapi_new_data_indication = -1;
++static int hf_nfapi_harq_process_number = -1;
++static int hf_nfapi_ul_tx_mode = -1;
++static int hf_nfapi_current_tx_nb = -1;
++static int hf_nfapi_n_srs = -1;
++static int hf_nfapi_disable_sequence_hopping_flag = -1;
++static int hf_nfapi_dl_cqi_pmi_size_rank_1 = -1;
++static int hf_nfapi_dl_cqi_pmi_size_rank_greater_1 = -1;
++static int hf_nfapi_ri_size = -1;
++static int hf_nfapi_delta_offset_cqi = -1;
++static int hf_nfapi_delta_offset_ri = -1;
++static int hf_nfapi_harq_size = -1;
++static int hf_nfapi_delta_offset_harq = -1;
++static int hf_nfapi_tdd_ack_nack_mode = -1;
++static int hf_nfapi_fdd_ack_nack_mode = -1;
++static int hf_nfapi_n_srs_initial = -1;
++static int hf_nfapi_initial_number_of_resource_blocks = -1;
++static int hf_nfapi_dl_cqi_pmi_size = -1;
++static int hf_nfapi_report_type = -1;
++static int hf_nfapi_dl_cqi_ri_pmi_size = -1;
++static int hf_nfapi_control_type = -1;
++static int hf_nfapi_number_of_cc = -1;
++static int hf_nfapi_virtual_cell_id_enabled_flag = -1;
++static int hf_nfapi_npusch_identity = -1;
++static int hf_nfapi_ndrms_csh_identity = -1;
++static int hf_nfapi_total_number_of_repetitions = -1;
++static int hf_nfapi_repetition_number = -1;
++static int hf_nfapi_initial_sf_io = -1;
++static int hf_nfapi_empty_symbols_due_to_retunning = -1;
++static int hf_nfapi_dl_cqi_ri_pmi_size_2 = -1;
++static int hf_nfapi_npucch_identity = -1;
++static int hf_nfapi_harq_size_2 = -1;
++static int hf_nfapi_delta_offset_harq_2 = -1;
++static int hf_nfapi_empty_symbols = -1;
++static int hf_nfapi_csi_mode = -1;
++static int hf_nfapi_dl_cqi_pmi_size_2 = -1;
++static int hf_nfapi_statring_prb = -1;
++static int hf_nfapi_cdm_index = -1;
++static int hf_nfapi_nsrs = -1;
++static int hf_nfapi_num_ant_ports = -1;
++static int hf_nfapi_n_pucch_2_0 = -1;
++static int hf_nfapi_n_pucch_2_1 = -1;
++static int hf_nfapi_n_pucch_2_2 = -1;
++static int hf_nfapi_n_pucch_2_3 = -1;
++static int hf_nfapi_starting_prb = -1;
++static int hf_nfapi_antenna_port = -1;
++static int hf_nfapi_number_of_combs = -1;
++static int hf_nfapi_number_of_pucch_resource = -1;
++static int hf_nfapi_pucch_index_p1 = -1;
++static int hf_nfapi_n_pucch_1_0 = -1;
++static int hf_nfapi_n_pucch_1_1 = -1;
++static int hf_nfapi_n_pucch_1_2 = -1;
++static int hf_nfapi_n_pucch_1_3 = -1;
++static int hf_nfapi_srs_bandwidth = -1;
++static int hf_nfapi_frequency_domain_position = -1;
++static int hf_nfapi_srs_hopping_bandwidth = -1;
++static int hf_nfapi_transmission_comb = -1;
++static int hf_nfapi_i_srs = -1;
++static int hf_nfapi_sounding_reference_cyclic_shift = -1;
++static int hf_nfapi_pdu_length = -1;
++static int hf_nfapi_crc_flag = -1;
++static int hf_nfapi_number_of_hi_pdus = -1;
++static int hf_nfapi_number_of_dci_pdus = -1;
++static int hf_nfapi_hi_dci0_pdu_type = -1;
++static int hf_nfapi_hi_value = -1;
++static int hf_nfapi_i_phich = -1;
++static int hf_nfapi_flag_tb2 = -1;
++static int hf_nfapi_hi_value_2 = -1;
++static int hf_nfapi_ue_tx_antenna_selection = -1;
++static int hf_nfapi_cqi_csi_request = -1;
++static int hf_nfapi_ul_index = -1;
++static int hf_nfapi_dl_assignment_index = -1;
++static int hf_nfapi_tpc_bitmap = -1;
++static int hf_nfapi_new_data_indication_two = -1;
++static int hf_nfapi_size_of_cqi_csi_feild = -1;
++static int hf_nfapi_resource_allocation_flag = -1;
++static int hf_nfapi_number_of_antenna_ports = -1;
++static int hf_nfapi_n_ul_rb = -1;
++static int hf_nfapi_pscch_resource = -1;
++static int hf_nfapi_time_resource_pattern = -1;
++static int hf_nfapi_mpdcch_transmission_type = -1;
++static int hf_nfapi_drms_scrambling_init = -1;
++static int hf_nfapi_pusch_repetition_levels = -1;
++static int hf_nfapi_frequency_hopping_flag = -1;
++static int hf_nfapi_csi_request = -1;
++static int hf_nfapi_dai_presence_flag = -1;
++static int hf_nfapi_total_dci_length_include_padding = -1;
++static int hf_nfapi_data_offset = -1;
++static int hf_nfapi_ul_cqi = -1;
++static int hf_nfapi_timing_advance_r9 = -1;
++static int hf_nfapi_timing_advance = -1;
++static int hf_nfapi_harq_data_value_0 = -1;
++static int hf_nfapi_harq_data_value_0_special = -1;
++static int hf_nfapi_harq_data_value_1 = -1;
++static int hf_nfapi_harq_data_value_2 = -1;
++static int hf_nfapi_harq_data_value_3 = -1;
++static int hf_nfapi_tdd_harq_mode = -1;
++static int hf_nfapi_fdd_harq_mode = -1;
++static int hf_nfapi_number_of_ack_nack = -1;
++static int hf_nfapi_harq_tb_1 = -1;
++static int hf_nfapi_harq_tb_2 = -1;
++static int hf_nfapi_harq_tb_n = -1;
++static int hf_nfapi_channel = -1;
++static int hf_nfapi_ri = -1;
++static int hf_nfapi_number_of_cc_reported = -1;
++static int hf_nfapi_preamble = -1;
++static int hf_nfapi_rach_resource_type = -1;
++static int hf_nfapi_snr = -1;
++static int hf_nfapi_doppler_estimation = -1;
++static int hf_nfapi_rb_start = -1;
++static int hf_nfapi_up_pts_symbol = -1;
++static int hf_nfapi_number_prb_per_subband = -1;
++static int hf_nfapi_number_antennas = -1;
++static int hf_nfapi_subband_index = -1;
++static int hf_nfapi_channel_coefficient = -1;
++static int hf_nfapi_ul_rtoa = -1;
++static int hf_nfapi_mp_cca = -1;
++static int hf_nfapi_n_cca = -1;
++static int hf_nfapi_offset = -1;
++static int hf_nfapi_lte_txop_sf = -1;
++static int hf_nfapi_txop_sfn_sf_end = -1;
++static int hf_nfapi_lbt_mode = -1;
++static int hf_nfapi_sfn_sf_end = -1;
++static int hf_nfapi_result = -1;
++static int hf_nfapi_txop_symbols = -1;
++static int hf_nfapi_initial_partial_sf = -1;
++static int hf_nfapi_frequency_band_indicator = -1;
++static int hf_nfapi_measurement_period = -1;
++static int hf_nfapi_bandwidth = -1;
++static int hf_nfapi_timeout = -1;
++static int hf_nfapi_number_of_earfcns = -1;
++static int hf_nfapi_uarfcn = -1;
++static int hf_nfapi_number_of_uarfcns = -1;
++static int hf_nfapi_arfcn = -1;
++static int hf_nfapi_arfcn_direction = -1;
++static int hf_nfapi_number_of_arfcns = -1;
++static int hf_nfapi_rssi = -1;
++static int hf_nfapi_number_of_rssi = -1;
++static int hf_nfapi_pci = -1;
++static int hf_nfapi_measurement_bandwidth = -1;
++static int hf_nfapi_exhaustive_search = -1;
++static int hf_nfapi_number_of_pci = -1;
++static int hf_nfapi_psc = -1;
++static int hf_nfapi_number_of_psc = -1;
++static int hf_nfapi_rsrp = -1;
++static int hf_nfapi_rsrq = -1;
++static int hf_nfapi_number_of_lte_cells_found = -1;
++static int hf_nfapi_rscp = -1;
++static int hf_nfapi_enco = -1;
++static int hf_nfapi_number_of_utran_cells_found = -1;
++static int hf_nfapi_bsic = -1;
++static int hf_nfapi_rxlev = -1;
++static int hf_nfapi_rxqual = -1;
++static int hf_nfapi_sfn_offset = -1;
++static int hf_nfapi_number_of_geran_cells_found = -1;
++static int hf_nfapi_number_of_tx_antenna = -1;
++static int hf_nfapi_mib_length = -1;
++static int hf_nfapi_mib = -1;
++static int hf_nfapi_phich_configuration = -1;
++static int hf_nfapi_retry_count = -1;
++static int hf_nfapi_sib1 = -1;
++static int hf_nfapi_si_periodicity = -1;
++static int hf_nfapi_si_index = -1;
++static int hf_nfapi_number_of_si_periodicity = -1;
++static int hf_nfapi_si_window_length = -1;
++static int hf_nfapi_sib_type = -1;
++static int hf_nfapi_sib_len = -1;
++static int hf_nfapi_sib = -1;
++static int hf_nfapi_si_len = -1;
++static int hf_nfapi_si = -1;
++static int hf_nfapi_pnf_search_state = -1;
++static int hf_nfapi_pnf_broadcast_state = -1;
++
++static const value_string message_id_vals[] =
++{
++	{ NFAPI_DL_CONFIG_REQUEST_MSG_ID, "DL_CONFIG.request" },
++	{ NFAPI_UL_CONFIG_REQUEST_MSG_ID, "UL_CONFIG.request" },
++	{ NFAPI_SUBFRAME_INDICATION_MSG_ID, "SUBFRAME_INDICATION" },
++	{ NFAPI_HI_DCI0_REQUEST_MSG_ID, "HI_DCI0.request" },
++	{ NFAPI_TX_REQUEST_MSG_ID, "TX.request" },
++	{ NFAPI_HARQ_INDICATION_MSG_ID, "HARQ.indication" },
++	{ NFAPI_CRC_INDICATION_MSG_ID, "CRC.indication" },
++	{ NFAPI_RX_ULSCH_INDICATION_MSG_ID, "RX_ULSCH.indication" },
++	{ NFAPI_RACH_INDICATION_MSG_ID, "RACH.indication" },
++	{ NFAPI_SRS_INDICATION_MSG_ID, "SRS.indication" },
++	{ NFAPI_RX_SR_INDICATION_MSG_ID, "RX_SR.indication" },
++	{ NFAPI_RX_CQI_INDICATION_MSG_ID, "RX_CQI.indication" },
++	{ NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID, "LBT_DL_CONFIG.request" },
++	{ NFAPI_LBT_DL_INDICATION_MSG_ID, "LBT_DL.indication" },
++
++	{ NFAPI_PNF_PARAM_REQUEST_MSG_ID, "PNF_PARAM.request" },
++	{ NFAPI_PNF_PARAM_RESPONSE_MSG_ID, "PNF_PARAM.response" },
++	{ NFAPI_PNF_CONFIG_REQUEST_MSG_ID, "PNF_CONFIG.request" },
++	{ NFAPI_PNF_CONFIG_RESPONSE_MSG_ID, "PNF_CONFIG.response" },
++	{ NFAPI_PNF_START_REQUEST_MSG_ID, "PNF_START.request" },
++	{ NFAPI_PNF_START_RESPONSE_MSG_ID, "PNF_START.response" },
++	{ NFAPI_PNF_STOP_REQUEST_MSG_ID, "PNF_STOP.request" },
++	{ NFAPI_PNF_STOP_RESPONSE_MSG_ID, "PNF_STOP.response" },
++	{ NFAPI_PARAM_REQUEST_MSG_ID, "PARAM.request" },
++	{ NFAPI_PARAM_RESPONSE_MSG_ID, "PARAM.response" },
++	{ NFAPI_CONFIG_REQUEST_MSG_ID, "CONFIG.request" },
++	{ NFAPI_CONFIG_RESPONSE_MSG_ID, "CONFIG.response" },
++	{ NFAPI_START_REQUEST_MSG_ID, "START.request" },
++	{ NFAPI_START_RESPONSE_MSG_ID, "START.response" },
++	{ NFAPI_STOP_REQUEST_MSG_ID, "STOP.request" },
++	{ NFAPI_STOP_RESPONSE_MSG_ID, "STOP.response" },
++	{ NFAPI_MEASUREMENT_REQUEST_MSG_ID, "MEASUREMENT.request" },
++	{ NFAPI_MEASUREMENT_RESPONSE_MSG_ID, "MEASUREMENT.response" },
++
++	{ NFAPI_DL_NODE_SYNC_MSG_ID, "UL_NODE_SYNC" },
++	{ NFAPI_UL_NODE_SYNC_MSG_ID, "DL_NODE_SYNC" },
++	{ NFAPI_TIMING_INFO_MSG_ID, "TIMING_INFO" },
++
++	{ NFAPI_RSSI_REQUEST_MSG_ID, "RSSI.request" },
++	{ NFAPI_RSSI_RESPONSE_MSG_ID, "RSSI.response" },
++	{ NFAPI_RSSI_INDICATION_MSG_ID, "RSSI.indication" },
++	{ NFAPI_CELL_SEARCH_REQUEST_MSG_ID, "CELL_SEARCH.request" },
++	{ NFAPI_CELL_SEARCH_RESPONSE_MSG_ID, "CELL_SEARCH.response" },
++	{ NFAPI_CELL_SEARCH_INDICATION_MSG_ID, "CELL_SEARCH.indication" },
++	{ NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID, "BROADCAST_DETECT.request" },
++	{ NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID, "BROADCAST_DETECT.response" },
++	{ NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID, "BROADCAST_DETECT.indication" },
++	{ NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.request" },
++	{ NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.response" },
++	{ NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID, "SYSTEM_INFORMATION_SCHEDULE.indication" },
++	{ NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID, "SYSTEM_INFORMATION.request" },
++	{ NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID, "SYSTEM_INFORMATION.response" },
++	{ NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID, "SYSTEM_INFORMATION.indication" },
++	{ NFAPI_NMM_STOP_REQUEST_MSG_ID, "NMM_STOP.request" },
++	{ NFAPI_NMM_STOP_RESPONSE_MSG_ID, "NMM_STOP.response" },
++
++	{ 0, NULL },
++};
++
++typedef void(*tlv_decode)(ptvcursor_t * ptvc, packet_info* pinfo);
++
++typedef struct
++{
++	guint16 tag_id;
++	char* name;
++	tlv_decode decode;
++} tlv_t;
++
++static void dissect_tlv_list(ptvcursor_t * ptvc, packet_info* pinfo, gint len);
++
++static void dissect_array_value(ptvcursor_t * ptvc, packet_info* pinfo, const char* name, guint32 ett_idx, guint32 count, tlv_decode decode)
++{
++	guint16 i = 0;
++
++	if (count > 0)
++	{
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "%s", name);
++
++		for (i = 0; i < count; ++i)
++		{
++			ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_idx, "[%d]", i);
++			decode(ptvc, pinfo);
++			ptvcursor_pop_subtree(ptvc);
++		}
++
++		ptvcursor_pop_subtree(ptvc);
++	}
++}
++
++static void dissect_pnf_param_general_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// nFAPI Sync Mode
++	guint8 nfapi_sync_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_sync_mode, 1, ENC_BIG_ENDIAN);
++	if (nfapi_sync_mode_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nfapi sync mode value [0..2]");
++	}
++
++	// Location Mode
++	guint8 location_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_location_mode, 1, ENC_BIG_ENDIAN);
++	if (location_mode_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid location mode value [0..3]");
++	}
++
++	guint16 len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_location_coordinates_length, 2, ENC_BIG_ENDIAN);
++	if (len > 0)
++		ptvcursor_add(ptvc, hf_nfapi_location_coordinates, len, ENC_NA);
++	ptvcursor_add(ptvc, hf_nfapi_dl_config_timing, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_tx_timing, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_ul_config_timing, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_hi_dci0_timing, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_number_phys, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_total_bandwidth, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_dl_layers, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_total_number_ul_layers, 1, ENC_BIG_ENDIAN);
++
++	// Shared Bands
++	guint8 shared_bands_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_shared_bands, 1, ENC_BIG_ENDIAN);
++	if (shared_bands_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid shared bands value [0..1]");
++	}
++
++	// Shared PA
++	guint8 shared_pa_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_shared_pa, 1, ENC_BIG_ENDIAN);
++	if (shared_pa_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid shared pa value [0..1]");
++	}
++
++	ptvcursor_add(ptvc, hf_nfapi_maximum_total_power, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_oui, 3, ENC_HOST_ENDIAN);
++}
++static void dissect_pnf_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_pnf_phy_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++
++	guint16 num_rf_configs = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Config List", ett_nfapi_pnf_phy, num_rf_configs, dissect_pnf_rf_config_instance_value);
++
++	guint16 num_rf_exclusions = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rf_exclusions, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Exclustion List", ett_nfapi_pnf_phy, num_rf_exclusions, dissect_pnf_rf_config_instance_value);
++
++	// Downlink Channel Bandwidth Supported
++	guint16 downlink_channel_bandwidth_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add_no_advance(ptvc, hf_nfapi_downlink_channel_bandwidth_supported, 2, ENC_BIG_ENDIAN);
++	if (downlink_channel_bandwidth_supported_value > 0x3F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink channel bandwidht supported bits [0..0x3F]");
++	}
++
++	proto_tree* dl_bw_support_tree = proto_item_add_subtree(item, ett_nfapi_downlink_bandwidth_support);
++
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_6, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_15, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_25, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_50, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_75, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_100, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++
++
++
++	// Uplink Channel Bandwidth Supported
++	guint16 uplink_channel_bandwidth_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add_no_advance(ptvc, hf_nfapi_uplink_channel_bandwidth_supported, 2, ENC_BIG_ENDIAN);
++	if (uplink_channel_bandwidth_supported_value > 0x3F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink channel bandwidht supported bits [0..0x3F]");
++	}
++
++	proto_tree* ul_bw_support_tree = proto_item_add_subtree(item, ett_nfapi_uplink_bandwidth_support);
++
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_6, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_15, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_25, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_50, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_75, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_100, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++
++	// Number of DL layers supported
++	guint8 number_of_dl_layer_supported_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_dl_layers_supported, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_dl_layer_supported_value == 1 || number_of_dl_layer_supported_value == 2 ||
++		  number_of_dl_layer_supported_value == 4 || number_of_dl_layer_supported_value == 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of dl layers supported value [1, 2, 4, 8]");
++	}
++
++	// Number of DL layers supported
++	guint8 number_of_ul_layer_supported_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ul_layers_supported, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_ul_layer_supported_value == 1 || number_of_ul_layer_supported_value == 2 ||
++		  number_of_ul_layer_supported_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ul layers supported value [1, 2, 4]");
++	}
++
++	// Maximum 3GPP Release Supported
++	guint16 maximum_3gpp_release_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add_no_advance(ptvc, hf_nfapi_maximum_3gpp_release_supported, 2, ENC_BIG_ENDIAN);
++	if (maximum_3gpp_release_supported_value > 0x3F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maximum 3GPP release supported value [0..0x3F]");
++	}
++
++	proto_tree* release_support_tree = proto_item_add_subtree(item, ett_nfapi_release_support);
++
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel8, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel9, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel10, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel11, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel12, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel13, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++
++
++	// NMM Modes Supported
++	guint8 nmm_modes_supported_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nmm_modes_supported, 1, ENC_BIG_ENDIAN);
++	if (nmm_modes_supported_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm modes supported value [0..3]");
++	}
++}
++
++static void dissect_pnf_phy_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_phy = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY List", ett_nfapi_pnf_phy, num_phy, dissect_pnf_phy_instance_value);
++}
++
++static void dissect_pnf_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_transmit_power, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_minimum_transmit_power, 2, ENC_BIG_ENDIAN);
++
++	guint8 number_of_antennas_supported_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_antennas_suppported, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_antennas_supported_value == 1 || number_of_antennas_supported_value == 2 ||
++		  number_of_antennas_supported_value == 4 || number_of_antennas_supported_value == 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of supported antennas [1, 2, 4, 8]");
++	}
++
++	ptvcursor_add(ptvc, hf_nfapi_minimum_downlink_frequency, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_downlink_frequency, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_minimum_uplink_frequency, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_maximum_uplink_frequency, 4, ENC_BIG_ENDIAN);
++}
++
++
++static void dissect_pnf_rf_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_rf = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rfs, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF List", ett_nfapi_pnf_phy_rf_config, num_rf, dissect_pnf_rf_config_value);
++}
++
++static void dissect_pnf_phy_rel10_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PHY Config Index
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++
++	// Transmission mode 7 supported
++	guint16 transmission_mode7_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_mode7_supported, 2, ENC_BIG_ENDIAN);
++	if (transmission_mode7_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 7 supported value [0..1]");
++	}
++
++	// Two antennas ports for PUCCH
++	guint16 transmission_mode8_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_transmission_mode8_supported, 2, ENC_BIG_ENDIAN);
++	if (transmission_mode8_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 8 supported value [0..1]");
++	}
++
++	// Transmission mode 8 supported
++	guint16 two_antennas_port_for_pucch_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_two_antennas_ports_for_pucch, 2, ENC_BIG_ENDIAN);
++	if (two_antennas_port_for_pucch_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid two antennas ports for pucch value [0..1]");
++	}
++
++	// Transmission mode 9 supported
++	guint16 transmission_mode9_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_transmission_mode_9_supported, 2, ENC_BIG_ENDIAN);
++	if (transmission_mode9_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 9 supported value [0..1]");
++	}
++
++	// Simultaneous PUCCH PUSCH
++	guint16 simultaenous_pucch_pusch_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_simultaneous_pucch_pusch, 2, ENC_BIG_ENDIAN);
++	if (simultaenous_pucch_pusch_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid simultaneous pucch pusch supported value [0..1]");
++	}
++
++	// Four layer Tx with TM3 and TM4
++	guint16 four_layer_tx_with_tm3_and_tm4_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_four_layer_tx_with_tm3_and_tm4, 2, ENC_BIG_ENDIAN);
++	if (four_layer_tx_with_tm3_and_tm4_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid four layer tx with tm3 and tm4 value [0..1]");
++	}
++}
++
++static void dissect_pnf_phy_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_phy = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY Rel 10 List", ett_nfapi_pnf_phy_rel10, num_phy, dissect_pnf_phy_rel10_instance_value);
++}
++
++static void dissect_pnf_phy_rel11_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PHY Config Index
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++
++	// ePDCCH supported
++	guint16 epdcch_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_epdcch_supported, 2, ENC_BIG_ENDIAN);
++	if (epdcch_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid edpcch supported value [0..1]");
++	}
++
++	// Multi ACK CSI reporting
++	guint16 multi_ack_csi_reporting_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_multi_ack_csi_reporting, 2, ENC_BIG_ENDIAN);
++	if (multi_ack_csi_reporting_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi ack csi reporting value [0..1]");
++	}
++
++	// PUCCH Tx diversity with channel selection
++	guint16 pucch_tx_diversity_with_channel_selection_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_pucch_tx_diversity_with_channel_selection, 2, ENC_BIG_ENDIAN);
++	if (pucch_tx_diversity_with_channel_selection_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch tx diversity with channel selection value [0..1]");
++	}
++
++	// UL CoMP supported
++	guint16 ul_comp_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_ul_comp_supported, 2, ENC_BIG_ENDIAN);
++	if (ul_comp_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul comp supported value [0..1]");
++	}
++
++	// Transmission mode 5 supported
++	guint16 transmission_mode_5_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_transmission_mode_5_supported, 2, ENC_BIG_ENDIAN);
++	if (transmission_mode_5_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 5 supported value [0..1]");
++	}
++}
++
++static void dissect_pnf_phy_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_phy = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY Rel 11 List", ett_nfapi_pnf_phy_rel11, num_phy, dissect_pnf_phy_rel11_instance_value);
++}
++
++static void dissect_pnf_phy_rel12_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PHY Config Index
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++
++	// CSI subframe set
++	guint16 csi_subframe_set_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_subframe_set, 2, ENC_BIG_ENDIAN);
++	if (csi_subframe_set_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi subframe set value [0..1]");
++	}
++
++	// Enhanced 4TX codebook
++	guint16 enhanced_4tx_codebook_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_enhanced_4tx_codebook, 2, ENC_BIG_ENDIAN);
++	if (enhanced_4tx_codebook_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid enhanced 4TX codebook value [0..1]");
++	}
++
++	// DRS supported
++	guint16 drs_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_drs_supported, 2, ENC_BIG_ENDIAN);
++	if (drs_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drs supported value [0..1]");
++	}
++
++	// UL 64QAM supported
++	guint16 ul_64qam_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_ul_64qam_supported, 2, ENC_BIG_ENDIAN);
++	if (ul_64qam_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul 64 QAM supported value [0..1]");
++	}
++
++	// Transmission mode 10 supported
++	guint16 transmission_mode_10_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_transmission_mode_10_supported, 2, ENC_BIG_ENDIAN);
++	if (transmission_mode_10_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode 10 supported value [0..1]");
++	}
++
++	// Alternative TBS indices
++	guint16 alternative_tbs_indices_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hi_nfapi_alternative_tbs_indices, 2, ENC_BIG_ENDIAN);
++	if (alternative_tbs_indices_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alternative tbs indicies supported value [0..1]");
++	}
++}
++
++static void dissect_pnf_phy_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_phy = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY Rel 12 List", ett_nfapi_pnf_phy_rel12, num_phy, dissect_pnf_phy_rel12_instance_value);
++}
++
++static void dissect_pnf_phy_rel13_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PHY Config Index
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++
++	// PUCCH format 4 supported
++	guint16 pucch_format_4_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pucch_format_4_supported, 2, ENC_BIG_ENDIAN);
++	if (pucch_format_4_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 4 supported value [0..1]");
++	}
++
++	// PUCCH format 5 supported
++	guint16 pucch_format_5_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pucch_format_5_supported, 2, ENC_BIG_ENDIAN);
++	if (pucch_format_5_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch format 5 supported value [0..1]");
++	}
++
++	// More than 5 CA support
++	guint16 more_than_5_ca_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_more_than_5_ca_supported, 2, ENC_BIG_ENDIAN);
++	if (more_than_5_ca_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid more than 5 ca supported value [0..1]");
++	}
++
++	// LAA supported
++	guint16 laa_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_laa_supported, 2, ENC_BIG_ENDIAN);
++	if (laa_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa supported value [0..1]");
++	}
++
++	// LAA ending in DwPTS supported
++	guint16 laa_ending_in_dwpts_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_laa_ending_in_dwpts_supported, 2, ENC_BIG_ENDIAN);
++	if (laa_ending_in_dwpts_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa ending in dwpts supported value [0..1]");
++	}
++
++	// LAA starting in second slot Supported
++	guint16 laa_starting_in_second_slot_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_laa_starting_in_second_slot_supported, 2, ENC_BIG_ENDIAN);
++	if (laa_starting_in_second_slot_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa starting in second slot supported value [0..1]");
++	}
++
++	// Beamforming Supported
++	guint16 beamingforming_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_beamforming_supported, 2, ENC_BIG_ENDIAN);
++	if (beamingforming_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid beamforming supported value [0..1]");
++	}
++
++	// CSI-RS enhancements supported
++	guint16 csi_rs_enhancements_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_enhancements_supported, 2, ENC_BIG_ENDIAN);
++	if (csi_rs_enhancements_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs enhancements supported value [0..1]");
++	}
++
++	// DMRS enhancements supported
++	guint16 drms_enhancements_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_enhancements_supported, 2, ENC_BIG_ENDIAN);
++	if (drms_enhancements_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms enhancements supported value [0..1]");
++	}
++
++	// SRS enhancements supported
++	guint16 srs_enhancements_supported_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_enhancements_supported, 2, ENC_BIG_ENDIAN);
++	if (srs_enhancements_supported_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs enhancements supported value [0..1]");
++	}
++
++}
++
++static void dissect_pnf_phy_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_phy = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY Rel 13 List", ett_nfapi_pnf_phy_rel13, num_phy, dissect_pnf_phy_rel13_instance_value);
++}
++
++static void dissect_pnf_phy_rf_config_instance_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_phy_rf_config_info_phy_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_config_index, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_rf_config_index, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_pnf_phy_rf_config_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_configs = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_phy_number_phy, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "PHY RF Config List", ett_nfapi_pnf_phy_rf_config, num_configs, dissect_pnf_phy_rf_config_instance_value);
++}
++
++static void dissect_dl_rs_tx_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_dl_rs_tx_power, 2, ENC_BIG_ENDIAN);
++
++	if (!(value >= 1 && value <= 255))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
++	}
++}
++static void dissect_received_interference_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_received_interference_power, 2, ENC_BIG_ENDIAN);
++
++	if (!(value >= 1 && value <= 255))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value [1..255]");
++	}
++}
++static void dissect_thermal_noise_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_dl_rs_tx_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_dl_rs_tx_power_measurement, 2, ENC_BIG_ENDIAN);
++}
++
++static void dissect_received_interference_power_result_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_received_interference_power_measurement, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_received_interference_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 num_resource_block = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_resource_blocks, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "Results", ett_nfapi_received_interference_power_mesurement_results, num_resource_block, dissect_received_interference_power_result_value);
++}
++static void dissect_thermal_noise_power_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_thermal_noise_power_measurement, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_duplex_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_duplex_mode, 2, ENC_BIG_ENDIAN);
++
++	if (value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid duplex mode [0..2]");
++	}
++}
++static void dissect_pcfich_power_offset_value(ptvcursor_t* ptvc, packet_info *pinfo)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pcfich_power_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid power level [0..10000]");
++	}
++}
++static void dissect_pb_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pb, 2, ENC_BIG_ENDIAN);
++
++	if (value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power allocation index [0..3]");
++	}
++}
++
++static void dissect_dl_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_dl_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl cyclic prefix type [0..1]");
++	}
++}
++static void dissect_ul_cyclic_prefix_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ul_cyclic_prefix_type, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul cyclic prefix type [0..1]");
++	}
++}
++static void dissect_dl_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 6 || value == 15 || value == 25 || value == 50 || value == 75 || value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++}
++static void dissect_ul_channel_bandwidth_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_uplink_channel_bandwidth, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 6 || value == 15 || value == 25 || value == 50 || value == 75 || value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++}
++static void dissect_reference_signal_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_reference_signal_power, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid reference signal power [0..255]");
++	}
++
++}
++static void dissect_tx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_tx_antenna_ports, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports value [1, 2, 4, 8, 16]");
++	}
++}
++static void dissect_rx_antenna_ports_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_rx_antenna_ports, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rx antenna ports value [1, 2, 4, 8, 16]");
++	}
++}
++static void dissect_phich_resource_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_phich_resource, 2, ENC_BIG_ENDIAN);
++
++	if (value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich resource value [0..3]");
++	}
++}
++static void dissect_phich_duration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_phich_duration, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich duration value [0..1]");
++	}
++}
++static void dissect_phich_power_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_phich_power_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phich power offset value [0..10000]");
++	}
++}
++static void dissect_psch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_primary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN);
++
++	if (value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary synchronization signal epre/eprers value [0..10000]");
++	}
++}
++static void dissect_physical_cell_id_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_physical_cell_id, 2, ENC_BIG_ENDIAN);
++
++	if (value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid physical cell id [0..503]");
++	}
++}
++static void dissect_ssch_synch_signal_epre_eprers_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_secondary_synchronization_signal_epre_eprers, 2, ENC_BIG_ENDIAN);
++
++	if (value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid secondary synchronization signal epre/eprers value [0..10000]");
++	}
++}
++static void dissect_prach_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_configuration_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach configuration index [0..63]");
++	}
++}
++static void dissect_prach_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_root_sequence_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 837)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach root sequency index [0..837]");
++	}
++}
++static void dissect_prach_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN);
++
++	// How do differentiate between fdd 0..6 and tdd 0..15 ranges?
++	if (value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid zero correlation zone configuration [0..15]");
++	}
++}
++static void dissect_prach_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_high_speed_flag, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid high speed flag value [0..1]");
++	}
++}
++static void dissect_prach_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	// How to determine the ul channel bandiwdth?
++	if (value > (100 -6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach frequency offset value [0..94]");
++	}
++}
++static void dissect_pusch_hopping_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_hopping_mode, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch hopping mode value [0..1]");
++	}
++}
++static void dissect_pusch_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_hopping_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 98)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch hopping offset value [0..98]");
++	}
++}
++static void dissect_pusch_number_of_subbands_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_number_of_subbands, 2, ENC_BIG_ENDIAN);
++
++	if (!(value >= 1 && value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of sub-bands [1..4]");
++	}
++}
++static void dissect_pucch_delta_pucch_shift_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_delta_pucch_shift, 2, ENC_BIG_ENDIAN);
++
++	if (!(value >= 1 && value <= 3))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta pucch shift [1..3]");
++	}
++}
++static void dissect_pucch_n_cqi_rb_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_n_cqi_rb, 2, ENC_BIG_ENDIAN);
++
++	if (value > 98)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n cqi rb value [0..98]");
++	}
++}
++static void dissect_pucch_n_an_cs_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_n_an_cs, 2, ENC_BIG_ENDIAN);
++
++	if (value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n an cs value [0..7]");
++	}
++}
++static void dissect_pucch_n1_pucch_an_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_n1_pucch_an, 2, ENC_BIG_ENDIAN);
++
++	if (value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n1pucch an value [0..2047]");
++	}
++}
++static void dissect_srs_bandwidth_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_bandwidth_configuration, 2, ENC_BIG_ENDIAN);
++
++	if (value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth configuration value [0..7]");
++	}
++}
++static void dissect_srs_max_uppts_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_max_up_pts, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid max up pts value [0..1]");
++	}
++}
++static void dissect_srs_subframe_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_srs_subframe_configuration, 2, ENC_BIG_ENDIAN);
++
++	if (value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs subframe configuration value [0..15]");
++	}
++}
++static void dissect_srs_acknack_srs_sim_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_srs_acknack_srs_simultaneous_transmission, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs ack nack srs simultaneous transmission value [0..1]");
++	}
++}
++static void dissect_uplink_rs_hopping_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_uplink_rs_hopping, 2, ENC_BIG_ENDIAN);
++
++	if (value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink rs hopping value [0..2]");
++	}
++}
++static void dissect_group_assignment_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_group_assignment, 2, ENC_BIG_ENDIAN);
++
++	if (value > 29)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid group assignment value [0..29]");
++	}
++}
++static void dissect_cyclic_shift_1_for_drms_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_cyclic_shift_1_for_drms, 2, ENC_BIG_ENDIAN);
++
++	if (value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 1 for drms value [0..7]");
++	}
++}
++static void dissect_tdd_subframe_assignement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_subframe_assignment, 2, ENC_BIG_ENDIAN);
++
++	if (value > 6)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tdd subframe assignment value [0..6]");
++	}
++}
++static void dissect_tdd_subframe_patterns_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_special_subframe_patterns, 2, ENC_BIG_ENDIAN);
++
++	if (value > 9)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid special subframe pattern value [0..9]");
++	}
++}
++static void dissect_laa_ed_threashold_for_lbt_for_pdsch_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ed_threshold_for_lbt_for_pdsch, 2, ENC_BIG_ENDIAN);
++
++	if (value > 70)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for pdsch value [0..70]");
++	}
++}
++static void dissect_laa_ed_threashold_for_lbt_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ed_threshold_for_lbt_for_drs, 2, ENC_BIG_ENDIAN);
++
++	if (value > 70)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ed threshold for ltb for drs value [0..70]");
++	}
++}
++static void dissect_laa_pd_threshold_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pd_threshold, 2, ENC_BIG_ENDIAN);
++
++	if (value > 70 && value != 65535)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pd threshold value [0..70, 65536]");
++	}
++}
++static void dissect_laa_multi_carrier_type_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_multi_carrier_type, 2, ENC_BIG_ENDIAN);
++
++	if (value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mutli carrier type [0..4]");
++	}
++}
++static void dissect_laa_multi_carrier_tx_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_multi_carrier_tx, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mutli carrier tx value [0..1]");
++	}
++}
++static void dissect_laa_multi_carrier_freeze_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_multi_carrier_freeze, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mutli carrier freeze value [0..1]");
++	}
++}
++static void dissect_laa_tx_antenna_port_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_tx_antenna_ports_for_drs, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tx antenna ports for drs value [1, 2, 4]");
++	}
++}
++static void dissect_laa_transmission_power_for_drs_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_transmission_power_for_drs, 2, ENC_BIG_ENDIAN);
++
++	if (value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for drs [0..10000]");
++	}
++}
++static void dissect_emtc_pbch_repeitions_enabled_r13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pbch_repetitions_enabled_r13, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pbch repetitions enabled r13 value [0..1]");
++	}
++}
++static void dissect_emtc_prach_cat_m_root_sequence_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_cat_m_root_sequence_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 837)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m root sequence index value [0..837]");
++	}
++}
++static void dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_cat_m_zero_correlation_zone_configuration, 2, ENC_BIG_ENDIAN);
++
++	if (value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m zero correlation zone configuration value [0..15]");
++	}
++}
++static void dissect_emtc_prach_cat_m_high_speed_flag_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_cat_m_high_speed_flag, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach cat-m high speed flag value [0..1]");
++	}
++}
++static void dissect_emtc_prach_ce_level_0_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_enable, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 enable value [0..1]");
++	}
++}
++static void dissect_emtc_prach_ce_level_0_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_configuration_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 configuration index value [0..63]");
++	}
++}
++static void dissect_emtc_prach_ce_level_0_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > (100 - 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 frequency offset value [0..94]");
++	}
++}
++static void dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN);
++
++	if (!( value == 1 || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		   value == 64 || value == 128))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
++	}
++}
++static void dissect_emtc_ce_level_0_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 0xFFF || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		  value == 64 || value == 128 || value == 256))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
++	}
++}
++static void dissect_emtc_preach_ce_level_0_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_hopping_enabled, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 hopping enabled value [0..1]");
++	}
++}
++static void dissect_emtc_preach_ce_level_0_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_0_hopping_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 94)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #0 hopping offset value [0..94]");
++	}
++}
++static void dissect_emtc_prach_ce_level_1_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_enable, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 enable value [0..1]");
++	}
++}
++static void dissect_emtc_prach_ce_level_1_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_configuration_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 configuration index value [0..63]");
++	}
++}
++static void dissect_emtc_prach_ce_level_1_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > (100 - 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 frequency offset value [0..94]");
++	}
++}
++static void dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
++	}
++}
++static void dissect_emtc_ce_level_1_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 0xFFF || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128 || value == 256))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
++	}
++}
++static void dissect_emtc_preach_ce_level_1_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_hopping_enabled, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 hopping enabled value [0..1]");
++	}
++}
++static void dissect_emtc_preach_ce_level_1_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_1_hopping_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 94)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #1 hopping offset value [0..94]");
++	}
++}
++static void dissect_emtc_prach_ce_level_2_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_enable, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 enable value [0..1]");
++	}
++}
++static void dissect_emtc_prach_ce_level_2_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_configuration_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration index value [0..63]");
++	}
++}
++static void dissect_emtc_prach_ce_level_2_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > (100 - 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 frequency offset value [0..94]");
++	}
++}
++static void dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
++	}
++}
++static void dissect_emtc_ce_level_2_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 0xFFF || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128 || value == 256))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
++	}
++}
++static void dissect_emtc_preach_ce_level_2_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_hopping_enabled, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 hopping enabled value [0..1]");
++	}
++}
++static void dissect_emtc_preach_ce_level_2_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_2_hopping_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 94)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 hopping offset value [0..94]");
++	}
++}
++static void dissect_emtc_prach_ce_level_3_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_enable, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 enable value [0..1]");
++	}
++}
++static void dissect_emtc_prach_ce_level_3_configuration_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_configuration_index, 2, ENC_BIG_ENDIAN);
++
++	if (value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #2 configuration index value [0..63]");
++	}
++}
++static void dissect_emtc_prach_ce_level_3_frequency_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > (100 - 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 frequency offset value [0..94]");
++	}
++}
++static void dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 number of repetitions per attempt value [1, 2, 4, 8, 16, 32, 64, 128]");
++	}
++}
++static void dissect_emtc_ce_level_3_starting_subframe_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_starting_subframe_periodicity, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 0xFFF || value == 2 || value == 4 || value == 8 || value == 16 || value == 32 ||
++		value == 64 || value == 128 || value == 256))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 starting subframe periodicity value [2, 4, 8, 16, 32, 64, 128, 256, 0xFFFF]");
++	}
++}
++static void dissect_emtc_preach_ce_level_3_hopping_enabled_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_hopping_enabled, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 hopping enabled value [0..1]");
++	}
++}
++static void dissect_emtc_preach_ce_level_3_hopping_offset_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_prach_ce_level_3_hopping_offset, 2, ENC_BIG_ENDIAN);
++
++	if (value > 94)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach ce level #3 hopping offset value [0..94]");
++	}
++}
++static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 5 || value == 10 || value == 20))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch internal ul hopping config common mode a value [1, 2, 4, 8] or [1, 5, 10, 20]");
++	}
++}
++static void dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 2 || value == 4 || value == 8 || value == 16 || value == 5 || value == 10 || value == 20 || value == 40))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch internal ul hopping config common mode a value [2, 4, 8, 16] or [5, 10, 20, 40]");
++	}
++}
++static void dissect_dl_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add_no_advance(ptvc, hf_nfapi_dl_bandwidth_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x1F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink bandwidth support bit [0..0x1F]");
++	}
++
++	proto_tree* dl_bw_support_tree = proto_item_add_subtree(item, ett_nfapi_downlink_bandwidth_support);
++
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_6, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_15, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_25, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_50, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_75, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_bw_support_tree, hf_nfapi_dl_bandwidth_support_100, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++}
++static void dissect_ul_bandwidth_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add_no_advance(ptvc, hf_nfapi_ul_bandwidth_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x1F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink bandwidth support bit [0..0x1F]");
++	}
++
++	proto_tree* ul_bw_support_tree = proto_item_add_subtree(item, ett_nfapi_uplink_bandwidth_support);
++
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_6, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_15, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_25, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_50, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_75, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_bw_support_tree, hf_nfapi_ul_bandwidth_support_100, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++
++}
++static void dissect_dl_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add_no_advance(ptvc, hf_nfapi_dl_modulation_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink modulation support bit [0..0x7]");
++	}
++
++	proto_tree* dl_mod_support_tree = proto_item_add_subtree(item, ett_nfapi_downlink_modulation_support);
++
++	proto_tree_add_bits_item(dl_mod_support_tree, hf_nfapi_dl_modulation_support_qpsk, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_mod_support_tree, hf_nfapi_dl_modulation_support_16qam, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_mod_support_tree, hf_nfapi_dl_modulation_support_64qam, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(dl_mod_support_tree, hf_nfapi_dl_modulation_support_256qam, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++}
++static void dissect_ul_modulation_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add_no_advance(ptvc, hf_nfapi_ul_modulation_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid uplink modulation support bit [0..0x7]");
++	}
++
++	proto_tree* ul_mod_support_tree = proto_item_add_subtree(item, ett_nfapi_uplink_modulation_support);
++
++	proto_tree_add_bits_item(ul_mod_support_tree, hf_nfapi_ul_modulation_support_qpsk, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_mod_support_tree, hf_nfapi_ul_modulation_support_16qam, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(ul_mod_support_tree, hf_nfapi_ul_modulation_support_64qam, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++}
++static void dissect_phy_antenna_capability_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_phy_antenna_capability, 2, ENC_BIG_ENDIAN);
++
++	if (!(value == 1 || value == 2 || value == 4 || value == 8 || value == 16))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy antenna capability [1, 2, 4, 8, 16]");
++	}
++}
++static void dissect_release_capability_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add_no_advance(ptvc, hf_nfapi_release_capability, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x3F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid release capability value [0..0x3F]");
++	}
++
++	proto_tree* release_support_tree = proto_item_add_subtree(item, ett_nfapi_release_support);
++
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel8, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 15, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel9, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 14, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel10, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 13, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel11, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 12, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel12, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 11, 1, ENC_NA);
++	proto_tree_add_bits_item(release_support_tree, hf_nfapi_maximum_3gpp_release_supported_rel13, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8 + 10, 1, ENC_NA);
++
++	ptvcursor_advance(ptvc, 2);
++}
++static void dissect_mbsfn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_mbsfn_capability, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mbsfn capability bit [0..0x1]");
++	}
++}
++static void dissect_laa_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_laa_capability, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid laa support bit [0..0x1]");
++	}
++}
++static void dissect_laa_pd_sensing_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pd_sensing_lbt_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pd sensing lbt support bit [0..0x1]");
++	}
++}
++static void dissect_laa_multi_carrier_lbt_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_multi_carrier_lbt_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0xF)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid multi carrier LBT support bit [0..0xF]");
++	}
++}
++static void dissect_laa_partial_sf_support_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_partial_sf_support, 2, ENC_BIG_ENDIAN);
++
++	if (value > 0x1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid partial SF support bit [0..0x1]");
++	}
++}
++static void dissect_data_report_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_data_report_mode, 2, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid data report mode value [0..1]");
++	}
++}
++static void dissect_sfn_sf_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_sfnsf, 2, ENC_BIG_ENDIAN);
++
++	guint16 sfn = value >> 0x4;
++	guint16 sf = value & 0x000F;
++	if (sfn > 1023 || sf > 9)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sfn/sf value sfn:%d [0..1023] sf:%d [0..9]", sfn, sf);
++	}
++}
++static void dissect_phy_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_phy_state, 2, ENC_BIG_ENDIAN);
++
++	if (value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid phy state [0..2]");
++	}
++}
++static void dissect_p7_vnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv4, 4, ENC_NA);
++}
++static void dissect_p7_vnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_vnf_address_ipv6, 16, ENC_NA);
++}
++static void dissect_p7_vnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_vnf_port, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_p7_pnf_address_ipv4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv4, 4, ENC_NA);
++}
++static void dissect_p7_pnf_address_ipv6_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_pnf_address_ipv6, 16, ENC_NA);
++}
++static void dissect_p7_pnf_port_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_pnf_port, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_downlink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_dl_ue_per_sf, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_uplink_ues_per_subframe_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_ul_ue_per_sf, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_rf_band_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_band, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_rf_bands_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
++}
++static void dissect_timing_window_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_window, 1, ENC_BIG_ENDIAN);
++
++	if (value > 30)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing window value [0..30]");
++	}
++}
++static void dissect_timing_info_mode_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_info_mode, 1, ENC_BIG_ENDIAN);
++
++	if (value > 0x3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info mode [0..0x3]");
++	}
++}
++static void dissect_timing_info_period_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_info_period, 1, ENC_BIG_ENDIAN);
++
++	// Compiler throws an hissy fit that value <= 255 is always true... Yes, but I am trying to
++	// follow the specification...
++	if (!(value >= 1 /* && value <= 255*/))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing info period [1..255]");
++	}
++}
++static void dissect_maximum_transmit_power_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_maximum_transmit_power_2, 2, ENC_BIG_ENDIAN);
++
++	if (value > 700)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid maxiumum transmit power [0..700]");
++	}
++}
++static void dissect_earfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_nmm_gsm_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
++}
++static void dissect_nmm_umts_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
++}
++static void dissect_nmm_lte_frequency_bands_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rf_bands, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "RF Band List", ett_nfapi_rf_bands, count, dissect_rf_band_value);
++}
++static void dissect_nmm_uplink_rssi_supported_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_nmm_uplink_rssi_supported, 1, ENC_BIG_ENDIAN);
++
++	if (value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nmm uplink rssi supported value [0..1]");
++	}
++}
++static void dissect_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_dl_config_pdu_type, 1, ENC_BIG_ENDIAN);
++	guint8 size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN);
++
++	guint pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
++	dissect_tlv_list(ptvc, pinfo, pdu_end);
++}
++static void dissect_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Number of PDCCH OFDM symbols
++	guint8 number_of_pdcch_ofdm_symbols_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item  = ptvcursor_add(ptvc, hf_nfapi_number_pdcch_ofdm_symbols, 1, ENC_BIG_ENDIAN);
++	if (number_of_pdcch_ofdm_symbols_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdcch ofdm symbols value [0..4]");
++	}
++
++	// Number of DCIs
++	guint8 number_of_dcis_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_dci, 1, ENC_BIG_ENDIAN);
++
++	// Number of  PDUs
++	guint16 number_of_pdus_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN);
++	if (number_of_pdus_value > 514)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [0..514]");
++	}
++
++	// Number of PDSCH RNTIs
++	ptvcursor_add(ptvc, hf_nfapi_number_pdsch_rnti, 1, ENC_BIG_ENDIAN);
++
++	// Transmission power for PCFICH
++	guint16 transmission_power_for_pdsch_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power_pcfich, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_for_pdsch_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power for pcfich value [0..10000]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "DL Config PDU List", ett_nfapi_dl_config_request_pdu_list, number_of_dcis_value + number_of_pdus_value, dissect_dl_config_pdu);
++}
++static void dissect_dl_config_request_bch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// PDU index
++	ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DCI format
++	guint8 dci_format_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN);
++	if (dci_format_value > 9)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..9]");
++	}
++
++	// CCE index
++	guint8 cce_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN);
++	if (cce_index_value > 88)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce index value [0..88]");
++	}
++
++	// Aggregation level
++	guint8 aggregation_level_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN);
++	if (!(aggregation_level_value == 1 || aggregation_level_value == 2 || aggregation_level_value == 4 ||
++		  aggregation_level_value == 8 || aggregation_level_value == 16 || aggregation_level_value == 32))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8, 16, 32]");
++	}
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// Resource allocation type
++	guint8 resource_allocation_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	if (resource_allocation_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
++	}
++
++	// Virtual resource block assignment flag
++	guint8 virtual_resource_block_assignment_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN);
++	if (virtual_resource_block_assignment_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++
++	// MCS_1
++	guint8 mcs_1_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN);
++	if (mcs_1_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
++	}
++
++	// Redundancy version_1
++	guint8 redundancy_version_1_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version_1, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_1_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 1 value [0..3]");
++	}
++
++	// New data indicator_1
++	guint8 new_data_indicator_1_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indicator_1, 1, ENC_BIG_ENDIAN);
++	if (new_data_indicator_1_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 1 value [0..1]");
++	}
++
++	// Transport block to codeword swap flag
++	guint8 transport_block_to_codeword_swap_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN);
++	if (transport_block_to_codeword_swap_flag_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
++	}
++
++	// MCS_2
++	guint8 mcs_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN);
++	if (mcs_2_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
++	}
++
++	// Redundancy version_2
++	guint8 redundancy_version_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version_2, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_2_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version 2 value [0..3]");
++	}
++
++	// New Data indicator_2
++	guint8 new_data_indicator_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indicator_2, 1, ENC_BIG_ENDIAN);
++	if (new_data_indicator_2_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator 2 value [0..1]");
++	}
++
++	// HARQ process
++	guint8 harq_process_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN);
++	if (harq_process_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
++	}
++
++	// TPMI
++	guint8 tpmi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN);
++	if (tpmi_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..3]");
++	}
++
++	// PMI
++	guint8 pmi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN);
++	if (pmi_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..2]");
++	}
++
++	// Precoding information
++	guint8 precoding_information_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_precoding_information, 1, ENC_BIG_ENDIAN);
++	if (precoding_information_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid precoding information value [0..15]");
++	}
++
++	// TPC
++	guint8 tpc_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN);
++	if (tpc_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
++	}
++
++	// Downlink assignment index
++	guint8 downlink_assignment_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN);
++	if (downlink_assignment_index_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment value [0..15]");
++	}
++
++	// NGAP
++	guint8 ngap_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN);
++	if (ngap_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
++	}
++
++	// Transport block size index
++	guint8 transport_block_size_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transport_block_size_index, 1, ENC_BIG_ENDIAN);
++	if (transport_block_size_index_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block size index value [0..31]");
++	}
++
++	// Downlink power offset
++	guint8 downlink_power_offset_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_downlink_power_offset, 1, ENC_BIG_ENDIAN);
++	if (downlink_power_offset_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink power offset value [0..1]");
++	}
++
++	// Allocate PRACH flag
++	guint8 allocate_prach_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN);
++	if (allocate_prach_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
++	}
++
++	// Preamble index
++	guint8 preamble_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN);
++	if (preamble_index_value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble index value [0..63]");
++	}
++
++	// PRACH mask index
++	guint8 prach_mask_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN);
++	if (prach_mask_index_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask index value [0..15]");
++	}
++
++	// RNTI type
++	guint8 rnti_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti_type, 1, ENC_BIG_ENDIAN);
++	if (!(rnti_type_value >= 1 && rnti_type_value <= 3))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [1..3]");
++	}
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value value [0..10000]");
++	}
++
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// MCCH flag
++	guint8 mcch_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcch_flag, 1, ENC_BIG_ENDIAN);
++	if (mcch_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcch flag value [0..1]");
++	}
++
++	// MCCH change notification
++	ptvcursor_add(ptvc, hf_nfapi_mcch_change_notification, 1, ENC_BIG_ENDIAN);
++
++	// Scrambling identity
++	guint8 scrambling_identity_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_scrambling_identity, 1, ENC_BIG_ENDIAN);
++	if (scrambling_identity_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid scrambling identity value [0..1]");
++	}
++
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Cross carrier scheduling flag
++	guint8 cross_carrier_scheduling_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
++	if (cross_carrier_scheduling_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cross carrier scheduling flag value [0..1]");
++	}
++
++	// Carrier indicator
++	guint8 carrier_indicator_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN);
++	if (carrier_indicator_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
++	}
++
++	// SRS flag
++	guint8 srs_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
++	if (srs_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs flag value [0..1]");
++	}
++
++	// SRS request
++	guint8 srs_request_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
++	if (srs_request_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs request value [0..1]");
++	}
++
++	// Antenna ports, scrambling and layers
++	guint8 antenna_ports_scrambling_and_layers_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_antenna_ports_scrambling_and_layers, 1, ENC_BIG_ENDIAN);
++	if (antenna_ports_scrambling_and_layers_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports scrambling and layers value [0..15]");
++	}
++
++	// Total DCI length including padding
++	ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
++
++	// N_DL_RB
++	// TODO : This is missing from the encoder....
++	//ptvcursor_add(ptvc, hf_nfapi_n_dl_rb, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// HARQ-ACK resource offset
++	guint8 harq_ack_resource_offset_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_ack_resource_offset, 1, ENC_BIG_ENDIAN);
++	if (harq_ack_resource_offset_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid hack ack resource offset value [0..3]");
++	}
++
++	// PDSCH RE Mapping and Quasi-Co-Location Indicator
++	guint8 pdsch_re_mapping_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator, 1, ENC_BIG_ENDIAN);
++	if (pdsch_re_mapping_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping value [0..3]");
++	}
++
++}
++static void dissect_ul_dl_configuration_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UL/DL configuration indication
++	guint8 ul_dl_configuration_indication_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ul_dl_configuration_index, 1, ENC_BIG_ENDIAN);
++	if (!(ul_dl_configuration_indication_value >= 1 && ul_dl_configuration_indication_value <= 5))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul/dl configuration indication value [1..5]");
++	}
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Primary cell type
++	guint8 primary_cell_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_primary_cell_type, 1, ENC_BIG_ENDIAN);
++	if (primary_cell_type_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid primary cell type value [0..2]");
++	}
++
++	// UL/DL configuration flag
++	guint8 ul_dl_configuration_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_dl_configuration_flag, 1, ENC_BIG_ENDIAN);
++	if (ul_dl_configuration_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul/dl configuration flag value [0..1]");
++	}
++
++	// Number of UL / DL configurations
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ul_dl_configurations, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "UL/DL Configurations", ett_nfapi_pnf_phy, count, dissect_ul_dl_configuration_index_value);
++}
++static void dissect_dl_config_request_dl_dci_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_flag, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_laa_end_partial_sf_configuration, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_codebooksize_determination_r13, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_rel13_drms_table_flag, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_dl_config_request_mch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_mbsfn_area_id, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_codebook_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 codebook_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN);
++	if (codebook_index_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook index value [0..15]");
++	}
++}
++static void dissect_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_bf_vector_bf_value, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_bf_vector_type_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_bf_vector_subband_index, 1, ENC_BIG_ENDIAN);
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_bf_vector_num_antennas, 1, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "Antennas",  ett_nfapi_bf_vector_antennas, count, dissect_bf_vector_value);
++}
++static void dissect_dl_config_request_dlsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// PDU index
++	ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (!(rnti_value >= 1 /* && rnti_value <= 65535)*/))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook index value [1..65535]");
++	}
++
++	// Resource allocation type
++	guint8 resource_allocation_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	if (resource_allocation_type_value > 5)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..5]");
++	}
++
++	// Virtual resource block assignment flag
++	guint8 virtual_resource_block_assignment_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN);
++	if (virtual_resource_block_assignment_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block allocation assignment value [0..1]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++
++	// Modulation
++	guint8 modulation_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN);
++	if (!(modulation_value == 2 || modulation_value == 4 || modulation_value == 6 || modulation_value == 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation value [2, 4, 6, 8]");
++	}
++
++	// Redundancy version
++	guint8 redundancy_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN);
++	if (redundancy_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0..3]");
++	}
++
++	// Transport blocks
++	guint8 transport_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN);
++	if (!(transport_blocks_value >= 1 && transport_blocks_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
++	}
++
++	// Transport block to codeword swap flag
++	guint8 transport_blocks_to_codeword_swap_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN);
++	if (transport_blocks_to_codeword_swap_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport block to codeword swap flag value [0..1]");
++	}
++
++	// Transmission scheme
++	guint8 transmission_scheme_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN);
++	if (transmission_scheme_value > 13)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..13]");
++	}
++
++	// Number of layers
++	guint8 number_of_layers_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_layers_value >= 1 && number_of_layers_value <= 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..8]");
++	}
++
++	// Number of subbands
++	guint8 num_subbands = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN);
++	if (num_subbands > 13)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of subbands value [0..13]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "Subbands", ett_nfapi_subbands, num_subbands, dissect_codebook_index_value);
++
++	// UE category capacity
++	guint8 ue_category_capacity_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN);
++	if (ue_category_capacity_value > 14)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
++	}
++
++	// P-A
++	guint8 pa_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN);
++	if (pa_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value [0..7]");
++	}
++
++	// Delta power offset index
++	guint8 delta_power_offset_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_power_offset_index, 1, ENC_BIG_ENDIAN);
++	if (delta_power_offset_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta power offset value [0..1]");
++	}
++
++	// NGAP
++	guint8 ngap_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN);
++	if (ngap_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
++	}
++
++	// NPRB
++	guint8 nrpb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN);
++	if (nrpb_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
++	}
++
++	// Transmission mode
++	guint8 transmission_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_mode, 1, ENC_BIG_ENDIAN);
++	if (!(transmission_mode_value >= 1 && transmission_mode_value <= 10))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission mode value [1..10]");
++	}
++
++	// numBfPRBperSubband
++	ptvcursor_add(ptvc, hf_nfapi_num_bf_prb_per_subband, 1, ENC_BIG_ENDIAN);
++
++	// numBfVector
++	guint8 num_vectors = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "Beamforming Vectors", ett_nfapi_bf_vectors, num_vectors, dissect_bf_vector_type_value);
++}
++static void dissect_csi_rs_resource_config_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 csi_rs_resource_config_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config, 1, ENC_BIG_ENDIAN);
++	if (csi_rs_resource_config_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource config value [0..31]");
++	}
++}
++static void dissect_dl_config_request_dlsch_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 nscid_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_nscid, 1, ENC_BIG_ENDIAN);
++	if (nscid_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nscid value [0..1]");
++	}
++}
++static void dissect_dl_config_request_dlsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// CSI-RS flag
++	guint8 csi_rs_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_flag, 1, ENC_BIG_ENDIAN);
++	if (csi_rs_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs flag value [0..1]");
++	}
++
++	// CSI-RS resource config R10
++	ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
++
++	// CSI-RS zero Tx power resource config bitmap R10
++	ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
++
++	// CSI-RS Number of NZP configuration
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN);
++	if (count > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..3]");
++	}
++
++	// CSI-RS configuration
++	dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
++
++	// PDSCH start
++	guint8 pdsch_start_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdsch_start, 1, ENC_BIG_ENDIAN);
++	if (pdsch_start_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch start value [0..4]");
++	}
++
++}
++static void dissect_dl_config_request_dlsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DMRS Config flag
++	guint8 drms_config_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN);
++	if (drms_config_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
++	}
++
++	// DMRS-Scrambling
++	guint16 drms_scrambling_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_scrambling, 2, ENC_BIG_ENDIAN);
++	if (drms_scrambling_value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling value [0..503]");
++	}
++
++	// CSI Config flag
++	guint8 csi_config_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_config_flag, 1, ENC_BIG_ENDIAN);
++	if (csi_config_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi config flag value [0..1]");
++	}
++
++	// CSI- Scrambling
++	guint16 csi_scrambling_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_scrambling, 2, ENC_BIG_ENDIAN);
++	if (csi_scrambling_value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi scrambling value [0..503]");
++	}
++
++	// PDSCH RE mapping flag
++	guint8 pdsch_re_mapping_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_re_mapping_flag, 1, ENC_BIG_ENDIAN);
++	if (pdsch_re_mapping_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping flag value [0..1]");
++	}
++
++	// PDSCH RE mapping antenna ports
++	guint8 pdsch_re_mapping_antenna_ports_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_re_mapping_antenna_ports, 1, ENC_BIG_ENDIAN);
++	if (!(pdsch_re_mapping_antenna_ports_value == 1 || pdsch_re_mapping_antenna_ports_value == 2 ||
++		  pdsch_re_mapping_antenna_ports_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping antenna ports value [1, 2, 4]");
++	}
++
++	// PDSCH RE mapping freq shift
++	guint8 pdsch_re_mapping_freq_shift_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_re_mapping_freq_shift, 1, ENC_BIG_ENDIAN);
++	if (pdsch_re_mapping_freq_shift_value > 5)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch re mapping freq shift value [0..5]");
++	}
++}
++static void dissect_dl_config_request_dlsch_pdu_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// altCQI-Table-r12
++	guint8 alt_cqi_table_r12_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_alt_cqi_table_r12, 1, ENC_BIG_ENDIAN);
++	if (alt_cqi_table_r12_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid alt cqi table r12 value [0..1]");
++	}
++
++	// MaxLayers
++	guint8 max_layers_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_max_layers, 1, ENC_BIG_ENDIAN);
++	if (!(max_layers_value >= 1 && max_layers_value <= 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid max layers value [1..8]");
++	}
++
++	ptvcursor_add(ptvc, hf_nfapi_n_dl_harq, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_dl_config_request_dlsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DwPTS Symbols
++	guint8 dwpts_symbols_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN);
++	if (!(dwpts_symbols_value == 3 || dwpts_symbols_value == 6 || dwpts_symbols_value == 9 ||
++		dwpts_symbols_value == 10 || dwpts_symbols_value == 11 || dwpts_symbols_value == 12 ||
++		dwpts_symbols_value == 14))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
++	}
++
++	// Initial LBT SF
++	guint8 initial_lbt_sf_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN);
++	if (initial_lbt_sf_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
++	}
++
++	// UE Type
++	guint8 ue_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN);
++	if (ue_type_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
++	}
++
++	// PDSCH Payload Type
++	guint8 pdsch_payload_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_payload_type, 1, ENC_BIG_ENDIAN);
++	if (pdsch_payload_type_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch payload type value [0..2]");
++	}
++
++	// Initial transmission SF (io)
++	guint16 initial_transmission_sf_io_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN);
++	if (!(initial_transmission_sf_io_value <= 10239 || initial_transmission_sf_io_value == 0xFFFF))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
++	}
++
++	// Rel-13-DMRS-tabe flag
++	guint8 rel13_drms_table_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_req13_drms_table_flag, 1, ENC_BIG_ENDIAN);
++	if (rel13_drms_table_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rel13 drms table flag value [0..1]");
++	}
++}
++static void dissect_dl_config_request_pch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// PDU index
++	ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
++
++	// P-RNTI
++	guint16 prnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_prnti, 2, ENC_BIG_ENDIAN);
++	if (prnti_value != 0xFFFE)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prnti value [0xFFFE]");
++	}
++
++	// Resource allocation type
++	guint8 resource_allocation_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	if (!(resource_allocation_type_value == 2 || resource_allocation_type_value == 3 || resource_allocation_type_value == 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocate type value [2, 3, 6]");
++	}
++
++	// Virtual resource block assignment flag
++	guint8 virtual_resource_block_assignment_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_virtual_resource_block_assignment_flag, 1, ENC_BIG_ENDIAN);
++	if (virtual_resource_block_assignment_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual resource block assignment flag value [0..1]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++
++	// MCS
++	guint8 mcs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN);
++	if (mcs_value != 0)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0]");
++	}
++
++	// Redundancy version
++	guint8 redundancy_version_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_value != 0)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy value [0]");
++	}
++
++	// Number of transport blocks
++	guint8 number_of_transport_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_transport_blocks, 1, ENC_BIG_ENDIAN);
++	if (number_of_transport_blocks_value != 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1]");
++	}
++
++	// Transport block to codeword swap flag
++	ptvcursor_add(ptvc, hf_nfapi_transport_block_to_codeword_swap_flag, 1, ENC_BIG_ENDIAN);
++
++	// Transmission scheme
++	guint8 transmission_scheme_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_scheme, 1, ENC_BIG_ENDIAN);
++	if (!(transmission_scheme_value == 0 || transmission_scheme_value == 1 || transmission_scheme_value == 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission schemes value [0, 1, 6]");
++	}
++
++	// Number of layers
++	guint8 number_of_layers_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_layers_value >= 1 && number_of_layers_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
++	}
++
++	// Codebook index
++	ptvcursor_add(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN);
++
++	// UE category capacity
++	guint8 ue_category_capacity_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_category_capacity, 1, ENC_BIG_ENDIAN);
++	if (ue_category_capacity_value > 14)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue category capacity value [0..14]");
++	}
++
++	// P-A
++	guint8 p_a_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pa, 1, ENC_BIG_ENDIAN);
++	if (p_a_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid p-a value value [0..7]");
++	}
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++	// NPRB
++	guint8 nprb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN);
++	if (nprb_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid nprb value [0..1]");
++	}
++
++	// NGAP
++	guint8 ngap_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ngap, 1, ENC_BIG_ENDIAN);
++	if (ngap_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ngap value [0..1]");
++	}
++
++}
++static void dissect_dl_config_request_pch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// UE mode
++	guint8 ue_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_mode, 1, ENC_BIG_ENDIAN);
++	if (ue_mode_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue mode value [0..1]");
++	}
++
++	// Initial transmission SF (io)
++	guint16 initial_transmission_sf_io_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN);
++	if (!(initial_transmission_sf_io_value <= 10239 || initial_transmission_sf_io_value == 0xFFFF))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
++	}
++}
++static void dissect_dl_config_request_prs_pdu_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++	// PRS bandwidth
++	guint8 prs_bandwidth_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_prs_bandwidth, 1, ENC_BIG_ENDIAN);
++	if (!(prs_bandwidth_value == 6 || prs_bandwidth_value == 15 || prs_bandwidth_value == 25 ||
++		  prs_bandwidth_value == 50 || prs_bandwidth_value == 75 || prs_bandwidth_value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prs bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++
++	// PRS cyclic prefix type
++	guint8 prs_cyclic_prefix_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_prs_cyclic_prefix_type, 1, ENC_BIG_ENDIAN);
++	if (prs_cyclic_prefix_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prs cyclic prefix value [0..1]");
++	}
++
++	// PRS muting
++	guint8 prs_muting_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_prs_muting, 1, ENC_BIG_ENDIAN);
++	if (prs_muting_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prs muting value [0..1]");
++	}
++}
++static void dissect_dl_config_request_csi_rs_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// CSI-RS antenna port count R10
++	guint8 csi_rs_antenna_port_count_r10_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_antenna_port_count_r10, 1, ENC_BIG_ENDIAN);
++	if (!(csi_rs_antenna_port_count_r10_value == 1 || csi_rs_antenna_port_count_r10_value == 2 ||
++		  csi_rs_antenna_port_count_r10_value == 4 || csi_rs_antenna_port_count_r10_value == 8 ||
++		  csi_rs_antenna_port_count_r10_value == 12 || csi_rs_antenna_port_count_r10_value == 16))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi rs antenna port count r10 value [1, 2, 4, 6, 8, 10]");
++	}
++
++	// CSI-RS resource config R10
++	ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_config_r10, 1, ENC_BIG_ENDIAN);
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++	// CSI-RS zero Tx power resource config bitmap R10
++	ptvcursor_add(ptvc, hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, 2, ENC_BIG_ENDIAN);
++
++	// CSI-RS Number of NZP configuration
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_number_of_nzp_configurations, 1, ENC_BIG_ENDIAN);
++	if (count > 8)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs number of nzp configuration value [0..8]");
++	}
++
++	// CSI-RS configuration
++	dissect_array_value(ptvc, pinfo, "CSI-RS Resource Configs", ett_nfapi_csi_rs_resource_configs, count, dissect_csi_rs_resource_config_value);
++}
++static void dissect_csi_rs_bf_vector_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_resource_index, 1, ENC_BIG_ENDIAN);
++	if (count > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi-rs resource index value [0..7]");
++	}
++
++	// todo : how to work out the antenna port count for the bfValue
++}
++static void dissect_dl_config_request_csi_rs_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Class
++	guint8 class_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_rs_class, 1, ENC_BIG_ENDIAN);
++	if (class_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid class value [0..2]");
++	}
++
++	// cdmType
++	guint8 cdm_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cdm_type, 1, ENC_BIG_ENDIAN);
++	if (cdm_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm type value [0..1]");
++	}
++
++	// numBfVector
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_num_bf_vector, 1, ENC_BIG_ENDIAN);
++	if (!((class_value == 1 && count == 0) || (class_value == 2 && count <= 8)))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num bf vector value [0] or [0..8]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "Beamforming Vector", ett_nfapi_csi_rs_bf_vector, count, dissect_csi_rs_bf_vector_value);
++}
++static void dissect_epdcch_prb_index_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// EPDCCH PRB index
++	guint8 epdcch_prb_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_edpcch_prb_index, 1, ENC_BIG_ENDIAN);
++	if (epdcch_prb_index_value > 99)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch prb_index value [0..99]");
++	}
++}
++static void dissect_dl_config_request_edpcch_params_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// EPDCCH Resource assignment flag
++	guint8 epdcch_resource_assignment_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_epdcch_resource_assignment_flag, 1, ENC_BIG_ENDIAN);
++	if (epdcch_resource_assignment_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch resource assignment flag value [0..1]");
++	}
++
++	// EPDCCH ID
++	guint16 epdcch_id_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_epdcch_id, 2, ENC_BIG_ENDIAN);
++	if (epdcch_id_value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch id value [0..503]");
++	}
++
++	// EPDCCH Start Symbol
++	guint8 epdcch_start_symbol_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_epdcch_start_symbol, 1, ENC_BIG_ENDIAN);
++	if (!(epdcch_start_symbol_value >= 1 && epdcch_start_symbol_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch start symbol value [1..4]");
++	}
++
++	// EPDCCH NumPRB
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_epdcch_num_prb, 1, ENC_BIG_ENDIAN);
++	if (!(count == 2 || count == 4 || count == 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid epdcch num prb value [2, 4, 8]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "PRBs", ett_nfapi_epdcch_prbs, count, dissect_epdcch_prb_index_value);
++
++	dissect_bf_vector_type_value(ptvc, pinfo);
++}
++static void dissect_dl_config_request_edpcch_params_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DwPTS Symbols
++	guint8 dwtps_symbols_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_lbt_sf, 1, ENC_BIG_ENDIAN);
++	if (!(dwtps_symbols_value == 3 || dwtps_symbols_value == 6 || dwtps_symbols_value == 9 ||
++		dwtps_symbols_value == 10 || dwtps_symbols_value == 11 || dwtps_symbols_value == 12 ||
++		dwtps_symbols_value == 14))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dwpts symbols value [3, 6, 9, 10, 11, 12, 14]");
++	}
++
++	// Initial LBT SF
++	guint8 initial_lbt_sf_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dwpts_symbols, 1, ENC_BIG_ENDIAN);
++	if (initial_lbt_sf_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial lbt sf value [0..1]");
++	}
++
++}
++static void dissect_precoding_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add(ptvc, hf_nfapi_precoding_value, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_dl_config_request_mpdpcch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// MPDCCH Narrowband
++	guint8 mpdcch_narrowband_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN);
++	if (mpdcch_narrowband_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
++	}
++
++	// Number of PRB pairs
++	guint8 number_of_prb_pair_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_prb_pair_value == 2 || number_of_prb_pair_value == 4 || number_of_prb_pair_value == 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pair value [2, 4, 6]");
++	}
++
++	// Resource Block Assignment
++	guint8 resource_block_assignment_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN);
++	if (resource_block_assignment_value > 14)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
++	}
++
++	// MPDCCH transmission type
++	guint8 mpdcch_transmission_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN);
++	if (mpdcch_transmission_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
++	}
++
++	// Start symbol
++	guint8 start_symbol_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN);
++	if (!(start_symbol_value >= 1 && start_symbol_value <=4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [1..4]");
++	}
++
++	// ECCE index
++	guint8 ecce_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN);
++	if (ecce_index_value > 22)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce index value [0..22]");
++	}
++
++	// Aggregation level
++	guint8 aggregation_level_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN);
++	if (!(aggregation_level_value == 2 || aggregation_level_value == 4 || aggregation_level_value == 8 ||
++		aggregation_level_value == 16 || aggregation_level_value == 24))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
++	}
++
++	// RNTI type
++	guint8 rnti_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN);
++	if (rnti_type_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0..4]");
++	}
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (!(rnti_value >= 1))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// CEMode
++	guint8 cemode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN);
++	if (!(cemode_value >= 1 && cemode_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1..2]");
++	}
++
++	// DMRS scrambling init
++	guint16 drms_scrambling_init_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_scrabmling_init, 2, ENC_BIG_ENDIAN);
++	if (drms_scrambling_init_value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
++	}
++
++	// Initial transmission SF (io)
++	guint16 initial_transmission_sf_io_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN);
++	if (!(initial_transmission_sf_io_value <= 10239 || initial_transmission_sf_io_value == 0xFFFF))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
++	}
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++	// DCI format
++	guint8 dci_format_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dl_dci_format, 1, ENC_BIG_ENDIAN);
++	if (!(dci_format_value == 10 || dci_format_value == 11 || dci_format_value == 12))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [10, 11, 12]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 2, ENC_BIG_ENDIAN);
++
++	// MCS
++	guint8 mcs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN);
++	if (mcs_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..15]");
++	}
++
++	// PDSCH repetition levels
++	guint8 pdsch_repetition_levels_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pdsch_reception_levels, 1, ENC_BIG_ENDIAN);
++	if (!(pdsch_repetition_levels_value >= 1 && pdsch_repetition_levels_value <= 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdsch repetition levels value [1..8]");
++	}
++
++	// Redundancy version
++	guint8 redundancy_version_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
++	}
++
++	// New data indicator
++	guint8 new_data_indicator_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indicator, 1, ENC_BIG_ENDIAN);
++	if (new_data_indicator_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
++	}
++
++	// HARQ process
++	guint8 harq_process_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN);
++	if (harq_process_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..15]");
++	}
++
++	// TPMI length
++	guint8 tpmi_length_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpmi_length, 1, ENC_BIG_ENDIAN);
++	if (!(tpmi_length_value == 0 || tpmi_length_value == 2 || tpmi_length_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi length value [0, 2, 4]");
++	}
++
++	// TPMI
++	guint8 tpmi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN);
++	if (tpmi_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..15]");
++	}
++
++	// PMI flag
++	guint8 pmi_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pmi_flag, 1, ENC_BIG_ENDIAN);
++	if (pmi_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pmi flag value [0..1]");
++	}
++
++	// PMI
++	guint8 pmi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pmi, 1, ENC_BIG_ENDIAN);
++	if (pmi_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pmi value [0..1]");
++	}
++
++	// HARQ resource offset
++	guint8 harq_resource_offset_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_resource_offset, 1, ENC_BIG_ENDIAN);
++	if (harq_resource_offset_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq resource offset value [0..3]");
++	}
++
++	// DCI subframe repetition number
++	guint8 dci_subframe_reptition_number_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN);
++	if (!(dci_subframe_reptition_number_value >= 1 && dci_subframe_reptition_number_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
++	}
++
++	// TPC
++	guint8 tpc_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN);
++	if (tpc_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
++	}
++
++	// Downlink assignment index Length
++	guint8 downlink_assignment_index_length_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_downlink_assignment_index_length, 1, ENC_BIG_ENDIAN);
++	if (!(downlink_assignment_index_length_value == 0 || downlink_assignment_index_length_value == 2 ||
++		downlink_assignment_index_length_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignmnet index value [0, 2, 4]");
++	}
++
++	// Downlink assignment index
++	guint8 downlink_assignment_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_downlink_assignment_index, 1, ENC_BIG_ENDIAN);
++	if (downlink_assignment_index_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid downlink assignment index value [0..15]");
++	}
++
++	// Allocate PRACH flag
++	guint8 allocate_prach_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_allocate_prach_flag, 1, ENC_BIG_ENDIAN);
++	if (allocate_prach_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid allocate prach flag value [0..1]");
++	}
++
++	// Preamble index
++	guint8 preamble_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_preamble_index, 1, ENC_BIG_ENDIAN);
++	if (preamble_index_value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble index value [0..63]");
++	}
++
++	// PRACH mask index
++	guint8 prach_mask_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_prach_mask_index, 1, ENC_BIG_ENDIAN);
++	if (prach_mask_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid prach mask index value [0..15]");
++	}
++
++	// Starting CE Level
++	guint8 starting_ce_level_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_starting_ce_level, 1, ENC_BIG_ENDIAN);
++	if (starting_ce_level_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting ce level value [0..3]");
++	}
++
++	// SRS request
++	guint8 srs_request_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
++	if (srs_request_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs request value [0..1]");
++	}
++
++	// Antenna ports and scrambling identity flag
++	guint8 antenna_ports_and_scrambling_identity_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity_flag, 1, ENC_BIG_ENDIAN);
++	if (antenna_ports_and_scrambling_identity_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports and scrambling identity flag value [0..1]");
++	}
++
++	// Antenna ports and scrambling identity
++	guint8 antenna_ports_and_scrambling_identity_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_antenna_ports_and_scrambling_identity, 1, ENC_BIG_ENDIAN);
++	if (antenna_ports_and_scrambling_identity_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna ports and scrambling identity value [0..3]");
++	}
++
++	// Frequency hopping enabled flag
++	guint8 frequency_hopping_enabled_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_enabled_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
++	}
++
++	// Paging/Direct indication differentiation flag
++	guint8 paging_direct_indicaton_differentiation_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_paging_direct_indication_differentiation_flag, 1, ENC_BIG_ENDIAN);
++	if (paging_direct_indicaton_differentiation_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid paging/direct indication differentiation flag value [0..1]");
++	}
++
++	// Direct indication
++	ptvcursor_add(ptvc, hf_nfapi_direct_indication, 1, ENC_BIG_ENDIAN);
++
++	// Total DCI length including padding
++	item = ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
++
++	// Number of TX Antenna ports
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "Precoding", ett_nfapi_precoding, count, dissect_precoding_value);
++}
++static void dissect_ul_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PDU Type
++	guint8 ul_pdu_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_config_pdu_type, 1, ENC_BIG_ENDIAN);
++	if (ul_pdu_type_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul pdu type value [0..15]");
++	}
++
++	guint8 size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN);
++
++	guint pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
++	dissect_tlv_list(ptvc, pinfo, pdu_end);
++}
++static void  dissect_ul_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Number of PDUs
++	guint8 num_pdu = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_pdus, 1, ENC_BIG_ENDIAN);
++
++	// RACH/PRACH frequency resources
++	guint8 rach_prach_frequency_resources_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rach_prach_frequency_resources, 1, ENC_BIG_ENDIAN);
++	if (rach_prach_frequency_resources_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach prach frequency resources value [0..1]");
++	}
++
++	// SRS present
++	guint8 srs_present_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_present, 1, ENC_BIG_ENDIAN);
++	if (srs_present_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs present value [0..1]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "UL Config PDU List", ett_nfapi_ul_config_request_pdu_list, num_pdu, dissect_ul_config_pdu);
++}
++static void dissect_ul_config_ulsch_pdu_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// Size
++	ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (!(rnti_value >= 1))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// Resource block start
++	guint8 resource_block_start_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN);
++	if (resource_block_start_value > 99)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
++	}
++
++	// Number of resource blocks
++	guint8 number_of_resource_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_resource_blocks_value >= 1 && number_of_resource_blocks_value <= 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..100]");
++	}
++
++	// Modulation type
++	guint8 modulation_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_modulation, 1, ENC_BIG_ENDIAN);
++	if (!(modulation_type_value == 2 || modulation_type_value == 4 || modulation_type_value ==  6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid modulation type value [2, 4, 6]");
++	}
++
++	// Cyclic Shift 2 for DMRS
++	guint8 cyclic_shift_2_for_drms_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN);
++	if (cyclic_shift_2_for_drms_value > 99)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
++	}
++
++	// Frequency hopping enabled flag
++	guint8 frequency_hopping_enabled_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_enabled_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
++	}
++
++	// Frequency hopping bits
++	guint8 frequency_hopping_bits_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_bits_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
++	}
++
++	// New data indication
++	guint8 new_data_indication_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN);
++	if (new_data_indication_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indicator value [0..1]");
++	}
++
++	// Redundancy version
++	guint8 redundancy_version_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
++	}
++
++	// HARQ process number
++	guint8 harq_process_number_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_process_number, 1, ENC_BIG_ENDIAN);
++	if (harq_process_number_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process number value [0..15]");
++	}
++
++	// UL Tx mode
++	guint8 ul_tx_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_tx_mode, 1, ENC_BIG_ENDIAN);
++	if (ul_tx_mode_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul tx mode value [0..1]");
++	}
++
++	// Current TX NB
++	ptvcursor_add(ptvc, hf_nfapi_current_tx_nb, 1, ENC_BIG_ENDIAN);
++
++	// N srs
++	guint8 n_srs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_srs, 1, ENC_BIG_ENDIAN);
++	if (n_srs_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n_srs value [0..1]");
++	}
++}
++static void dissect_ul_config_ulsch_pdu_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Resource allocation type
++	guint8 resource_allocation_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	if (resource_allocation_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++
++	// Transport blocks
++	guint8 transport_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transport_blocks, 1, ENC_BIG_ENDIAN);
++	if (!(transport_blocks_value >= 1 && transport_blocks_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transport blocks value [1..2]");
++	}
++
++	// Transmission scheme
++	guint8 transmission_scheme_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_transmission_scheme, 1, ENC_BIG_ENDIAN);
++	if (transmission_scheme_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission scheme value [0..1]");
++	}
++
++	// Number Of layers
++	guint8 number_of_layers_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_layers, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_layers_value >= 1 && number_of_layers_value <=4 ))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of layers value [1..4]");
++	}
++
++	// Codebook Index
++	guint8 codebook_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_codebook_index, 1, ENC_BIG_ENDIAN);
++	if (codebook_index_value > 23)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid codebook index value [0..23]");
++	}
++
++	// Disable sequence hopping flag
++	guint8 disable_sequence_hopping_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_disable_sequence_hopping_flag, 1, ENC_BIG_ENDIAN);
++	if (disable_sequence_hopping_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid disable sequence hopping flag value [0..1]");
++	}
++}
++static void dissect_ul_config_ulsch_pdu_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Virtual cell ID enabled flag
++	guint8 virtual_cell_id_enabled_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN);
++	if (virtual_cell_id_enabled_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
++	}
++
++	// nPUSCH Identity
++	guint16 npusch_identity_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_npusch_identity, 2, ENC_BIG_ENDIAN);
++	if (npusch_identity_value > 509)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npusch identity value [0..509]");
++	}
++
++	// DMRS Config flag
++	guint8 drms_config_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_config_flag, 1, ENC_BIG_ENDIAN);
++	if (drms_config_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms config flag value [0..1]");
++	}
++
++	// nDMRS-CSH Identity
++	guint16 ndrms_csh_identity_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ndrms_csh_identity, 2, ENC_BIG_ENDIAN);
++	if (ndrms_csh_identity_value > 509)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ndrms-csh identity value [0..509]");
++	}
++
++}
++static void dissect_ul_config_ulsch_pdu_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// UE Type
++	guint8 ue_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN);
++	if (ue_type_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
++	}
++
++	// Total Number of repetitions
++	guint16 total_number_of_repetitions_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN);
++	if (!(total_number_of_repetitions_value >= 1 && total_number_of_repetitions_value <= 2048))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..2048]");
++	}
++
++	// Repetition Number
++	guint16 repetition_number_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN);
++	if (!(repetition_number_value >= 1 && repetition_number_value <= 2048))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..2048]");
++	}
++
++	// Initial transmission SF (io)
++	guint16 intial_transmission_sf_io_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_sf_io, 2, ENC_BIG_ENDIAN);
++	if (!(intial_transmission_sf_io_value <= 10239 || intial_transmission_sf_io_value == 0xFFFF))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [0..10239, 0xFFFF]");
++	}
++
++	// Empy symbols due to re-tunning
++	// todo : decode as a bitmap
++	ptvcursor_add(ptvc, hf_nfapi_empty_symbols_due_to_retunning, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_ul_config_init_tx_params_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// N srs initial
++	guint8 n_srs_initial_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_srs_initial, 1, ENC_BIG_ENDIAN);
++	if (n_srs_initial_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs initial value [0..1]");
++	}
++
++	// Initial number of resource blocks
++	guint8 initial_number_of_resource_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_number_of_resource_blocks, 1, ENC_BIG_ENDIAN);
++	if (!(initial_number_of_resource_blocks_value >= 1 && initial_number_of_resource_blocks_value <= 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial number of reosurce blocks value [1..100]");
++	}
++
++}
++static void dissect_ul_config_cqi_ri_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DL CQI/PMI Size Rank = 1
++	ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_1, 1, ENC_BIG_ENDIAN);
++
++	// DL CQI/PMI Size Rank>1
++	ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_rank_greater_1, 1, ENC_BIG_ENDIAN);
++
++	// RI Size
++	guint8 ri_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN);
++	if (ri_size_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri size value [0..3]");
++	}
++
++	// Delta Offset CQI
++	guint8 delta_offset_cqi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_cqi_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
++	}
++
++	// Delta Offset RI
++	guint8 delta_offset_ri_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_ri_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
++	}
++}
++static void dissect_ul_cqi_pmi_size(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Delta Offset RI
++	guint8 dl_cqi_pmi_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN);
++	if (dl_cqi_pmi_size_value > 255)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..255]");
++	}
++}
++
++static void dissect_ul_config_cqi_ri_info_rel9_later_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++	// Report type
++	guint8 type = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_report_type, 1, ENC_BIG_ENDIAN);
++	if (type > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid report type value [0..1]");
++	}
++
++	// Delta offset CQI
++	guint8 delta_offset_cqi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_cqi, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_cqi_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset cqi value [0..15]");
++	}
++
++	// Delta offset RI
++	guint8 delta_offset_ri_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_ri, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_ri_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset ri value [0..15]");
++	}
++
++	switch (type)
++	{
++		case 0:
++		{
++			// DL CQI/PMI/RI size
++			ptvcursor_add(ptvc, hf_nfapi_dl_cqi_ri_pmi_size, 1, ENC_BIG_ENDIAN);
++
++			// Control Type
++			guint8 control_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++			ptvcursor_add(ptvc, hf_nfapi_control_type, 1, ENC_BIG_ENDIAN);
++			if (control_type_value > 1)
++			{
++				expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid control type value [0..1]");
++			}
++			break;
++		}
++		case 1:
++		{
++			// todo : encoder not right for this case.
++			gint8 num_cc_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++			ptvcursor_add(ptvc, hf_nfapi_number_of_cc, 1, ENC_BIG_ENDIAN);
++
++			if (!(num_cc_value >= 1 && num_cc_value <= 32))
++			{
++				expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of cc value [1..32]");
++			}
++
++                        // UL CONFIG CQI PMI SIZE
++                        dissect_array_value(ptvc, pinfo, "CQI PMI SIZE", ett_nfapi_cqi_pmi_size, 8, dissect_ul_cqi_pmi_size);
++
++			/*
++			ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "CCs");
++
++			for (int i = 0; i < num_cc; ++i)
++			{
++				ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", i);
++
++				guint8 ri_size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++				ptvcursor_add(ptvc, hf_nfapi_ri_size, 1, ENC_BIG_ENDIAN);
++
++				ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Rank");
++
++				for (int j = 0; j < ri_size; ++j)
++				{
++					ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "[%d]", j);
++					ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
++					ptvcursor_pop_subtree(ptvc);
++				}
++
++				ptvcursor_pop_subtree(ptvc);
++
++				ptvcursor_pop_subtree(ptvc);
++			}
++
++			ptvcursor_pop_subtree(ptvc);
++			*/
++
++			break;
++		}
++	}
++}
++static void dissect_ul_config_cqi_ri_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// DL CQI/PMI/RI size 2
++	guint16 dl_cqi_ri_pmi_size_2_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_dl_cqi_ri_pmi_size_2, 2, ENC_BIG_ENDIAN);
++	if (dl_cqi_ri_pmi_size_2_value < 255)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl cqi ri pmi size 2 value [>= 255]");
++	}
++}
++static void dissect_ul_config_harq_info_ulsch_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// HARQ Size
++	guint8 harq_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN);
++	if (harq_size_value > 21)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
++	}
++
++	// Delta Offset HARQ
++	guint8 delta_offset_harq_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_harq, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_harq_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq value [0..15]");
++	}
++
++	// ACK_NACK mode
++	guint8 ack_nack_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value > 5)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
++	}
++}
++static void dissect_ul_config_harq_info_ulsch_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// HARQ Size 2
++	ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
++
++	// Delta Offset HARQ 2
++	guint8 delta_offset_harq_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_delta_offset_harq_2, 1, ENC_BIG_ENDIAN);
++	if (delta_offset_harq_2_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid delta offset harq 2 value [0..15]");
++	}
++}
++static void dissect_ul_config_ue_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++}
++static void dissect_ul_config_ue_info_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Virtual cell ID enabled flag
++	guint8 virtual_cell_id_enabled_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_virtual_cell_id_enabled_flag, 1, ENC_BIG_ENDIAN);
++	if (virtual_cell_id_enabled_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid virtual cell id enabled flag value [0..1]");
++	}
++
++	// nPUCCH Identity
++	guint16 npucch_identity_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_npucch_identity, 2, ENC_BIG_ENDIAN);
++	if (npucch_identity_value > 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch identity value [0..503]");
++	}
++
++}
++static void dissect_ul_config_ue_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// UE Type
++	guint8 ue_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_type, 1, ENC_BIG_ENDIAN);
++	if (ue_type_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue type value [0..2]");
++	}
++
++	// Empty symbols
++	// todo : use bit map decoding
++	ptvcursor_add(ptvc, hf_nfapi_empty_symbols, 1, ENC_BIG_ENDIAN);
++
++	// Total Number of repetitions
++	guint16 total_number_of_repetitions_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_total_number_of_repetitions, 2, ENC_BIG_ENDIAN);
++	if (!(total_number_of_repetitions_value >= 1 && total_number_of_repetitions_value <= 32))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid total number of repetitions value [1..32]");
++	}
++
++	// Repetition Number
++	guint16 repetition_number_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_repetition_number, 2, ENC_BIG_ENDIAN);
++	if (!(repetition_number_value >= 1 && repetition_number_value <= 32))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid repetition number value [1..32]");
++	}
++
++}
++static void dissect_ul_config_cqi_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PUCCH index
++	guint16 pucch_index_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pucch_index, 2, ENC_BIG_ENDIAN);
++	if (pucch_index_value > 1184)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch index value [0..1184]");
++	}
++
++	// DL CQI/PMI Size
++	ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_ul_config_cqi_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Number of PUCCH Resources
++	guint8 number_of_pucch_resources_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_pucch_resources_value >= 1 && number_of_pucch_resources_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [1..2]");
++	}
++
++	//PUCCH Index P1
++	guint16 pucch_index_p1_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN);
++	if (pucch_index_p1_value > 1184)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch index p1 value [0..1184]");
++	}
++}
++static void dissect_ul_config_cqi_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// CSI_mode
++	guint8 csi_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_mode, 1, ENC_BIG_ENDIAN);
++	if (csi_mode_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi mode value [0..2]");
++	}
++
++	// DL CQI/PMI Size 2
++	ptvcursor_add(ptvc, hf_nfapi_dl_cqi_pmi_size_2, 2, ENC_BIG_ENDIAN);
++
++	// Starting PRB
++	guint8 starting_prb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_statring_prb, 1, ENC_BIG_ENDIAN);
++	if (starting_prb_value > 109)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
++	}
++
++	// n_PRB
++	guint8 n_prb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN);
++	if (n_prb_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
++	}
++
++	// cdm_Index
++	guint8 cdm_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN);
++	if (cdm_index_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm index value [0..1]");
++	}
++
++	// N srs
++	guint8 n_srs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN);
++	if (n_srs_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
++	}
++
++}
++static void dissect_ul_config_sr_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 pucch_index_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_pucch_index, 2, ENC_BIG_ENDIAN);
++	if (pucch_index_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch index value [0..2047]");
++	}
++}
++static void dissect_ul_config_sr_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Number of PUCCH Resources
++	guint8 number_of_pucch_resources_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_pucch_resources_value >= 1 && number_of_pucch_resources_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [0..2047]");
++	}
++
++	// PUCCH Index P1
++	guint16 pucch_index_p1_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pucch_index_p1, 2, ENC_BIG_ENDIAN);
++	if (pucch_index_p1_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pucch index p1 value [0..2047]");
++	}
++}
++static void dissect_ul_config_harq_info_uci_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// HARQ size
++	guint8 harq_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN);
++	if (harq_size_value > 21)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0..21]");
++	}
++
++	// ACK_NACK mode
++	guint8 ack_nack_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tdd_ack_nack_mode, 1, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value > 5)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..5]");
++	}
++
++	// Number of PUCCH resources
++	guint8 number_of_pucch_resources_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN);
++	if (number_of_pucch_resources_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pucch resources value [0..4]");
++	}
++
++	// n_PUCCH_1_0
++	guint16 npucch_1_0_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
++	{
++		if (npucch_1_0_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047] (All Format 1a/1b)");
++		}
++	}
++	else if (ack_nack_mode_value == 3)
++	{
++		if (npucch_1_0_value > 549)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..549] (Format 3)");
++		}
++	}
++
++	// n_PUCCH_1_1
++	guint16 npucch_1_1_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1 || ack_nack_mode_value == 2)
++	{
++		if (npucch_1_1_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 1 value [0..2047] (All Format 1a/1b)");
++		}
++	}
++
++	// n_PUCCH_1_2
++	guint16 npucch_1_2_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 2)
++	{
++		if (npucch_1_2_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 2 value [0..2047] (All Format 1a/1b)");
++		}
++	}
++
++	// n_PUCCH_1_3
++	guint16 npucch_1_3_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 2)
++	{
++		if (npucch_1_3_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 3 value [0..2047] (All Format 1a/1b)");
++		}
++	}
++}
++static void dissect_ul_config_harq_info_uci_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// n_PUCCH_1_0
++	// todo : how to work out the ack_nack mode?
++	guint16 npucch_1_0_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN);
++	if (npucch_1_0_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n pucch 1 0 value [0..2047]");
++	}
++
++	// HARQ Size
++	guint8 harq_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN);
++	if (!(harq_size_value >= 1 && harq_size_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..2]");
++	}
++}
++static void dissect_ul_config_harq_info_uci_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// HARQ Size
++	guint8 harq_size_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* harq_size_item = ptvcursor_add(ptvc, hf_nfapi_harq_size, 1, ENC_BIG_ENDIAN);
++
++	// ACK_NAK mode
++	guint8 ack_nack_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_fdd_ack_nack_mode, 1, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ack nack mode value [0..4]");
++	}
++
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 2)
++	{
++		if (!(harq_size_value >= 1 && harq_size_value <= 10))
++		{
++			expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [1..10] (Format 1a/1b/3)");
++		}
++	}
++	else if (ack_nack_mode_value == 3 ||  ack_nack_mode_value == 4)
++	{
++		if (harq_size_value != 0)
++		{
++			expert_add_info_format(pinfo, harq_size_item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
++		}
++	}
++
++	// Number of PUCCH Resources
++	guint8 number_of_pucch_resources_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_pucch_resource, 1, ENC_BIG_ENDIAN);
++	if (number_of_pucch_resources_value == 0 || number_of_pucch_resources_value == 2)
++	{
++		if (!(number_of_pucch_resources_value >= 1 && number_of_pucch_resources_value <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [1..4] (Format 1a/1b/3)");
++		}
++	}
++	else if (number_of_pucch_resources_value == 3 || number_of_pucch_resources_value == 4)
++	{
++		if (number_of_pucch_resources_value != 0)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq size value [0] (Format 4/5)");
++		}
++	}
++
++	// n_PUCCH_1_0
++	guint16 npucch_1_0_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_0, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
++	{
++		if (npucch_1_0_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..2047] (Format 1a/1b/channel selection)");
++		}
++	}
++	else if (ack_nack_mode_value == 2)
++	{
++		if (npucch_1_0_value > 549)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 0 value [0..549] (Format 3)");
++		}
++	}
++
++	// n_PUCCH_1_1
++	guint16 npucch_1_1_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_1, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
++	{
++		if (npucch_1_1_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 1 value [0..2047] (Format 1a/1b/channel selection)");
++		}
++	}
++
++	// n_PUCCH_1_2
++	guint16 npucch_1_2_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_2, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
++	{
++		if (npucch_1_2_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 2 value [0..2047] (Format 1a/1b/channel selection)");
++		}
++	}
++
++	// n_PUCCH_1_3
++	guint16 npucch_1_3_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_1_3, 2, ENC_BIG_ENDIAN);
++	if (ack_nack_mode_value == 0 || ack_nack_mode_value == 1)
++	{
++		if (npucch_1_3_value > 2047)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 1 3 value [0..2047] (Format 1a/1b/channel selection)");
++		}
++	}
++}
++static void dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Num_ant_ports
++	guint8 num_ant_ports_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_num_ant_ports, 1, ENC_BIG_ENDIAN);
++	if (!(num_ant_ports_value >= 1 && num_ant_ports_value <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid num ant ports value [1..2]");
++	}
++
++	// n_PUCCH_2_0
++	// todo : how to work out the ack nack mode
++	guint16 npucch_2_0_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_2_0, 2, ENC_BIG_ENDIAN);
++	if (npucch_2_0_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 0 value [0..2047]");
++	}
++
++	// n_PUCCH_2_1
++	guint16 npucch_2_1_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_2_1, 2, ENC_BIG_ENDIAN);
++	if (npucch_2_1_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 1 value [0..2047]");
++	}
++
++	// n_PUCCH_2_2
++	guint16 npucch_2_2_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_2_2, 2, ENC_BIG_ENDIAN);
++	if (npucch_2_2_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 2 value [0..2047]");
++	}
++
++	// n_PUCCH_2_3
++	guint16 npucch_2_3_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_pucch_2_3, 2, ENC_BIG_ENDIAN);
++	if (npucch_2_3_value > 2047)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid npucch 2 3 value [0..2047]");
++	}
++
++}
++static void dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// HARQ Size 2
++	ptvcursor_add(ptvc, hf_nfapi_harq_size_2, 2, ENC_BIG_ENDIAN);
++
++	// Starting PRB
++	guint8 starting_prb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_starting_prb, 1, ENC_BIG_ENDIAN);
++	if (starting_prb_value > 109)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid starting prb value [0..109]");
++	}
++
++	// n_PRB
++	guint8 n_prb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nprb, 1, ENC_BIG_ENDIAN);
++	if (n_prb_value > 109)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n prb value [0..7]");
++	}
++
++	// cdm_Index
++	guint8 cdm_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cdm_index, 1, ENC_BIG_ENDIAN);
++	if (cdm_index_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cdm index value [0..1]");
++	}
++
++	// N srs
++	guint8 n_srs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_nsrs, 1, ENC_BIG_ENDIAN);
++	if (n_srs_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n srs value [0..1]");
++	}
++}
++static void dissect_ul_config_srs_info_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// Size
++	ptvcursor_add(ptvc, hf_nfapi_size, 2, ENC_BIG_ENDIAN);
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// SRS Bandwidth
++	guint8 srs_bandwidth_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_bandwidth, 1, ENC_BIG_ENDIAN);
++	if (srs_bandwidth_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs bandwidth value [0..3]");
++	}
++
++	// Frequency Domain Position
++	guint8 frequency_domain_position_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_domain_position, 1, ENC_BIG_ENDIAN);
++	if (frequency_domain_position_value > 23)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency domain bandwidth value [0..23]");
++	}
++
++	// SRS Hopping Bandwidth
++	guint8 srs_hopping_bandwidth_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_hopping_bandwidth, 1, ENC_BIG_ENDIAN);
++	if (srs_hopping_bandwidth_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs hopping bandwidth value [0..3]");
++	}
++
++	// Transmission Comb
++	guint8 transmission_comb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_comb, 1, ENC_BIG_ENDIAN);
++	if (transmission_comb_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission comb value [0..3]");
++	}
++
++	// ISRS / SRS-ConfigIndex
++	guint16 srs_config_index_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_i_srs, 2, ENC_BIG_ENDIAN);
++	if (srs_config_index_value > 1023)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid isrs/srs-configindex value [0..1023]");
++	}
++
++	// Sounding Reference Cyclic Shift
++	guint8 sounding_reference_cyclic_shift_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_sounding_reference_cyclic_shift, 1, ENC_BIG_ENDIAN);
++	if (sounding_reference_cyclic_shift_value > 11)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid sounding reference cyclic shift value [0..11]");
++	}
++}
++static void dissect_ul_config_srs_info_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 antenna_port_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_antenna_port, 1, ENC_BIG_ENDIAN);
++	if (antenna_port_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid antenna port value [0..2]");
++	}
++}
++static void dissect_ul_config_srs_info_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 number_of_combs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_number_of_combs, 1, ENC_BIG_ENDIAN);
++	if (number_of_combs_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of combs value [0..1]");
++	}
++}
++static void dissect_hi_dci0_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++
++	// PDU Type
++	guint8 pdu_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_hi_dci0_pdu_type, 1, ENC_BIG_ENDIAN);
++	if (pdu_type_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..3]");
++	}
++
++	// PDU Size
++	guint8 size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN);
++
++	guint pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
++	dissect_tlv_list(ptvc, pinfo, pdu_end);
++}
++static void dissect_hi_dci0_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// SFN/SF
++	ptvcursor_add(ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++
++	// Number of DCI
++	guint8 num_pdu = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_dci_pdus, 1, ENC_BIG_ENDIAN);
++
++	// Number of  HI
++	num_pdu += tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_hi_pdus, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "HI DCI0 PDU List", ett_nfapi_hi_dci0_request_pdu_list, num_pdu, dissect_hi_dci0_pdu);
++}
++static void dissect_hi_dci0_hi_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Resource block start
++	guint8 resource_block_start_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN);
++	if (resource_block_start_value > 100)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
++	}
++
++	// Cyclic Shift 2 for DMRS
++	guint8 cyclic_shift_2_for_drms_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN);
++	if (cyclic_shift_2_for_drms_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
++	}
++
++	// HI value
++	guint8 hi_value_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_hi_value, 1, ENC_BIG_ENDIAN);
++	if (hi_value_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid hi value [0..1]");
++	}
++
++	// I_PHICH
++	guint8 i_pich_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_i_phich, 1, ENC_BIG_ENDIAN);
++	if (i_pich_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid i phich value [0..1]");
++	}
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++}
++static void dissect_hi_dci0_hi_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Flag TB2
++	guint8 flag_tb2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_flag_tb2, 1, ENC_BIG_ENDIAN);
++	if (flag_tb2_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid flag tb2 value [0..1]");
++	}
++
++	// HI Value 2
++	guint8 hi2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_hi_value_2, 1, ENC_BIG_ENDIAN);
++	if (hi2_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid hi2 value [0..1]");
++	}
++
++}
++static void dissect_hi_dci0_dci_ul_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// DCI format
++	guint8 dci_format_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_dci_format, 1, ENC_BIG_ENDIAN);
++	if (dci_format_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [0..4]");
++	}
++
++	// CCE index
++	guint8 cce_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cce_idx, 1, ENC_BIG_ENDIAN);
++	if (cce_index_value > 88)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cce index value [0..88]");
++	}
++
++	// Aggregation level
++	guint8 aggregation_level_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN);
++	if (!(aggregation_level_value == 1 || aggregation_level_value == 2 || aggregation_level_value == 4 ||
++		  aggregation_level_value == 8))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [1, 2, 4, 8]");
++	}
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// Resource block start
++	guint8 resource_block_start_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN);
++	if (resource_block_start_value > 100)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..100]");
++	}
++
++	// Number of resource blocks
++	guint8 number_of_resource_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN);
++	if (number_of_resource_blocks_value > 100)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [0..100]");
++	}
++
++	// MCS_1
++	guint8 mcs_1_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs_1, 1, ENC_BIG_ENDIAN);
++	if (mcs_1_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 1 value [0..31]");
++	}
++
++	// Cyclic Shift 2 for DMRS
++	guint8 cyclic_shift_2_for_drms_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cyclic_shift_2_for_drms, 1, ENC_BIG_ENDIAN);
++	if (cyclic_shift_2_for_drms_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cyclic shift 2 for drms value [0..7]");
++	}
++
++	// Frequency hopping enabled flag
++	guint8 frequency_hopping_enabled_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_enabled_flag, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_enabled_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping enabled flag value [0..1]");
++	}
++
++	// Frequency hopping bits
++	guint8 frequency_hopping_bit_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_bits, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_bit_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping bits value [0..3]");
++	}
++
++	// New Data indication_1
++	guint8 new_data_indication_1_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN);
++	if (new_data_indication_1_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
++	}
++
++	// UE TX antenna selection
++	guint8 ue_tx_antenna_selection_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ue_tx_antenna_selection, 1, ENC_BIG_ENDIAN);
++	if (ue_tx_antenna_selection_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ue tx antenna selection value [0..2]");
++	}
++
++	// TPC
++	guint8 tpc_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN);
++	if (tpc_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value value [0..3]");
++	}
++
++	// CQI/CSI request
++	guint8 cqi_csi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cqi_csi_request, 1, ENC_BIG_ENDIAN);
++	if (cqi_csi_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cqi csi value [0..7]");
++	}
++
++	// UL index
++	guint8 ul_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN);
++	if (ul_index_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul index value [0..3]");
++	}
++
++	// DL assignment index
++	guint8 dl_assignment_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN);
++	if (!(dl_assignment_index_value >= 1 && dl_assignment_index_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment index value [1..4]");
++	}
++
++	// TPC bitmap
++	ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++}
++static void dissect_hi_dci0_dci_ul_rel10_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Cross carrier scheduling flag
++	guint8 cross_carrier_scheduling_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_cross_carrier_scheduling_flag, 1, ENC_BIG_ENDIAN);
++	if (cross_carrier_scheduling_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cross carrier scheduling flag value [0..1]");
++	}
++
++	// Carrier indicator
++	guint8 carrier_indicator_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_carrier_indicator, 1, ENC_BIG_ENDIAN);
++	if (carrier_indicator_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid carrier indicator value [0..7]");
++	}
++
++	// Size of CQI/CSI field
++	guint8 size_of_cqi_csi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_size_of_cqi_csi_feild, 1, ENC_BIG_ENDIAN);
++	if (size_of_cqi_csi_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid size of cqi/csi field value [0..2]");
++	}
++
++	// SRS flag
++	guint8 srs_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_flag, 1, ENC_BIG_ENDIAN);
++	if (srs_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs field value [0..1]");
++	}
++
++	// SRS request
++	//guint8 srs_request_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	//item = ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
++
++	// Resource allocation flag
++	guint8 resource_allocation_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_flag, 1, ENC_BIG_ENDIAN);
++	if (resource_allocation_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation flag value [0..1]");
++	}
++
++	// Resource allocation type
++	guint8 resource_alloction_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_allocation_type, 1, ENC_BIG_ENDIAN);
++	if (resource_alloction_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource allocation type value [0..1]");
++	}
++
++	// Resource block coding
++	ptvcursor_add(ptvc, hf_nfapi_resource_block_coding, 4, ENC_BIG_ENDIAN);
++
++	// MCS_2
++	guint8 mcs_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs_2, 1, ENC_BIG_ENDIAN);
++	if (mcs_2_value > 31)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs 2 value [0..31]");
++	}
++
++	// New data indication_2
++	guint8 new_data_indication_2_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indication_two, 1, ENC_BIG_ENDIAN);
++	if (new_data_indication_2_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication 2 value [0..1]");
++	}
++
++	// Number of antenna ports
++	guint8 number_of_antenna_ports_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_antenna_ports, 1, ENC_BIG_ENDIAN);
++	if (number_of_antenna_ports_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of antenna ports value [0..2]");
++	}
++
++	// TPMI
++	guint8 tpmi_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpmi, 1, ENC_BIG_ENDIAN);
++	if (number_of_antenna_ports_value == 2)
++	{
++		if (tpmi_value > 7)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..7]");
++		}
++	}
++	else if (number_of_antenna_ports_value == 4)
++	{
++		if (tpmi_value > 63)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpmi value [0..63]");
++		}
++	}
++
++	// Total DCI length including padding
++	ptvcursor_add(ptvc, hf_nfapi_total_dci_length_including_padding, 1, ENC_BIG_ENDIAN);
++
++	// N_UL_RB
++	guint8 n_ul_rb_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_n_ul_rb, 1, ENC_BIG_ENDIAN);
++	if (!(n_ul_rb_value == 6 || n_ul_rb_value == 15 || n_ul_rb_value == 25 || n_ul_rb_value == 50 ||
++		n_ul_rb_value == 75 || n_ul_rb_value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid n ul rb value [6, 15, 25, 50, 75, 100]");
++	}
++}
++static void dissect_hi_dci0_dci_ul_rel12_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// PSCCH Resource
++	guint8 pscch_resource_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pscch_resource, 1, ENC_BIG_ENDIAN);
++	if (pscch_resource_value > 0x3F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pscch resource value [0..0x3F]");
++	}
++
++	// Time resource pattern
++	guint8 time_resource_pattern_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_time_resource_pattern, 1, ENC_BIG_ENDIAN);
++	if (time_resource_pattern_value > 0x7F)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid time resource pattern value [0..0x7F]");
++	}
++
++}
++static void dissect_hi_dci0_mdpcch_dci_ul_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// MPDCCH Narrowband
++	guint8 mpdcch_narrowband_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_narrowband, 1, ENC_BIG_ENDIAN);
++	if (mpdcch_narrowband_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch narrowband value [0..15]");
++	}
++
++	// Number of PRB pairs
++	guint8 number_of_prb_pairs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_prb_pairs, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_prb_pairs_value == 2 || number_of_prb_pairs_value == 4 || number_of_prb_pairs_value == 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of prb pairs value [2, 4, 6]");
++	}
++
++	// Resource Block Assignment
++	guint8 resource_block_assignment_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_assignment, 1, ENC_BIG_ENDIAN);
++	if (resource_block_assignment_value > 14)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block assignment value [0..14]");
++	}
++
++	// MPDCCH transmission type
++	guint8 mpdcch_transmission_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_transmission_type, 1, ENC_BIG_ENDIAN);
++	if (mpdcch_transmission_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mpdcch transmission type value [0..1]");
++	}
++
++	// Start symbol
++	guint8 start_symbol_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_start_symbol, 1, ENC_BIG_ENDIAN);
++	if (!(start_symbol_value >= 1 && start_symbol_value <=4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid start symbol value [0..1]");
++	}
++
++	// ECCE index
++	guint8 ecce_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ecce_index, 1, ENC_BIG_ENDIAN);
++	if (ecce_index_value > 22)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ecce index value [0..22]");
++	}
++
++	// Aggregation level
++	guint8 aggregation_level_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_aggregation_level, 1, ENC_BIG_ENDIAN);
++	if (!(aggregation_level_value == 2 || aggregation_level_value == 4 || aggregation_level_value == 8 ||
++		aggregation_level_value == 16 || aggregation_level_value == 24))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid aggregation level value [2, 4, 8, 16, 24]");
++	}
++
++	// RNTI type
++	guint8 rnti_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_rnti_type, 1, ENC_BIG_ENDIAN);
++	if (!(rnti_type_value == 0 || rnti_type_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti type value [0, 4]");
++	}
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// CEMode
++	guint8 cemode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ce_mode, 1, ENC_BIG_ENDIAN);
++	if (!(cemode_value == 1 || cemode_value == 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid cemode value [1,2]");
++	}
++
++	// DMRS scrambling init
++	guint16 drms_scrambling_init_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_drms_scrambling_init, 2, ENC_BIG_ENDIAN);
++	if (drms_scrambling_init_value < 503)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid drms scrambling init value [0..503]");
++	}
++
++	// Initial transmission SF (io)
++	guint16 initial_transmission_sf_io_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_transmission_sf, 2, ENC_BIG_ENDIAN);
++	if (!(initial_transmission_sf_io_value <= 10239 || initial_transmission_sf_io_value == 0xFFFF))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial transmission sf io value [0..10239, 0xFFFF]");
++	}
++
++	// Transmission power
++	guint16 transmission_power_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_transmission_power, 2, ENC_BIG_ENDIAN);
++	if (transmission_power_value > 10000)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid transmission power value [0..10000]");
++	}
++
++	// DCI format
++	guint8 dci_format_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mpdcch_ul_dci_format, 1, ENC_BIG_ENDIAN);
++	if (!(dci_format_value == 1 || dci_format_value == 2 || dci_format_value == 4 || dci_format_value == 5))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci format value [1, 2, 4, 5]");
++	}
++
++	// Resource block start
++	guint8 resource_block_start_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_resource_block_start, 1, ENC_BIG_ENDIAN);
++	if (resource_block_start_value > 99)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid resource block start value [0..99]");
++	}
++
++	// Number of resource blocks
++	guint8 number_of_resource_blocks_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_resource_blocks_value >= 1 && number_of_resource_blocks_value <= 6))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of resource blocks value [1..6]");
++	}
++
++	// MCS
++	guint8 mcs_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_mcs, 1, ENC_BIG_ENDIAN);
++	if (mcs_value > 15)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mcs value [0..15]");
++	}
++
++	// PUSCH repetition levels
++	guint8 pusch_repetition_levels_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_pusch_repetition_levels, 1, ENC_BIG_ENDIAN);
++	if (dci_format_value == 4)
++	{
++		if (!(pusch_repetition_levels_value >= 1 && pusch_repetition_levels_value <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..4]");
++		}
++	}
++	else if (dci_format_value == 5)
++	{
++		if (!(pusch_repetition_levels_value >= 1 && pusch_repetition_levels_value <= 8))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pusch repetition levels value [1..8]");
++		}
++	}
++
++	// Frequency hopping flag
++	guint8 frequency_hopping_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_frequency_hopping_flag, 1, ENC_BIG_ENDIAN);
++	if (frequency_hopping_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid frequency hopping flag value [0..1]");
++	}
++
++	// New Data indication
++	guint8 new_data_indication_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_new_data_indication, 1, ENC_BIG_ENDIAN);
++	if (new_data_indication_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid new data indication value [0..1]");
++	}
++
++	// HARQ process
++	guint8 harq_process_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_process, 1, ENC_BIG_ENDIAN);
++	if (harq_process_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq process value [0..7]");
++	}
++
++	// Redundancy version
++	guint8 redundancy_version_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_redundancy_version, 1, ENC_BIG_ENDIAN);
++	if (redundancy_version_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid redundancy version value [0..3]");
++	}
++
++	// TPC
++	guint8 tpc_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tpc, 1, ENC_BIG_ENDIAN);
++	if (tpc_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid tpc value [0..3]");
++	}
++
++	// CSI request
++	guint8 csi_request_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_csi_request, 1, ENC_BIG_ENDIAN);
++	if (csi_request_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid csi request value [0..1]");
++	}
++
++	// UL index
++	guint8 ul_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ul_index, 1, ENC_BIG_ENDIAN);
++	if (ul_index_value > 3)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul index value [0..3]");
++	}
++
++	// DAI presence flag
++	guint8 dai_presence_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dai_presence_flag, 1, ENC_BIG_ENDIAN);
++	if (dai_presence_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dai presence value [0..1]");
++	}
++
++	// DL assignment index
++	guint8 dl_assignment_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dl_assignment_index, 1, ENC_BIG_ENDIAN);
++	if (!(dl_assignment_value >=1 && dl_assignment_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dl assignment value [1, 2, 3, 4]");
++	}
++
++	// SRS request
++	guint8 srs_request_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_srs_request, 1, ENC_BIG_ENDIAN);
++	if (srs_request_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid srs request value [0..1]");
++	}
++
++	// DCI subframe repetition number
++	guint8 dci_subframe_repetition_number_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_dci_subframe_repetition_number, 1, ENC_BIG_ENDIAN);
++	if (!(dci_subframe_repetition_number_value >= 1 && dci_subframe_repetition_number_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid dci subframe repetition number value [1..4]");
++	}
++
++	//TPC bitmap
++	ptvcursor_add(ptvc, hf_nfapi_tpc_bitmap, 4, ENC_BIG_ENDIAN);
++
++	// Total DCI length including padding
++	ptvcursor_add(ptvc, hf_nfapi_total_dci_length_include_padding, 1, ENC_BIG_ENDIAN);
++
++	// Number of TX Antenna ports
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_tx_antenna_ports, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "TX Antenna Ports", ett_nfapi_tx_antenna_ports, count, dissect_precoding_value);
++}
++static void dissect_rx_ue_info_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++}
++static void dissect_rx_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// Data offset
++	ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
++
++	// UL_CQI
++	ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
++
++	// Timing advance
++	guint16 timing_advance_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
++	}
++}
++static void dissect_rx_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Timing advance R9
++	guint16 timing_advance_r9_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_r9_value > 7690)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance r9 value [0..7690]");
++	}
++
++}
++static void dissect_harq_indication_data_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++
++	guint8 value_1 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN);
++	if (!(value_1 >= 1 && value_1 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_format_1a_1b_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++
++	guint8 value_1 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_1, 1, ENC_BIG_ENDIAN);
++	if (!(value_1 >= 1 && value_1 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 1 [1..7]");
++	}
++
++	guint8 value_2 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_2, 1, ENC_BIG_ENDIAN);
++	if (!(value_2 >= 1 && value_2 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 2 [1..7]");
++	}
++
++	guint8 value_3 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_3, 1, ENC_BIG_ENDIAN);
++	if (!(value_3 >= 1 && value_3 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 3 [1..7]");
++	}
++
++}
++static void dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN);
++	if (value_0 > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
++	}
++}
++static void dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0_special, 1, ENC_BIG_ENDIAN);
++	if (value_0 > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [0..4]");
++	}
++}
++static void dissect_harq_indication_data_channel_selection_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_format_3_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_format_4_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_data_format_5_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 value_0 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_data_value_0, 1, ENC_BIG_ENDIAN);
++	if (!(value_0 >= 1 && value_0 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid value 0 [1..7]");
++	}
++}
++static void dissect_harq_indication_rel8_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	guint8 mode = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN);
++	if (mode > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
++	}
++
++	guint8 number_of_ack_nack_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_ack_nack_value >= 1 && number_of_ack_nack_value <= 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
++	}
++
++	switch (mode)
++	{
++		case 0:
++		{
++			dissect_harq_indication_data_bundling_value(ptvc, pinfo);
++			break;
++		}
++		case 1:
++		{
++			dissect_harq_indication_data_multplexing_value(ptvc, pinfo);
++			break;
++		}
++		case 2:
++		{
++			dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
++			break;
++		}
++	};
++}
++static void dissect_harq_indication_rel9_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 i;
++	proto_item* item;
++
++	guint8 mode = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN);
++	if (mode > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..4]");
++	}
++
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN);
++	if (mode == 0 || mode == 1)
++	{
++		if (!(count >= 1 && count <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
++		}
++	}
++	else if (mode == 3)
++	{
++		if (!(count >= 1 && count <= 8))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
++		}
++	}
++	else if (mode == 4)
++	{
++		if (!(count >= 1 && count <= 21))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
++		}
++	}
++
++
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
++
++	for (i = 0; i < count; ++i)
++	{
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%d]", i);
++
++		switch (mode)
++		{
++			case 0:
++			{
++				dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
++				break;
++			}
++			case 1:
++			{
++				dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
++				break;
++			}
++			case 2:
++			{
++				dissect_harq_indication_data_format_1a_1b_special_bundling_value(ptvc, pinfo);
++				break;
++			}
++			case 3:
++			{
++				dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
++				break;
++			}
++			case 4:
++			{
++				dissect_harq_indication_data_format_3_value(ptvc, pinfo);
++				break;
++			}
++		};
++
++		ptvcursor_pop_subtree(ptvc);
++	}
++
++	ptvcursor_pop_subtree(ptvc);
++}
++static void dissect_harq_indication_rel13_later_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 i = 0;
++	proto_item* item;
++
++	guint8 mode = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_tdd_harq_mode, 1, ENC_BIG_ENDIAN);
++	if (mode > 6)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid mode value [0..6]");
++	}
++
++
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN);
++	if (mode == 0 || mode == 1)
++	{
++		if (!(count >= 1 && count <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..4]");
++		}
++	}
++	else if (mode == 3)
++	{
++		if (!(count >= 1 && count <= 8))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..8]");
++		}
++	}
++	else if (mode == 4)
++	{
++		if (!(count >= 1 && count <= 21))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [1..21]");
++		}
++	}
++	else if (mode == 5 || mode == 6)
++	{
++		if (count < 22)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack nack value [>= 22]");
++		}
++
++	}
++
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "ACK/NACK Data");
++
++	for (i = 0; i < count; ++i)
++	{
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_harq_ack_nack_data, "[%d]", i);
++
++		switch (mode)
++		{
++			case 0:
++			{
++				dissect_harq_indication_data_format_1a_1b_bundling_value(ptvc, pinfo);
++				break;
++			}
++			case 1:
++			{
++				dissect_harq_indication_data_format_1a_1b_multplexing_value(ptvc, pinfo);
++				break;
++			}
++			case 2:
++			{
++				dissect_harq_indication_data_special_bundling_value(ptvc, pinfo);
++				break;
++			}
++			case 3:
++			{
++				dissect_harq_indication_data_channel_selection_value(ptvc, pinfo);
++				break;
++			}
++			case 4:
++			{
++				dissect_harq_indication_data_format_3_value(ptvc, pinfo);
++				break;
++			}
++			case 5:
++			{
++				dissect_harq_indication_data_format_4_value(ptvc, pinfo);
++				break;
++			}
++			case 6:
++			{
++				dissect_harq_indication_data_format_5_value(ptvc, pinfo);
++				break;
++			}
++		};
++
++		ptvcursor_pop_subtree(ptvc);
++	}
++
++	ptvcursor_pop_subtree(ptvc);
++}
++static void dissect_harq_indication_rel8_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	guint8 harq_tb_1 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_tb_1, 1, ENC_BIG_ENDIAN);
++	if (!(harq_tb_1 >= 1 && harq_tb_1 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 1 [1..7]");
++	}
++
++	guint8 harq_tb_2 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_harq_tb_2, 1, ENC_BIG_ENDIAN);
++	if (!(harq_tb_2 >= 1 && harq_tb_2 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb 2 [1..7]");
++	}
++
++}
++static void dissect_harq_tb_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint8 harq_tb_1 = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_harq_tb_n, 1, ENC_BIG_ENDIAN);
++	if (!(harq_tb_1 >= 1 && harq_tb_1 <= 7))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq tb n [1..7]");
++	}
++}
++static void dissect_harq_indication_rel9_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Mode
++	guint8 harq_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN);
++	if (harq_mode_value > 2)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..2]");
++	}
++
++	// Number of ACK/NACK
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ack_nack, 1, ENC_BIG_ENDIAN);
++
++	if (harq_mode_value == 0)
++	{
++		if (!(count >=1 && count <= 2))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
++		}
++	}
++	else if (harq_mode_value == 1)
++	{
++		if (!(count >= 1 && count <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
++		}
++
++	}
++	else if (harq_mode_value == 2)
++	{
++		if (!(count >= 1 && count <= 10))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
++		}
++
++	}
++
++	dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
++}
++static void dissect_harq_indication_rel13_later_fdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Mode
++	guint8 harq_mode_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_fdd_harq_mode, 1, ENC_BIG_ENDIAN);
++	if (harq_mode_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid harq mode value [0..4]");
++	}
++
++	// Number of ACK/NACK
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_ack_nack, 2, ENC_BIG_ENDIAN);
++
++	if (harq_mode_value == 0)
++	{
++		if (!(count >= 1 && count <= 2))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..2]");
++		}
++	}
++	else if (harq_mode_value == 1)
++	{
++		if (!(count >= 1 && count <= 4))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..4]");
++		}
++
++	}
++	else if (harq_mode_value == 2)
++	{
++		if (!(count >= 1 && count <= 10))
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [1..10]");
++		}
++	}
++	else if (harq_mode_value == 3 || harq_mode_value == 4)
++	{
++		if (count < 22)
++		{
++			expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of ack/nack value [>= 22]");
++		}
++	}
++
++	dissect_array_value(ptvc, pinfo, "HARQ TB List", ett_nfapi_harq_data, count, dissect_harq_tb_value);
++}
++static void dissect_ul_cqi_information_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// UL_CQI
++	ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
++
++	// Channel
++	guint8 channel_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_channel, 1, ENC_BIG_ENDIAN);
++	if (channel_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid channel value [0..1]");
++	}
++}
++static void dissect_crc_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// CRC Flag
++	guint8 crc_flag_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_crc_flag, 1, ENC_BIG_ENDIAN);
++	if (crc_flag_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid crc flag value [0..1]");
++	}
++}
++static void dissect_rx_cqi_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	//Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// Data Offset
++	ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
++
++	// UL_CQI
++	ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
++
++	// RI
++	guint8 ri_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN);
++	if (ri_value > 8)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
++	}
++
++	// Timing Advance
++	guint16 timing_advance_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_value > 8)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
++	}
++}
++static void dissect_ri_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// RI
++	guint8 ri_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ri, 1, ENC_BIG_ENDIAN);
++	if (ri_value > 8)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ri value [0..8]");
++	}
++}
++static void dissect_rx_cqi_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Length
++	ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++
++	// Data Offset
++	ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
++
++	// UL_CQI
++	ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
++
++	// Number of CC reported
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_cc_reported, 1, ENC_BIG_ENDIAN);
++	if (!(count >= 1 && count <= 5))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of CC reported value [1..5]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "CC List", ett_nfapi_cc, count, dissect_ri_value);
++
++	// Timing Advance
++	guint16 timing_advance_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..63]");
++	}
++
++	// Timing Advance R9
++	guint16 timing_advance_r9_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_r9_value > 7690)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
++	}
++}
++static void dissect_rach_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// RNTI
++	guint16 rnti_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_rnti, 2, ENC_BIG_ENDIAN);
++	if (rnti_value < 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rnti value [1..65535]");
++	}
++
++	// Preamble
++	guint8 preamble_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_preamble, 1, ENC_BIG_ENDIAN);
++	if (preamble_value > 63)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid preamble value [0..63]");
++	}
++
++	// Timing Advance
++	guint16 timing_advance_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_value > 1282)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
++	}
++
++}
++static void dissect_rach_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Timing Advance R9
++	guint16 timing_advance_r9_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_r9_value > 7690)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
++	}
++}
++static void dissect_rach_indication_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// RACH resource type
++	guint8 rach_resource_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_rach_resource_type, 1, ENC_BIG_ENDIAN);
++	if (rach_resource_type_value > 4)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid rach resource type value [0..4]");
++	}
++}
++static void dissect_snr_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// SNR
++	ptvcursor_add(ptvc, hf_nfapi_snr, 1, ENC_BIG_ENDIAN);
++}
++static void dissect_srs_indication_rel8_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Doppler estimation
++	ptvcursor_add(ptvc, hf_nfapi_doppler_estimation, 2, ENC_BIG_ENDIAN);
++
++	// Timing Advance
++	guint16 timing_advance_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_value > 1282)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..1282]");
++	}
++
++	// Number of resource blocks
++	guint8 count = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_resource_blocks, 1, ENC_BIG_ENDIAN);
++
++	// RB start
++	ptvcursor_add(ptvc, hf_nfapi_rb_start, 1, ENC_BIG_ENDIAN);
++
++
++	dissect_array_value(ptvc, pinfo, "RB List", ett_nfapi_rbs, count, dissect_snr_value);
++}
++static void dissect_srs_indication_rel9_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Timing Advance R9
++	guint16 timing_advance_r9_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_timing_advance_r9, 2, ENC_BIG_ENDIAN);
++	if (timing_advance_r9_value > 7690)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid timing advance value [0..7690]");
++	}
++}
++static void dissect_srs_indication_rel10_tdd_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UpPTS Symbol
++	guint8 uppts_symbol_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_up_pts_symbol, 1, ENC_BIG_ENDIAN);
++	if (uppts_symbol_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid up pts symbol value [0..1]");
++	}
++
++}
++static void dissect_tdd_channel_measurement_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint16 i = 0;
++	guint16 j = 0;
++
++	// numPRBperSubband
++	ptvcursor_add(ptvc, hf_nfapi_number_prb_per_subband, 1, ENC_BIG_ENDIAN);
++
++	// Number of subbands
++	guint8 num_subbands = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_subbands, 1, ENC_BIG_ENDIAN);
++
++	// numAntennas
++	guint8 num_phy_ant = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_antennas, 1, ENC_BIG_ENDIAN);
++
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "Subbands");
++
++	for (i = 0; i < num_subbands; ++i)
++	{
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_subbands, "[%d]", i);
++
++		// subbandIndex
++		ptvcursor_add(ptvc, hf_nfapi_subband_index, 1, ENC_BIG_ENDIAN);
++
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "Physical Antennas");
++
++		for (j = 0; j < num_phy_ant; ++j)
++		{
++			ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_antennas, "[%d]", j);
++
++			// Channel
++			ptvcursor_add(ptvc, hf_nfapi_channel_coefficient, 2, ENC_BIG_ENDIAN);
++
++			ptvcursor_pop_subtree(ptvc);
++		}
++
++		ptvcursor_pop_subtree(ptvc);
++
++		ptvcursor_pop_subtree(ptvc);
++	}
++
++	ptvcursor_pop_subtree(ptvc);
++}
++static void dissect_srs_indication_rel11_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	//UL_RTOA
++	guint16 ul_rtoa_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_ul_rtoa, 2, ENC_BIG_ENDIAN);
++	if (ul_rtoa_value > 4800)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid ul rtoa value [0..4800]");
++	}
++}
++static void dissect_lbt_dl_config_request_pdsch_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// nCCA
++	ptvcursor_add(ptvc, hf_nfapi_mp_cca, 4, ENC_BIG_ENDIAN);
++
++	// NCCA
++	ptvcursor_add(ptvc, hf_nfapi_n_cca, 4, ENC_BIG_ENDIAN);
++
++	// Offset
++	guint32 ul_rtoa_value = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN);
++	if (ul_rtoa_value > 999)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
++	}
++
++	// LTE TXOP SF
++	ptvcursor_add(ptvc, hf_nfapi_lte_txop_sf, 4, ENC_BIG_ENDIAN);
++
++	// TXOP SFN/SF End
++	ptvcursor_add(ptvc, hf_nfapi_txop_sfn_sf_end, 2, ENC_BIG_ENDIAN);
++
++	// LBT mode
++	guint32 lbt_mode = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
++	if (lbt_mode > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..1]");
++	}
++}
++static void dissect_lbt_dl_config_request_drs_req_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// Offset
++	guint32 ul_rtoa_value = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_offset, 4, ENC_BIG_ENDIAN);
++	if (ul_rtoa_value > 999)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..999]");
++	}
++
++	// SFN/SF End
++	ptvcursor_add(ptvc, hf_nfapi_sfn_sf_end, 2, ENC_BIG_ENDIAN);
++
++	// LBT mode
++	guint32 lbt_mode = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_lbt_mode, 4, ENC_BIG_ENDIAN);
++	if (lbt_mode > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid offset value [0..1]");
++	}
++}
++static void dissect_lbt_dl_config_request_pdsch_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// result
++	guint32 result_value = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
++	if (result_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid result value [0..1]");
++	}
++
++	// LTE TXOP symbols
++	ptvcursor_add(ptvc, hf_nfapi_txop_symbols, 4, ENC_BIG_ENDIAN);
++
++	// Initial Partial SF
++	guint32 initial_partial_sf_value = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_initial_partial_sf, 4, ENC_BIG_ENDIAN);
++	if (initial_partial_sf_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid initial partial sf value [0..1]");
++	}
++}
++static void dissect_lbt_dl_config_request_drs_resp_rel13_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// Handle
++	ptvcursor_add(ptvc, hf_nfapi_handle, 4, ENC_BIG_ENDIAN);
++
++	// result
++	guint32 result_value = tvb_get_guint32(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), ENC_BIG_ENDIAN);
++	item = ptvcursor_add(ptvc, hf_nfapi_result, 4, ENC_BIG_ENDIAN);
++	if (result_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid result value [0..1]");
++	}
++}
++static void dissect_tx_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PDU length
++	guint16 len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_length, 2, ENC_BIG_ENDIAN);
++
++	// PDU index
++	ptvcursor_add(ptvc, hf_nfapi_pdu_index, 2, ENC_BIG_ENDIAN);
++
++	// PDU#N
++	ptvcursor_add(ptvc, hf_nfapi_pdu, len, ENC_NA);
++}
++static void dissect_tx_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of PDUs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "TX PDU List", ett_nfapi_tx_request_pdu_list, num_pdu, dissect_tx_pdu);
++}
++static void dissect_harq_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_harq_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of HARQs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_harqs, 2, ENC_BIG_ENDIAN);
++
++
++	dissect_array_value(ptvc, pinfo, "HARQ PDU List", ett_nfapi_harq_indication_pdu_list, num_pdu, dissect_harq_indication_pdu);
++}
++static void dissect_crc_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_crc_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of CRCs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_crcs, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "CRC PDU List", ett_nfapi_crc_indication_pdu_list, num_pdu, dissect_crc_indication_pdu);
++}
++static void dissect_sr_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_rx_sr_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of SRs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_srs, 2, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "SR PDU List", ett_nfapi_sr_indication_pdu_list, num_pdu, dissect_sr_indication_pdu);
++}
++static void dissect_cqi_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_rx_cqi_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of PDUs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_cqi, 2, ENC_BIG_ENDIAN);
++
++	guint16* lengths = (guint16*)wmem_alloc0(wmem_packet_scope(), num_pdu * 2);
++	memset(lengths, 0, num_pdu * 2);
++
++	tvbuff_t* tvb = ptvcursor_tvbuff(ptvc);
++	guint8 tmp_offset = ptvcursor_current_offset(ptvc);
++
++	int i = 0;
++	for (i = 0; i < num_pdu; ++i)
++	{
++		guint16 instance_len = tvb_get_ntohs(tvb, tmp_offset);
++		tmp_offset += 2;
++		guint8 pdu_end = tmp_offset + instance_len;
++
++		while (tmp_offset < pdu_end)
++		{
++			guint16 tlv_id = tvb_get_ntohs(tvb, tmp_offset);
++			tmp_offset += 2;
++			guint16 tlv_len = tvb_get_ntohs(tvb, tmp_offset);
++			tmp_offset += 2;
++
++			if (tlv_id == 0x202F)
++			{
++				lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
++			}
++			else if (tlv_id == 0x2030)
++			{
++				lengths[i] = tvb_get_ntohs(tvb, tmp_offset);
++			}
++
++			tmp_offset += tlv_len;
++		}
++	}
++
++	dissect_array_value(ptvc, pinfo, "CQI PDU List", ett_nfapi_cqi_indication_pdu_list, num_pdu, dissect_cqi_indication_pdu);
++
++	for (i = 0; i < num_pdu; ++i)
++	{
++		ptvcursor_add(ptvc, hf_nfapi_pdu, lengths[i], ENC_NA);
++	}
++}
++static void dissect_preamble_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_rach_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of Preambles
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_preambles, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "Preamble PDU List", ett_nfapi_preamble_indication_pdu_list, num_pdu, dissect_preamble_indication_pdu);
++}
++static void dissect_srs_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Instance Length
++	guint16 instance_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_instance_length, 2, ENC_BIG_ENDIAN);
++	guint instance_end = (ptvcursor_current_offset(ptvc) + instance_len - 2);
++	dissect_tlv_list(ptvc, pinfo, instance_end);
++}
++static void dissect_srs_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of UEs
++	guint8 num_pdu = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_srss, 1, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "SRS PDU List", ett_nfapi_srs_indication_pdu_list, num_pdu, dissect_srs_indication_pdu);
++}
++static void dissect_lbt_dl_config_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PDU Type
++	guint8 pdu_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_lbt_dl_req_pdu_type, 1, ENC_BIG_ENDIAN);
++	if (pdu_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
++	}
++
++	guint8 size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN);
++	guint pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
++
++	dissect_tlv_list(ptvc, pinfo, pdu_end);
++}
++static void dissect_lbt_dl_config_request_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of  PDUs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN);
++	if (!(num_pdu >= 1 && num_pdu <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_config_pdu_list, num_pdu, dissect_lbt_dl_config_pdu);
++}
++static void dissect_lbt_dl_indication_pdu(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PDU Type
++	guint8 pdu_type_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_lbt_dl_ind_pdu_type, 1, ENC_BIG_ENDIAN);
++	if (pdu_type_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid pdu type value [0..1]");
++	}
++
++	// PDU Size
++	guint8 size = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pdu_size, 1, ENC_BIG_ENDIAN);
++	guint pdu_end = (ptvcursor_current_offset(ptvc) + size - 2);
++	dissect_tlv_list(ptvc, pinfo, pdu_end);
++}
++static void dissect_lbt_indication_message_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of  PDUs
++	guint16 num_pdu = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN);
++	if (!(num_pdu >= 1 && num_pdu <= 2))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of pdus value [1..2]");
++	}
++
++	dissect_array_value(ptvc, pinfo, "LBT DL PDU List", ett_nfapi_lbt_dl_indication_pdu_list, num_pdu, dissect_lbt_dl_indication_pdu);
++}
++static void dissect_lte_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Frequency Band Indicator
++	ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
++
++	// Measurement Period
++	ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
++
++	// Bandwidth
++	guint8 bandwidth_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_bandwidth, 1, ENC_BIG_ENDIAN);
++	if (!(bandwidth_value == 6 || bandwidth_value == 15 || bandwidth_value == 25 ||
++		bandwidth_value == 50 || bandwidth_value == 75 || bandwidth_value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of EARFCNs
++	guint8 num_earfcns = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_earfcns, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "EARFCNs", ett_nfapi_earfcn_list, num_earfcns, dissect_earfcn_value);
++}
++static void dissect_uarfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UARFCN
++	ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Frequency Band Indicator
++	ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
++
++	// Measurement Period
++	ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of UARFCNs
++	guint8 num_uarfcns = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_uarfcns, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "UARFCNs", ett_nfapi_uarfcn_list, num_uarfcns, dissect_uarfcn_value);
++}
++static void dissect_arfcn_dir_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// ARFCN
++	ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
++
++	// Direction
++	guint8 direction_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_arfcn_direction, 1, ENC_BIG_ENDIAN);
++	if (direction_value > 1)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid direction value [0..1]");
++	}
++
++}
++static void dissect_geran_rssi_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Frequency Band Indicator
++	ptvcursor_add(ptvc, hf_nfapi_frequency_band_indicator, 1, ENC_BIG_ENDIAN);
++
++	// Measurement Period
++	ptvcursor_add(ptvc, hf_nfapi_measurement_period, 2, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of ARFCNs
++	guint8 num_arfcns = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcns, dissect_arfcn_dir_value);
++}
++static void dissect_rssi_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// RSSI
++	ptvcursor_add(ptvc, hf_nfapi_rssi, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_rssi_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of RSSI
++	guint16 num_rssi = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_rssi, 2, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_rssi_list, num_rssi, dissect_rssi_value);
++}
++static void dissect_pci_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PCI
++	ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// EARFCN
++	ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
++
++	// Measurement Bandwidth
++	ptvcursor_add(ptvc, hf_nfapi_measurement_bandwidth, 1, ENC_BIG_ENDIAN);
++
++	// Exhaustive Search
++	ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of PCI
++	guint8 num_pci = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_pci, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "PCIs", ett_nfapi_pci_list, num_pci, dissect_pci_value);
++}
++static void dissect_psc_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PSC
++	ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UARFCN
++	ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
++
++	// Exhaustive Search
++	ptvcursor_add(ptvc, hf_nfapi_exhaustive_search, 1, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of PSC
++	guint8 num_psc = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_psc, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "PSCs", ett_nfapi_psc_list, num_psc, dissect_psc_value);
++}
++static void dissect_arfcn_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// ARFCN
++	ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_geran_cell_search_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++
++	// Number of ARFCN
++	guint8 num_arfcn = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_arfcns, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "ARFCNs", ett_nfapi_arfcn_list, num_arfcn, dissect_arfcn_value);
++}
++
++static void dissect_lte_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PCI
++	ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
++
++	// RSRP
++	ptvcursor_add(ptvc, hf_nfapi_rsrp, 1, ENC_BIG_ENDIAN);
++
++	// RSRQ
++	ptvcursor_add(ptvc, hf_nfapi_rsrq, 1, ENC_BIG_ENDIAN);
++
++	// Frequency Offset
++	ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of LTE Cells Found
++	guint16 num_lte_cells = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_lte_cells_found, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "LTE Cells Found", ett_nfapi_lte_cells_found_list, num_lte_cells, dissect_lte_cell_found_value);
++}
++static void dissect_utran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// PSC
++	ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
++
++	// RSCP
++	ptvcursor_add(ptvc, hf_nfapi_rscp, 1, ENC_BIG_ENDIAN);
++
++	// EcN0
++	ptvcursor_add(ptvc, hf_nfapi_enco, 1, ENC_BIG_ENDIAN);
++
++	// Frequency Offset
++	ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of UTRAN Cells Found
++	guint16 num_utran_cells = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_utran_cells_found, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "UTRAN Cells Found", ett_nfapi_utran_cells_found_list, num_utran_cells, dissect_utran_cell_found_value);
++}
++static void dissect_geran_cell_found_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// ARFCN
++	ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
++
++	// BSIC
++	ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
++
++	// RxLev
++	ptvcursor_add(ptvc, hf_nfapi_rxlev, 1, ENC_BIG_ENDIAN);
++
++	// RxQual
++	ptvcursor_add(ptvc, hf_nfapi_rxqual, 1, ENC_BIG_ENDIAN);
++
++	// Frequency Offset
++	ptvcursor_add(ptvc, hf_nfapi_frequency_offset, 2, ENC_BIG_ENDIAN);
++
++	// SFN Offset
++	ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_geran_cell_search_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of GSM Cells Found
++	guint16 num_geran_cells = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_geran_cells_found, 2, ENC_BIG_ENDIAN);
++	dissect_array_value(ptvc, pinfo, "GERAN Cells Found", ett_nfapi_geran_cells_found_list, num_geran_cells, dissect_geran_cell_found_value);
++}
++static void dissect_pnf_cell_search_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_search_state, len, ENC_NA);
++}
++static void dissect_pnf_cell_broadcast_state_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_pnf_broadcast_state, len, ENC_NA);
++}
++static void dissect_lte_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// EARFCN
++	ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
++
++	// PCI
++	ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_broadcast_detect_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UARFCN
++	ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
++
++	// PSC
++	ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// Number of Tx Antenna
++	guint8 number_of_tx_antenna_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_tx_antenna_value == 1 || number_of_tx_antenna_value == 2 || number_of_tx_antenna_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
++	}
++
++
++	// MIB Length
++	guint16 mib_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_mib_length, 2, ENC_BIG_ENDIAN);
++
++	// MIB[MIB Length]
++	ptvcursor_add(ptvc, hf_nfapi_mib, mib_len, ENC_NA);
++
++	// SFN Offset
++	ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_broadcast_detect_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// MIB Length
++	guint16 mib_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_mib_length, 2, ENC_BIG_ENDIAN);
++
++	// MIB[MIB Length]
++	ptvcursor_add(ptvc, hf_nfapi_mib, mib_len, ENC_NA);
++
++	// SFN Offset
++	ptvcursor_add(ptvc, hf_nfapi_sfn_offset, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_system_information_schedule_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// EARFCN
++	ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
++
++	// PCI
++	ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
++
++	// Bandwidth
++	guint16 bandwidth_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_bandwidth, 2, ENC_BIG_ENDIAN);
++	if (!(bandwidth_value == 6 || bandwidth_value == 15 || bandwidth_value == 25 ||
++		bandwidth_value == 50 || bandwidth_value == 75 || bandwidth_value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++
++	// PHICH Configuration
++	// todo : phich bit decode
++	ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
++
++	// Number of Tx Antenna
++	guint8 number_of_tx_antenna_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_tx_antenna_value == 1 || number_of_tx_antenna_value == 2 || number_of_tx_antenna_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
++	}
++
++	// retryCount
++	ptvcursor_add(ptvc, hf_nfapi_retry_count, 1, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_system_information_schedule_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// this needs to be SIB 1
++	guint len = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_sib1, len, ENC_NA);
++}
++static void dissect_si_periodicity_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	proto_item* item;
++
++	// SI Periodicity
++	guint8 si_periodicity_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_si_periodicity, 1, ENC_BIG_ENDIAN);
++	if (si_periodicity_value > 7)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si periodicity value [0..7]");
++	}
++
++	// SI Index
++	guint8 si_index_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_si_index, 1, ENC_BIG_ENDIAN);
++	if (si_index_value > 32)
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si index value [0..32]");
++	}
++}
++
++static void dissect_lte_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// EARFCN
++	ptvcursor_add(ptvc, hf_nfapi_earfcn, 2, ENC_BIG_ENDIAN);
++
++	// PCI
++	ptvcursor_add(ptvc, hf_nfapi_pci, 2, ENC_BIG_ENDIAN);
++
++	// Downlink channel bandwidth
++	guint16 bandwidth_value = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_downlink_channel_bandwidth, 2, ENC_BIG_ENDIAN);
++	if (!(bandwidth_value == 6 || bandwidth_value == 15 || bandwidth_value == 25 ||
++		bandwidth_value == 50 || bandwidth_value == 75 || bandwidth_value == 100))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid bandwidth value [6, 15, 25, 50, 75, 100]");
++	}
++
++	// PHICH Configuration
++	ptvcursor_add(ptvc, hf_nfapi_phich_configuration, 1, ENC_BIG_ENDIAN);
++
++	// Number of Tx Antenna
++	guint8 number_of_tx_antenna_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_number_of_tx_antenna, 1, ENC_BIG_ENDIAN);
++	if (!(number_of_tx_antenna_value == 1 || number_of_tx_antenna_value == 2 || number_of_tx_antenna_value == 4))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid number of tx antenna value [1, 2, 4]");
++	}
++
++	// Number of SI Periodicity
++	guint8 si_priodicity = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_of_si_periodicity, 1, ENC_BIG_ENDIAN);
++
++	dissect_array_value(ptvc, pinfo, "Number SI Periodicity", ett_nfapi_si_periodicity_list, si_priodicity, dissect_si_periodicity_value);
++
++	// SI Window Length
++	guint8 si_window_length_value = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	item = ptvcursor_add(ptvc, hf_nfapi_si_window_length, 1, ENC_BIG_ENDIAN);
++	if (!(si_window_length_value == 1 || si_window_length_value == 2 || si_window_length_value == 5 || si_window_length_value == 10 ||
++		  si_window_length_value == 15 || si_window_length_value == 20 || si_window_length_value == 40))
++	{
++		expert_add_info_format(pinfo, item, &ei_invalid_range, "Invalid si window length value [1, 2, 5, 10, 15, 20, 40]");
++	}
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_utran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// UARFCN
++	ptvcursor_add(ptvc, hf_nfapi_uarfcn, 2, ENC_BIG_ENDIAN);
++
++	// PSC
++	ptvcursor_add(ptvc, hf_nfapi_psc, 2, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_geran_system_information_request_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// ARFCN
++	ptvcursor_add(ptvc, hf_nfapi_arfcn, 2, ENC_BIG_ENDIAN);
++
++	// BSIC
++	ptvcursor_add(ptvc, hf_nfapi_bsic, 1, ENC_BIG_ENDIAN);
++
++	// Timeout
++	ptvcursor_add(ptvc, hf_nfapi_timeout, 4, ENC_BIG_ENDIAN);
++}
++static void dissect_lte_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// SIB Type
++	ptvcursor_add(ptvc, hf_nfapi_sib_type, 1, ENC_BIG_ENDIAN);
++
++	// SIB Length
++	guint16 sib_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_sib_len, 2, ENC_BIG_ENDIAN);
++
++	// SIB[SIB Length]
++	ptvcursor_add(ptvc, hf_nfapi_sib, sib_len, ENC_NA);
++}
++static void dissect_utran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// SIB Length
++	guint16 sib_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_sib_len, 2, ENC_BIG_ENDIAN);
++
++	// SIB[SIB Length]
++	ptvcursor_add(ptvc, hf_nfapi_sib, sib_len, ENC_NA);
++}
++static void dissect_geran_system_information_indication_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	// SI Length
++	guint16 si_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_si_len, 2, ENC_BIG_ENDIAN);
++
++	// SI[SI Length]
++	ptvcursor_add(ptvc, hf_nfapi_si, si_len, ENC_NA);
++}
++
++static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_);
++
++// Important the tags must be in numerical order so that they can be indexed correctly
++const tlv_t nfapi_tags[] =
++{
++	{ 0x1000, "PNF Param General", dissect_pnf_param_general_value },
++	{ 0x1001, "PNF PHY", dissect_pnf_phy_value },
++	{ 0x1002, "PNF RF", dissect_pnf_rf_value },
++	{ 0x1003, "PNF PHY RF Config", dissect_pnf_phy_rf_config_value },
++	{ 0x1004, "DL RS Tx power", dissect_dl_rs_tx_power_value },
++	{ 0x1005, "Received interference power", dissect_received_interference_power_value },
++	{ 0x1006, "Thermal noise power", dissect_thermal_noise_power_value },
++	{ 0x1007, "DL RS TX Power measurement", dissect_dl_rs_tx_power_measurement_value },
++	{ 0x1008, "Received Interference power measurement", dissect_received_interference_power_measurement_value },
++	{ 0x1009, "Thermal noise power measurement", dissect_thermal_noise_power_measurement_value },
++	{ 0x100A, "PNF PHY Rel 10", dissect_pnf_phy_rel10_value },
++	{ 0x100B, "PNF PHY Rel 11", dissect_pnf_phy_rel11_value },
++	{ 0x100C, "PNF PHY Rel 12", dissect_pnf_phy_rel12_value },
++	{ 0x100D, "PNF PHY Rel 13", dissect_pnf_phy_rel13_value },
++};
++
++const tlv_t configuration_tags[] =
++{
++	{ 0x0000, NULL, NULL },
++	{ 0x0001, "Subframe config - Duplex Mode", dissect_duplex_mode_value },
++	{ 0x0002, "Subframe config - PCFICH power offset TLV", dissect_pcfich_power_offset_value },
++	{ 0x0003, "Subframe config - P-B", dissect_pb_value },
++	{ 0x0004, "Subframe config - DL cyclic prefix type", dissect_dl_cyclic_prefix_value },
++	{ 0x0005, "Subframe config - UL cyclic prefix type", dissect_ul_cyclic_prefix_value },
++	{ 0x0006, NULL, NULL },
++	{ 0x0007, NULL, NULL },
++	{ 0x0008, NULL, NULL },
++	{ 0x0009, NULL, NULL },
++	{ 0x000A, "RF config - Downlink channel bandwidth", dissect_dl_channel_bandwidth_value },
++	{ 0x000B, "RF config - Uplink channel bandwidth", dissect_ul_channel_bandwidth_value },
++	{ 0x000C, "RF config - Reference signal power", dissect_reference_signal_power_value },
++	{ 0x000D, "RF config - Tx antenna ports", dissect_tx_antenna_ports_value },
++	{ 0x000E, "RF config - Rx Antenna ports", dissect_rx_antenna_ports_value },
++	{ 0x000F, NULL, NULL },
++	{ 0x0010, NULL, NULL },
++	{ 0x0011, NULL, NULL },
++	{ 0x0012, NULL, NULL },
++	{ 0x0013, NULL, NULL },
++	{ 0x0014, "PHICH config - PHICH resource", dissect_phich_resource_value },
++	{ 0x0015, "PHICH config - PHICH duration", dissect_phich_duration_value },
++	{ 0x0016, "PHICH config - PHICH power offset", dissect_phich_power_offset_value },
++	{ 0x0017, NULL, NULL },
++	{ 0x0018, NULL, NULL },
++	{ 0x0019, NULL, NULL },
++	{ 0x001A, NULL, NULL },
++	{ 0x001B, NULL, NULL },
++	{ 0x001C, NULL, NULL },
++	{ 0x001D, NULL, NULL },
++	{ 0x001E, "SCH config - Primary synchronization signal EPRE/EPRERS", dissect_psch_synch_signal_epre_eprers_value },
++	{ 0x001F, "SCH config - Secondary synchronization signal EPRE/EPRERS", dissect_ssch_synch_signal_epre_eprers_value },
++	{ 0x0020, "SCH config - Physical Cell Id", dissect_physical_cell_id_value },
++	{ 0x0021, NULL, NULL },
++	{ 0x0022, NULL, NULL },
++	{ 0x0023, NULL, NULL },
++	{ 0x0024, NULL, NULL },
++	{ 0x0025, NULL, NULL },
++	{ 0x0026, NULL, NULL },
++	{ 0x0027, NULL, NULL },
++	{ 0x0028, "PRACH config - Configuration index", dissect_prach_configuration_index_value },
++	{ 0x0029, "PRACH config - Root sequence index", dissect_prach_root_sequence_index_value },
++	{ 0x002A, "PRACH config - Zero correlation zone configuration", dissect_prach_zero_correlation_zone_configuration_value },
++	{ 0x002B, "PRACH config - High speed flag", dissect_prach_high_speed_flag_value },
++	{ 0x002C, "PRACH config - Frequency offset", dissect_prach_frequency_offset_value },
++	{ 0x002D, NULL, NULL },
++	{ 0x002E, NULL, NULL },
++	{ 0x002F, NULL, NULL },
++	{ 0x0030, NULL, NULL },
++	{ 0x0031, NULL, NULL },
++	{ 0x0032, "PUSCH config - Hopping mode", dissect_pusch_hopping_mode_value },
++	{ 0x0033, "PUSCH config - Hopping offset", dissect_pusch_hopping_offset_value },
++	{ 0x0034, "PUSCH config - Number of sub-bands", dissect_pusch_number_of_subbands_value },
++	{ 0x0035, NULL, NULL },
++	{ 0x0036, NULL, NULL },
++	{ 0x0037, NULL, NULL },
++	{ 0x0038, NULL, NULL },
++	{ 0x0039, NULL, NULL },
++	{ 0x003A, NULL, NULL },
++	{ 0x003B, NULL, NULL },
++	{ 0x003C, "PUCCH config - Delta PUCCH Shift", dissect_pucch_delta_pucch_shift_value },
++	{ 0x003D, "PUCCH config - N_CQI RB", dissect_pucch_n_cqi_rb_value },
++	{ 0x003E, "PUCCH config - N_AN CS", dissect_pucch_n_an_cs_value },
++	{ 0x003F, "PUCCH config - N1Pucch-AN", dissect_pucch_n1_pucch_an_value },
++	{ 0x0040, NULL, NULL },
++	{ 0x0041, NULL, NULL },
++	{ 0x0042, NULL, NULL },
++	{ 0x0043, NULL, NULL },
++	{ 0x0044, NULL, NULL },
++	{ 0x0045, NULL, NULL },
++	{ 0x0046, "SRS config - Bandwidth configuration", dissect_srs_bandwidth_configuration_value },
++	{ 0x0047, "SRS config - MaxUpPTS", dissect_srs_max_uppts_value },
++	{ 0x0048, "SRS config - SRS subframe configuration", dissect_srs_subframe_configuration_value },
++	{ 0x0049, "SRS config - SRS AckNack SRS simultaneous transmission", dissect_srs_acknack_srs_sim_tx_value },
++	{ 0x004A, NULL, NULL },
++	{ 0x004B, NULL, NULL },
++	{ 0x004C, NULL, NULL },
++	{ 0x004D, NULL, NULL },
++	{ 0x004E, NULL, NULL },
++	{ 0x004F, NULL, NULL },
++	{ 0x0050, "Uplink reference signal config - Uplink RS hopping", dissect_uplink_rs_hopping_value },
++	{ 0x0051, "Uplink reference signal config - Group assignment (delta sequence-shift pattern)", dissect_group_assignment_value },
++	{ 0x0052, "Uplink reference signal config - Cyclic Shift 1 for DMRS", dissect_cyclic_shift_1_for_drms_value },
++	{ 0x0053, NULL, NULL },
++	{ 0x0054, NULL, NULL },
++	{ 0x0055, NULL, NULL },
++	{ 0x0056, NULL, NULL },
++	{ 0x0057, NULL, NULL },
++	{ 0x0058, NULL, NULL },
++	{ 0x0059, NULL, NULL },
++	{ 0x005A, "TDD frame structure config - Subframe assignment", dissect_tdd_subframe_assignement_value },
++	{ 0x005B, "TDD frame structure config - Special sub-frame patterns", dissect_tdd_subframe_patterns_value },
++	{ 0x005C, NULL, NULL },
++	{ 0x005D, NULL, NULL },
++	{ 0x005E, NULL, NULL },
++	{ 0x005F, NULL, NULL },
++	{ 0x0060, NULL, NULL },
++	{ 0x0061, NULL, NULL },
++	{ 0x0062, NULL, NULL },
++	{ 0x0063, NULL, NULL },
++	{ 0x0064, "LAA config - ED Threshold for LBT for PDSCH", dissect_laa_ed_threashold_for_lbt_for_pdsch_value },
++	{ 0x0065, "LAA config - ED Threshold for LBT for DRS", dissect_laa_ed_threashold_for_lbt_for_drs_value },
++	{ 0x0066, "LAA config - PD Threshold", dissect_laa_pd_threshold_value },
++	{ 0x0067, "LAA config - Multi carrier type", dissect_laa_multi_carrier_type_value },
++	{ 0x0068, "LAA config - Multi carrier TX", dissect_laa_multi_carrier_tx_value },
++	{ 0x0069, "LAA config - Multi carrier freeze", dissect_laa_multi_carrier_freeze_value },
++	{ 0x006A, "LAA config - Tx antenna ports for DRS", dissect_laa_tx_antenna_port_for_drs_value },
++	{ 0x006B, "LAA config - Transmission power for DRS", dissect_laa_transmission_power_for_drs_value },
++	{ 0x006C, NULL, NULL },
++	{ 0x006D, NULL, NULL },
++	{ 0x006E, NULL, NULL },
++	{ 0x006F, NULL, NULL },
++	{ 0x0070, NULL, NULL },
++	{ 0x0071, NULL, NULL },
++	{ 0x0072, NULL, NULL },
++	{ 0x0073, NULL, NULL },
++	{ 0x0074, NULL, NULL },
++	{ 0x0075, NULL, NULL },
++	{ 0x0076, NULL, NULL },
++	{ 0x0077, NULL, NULL },
++	{ 0x0078, "eMTC config - PBCH Repetitions enable R13", dissect_emtc_pbch_repeitions_enabled_r13_value },
++	{ 0x0079, "eMTC config - PRACH CAT-M Root sequence index", dissect_emtc_prach_cat_m_root_sequence_index_value },
++	{ 0x007A, "eMTC config - PRACH CAT-M Zero correlation zone configuration", dissect_emtc_prach_cat_m_zero_correlation_zone_configuration_value },
++	{ 0x007B, "eMTC config - PRACH CAT-M High speed flag", dissect_emtc_prach_cat_m_high_speed_flag_value },
++	{ 0x007C, "eMTC config - PRACH CE level #0 Enable", dissect_emtc_prach_ce_level_0_enabled_value },
++	{ 0x007D, "eMTC config - PRACH CE level #0 Configuration index", dissect_emtc_prach_ce_level_0_configuration_offset_value },
++	{ 0x007E, "eMTC config - PRACH CE level #0 Frequency offset", dissect_emtc_prach_ce_level_0_frequency_offset_value },
++	{ 0x007F, "eMTC config - PRACH CE level #0 Number of repetitions per attempt", dissect_emtc_preach_ce_level_0_num_of_repeitions_per_attempt_value },
++	{ 0x0080, "eMTC config - CE level #0 Starting subframe periodicity", dissect_emtc_ce_level_0_starting_subframe_periodicity_value },
++	{ 0x0081, "eMTC config - PRACH CE level #0 Hopping Enable", dissect_emtc_preach_ce_level_0_hopping_enabled_value },
++	{ 0x0082, "eMTC config - PRACH CE level #0 Hopping Offset", dissect_emtc_preach_ce_level_0_hopping_offset_value },
++	{ 0x0083, "eMTC config - PRACH CE level #1 Enable", dissect_emtc_prach_ce_level_1_enabled_value },
++	{ 0x0084, "eMTC config - PRACH CE level #1 Configuration index", dissect_emtc_prach_ce_level_1_configuration_offset_value },
++	{ 0x0085, "eMTC config - PRACH CE level #1 Frequency offset", dissect_emtc_prach_ce_level_1_frequency_offset_value },
++	{ 0x0086, "eMTC config - PRACH CE level #1 Number of repetitions per attempt", dissect_emtc_preach_ce_level_1_num_of_repeitions_per_attempt_value },
++	{ 0x0087, "eMTC config - CE level #1 Starting subframe periodicity", dissect_emtc_ce_level_1_starting_subframe_periodicity_value },
++	{ 0x0088, "eMTC config - PRACH CE level #1 Hopping Enable", dissect_emtc_preach_ce_level_1_hopping_enabled_value },
++	{ 0x0089, "eMTC config - PRACH CE level #1 Hopping Offset", dissect_emtc_preach_ce_level_1_hopping_offset_value },
++	{ 0x008A, "eMTC config - PRACH CE level #2 Enable", dissect_emtc_prach_ce_level_2_enabled_value },
++	{ 0x008B, "eMTC config - PRACH CE level #2 Configuration index", dissect_emtc_prach_ce_level_2_configuration_offset_value },
++	{ 0x008C, "eMTC config - PRACH CE level #2 Frequency offset", dissect_emtc_prach_ce_level_2_frequency_offset_value },
++	{ 0x008D, "eMTC config - PRACH CE level #2 Number of repetitions per attempt", dissect_emtc_preach_ce_level_2_num_of_repeitions_per_attempt_value },
++	{ 0x008E, "eMTC config - CE level #2 Starting subframe periodicity", dissect_emtc_ce_level_2_starting_subframe_periodicity_value },
++	{ 0x008F, "eMTC config - PRACH CE level #2 Hopping Enable", dissect_emtc_preach_ce_level_2_hopping_enabled_value },
++	{ 0x0090, "eMTC config - PRACH CE level #2 Hopping Offset", dissect_emtc_preach_ce_level_2_hopping_offset_value },
++	{ 0x0091, "eMTC config - PRACH CE level #3 Enable", dissect_emtc_prach_ce_level_3_enabled_value },
++	{ 0x0092, "eMTC config - PRACH CE level #3 Configuration index", dissect_emtc_prach_ce_level_3_configuration_offset_value },
++	{ 0x0093, "eMTC config - PRACH CE level #3 Frequency offset", dissect_emtc_prach_ce_level_3_frequency_offset_value },
++	{ 0x0094, "eMTC config - PRACH CE level #3 Number of repetitions per attempt", dissect_emtc_preach_ce_level_3_num_of_repeitions_per_attempt_value },
++	{ 0x0095, "eMTC config - CE level #3 Starting subframe periodicity", dissect_emtc_ce_level_3_starting_subframe_periodicity_value },
++	{ 0x0096, "eMTC config - PRACH CE level #3 Hopping Enable", dissect_emtc_preach_ce_level_3_hopping_enabled_value },
++	{ 0x0097, "eMTC config - PRACH CE level #3 Hopping Offset", dissect_emtc_preach_ce_level_3_hopping_offset_value },
++	{ 0x0098, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeA", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_a_value },
++	{ 0x0099, "eMTC config - PUCCH Interval - ULHoppingConfigCommonModeB", dissect_emtc_pucch_interval_ul_hopping_config_common_mode_b_value },
++	{ 0x009A, NULL, NULL },
++	{ 0x009B, NULL, NULL },
++	{ 0x009C, NULL, NULL },
++	{ 0x009D, NULL, NULL },
++	{ 0x009E, NULL, NULL },
++	{ 0x009F, NULL, NULL },
++	{ 0x00A0, NULL, NULL },
++	{ 0x00A1, NULL, NULL },
++	{ 0x00A2, NULL, NULL },
++	{ 0x00A3, NULL, NULL },
++	{ 0x00A4, NULL, NULL },
++	{ 0x00A5, NULL, NULL },
++	{ 0x00A6, NULL, NULL },
++	{ 0x00A7, NULL, NULL },
++	{ 0x00A8, NULL, NULL },
++	{ 0x00A9, NULL, NULL },
++	{ 0x00AA, NULL, NULL },
++	{ 0x00AB, NULL, NULL },
++	{ 0x00AC, NULL, NULL },
++	{ 0x00AD, NULL, NULL },
++	{ 0x00AE, NULL, NULL },
++	{ 0x00AF, NULL, NULL },
++	{ 0x00B0, NULL, NULL },
++	{ 0x00B1, NULL, NULL },
++	{ 0x00B2, NULL, NULL },
++	{ 0x00B3, NULL, NULL },
++	{ 0x00B4, NULL, NULL },
++	{ 0x00B5, NULL, NULL },
++	{ 0x00B6, NULL, NULL },
++	{ 0x00B7, NULL, NULL },
++	{ 0x00B8, NULL, NULL },
++	{ 0x00B9, NULL, NULL },
++	{ 0x00BA, NULL, NULL },
++	{ 0x00BB, NULL, NULL },
++	{ 0x00BC, NULL, NULL },
++	{ 0x00BD, NULL, NULL },
++	{ 0x00BE, NULL, NULL },
++	{ 0x00BF, NULL, NULL },
++	{ 0x00C0, NULL, NULL },
++	{ 0x00C1, NULL, NULL },
++	{ 0x00C2, NULL, NULL },
++	{ 0x00C3, NULL, NULL },
++	{ 0x00C4, NULL, NULL },
++	{ 0x00C5, NULL, NULL },
++	{ 0x00C6, NULL, NULL },
++	{ 0x00C7, NULL, NULL },
++	{ 0x00C8, "Layer 2/3 - Downlink Bandwidth Support", dissect_dl_bandwidth_support_value },
++	{ 0x00C9, "Layer 2/3 - Uplink Bandwidth Support", dissect_ul_bandwidth_support_value },
++	{ 0x00CA, "Layer 2/3 - Downlink modulation support", dissect_dl_modulation_value },
++	{ 0x00CB, "Layer 2/3 - Uplink modulation support", dissect_ul_modulation_value },
++	{ 0x00CC, "Layer 2/3 - PHY antenna capability", dissect_phy_antenna_capability_value },
++	{ 0x00CD, "Layer 2/3 - Release capability", dissect_release_capability_value },
++	{ 0x00CE, "Layer 2/3 - MBSFN capability", dissect_mbsfn_value },
++	{ 0x00CF, NULL, NULL },
++	{ 0x00D0, NULL, NULL },
++	{ 0x00D1, "LAA Capability - LAA support", dissect_laa_support_value },
++	{ 0x00D2, "LAA Capability - PD sensing LBT support", dissect_laa_pd_sensing_lbt_support_value },
++	{ 0x00D3, "LAA Capability - Multi carrier LBT support", dissect_laa_multi_carrier_lbt_support_value },
++	{ 0x00D4, "LAA Capability - Partial SF support", dissect_laa_partial_sf_support_value },
++	{ 0x00D5, NULL, NULL },
++	{ 0x00D6, NULL, NULL },
++	{ 0x00D7, NULL, NULL },
++	{ 0x00D8, NULL, NULL },
++	{ 0x00D9, NULL, NULL },
++	{ 0x00DA, NULL, NULL },
++	{ 0x00DB, NULL, NULL },
++	{ 0x00DC, NULL, NULL },
++	{ 0x00DD, NULL, NULL },
++	{ 0x00DE, NULL, NULL },
++	{ 0x00DF, NULL, NULL },
++	{ 0x00E0, NULL, NULL },
++	{ 0x00E1, NULL, NULL },
++	{ 0x00E2, NULL, NULL },
++	{ 0x00E3, NULL, NULL },
++	{ 0x00E4, NULL, NULL },
++	{ 0x00E5, NULL, NULL },
++	{ 0x00E6, NULL, NULL },
++	{ 0x00E7, NULL, NULL },
++	{ 0x00E8, NULL, NULL },
++	{ 0x00E9, NULL, NULL },
++	{ 0x00EA, NULL, NULL },
++	{ 0x00EB, NULL, NULL },
++	{ 0x00EC, NULL, NULL },
++	{ 0x00ED, NULL, NULL },
++	{ 0x00EE, NULL, NULL },
++	{ 0x00EF, NULL, NULL },
++	{ 0x00F0, "Layer 2/3 - Data report mode", dissect_data_report_mode_value },
++	{ 0x00F1, "Layer 2/3 - SFN/SF", dissect_sfn_sf_value },
++	{ 0x00F2, NULL, NULL },
++	{ 0x00F3, NULL, NULL },
++	{ 0x00F4, NULL, NULL },
++	{ 0x00F5, NULL, NULL },
++	{ 0x00F6, NULL, NULL },
++	{ 0x00F7, NULL, NULL },
++	{ 0x00F8, NULL, NULL },
++	{ 0x00F9, NULL, NULL },
++	{ 0x00FA, "Layer 1 - PHY state", dissect_phy_state_value },
++	{ 0x00FB, NULL, NULL },
++	{ 0x00FC, NULL, NULL },
++	{ 0x00FD, NULL, NULL },
++	{ 0x00FE, NULL, NULL },
++	{ 0x00FF, NULL, NULL },
++	{ 0x0100, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv4_value },
++	{ 0x0101, "NFAPI - P7 VNF Address IPv4", dissect_p7_vnf_address_ipv6_value },
++	{ 0x0102, "NFAPI - P7 Port", dissect_p7_vnf_port_value },
++	{ 0x0103, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv4_value },
++	{ 0x0104, "NFAPI - P7 PNF Address IPv4", dissect_p7_pnf_address_ipv6_value },
++	{ 0x0105, "NFAPI - P7 Port", dissect_p7_pnf_port_value },
++	{ 0x0106, NULL, NULL },
++	{ 0x0107, NULL, NULL },
++	{ 0x0108, NULL, NULL },
++	{ 0x0109, NULL, NULL },
++	{ 0x010A, "NFAPI - Downlink UEs per Subframe", dissect_downlink_ues_per_subframe_value },
++	{ 0x010B, "NFAPI - Uplink UEs per Subframe", dissect_uplink_ues_per_subframe_value },
++	{ 0x010C, NULL, NULL },
++	{ 0x010D, NULL, NULL },
++	{ 0x010E, NULL, NULL },
++	{ 0x010F, NULL, NULL },
++	{ 0x0110, NULL, NULL },
++	{ 0x0111, NULL, NULL },
++	{ 0x0112, NULL, NULL },
++	{ 0x0113, NULL, NULL },
++	{ 0x0114, "NFAPI - nFAPI RF Bands", dissect_rf_bands_value },
++	{ 0x0115, NULL, NULL },
++	{ 0x0116, NULL, NULL },
++	{ 0x0117, NULL, NULL },
++	{ 0x0118, NULL, NULL },
++	{ 0x0119, NULL, NULL },
++	{ 0x011A, NULL, NULL },
++	{ 0x011B, NULL, NULL },
++	{ 0x011C, NULL, NULL },
++	{ 0x011D, NULL, NULL },
++	{ 0x011E, "NFAPI - Timing window", dissect_timing_window_value },
++	{ 0x011F, "NFAPI - Timing info mode", dissect_timing_info_mode_value },
++	{ 0x0120, "NFAPI - Timing info period", dissect_timing_info_period_value },
++	{ 0x0121, NULL, NULL },
++	{ 0x0122, NULL, NULL },
++	{ 0x0123, NULL, NULL },
++	{ 0x0124, NULL, NULL },
++	{ 0x0125, NULL, NULL },
++	{ 0x0126, NULL, NULL },
++	{ 0x0127, NULL, NULL },
++	{ 0x0128, "NFAPI - Maximum Transmit Power", dissect_maximum_transmit_power_value },
++	{ 0x0129, "NFAPI - EARFCN", dissect_earfcn_value },
++	{ 0x012A, NULL, NULL },
++	{ 0x012B, NULL, NULL },
++	{ 0x012C, NULL, NULL },
++	{ 0x012D, NULL, NULL },
++	{ 0x012E, NULL, NULL },
++	{ 0x012F, NULL, NULL },
++	{ 0x0130, "NFAPI - NMM GSM Frequency Bands", dissect_nmm_gsm_frequency_bands_value },
++	{ 0x0131, "NFAPI - NMM UMTS Frequency Bands", dissect_nmm_umts_frequency_bands_value },
++	{ 0x0132, "NFAPI - NMM LTE Frequency Bands", dissect_nmm_lte_frequency_bands_value },
++	{ 0x0133, "NFAPI - NMM Uplink RSSI supported", dissect_nmm_uplink_rssi_supported_value },
++};
++
++const tlv_t p7_tags[] =
++{
++	{ 0x2000, "DL Config Request Body", dissect_dl_config_request_body_value },
++	{ 0x2001, "DL DCI PDU Release 8", dissect_dl_config_request_dl_dci_pdu_rel8_value },
++	{ 0x2002, "DL DCI PDU Release 9", dissect_dl_config_request_dl_dci_pdu_rel9_value },
++	{ 0x2003, "DL DCI PDU Release 10", dissect_dl_config_request_dl_dci_pdu_rel10_value },
++	{ 0x2004, "BCH PDU Release 8", dissect_dl_config_request_bch_pdu_rel8_value },
++	{ 0x2005, "MCH PDU Release 8", dissect_dl_config_request_mch_pdu_rel8_value },
++	{ 0x2006, "DLSCH PDU Release 8", dissect_dl_config_request_dlsch_pdu_rel8_value },
++	{ 0x2007, "DLSCH PDU Release 9", dissect_dl_config_request_dlsch_pdu_rel9_value },
++	{ 0x2008, "DLSCH PDU Release 10", dissect_dl_config_request_dlsch_pdu_rel10_value },
++	{ 0x2009, "PCH PDU Release 8", dissect_dl_config_request_pch_pdu_rel8_value },
++	{ 0x200A, "PRS PDU Release 9", dissect_dl_config_request_prs_pdu_rel9_value },
++	{ 0x200B, "CSI-RS PDU Release 10", dissect_dl_config_request_csi_rs_pdu_rel10_value },
++	{ 0x200C, "UL Config Request Body", dissect_ul_config_request_body_value },
++	{ 0x200D, "ULSCH PDU Release 8", dissect_ul_config_ulsch_pdu_rel8_value },
++	{ 0x200E, "ULSCH PDU Release 10", dissect_ul_config_ulsch_pdu_rel10_value },
++	{ 0x200F, "Initial Transmission Parameters Release 8", dissect_ul_config_init_tx_params_rel8_value },
++	{ 0x2010, "CQI RI Information Release 8", dissect_ul_config_cqi_ri_info_rel8_value },
++	{ 0x2011, "CQI RI Information Release 9 or later", dissect_ul_config_cqi_ri_info_rel9_later_value },
++	{ 0x2012, "HARQ Information (ULSCH) Release 10", dissect_ul_config_harq_info_ulsch_rel10_value },
++	{ 0x2013, "UE Information Release 8", dissect_ul_config_ue_info_rel8_value },
++	{ 0x2014, "CQI Information Release 8", dissect_ul_config_cqi_info_rel8_value },
++	{ 0x2015, "CQI Information Release 10", dissect_ul_config_cqi_info_rel10_value },
++	{ 0x2016, "SR Information Release 8", dissect_ul_config_sr_info_rel8_value },
++	{ 0x2017, "SR Information Release 10", dissect_ul_config_sr_info_rel10_value },
++	{ 0x2018, "HARQ Information (UCI) Release 10 TDD", dissect_ul_config_harq_info_uci_rel10_tdd_value },
++	{ 0x2019, "HARQ Information (UCI) Release 8 FDD", dissect_ul_config_harq_info_uci_rel8_fdd_value },
++	{ 0x201A, "HARQ Information (UCI) Release 9 or later FDD", dissect_ul_config_harq_info_uci_rel9_later_fdd_value },
++	{ 0x201B, "SRS Information Release 8", dissect_ul_config_srs_info_rel8_value },
++	{ 0x201C, "SRS Information Release 10", dissect_ul_config_srs_info_rel10_value },
++	{ 0x201D, "HI DCI0 Request Body", dissect_hi_dci0_request_body_value },
++	{ 0x201E, "HI PDU Release 8", dissect_hi_dci0_hi_rel8_value },
++	{ 0x201F, "HI PDU Release 10", dissect_hi_dci0_hi_rel10_value },
++	{ 0x2020, "DCI UL PDU Release 8", dissect_hi_dci0_dci_ul_rel8_value },
++	{ 0x2021, "DCI UL PDU Release 10", dissect_hi_dci0_dci_ul_rel10_value },
++	{ 0x2022, "Tx Request Body", dissect_tx_request_body_value },
++	{ 0x2023, "RX Indication Body", dissect_rx_indication_body_value },
++	{ 0x2024, "RX PDU Release 8", dissect_rx_indication_rel8_value },
++	{ 0x2025, "RX PDU Release 9", dissect_rx_indication_rel9_value },
++	{ 0x2026, "HARQ Indication Body", dissect_harq_indication_body_value },
++	{ 0x2027, "HARQ PDU Release 8 TDD", dissect_harq_indication_rel8_tdd_value },
++	{ 0x2028, "HARQ PDU Release 9 or later TDD", dissect_harq_indication_rel9_later_tdd_value },
++	{ 0x2029, "HARQ PDU Release 8 FDD", dissect_harq_indication_rel8_fdd_value },
++	{ 0x202A, "HARQ PDU Release 9 or later FDD", dissect_harq_indication_rel9_later_fdd_value },
++	{ 0x202B, "CRC Indication Body", dissect_crc_indication_body_value },
++	{ 0x202C, "CRC PDU Release 8", dissect_crc_indication_rel8_value },
++	{ 0x202D, "RX SR Indication Body", dissect_rx_sr_indication_body_value },
++	{ 0x202E, "RX CQI Indication Body", dissect_rx_cqi_indication_body_value },
++	{ 0x202F, "CQI PDU Release 8", dissect_rx_cqi_indication_rel8_value },
++	{ 0x2030, "CQI PDU Release 9", dissect_rx_cqi_indication_rel9_value },
++	{ 0x2031, "RACH Indication Body", dissect_rach_indication_body_value },
++	{ 0x2032, "Preamable PDU Release 8", dissect_rach_indication_rel8_value },
++	{ 0x2033, "Preamable PDU Release 9", dissect_rach_indication_rel9_value },
++	{ 0x2034, "SRS Indication Body", dissect_srs_indication_body_value },
++	{ 0x2035, "SRS PDU Release 8", dissect_srs_indication_rel8_value },
++	{ 0x2036, "SRS PDU Release 9", dissect_srs_indication_rel9_value },
++	{ 0x2037, "SRS PDU Release 10 TDD", dissect_srs_indication_rel10_tdd_value },
++	{ 0x2038, "RX UE Information", dissect_rx_ue_info_value },
++	{ 0x2039, "DL DCI PDU Release 11", dissect_dl_config_request_dl_dci_pdu_rel11_value },
++	{ 0x203A, "DL DCI PDU Release 12", dissect_dl_config_request_dl_dci_pdu_rel12_value },
++	{ 0x203B, "DL DCI PDU Release 13", dissect_dl_config_request_dl_dci_pdu_rel13_value },
++	{ 0x203C, "DLSCH PDU Release 11", dissect_dl_config_request_dlsch_pdu_rel11_value },
++	{ 0x203D, "DLSCH PDU Release 12", dissect_dl_config_request_dlsch_pdu_rel12_value },
++	{ 0x203E, "DLSCH PDU Release 13", dissect_dl_config_request_dlsch_pdu_rel13_value },
++	{ 0x203F, "PCH PDU Release 13", dissect_dl_config_request_pch_pdu_rel13_value },
++	{ 0x2040, "CSI-RS PDU Release 13", dissect_dl_config_request_csi_rs_pdu_rel13_value },
++	{ 0x2041, "EDPCCH PDU Release 11 Parameters", dissect_dl_config_request_edpcch_params_rel11_value },
++	{ 0x2042, "EDPCCH PDU Release 13 Parameters", dissect_dl_config_request_edpcch_params_rel13_value },
++	{ 0x2043, "ULSCH PDU Release 11", dissect_ul_config_ulsch_pdu_rel11_value },
++	{ 0x2044, "ULSCH PDU Release 13", dissect_ul_config_ulsch_pdu_rel13_value },
++	{ 0x2045, "CQI RI Information Release 13", dissect_ul_config_cqi_ri_info_rel13_value },
++	{ 0x2046, "HARQ Information (ULSCH) Release 13", dissect_ul_config_harq_info_ulsch_rel13_value },
++	{ 0x2047, "UE Information Release 11", dissect_ul_config_ue_info_rel11_value },
++	{ 0x2048, "UE Information Release 13", dissect_ul_config_ue_info_rel13_value },
++	{ 0x2049, "CQI Information Release 13", dissect_ul_config_cqi_info_rel13_value },
++	{ 0x204A, "HARQ Information (UCI) Release 11 FDD/TDD", dissect_ul_config_harq_info_uci_rel11_fdd_tdd_value },
++	{ 0x204B, "HARQ Information (UCI) Release 13 FDD/TDD", dissect_ul_config_harq_info_uci_rel13_fdd_tdd_value },
++	{ 0x204C, "SRS Information Release 13", dissect_ul_config_srs_info_rel13_value },
++	{ 0x204D, "DCI UL PDU Release 12", dissect_hi_dci0_dci_ul_rel12_value },
++	{ 0x204E, "MDPCCH DCI UL PDU Release 13", dissect_hi_dci0_mdpcch_dci_ul_rel13_value },
++	{ 0x204F, "HARQ PDU Release 13 or later TDD", dissect_harq_indication_rel13_later_tdd_value },
++	{ 0x2050, "HARQ PDU Release 13 or later FDD", dissect_harq_indication_rel13_later_fdd_value },
++	{ 0x2051, "Preamable PDU Release 13", dissect_rach_indication_rel13_value },
++	{ 0x2052, "UL CQI Information", dissect_ul_cqi_information_value },
++	{ 0x2053, "SRS PDU Release 11", dissect_srs_indication_rel11_value },
++	{ 0x2054, "TDD Channel Measurement", dissect_tdd_channel_measurement_value },
++	{ 0x2055, "LBT DL Config Request Body", dissect_lbt_dl_config_request_body_value },
++	{ 0x2056, "LBT PDSCH Req PDU Release 13", dissect_lbt_dl_config_request_pdsch_req_rel13_value },
++	{ 0x2057, "LBT DRS req PDU Release 13", dissect_lbt_dl_config_request_drs_req_rel13_value },
++	{ 0x2058, "LBT DL Indication Message Body", dissect_lbt_indication_message_body_value },
++	{ 0x2059, "LBT PDSCH Resp PDU Release 13", dissect_lbt_dl_config_request_pdsch_resp_rel13_value },
++	{ 0x205A, "LBT DRS Resp PDU Release 13", dissect_lbt_dl_config_request_drs_resp_rel13_value },
++	{ 0x205B, "MPDCCH PDU Release 13", dissect_dl_config_request_mpdpcch_pdu_rel13_value },
++};
++
++const tlv_t p4_tags[] =
++{
++	{ 0x3000, "LTE RSSI Request", dissect_lte_rssi_request_value },
++	{ 0x3001, "UTRAN RSSI Request", dissect_utran_rssi_request_value },
++	{ 0x3002, "GERAN RSSI Request", dissect_geran_rssi_request_value },
++	{ 0x3003, "RSSI Indication", dissect_rssi_indication_value },
++	{ 0x3004, "LTE CELL SEARCH Request", dissect_lte_cell_search_value },
++	{ 0x3005, "UTRAN CELL SEARCH Request", dissect_utran_cell_search_value },
++	{ 0x3006, "GERAN CELL SEARCH Request", dissect_geran_cell_search_value },
++	{ 0x3007, "LTE CELL SEARCH Indication", dissect_lte_cell_search_indication_value },
++	{ 0x3008, "UTRAN CELL SEARCH Indication", dissect_utran_cell_search_indication_value },
++	{ 0x3009, "GERAN CELL SEARCH Indication", dissect_geran_cell_search_indication_value },
++	{ 0x300A, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
++	{ 0x300B, "LTE BROADCAST DETECT Request", dissect_lte_broadcast_detect_request_value },
++	{ 0x300C, "UTRAN BROADCAST DETECT Request", dissect_utran_broadcast_detect_request_value },
++	{ 0x300D, "PNF CELL SEARCH STATE", dissect_pnf_cell_search_state_value },
++	{ 0x300E, "LTE BROADCAST DETECT Indication", dissect_lte_broadcast_detect_indication_value },
++	{ 0x300F, "UTRAN BROADCAST DETECT Indication", dissect_utran_broadcast_detect_indication_value },
++	{ 0x3010, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
++	{ 0x3011, "LTE SYSTEM INFORMATION SCHEDULE Request", dissect_lte_system_information_schedule_request_value },
++	{ 0x3012, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
++	{ 0x3013, "LTE SYSTEM INFORMATION SCHEDULE Indication", dissect_lte_system_information_schedule_indication_value },
++	{ 0x3014, "LTE SYSTEM INFORMATION Request", dissect_lte_system_information_request_value },
++	{ 0x3015, "UTRAN SYSTEM INFORMATION Request", dissect_utran_system_information_request_value },
++	{ 0x3016, "GERAN SYSTEM INFORMATION Request", dissect_geran_system_information_request_value },
++	{ 0x3017, "PNF CELL BROADCAST STATE", dissect_pnf_cell_broadcast_state_value },
++	{ 0x3018, "LTE SYSTEM INFORMATION Indication", dissect_lte_system_information_indication_value },
++	{ 0x3019, "UTRAN SYSTEM INFORMATION Indication", dissect_utran_system_information_indication_value },
++	{ 0x301A, "GERAN SYSTEM INFORMATION Indication", dissect_geran_system_information_indication_value },
++};
++
++
++static const tlv_t* look_up_tlv(int tag_id)
++{
++	const tlv_t* tlv = NULL;
++
++	static const gint num_configuration_tags = sizeof(configuration_tags) / sizeof(tlv_t);
++	static const gint num_nfapi_tags = sizeof(nfapi_tags) / sizeof(tlv_t);
++	static const gint num_p7_tags = sizeof(p7_tags) / sizeof(tlv_t);
++	static const gint num_p4_tags = sizeof(p4_tags) / sizeof(tlv_t);
++
++	if (tag_id >= 0x0000 && tag_id <= (0x0000 + num_configuration_tags - 1)) // 0x0133)
++	{
++		tlv = &configuration_tags[tag_id];
++	}
++	else if (tag_id >= 0x1000 && tag_id <= (0x1000 + num_nfapi_tags - 1)) // 0x100D)
++	{
++		tlv = &nfapi_tags[tag_id - 0x1000];
++	}
++	else if (tag_id >= 0x2000 && tag_id <= (0x2000 + num_p7_tags - 1)) //0x205B)
++	{
++		tlv = &p7_tags[tag_id - 0x2000];
++	}
++	else if (tag_id >= 0x3000 && tag_id <= (0x3000 + num_p4_tags - 1)) // 0x301A)
++	{
++		tlv = &p4_tags[tag_id - 0x3000];
++	}
++	return tlv;
++}
++
++
++static proto_item* dissect_tl_header(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tl, "TL");
++	ptvcursor_add(ptvc, hf_nfapi_tl_tag, 2, ENC_BIG_ENDIAN);
++	proto_item* item = ptvcursor_add(ptvc, hf_nfapi_tl_length, 2, ENC_BIG_ENDIAN);
++	ptvcursor_pop_subtree(ptvc);
++
++	return item;
++}
++
++static void dissect_tlv_list(ptvcursor_t* ptvc, packet_info* pinfo, gint len)
++{
++	while (ptvcursor_current_offset(ptvc) < len)
++	{
++		guint16 tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++		guint16 tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
++
++		const tlv_t* tlv = look_up_tlv(tlv_id);
++
++		if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
++		{
++			ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "%s", tlv->name);
++			proto_item* tlv_length_item = dissect_tl_header(ptvc, pinfo);
++
++			// There are rare cases where the len of the tlv is 0.
++			if (tlv_len > 0)
++			{
++
++				if (tlv->decode != NULL)
++				{
++					// Create a sub buff with the correct length, so we can detect reading off the end
++					tvbuff_t* sub_tvbuff = tvb_new_subset_length(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc), tlv_len);
++					ptvcursor_t* sub_ptvc = ptvcursor_new(ptvcursor_tree(ptvc), sub_tvbuff, 0);
++
++					tlv->decode(sub_ptvc, pinfo);
++
++					if (ptvcursor_current_offset(sub_ptvc) != tlv_len)
++					{
++						// error in the tlv length
++						expert_add_info_format(pinfo, tlv_length_item, &ei_invalid_tlv_length, "TLV length does not match decoded length");
++					}
++
++					ptvcursor_free(sub_ptvc);
++				}
++
++				ptvcursor_advance(ptvc, tlv_len);
++			}
++
++			ptvcursor_pop_subtree(ptvc);
++		}
++		else
++		{
++			if (tlv_id >= 0xF000 /* && tlv_id <= 0xFFFF*/)
++			{
++				ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown Vendor Extension Tag");
++			}
++			else
++			{
++				ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_tlv_tree, "Unknown");
++			}
++
++			dissect_tl_header(ptvc, pinfo);
++			ptvcursor_advance(ptvc, tlv_len);
++			ptvcursor_pop_subtree(ptvc);
++		}
++	}
++}
++
++
++static void dissect_rx_indication_body_value(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	guint number_of_pdu_addr = ptvcursor_current_offset(ptvc); // *offset;
++	guint16 count = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_number_pdus, 2, ENC_BIG_ENDIAN);
++
++	guint16* lengths = (guint16*)wmem_alloc0(wmem_packet_scope(), count * 2);
++	memset(lengths, 0, count * 2);
++
++	guint16 i = 0;
++
++	if (count > 0)
++	{
++		ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "RX PDU List");
++		gint pdu_end = tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc);
++
++		while (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) > 0 &&
++			   ptvcursor_current_offset(ptvc) < pdu_end )
++		{
++			guint16 tlv_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++			//guint16 tlv_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc) + 2);
++
++			if (tlv_id == 0x2038)
++			{
++				if (i != 0)
++					ptvcursor_pop_subtree(ptvc);
++
++				ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "[%d]", i);
++
++				i++;
++			}
++
++			char* tlv_name = "Unknown";
++			const tlv_t* tlv = look_up_tlv(tlv_id);
++
++			if (tlv != NULL && tlv->name != NULL && tlv->tag_id == tlv_id)
++			{
++				tlv_name = tlv->name;
++			}
++
++			ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_rx_indication_pdu_list, "%s", tlv_name);
++
++			dissect_tl_header(ptvc, pinfo);
++
++
++			if (tlv_id == 0x2038)
++			{
++				dissect_rx_ue_info_value(ptvc, pinfo);
++			}
++			else if (tlv_id == 0x2024)
++			{
++				lengths[i - 1] = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++				ptvcursor_add(ptvc, hf_nfapi_length, 2, ENC_BIG_ENDIAN);
++				int data_offset = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++				ptvcursor_add(ptvc, hf_nfapi_data_offset, 2, ENC_BIG_ENDIAN);
++				ptvcursor_add(ptvc, hf_nfapi_ul_cqi, 1, ENC_BIG_ENDIAN);
++				ptvcursor_add(ptvc, hf_nfapi_timing_advance, 2, ENC_BIG_ENDIAN);
++
++				if ((data_offset > 0) && (pdu_end == (tvb_reported_length_remaining(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc)) + ptvcursor_current_offset(ptvc))))
++				{
++					pdu_end = number_of_pdu_addr + data_offset;
++				}
++
++			}
++			else if (tlv_id == 0x2025)
++			{
++				dissect_rx_indication_rel9_value(ptvc, pinfo);
++			}
++
++			ptvcursor_pop_subtree(ptvc);
++
++		}
++
++		// pop the last pdu index.
++		ptvcursor_pop_subtree(ptvc);
++
++		ptvcursor_pop_subtree(ptvc);
++	}
++
++	for (i = 0; i < count; ++i)
++	{
++		ptvcursor_add(ptvc, hf_nfapi_pdu, lengths[i], ENC_NA);
++	}
++}
++
++
++// ----------------------------------------------------------------------------|
++
++static void dissect_p45_header(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_p4_p5_message_header, "P4 P5 Header");
++	ptvcursor_add(ptvc, hf_nfapi_p4_p5_message_header_phy_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p4_p5_message_header_message_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p4_p5_message_header_message_length, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p4_p5_message_header_spare, 2, ENC_BIG_ENDIAN);
++	ptvcursor_pop_subtree(ptvc);
++
++}
++
++static void dissect_p7_header_new(ptvcursor_t* ptvc, guint8* m, guint8* seg, guint8* seq)
++{
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_p7_message_header, "P7 Header");
++
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_phy_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_message_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_message_length, 2, ENC_BIG_ENDIAN);
++
++	guint8 m_seg = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	*m = (m_seg & 0x80) >> 7;
++	*seg = m_seg & 0x7F;
++
++	proto_tree_add_bits_item(ptvcursor_tree(ptvc), hf_nfapi_p7_message_header_m, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8, 1, ENC_NA);
++	proto_tree_add_bits_item(ptvcursor_tree(ptvc), hf_nfapi_p7_message_header_segment, ptvcursor_tvbuff(ptvc), ((ptvcursor_current_offset(ptvc)) * 8) + 1, 7, ENC_NA);
++	ptvcursor_advance(ptvc, 1);
++
++
++	*seq = tvb_get_guint8(ptvcursor_tvbuff(ptvc), ptvcursor_current_offset(ptvc));
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_sequence_number, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_checksum, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_transmit_timestamp, 4, ENC_BIG_ENDIAN);
++
++	ptvcursor_pop_subtree(ptvc);
++}
++
++
++static void dissect_p7_header(ptvcursor_t * ptvc, packet_info* pinfo _U_)
++{
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_p7_message_header, "P7 Header");
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_phy_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_message_id, 2, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_message_length, 2, ENC_BIG_ENDIAN);
++
++	proto_tree_add_bits_item(ptvcursor_tree(ptvc), hf_nfapi_p7_message_header_m, ptvcursor_tvbuff(ptvc), (ptvcursor_current_offset(ptvc)) * 8, 1, ENC_NA);
++	proto_tree_add_bits_item(ptvcursor_tree(ptvc), hf_nfapi_p7_message_header_segment, ptvcursor_tvbuff(ptvc), ((ptvcursor_current_offset(ptvc)) * 8) + 1, 7, ENC_NA);
++	ptvcursor_advance(ptvc, 1);
++
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_sequence_number, 1, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_checksum, 4, ENC_BIG_ENDIAN);
++	ptvcursor_add(ptvc, hf_nfapi_p7_message_header_transmit_timestamp, 4, ENC_BIG_ENDIAN);
++
++	ptvcursor_pop_subtree(ptvc);
++}
++
++static reassembly_table ul_p7_reassemble_table;
++static reassembly_table dl_p7_reassemble_table;
++
++static int hf_msg_fragments = -1;
++static int hf_msg_fragment = -1;
++static int hf_msg_fragment_overlap = -1;
++static int hf_msg_fragment_overlap_conflicts = -1;
++static int hf_msg_fragment_multiple_tails = -1;
++static int hf_msg_fragment_too_long_fragment = -1;
++static int hf_msg_fragment_error = -1;
++static int hf_msg_fragment_count = -1;
++static int hf_msg_reassembled_in = -1;
++static int hf_msg_reassembled_length = -1;
++static gint ett_msg_fragment = -1;
++static gint ett_msg_fragments = -1;
++
++static const fragment_items msg_frag_items = {
++	/* Fragment subtrees */
++	&ett_msg_fragment,
++	&ett_msg_fragments,
++	/* Fragment fields */
++	&hf_msg_fragments,
++	&hf_msg_fragment,
++	&hf_msg_fragment_overlap,
++	&hf_msg_fragment_overlap_conflicts,
++	&hf_msg_fragment_multiple_tails,
++	&hf_msg_fragment_too_long_fragment,
++	&hf_msg_fragment_error,
++	&hf_msg_fragment_count,
++	/* Reassembled in field */
++	&hf_msg_reassembled_in,
++	/* Reassembled length field */
++	&hf_msg_reassembled_length,
++	NULL,
++	/* Tag */
++	"Message fragments"
++};
++
++static void dissect_nfapi_ul_p7(ptvcursor_t *ptvc, packet_info *pinfo)
++{
++	guint8 m;
++	guint8 seg;
++	guint8 seq;
++
++	guint8 save_fragmented;
++	ptvcursor_t* sub_ptvc = 0;
++
++	guint16 msg_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), 2);
++	guint16 msg_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), 4);
++
++	dissect_p7_header_new(ptvc, &m, &seg, &seq);
++	save_fragmented = pinfo->fragmented;
++
++	if (m == 1 || (m == 0 && seg > 0))
++	{
++		tvbuff_t* tvbuff = ptvcursor_tvbuff(ptvc);
++		guint offset = ptvcursor_current_offset(ptvc);
++		proto_tree* tree = ptvcursor_tree(ptvc);
++
++		pinfo->fragmented = TRUE;
++
++		fragment_head *fd_head = fragment_add_seq_check(&ul_p7_reassemble_table, tvbuff, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
++
++		if (fd_head)
++		{
++			tvbuff_t * new_tvb = process_reassembled_data(tvbuff, offset, pinfo, "Reassembled UL P7", fd_head, &msg_frag_items, NULL, tree);
++			if (new_tvb)
++			{
++				sub_ptvc = ptvcursor_new(tree, new_tvb, 0);
++
++				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
++			}
++			else
++			{
++				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
++				return;
++			}
++		}
++		else
++		{
++			return;
++		}
++	}
++
++	pinfo->fragmented = save_fragmented;
++
++	{
++		switch (msg_id)
++		{
++			case NFAPI_HARQ_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_CRC_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_RX_ULSCH_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_RACH_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_SRS_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_RX_SR_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++			case NFAPI_RX_CQI_INDICATION_MSG_ID:
++			{
++				ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++				dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			}
++			break;
++
++		};
++	}
++
++	if (sub_ptvc)
++		ptvcursor_free(sub_ptvc);
++}
++
++static void dissect_nfapi_dl_p7(ptvcursor_t *ptvc, packet_info *pinfo)
++{
++	guint8 m;
++	guint8 seg;
++	guint8 seq;
++
++	guint8 save_fragmented;
++	ptvcursor_t* sub_ptvc = 0;
++
++	guint16 msg_id = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), 2);
++	guint16 msg_len = tvb_get_ntohs(ptvcursor_tvbuff(ptvc), 4);
++
++	dissect_p7_header_new(ptvc, &m, &seg, &seq);
++	save_fragmented = pinfo->fragmented;
++
++	if (m == 1 || (m == 0 && seg > 0))
++	{
++		tvbuff_t* tvbuff = ptvcursor_tvbuff(ptvc);
++		guint offset = ptvcursor_current_offset(ptvc);
++		proto_tree* tree = ptvcursor_tree(ptvc);
++
++		pinfo->fragmented = TRUE;
++
++		fragment_head *fd_head = fragment_add_seq_check(&dl_p7_reassemble_table, tvbuff, offset, pinfo, seq, NULL, seg, msg_len - offset, (m == 1));
++
++		if (fd_head)
++		{
++			tvbuff_t * new_tvb = process_reassembled_data(tvbuff, offset, pinfo, "Reassembled DL P7", fd_head, &msg_frag_items, NULL, tree);
++			if (new_tvb)
++			{
++				sub_ptvc = ptvcursor_new(tree, new_tvb, 0);
++				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Reassembled %d]", seg);
++			}
++			else
++			{
++				col_append_fstr(pinfo->cinfo, COL_INFO, "[NFAPI P7 Segment %d]", seg);
++				return;
++			}
++		}
++		else
++		{
++			return;
++		}
++	}
++
++	pinfo->fragmented = save_fragmented;
++
++	switch (msg_id)
++	{
++		case NFAPI_DL_CONFIG_REQUEST_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			break;
++		}
++		case NFAPI_UL_CONFIG_REQUEST_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++		}
++		break;
++		case NFAPI_HI_DCI0_REQUEST_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++		}
++		break;
++		case NFAPI_TX_REQUEST_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++		}
++		break;
++		case NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++		}
++		break;
++		case NFAPI_LBT_DL_INDICATION_MSG_ID:
++		{
++			ptvcursor_add(sub_ptvc ? sub_ptvc : ptvc, hf_nfapi_sfn_sf, 2, ENC_BIG_ENDIAN);
++			dissect_tlv_list(sub_ptvc ? sub_ptvc : ptvc, pinfo, msg_len);
++			break;
++		}
++	}
++
++	if (sub_ptvc)
++		ptvcursor_free(sub_ptvc);
++}
++
++
++static int dissect_nfapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
++{
++	col_set_str(pinfo->cinfo, COL_PROTOCOL, "NFAPI");
++
++	ptvcursor_t* ptvc = ptvcursor_new(tree, tvb, 0);
++
++	guint16 msg_id = tvb_get_ntohs(tvb, 2);
++
++	// Get the name of the message
++	const gchar* message_str = val_to_str_const(msg_id, message_id_vals, "Unknown");
++
++	// Append to the Info string the nFAPI messages
++	col_clear(pinfo->cinfo, COL_INFO);
++	col_append_fstr(pinfo->cinfo, COL_INFO, " %s ", message_str);
++
++	// Flag if this is a vendor extention message, could do it for P4, 5, 7
++	if (msg_id >= 0x0300 && msg_id <= 0x03FF)
++	{
++		col_append_fstr(pinfo->cinfo, COL_INFO, " Vendor Extension");
++	}
++
++	// Create the top level tree
++	ptvcursor_add_text_with_subtree(ptvc, SUBTREE_UNDEFINED_LENGTH, ett_nfapi_message_tree, "%s", message_str);
++
++	switch (msg_id)
++	{
++		case NFAPI_HARQ_INDICATION_MSG_ID:
++		case NFAPI_CRC_INDICATION_MSG_ID:
++		case NFAPI_RX_ULSCH_INDICATION_MSG_ID:
++		case NFAPI_RACH_INDICATION_MSG_ID:
++		case NFAPI_SRS_INDICATION_MSG_ID:
++		case NFAPI_RX_SR_INDICATION_MSG_ID:
++		case NFAPI_RX_CQI_INDICATION_MSG_ID:
++		{
++			dissect_nfapi_ul_p7(ptvc, pinfo);
++		}
+ 		break;
+-		// LBT_DL.indication
+-		case 0x8D:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint16_with_conversion(msg_tree, hf_nfapi_sfn_sf, tvb, &offset, sfn_sf_conversion);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// PNF_PARAM.request
+-		case 0x100:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// PNF_PARAM.response
+-		case 0x101:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// PNF_CONFIG.request
+-		case 0x102:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// PNF_CONFIG.response
+-		case 0x103:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// PNF_START.request
+-		case 0x104:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
+-		}
+-		// PNF_START.response
+-		case 0x105:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// PNF_STOP.response
+-		case 0x106:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
+-		}
+-		// PNF_STOP.request
+-		case 0x107:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// PARAM.request
+-		case 0x108:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
+-		}
+-		// PARAM.response
+-		case 0x109:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// CONFIG.request
+-		case 0x10A:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_num_tlv, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-		// CONFIG.response
+-		case 0x10B:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// START.request
+-		case 0x10C:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
+-		}
+-		// START.response
+-		case 0x10D:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// STOP.request
+-		case 0x10E:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
+-		}
+-		// STOP.response
+-		case 0x10F:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-		// MEASUREMENT.request
+-		case 0x110:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++
++		case NFAPI_DL_CONFIG_REQUEST_MSG_ID:
++		case NFAPI_UL_CONFIG_REQUEST_MSG_ID:
++		case NFAPI_HI_DCI0_REQUEST_MSG_ID:
++		case NFAPI_TX_REQUEST_MSG_ID:
++		case NFAPI_LBT_DL_CONFIG_REQUEST_MSG_ID:
++		case NFAPI_LBT_DL_INDICATION_MSG_ID:
++		{
++			dissect_nfapi_dl_p7(ptvc, pinfo);
++			break;
++		}
++
++		case NFAPI_PNF_PARAM_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_PNF_PARAM_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++
++			break;
++		}
++		case NFAPI_PNF_CONFIG_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_PNF_CONFIG_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_PNF_START_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
++		}
++		case NFAPI_PNF_START_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_PNF_STOP_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
++		}
++		case NFAPI_PNF_STOP_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_PARAM_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
++		}
++		case NFAPI_PARAM_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 1, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_num_tlv, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_CONFIG_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_CONFIG_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_START_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
++		}
++		case NFAPI_START_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_STOP_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
++		}
++		case NFAPI_STOP_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_MEASUREMENT_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_MEASUREMENT_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++
++		// P4
++		case NFAPI_RSSI_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_rat_type, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_RSSI_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
++		}
++		case NFAPI_RSSI_INDICATION_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
++		}
++		case NFAPI_CELL_SEARCH_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_rat_type, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// MEASUREMENT.response
+-		case 0x111:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
+-		}
+-
+-		// P4
+-		// RSSI.request
+-		case 0x200:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_rat_type, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_CELL_SEARCH_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// RSSI.response
+-		case 0x201:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
++		case NFAPI_CELL_SEARCH_INDICATION_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// RSSI.indication
+-		case 0x202:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_BROADCAST_DETECT_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_rat_type, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// CELL_SEARCH.request
+-		case 0x203:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_rat_type, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_BROADCAST_DETECT_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// CELL_SEARCH.response
+-		case 0x204:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
++		case NFAPI_BROADCAST_DETECT_INDICATION_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// CELL_SEARCH.indication
+-		case 0x205:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_rat_type, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// BROADCAST_DETECT.request
+-		case 0x206:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_rat_type, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// BROADCAST_DETECT.response
+-		case 0x207:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// BROADCAST_DETECT.indication
+-		case 0x208:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_rat_type, 1, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// SYSTEM_INFORMATION_SCHEDULE.request
+-		case 0x209:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_rat_type, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// SYSTEM_INFORMATOIN_SCHEDULE.response
+-		case 0x20A:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
++		case NFAPI_SYSTEM_INFORMATION_INDICATION_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			dissect_tlv_list(ptvc, pinfo, tvb_reported_length(tvb));
++			break;
+ 		}
+-		// SYSTEM_INFORMATION_SCHEDULE.indication
+-		case 0x20B:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_NMM_STOP_REQUEST_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			break;
+ 		}
+-		// SYSTEM_INFORMATION.request
+-		case 0x20C:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint8(msg_tree, hf_nfapi_rat_type, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_NMM_STOP_RESPONSE_MSG_ID:
++		{
++			dissect_p45_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_p4_error_code, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// SYSTEM_INFORMATION.response
+-		case 0x20D:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
++		case NFAPI_DL_NODE_SYNC_MSG_ID:
++		{
++			dissect_p7_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_ul_node_sync_t1, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_ul_node_sync_t2, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_ul_node_sync_t3, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// SYSTEM_INFORMATION.indication
+-		case 0x20E:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			dissect_tlv_list(tvb, pinfo, msg_tree, data, &offset, tvb_reported_length(tvb));
+-			break;
++		case NFAPI_UL_NODE_SYNC_MSG_ID:
++		{
++			dissect_p7_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_dl_node_sync_t1, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_dl_node_sync_delta_sfn_sf, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// NMM_STOP.request
+-		case 0x20F:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			break;
++		case NFAPI_TIMING_INFO_MSG_ID:
++		{
++			dissect_p7_header(ptvc, pinfo);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_last_sfn_sf, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_time_since_last_timing_info, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_dl_config_jitter, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_tx_request_jitter, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_ul_config_jitter, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_hi_dci0_jitter, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_dl_config_latest_delay, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_tx_request_latest_delay, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_ul_config_latest_delay, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_hi_dci0_latest_delay, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_dl_config_earliest_arrival, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_tx_request_earliest_arrival, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_ul_config_earliest_arrival, 4, ENC_BIG_ENDIAN);
++			ptvcursor_add(ptvc, hf_nfapi_timing_info_hi_dci0_earliest_arrival, 4, ENC_BIG_ENDIAN);
++			break;
+ 		}
+-		// NMM_STOP_response
+-		case 0x210:
+-		{
+-			dissect_p45_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_p4_error_code, tvb, &offset, 0);
+-			break;
+-		}
+-
+-		// DL_NODE.sync
+-		case 0x0180:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_ul_node_sync_t1, tvb, &offset, "microseconds");
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_ul_node_sync_t2, tvb, &offset, "microseconds");
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_ul_node_sync_t3, tvb, &offset, "microseconds");
+-			break;
+-		}
+-		// UL_NODE.sync
+-		case 0x0181:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_dl_node_sync_t1, tvb, &offset, "microseconds");
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_dl_node_sync_delta_sfn_sf, tvb, &offset, 0);
+-			break;
+-		}
+-		// TIMING_INFO
+-		case 0x0182:
+-		{
+-			dissect_p7_header(tvb, pinfo, msg_tree, data, &offset);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_last_sfn_sf, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_time_since_last_timing_info, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_dl_config_jitter, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_tx_request_jitter, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_ul_config_jitter, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_hi_dci0_jitter, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_dl_config_latest_delay, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_tx_request_latest_delay, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_ul_config_latest_delay, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_hi_dci0_latest_delay, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_dl_config_earliest_arrival, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_tx_request_earliest_arrival, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_ul_config_earliest_arrival, tvb, &offset, 0);
+-			proto_tree_add_uint32(msg_tree, hf_nfapi_timing_info_hi_dci0_earliest_arrival, tvb, &offset, 0);
+-			break;
+-		}
+-		default:
+-		{
+-			// todo : is this vendor extention?
+-			break;
+-		}
+-	};
+-
+-	return tvb_captured_length(tvb);
+-}
+-
+-static void nfapi_tag_vals_fn(gchar* s, guint32 v)
+-{
+-	int index = look_up_tlv(v);
+-	if (v >= 0)
+-	{
+-		g_snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", tags[index].name, v);
+-	}
+-	else
+-	{
+-		g_snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", "Unknown", v);
+-	}
+-}
+-
+-// ----------------------------------------------------------------------------|
+-
+-void proto_register_nfapi(void)
+-{
+-
+-	static hf_register_info hf[] =
+-	{
+-		{ &hf_msg_fragments, { "Message fragments", "afs.fragments", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment, { "Message fragment", "afs.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_overlap, { "Message fragment overlap", "afs.fragment.overlap", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_overlap_conflicts, { "Message fragment overlapping with conflicting data", "afs.fragment.overlap.conflicts", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_multiple_tails, { "Message has multiple tail fragments", "afs.fragment.multiple_tails", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_too_long_fragment, { "Message fragment too long", "afs.fragment.too_long_fragment", FT_BOOLEAN, 0, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_error, { "Message defragmentation error", "afs.fragment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_fragment_count, { "Message fragment count", "afs.fragment.count", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_reassembled_in, { "Reassembled in", "afs.reassembled.in", FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_reassembled_length, { "Reassembled length", "afs.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_msg_reassembled_data, { "Reassembled data", "afs.reassembled.data", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+-		{ &hf_nfapi_message_tree, { "Message tree", "nfapi.message_tree", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_p5_message_header, { "P4 P5 Header", "nfapi.p4_p5_message_header",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_p5_message_header_phy_id, { "PHY ID", "nfapi.p4_p5_message_header.phy_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_p5_message_header_message_id, { "Message ID", "nfapi.p4_p5_message_header.message_id", FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_p5_message_header_message_length, { "Message Length", "nfapi.p4_p5_message_header.message_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_p5_message_header_spare,	{ "Spare", "nfapi.p4_p5_message_header.spare", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header, { "P7 Header", "nfapi.p7_message_header", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_phy_id, { "Phy ID", "nfapi.p7_message_header.phy_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_message_id, { "Message ID", "nfapi.p7.message_header.message_id", FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_message_length, { "Message Length", "nfapi.p7_message_header.message_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_m, { "M", "nfapi.p7_message_header.m_segment_sequence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_segment, { "Segment Number", "nfapi.p7_message_header.m_segment_sequence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_sequence_number, { "Sequence Number", "nfapi.p7_message_header.m_segment_sequence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_checksum, { "Checksum", "nfapi.p7_message_header.checksum", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p7_message_header_transmit_timestamp, { "Transmit Timestamp", "nfapi.p7_message_header.timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tlv_tree, { "TAG", "nfapi.tlv.tree", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tl, { "TL", "nfapi.tl", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tl_tag, { "TL Tag", "nfapi.tl_tag", FT_UINT16, BASE_CUSTOM, CF_FUNC(nfapi_tag_vals_fn), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tl_length, { "TL Length", "nfapi.tl_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tag_uint8_value, { "Value", "nfapi.tag.uint8.value", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tag_uint16_value, { "Value", "nfapi.tag.uint16.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_param_response, { "Param Request", "nfapi.param.request", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_error_code, { "Error Code", "nfapi.error.code", FT_UINT8, BASE_DEC, VALS(nfapi_error_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_p4_error_code, { "Error Code", "nfapi.p4_error.code", FT_UINT8, BASE_DEC, VALS(nfapi_p4_error_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rat_type, { "RAT Type", "nfapi.rat_type", FT_UINT8, BASE_DEC, VALS(nfapi_rat_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_num_tlv, { "Number of TLV", "nfapi.param.response.num_tlv", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phy_state, { "Phy state value", "nfapi.phy.state", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_modulation_support,	{ "Modulation value", "nfapi.modulation.support", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_ue_per_sf, { "Downlink UEs per Subframe", "nfapi.dl.ue.per.sf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_ue_per_sf, { "Uplink UEs per Subframe", "nfapi.ul.ue.per.sf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_duplex_mode, { "Duplex Mode", "nfapi.duplex.mode", FT_UINT16, BASE_DEC, VALS(nfapi_duplex_mode_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_bandwidth_support, { "Downlink bandwidth support", "nfapi.dl.bandwidth.support", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_bandwidth_support, { "Uplink bandwidth support", "nfapi.ul.bandwidth.support", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_modulation_support, { "Downlink modulation support", "nfapi.dl.modulation.support", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_modulation_support, { "Uplink modulation support", "nfapi.ul.modulation.support", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phy_antenna_capability, { "Phy Antenna capability", "nfapi.phy.antenna.capability", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_release_capability, { "Release capability", "nfapi.release.capability", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mbsfn_capability, { "MBSFN capability", "nfapi.mbsfn.capability", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_capability, { "LAA Support", "nfapi.laa.support", FT_BOOLEAN, 8, TFS(&support_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pd_sensing_lbt_support, { "PD sensing LBT support", "nfapi.pd.sensing.lbt.support", FT_BOOLEAN, 8, TFS(&support_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_multi_carrier_lbt_support, { "Multi carrier LBT support", "nfapi.multi.carrier.lbt.support", FT_UINT16, BASE_DEC, VALS(nfapi_mutli_carrier_lbt_support_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_partial_sf_support, { "Partial SF support", "nfapi.partial.sf.support", FT_BOOLEAN, 8, TFS(&partial_sf_support_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_reference_signal_power, { "Reference signal power", "nfapi.ref_sig_power", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_primary_synchronization_signal_epre_eprers, { "Primary synchronization signal EPRE/EPRERS", "nfapi.primary.sync.signal", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_secondary_synchronization_signal_epre_eprers, { "Secondary synchronization signal EPRE/EPRERS", "nfapi.secondary.sync.signal", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_physical_cell_id, { "Physical Cell ID", "nfapi.physical.cell.id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phich_resource, { "PHICH Resource", "nfapi.phich.resource", FT_UINT16, BASE_DEC, VALS(nfapi_phich_resource_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phich_duration, { "PHICH Duration", "nfapi.phich.duration", FT_BOOLEAN, 8, TFS(&phich_duration_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phich_power_offset, { "PHICH Power Offset", "nfapi.phich.power.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_configuration_index, { "Configuration Index", "nfapi.configuration.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_root_sequence_index, { "Root sequence Index", "nfapi.root.sequence.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_zero_correlation_zone_configuration, { "Zero correlation zone configuration", "nfapi.zero.correlation.zone.configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_high_speed_flag, { "High Speed Flag", "nfapi.high.speed.flag", FT_BOOLEAN, 8, TFS(&high_speed_flag_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_offset, { "Frequency offset", "nfapi.frequency.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hopping_mode, { "Hopping Mode", "nfapi.hopping.mode", FT_BOOLEAN, 8, TFS(&hopping_mode_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hopping_offset, { "Hopping offset", "nfapi.hopping.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_pucch_shift, { "Delta PUCCH Shift", "nfapi.delta.pucch.shift", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_cqi_rb, { "N CQI RB", "nfapi.n.cqi.rb", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_an_cs, { "N AN CS", "nfapi.n.an.cs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n1_pucch_an, { "N1 PUCCH AN", "nfapi.n1.pucch.an", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bandwidth_configuration, { "Bandwidth configuration", "nfapi.bw.configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_subframe_configuration, { "SRS subframe configuration", "nfapi.srs.subframe.configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uplink_rs_hopping, { "Uplink RS hopping", "nfapi.uplink.rs.hopping", FT_UINT16, BASE_DEC, VALS(nfapi_uplink_rs_hopping_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_group_assignment, { "Group assigment", "nfapi.group.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cyclic_shift_1_for_drms, { "Cyclic Shift 1 for DRMS", "nfapi.cyclic.shift.1.for.drms", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_subframe_assignment, { "Subframe_assignment", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_special_subframe_patterns, { "Special Subframe patterns", "nfapi.special.subframe.patterns", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ed_threshold_for_lbt_for_pdsch, { "ED Threshold for LBT for PDSCH", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ed_threshold_for_lbt_for_drs, { "ED Threshold for LBT for DRS", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pd_threshold, { "PD Threshold", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_multi_carrier_type, { "Multi carrier type", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, VALS(nfapi_laa_carrier_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_multi_carrier_tx, { "Multi carrier TX", "nfapi.subframe.assignment", FT_BOOLEAN, 8, TFS(&nfapi_multi_carrier_tx_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_multi_carrier_freeze, { "Multi carrier freeze ", "nfapi.subframe.assignment", FT_BOOLEAN, 8, TFS(&nfapi_multi_carrier_freeze_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tx_antenna_ports_for_drs, { "Tx antenna ports for DRS", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_power_for_drs, { "Transmission power for DRS", "nfapi.subframe.assignment", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pbch_repetitions_enabled_r13, { "PBCH Repetitions enable R13", "nfapi.pbch.repetitions.enabled_r13", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_cat_m_root_sequence_index, { "PRACH CAT-M Root sequence index", "nfapi.prach.cat_m.root.squence.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_cat_m_zero_correlation_zone_configuration, { "PRACH CAT-M Zero correlation zone configuration", "nfapi.prach.cat_m.zero.correlation.zone.configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_cat_m_high_speed_flag, { "PRACH CAT-M High speed flag", "nfapi.prach.cat_m.high.speed.flag", FT_BOOLEAN, 8, TFS(&high_speed_flag_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_enable, { "PRACH CE level #0 Enable", "nfapi.prach.ce.level.0.enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_configuration_index, { "PRACH CE level #0 Configuration index", "nfapi.prach.ce.level.0.configuration.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_frequency_offset, { "PRACH CE level #0 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt, { "PRACH CE level #0 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_starting_subframe_periodicity, { "CE level #0 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_hopping_enabled, { "PRACH CE level #0 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_0_hopping_offset, { "PRACH CE level #0 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_enable, { "PRACH CE level #1 Enable", "nfapi.prach.ce.level.0.enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_configuration_index, { "PRACH CE level #1 Configuration index", "nfapi.prach.ce.level.0.configuration.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_frequency_offset, { "PRACH CE level #1 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt, { "PRACH CE level #1 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_starting_subframe_periodicity, { "CE level #1 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_hopping_enabled, { "PRACH CE level #1 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_1_hopping_offset, { "PRACH CE level #1 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_enable, { "PRACH CE level #2 Enable", "nfapi.prach.ce.level.0.enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_configuration_index, { "PRACH CE level #2 Configuration index", "nfapi.prach.ce.level.0.configuration.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_frequency_offset, { "PRACH CE level #2 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt, { "PRACH CE level #2 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_starting_subframe_periodicity, { "CE level #2 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_hopping_enabled, { "PRACH CE level #2 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_2_hopping_offset, { "PRACH CE level #2 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_enable, { "PRACH CE level #3 Enable", "nfapi.prach.ce.level.0.enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_configuration_index, { "PRACH CE level #3 Configuration index", "nfapi.prach.ce.level.0.configuration.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_frequency_offset, { "PRACH CE level #3 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt, { "PRACH CE level #3 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_starting_subframe_periodicity, { "CE level #3 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_hopping_enabled, { "PRACH CE level #3 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_ce_level_3_hopping_offset, { "PRACH CE level #3 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a, { "PUCCH Interval-ULHoppingConfigCommonModeA", "nfapi.pucch.interval.ulhopping.config.common.mode.a", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b, { "PUCCH Interval-ULHoppingConfigCommonModeB", "nfapi.pucch.interval.ulhopping.config.common.mode.b", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_data_report_mode, { "Data Report Mode", "nfapi.data.report.mode", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sfnsf, { "SFN/SF", "nfapi.sfn.sf", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_max_up_pts, { "Max UpPTS frames", "nfapi.max.uppts.frame", FT_BOOLEAN, 8, TFS(&enabled_disabled_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_acknack_srs_simultaneous_transmission, { "SRS AckNack Simultaneous transmission", "nfapi.srs.acknack.simult.tx", FT_BOOLEAN, 8, TFS(&srs_simult_tx_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_address, { "PNF address", "nfapi.p7.pnf.address", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_address_ipv4, { "PNF IPV4", "nfapi.pnf.address.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_address_ipv6, { "PNF IPV6", "nfapi.pnf.address.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_vnf_address, { "VNF address", "nfapi.vnf.address", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_vnf_address_ipv4, { "VNF IPV4 Address", "nfapi.vnf.address.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_vnf_address_ipv6, { "VNF IPV6 Address", "nfapi.vnf.address.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_port, { "PNF PORT value", "nfapi.config.pnf.port.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_vnf_port, { "VNF PORT value", "nfapi.config.vnf.port.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rf_bands, { "RF Bands", "nfapi.rf.bands", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rf_bands_count,	{ "Number of RF Bands", "nfapi.rf.bands.count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rf_bands_value, { "Band value", "nfapi.rf.bands.value",	FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_param_request, { "PNF Param Request", "nfapi.pnf.param.request", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_param_response, { "PNF Param Response", "nfapi.pnf.param.response",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_config_request,	{ "PNF Config Request", "nfapi.pnf.config.request",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_config_response, { "PNF Config Response", "nfapi.pnf.config.response", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_start_request, { "PNF Start Request", "nfapi.pnf.start.request", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_start_response, { "PNF Start Response", "nfapi.pnf.start.response", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_start_request, { "PNF Start Request", "nfapi.start.request", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_start_response, { "PNF Start Response", "nfapi.start.response", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_param_general, { "PNF Param General ", "nfapi.pnf.param.general", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sync_mode, { "Sync Mode", "nfapi.sync.mode", FT_UINT8, BASE_DEC, VALS(nfapi_sync_mode_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_location_mode, { "Location Mode", "nfapi.location.mode", FT_UINT8, BASE_DEC, VALS(location_mode_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_location_coordinates_length, { "Location Coordinates Length", "nfapi.location.coordinates.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_location_coordinates, { "Location Coordinates", "nfapi.location.coordinates", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdu, { "PDU", "nfapi.pdu", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_timing, { "DL config Timing", "nfapi.dl.config.timing", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tx_timing, { "Tx Timing", "nfapi.general.tx.timing", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_timing, { "UL Config Timing", "nfapi.ul.config.timing", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hi_dci0_timing, { "HI DCi0 Timing", "nfapi.hi.dci0.timing", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_number_phys, { "Maximum number of Phys", "nfapi.maximum.number.phys", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_total_bandwidth, { "Maximum Total Bandwidth", "nfapi.maximum.total.bandwidth", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_total_number_dl_layers,	{ "Maximum Total Number DL Layers", "nfapi.maximum.total.number.dl.layers", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_total_number_ul_layers,	{ "Maximum Total Number UL Layers", "nfapi.maximum.total.number.ul.layers",	FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_shared_bands, { "Shared bands", "nfapi.shared.bands", FT_BOOLEAN, 8, TFS(&true_false_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_shared_pa, { "Shared pa", "nfapi.shared.pa", FT_BOOLEAN, 8, TFS(&true_false_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_total_power, { "Maximum total power", "nfapi.maximum.total.power", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_oui, { "OUI", "nfapi.oui", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy, { "PNF Phy", "nfapi.pnf.phy", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy_number_phy, { "PNF Phy Number of Phy", "nfapi.pnf.phy.number.phy", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy_config_index, { "PNF Phy Config Index", "nfapi.pnf.phy.config.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_rf,	{ "PNF Phy RF", "nfapi.pnf.rf",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_rfs, { "Number of RFs", "nfapi.pnf.rf.number.rf",	FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phy_rf_config_info,	{ "Phy RF Config Info", "nfapi.phy.rf.config.info",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phy_rf_config_info_phy_id, { "Phy ID", "nfapi.pnf.phy.rf.config.phy.id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phy_rf_config_info_band, { "RF Band", "nfapi.pnf.phy.rf.config.phy.id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy_rf_config, { "PNF Phy RF Config", "nfapi.pnf.phy.rf.config", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy_rf_config_number_phy_rf_config_info, { "Number of RF Config Info(s)", "nfapi.pnf.phy.rf.config.number.phy.rf.config.info", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_phy_rf_config_array_phy_rf_config_info,	{ "PNF Phy RF Config array phy rf config info ", "nfapi.pnf.phy.rf.config.array.phy.rf.config.info", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rf_config_index, { "RF Config Index", "nfapi.rf_config_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_rf_exclusions, { "Number of RF exclusions", "nfapi.hf_nfapi_number_of_rf_exclusions",	FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_3gpp_release_supported,	{ "Maximum 3gpp Release Supported", "nfapi.maximum_3gpp_release_supported",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_downlink_channel_bandwidth_supported, { "Maximum Channel Downlink Bandwidth Supported", "nfapi.downlink_channel_bandwidth_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uplink_channel_bandwidth_supported, { "Maximum Channel Uplink Bandwidth Supported", "nfapi.uplink_channel_bandwidth_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_dl_layers_supported, { "Number of DL Layers Supported", "nfapi.number_of_dl_layer_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_ul_layers_supported, { "Number of UL Layers Supported", "nfapi.number_of_ul_layer_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_nmm_modes_supported, { "NMM modes supported", "nfapi.nmm_modes_supported", FT_UINT8, BASE_DEC, VALS(nmm_modes_supported_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_band, { "Band", "nfapi.band", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_transmit_power, { "Maximum transmit power", "nfapi.maximum_transmit_power", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_earfcn, { "EARFCN", "nfapi.earfcn", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_rf_bands, { "Number of RF Bands", "nfapi.num.rf_bands", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_nmm_uplink_rssi_supported, { "NMM Uplink RSSI supported", "nfapi.nmm.uplink.rssi.supported", FT_UINT16, BASE_DEC, VALS(ul_rssi_supported_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_minimum_transmit_power, { "Minimum transmit power", "nfapi.minimum_transmit_power", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_antennas_suppported, { "Number of Supported Antennas", "nfapi.number_of_antennas_suppported", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_minimum_downlink_frequency, { "Minimum downlink frequency", "nfapi.minimum_downlink_frequency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_downlink_frequency, { "Maximum downlink frequency", "nfapi.maximum_downlink_frequency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_minimum_uplink_frequency, { "Minimum uplink frequency", "nfapi.minimum_downlink_frequency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_maximum_uplink_frequency, { "Maximum uplink frequency", "nfapi.maximum_downlink_frequency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_mode7_supported, { "Transmission Mode 7 Supported", "nfapi.pnf.phy_rel10.tx_mode7_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_transmission_mode8_supported, { "Transmission Mode 8 Supported", "nfapi.pnf.phy_rel10.tx_mode8_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_two_antennas_ports_for_pucch, { "Two antennas ports for PUCCH", "nfapi.pnf.phy_rel10.two_antennas_ports_for_pucch", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_transmission_mode_9_supported, { "Transmission Mode 9 Supported", "nfapi.pnf.phy_rel10.tx_mode9_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_simultaneous_pucch_pusch, { "Simultaneous PUCCH PUSCH", "nfapi.pnf.simultaneous_pucch_pusch", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_for_layer_tx_with_tm3_and_tm4, { "Four layer Tx with TM3 and TM4", "nfapi.pnf.phy_rel10.layer_tx_with_tm3_and_tm4", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_supported, { "ePDCCH supported", "nfapi.pnf.phy_rel11.epdcch_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_multi_ack_csi_reporting, { "Multi ACK CSI reporting", "nfapi.pnf.phy_rel11.mutli_ack_csi_reporting", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_pucch_tx_diversity_with_channel_selection, { "PUCCH Tx diversity with channel selection", "nfapi.pnf.phy_rel11.tx_div_with_channel_selection", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_ul_comp_supported, { "UL CoMP supported", "nfapi.pnf.phy_rel11.ul_comp_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_transmission_mode_5_supported, { "Transmission mode 5 supported", "nfapi.pnf.phy_rel11.tx_mode5_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_subframe_set, { "CSI subframe set", "nfapi.pnf.phy_rel12.csi_subframe_set", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_enhanced_4tx_codebook, { "Enhanced 4TX codebook", "nfapi.pnf.phy_rel12.exhanced_t4x_codebook", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_drs_supported, { "DRS supported", "nfapi.pnf.phy_rel12.drs_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_ul_64qam_supported, { "UL 64QAM supported", "nfapi.pnf.phy_rel12.ul_64qam_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_transmission_mode_10_supported, { "Transmission mode 10 supported", "nfapi.pnf.phy_rel12.tx_mode10_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hi_nfapi_alternative_tbs_indices, { "Alternative TBS indices", "nfapi.pnf.phy_rel12.alternative_tbs_indices", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_format_4_supported, { "PUCCH format 4 supported", "nfapi.pnf.phy_rel13.pucch_format4_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_format_5_supported, { "PUCCH format 5 supported", "nfapi.pnf.phy_rel13.pucch_format5_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_more_than_5_ca_supported, { "More than 5 CA support", "nfapi.pnf.phy_rel13.mode_than_5_ca_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_supported, { "LAA supported", "nfapi.pnf.phy_rel13.laa_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_ending_in_dwpts_supported, { "LAA ending in DwPTS supported", "nfapi.pnf.phy_rel13.laa_ending_in_dwpts_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_starting_in_second_slot_supported, { "LAA starting in second slot Supported", "nfapi.pnf.phy_rel13.laa_starting_in_second_slot_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_beamforming_supported, { "Beamforming Supported", "nfapi.pnf.phy_rel13.beamingforming_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_enhancements_supported, { "CSI-RS enhancements supported", "nfapi.pnf.phy_rel13.csi_rs_enchancements_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_drms_enhancements_supported, { "DMRS enhancements supported", "nfapi.pnf.phy_rel13.drms_enhancements_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_enhancements_supported, { "SRS enhancements supported", "nfapi.pnf.phy_rel13.srs_enhancements_supported", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sfn_sf, { "SFN_SF", "nfapi.sfn_sf", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_request_body, { "DL Config Request body", "nfapi.dl.config.request.body", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_pdcch_ofdm_symbols, { "Number of PDCCH OFDM Symbols", "nfapi.number_pdcch_ofdm_symbols", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_dci, { "Number of DCI", "nfapi.number_dci", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_pdus, { "Number of PDUs", "nfapi.number_pdu", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_harqs, { "Number of HARQs", "nfapi.number_harqs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_crcs, { "Number of CRCs", "nfapi.number_crcs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_srs, { "Number of SRs", "nfapi.number_srs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_cqi, { "Number of CQIs", "nfapi.number_cqi", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_preambles, { "Number of Preambles", "nfapi.number_preambles", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_srss, { "Number of SRSs", "nfapi.number_srss", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_lbt_dl_req_pdu_type, { "LBT DL Request PDU Type", "nfapi.number_srss", FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_req_pdu_type), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_lbt_dl_ind_pdu_type, { "LBT DL Indication PDU Type", "nfapi.number_srss", FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_ind_pdu_type), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_pdsch_rnti, { "Number of PDSCH RNTI", "nfapi.number_pdsch_rnti", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_power_pcfich, { "Transmission Power PCFICH", "nfapi.transmission_power_pcfich", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_request_pdu_list,	{ "DL Config Request body", "nfapi.dl.config.request.pdu_list",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_request_pdu_list,	{ "UL Config Request body", "nfapi.ul.config.request.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hi_dci0_request_pdu_list, { "HI DCI0 Request body", "nfapi.hi.dci0.config.request.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tx_request_pdu_list, { "Tx Request body", "nfapi.tx.request.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rx_indication_pdu_list, { "Rx Indication body", "nfapi.rx.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_indication_pdu_list, { "Harq Indication body", "nfapi.harq.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_crc_indication_pdu_list, { "CRC Indication body", "nfapi.crc.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sr_indication_pdu_list, { "SR Indication body", "nfapi.sr.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cqi_indication_pdu_list, { "CQI Indication body", "nfapi.cqi.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_preamble_indication_pdu_list, { "Preamble Indication body", "nfapi.preamble.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_indication_pdu_list, { "SRS Indication body", "nfapi.srs.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_lbt_dl_config_pdu_list, { "LBT DL Config Request body", "nfapi.lbt.dl.request.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_lbt_dl_indication_pdu_list, { "LBT DL Indicatoin body", "nfapi.lbt.dl.indication.pdu_list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_pdu_type, { "PDU Type", "nfapi.pdu.type",	FT_UINT8, BASE_DEC, VALS(nfapi_dl_config_pdu_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdu_size, { "PDU size", "nfapi.pdu.size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_instance_length, { "Instance length", "nfapi.instance.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dlsch_pdu_rel8, { "DL CONFIG DLSCH PDU REL8", "nfapi.dl.config.dlsch.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_length, { "PDU length", "nfapi.pdu.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdu_index, { "PDU Index", "nfapi.pdu.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rnti, { "RNTI", "nfapi.rnti", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_resource_allocation_type, { "Resource Allocation Type", "nfapi.resource.allocation.type", FT_UINT8, BASE_DEC, VALS(resource_allocation_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_virtual_resource_block_assignment_flag, { "Virtual resource block assignment flag", "nfapi.resource.block.assignment.flag", FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_resource_block_coding, { "Resource block coding", "nfapi.resource.block.coding", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_modulation, { "Modulation", "nfapi.modulation", FT_UINT8, BASE_DEC, VALS(modulation_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_redundancy_version, { "Redundancy version", "nfapi.redundancy.version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transport_blocks, { "Transport blocks", "nfapi.transport.blocks", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transport_block_to_codeword_swap_flag, { "Transport block to codeword swap flag", "nfapi.transport.block.to.codeword.swap.flag", FT_UINT8, BASE_DEC, VALS(transport_block_to_codeword_swap_flag_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_scheme, { "Transmission scheme", "nfapi.transmission.scheme", FT_UINT8, BASE_DEC, VALS(transmission_scheme_vals), 0x0, "The MIMO mode used in the PDU", HFILL } },
+-		{ &hf_nfapi_ul_transmission_scheme, { "Transmission scheme", "nfapi.transmission.scheme", FT_UINT8, BASE_DEC, VALS(ul_transmission_scheme_vals), 0x0, "The MIMO mode used in the PDU", HFILL } },
+-		{ &hf_nfapi_number_of_layers, { "Number of layers", "nfapi.number.of.layers", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_subbands, { "Number of subbands", "nfapi.number.of.subbands", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_codebook_index, { "Codebook index", "nfapi.number.of.codebook.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ue_category_capacity, { "UE category capacity", "nfapi.ue.category.capacity", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pa, { "P-A", "nfapi.pa", FT_UINT8, BASE_DEC, VALS(pa_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_power_offset_index, { "Delta Power offset index", "nfapi.delta.power.offset.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_nprb, { "Nprb", "nfapi.nprb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_mode, { "Transmission Mode", "nfapi.transmission_nprb", FT_UINT8, BASE_DEC, VALS(transmission_mode_vals), 0x0, "Transmission mode associated with the UE", HFILL } },
+-		{ &hf_nfapi_prnti, { "P-RNTI", "nfapi.prnti", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mcs, { "MCS", "nfapi.mcs", FT_UINT8, BASE_DEC, VALS(pch_modulation_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_transport_blocks, { "Number of transport blocks", "nfapi.number_of_transport_blocks", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ue_mode, { "UE Mode", "nfapi.ue.mode", FT_UINT8, BASE_DEC, VALS(ue_mode_vals), 0x0, NULL, HFILL } },
+-		{ &hf_prs_bandwidth, { "PRS bandwidth", "nfapi.prs.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_prs_cyclic_prefix_type, { "PRS cyclic prefix type", "nfapi.prs.cyclic.prefix.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_prs_muting, { "PRS muting", "nfapi.prs.muting", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_num_bf_prb_per_subband, { "Num of BF PRB per Subband", "nfapi.num.bf.prb.per.subband", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_num_bf_vector, { "Num of BF Vector", "nfapi.num.bf.vector", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_resource_config, { "CSI-RS resource config", "nfapi.csi.rs.resource.config", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bf_vector_subband_index, { "BF Subband Index", "nfapi.num.bf.vector.subband.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bf_vector_num_antennas, { "BF Num of Antennas", "nfapi.num.bf.vector.bf.value", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bf_vector_bf_value, { "BF Value per Antenna", "nfapi.num.bf.vector.bf.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dlsch_pdu_rel9, { "DL CONFIG DLSCH PDU REL9", "nfapi.dl.config.dlsch.pdu.rel9", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_nscid, { "NSC id", "nfapi.nscid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dlsch_pdu_rel10, { "DL CONFIG DLSCH PDU REL10", "nfapi.dl.config.dlsch.pdu.rel10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_flag, { "CSI RS Flag", "nfapi.csi.rs.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_subbands, { "Subbands", "nfapi.subbands", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bf_vectors, { "BF Vectors", "nfapi.bf.vectors", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bf_vector_antennas, { "Antennas", "nfapi.antennas", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_resource_config_r10, { "CSI RS resource config R10", "nfapi.csi.rs.resource_config_r10", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10, { "CSI-RS Number of NZP configuration", "nfapi.csi.rs.num.of.nzp.configurations",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_number_if_nzp_configurations, { "CSI RS zero Tx Power Resource config bitmap R10", "nfapi.csi.rs.zero.tx.power.resource.config.bitmap.r10", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_resource_configs, { "CSR/RS Resource Configs", "nfapi.csi.rs.resource.configs", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_start, { "PDSCH_start", "nfapi.pdsch.start", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_drms_config_flag, { "DMRS Config flag", "nfapi.drms.config.flag", FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_drms_scrambling, { "DMRS Scrambling", "nfapi.drms.scrambling", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_config_flag, { "CSI Config flag", "nfapi.csi.config.flag", FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_scrambling, { "CSI Scrambling", "nfapi.csi.scrambling", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_re_mapping_flag, { "PDSCH RE mapping flag", "nfapi.pdsch.remapping.flag", FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_re_mapping_antenna_ports, { "PDSCH RE mapping antenna ports", "nfapi.pdsch.remapping.antenna.ports", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_re_mapping_freq_shift, { "PDSCH RE mapping freq shift", "nfapi.pdsch.remapping.freq.shift", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_alt_cqi_table_r12, { "altCQI-Table-r12", "nfapi.alt.cqi.table.r12", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_max_layers, { "MaxLayers", "nfapi.max.layers", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_dl_harq, { "N_DL_HARQ", "nfapi.n.dl.harq", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dwpts_symbols, { "DwPTS Symbols", "nfapi.dwpts.symbols", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_initial_lbt_sf, { "Initial LBT SF", "nfapi.initial.lbt.sf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ue_type, { "UE Type", "nfapi.ue.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_payload_type, { "PDSCH Payload Type", "nfapi.pdsch.payload.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_initial_transmission_sf, { "Initial transmission SF (io) ", "nfapi.init.tx.sf.io", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_req13_drms_table_flag, { "Rel-13-DMRS-tabe flag", "nfapi.r13.drms.table.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_resource_index, { "CSI-RS resource index", "nfapi.csi.rs.resource.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_class, { "Class", "nfapi.csi.rs.class", FT_UINT8, BASE_DEC, VALS(csi_rs_class_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cdm_type, { "CDM Type", "nfapi.cdm.type", FT_UINT8, BASE_DEC, VALS(csi_rs_cdm_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_bf_vector, { "BF Vector", "nfapi.bf.vector", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_edpcch_prb_index, { "EPDCCH PRB index", "nfapi.edpcch.prb.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_resource_assignment_flag, { "EPDCCH Resource assignment flag", "nfapi.epdcch.resource.assignment.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_id, { "EPDCCH ID", "nfapi.epdcch.id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_start_symbol, { "EPDCCH Start Symbol", "nfapi.epdcch.start.symbol", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_num_prb, { "EPDCCH NumPRB", "nfapi.epdcch.num.prb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_epdcch_prbs, { "EPDCCH PRBs", "nfapi.epdcch.prbs", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_precoding_value, { "Precoding value", "nfapi.precoding.value", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mpdcch_narrowband, { "MPDCCH Narrowband", "nfapi.mpdcch.narrowband", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_prb_pairs, { "Number of PRB pairs", "nfapi.number.prb.pairs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_resource_block_assignment, { "Resource Block Assignment", "nfapi.resource.block.assignement", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_start_symbol, { "Start symbol", "nfapi.start.symbol", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ecce_index, { "ECCE index", "nfapi.ecce.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ce_mode, { "Rel-13-DMRS-tabe flag", "nfapi.r13.drms.table.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_drms_scrabmling_init, { "DMRS scrambling init", "nfapi.drms.scrambling.init", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_reception_levels, { "PDSCH repetition levels", "nfapi.pdsch.repetition.levels", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_new_data_indicator, { "New data indicator", "nfapi.new.data.indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tpmi_length, { "TPMI length", "nfapi.tpmi.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pmi_flag, { "PMI flag", "nfapi.pmi.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_resource_offset, { "HARQ resource offset", "nfapi.harq.resource.offset", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dci_subframe_repetition_number, { "DCI subframe repetition number", "nfapi.dci.subframe.repetition.number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_downlink_assignment_index_length, { "Downlink assignment index Length", "nfapi.dl.assignement.index.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_starting_ce_level, { "Starting CE Level", "nfapi.starting.ce.level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antenna_ports_and_scrambling_identity_flag, { "Antenna ports and scrambling identity flag", "nfapi.antenna.ports.and.scrambling.identity.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antenna_ports_and_scrambling_identity, { "Antenna ports and scrambling identity", "nfapi.antenna.ports.and.scrambling.identit", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_paging_direct_indication_differentiation_flag, { "Paging/Direct indication differentiation flag", "nfapi.paging.direct.indictation.differentiation.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_direct_indication, { "Direct indication", "nfapi.direct.indication", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_tx_antenna_ports, { "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports.", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_precoding, { "Precoding", "nfapi.precodiing", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_bch_pdu_rel8, { "DL CONFIG BCH PDU Rel8", "nfapi.dl.config.bch.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_value_float, { "Value", "nfapi.value.float", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_power, { "Transmission Power", "nfapi.transmission_power", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_mch_pdu_rel8, { "DL CONFIG MCH PDU Rel8", "nfapi.dl.config.mch.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mbsfn_area_id, { "MBSFN Area id", "nfapi.mbsfn.area.id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_pch_pdu_rel8, { "DL CONFIG MCH PDU Rel8", "nfapi.dl.config.mch.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dci_dl_pdu_rel8, { "DL CONFIG DCI DL PDU Rel8", "nfapi.dl.config.mch.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dci_format, { "DCI format", "nfapi.dci.format", FT_UINT8, BASE_DEC, VALS(dci_format_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cce_idx, { "CCE index", "nfapi.cce.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_aggregation_level, { "Aggregation level", "nfapi.aggregation.level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mcs_1, { "MCS_1", "nfapi.mcs_1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mcs_2, { "MCS_2", "nfapi.mcs_2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_redundancy_version_1, { "Redundancy version_1", "nfapi.redundancy.version.1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_redundancy_version_2, { "Redundancy version_2", "nfapi.redundancy.version.2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_new_data_indicator_1, { "New data indicator_1", "nfapi.new.data.indicator.1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_new_data_indicator_2 ,{ "New data indicator_2", "nfapi.new.data.indicator.2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_process, { "HARQ process", "nfapi.harq.process", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tpmi, { "TPMI", "nfapi.tpmi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pmi, { "PMI", "nfapi.pmi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_precoding_information, { "Precoding information", "nfapi.precoding.information", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tpc, { "TPC", "nfapi.tpc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_downlink_assignment_index, { "Downlink assignment index", "nfapi.downlink.assignment.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ngap, { "Ngap", "nfapi.ngap", FT_UINT8, BASE_DEC, VALS(ngap_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transport_block_size_index, { "Transport block size index", "nfapi.transport.block.size.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_downlink_power_offset, { "Downlink power offset", "nfapi.downlink.power.offset", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_allocate_prach_flag, { "Allocation PRACH flag", "nfapi.allocation.prach.flag", FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_preamble_index, { "Preamble index", "nfapi.preamable.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prach_mask_index, { "PRACH mask index", "nfapi.prach.mask.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rnti_type, { "RNTI type", "nfapi.rnti.type", FT_UINT8, BASE_DEC, VALS(rnti_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dci_dl_pdu_rel9, { "DL CONFIG DCI DL PDU Rel9", "nfapi.dl.config.mch.pdu.rel9", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mcch_flag, { "MCCH flag", "nfapi.mcch.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mcch_change_notification, { "MCCH change notification", "nfapi.mcch.change.notification", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_scrambling_identity, { "Scrambling identity", "nfapi.scrambling.identity", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_dci_dl_pdu_rel10, { "DL CONFIG DCI DL PDU Rel10", "nfapi.dl.config.mch.pdu.rel10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cross_carrier_scheduling_flag, { "Cross Carrier scheduling flag", "nfapi.cross.carrier.scheduling.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_carrier_indicator, { "Carrier Indicator", "nfapi.carrier.indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_flag, { "SRS flag", "nfapi.srs.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_request, { "SRS request", "nfapi.srs.request", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antenna_ports_scrambling_and_layers, { "Antenna ports scrambling and layers", "nfapi.antenna.ports.scrambling.and.layers", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_total_dci_length_including_padding, { "Total DCI length including padding", "nfapi.total.dci.length.including.padding", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_dl_rb, { "N_DL_RB", "nfapi.n.dl.rb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_ul_rb, { "N_UL_RB", "nfapi.n.dl.rb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_ack_resource_offset, { "HARQ-ACK resource offset", "nfapi.harq.ack.resource.offset", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator, { "PDSCH RE Mapping and Quasi-Co-Location Indicator", "nfapi.pdsch.re.mapping", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_primary_cell_type, { "Primary cell type", "nfapi.primary.cell.type", FT_UINT8, BASE_DEC, VALS(primary_cells_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_dl_configuration_flag, { "UL/DL configuration flag", "nfapi.ul.dl.configuration.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_ul_dl_configurations, { "Number of UL/DL configurations", "nfapi.number.ul.dl.configurations", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_dl_configuration_index, { "UL/DL configuration indication", "nfapi.ul.dl.configuration.indication", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_end_partial_sf_flag, { "LAA end partial SF flag", "nfapi.laa.end.partial.sf.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_laa_end_partial_sf_configuration, { "LAA end partial SF configuration", "nfapi.laa.end.partial.sf.configuration", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_codebooksize_determination_r13, { "Codebook Size Determination R13", "nfapi.codebook.size.determination.r13", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rel13_drms_table_flag, { "Rel-13-DMRS-tabe flag", "nfapi.drms.table.flag.r13", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pscch_resource, { "PSCCH Resource", "nfapi.pscch.resource", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_time_resource_pattern, { "Time resource pattern", "nfapi.time.resource.pattern", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mpdcch_transmission_type, { "MPDCCH transmission type", "nfapi.mpdcch.transmission.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_drms_scrambling_init, { "DMRS scrambling init", "nfapi.drms.scrambling.init", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pusch_repetition_levels, { "PUSCH repetition levels", "nfapi.pusch.repetition.levels", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_hopping_flag, { "Frequency hopping flag", "nfapi.frequency.hopping.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_request, { "CSI request", "nfapi.csi.request", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dai_presence_flag, { "DAI presence flag", "nfapi.dia.presence.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_total_dci_length_include_padding, { "Total DCI length including padding", "nfapi.total.dci.length.including.padding", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_prs_pdu_rel9, { "DL CONFIG PRS PDU Rel9", "nfapi.dl.config.prs.pdu.rel9", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prs_bandwidth, { "PRS Bandwidth", "nfapi.prs.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_prs_cyclic_prefix_type, { "PRS cyclic prefix type", "nfapi.prs.cyclic.prefix.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_config_csi_rs_pdu_rel10, { "DL CONFIG CSI RS PDU Rel10", "nfapi.dl.config.csi.rs.pdu.rel10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_rs_antenna_port_count_r10, { "Antenna port count r10", "nfapi.csi.rs.antenna.port.count.r10", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_request_body, { "UL Config Request body", "nfapi.ul.config.request.body", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_pdu_type,	{ "UL Config PDU Type", "nfapi.ul.config.pdu.type", FT_UINT8, BASE_DEC, VALS(nfapi_ul_config_pdu_type_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rach_prach_frequency_resources,	{ "RACH PRACH Frequency resources", "nfapi.rach.prach.frequency.resources",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_present, { "SRS present", "nfapi.srs.present", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_harq_buffer_pdu, { "HARQ Buffer PDU", "nfapi.ul.config.harq.buffer.pdu", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_ue_information_rel8, { "UE Information Rel 8", "nfapi.ul.config.ue.information.pdu.rel8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_handle,	{ "Handle", "nfapi.handle",	FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_sr_information_pdu_rel8, { "SR Information Rel 8", "nfapi.ul.config.sr.information.pdu.rel8",	FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_index, { "PUCCH Index", "nfapi.pucch.index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_size, { "Size", "nfapi.size", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_resource_block_start, { "Resource block start", "nfapi.resource.block.start", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_resource_blocks, { "Number of resource blocks", "nfapi.resource.blocks", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cyclic_shift_2_for_drms, { "Cyclic Shift 2 for DRMS", "nfapi.cyclic.shift.2.for.drms", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_hopping_enabled_flag, { "Frequency hopping enabled flag", "nfapi.frequency.hopping.enabled.flag", FT_UINT8, BASE_DEC, VALS(hopping_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_hopping_bits, { "Frequency hopping bits", "nfapi.frequency.hopping.bits", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_new_data_indication, { "New Data inidication", "nfapi.new.data.indication", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_process_number, { "HARQ Process number", "nfapi.harq.process.number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_tx_mode, { "UL Tx Mode", "nfapi.ul.tx.mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_current_tx_nb, { "Current Tx nb", "nfapi.current.tx.nb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_srs, { "N SRS", "nfapi.n.srs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_disable_sequence_hopping_flag, { "Disable seqeunce hopping flag", "nfapi.disable.sequence.hopping.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_virtual_cell_id_enabled_flag, { "Virtual cell ID enabled flag", "nfapi.virtual.cell.id.enabled.flag", FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_npusch_identity, { "nPUSCH Identity", "nfapi.npusch.identity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ndrms_csh_identity, { "nDMRS-CSH Identity", "nfapi.ndrms.csh.identity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_total_number_of_repetitions, { "Total Number of repetitions", "nfapi.total.number.of.repetitions", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_repetition_number, { "Repetition Number", "nfapi.repetition.number", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_initial_sf_io, { "Initial transmission SF (io) ", "nfapi.initial.sf.io", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_empty_symbols_due_to_retunning, { "Empy symbols due to re-tunning", "nfapi.empty.symbols.due.to.retunning", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_ri_pmi_size_2, { "DL CQI/PMI/RI size 2", "nfapi.dl.cqi.ri.pmi.size.2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_size_2, { "HARQ Size 2", "nfapi.harq.size2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_offset_harq_2, { "Delta Offset HARQ 2", "nfapi.delta.offset.harq.2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_starting_prb, { "Starting PRB", "nfapi.starting.prb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antenna_port, { "Antenna Port", "nfapi.antenna.port", FT_UINT8, BASE_DEC, VALS(antenna_ports_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_combs, { "Number of Combs", "nfapi.num.of.combs", FT_UINT8, BASE_DEC, VALS(combs_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_npucch_identity, { "nPUCCH Identity", "nfapi.npucch.identity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_empty_symbols, { "Empty symbols", "nfapi.empty.symbols", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_csi_mode, { "CSI_mode", "nfapi.csi.mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_pmi_size_2, { "DL CQI/PMI Size 2", "nfapi.dl.cqi.pmi.size.2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_statring_prb, { "Starting PRB", "nfapi.starting.prb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cdm_index, { "cdm_Index", "nfapi.cdm.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_nsrs, { "N srs", "nfapi.n.srs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_num_ant_ports, { "Num_ant_ports", "nfapi.num.ant.port", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_2_0, { "n_PUCCH_2_0", "nfapi.n.pucch.2.0", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_2_1, { "n_PUCCH_2_1", "nfapi.n.pucch.2.1", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_2_2, { "n_PUCCH_2_2", "nfapi.n.pucch.2.2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_2_3, { "n_PUCCH_2_3", "nfapi.n.pucch.2.3", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_pmi_size_rank_1, { "DL CQI PMI size rank 1", "nfapi.dl.cqi.pmi.size.rank.1",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_pmi_size_rank_greater_1,	{ "DL CQI PMI size rank greater 1", "nfapi.dl.cqi.pmi.size.rank.1",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ri_size, { "RI size", "nfapi.ri.size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_offset_cqi, { "Delta offset cqi", "nfapi.delta.offset.cqi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_offset_ri, { "Delta offset ri", "nfapi.delta.offset.ri", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_size, { "HARQ size", "nfapi.harq_size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_delta_offset_harq, { "Delta offset HARQ", "nfapi.delta.offset.harq", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ack_nack_mode, { "ACK NACK mode", "nfapi.ack.nack.mode", FT_UINT8, BASE_DEC, VALS(nfapi_ack_nack_mode_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_srs_initial, { "N srs initial", "nfapi.n.srs.initial", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_initial_number_of_resource_blocks, { "Initial number of resource blocks", "nfapi.initial.number.of.resource.blocks", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_pmi_size, { "DL cqi pmi size", "nfapi.dl.cqi.pmi.size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_report_type, { "Report type", "nfapi.report.type", FT_BOOLEAN, 8, TFS(&nfapi_csi_report_type_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cqi_ri_pmi_size,	{ "DL CQI RI PMI size", "nfapi.dl.cqi.ri.pmi.size",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_control_type, { "Control type", "nfapi.control.type", FT_BOOLEAN, 8, TFS(&nfapi_control_type_string_name), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_cc, { "Number of cc", "nfapi.number.of.cc",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_pucch_resource, { "Number of PUCCH Resource", "nfapi.number.of.pucch.resource", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pucch_index_p1, { "PUCCH Index P1", "nfapi.pucch.index.p1", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_1_0, { "N PUCCH 1 0", "nfapi.n.pucch.1.0", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_1_1, { "N PUCCH 1 1", "nfapi.n.pucch.1.1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_1_2, { "N PUCCH 1 2", "nfapi.n.pucch.1.2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_n_pucch_1_3, { "N PUCCH 1 3", "nfapi.n.pucch.1.3", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_bandwidth, { "SRS Bandwidth", "nfapi.srs.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_domain_position, { "Frequency Domain position", "nfapi.frequency.domain.position", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_srs_hopping_bandwidth, { "SRS hopping bandwidth", "nfapi.srs.hopping.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_transmission_comb, { "Transmission comb", "nfapi.transmission.comb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_i_srs, { "I SRS", "nfapi.i.srs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sounding_reference_cyclic_shift, { "Sounding reference cyclic shift", "nfapi.sounding.reference.cyclic.shift", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antenna_ports, { "Antenna port(s)", "nfapi.antenna.port", FT_UINT8, BASE_DEC, VALS(nfapi_antenna_port_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_srs_pdu_rel10, { "SRS PDU Rel 10", "nfapi.srs.pdu.rel.10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_srs_pdu_rel8, { "SRS PDU Rel 8", "nfapi.srs.pdu.rel.8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_harq_information_rel9_fdd, { "HARQ information Rel 9 FDD", "nfapi.harq.information.rel.9.fdd", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_harq_information_rel8_fdd, { "HARQ information Rel 8 FDD", "nfapi.harq.information.rel.8.fdd", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_harq_information_rel10_tdd, { "HARQ information Rel 10 TDD", "nfapi.harq.information.rel.10.tdd", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_sr_information_rel10, { "SR information Rel 10", "nfapi.sr.information.rel.10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_sr_information_rel8, { "SR information Rel 8", "nfapi.sr.information.rel.8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_cqi_information_rel10, { "CQI information Rel 10", "nfapi.cqi.information.rel.10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_cqi_information_rel8, { "CQI information Rel 8", "nfapi.cqi.information.rel.8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_initial_transmission_parameters_rel8, { "Initial transmission parameters Rel 8", "nfapi.initial.transmission.parameters.rel.8", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_config_ulsch_harq_information_rel10, { "HARQ Information Rel 10", "nfapi.harq.information.rel.10", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdu_length, { "PDU length", "nfapi.pdu.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_num_segments, { "Num segments", "nfapi.num.segments", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_segment_length, { "Segment length", "nfapi.segment.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_segment_data, { "Segment data", "nfapi.segment.data", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_crc_indication_body, { "CRC Indication Body", "nfapi.crc_indication_body", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_crc_flag, { "CRC flag", "nfapi.crc.flag", FT_BOOLEAN, 8, TFS(&crc_flag_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_hi_pdus, { "Number of HI Pdu's", "nfapi.number_of_hi_pdus", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_dci_pdus, { "Number of DCI Pdu's", "nfapi.number_of_dci_pdus", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pdu_type, { "PDU Type", "nfapi.pdu_type",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hi_value, { "HI Value", "nfapi.hi_value", FT_BOOLEAN, 8, TFS(&hi_value_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_i_phich, { "i phich", "nfapi.i_phich", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_flag_tb2, { "Flag TB2", "nfapi.flag_tb2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_hi_value_2, { "HI Value 2", "nfapi.hi_value_2", FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ue_tx_antenna_selection, { "UE Tx Antenna selection", "nfapi.ue_tx_antenna_selection", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cqi_csi_request, { "cqi csi request", "nfapi.cqi_csi_request", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_index, { "UL index", "nfapi.ul_index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_assignment_index, { "DL Assignment index", "nfapi.dl_assignment_index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tpc_bitmap, { "TPC bitmap", "nfapi.tpc_bitmap", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_antenna_ports, { "Number of antenna ports", "nfapi.number.of.antenna.ports", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_size_of_cqi_csi_feild, { "Size of cqi csi feild", "nfapi.size.of.cqi.csi.feild", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_new_data_indication_two, { "New data indicatipon 2", "nfapi.new.data.indication.two", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_resource_allocation_flag, { "Resource allocation flag", "nfapi.resource.allocation.flag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_node_sync, { "DL Node Sync", "nfapi.dl.node.sync", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_node_sync_t1, { "DL Node Sync t1", "nfapi.dl.node.sync.t1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_node_sync_delta_sfn_sf, { "DL Node Sync Delta SFN SF", "nfapi.dl.node.sync.delta_sfn_sf", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_dl_cyclic_prefix_type, { "DL Cyclic Prefix type", "nfapi.dl.cyclic.prefix.type", FT_BOOLEAN, 8, TFS(&cyclic_prefix_type_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_cyclic_prefix_type, { "UL Cyclic Prefix type", "nfapi.ul.cyclic.prefix.type", FT_BOOLEAN, 8, TFS(&cyclic_prefix_type_strname), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_downlink_channel_bandwidth, { "Downlink Channel Bandwidth", "nfapi.dl.channel.bandwidth", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uplink_channel_bandwidth, { "Uplink Channel Bandwidth", "nfapi.ul.channel_bandwidth", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_tx_antenna_ports, { "Tx Antenna Ports", "nfapi.tx.antenna.ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rx_antenna_ports, { "Tx Antenna Ports", "nfapi.rx.antenna.ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_node_sync, { "UL Node Sync", "nfapi.ul.node.sync", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_node_sync_t1, { "UL Node Sync t1", "nfapi.ul.node.sync.t1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_node_sync_t2, { "UL Node Sync t2", "nfapi.ul.node.sync.t2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_node_sync_t3, { "UL Node Sync t3", "nfapi.ul.node.sync.t3", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pb, { "P-B", "nfapi.pb.allocation", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_last_sfn_sf, { "Last SFN/SF", "nfapi.timing.info.last.sfn.sf", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_time_since_last_timing_info, { "Time since last Timing Info", "nfapi.timing.info.time.since.last.timing.info", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_dl_config_jitter, { "DL Config Jitter", "nfapi.timing.info.dl.config.jitter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_tx_request_jitter, { "Tx Request Jitter", "nfapi.timing.info.tx.req.jitter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_ul_config_jitter, { "UL Config Jitter", "nfapi.timing.info.ul.config.jitter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_hi_dci0_jitter, { "HI_DCI0 Jitter", "nfapi.timing.info.hi.dci0.jitter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_dl_config_latest_delay, { "DL Config Latest Delay", "nfapi.timing.info.dl.config.latest.delay", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_tx_request_latest_delay, { "Tx Request Latest Delay", "nfapi.timing.info.tx.request.latest.delay", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_ul_config_latest_delay, { "UL Config Latest Delay", "nfapi.timing.info.ul.config.latest.delay", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_hi_dci0_latest_delay, { "HI_DCI0 Latest Delay", "nfapi.timing.info.hi.dci0.latest.delay", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_dl_config_earliest_arrival, { "DL Config Earliest Arrival", "nfapi.timing.info.dl.config.earliest.arrival", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_tx_request_earliest_arrival, { "Tx Request Earliest Arrival", "nfapi.timing.info.tx.request.earliest.arrival", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_ul_config_earliest_arrival, { "UL Config Earliest Arrival", "nfapi.timing.info.ul.config.earliest.arrival", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_hi_dci0_earliest_arrival, { "HI_DCI0 Earliest Arrival", "nfapi.timing.info.hi.dci0.earliest.arrival", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pcfich_power_offset, { "PCFICH Power Offset", "nfapi.pcfich.power.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_window, { "NFAPI Timing window", "nfapi.timing.window", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_mode, { "Timing Info mode", "nfapi.timing.info.mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_info_period, { "Timing info period", "nfapi.timing.info.period", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_max_transmit_power, { "Max transmit power", "nfapi.max.transmit.power", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uint8_tag, { "uint8 tag", "nfapi.uint8.tag", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uint16_tag, { "uint16 tag", "nfapi.uint16.tag", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_mode, { "Mode", "nfapi.harq.mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_ack_nack,	{ "Number of ACK/NACK", "nfapi.uint16.tag",	FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_data_value_0,	{ "Value 0", "nfapi.harq.value.0",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_data_value_1,	{ "Value 1", "nfapi.harq.value.1",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_data_value_2,	{ "Value 2", "nfapi.harq.value.2",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_data_value_3,	{ "Value 3", "nfapi.harq.value.3",	FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_tb_1, { "HARQ TB1", "nfapi.harq.tb.", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_tb_2, { "HARQ TB2", "nfapi.harq.tb.2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_tb_n, { "HARQ TB_N", "nfapi.harq.tb.n", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_cqi, { "UL_CQI", "nfapi.ul.cqi", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_channel, { "Channel", "nfapi.channel", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_data_offset, { "Data Offset", "nfapi.data.offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },		
+-		{ &hf_nfapi_ri, { "RI", "nfapi.ri", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_ack_nack_data, { "HARQ Ack/Nack Data", "nfapi.harq.ack.nack.data", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_harq_data, { "HARQ TB Data", "nfapi.harq.tb.data", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_cc, { "CC", "nfapi.cc", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rbs, { "RBs", "nfapi.rbs", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_antennas, { "Physical Antennas", "nfapi.physical.antennas", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_advance, { "Timing Advance", "nfapi.timing.advance", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timing_advance_r9, { "Timing Advance R9", "nfapi.timing.advance.r9", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_cc_reported, { "Number of CC reported", "nfapi.number.of.cc.reported", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_preamble, { "Preamble", "nfapi.preamble", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rach_resource_type, { "RACH resource type", "nfapi.rach.resource.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_doppler_estimation, { "Doppler estimation", "nfapi.doppler.estimation", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rb_start, { "RB Start", "nfapi.rb.start", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_snr, { "SNR", "nfapi.snr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_up_pts_symbol, { "UpPTS Symbol", "nfapi.uppts.symbol", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_prb_per_subband, { "numPRBperSubband", "nfapi.num.prb.per.subband", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_antennas, { "numAntennas", "nfapi.num.antennas", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_subband_index, { "subbandIndex", "nfapi.subband.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_channel_coefficient, { "Channel", "nfapi.channel.coefficient", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_ul_rtoa, { "UL_RTOA", "nfapi.ul.rtoa", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_frequency_band_indicator, { "Frequency Band Indicator", "nfapi.frequency.band.indicator", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_measurement_period, { "Measurement Period", "nfapi.measurement.period", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bandwidth, { "Bandwidth", "nfapi.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_timeout, { "Timeout", "nfapi.timeout", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_earfcns, { "Number of EARFCNs", "nfapi.number.of.earfcns", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_earfcn_list, { "EARFCN List", "nfapi.earfcn.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uarfcn, { "UARFCN", "nfapi.uarfcn", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_uarfcns, { "Number of UARFCNs", "nfapi.number.of.uarfcn", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_uarfcn_list, { "UARFCN List", "nfapi.uarfcn.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_arfcn, { "ARFCN", "nfapi.arfcn", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_arfcn_direction, { "Direction", "nfapi.arfcn.direction", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_arfcns, { "Number of ARFCNs", "nfapi.number.of.arfcn", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_arfcn_list, { "ARFCN List", "nfapi.arfcn.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rssi, { "RSSI", "nfapi.rssi", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_rssi, { "Number of RSSI", "nfapi.number.of.rssi", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rssi_list, { "RSSI List", "nfapi.rssi.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pci, { "PCI", "nfapi.pci", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_measurement_bandwidth, { "Measurement Bandwidth", "nfapi.measurement.bandwidth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_exhaustive_search, { "Exhaustive Search", "nfapi.exhaustive.search", FT_UINT8, BASE_DEC, VALS(exhustive_search_vals), 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_pci, { "Number of PCI", "nfapi.number.of.pci", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pci_list, { "PCI List", "nfapi.pci.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_psc, { "PSC", "nfapi.psc", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_psc, { "Number of PSC", "nfapi.number.of.psc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_psc_list, { "PCS List", "nfapi.psc.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rsrp, { "RSRP", "nfapi.rsrp", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rsrq, { "RSRQ", "nfapi.rsrq", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_lte_cells_found, { "Number of LTE Cells Found", "nfapi.number.of.lte.cells.found", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_lte_cells_found_list, { "LTE Cells Found List", "nfapi.lte.cells.found.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rscp, { "RSCP", "nfapi.rscp", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_enco, { "EcNo", "nfapi.ecno", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_utran_cells_found, { "Number of UTRAN Cells Found", "nfapi.number.of.utran.cells.found", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_utran_cells_found_list, { "UTRAN Cells Found List", "nfapi.utran.cells.found.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_bsic, { "BSIC", "nfapi.bsic", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rxlev, { "RxLev", "nfapi.rxlev", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_rxqual, { "RxQual", "nfapi.rxqual", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sfn_offset, { "SFN Offset", "nfapi.sfn.offset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_geran_cells_found, { "Number of GSM Cells Found", "nfapi.number.of.geran.cells.found", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_geran_cells_found_list, { "GERAN Cells Found List", "nfapi.geran.cells.found.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_tx_antenna, { "Number of Tx Antenna", "nfapi.number.of.tx.antenna", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mib_length, { "MIB Length", "nfapi.mib.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_mib, { "MIB", "nfapi.mib", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_phich_configuration, { "PHICH Configuration", "nfapi.phich.configuration", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_retry_count, { "retryCount", "nfapi.retry.count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sib1, { "SIB1", "nfapi.sib1", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si_periodicity, { "SI Periodicity", "nfapi.si.periodicity", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si_index, { "SI Index", "nfapi.si.index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_number_of_si_periodicity, { "Number of SI Periodicity", "nfapi.number.of.si.periodicity", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si_periodicity_list, { "SI Periodicity List", "nfapi.si.periodicity.list", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si_window_length, { "SI Window Length", "nfapi.si.window.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sib_type, { "SIB Type", "nfapi.sib.type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sib_len, { "SIB Length", "nfapi.sib.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_sib, { "SIB", "nfapi.sib", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si_len, { "SI Length", "nfapi.si.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_si, { "SI", "nfapi.si", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_search_state, { "State", "nfapi.state", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-		{ &hf_nfapi_pnf_broadcast_state, { "State", "nfapi.state", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+-
+-	};
+-
+-    /* Setup protocol subtree array */
+-    static gint *ett[] = {
+-        &ett_nfapi_message_tree,
+-		&ett_nfapi_p4_p5_message_header,
+-		&ett_nfapi_p7_message_header,
+-		&ett_nfapi_tlv_tree,
+-		&ett_nfapi_tl,
+-		&ett_nfapi_pnf_param_response,
+-		&ett_nfapi_pnf_phy_rf_config,
+-		&ett_nfapi_pnf_phy_rf_config_instance,
+-		&ett_nfapi_pnf_phy,
+-		&ett_nfapi_pnf_phy_rel10,
+-		&ett_nfapi_pnf_phy_rel11,
+-		&ett_nfapi_pnf_phy_rel12,
+-		&ett_nfapi_pnf_phy_rel13,
+-		&ett_nfapi_pnf_rf,
+-		&ett_nfapi_phy_state,
+-		&ett_nfapi_rf_bands,
+-		&ett_nfapi_bf_vectors,
+-		&ett_nfapi_csi_rs_bf_vector,
+-		&ett_nfapi_csi_rs_resource_configs,
+-		&ett_nfapi_tx_antenna_ports,
+-		&ett_nfapi_harq_ack_nack_data,
+-		&ett_nfapi_harq_data,
+-		&ett_nfapi_cc,
+-		&ett_nfapi_rbs,
+-		&ett_nfapi_antennas,
+-		&ett_nfapi_epdcch_prbs,
+-		&ett_nfapi_dl_config_request_body,
+-		&ett_nfapi_dl_config_request_pdu_list,
+-		&ett_nfapi_ul_config_request_pdu_list,
+-		&ett_nfapi_hi_dci0_request_pdu_list,
+-		&ett_nfapi_tx_request_pdu_list,
+-		&ett_nfapi_rx_indication_pdu_list,
+-		&ett_nfapi_harq_indication_pdu_list,
+-		&ett_nfapi_crc_indication_pdu_list,
+-		&ett_nfapi_sr_indication_pdu_list,
+-		&ett_nfapi_cqi_indication_pdu_list,
+-		&ett_nfapi_preamble_indication_pdu_list,
+-		&ett_nfapi_srs_indication_pdu_list,
+-		&ett_nfapi_lbt_dl_config_pdu_list,
+-		&ett_nfapi_lbt_dl_indication_pdu_list,
+-		&ett_nfapi_dl_config_request_dlsch_pdu_rel8,
+-		&ett_nfapi_dl_config_request_dlsch_pdu_rel9,
+-		&ett_nfapi_dl_config_request_dlsch_pdu_rel10,
+-		&ett_nfapi_dl_config_bch_pdu_rel8,
+-		&ett_nfapi_dl_config_mch_pdu_rel8,
+-		&ett_nfapi_dl_config_pch_pdu_rel8,
+-		&ett_nfapi_dl_config_dci_dl_pdu_rel8,
+-		&ett_nfapi_dl_config_dci_dl_pdu_rel9,
+-		&ett_nfapi_dl_config_dci_dl_pdu_rel10,
+-		&ett_nfapi_dl_config_prs_pdu_rel9,
+-		&ett_nfapi_dl_config_csi_rs_pdu_rel10,
+-		&ett_nfapi_subbands,
+-		&ett_nfapi_precoding,
+-		&ett_nfapi_bf_vector_antennas,
+-		&ett_nfapi_ul_config_request_body,
+-		&ett_nfapi_ul_config_harq_buffer_pdu,
+-		&ett_nfapi_ul_config_ue_information_rel8,
+-		&ett_nfapi_ul_config_sr_information_pdu_rel8,
+-		&ett_nfapi_ul_config_ulsch_pdu_rel8,
+-		&ett_nfapi_ul_config_ulsch_pdu_rel10,
+-		&ett_nfapi_ul_config_cqi_ri_information_rel8,
+-		&ett_nfapi_ul_config_cqi_ri_information_rel9,
+-		&ett_nfapi_ul_config_ulsch_harq_information_rel10,
+-		&ett_nfapi_ul_config_initial_transmission_parameters_rel8,
+-		&ett_nfapi_ul_config_cqi_information_rel8,
+-		&ett_nfapi_ul_config_cqi_information_rel10,
+-		&ett_nfapi_ul_config_sr_information_rel8,
+-		&ett_nfapi_ul_config_sr_information_rel10,
+-		&ett_nfapi_ul_config_harq_information_rel10_tdd,
+-		&ett_nfapi_ul_config_harq_information_rel8_fdd,
+-		&ett_nfapi_ul_config_harq_information_rel9_fdd,
+-		&ett_nfapi_ul_config_srs_pdu_rel8,
+-		&ett_nfapi_ul_config_srs_pdu_rel10,
+-		&ett_nfapi_crc_indication_body,
+-
+-		&ett_nfapi_earfcn_list,
+-		&ett_nfapi_uarfcn_list,
+-		&ett_nfapi_arfcn_list,
+-		&ett_nfapi_rssi_list,
+-		&ett_nfapi_pci_list,
+-		&ett_nfapi_psc_list,
+-		&ett_nfapi_lte_cells_found_list,
+-		&ett_nfapi_utran_cells_found_list,
+-		&ett_nfapi_geran_cells_found_list,
+-		&ett_nfapi_si_periodicity_list,
+-
+-		/* for fragmentation support*/
+-		&ett_msg_fragment,
+-		&ett_msg_fragments
+-    };
+-
+-    static ei_register_info ei[] = 
+-	{
+-		{ &ei_power_invalid, { "nfapi.power.invalid", PI_PROTOCOL, PI_ERROR, "Tx Power range invalid [0 - 10000]", EXPFILL } },
+-		{ &ei_ref_sig_power_invalid, { "nfapi.ref_sig_power.invalid", PI_PROTOCOL, PI_ERROR, "Ref Sig Power range invalid [0 - 255]", EXPFILL }},
+-		{ &ei_invalid_range, { "nfapi.invalid.range", PI_PROTOCOL, PI_ERROR, "Out of valid range. Todo create more specific error", EXPFILL } },
+-    };
+-	
+-
+-
+-    expert_module_t* expert_nfapi;
+-
+-	/* Register protocol */
+-	proto_nfapi = proto_register_protocol("Nfapi", "NFAPI", "nfapi");
+-
+-    expert_nfapi = expert_register_protocol(proto_nfapi);
+-
+-    expert_register_field_array(expert_nfapi, ei, array_length(ei));
+-
+-    proto_register_field_array(proto_nfapi, hf, array_length(hf));
+-    proto_register_subtree_array(ett, array_length(ett));
+-	
+-	reassembly_table_register(&ul_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
+-	reassembly_table_register(&dl_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
+-
+-	register_dissector("nfapi", dissect_nfapi, proto_nfapi);
+-
+-}
+-
+-// ----------------------------------------------------------------------------|
+-
+-void proto_reg_handoff_nfapi(void)
+-{
+-	static dissector_handle_t nfapi_handle;
+-
+-	nfapi_handle = create_dissector_handle(dissect_nfapi, proto_nfapi);
+-
+-	dissector_add_for_decode_as("sctp.port", nfapi_handle);
+-
+-	dissector_add_uint("udp.port", 41700, nfapi_handle);
+-
+-}
++
++		default:
++		{
++			if (msg_id >= 0x112 && msg_id <= 0x017f)
++			{
++				// reserved P5 message
++			}
++			else if (msg_id >= 0x183 && msg_id <= 0x01ff)
++			{
++				// reserved P7 message
++			}
++			else if (msg_id >= 0x0200 && msg_id <= 0x02ff)
++			{
++				// reserved P4 message
++			}
++			else if (msg_id >= 0x0300 && msg_id <= 0x03ff)
++			{
++				// reserved vendor extentions
++			}
++
++			break;
++		}
++	};
++
++	ptvcursor_pop_subtree(ptvc);
++	ptvcursor_free(ptvc);
++
++	return tvb_captured_length(tvb);
++}
++
++static void nfapi_tag_vals_fn(gchar* s, guint32 v)
++{
++	const tlv_t* tlv = look_up_tlv(v);
++	if (tlv != 0)
++	{
++		g_snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", tlv->name, v);
++	}
++	else
++	{
++		g_snprintf(s, ITEM_LABEL_LENGTH, "%s (0x%x)", "Unknown", v);
++	}
++}
++static void neg_pow_conversion_fn(gchar* s, guint8 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%d dB (%d)", ((gint16)v * (-1)), v);
++}
++static void power_offset_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.001) - 6.0), v);
++}
++static void reference_signal_power_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v * 0.25) - 63.75), v);
++}
++static void laa_threshold_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (float)(v * -100.00), v);
++}
++static void max_transmit_power_2_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1) - 10.0, v);
++}
++static void max_transmit_power_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
++}
++static void sfn_sf_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%d/%d (%d)", v >> 0x4, v & 0x000F, v);
++}
++static void rssi_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
++}
++static void dl_rs_tx_pow_measment_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", ((float)v * 0.1), v);
++}
++
++static void ul_cqi_conversion_fn(gchar* s, guint16 v)
++{
++	g_snprintf(s, ITEM_LABEL_LENGTH, "%.2f dB (%d)", (((float)v / 2 ) - 64.0), v);
++}
++
++// ----------------------------------------------------------------------------|
++
++void proto_register_nfapi(void)
++{
++	static hf_register_info hf[] =
++	{
++		{ &hf_msg_fragments,
++			{ "Message fragments", "nfapi.fragments",
++			FT_NONE, BASE_NONE, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment,
++			{ "Message fragment", "nfapi.fragment",
++			FT_FRAMENUM, BASE_NONE, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_overlap,
++			{ "Message fragment overlap", "nfapi.fragment.overlap",
++			FT_BOOLEAN, 0, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_overlap_conflicts,
++			{ "Message fragment overlapping with conflicting data", "nfapi.fragment.overlap.conflicts",
++			FT_BOOLEAN, 0, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_multiple_tails,
++			{ "Message has multiple tail fragments", "nfapi.fragment.multiple_tails",
++			FT_BOOLEAN, 0, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_too_long_fragment,
++			{ "Message fragment too long", "nfapi.fragment.too_long_fragment",
++			FT_BOOLEAN, 0, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_error,
++			{ "Message defragmentation error", "nfapi.fragment.error",
++			FT_FRAMENUM, BASE_NONE, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_fragment_count,
++			{ "Message fragment count", "nfapi.fragment.count",
++			FT_UINT32, BASE_DEC, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_reassembled_in,
++			{ "Reassembled in", "nfapi.reassembled.in",
++			FT_FRAMENUM, BASE_NONE, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_msg_reassembled_length,
++			{ "Reassembled length", "nfapi.reassembled.length",
++			FT_UINT32, BASE_DEC, NULL, 0x00,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_p4_p5_message_header_phy_id,
++			{ "PHY ID", "nfapi.p4_p5_message_header.phy_id",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
++		},
++		{ &hf_nfapi_p4_p5_message_header_message_id,
++			{ "Message ID", "nfapi.p4_p5_message_header.message_id",
++			FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
++			"The nFAPI message identity", HFILL }
++		},
++		{ &hf_nfapi_p4_p5_message_header_message_length,
++			{ "Message Length", "nfapi.p4_p5_message_header.message_length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The length in bytes of the message including the header", HFILL }
++		},
++		{ &hf_nfapi_p4_p5_message_header_spare,
++			{ "Spare", "nfapi.p4_p5_message_header.spare",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Reserved field to be populated with zeros on transmission and ignored on reception", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_phy_id,
++			{ "Phy ID", "nfapi.p7_message_header.phy_id",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Within the PNF Device, the unique identity of the PHY instance as assigned through the PNF_CONFIG.request", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_message_id,
++			{ "Message ID", "nfapi.p7.message_header.message_id",
++			FT_UINT16, BASE_HEX_DEC, VALS(message_id_vals), 0x0,
++			"The nFAPI message identity", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_message_length,
++			{ "Message Length", "nfapi.p7_message_header.message_length",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_byte_bytes, 0x0,
++			"The length in bytes of the message segment including the header", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_m,
++			{ "M", "nfapi.p7_message_header.m_segment_sequence",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"A More flag indicating there are more segments to follow to complete the entire message", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_segment,
++			{ "Segment Number", "nfapi.p7_message_header.m_segment_sequence",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The segment number starting at zero and incrementing by one between each segment", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_sequence_number,
++			{ "Sequence Number", "nfapi.p7_message_header.m_segment_sequence",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The incrementing sequence number for all complete messages over the P7 nFAPI interface per PHY instance", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_checksum,
++			{ "Checksum", "nfapi.p7_message_header.checksum",
++			FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
++			"The checksum of the whole message segment (including header) as calculated using "
++			"the CRC32c algorithm following the same method as the SCTP protocol defined in IETF RFC 4960 "
++			"The Checksum is optional to populate and must be filled with zero's when not used", HFILL }
++		},
++		{ &hf_nfapi_p7_message_header_transmit_timestamp,
++			{ "Transmit Timestamp", "nfapi.p7_message_header.timestamp",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The offset from VNF SFN/SF 0/0 time reference of the message transmission at the transport layer, in microseconds, with a range of 0 to 10239999", HFILL }
++		},
++		{ &hf_nfapi_tl_tag,
++			{ "TLV Tag", "nfapi.tl_tag",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(nfapi_tag_vals_fn), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_tl_length,
++			{ "TLV Length", "nfapi.tl_length",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_byte_bytes, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_error_code,
++			{ "Error Code", "nfapi.error.code",
++			FT_UINT8, BASE_DEC, VALS(nfapi_error_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_p4_error_code,
++			{ "Error Code", "nfapi.p4_error.code",
++			FT_UINT8, BASE_DEC, VALS(nfapi_p4_error_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_rat_type,
++			{ "RAT Type", "nfapi.rat_type",
++			FT_UINT8, BASE_DEC, VALS(nfapi_rat_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_num_tlv,
++			{ "Number of TLV", "nfapi.param.response.num_tlv",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_phy_state,
++			{ "Phy state value", "nfapi.phy.state",
++			FT_UINT16, BASE_DEC, VALS(nfapi_phy_state_vals), 0x0,
++			"Indicates the current operational state of the PHY", HFILL }
++		},
++		{ &hf_nfapi_dl_ue_per_sf,
++			{ "Downlink UEs per Subframe", "nfapi.dl.ue.per.sf",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The maximum number of downlink UEs per subframe supported."
++			"This is the maximum number of downlink UEs that can be scheduled per "
++			"subframe, non-inclusive of broadcast, paging and common channels.", HFILL }
++		},
++		{ &hf_nfapi_ul_ue_per_sf,
++			{ "Uplink UEs per Subframe", "nfapi.ul.ue.per.sf",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The maximum number of uplink UEs per subframe supported."
++			"This is the maximum number of uplink UEs that can be scheduled per "
++			"subframe, non-inclusive of common channels.", HFILL }
++		},
++		{ &hf_nfapi_duplex_mode,
++			{ "Duplex Mode", "nfapi.duplex.mode",
++			FT_UINT16, BASE_DEC, VALS(nfapi_duplex_mode_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support,
++			{ "Downlink bandwidth support", "nfapi.dl.bandwidth.support",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PHY downlink channel bandwidth capability (in resource blocks)", HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_6,
++			{ "6Mhz", "nfapi.dl.bandwidth.support.6",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_15,
++			{ "15Mhz", "nfapi.dl.bandwidth.support.15",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_25,
++			{ "25Mhz", "nfapi.dl.bandwidth.support.25",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_50,
++			{ "50Mhz", "nfapi.dl.bandwidth.support.50",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_75,
++			{ "75Mhz", "nfapi.dl.bandwidth.support.75",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_bandwidth_support_100,
++			{ "100Mhz", "nfapi.dl.bandwidth.support.100",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support,
++			{ "Uplink bandwidth support", "nfapi.ul.bandwidth.support",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PHY uplink channel bandwidth capability (in resource blocks)", HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_6,
++			{ "6Mhz", "nfapi.ul.bandwidth.support.6",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_15,
++			{ "15Mhz", "nfapi.ul.bandwidth.support.15",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_25,
++			{ "25Mhz", "nfapi.ul.bandwidth.support.25",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_50,
++			{ "50Mhz", "nfapi.ul.bandwidth.support.50",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_75,
++			{ "75Mhz", "nfapi.ul.bandwidth.support.75",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_bandwidth_support_100,
++			{ "100Mhz", "nfapi.ul.bandwidth.support.100",
++			FT_BOOLEAN, 1, TFS(&tfs_supported_not_supported), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_modulation_support,
++			{ "Downlink modulation support", "nfapi.dl.modulation.support",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PHY downlink modulation capability", HFILL }
++		},
++		{ &hf_nfapi_dl_modulation_support_qpsk,
++			{ "QPSK", "nfapi.dl.modulation.support.qpsk",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_modulation_support_16qam,
++			{ "16QAM", "nfapi.dl.modulation.support.16qam",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_modulation_support_64qam,
++			{ "64QAM", "nfapi.dl.modulation.support.64qam",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_modulation_support_256qam,
++			{ "256QAM", "nfapi.dl.modulation.support.256qam",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_modulation_support,
++			{ "Uplink modulation support", "nfapi.ul.modulation.support",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PHY uplink modulation capability", HFILL }
++		},
++		{ &hf_nfapi_ul_modulation_support_qpsk,
++			{ "QPSK", "nfapi.ul.modulation.support.qpsk",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_modulation_support_16qam,
++			{ "16QAM", "nfapi.ul.modulation.support.16qam",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_modulation_support_64qam,
++			{ "64QAM", "nfapi.ul.modulation.support.64qam",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_phy_antenna_capability,
++			{ "Phy Antenna capability", "nfapi.phy.antenna.capability",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of antennas supported", HFILL }
++		},
++		{ &hf_nfapi_release_capability,
++			{ "Release capability", "nfapi.release.capability",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates which release the PHY supports", HFILL }
++		},
++		{ &hf_nfapi_mbsfn_capability,
++			{ "MBSFN capability", "nfapi.mbsfn.capability",
++			FT_BOOLEAN, 8, TFS(&support_strname), 0x0,
++			"Indicates support for MBSFN features", HFILL }
++		},
++		{ &hf_nfapi_laa_capability,
++			{ "LAA Support", "nfapi.laa.support",
++			FT_BOOLEAN, 8, TFS(&support_strname), 0x0,
++			"Indicates support for LAA features", HFILL }
++		},
++		{ &hf_nfapi_pd_sensing_lbt_support,
++			{ "PD sensing LBT support", "nfapi.pd.sensing.lbt.support",
++			FT_BOOLEAN, 8, TFS(&support_strname), 0x0,
++			"Indicates support for PD sensing in L1", HFILL }
++		},
++		{ &hf_nfapi_multi_carrier_lbt_support,
++			{ "Multi carrier LBT support", "nfapi.multi.carrier.lbt.support",
++			FT_UINT16, BASE_DEC, VALS(nfapi_mutli_carrier_lbt_support_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_partial_sf_support,
++			{ "Partial SF support", "nfapi.partial.sf.support",
++			FT_BOOLEAN, 8, TFS(&partial_sf_support_strname), 0x0,
++			"Indicates support for Partial SF in L1", HFILL }
++		},
++		{ &hf_nfapi_reference_signal_power,
++			{ "Reference signal power", "nfapi.ref_sig_power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(reference_signal_power_conversion_fn), 0x0,
++			"Normalized value levels (relative) to accommodate different absolute Tx Power used by eNb", HFILL }
++		},
++		{ &hf_nfapi_primary_synchronization_signal_epre_eprers,
++			{ "Primary synchronization signal EPRE/EPRERS", "nfapi.primary.sync.signal",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"The power of synchronization signal with respect to the reference signal, (PSS for LTE cell, NPSS for NB-IOT cell)", HFILL }
++		},
++		{ &hf_nfapi_secondary_synchronization_signal_epre_eprers,
++			{ "Secondary synchronization signal EPRE/EPRERS", "nfapi.secondary.sync.signal",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"The power of synchronization signal with respect to the reference signal, (SSS for LTE cell, NSSS for NB-IOT cell)", HFILL }
++		},
++		{ &hf_nfapi_physical_cell_id,
++			{ "Physical Cell ID", "nfapi.physical.cell.id",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The Cell ID sent with the synchronization signal", HFILL }
++		},
++		{ &hf_nfapi_phich_resource,
++			{ "PHICH Resource", "nfapi.phich.resource",
++			FT_UINT16, BASE_DEC, VALS(nfapi_phich_resource_vals), 0x0,
++			"The number of resource element groups used for PHICH", HFILL }
++		},
++		{ &hf_nfapi_phich_duration,
++			{ "PHICH Duration", "nfapi.phich.duration",
++			FT_BOOLEAN, 8, TFS(&phich_duration_strname), 0x0,
++			"The PHICH duration for MBSFN and non-MBSFN sub-frames", HFILL }
++		},
++		{ &hf_nfapi_phich_power_offset,
++			{ "PHICH Power Offset", "nfapi.phich.power.offset",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"The power per antenna of the PHICH with respect to the reference signal", HFILL }
++		},
++		{ &hf_nfapi_configuration_index,
++			{ "Configuration Index", "nfapi.configuration.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Provides information about the location and format of the PRACH.", HFILL }
++		},
++		{ &hf_nfapi_root_sequence_index,
++			{ "Root sequence Index", "nfapi.root.sequence.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"PRACH Root sequence index", HFILL }
++		},
++		{ &hf_nfapi_zero_correlation_zone_configuration,
++			{ "Zero correlation zone configuration", "nfapi.zero.correlation.zone.configuration",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Equivalent to Ncs", HFILL }
++		},
++		{ &hf_nfapi_high_speed_flag,
++			{ "High Speed Flag", "nfapi.high.speed.flag",
++			FT_BOOLEAN, 8, TFS(&high_speed_flag_strname), 0x0,
++			"Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
++		},
++		{ &hf_nfapi_frequency_offset,
++			{ "Frequency offset", "nfapi.frequency.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The first physical resource block available for PRACH", HFILL }
++		},
++		{ &hf_nfapi_hopping_mode,
++			{ "Hopping Mode", "nfapi.hopping.mode",
++			FT_BOOLEAN, 8, TFS(&hopping_mode_strname), 0x0,
++			"If hopping is enabled indicates the type of hopping used", HFILL }
++		},
++		{ &hf_nfapi_hopping_offset,
++			{ "Hopping offset", "nfapi.hopping.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The offset used if hopping is enabled", HFILL }
++		},
++		{ &hf_nfapi_delta_pucch_shift,
++			{ "Delta PUCCH Shift", "nfapi.delta.pucch.shift",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The cyclic shift difference", HFILL }
++		},
++		{ &hf_nfapi_n_cqi_rb,
++			{ "N CQI RB", "nfapi.n.cqi.rb",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The bandwidth, in units of resource blocks, that is available for use by PUCCH formats 2/2a/2b transmission in each slot", HFILL }
++		},
++		{ &hf_nfapi_n_an_cs,
++			{ "N AN CS", "nfapi.n.an.cs",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of cyclic shifts used for PUCCH formats 1/1a/1b in a resource block with a mix of formats 1/a/1/ab and 2/2a/2b.", HFILL }
++		},
++		{ &hf_nfapi_n1_pucch_an,
++			{ "N1 PUCCH AN", "nfapi.n1.pucch.an",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"N1 PUCCH", HFILL }
++		},
++		{ &hf_nfapi_bandwidth_configuration,
++			{ "Bandwidth configuration", "nfapi.bw.configuration",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The available SRS bandwidth of the cell", HFILL }
++		},
++		{ &hf_nfapi_srs_subframe_configuration,
++			{ "SRS subframe configuration", "nfapi.srs.subframe.configuration",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The subframe configuration. Needed if semi-static configuration is held in PHY", HFILL }
++		},
++		{ &hf_nfapi_uplink_rs_hopping,
++			{ "Uplink RS hopping", "nfapi.uplink.rs.hopping",
++			FT_UINT16, BASE_DEC, VALS(nfapi_uplink_rs_hopping_vals), 0x0,
++			"Indicates the type of hopping to use", HFILL }
++		},
++		{ &hf_nfapi_group_assignment,
++			{ "Group assignment", "nfapi.group.assignment",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The sequence shift pattern used if group hopping is enabled", HFILL }
++		},
++		{ &hf_nfapi_cyclic_shift_1_for_drms,
++			{ "Cyclic Shift 1 for DRMS", "nfapi.cyclic.shift.1.for.drms",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Specifies the cyclic shift for the reference signal used in the cell.", HFILL }
++		},
++		{ &hf_nfapi_subframe_assignment,
++			{ "Subframe_assignment", "nfapi.subframe.assignment",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"For TDD mode only, indicates the DL/UL subframe structure", HFILL }
++		},
++		{ &hf_nfapi_special_subframe_patterns,
++			{ "Special Subframe patterns", "nfapi.special.subframe.patterns",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"For TDD mode only. Length of fields DwPTS, GP and UpPTS", HFILL }
++		},
++		{ &hf_nfapi_ed_threshold_for_lbt_for_pdsch,
++			{ "ED Threshold for LBT for PDSCH", "nfapi.ed.threshold.for.lbt.pdsch",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
++			"Indicates the energy detection threshold in dBm for LBT for PDSCH", HFILL }
++		},
++		{ &hf_nfapi_ed_threshold_for_lbt_for_drs,
++			{ "ED Threshold for LBT for DRS", "nfapi.ed.threshold.for.lbt.for.drs",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
++			"Indicates the energy detection threshold in dBm for LBT for DRS", HFILL }
++		},
++		{ &hf_nfapi_pd_threshold,
++			{ "PD Threshold", "nfapi.pd.threshold",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(laa_threshold_conversion_fn), 0x0,
++			"Indicates the preamble detection threshold in dBm, if the L1 capabilities support PD", HFILL }
++		},
++		{ &hf_nfapi_multi_carrier_type,
++			{ "Multi carrier type", "nfapi.multi.carrier.type",
++			FT_UINT16, BASE_DEC, VALS(nfapi_laa_carrier_type_vals), 0x0,
++			"Indicates multi carrier type configuration of L1 (according to L1 capabilities and L2 scheduler requirements", HFILL }
++		},
++		{ &hf_nfapi_multi_carrier_tx,
++			{ "Multi carrier TX", "nfapi.multi.carrier.tx",
++			FT_BOOLEAN, 8, TFS(&nfapi_multi_carrier_tx_strname), 0x0,
++			"Indicates multi carrier transmission configuration of L1 (according to type if supporting multi carrier)", HFILL }
++		},
++		{ &hf_nfapi_multi_carrier_freeze,
++			{ "Multi carrier freeze", "nfapi.multi.carrier.freeze",
++			FT_BOOLEAN, 8, TFS(&nfapi_multi_carrier_freeze_strname), 0x0,
++			"Indicates multi carrier freeze, configuration of L1 (applicable only to type A type if supporting multi carrier)", HFILL }
++		},
++		{ &hf_nfapi_tx_antenna_ports_for_drs,
++			{ "Tx antenna ports for DRS", "nfapi.tx.antenna.ports.for.drs",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of cell specific transmit antenna ports within the DRS occasions", HFILL }
++		},
++		{ &hf_nfapi_transmission_power_for_drs,
++			{ "Transmission power for DRS", "nfapi.transmission.power.for.drs.",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"Offset of cell specific Reference signals power within DRS occasions to the reference signal power", HFILL }
++		},
++		{ &hf_nfapi_pbch_repetitions_enabled_r13,
++			{ "PBCH Repetitions enable R13", "nfapi.pbch.repetitions.enabled_r13",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable / Disable PBCH repetitions", HFILL }
++		},
++		{ &hf_nfapi_prach_cat_m_root_sequence_index,
++			{ "PRACH CAT-M Root sequence index", "nfapi.prach.cat_m.root.squence.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"PRACH Root sequence index", HFILL }
++		},
++		{ &hf_nfapi_prach_cat_m_zero_correlation_zone_configuration,
++			{ "PRACH CAT-M Zero correlation zone configuration", "nfapi.prach.cat_m.zero.correlation.zone.configuration",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Equivalent to Ncs", HFILL }
++		},
++		{ &hf_nfapi_prach_cat_m_high_speed_flag,
++			{ "PRACH CAT-M High speed flag", "nfapi.prach.cat_m.high.speed.flag",
++			FT_BOOLEAN, 8, TFS(&high_speed_flag_strname), 0x0,
++			"Indicates if unrestricted, or restricted, set of preambles is used", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_enable,
++			{ "PRACH CE level #0 Enable", "nfapi.prach.ce.level.0.enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable CE level #0.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_configuration_index,
++			{ "PRACH CE level #0 Configuration index", "nfapi.prach.ce.level.0.configuration.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Provides information about the location and format of the PRACH", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_frequency_offset,
++			{ "PRACH CE level #0 Frequency offset", "nfapi.prach.ce.level.0.frequency_offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The first physical resource block available for PRACH for each CE", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_number_of_repetitions_per_attempt,
++			{ "PRACH CE level #0 Number of repetitions per attempt", "nfapi.prach.ce.level.0.number.of.repetitions.per_attempt",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of PRACH repetitions per attempt for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_starting_subframe_periodicity,
++			{ "CE level #0 Starting subframe periodicity", "nfapi.prach.ce.level.0.starting.subframe_periodicity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_hopping_enabled,
++			{ "PRACH CE level #0 Hopping Enable", "nfapi.prach.ce.level.0.hopping_enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_0_hopping_offset,
++			{ "PRACH CE level #0 Hopping Offset", "nfapi.prach.ce.level.0.hopping.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Valid in case 'PRACH Hopping Enable' is enabled", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_enable,
++			{ "PRACH CE level #1 Enable", "nfapi.prach.ce.level.0.enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable CE level #1", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_configuration_index,
++			{ "PRACH CE level #1 Configuration index", "nfapi.prach.ce.level.1.configuration.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Provides information about the location and format of the PRACH", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_frequency_offset,
++			{ "PRACH CE level #1 Frequency offset", "nfapi.prach.ce.level.1.frequency_offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The first physical resource block available for PRACH for each CE", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_number_of_repetitions_per_attempt,
++			{ "PRACH CE level #1 Number of repetitions per attempt", "nfapi.prach.ce.level.1.number.of.repetitions.per_attempt",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of PRACH repetitions per attempt for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_starting_subframe_periodicity,
++			{ "CE level #1 Starting subframe periodicity", "nfapi.prach.ce.level.1.starting.subframe_periodicity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Optional.PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities),", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_hopping_enabled,
++			{ "PRACH CE level #1 Hopping Enable", "nfapi.prach.ce.level.1.hopping_enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_1_hopping_offset,
++			{ "PRACH CE level #1 Hopping Offset", "nfapi.prach.ce.level.1.hopping.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_enable,
++			{ "PRACH CE level #2 Enable", "nfapi.prach.ce.level.2.enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable CE level #2", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_configuration_index,
++			{ "PRACH CE level #2 Configuration index", "nfapi.prach.ce.level.2.configuration.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Provides information about the location and format of the PRACH", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_frequency_offset,
++			{ "PRACH CE level #2 Frequency offset", "nfapi.prach.ce.level.2.frequency_offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The first physical resource block available for PRACH for each CE", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_number_of_repetitions_per_attempt,
++			{ "PRACH CE level #2 Number of repetitions per attempt", "nfapi.prach.ce.level.2.number.of.repetitions.per_attempt",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of PRACH repetitions per attempt for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_starting_subframe_periodicity,
++			{ "CE level #2 Starting subframe periodicity", "nfapi.prach.ce.level.2.starting.subframe_periodicity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_hopping_enabled,
++			{ "PRACH CE level #2 Hopping Enable", "nfapi.prach.ce.level.2.hopping_enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable PRACH frequency hopping for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_2_hopping_offset,
++			{ "PRACH CE level #2 Hopping Offset", "nfapi.prach.ce.level.2.hopping.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_enable,
++			{ "PRACH CE level #3 Enable", "nfapi.prach.ce.level.3.enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable CE level #3.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_configuration_index,
++			{ "PRACH CE level #3 Configuration index", "nfapi.prach.ce.level.3.configuration.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Provides information about the location and format of the PRACH.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_frequency_offset,
++			{ "PRACH CE level #3 Frequency offset", "nfapi.prach.ce.level.3.frequency_offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The first physical resource block available for PRACH for each CE", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_number_of_repetitions_per_attempt,
++			{ "PRACH CE level #3 Number of repetitions per attempt", "nfapi.prach.ce.level.3.number.of.repetitions.per_attempt",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of PRACH repetitions per attempt for each CE level", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_starting_subframe_periodicity,
++			{ "CE level #3 Starting subframe periodicity", "nfapi.prach.ce.level.3.starting.subframe_periodicity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Optional. PRACH starting subframe periodicity, expressed in number of slots available for preamble transmission(PRACH opportunities)", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_hopping_enabled,
++			{ "PRACH CE level #3 Hopping Enable", "nfapi.prach.ce.level.3.hopping_enable",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Enable \\ Disable PRACH frequency hopping for each CE level.", HFILL }
++		},
++		{ &hf_nfapi_prach_ce_level_3_hopping_offset,
++			{ "PRACH CE level #3 Hopping Offset", "nfapi.prach.ce.level.3.hopping.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Valid in case 'PRACH Hopping Enable' is enabled.", HFILL }
++		},
++		{ &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_a,
++			{ "PUCCH Interval-ULHoppingConfigCommonModeA", "nfapi.pucch.interval.ulhopping.config.common.mode.a",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"NthULNB for UEModeA", HFILL }
++		},
++		{ &hf_nfapi_pucch_internal_ul_hopping_config_common_mode_b,
++			{ "PUCCH Interval-ULHoppingConfigCommonModeB", "nfapi.pucch.interval.ulhopping.config.common.mode.b",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"NthULNB for UEModeB", HFILL }
++		},
++		{ &hf_nfapi_data_report_mode,
++			{ "Data Report Mode", "nfapi.data.report.mode",
++			FT_BOOLEAN, 8, TFS(&data_report_mode_vals), 0x0,
++			"The data report mode for the uplink data", HFILL }
++		},
++		{ &hf_nfapi_sfnsf,
++			{ "SFN/SF", "nfapi.sfn.sf",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
++			"The future SFN/SF subframe where the TLVs included in the message should be applied", HFILL }
++		},
++		{ &hf_nfapi_max_up_pts,
++			{ "Max UpPTS frames", "nfapi.max.uppts.frame",
++			FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x0,
++			"Used for TDD only and indicates how SRS operates in UpPTS subframes", HFILL }
++		},
++		{ &hf_nfapi_srs_acknack_srs_simultaneous_transmission,
++			{ "SRS AckNack Simultaneous transmission", "nfapi.srs.acknack.simult.tx",
++			FT_BOOLEAN, 8, TFS(&srs_simult_tx_strname), 0x0,
++			"Indicates if SRS and ACK/NACK can be received in the same subframe. Needed if semi-static configuration is held in PHY.", HFILL }
++		},
++		{ &hf_nfapi_pnf_address_ipv4,
++			{ "PNF IPV4", "nfapi.pnf.address.ipv4",
++			FT_IPv4, BASE_NONE, NULL, 0x0,
++			"The IPv4 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
++		},
++		{ &hf_nfapi_pnf_address_ipv6,
++			{ "PNF IPV6", "nfapi.pnf.address.ipv6",
++			FT_IPv6, BASE_NONE, NULL, 0x0,
++			"The IPv6 address of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
++		},
++		{ &hf_nfapi_vnf_address_ipv4,
++			{ "VNF IPV4 Address", "nfapi.vnf.address.ipv4",
++			FT_IPv4, BASE_NONE, NULL, 0x0,
++			"The IPv4 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
++		},
++		{ &hf_nfapi_vnf_address_ipv6,
++			{ "VNF IPV6 Address", "nfapi.vnf.address.ipv6",
++			FT_IPv6, BASE_NONE, NULL, 0x0,
++			"The IPv6 address of the VNF to be used by the PNF for this P7 PHY instance", HFILL }
++		},
++		{ &hf_nfapi_pnf_port,
++			{ "PNF PORT value", "nfapi.config.pnf.port.value",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The port of the PNF PHY instance to be used by the VNF for this PNF PHY instance", HFILL }
++		},
++		{ &hf_nfapi_vnf_port,
++			{ "VNF PORT value", "nfapi.config.vnf.port.value",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The port of the VNF to be used by the PNF for this P7 PHY instance", HFILL } },
++		{ &hf_nfapi_sync_mode,
++			{ "Sync Mode", "nfapi.sync.mode",
++			FT_UINT8, BASE_DEC, VALS(nfapi_sync_mode_vals), 0x0,
++			"The method of nFAPI Synchronization supported by the PNF", HFILL }
++		},
++		{ &hf_nfapi_location_mode,
++			{ "Location Mode", "nfapi.location.mode",
++			FT_UINT8, BASE_DEC, VALS(location_mode_vals), 0x0,
++			"The method of location derivation supported by the PNF", HFILL }
++		},
++		{ &hf_nfapi_location_coordinates_length,
++			{ "Location Coordinates Length", "nfapi.location.coordinates.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Length in bytes of the Location Coordinates Array field", HFILL }
++		},
++		{ &hf_nfapi_location_coordinates,
++			{ "Location Coordinates", "nfapi.location.coordinates",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"The Location of the PNF. The value is formatted as the LocationCoordinates IE using BASIC-PER encoding as defined in "
++			"TS36.355 section 6.4.2. The first bit of the LocationCoordinates IE is in the LSB of the first byte of the array."
++			"The MSBs of the last element of the array may be padded with zeros if the ASN.1 element is not an integer number of bytes", HFILL }
++		},
++		{ &hf_nfapi_pdu,
++			{ "PDU", "nfapi.pdu",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_config_timing,
++			{ "DL config Timing", "nfapi.dl.config.timing",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The timing offset before the air interface subframe start that the DL_Config.request must be received at the PNF.", HFILL }
++		},
++		{ &hf_nfapi_tx_timing,
++			{ "Tx Timing", "nfapi.general.tx.timing",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The timing offset before the air interface subframe start that the TX.request must be received at the PNF.", HFILL }
++		},
++		{ &hf_nfapi_ul_config_timing,
++			{ "UL Config Timing", "nfapi.ul.config.timing",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The timing offset before the air interface subframe start that the UL_CONFIG.request must be received at the PNF.", HFILL }
++		},
++		{ &hf_nfapi_hi_dci0_timing,
++			{ "HI DCi0 Timing", "nfapi.hi.dci0.timing",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The timing offset before the air interface subframe start that the HI_DCI0.request must be received at the PNF.", HFILL }
++		},
++		{ &hf_nfapi_maximum_number_phys,
++			{ "Maximum number of Phys", "nfapi.maximum.number.phys",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The maximum number of operational PHYs supported by the PNF device.", HFILL }
++		},
++		{ &hf_nfapi_maximum_total_bandwidth,
++			{ "Maximum Total Bandwidth", "nfapi.maximum.total.bandwidth",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &khz_100_units_db, 0x0,
++			"The total maximum bandwidth (in units of 100kHz) supported by the PNF device.", HFILL }
++		},
++		{ &hf_nfapi_maximum_total_number_dl_layers,
++			{ "Maximum Total Number DL Layers", "nfapi.maximum.total.number.dl.layers",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The maximum total number of downlink layers supported.", HFILL }
++		},
++		{ &hf_nfapi_maximum_total_number_ul_layers,
++			{ "Maximum Total Number UL Layers", "nfapi.maximum.total.number.ul.layers",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The maximum total number of uplink layers supported across all available PHYs.", HFILL }
++		},
++		{ &hf_nfapi_shared_bands,
++			{ "Shared bands", "nfapi.shared.bands",
++			FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x0,
++			"Indication that the PNF device shares the list of RF band options available across all available PHYs, so each may only be used with a single PHY.", HFILL }
++		},
++		{ &hf_nfapi_shared_pa,
++			{ "Shared pa", "nfapi.shared.pa",
++			FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x0,
++			"Indication that the PNF device shares a single RF PA across all available PHYs, so that the maximum Total Power is shared across all available PHYs.", HFILL }
++		},
++		{ &hf_nfapi_maximum_total_power,
++			{ "Maximum total power", "nfapi.maximum.total.power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
++			"The maximum transmit power of the PNF device summed across all PHYs.", HFILL }
++		},
++		{ &hf_nfapi_oui,
++			{ "OUI", "nfapi.oui",
++			FT_STRING, BASE_NONE, NULL, 0x0,
++			"The PNF OUI in the format as specified by IEEE", HFILL }
++		},
++		{ &hf_nfapi_pnf_phy_number_phy,
++			{ "PNF Phy Number of Phy", "nfapi.pnf.phy.number.phy",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of PHY instances", HFILL }
++		},
++		{ &hf_nfapi_pnf_phy_config_index,
++			{ "PNF Phy Config Index", "nfapi.pnf.phy.config.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The unique index number of the PHY to permit the PNF to identify the PHY in the PNF_CONFIG.Request", HFILL }
++		},
++		{ &hf_nfapi_number_of_rfs,
++			{ "Number of RFs", "nfapi.pnf.rf.number.rf",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of RF configurations", HFILL }
++		},
++		{ &hf_nfapi_phy_rf_config_info_phy_id,
++			{ "Phy ID", "nfapi.pnf.phy.rf.config.phy.id",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_rf_config_index,
++			{ "RF Config Index", "nfapi.rf_config_index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The index number defined in the PNF RF struct that the PHY can support",
++			HFILL }
++		},
++		{ &hf_nfapi_number_of_rf_exclusions,
++			{ "Number of RF exclusions", "nfapi.hf_nfapi_number_of_rf_exclusions",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of RF configurations excluded from use by this PHY", HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported,
++			{ "Maximum 3gpp Release Supported", "nfapi.maximum_3gpp_release_supported",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The major 3GPP releases supported", HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel8,
++			{ "Release 8", "nfapi.maximum_3gpp_release_supported.rel8",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel9,
++			{ "Release 9", "nfapi.maximum_3gpp_release_supported.rel9",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel10,
++			{ "Release 10", "nfapi.maximum_3gpp_release_supported.rel10",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel11,
++			{ "Release 11", "nfapi.maximum_3gpp_release_supported.rel11",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel12,
++			{ "Release 12", "nfapi.maximum_3gpp_release_supported.rel12",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_maximum_3gpp_release_supported_rel13,
++			{ "Release 13", "nfapi.maximum_3gpp_release_supported.rel13",
++			FT_BOOLEAN, 1, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_downlink_channel_bandwidth_supported,
++			{ "Maximum Channel Downlink Bandwidth Supported", "nfapi.downlink_channel_bandwidth_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The downlink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104", HFILL }
++		},
++		{ &hf_nfapi_uplink_channel_bandwidth_supported,
++			{ "Maximum Channel Uplink Bandwidth Supported", "nfapi.uplink_channel_bandwidth_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The uplink channel bandwidth supported in resource blocks as specified in 3GPP TS 36.104.", HFILL }
++		},
++		{ &hf_nfapi_number_of_dl_layers_supported,
++			{ "Number of DL Layers Supported", "nfapi.number_of_dl_layer_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The maximum number of downlink layers supported", HFILL }
++		},
++		{ &hf_nfapi_number_of_ul_layers_supported,
++			{ "Number of UL Layers Supported", "nfapi.number_of_ul_layer_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The maximum number of uplink layers supported", HFILL }
++		},
++		{ &hf_nfapi_nmm_modes_supported,
++			{ "NMM modes supported", "nfapi.nmm_modes_supported",
++			FT_UINT8, BASE_DEC, VALS(nmm_modes_supported_vals), 0x0,
++			"Network Monitor Modes Supported.", HFILL }
++		},
++		{ &hf_nfapi_band,
++			{ "Band", "nfapi.band",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Band number as specified in 3GPP TS36.101", HFILL }
++		},
++		{ &hf_nfapi_maximum_transmit_power_2,
++			{ "Maximum transmit power", "nfapi.maximum_transmit_power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_2_conversion_fn), 0x0,
++			"The maximum transmit power for the PHY and RF operating at the configured bandwidth as defined in 3GPP TS 36.104.", HFILL }
++		},
++		{ &hf_nfapi_maximum_transmit_power,
++			{ "Maximum transmit power", "nfapi.maximum_transmit_power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
++			"The maximum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
++		},
++		{ &hf_nfapi_earfcn,
++			{ "EARFCN", "nfapi.earfcn",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The EARFCN to be measured.", HFILL }
++		},
++		{ &hf_nfapi_number_of_rf_bands,
++			{ "Number of RF Bands", "nfapi.num.rf_bands",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of RF Band instances", HFILL }
++		},
++		{ &hf_nfapi_nmm_uplink_rssi_supported,
++			{ "NMM Uplink RSSI supported", "nfapi.nmm.uplink.rssi.supported",
++			FT_UINT8, BASE_DEC, VALS(ul_rssi_supported_vals), 0x0,
++			"Indicates if the uplink RSSI meausremnts are supported by NMM.", HFILL }
++		},
++		{ &hf_nfapi_minimum_transmit_power,
++			{ "Minimum transmit power", "nfapi.minimum_transmit_power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(max_transmit_power_conversion_fn), 0x0,
++			"The minimum transmit power for the RF chain operating at the maximum supported bandwidth as defined in 3GPP TS 36.104.", HFILL }
++		},
++		{ &hf_nfapi_number_of_antennas_suppported,
++			{ "Number of Supported Antennas", "nfapi.number_of_antennas_suppported",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The maximum number of antennas supported.", HFILL }
++		},
++		{ &hf_nfapi_minimum_downlink_frequency,
++			{ "Minimum downlink frequency", "nfapi.minimum_downlink_frequency",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &khz_100_units_db, 0x0,
++			"The minimum supported downlink frequency in 100kHz units", HFILL }
++		},
++		{ &hf_nfapi_maximum_downlink_frequency,
++			{ "Maximum downlink frequency", "nfapi.maximum_downlink_frequency",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &khz_100_units_db, 0x0,
++			"The maximum supported downlink frequency in 100kHz units", HFILL }
++		},
++		{ &hf_nfapi_minimum_uplink_frequency,
++			{ "Minimum uplink frequency", "nfapi.minimum_downlink_frequency",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &khz_100_units_db, 0x0,
++			"The minimum supported uplink frequency in 100kHz units", HFILL }
++		},
++		{ &hf_nfapi_maximum_uplink_frequency,
++			{ "Maximum uplink frequency", "nfapi.maximum_downlink_frequency",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &khz_100_units_db, 0x0,
++			"The maximum supported uplink frequency in 100kHz units", HFILL }
++		},
++		{ &hf_nfapi_transmission_mode7_supported,
++			{ "Transmission Mode 7 Supported", "nfapi.pnf.phy_rel10.tx_mode7_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports TM7 for PDSCH", HFILL }
++		},
++		{ &hi_nfapi_transmission_mode8_supported,
++			{ "Transmission Mode 8 Supported", "nfapi.pnf.phy_rel10.tx_mode8_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports TM8 for PDSCH", HFILL }
++		},
++		{ &hi_nfapi_two_antennas_ports_for_pucch,
++			{ "Two antennas ports for PUCCH", "nfapi.pnf.phy_rel10.two_antennas_ports_for_pucch",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports PUCCH transmit diversity introduced in Release 10. Equivalent to two-AntennaPortsForPUCCH-r10 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_transmission_mode_9_supported,
++			{ "Transmission Mode 9 Supported", "nfapi.pnf.phy_rel10.tx_mode9_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports TM9 for PDSCH with 8 antennas and 8 CSI. Equivalent to tm9-With-8Tx-FDD-r10 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_simultaneous_pucch_pusch,
++			{ "Simultaneous PUCCH PUSCH", "nfapi.pnf.simultaneous_pucch_pusch",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports UE sending simultaneous PUCCH and PUSCH introduced in Release 10. Equivalent to simultaneousPUCCH-PUSCH-r10 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_four_layer_tx_with_tm3_and_tm4,
++			{ "Four layer Tx with TM3 and TM4", "nfapi.pnf.phy_rel10.layer_tx_with_tm3_and_tm4",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports four layer transmission for TM3 and TM4. Equivalent to fourLayerTM3-TM4-r10 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_epdcch_supported,
++			{ "ePDCCH supported", "nfapi.pnf.phy_rel11.epdcch_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports Enhanced PDCCH", HFILL }
++		},
++		{ &hi_nfapi_multi_ack_csi_reporting,
++			{ "Multi ACK CSI reporting", "nfapi.pnf.phy_rel11.mutli_ack_csi_reporting",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports the multi ACK and CSI reporting required with CA and mixed FDD/TDD carriers. Equivalent to multiACK-CSI-Reporting-r11 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_pucch_tx_diversity_with_channel_selection,
++			{ "PUCCH Tx diversity with channel selection", "nfapi.pnf.phy_rel11.tx_div_with_channel_selection",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports transmit diversity for PUCCH format 1b with channel selection. Equivalent to txDiv-PUCCH1b-ChSelect in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_ul_comp_supported,
++			{ "UL CoMP supported", "nfapi.pnf.phy_rel11.ul_comp_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports UL CoMP", HFILL }
++		},
++		{ &hi_nfapi_transmission_mode_5_supported,
++			{ "Transmission mode 5 supported", "nfapi.pnf.phy_rel11.tx_mode5_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports TM5 for PDSCH", HFILL }
++		},
++		{ &hf_nfapi_csi_subframe_set,
++			{ "CSI subframe set", "nfapi.pnf.phy_rel12.csi_subframe_set",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Equivalent to csi-SubframeSet-r12 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_enhanced_4tx_codebook,
++			{ "Enhanced 4TX codebook", "nfapi.pnf.phy_rel12.exhanced_t4x_codebook",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports the enhanced 4TX codebook. Equivalent to enhanced-4TxCodebook-r12 in TS36.306", HFILL }
++		},
++		{ &hi_nfapi_drs_supported,
++			{ "DRS supported", "nfapi.pnf.phy_rel12.drs_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports the Discovery Reference Signal", HFILL }
++		},
++		{ &hi_nfapi_ul_64qam_supported,
++			{ "UL 64QAM supported", "nfapi.pnf.phy_rel12.ul_64qam_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY support 64 QAM in the uplink", HFILL }
++		},
++		{ &hi_nfapi_transmission_mode_10_supported,
++			{ "Transmission mode 10 supported", "nfapi.pnf.phy_rel12.tx_mode10_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports TM10 for PDSCH (DL CoMP)", HFILL }
++		},
++		{ &hi_nfapi_alternative_tbs_indices,
++			{ "Alternative TBS indices", "nfapi.pnf.phy_rel12.alternative_tbs_indices",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports the alternate TBS indices (256 QAM).  Equivalent to alternativeTBS-Indices-r12 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_pucch_format_4_supported,
++			{ "PUCCH format 4 supported", "nfapi.pnf.phy_rel13.pucch_format4_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports PUCCH format 4", HFILL }
++		},
++		{ &hf_nfapi_pucch_format_5_supported,
++			{ "PUCCH format 5 supported", "nfapi.pnf.phy_rel13.pucch_format5_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports PUCCH format 5", HFILL }
++		},
++		{ &hf_nfapi_more_than_5_ca_supported,
++			{ "More than 5 CA support", "nfapi.pnf.phy_rel13.mode_than_5_ca_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports features required for more than 5 CA support on PUSCH. Equivalent to uci-PUSCH-Ext-r13 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_laa_supported,
++			{ "LAA supported", "nfapi.pnf.phy_rel13.laa_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports DL LAA (subframe format 3)", HFILL }
++		},
++		{ &hf_nfapi_laa_ending_in_dwpts_supported,
++			{ "LAA ending in DwPTS supported", "nfapi.pnf.phy_rel13.laa_ending_in_dwpts_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports DL LAA ending in a DwPTS subframe. Equivalent to endingDwPTS-r13i n TS36.306", HFILL }
++		},
++		{ &hf_nfapi_laa_starting_in_second_slot_supported,
++			{ "LAA starting in second slot Supported", "nfapi.pnf.phy_rel13.laa_starting_in_second_slot_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports DL LAA starting in the second slot in a subframe. Equivalent to secondSlotStartingPosition-r13 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_beamforming_supported,
++			{ "Beamforming Supported", "nfapi.pnf.phy_rel13.beamingforming_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports beamforming (FD-MIMO Class B). Equivalent to beamformed-r13 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_enhancements_supported,
++			{ "CSI-RS enhancements supported", "nfapi.pnf.phy_rel13.csi_rs_enchancements_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports CSI-RS enhancements (FD-MIMO Class A). Equivalent to csi-RS-EnhancementsTDD-r13 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_drms_enhancements_supported,
++			{ "DMRS enhancements supported", "nfapi.pnf.phy_rel13.drms_enhancements_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports DMRS enhancements added in Release 13. Equivalent to dmrs-Enhancements-r13 in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_srs_enhancements_supported,
++			{ "SRS enhancements supported", "nfapi.pnf.phy_rel13.srs_enhancements_supported",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates if PHY supports SRS enhancements added in Release 13. Equivalent to srs-Enhancements-r13in TS36.306", HFILL }
++		},
++		{ &hf_nfapi_sfn_sf,
++			{ "SFN_SF", "nfapi.sfn_sf",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(sfn_sf_conversion_fn), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_number_pdcch_ofdm_symbols,
++			{ "Number of PDCCH OFDM Symbols", "nfapi.number_pdcch_ofdm_symbols",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of OFDM symbols for the PDCCH", HFILL }
++		},
++		{ &hf_nfapi_number_dci,
++			{ "Number of DCI", "nfapi.number_dci",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of DCI PDUs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_pdus,
++			{ "Number of PDUs", "nfapi.number_pdu",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of PDUs that are included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_harqs,
++			{ "Number of HARQs", "nfapi.number_harqs",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of HARQs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_crcs,
++			{ "Number of CRCs", "nfapi.number_crcs",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of CRCs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_srs,
++			{ "Number of SRs", "nfapi.number_srs",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of SRs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_cqi,
++			{ "Number of CQIs", "nfapi.number_cqi",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of CQIs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_preambles,
++			{ "Number of Preambles", "nfapi.number_preambles",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of RACH preambles", HFILL }
++		},
++		{ &hf_nfapi_number_of_srss,
++			{ "Number of SRSs", "nfapi.number_srss",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Number of UEs contributing to the uplink SRS", HFILL }
++		},
++		{ &hf_nfapi_lbt_dl_req_pdu_type,
++			{ "LBT DL Request PDU Type", "nfapi.number_srss",
++			FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_req_pdu_type), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_lbt_dl_ind_pdu_type,
++			{ "LBT DL Indication PDU Type", "nfapi.number_srss",
++			FT_UINT16, BASE_DEC, VALS(nfapi_lbt_dl_ind_pdu_type), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_number_pdsch_rnti,
++			{ "Number of PDSCH RNTI", "nfapi.number_pdsch_rnti",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of unique RNTIs sent on the PDSCH", HFILL }
++		},
++		{ &hf_nfapi_transmission_power_pcfich,
++			{ "Transmission Power PCFICH", "nfapi.transmission_power_pcfich",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"Offset to the reference signal power.", HFILL }
++		},
++		{ &hf_nfapi_dl_config_pdu_type,
++			{ "PDU Type", "nfapi.pdu.type",
++			FT_UINT8, BASE_DEC, VALS(nfapi_dl_config_pdu_type_vals), 0x0,
++			"DL_CONFIG.request PDU Type", HFILL }
++		},
++		{ &hf_nfapi_pdu_size,
++			{ "PDU size", "nfapi.pdu.size",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Size of the PDU control information (in bytes). This length value includes the 2 bytes required for the PDU type and PDU size parameters", HFILL }
++		},
++		{ &hf_nfapi_instance_length,
++			{ "Instance length", "nfapi.instance.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The Length in bytes of all TLVs within this instance", HFILL }
++		},
++		{ &hf_nfapi_length,
++			{ "PDU length", "nfapi.pdu.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Length of PDU in bytes.", HFILL }
++		},
++		{ &hf_nfapi_pdu_index,
++			{ "PDU Index", "nfapi.pdu.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PDU index parameter specified for each PDU", HFILL }
++		},
++		{ &hf_nfapi_rnti,
++			{ "RNTI", "nfapi.rnti",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The RNTI used for identifying the UE when receiving the PDU", HFILL }
++		},
++		{ &hf_nfapi_resource_allocation_type,
++			{ "Resource Allocation Type", "nfapi.resource.allocation.type",
++			FT_UINT8, BASE_DEC, VALS(resource_allocation_type_vals), 0x0,
++			"Resource allocation type/header Valid for DCI formats : 1, 2, 2A, 2B, 2C, 2D", HFILL }
++		},
++		{ &hf_nfapi_virtual_resource_block_assignment_flag,
++			{ "Virtual resource block assignment flag", "nfapi.resource.block.assignment.flag",
++			FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
++			"Type of virtual resource block used Valid for DCI formats : 1A, 1B, 1D", HFILL }
++		},
++		{ &hf_nfapi_resource_block_coding,
++			{ "Resource block coding", "nfapi.resource.block.coding",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The encoding for the resource blocks. The coding is dependent on whether resource allocation type 0, 1, 2 is in use", HFILL }
++		},
++		{ &hf_nfapi_modulation,
++			{ "Modulation", "nfapi.modulation",
++			FT_UINT8, BASE_DEC, VALS(modulation_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_redundancy_version,
++			{ "Redundancy version", "nfapi.redundancy.version",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ redundancy version", HFILL }
++		},
++		{ &hf_nfapi_transport_blocks,
++			{ "Transport blocks", "nfapi.transport.blocks",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The transport block transmitted to this RNTI", HFILL }
++		},
++		{ &hf_nfapi_transport_block_to_codeword_swap_flag,
++			{ "Transport block to codeword swap flag", "nfapi.transport.block.to.codeword.swap.flag",
++			FT_UINT8, BASE_DEC, VALS(transport_block_to_codeword_swap_flag_vals), 0x0,
++			"Indicates the mapping of transport block to codewords.", HFILL }
++		},
++		{ &hf_nfapi_transmission_scheme,
++			{ "Transmission scheme", "nfapi.transmission.scheme",
++			FT_UINT8, BASE_DEC, VALS(transmission_scheme_vals), 0x0,
++			"The MIMO mode used in the PDU", HFILL }
++		},
++		{ &hf_nfapi_ul_transmission_scheme,
++			{ "Transmission scheme", "nfapi.transmission.scheme",
++			FT_UINT8, BASE_DEC, VALS(ul_transmission_scheme_vals), 0x0,
++			"The MIMO mode used in the PDU", HFILL }
++		},
++		{ &hf_nfapi_number_of_layers,
++			{ "Number of layers", "nfapi.number.of.layers",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of layers used in transmission", HFILL }
++		},
++		{ &hf_nfapi_number_of_subbands,
++			{ "Number of subbands", "nfapi.number.of.subbands",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Only valid when transmission scheme = 3, 4, 5. Defines the number of subbands and "
++			"codebooks used for PMI.If value = 1 then a single PMI value is supplied which should be used over all RB", HFILL }
++		},
++		{ &hf_nfapi_codebook_index,
++			{ "Codebook index", "nfapi.number.of.codebook.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Only valid when transmission scheme = 3, 4, 5. Defines the codebook used.", HFILL }
++		},
++		{ &hf_nfapi_ue_category_capacity,
++			{ "UE category capacity", "nfapi.ue.category.capacity",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The UE capabilities category", HFILL }
++		},
++		{ &hf_nfapi_pa,
++			{ "P-A", "nfapi.pa",
++			FT_UINT8, BASE_DEC, VALS(pa_vals), 0x0,
++			"The ratio of PDSCH EPRE to cell-specific RS EPRE among PDSCH REs in all the OFDM symbols not containing cell-specific RS in dB.", HFILL }
++		},
++		{ &hf_nfapi_delta_power_offset_index,
++			{ "Delta Power offset index", "nfapi.delta.power.offset.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Delta power offset, value: 0..1", HFILL }
++		},
++		{ &hf_nfapi_nprb,
++			{ "Nprb", "nfapi.nprb",
++			FT_UINT8, BASE_DEC, VALS(nprb_vals), 0x0,
++			"Used with DCI format 1A and RNTI=SI-RNTI or RA-RNTI. This should match the value sent in the TPC field of the DCI 1A PDU which allocated this grant.", HFILL }
++		},
++		{ &hf_nfapi_transmission_mode,
++			{ "Transmission Mode", "nfapi.transmission_nprb",
++			FT_UINT8, BASE_DEC, VALS(transmission_mode_vals), 0x0,
++			"Transmission mode associated with the UE", HFILL }
++		},
++		{ &hf_nfapi_prnti,
++			{ "P-RNTI", "nfapi.prnti",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The P-RNTI associated with the paging", HFILL }
++		},
++		{ &hf_nfapi_mcs,
++			{ "MCS", "nfapi.mcs",
++			FT_UINT8, BASE_DEC, VALS(pch_modulation_vals), 0x0,
++			"The modulation and coding scheme for the transport block", HFILL }
++		},
++		{ &hf_nfapi_number_of_transport_blocks,
++			{ "Number of transport blocks", "nfapi.number_of_transport_blocks",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of transport blocks transmitted to this RNTI", HFILL }
++		},
++		{ &hf_nfapi_ue_mode,
++			{ "UE Mode", "nfapi.ue.mode",
++			FT_UINT8, BASE_DEC, VALS(ue_mode_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_prs_bandwidth,
++			{ "PRS bandwidth", "nfapi.prs.bandwidth",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"PRS bandwidth in resource blocks.", HFILL }
++		},
++		{ &hf_prs_cyclic_prefix_type,
++			{ "PRS cyclic prefix type", "nfapi.prs.cyclic.prefix.type",
++			FT_BOOLEAN, 8, TFS(&prs_cyclic_prefix_type_strname), 0x0,
++			"The cyclic prefix used for PRS transmission", HFILL }
++		},
++		{ &hf_prs_muting,
++			{ "PRS muting", "nfapi.prs.muting",
++			FT_BOOLEAN, 8, TFS(&prs_muting_strname), 0x0,
++			"PRS muting dictates if PRS REs are vacant (prsMutingInfo-r9 indicates the SF occasions)", HFILL }
++		},
++		{ &hf_nfapi_num_bf_prb_per_subband,
++			{ "Num of BF PRB per Subband", "nfapi.num.bf.prb.per.subband",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of PRBs that are treated as one subband", HFILL }
++		},
++		{ &hf_nfapi_num_bf_vector,
++			{ "Num of BF Vector", "nfapi.num.bf.vector",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of beam forming vectors. One beam forming vector is specified for each subband", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_resource_config,
++			{ "CSI-RS resource config", "nfapi.csi.rs.resource.config",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates reference signal configuration for CSI-RS", HFILL }
++		},
++		{ &hf_nfapi_bf_vector_subband_index,
++			{ "BF Subband Index", "nfapi.num.bf.vector.subband.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Index of subband for which the following beam forming vector is applied", HFILL }
++		},
++		{ &hf_nfapi_bf_vector_num_antennas,
++			{ "BF Num of Antennas", "nfapi.num.bf.vector.bf.value",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of physical antennas", HFILL }
++		},
++		{ &hf_nfapi_bf_vector_bf_value,
++			{ "BF Value per Antenna", "nfapi.num.bf.vector.bf.value",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Beam forming vector element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
++		},
++		{ &hf_nfapi_nscid,
++			{ "NSC id", "nfapi.nscid",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Used with DCI format 2B and 2C.", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_flag,
++			{ "CSI RS Flag", "nfapi.csi.rs.flag",
++			FT_BOOLEAN, 8, TFS(&csi_rs_flags_strname), 0x0,
++			"Indicates if parameters related to CSI-RS are valid or not.", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_resource_config_r10,
++			{ "CSI RS resource config R10", "nfapi.csi.rs.resource_config_r10",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"This value is deprecated", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_zero_tx_power_resource_config_bitmap_r10,
++			{ "CSI-RS Number of NZP configuration", "nfapi.csi.rs.num.of.nzp.configurations",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Bitmap of 16 bits. Encoding format of bitmap follows section 6.10.5.2 of 36.211", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_number_of_nzp_configurations,
++			{ "CSI RS zero Tx Power Resource config bitmap R10", "nfapi.csi.rs.zero.tx.power.resource.config.bitmap.r10",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates the number of Non-Zero power CSI-RS configurations.", HFILL }
++		},
++		{ &hf_nfapi_pdsch_start,
++			{ "PDSCH_start", "nfapi.pdsch.start",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Per UE starting OFDM symbol for the PDSCH, impacts the mapping of PDSCH to REs", HFILL }
++		},
++		{ &hf_nfapi_drms_config_flag,
++			{ "DMRS Config flag", "nfapi.drms.config.flag",
++			FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
++			"Indicates if the DMRS Config parameter is valid", HFILL }
++		},
++		{ &hf_nfapi_drms_scrambling,
++			{ "DMRS Scrambling", "nfapi.drms.scrambling",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The scrambling identity for UE specific reference signals.", HFILL }
++		},
++		{ &hf_nfapi_csi_config_flag,
++			{ "CSI Config flag", "nfapi.csi.config.flag",
++			FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
++			"Indicates if the CSI Config parameter is valid", HFILL }
++		},
++		{ &hf_nfapi_csi_scrambling,
++			{ "CSI Scrambling", "nfapi.csi.scrambling",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The scrambling identity for CSI.", HFILL }
++		},
++		{ &hf_nfapi_pdsch_re_mapping_flag,
++			{ "PDSCH RE mapping flag", "nfapi.pdsch.remapping.flag",
++			FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
++			"Indicates if the PDSCH RE parameters are valid.", HFILL }
++		},
++		{ &hf_nfapi_pdsch_re_mapping_antenna_ports,
++			{ "PDSCH RE mapping antenna ports", "nfapi.pdsch.remapping.antenna.ports",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates number of antennas used for PDSCH RE mapping", HFILL }
++		},
++		{ &hf_nfapi_pdsch_re_mapping_freq_shift,
++			{ "PDSCH RE mapping freq shift", "nfapi.pdsch.remapping.freq.shift",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the frequency shift used for PDSCH RE mapping.", HFILL }
++		},
++		{ &hf_nfapi_alt_cqi_table_r12,
++			{ "altCQI-Table-r12", "nfapi.alt.cqi.table.r12",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"altCQI-Table-r12 is indicative of using an alternative MCS table for UEs supporting 256QAM."
++			"This is taken into account  for calculation of soft buffer size for the transport block", HFILL }
++		},
++		{ &hf_nfapi_max_layers,
++			{ "MaxLayers", "nfapi.max.layers",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Maximal number of negotiated / configured layers for a UE, used for the calculation of soft buffer size for the transport block", HFILL }
++		},
++		{ &hf_nfapi_n_dl_harq,
++			{ "N_DL_HARQ", "nfapi.n.dl.harq",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dwpts_symbols,
++			{ "DwPTS Symbols", "nfapi.dwpts.symbols",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid if DCI format 1C is being used to signal LAA end partial SF. Indicates the number of starting symbols according to 36.213 Table  13-A-1", HFILL }
++		},
++		{ &hf_nfapi_initial_lbt_sf,
++			{ "Initial LBT SF", "nfapi.initial.lbt.sf",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if the DCI PDU is prepared for full SF (regular) or for initial partial SF (2nd slot) according to [11] section 6.2.4 (if PDCCH) or 6.2.4A (if ePDCCH)", HFILL }
++		},
++		{ &hf_nfapi_ue_type,
++			{ "UE Type", "nfapi.ue.type",
++			FT_UINT8, BASE_DEC, VALS(dlsch_re13_ue_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_pdsch_payload_type,
++			{ "PDSCH Payload Type", "nfapi.pdsch.payload.type",
++			FT_UINT8, BASE_DEC, VALS(dlsch_re13_pdsch_payload_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_initial_transmission_sf,
++			{ "Initial transmission SF (io)", "nfapi.init.tx.sf.io",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Absolute Sub-Frame  of the initial transmission", HFILL }
++		},
++		{ &hf_nfapi_req13_drms_table_flag,
++			{ "Rel-13-DMRS-tabe flag", "nfapi.r13.drms.table.flag",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if Release 13 DMRS table is used.", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_resource_index,
++			{ "CSI-RS resource index", "nfapi.csi.rs.resource.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Index of the CSI-RS resource. This is included to link bfValues to CSI-RS resources included in Release 10 parameters.", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_class,
++			{ "Class", "nfapi.csi.rs.class",
++			FT_UINT8, BASE_DEC, VALS(csi_rs_class_vals), 0x0,
++			"Indicates CSI-RS class", HFILL }
++		},
++		{ &hf_nfapi_cdm_type,
++			{ "CDM Type", "nfapi.cdm.type",
++			FT_UINT8, BASE_DEC, VALS(csi_rs_cdm_type_vals), 0x0,
++			"Indicates CDM type for CSI-RS. See [36.211] section 6.10.5.2. Valid for Class A", HFILL }
++		},
++		{ &hf_nfapi_edpcch_prb_index,
++			{ "EPDCCH PRB index", "nfapi.edpcch.prb.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"PRB index", HFILL }
++		},
++		{ &hf_nfapi_epdcch_resource_assignment_flag,
++			{ "EPDCCH Resource assignment flag", "nfapi.epdcch.resource.assignment.flag",
++			FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
++			"Type of virtual resource block used", HFILL }
++		},
++		{ &hf_nfapi_epdcch_id,
++			{ "EPDCCH ID", "nfapi.epdcch.id",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"EPDCCH index- used for the scrambler initiation The DMRS scrambling sequence initialization parameter defined in[11] section 6.10.3A.1", HFILL }
++		},
++		{ &hf_nfapi_epdcch_start_symbol,
++			{ "EPDCCH Start Symbol", "nfapi.epdcch.start.symbol",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the OFDM starting symbol for any EPDCCH and PDSCH", HFILL }
++		},
++		{ &hf_nfapi_epdcch_num_prb,
++			{ "EPDCCH NumPRB", "nfapi.epdcch.num.prb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of PRBs allocated for EPDCCH", HFILL }
++		},
++		{ &hf_nfapi_precoding_value,
++			{ "Precoding value", "nfapi.precoding.value",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Precoding element for physical antenna #i real 8 bits followed by imaginary 8 bits", HFILL }
++		},
++		{ &hf_nfapi_mpdcch_narrowband,
++			{ "MPDCCH Narrowband", "nfapi.mpdcch.narrowband",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Narrowband for MPDCCH", HFILL }
++		},
++		{ &hf_nfapi_number_of_prb_pairs,
++			{ "Number of PRB pairs", "nfapi.number.prb.pairs",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of PRB-pairs constituting the MPDCCH-PRB-pair set", HFILL }
++		},
++		{ &hf_nfapi_resource_block_assignment,
++			{ "Resource Block Assignment", "nfapi.resource.block.assignement",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Combinational index r", HFILL }
++		},
++		{ &hf_nfapi_start_symbol,
++			{ "Start symbol", "nfapi.start.symbol",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ecce_index,
++			{ "ECCE index", "nfapi.ecce.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"CCE index used to send the DCI", HFILL }
++		},
++		{ &hf_nfapi_ce_mode,
++			{ "CE Mode", "nfapi.ce.mode",
++			FT_UINT8, BASE_DEC, VALS(ce_mode_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_drms_scrabmling_init,
++			{ "DMRS scrambling init", "nfapi.drms.scrambling.init",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The DMRS scrambling sequence initialization parameter defined in [11] section 6.10.3A.1", HFILL }
++		},
++		{ &hf_nfapi_pdsch_reception_levels,
++			{ "PDSCH repetition levels", "nfapi.pdsch.repetition.levels",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid for DCI formats: 6-0A, 6-0B", HFILL }
++		},
++		{ &hf_nfapi_new_data_indicator,
++			{ "New data indicator", "nfapi.new.data.indicator",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The new data indicator for the transport block", HFILL }
++		},
++		{ &hf_nfapi_tpmi_length,
++			{ "TPMI length", "nfapi.tpmi.length",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Length of 'TPMI' field in units of bits", HFILL }
++		},
++		{ &hf_nfapi_pmi_flag,
++			{ "PMI flag", "nfapi.pmi.flag",
++			FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
++			"Indicates if 'PMI' field is present", HFILL }
++		},
++		{ &hf_nfapi_harq_resource_offset,
++			{ "HARQ resource offset", "nfapi.harq.resource.offset",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ-ACK resource offset used", HFILL }
++		},
++		{ &hf_nfapi_dci_subframe_repetition_number,
++			{ "DCI subframe repetition number", "nfapi.dci.subframe.repetition.number",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the number of MPDCCH repetitions", HFILL }
++		},
++		{ &hf_nfapi_downlink_assignment_index_length,
++			{ "Downlink assignment index Length", "nfapi.dl.assignement.index.length",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Length of Downlink assignment index field in units of bits.", HFILL }
++		},
++		{ &hf_nfapi_starting_ce_level,
++			{ "Starting CE Level", "nfapi.starting.ce.level",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"2 bits provide the PRACH starting CE level", HFILL }
++		},
++		{ &hf_nfapi_antenna_ports_and_scrambling_identity_flag,
++			{ "Antenna ports and scrambling identity flag", "nfapi.antenna.ports.and.scrambling.identity.flag",
++			FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
++			"Indicates if 'Antenna ports and scrambling identity' field is present.", HFILL }
++		},
++		{ &hf_nfapi_antenna_ports_and_scrambling_identity,
++			{ "Antenna ports and scrambling identity", "nfapi.antenna.ports.and.scrambling.identit",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the Antenna port and, scrambling identity value", HFILL }
++		},
++		{ &hf_nfapi_paging_direct_indication_differentiation_flag,
++			{ "Paging/Direct indication differentiation flag", "nfapi.paging.direct.indictation.differentiation.flag",
++			FT_UINT8, BASE_DEC, VALS(paging_direct_indication_differtiation_flag_vals), 0x0,
++			"Valid for DCI format 6-2", HFILL }
++		},
++		{ &hf_nfapi_direct_indication,
++			{ "Direct indication", "nfapi.direct.indication",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid for DCI format 6-2", HFILL }
++		},
++		{ &hf_nfapi_number_of_tx_antenna_ports,
++			{ "Number of TX Antenna ports", "nfapi.num.of.tx.antenna.ports.",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of TX physical antenna ports", HFILL }
++		},
++		{ &hf_nfapi_transmission_power,
++			{ "Transmission Power", "nfapi.transmission_power",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"Offset to the reference signal power.", HFILL }
++		},
++		{ &hf_nfapi_mbsfn_area_id,
++			{ "MBSFN Area id", "nfapi.mbsfn.area.id",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates MBSFN area ID", HFILL }
++		},
++		{ &hf_nfapi_dl_dci_format,
++			{ "DL DCI format", "nfapi.dl.dci.format",
++			FT_UINT8, BASE_DEC, VALS(dl_dci_format_vals), 0x0,
++			"Format of the DL DCI", HFILL }
++		},
++		{ &hf_nfapi_ul_dci_format,
++			{ "UL DCI format", "nfapi.ul_dci.format",
++			FT_UINT8, BASE_DEC, VALS(ul_dci_format_vals), 0x0,
++			"Format of the UL DCI", HFILL }
++		},
++		{ &hf_nfapi_mpdcch_ul_dci_format,
++			{ "UL DCI format", "nfapi.mpdcch.ul_dci.format",
++			FT_UINT8, BASE_DEC, VALS(mpdcch_ul_dci_format_vals), 0x0,
++			"Format of the UL DCI", HFILL }
++		},
++		{ &hf_nfapi_cce_idx,
++			{ "CCE index", "nfapi.cce.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"CCE index used to send the DCI", HFILL }
++		},
++		{ &hf_nfapi_aggregation_level,
++			{ "Aggregation level", "nfapi.aggregation.level",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The aggregation level used", HFILL }
++		},
++		{ &hf_nfapi_mcs_1,
++			{ "MCS_1", "nfapi.mcs_1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The modulation and coding scheme for 1st transport block", HFILL }
++		},
++		{ &hf_nfapi_mcs_2,
++			{ "MCS_2", "nfapi.mcs_2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The modulation and coding scheme for 2nd transport block", HFILL }
++		},
++		{ &hf_nfapi_redundancy_version_1,
++			{ "Redundancy version_1", "nfapi.redundancy.version.1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The redundancy version for 1st transport block.", HFILL }
++		},
++		{ &hf_nfapi_redundancy_version_2,
++			{ "Redundancy version_2", "nfapi.redundancy.version.2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The redundancy version for 2nd transport block", HFILL }
++		},
++		{ &hf_nfapi_new_data_indicator_1,
++			{ "New data indicator_1", "nfapi.new.data.indicator.1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The new data indicator for 1st transport block.", HFILL }
++		},
++		{ &hf_nfapi_new_data_indicator_2,
++			{ "New data indicator_2", "nfapi.new.data.indicator.2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The new data indicator for 2nd transport block.", HFILL }
++		},
++		{ &hf_nfapi_harq_process,
++			{ "HARQ process", "nfapi.harq.process",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ process number", HFILL }
++		},
++		{ &hf_nfapi_tpmi,
++			{ "TPMI", "nfapi.tpmi",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The codebook index to be used for precoding", HFILL }
++		},
++		{ &hf_nfapi_pmi,
++			{ "PMI", "nfapi.pmi",
++			FT_UINT8, BASE_DEC, VALS(pmi_vals), 0x0,
++			"Confirmation for precoding", HFILL }
++		},
++		{ &hf_nfapi_precoding_information,
++			{ "Precoding information", "nfapi.precoding.information",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_tpc,
++			{ "TPC", "nfapi.tpc",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Tx power control command for PUCCH", HFILL }
++		},
++		{ &hf_nfapi_downlink_assignment_index,
++			{ "Downlink assignment index", "nfapi.downlink.assignment.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The downlink assignment index. In release 8-11 this is only used in TDD mode, "
++			"value ignored for FDD. In release 12 or later a field indicating the structure "
++			"type of the primary cell is used to determine if this is valid with size 2 bits."
++			"In release 13 or later a field indicating codebooksizeDetermination - r13 = 0 is "
++			"used to determine is this field is valid with size 4 bits", HFILL }
++		},
++		{ &hf_nfapi_ngap,
++			{ "Ngap", "nfapi.ngap",
++			FT_UINT8, BASE_DEC, VALS(ngap_vals), 0x0,
++			"Used in virtual resource block distribution", HFILL }
++		},
++		{ &hf_nfapi_transport_block_size_index,
++			{ "Transport block size index", "nfapi.transport.block.size.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The transport block size", HFILL }
++		},
++		{ &hf_nfapi_downlink_power_offset,
++			{ "Downlink power offset", "nfapi.downlink.power.offset",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the DL power offset type for multi-user MIMO transmission", HFILL }
++		},
++		{ &hf_nfapi_allocate_prach_flag,
++			{ "Allocation PRACH flag", "nfapi.allocation.prach.flag",
++			FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
++			"Indicates that PRACH procedure is initiated", HFILL }
++		},
++		{ &hf_nfapi_preamble_index,
++			{ "Preamble index", "nfapi.preamable.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The preamble index to be used on the PRACH", HFILL }
++		},
++		{ &hf_nfapi_prach_mask_index,
++			{ "PRACH mask index", "nfapi.prach.mask.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The mask index to be used on the PRACH", HFILL }
++		},
++		{ &hf_nfapi_rnti_type,
++			{ "RNTI type", "nfapi.rnti.type",
++			FT_UINT8, BASE_DEC, VALS(rnti_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_mpdcch_rnti_type,
++			{ "RNTI type", "nfapi.mpdcch.rnti.type",
++			FT_UINT8, BASE_DEC, VALS(mpdcch_rnti_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_mcch_flag,
++			{ "MCCH flag", "nfapi.mcch.flag",
++			FT_BOOLEAN, BASE_NONE, TFS(&mcch_flag_string_name), 0x0,
++			"Indicates if format 1C is being used to signal a MCCH or SC-MCCH change notification", HFILL }
++		},
++		{ &hf_nfapi_mcch_change_notification,
++			{ "MCCH change notification", "nfapi.mcch.change.notification",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"MCCH or SC-MCCH Change Notification", HFILL }
++		},
++		{ &hf_nfapi_scrambling_identity,
++			{ "Scrambling identity", "nfapi.scrambling.identity",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the scrambling identity value NSCID", HFILL }
++		},
++		{ &hf_nfapi_cross_carrier_scheduling_flag,
++			{ "Cross Carrier scheduling flag", "nfapi.cross.carrier.scheduling.flag",
++			FT_BOOLEAN, 8, TFS(&cross_carrier_scheduling_flag_strname), 0x0,
++			"Indicates if cross carrier scheduling has been enabled for the UE receiving this DCI", HFILL }
++		},
++		{ &hf_nfapi_carrier_indicator,
++			{ "Carrier Indicator", "nfapi.carrier.indicator",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Serving Cell Index", HFILL }
++		},
++		{ &hf_nfapi_srs_flag,
++			{ "SRS flag", "nfapi.srs.flag",
++			FT_BOOLEAN, 8, TFS(&srs_flag_strname), 0x0,
++			"Indicates if the SRS request parameter is valid", HFILL }
++		},
++		{ &hf_nfapi_srs_request,
++			{ "SRS request", "nfapi.srs.request",
++			FT_BOOLEAN, 8, TFS(&srs_request_strname), 0x0,
++			"SRS request flag", HFILL }
++		},
++		{ &hf_nfapi_antenna_ports_scrambling_and_layers,
++			{ "Antenna ports scrambling and layers", "nfapi.antenna.ports.scrambling.and.layers",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the Antenna port, scrambling identity value NSCID and number of layers", HFILL }
++		},
++		{ &hf_nfapi_total_dci_length_including_padding,
++			{ "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The total DCI length including padding bits", HFILL }
++		},
++		{ &hf_nfapi_n_ul_rb,
++			{ "N_UL_RB", "nfapi.n.dl.rb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"BW of serving cell for which the DCI was scheduled for.  This is valid for "
++			"the case of cross carrier scheduling, for the case of a self - "
++			"scheduling(cross carrier scheduling is not valid or Carrier indicator has value '0', "
++			"the BW is the 'DL BW support' as configured in configuration phase(params) "
++			"Uplink channel bandwidth in resource blocks", HFILL }
++		},
++		{ &hf_nfapi_harq_ack_resource_offset,
++			{ "HARQ-ACK resource offset", "nfapi.harq.ack.resource.offset",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ-ACK resource offset field is present only when this format is carried by EPDCCH.", HFILL }
++		},
++		{ &hf_nfapi_pdsch_re_mapping_and_quasi_co_location_indicator,
++			{ "PDSCH RE Mapping and Quasi-Co-Location Indicator", "nfapi.pdsch.re.mapping",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the parameter set configured by the higher layers which the UE should use.", HFILL }
++		},
++		{ &hf_nfapi_primary_cell_type,
++			{ "Primary cell type", "nfapi.primary.cell.type",
++			FT_UINT8, BASE_DEC, VALS(primary_cells_type_vals), 0x0,
++			"Indicates the type of the primary cell.", HFILL }
++		},
++		{ &hf_nfapi_ul_dl_configuration_flag,
++			{ "UL/DL configuration flag", "nfapi.ul.dl.configuration.flag",
++			FT_BOOLEAN, 8, TFS(&ul_dl_configuration_flag_strname), 0x0,
++			"Indicates if format 1C is being used to signal UL/DL configuration", HFILL }
++		},
++		{ &hf_nfapi_number_of_ul_dl_configurations,
++			{ "Number of UL/DL configurations", "nfapi.number.ul.dl.configurations",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_dl_configuration_index,
++			{ "UL/DL configuration indication", "nfapi.ul.dl.configuration.indication",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"UL/DL configuration index", HFILL }
++		},
++		{ &hf_nfapi_laa_end_partial_sf_flag,
++			{ "LAA end partial SF flag", "nfapi.laa.end.partial.sf.flag",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if DCI format 1C is being used to signal LAA end partial SF (valid if end partial SF support configuraton is set)", HFILL }
++		},
++		{ &hf_nfapi_laa_end_partial_sf_configuration,
++			{ "LAA end partial SF configuration", "nfapi.laa.end.partial.sf.configuration",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"If DCI format 1C scrambled by CC - RNTI is used to signal end partial SF, this field "
++			"contains LAA common information (4 bits used in [9] Table 13A-1 for configuration of "
++			"occupied OFDM symbols for current and next SF)", HFILL }
++		},
++		{ &hf_nfapi_codebooksize_determination_r13,
++			{ "Codebook Size Determination R13", "nfapi.codebook.size.determination.r13",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if the downlink assignment index parameter (DAI) is 4 bits", HFILL }
++		},
++		{ &hf_nfapi_rel13_drms_table_flag,
++			{ "Rel-13-DMRS-tabe flag", "nfapi.drms.table.flag.r13",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if Release 13 DMRS table for be used", HFILL }
++		},
++		{ &hf_nfapi_pscch_resource,
++			{ "PSCCH Resource", "nfapi.pscch.resource",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"6-bits describing the resource blocks for transmitting PSCCH", HFILL }
++		},
++		{ &hf_nfapi_time_resource_pattern,
++			{ "Time resource pattern", "nfapi.time.resource.pattern",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"7-bits describing the time resource pattern index", HFILL }
++		},
++		{ &hf_nfapi_mpdcch_transmission_type,
++			{ "MPDCCH transmission type", "nfapi.mpdcch.transmission.type",
++			FT_UINT8, BASE_DEC, VALS(local_distributed_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_drms_scrambling_init,
++			{ "DMRS scrambling init", "nfapi.drms.scrambling.init",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The DMRS scrambling sequence initialization", HFILL }
++		},
++		{ &hf_nfapi_pusch_repetition_levels,
++			{ "PUSCH repetition levels", "nfapi.pusch.repetition.levels",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid for DCI formats: 6-0A, 6-0B", HFILL }
++		},
++		{ &hf_nfapi_frequency_hopping_flag,
++			{ "Frequency hopping flag", "nfapi.frequency.hopping.flag",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if hopping is being used.", HFILL }
++		},
++		{ &hf_nfapi_csi_request,
++			{ "CSI request", "nfapi.csi.request",
++			FT_UINT8, BASE_DEC, VALS(csi_request_vals), 0x0,
++			"Aperiodic CSI request flag", HFILL }
++		},
++		{ &hf_nfapi_dai_presence_flag,
++			{ "DAI presence flag", "nfapi.dia.presence.flag",
++			FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
++			"Indicates if DL assignment index field is present in the DCI", HFILL }
++		},
++		{ &hf_nfapi_total_dci_length_include_padding,
++			{ "Total DCI length including padding", "nfapi.total.dci.length.including.padding",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The total DCI length including padding bits", HFILL }
++		},
++		{ &hf_nfapi_csi_rs_antenna_port_count_r10,
++			{ "CSI-RS antenna port count r10", "nfapi.csi.rs.antenna.port.count.r10",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates number of antennas used for transmission of CSI reference signal.", HFILL }
++		},
++		{ &hf_nfapi_ul_config_pdu_type,
++			{ "UL Config PDU Type", "nfapi.ul.config.pdu.type",
++			FT_UINT8, BASE_DEC, VALS(nfapi_ul_config_pdu_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_rach_prach_frequency_resources,
++			{ "RACH PRACH Frequency resources", "nfapi.rach.prach.frequency.resources",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"If semi-static information is held in the MAC", HFILL }
++		},
++		{ &hf_nfapi_srs_present,
++			{ "SRS present", "nfapi.srs.present",
++			FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x0,
++			"If semi-static information is held in the MAC", HFILL }
++		},
++		{ &hf_nfapi_handle,
++			{ "Handle", "nfapi.handle",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"An opaque handle", HFILL }
++		},
++		{ &hf_nfapi_pucch_index,
++			{ "PUCCH Index", "nfapi.pucch.index",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PUCCH index value", HFILL }
++		},
++		{ &hf_nfapi_size,
++			{ "Size", "nfapi.size",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The size of the ULSCH PDU in bytes as defined by the relevant UL grant", HFILL }
++		},
++		{ &hf_nfapi_resource_block_start,
++			{ "Resource block start", "nfapi.resource.block.start",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The starting resource block for this ULSCH allocation", HFILL }
++		},
++		{ &hf_nfapi_number_of_resource_blocks,
++			{ "Number of resource blocks", "nfapi.resource.blocks",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of resource blocks allocated to this ULSCH grant", HFILL }
++		},
++		{ &hf_nfapi_cyclic_shift_2_for_drms,
++			{ "Cyclic Shift 2 for DRMS", "nfapi.cyclic.shift.2.for.drms",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The 2nd cyclic shift for DMRS assigned to the UE in the ULSCH grant", HFILL }
++		},
++		{ &hf_nfapi_frequency_hopping_enabled_flag,
++			{ "Frequency hopping enabled flag", "nfapi.frequency.hopping.enabled.flag",
++			FT_UINT8, BASE_DEC, VALS(hopping_vals), 0x0,
++			"Indicates if hopping is being used", HFILL }
++		},
++		{ &hf_nfapi_frequency_hopping_bits,
++			{ "Frequency hopping bits", "nfapi.frequency.hopping.bits",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_new_data_indication,
++			{ "New Data inidication", "nfapi.new.data.indication",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Specify whether this received transport block is a new transmission from UE", HFILL }
++		},
++		{ &hf_nfapi_harq_process_number,
++			{ "HARQ Process number", "nfapi.harq.process.number",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_ul_tx_mode,
++			{ "UL Tx Mode", "nfapi.ul.tx.mode",
++			FT_UINT8, BASE_DEC, VALS(ul_tx_mode_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_current_tx_nb,
++			{ "Current Tx nb", "nfapi.current.tx.nb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The current HARQ transmission count of this transport block. Valid if frequency hopping enabled.", HFILL }
++		},
++		{ &hf_nfapi_n_srs,
++			{ "N SRS", "nfapi.n.srs",
++			FT_UINT8, BASE_DEC, VALS(n_srs_vals), 0x0,
++			"Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
++		},
++		{ &hf_nfapi_disable_sequence_hopping_flag,
++			{ "Disable seqeunce hopping flag", "nfapi.disable.sequence.hopping.flag",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if any configured group hopping should be disabled for this UE.", HFILL }
++		},
++		{ &hf_nfapi_virtual_cell_id_enabled_flag,
++			{ "Virtual cell ID enabled flag", "nfapi.virtual.cell.id.enabled.flag",
++			FT_UINT8, BASE_DEC, VALS(not_used_enabled_vals), 0x0,
++			"Indicates if virtual cell is being used and nPUSCH identity is valid.", HFILL }
++		},
++		{ &hf_nfapi_npusch_identity,
++			{ "nPUSCH Identity", "nfapi.npusch.identity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Virtual cell ID for initialization of group hopping, sequence hopping and sequence shift pattern of PUSCH DMRS.", HFILL }
++		},
++		{ &hf_nfapi_ndrms_csh_identity,
++			{ "nDMRS-CSH Identity", "nfapi.ndrms.csh.identity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Virtual cell ID for initialization of cyclic shift hopping of PUSCH DMRS.", HFILL }
++		},
++		{ &hf_nfapi_total_number_of_repetitions,
++			{ "Total Number of repetitions", "nfapi.total.number.of.repetitions",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_repetition_number,
++			{ "Repetition Number", "nfapi.repetition.number",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Current transmission number", HFILL }
++		},
++		{ &hf_nfapi_initial_sf_io,
++			{ "Initial transmission SF (io)", "nfapi.initial.sf.io",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Absolute Sub-Frame  of the initial transmission", HFILL }
++		},
++		{ &hf_nfapi_empty_symbols_due_to_retunning,
++			{ "Empy symbols due to re-tunning", "nfapi.empty.symbols.due.to.retunning",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_ri_pmi_size_2,
++			{ "DL CQI/PMI/RI size 2", "nfapi.dl.cqi.ri.pmi.size.2",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI/RI in bits. If the CQI/PMI/RI size exceeds 255 (8-bits) then the Release 9 size value = 0, and this field is used instead.", HFILL }
++		},
++		{ &hf_nfapi_harq_size_2,
++			{ "HARQ Size 2", "nfapi.harq.size2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the ACK/NACK in bits.", HFILL }
++		},
++		{ &hf_nfapi_delta_offset_harq_2,
++			{ "Delta Offset HARQ 2", "nfapi.delta.offset.harq.2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Delta offset 2 for HARQ. This value is fixed for a UE, allocated in RRC connection setup and used for ACK_NACK mode = 4 or 5", HFILL }
++		},
++		{ &hf_nfapi_starting_prb,
++			{ "Starting PRB", "nfapi.starting.prb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The starting PRB for the PUCCH", HFILL }
++		},
++		{ &hf_nfapi_antenna_port,
++			{ "Antenna Port", "nfapi.antenna.port",
++			FT_UINT8, BASE_DEC, VALS(antenna_ports_vals), 0x0,
++			"Defines the number of antenna ports used by the UE for the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_number_of_combs,
++			{ "Number of Combs", "nfapi.num.of.combs",
++			FT_UINT8, BASE_DEC, VALS(combs_vals), 0x0,
++			"Defines the maximum number of transmission combs (TC).", HFILL }
++		},
++		{ &hf_nfapi_npucch_identity,
++			{ "nPUCCH Identity", "nfapi.npucch.identity",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Virtual cell ID for initialization of base sequence and cyclic shift hopping of PUCCH.", HFILL }
++		},
++		{ &hf_nfapi_empty_symbols,
++			{ "Empty symbols", "nfapi.empty.symbols",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates the symbols that are left empty due to eMTC retuning.", HFILL }
++		},
++		{ &hf_nfapi_csi_mode,
++			{ "CSI_mode", "nfapi.csi.mode",
++			FT_UINT8, BASE_DEC, VALS(csi_mode_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_pmi_size_2,
++			{ "DL CQI/PMI Size 2", "nfapi.dl.cqi.pmi.size.2",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI in bits", HFILL }
++		},
++		{ &hf_nfapi_statring_prb,
++			{ "Starting PRB", "nfapi.starting.prb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The starting PRB for the PUCCH", HFILL }
++		},
++		{ &hf_nfapi_cdm_index,
++			{ "cdm_Index", "nfapi.cdm.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Selected CDM option", HFILL }
++		},
++		{ &hf_nfapi_nsrs,
++			{ "N srs", "nfapi.n.srs",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if the resource blocks allocated for this grant overlap with the SRS configuration.", HFILL }
++		},
++		{ &hf_nfapi_num_ant_ports,
++			{ "Num_ant_ports", "nfapi.num.ant.port",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of antenna ports used by the UE transmit", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_2_0,
++			{ "n_PUCCH_2_0", "nfapi.n.pucch.2.0",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PUCCH Index value for ACK/NACK HARQ resource 4 on antenna port", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_2_1,
++			{ "n_PUCCH_2_1", "nfapi.n.pucch.2.1",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"HARQ resource 5", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_2_2,
++			{ "n_PUCCH_2_2", "nfapi.n.pucch.2.2",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"HARQ resource 6", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_2_3,
++			{ "n_PUCCH_2_3", "nfapi.n.pucch.2.3",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"HARQ resource 7", HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_pmi_size_rank_1,
++			{ "DL CQI PMI size rank 1", "nfapi.dl.cqi.pmi.size.rank.1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI in bits in case of rank 1 report.", HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_pmi_size_rank_greater_1,
++			{ "DL CQI PMI size rank greater 1", "nfapi.dl.cqi.pmi.size.rank.1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI in bits in case of rank>1 report.", HFILL }
++		},
++		{ &hf_nfapi_ri_size,
++			{ "RI size", "nfapi.ri.size",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of RI in bits", HFILL }
++		},
++		{ &hf_nfapi_delta_offset_cqi,
++			{ "Delta offset cqi", "nfapi.delta.offset.cqi",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Delta offset for CQI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_delta_offset_ri,
++			{ "Delta offset ri", "nfapi.delta.offset.ri",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Delta offset for RI. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_harq_size,
++			{ "HARQ size", "nfapi.harq_size",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the ACK/NACK in bits", HFILL }
++		},
++		{ &hf_nfapi_delta_offset_harq,
++			{ "Delta offset HARQ", "nfapi.delta.offset.harq",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Delta offset for HARQ. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_tdd_ack_nack_mode,
++			{ "ACK NACK mode", "nfapi.tdd.ack.nack.mode",
++			FT_UINT8, BASE_DEC, VALS(nfapi_tdd_ack_nack_mode_vals), 0x0,
++			"The format of the ACK/NACK response expected. For TDD only.", HFILL }
++		},
++		{ &hf_nfapi_fdd_ack_nack_mode,
++			{ "ACK NACK mode", "nfapi.fdd.ack.nack.mode",
++			FT_UINT8, BASE_DEC, VALS(nfapi_fdd_ack_nack_mode_vals), 0x0,
++			"The format of the ACK/NACK response expected. For TDD only.", HFILL }
++		},
++		{ &hf_nfapi_n_srs_initial,
++			{ "N srs initial", "nfapi.n.srs.initial",
++			FT_UINT8, BASE_DEC, VALS(n_srs_initial_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_initial_number_of_resource_blocks,
++			{ "Initial number of resource blocks", "nfapi.initial.number.of.resource.blocks",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of resource blocks used in the initial transmission of this transport block.", HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_pmi_size,
++			{ "DL cqi pmi size", "nfapi.dl.cqi.pmi.size",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI in bits in case of this RI value. The size of the DL CQI / PMI / RI in bits in case of this CRI value", HFILL }
++		},
++		{ &hf_nfapi_report_type,
++			{ "Report type", "nfapi.report.type",
++			FT_BOOLEAN, 8, TFS(&nfapi_csi_report_type_strname), 0x0,
++			"Type of CSI report", HFILL }
++		},
++		{ &hf_nfapi_dl_cqi_ri_pmi_size,
++			{ "DL CQI/PMI/RI size", "nfapi.dl.cqi.ri.pmi.size",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The size of the DL CQI/PMI/RI/CRI in bits", HFILL }
++		},
++		{ &hf_nfapi_control_type,
++			{ "Control type", "nfapi.control.type",
++			FT_BOOLEAN, 8, TFS(&nfapi_control_type_string_name), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_number_of_cc,
++			{ "Number of cc", "nfapi.number.of.cc",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of CC in the aperiodic report", HFILL }
++		},
++		{ &hf_nfapi_number_of_pucch_resource,
++			{ "Number of PUCCH Resource", "nfapi.number.of.pucch.resource",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"A value of 2 indicates that the UE is configured to transmit on two antenna ports", HFILL }
++		},
++		{ &hf_nfapi_pucch_index_p1,
++			{ "PUCCH Index P1", "nfapi.pucch.index.p1",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PUCCH index value   for antenna port P1", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_1_0,
++			{ "N PUCCH 1 0", "nfapi.n.pucch.1.0",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ resource 0", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_1_1,
++			{ "N PUCCH 1 1", "nfapi.n.pucch.1.1",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ resource 1", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_1_2,
++			{ "N PUCCH 1 2", "nfapi.n.pucch.1.2",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ resource 2", HFILL }
++		},
++		{ &hf_nfapi_n_pucch_1_3,
++			{ "N PUCCH 1 3", "nfapi.n.pucch.1.3",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"HARQ resource 3", HFILL }
++		},
++		{ &hf_nfapi_srs_bandwidth,
++			{ "SRS Bandwidth", "nfapi.srs.bandwidth",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"SRS Bandwidth. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_frequency_domain_position,
++			{ "Frequency Domain position", "nfapi.frequency.domain.position",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Frequency-domain position, NRRC This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_srs_hopping_bandwidth,
++			{ "SRS hopping bandwidth", "nfapi.srs.hopping.bandwidth",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Configures the frequency hopping on the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_transmission_comb,
++			{ "Transmission comb", "nfapi.transmission.comb",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Configures the frequency location of the SRS. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_i_srs,
++			{ "I SRS", "nfapi.i.srs",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Defines the periodicity and subframe location of the SRS. SRS Configuration Index. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_sounding_reference_cyclic_shift,
++			{ "Sounding reference cyclic shift", "nfapi.sounding.reference.cyclic.shift",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Configures the SRS sequence generation. This value is fixed for a UE and allocated in RRC connection setup.", HFILL }
++		},
++		{ &hf_nfapi_pdu_length,
++			{ "PDU length", "nfapi.pdu.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The total length (in bytes) of the PDU description and PDU data, without the padding bytes", HFILL }
++		},
++		{ &hf_nfapi_crc_flag,
++			{ "CRC flag", "nfapi.crc.flag",
++			FT_BOOLEAN, 8, TFS(&crc_flag_strname), 0x0,
++			"A flag indicating if a CRC error was detected", HFILL }
++		},
++		{ &hf_nfapi_number_of_hi_pdus,
++			{ "Number of HI Pdu's", "nfapi.number_of_hi_pdus",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of HI PDUs included in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_dci_pdus,
++			{ "Number of DCI Pdu's", "nfapi.number_of_dci_pdus",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of DCI PDUs included in this message", HFILL }
++		},
++		{ &hf_nfapi_hi_dci0_pdu_type,
++			{ "PDU Type", "nfapi.pdu_type",
++			FT_UINT8, BASE_DEC, VALS(hi_dci0_pdu_type_vals), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_hi_value,
++			{ "HI Value", "nfapi.hi_value",
++			FT_BOOLEAN, 8, TFS(&hi_value_strname), 0x0,
++			"The PHICH value which is sent on the resource", HFILL }
++		},
++		{ &hf_nfapi_i_phich,
++			{ "i phich", "nfapi.i_phich",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Is used in the calculation of the PHICH location. For TDD only", HFILL }
++		},
++		{ &hf_nfapi_flag_tb2,
++			{ "Flag TB2", "nfapi.flag_tb2",
++			FT_BOOLEAN, BASE_NONE, TFS(&flag_tb2_strname), 0x0,
++			"Indicates is HI is present for a second transport block", HFILL }
++		},
++		{ &hf_nfapi_hi_value_2,
++			{ "HI Value 2", "nfapi.hi_value_2",
++			FT_BOOLEAN, BASE_NONE, TFS(&hi_value_strname), 0x0,
++			"The PHICH value for a second transport block.", HFILL }
++		},
++		{ &hf_nfapi_ue_tx_antenna_selection,
++			{ "UE Tx Antenna selection", "nfapi.ue_tx_antenna_selection",
++			FT_UINT8, BASE_DEC, VALS(ue_tx_antenna_selection_vals), 0x0,
++			"Indicates how the CRC is calculated on the PDCCH.", HFILL }
++		},
++		{ &hf_nfapi_cqi_csi_request,
++			{ "cqi csi request", "nfapi.cqi_csi_request",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Aperiodic CQI request flag", HFILL }
++		},
++		{ &hf_nfapi_ul_index,
++			{ "UL index", "nfapi.ul_index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid for TDD mode only", HFILL }
++		},
++		{ &hf_nfapi_dl_assignment_index,
++			{ "DL Assignment index", "nfapi.dl_assignment_index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Valid for TDD mode only.", HFILL }
++		},
++		{ &hf_nfapi_tpc_bitmap,
++			{ "TPC bitmap", "nfapi.tpc_bitmap",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"TPC commands for PUCCH and PUSCH", HFILL }
++		},
++		{ &hf_nfapi_number_of_antenna_ports,
++			{ "Number of antenna ports", "nfapi.number.of.antenna.ports",
++			FT_UINT8, BASE_DEC, VALS(number_of_antenna_port_vals), 0x0,
++			"Defines number of antenna ports for this ULSCH allocation", HFILL }
++		},
++		{ &hf_nfapi_size_of_cqi_csi_feild,
++			{ "Size of cqi csi feild", "nfapi.size.of.cqi.csi.feild",
++			FT_UINT8, BASE_DEC, VALS(size_of_cqi_csi_feild_vals), 0x0,
++			"Indicates the size of the CQI/CSI request field", HFILL }
++		},
++		{ &hf_nfapi_new_data_indication_two,
++			{ "New data indication 2", "nfapi.new.data.indication.two",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The new data indicator for the second transport block", HFILL }
++		},
++		{ &hf_nfapi_resource_allocation_flag,
++			{ "Resource allocation flag", "nfapi.resource.allocation.flag",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Indicates if the Resource Allocation Type parameter is valid.", HFILL }
++		},
++		{ &hf_nfapi_dl_node_sync_t1,
++			{ "DL Node Sync t1", "nfapi.dl.node.sync.t1",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"Offset from VNF SFN/SF 0/0 time reference of the DL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
++		},
++		{ &hf_nfapi_dl_node_sync_delta_sfn_sf,
++			{ "DL Node Sync Delta SFN SF", "nfapi.dl.node.sync.delta_sfn_sf",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The delta shift in subframes that the PNF PHY instance must update to on the next subframe boundary", HFILL }
++		},
++		{ &hf_nfapi_dl_cyclic_prefix_type,
++			{ "DL Cyclic Prefix type", "nfapi.dl.cyclic.prefix.type",
++			FT_BOOLEAN, 8, TFS(&cyclic_prefix_type_strname), 0x0,
++			"Cyclic prefix type, used for DL", HFILL }
++		},
++		{ &hf_nfapi_ul_cyclic_prefix_type,
++			{ "UL Cyclic Prefix type", "nfapi.ul.cyclic.prefix.type",
++			FT_BOOLEAN, 8, TFS(&cyclic_prefix_type_strname), 0x0,
++			"Cyclic prefix type, used for UL", HFILL }
++		},
++		{ &hf_nfapi_downlink_channel_bandwidth,
++			{ "Downlink Channel Bandwidth", "nfapi.dl.channel.bandwidth",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Downlink channel bandwidth in resource blocks.", HFILL }
++		},
++		{ &hf_nfapi_uplink_channel_bandwidth,
++			{ "Uplink Channel Bandwidth", "nfapi.ul.channel_bandwidth",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Uplink channel bandwidth in resource blocks.", HFILL }
++		},
++		{ &hf_nfapi_tx_antenna_ports,
++			{ "Tx Antenna Ports", "nfapi.tx.antenna.ports",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of cell specific or NB transmit antenna ports.", HFILL }
++		},
++		{ &hf_nfapi_rx_antenna_ports,
++			{ "Tx Antenna Ports", "nfapi.rx.antenna.ports",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of cell specific or NB receive antenna ports.", HFILL }
++		},
++		{ &hf_nfapi_ul_node_sync_t1,
++			{ "UL Node Sync t1", "nfapi.ul.node.sync.t1",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The supplied t1 field in the DL Node Sync", HFILL }
++		},
++		{ &hf_nfapi_ul_node_sync_t2,
++			{ "UL Node Sync t2", "nfapi.ul.node.sync.t2",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"Offset from PNF SFN/SF 0/0 time reference of the DL Node Sync message reception at the transport layer, in microseconds.", HFILL }
++		},
++		{ &hf_nfapi_ul_node_sync_t3,
++			{ "UL Node Sync t3", "nfapi.ul.node.sync.t3",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"Offset from PNF SFN/SF 0/0 time reference of the UL Node Sync message transmission at the transport layer, in microseconds.", HFILL }
++		},
++		{ &hf_nfapi_pb,
++			{ "P-B", "nfapi.pb.allocation",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Refers to downlink power allocation. Value is an index into the referenced table.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_last_sfn_sf,
++			{ "Last SFN/SF", "nfapi.timing.info.last.sfn.sf",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The completed SFN/SF at the PNF PHY instance that triggered the Timing Info message", HFILL }
++		},
++		{ &hf_nfapi_timing_info_time_since_last_timing_info,
++			{ "Time since last Timing Info", "nfapi.timing.info.time.since.last.timing.info",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The number of ms since the last Timing Info was sent from this PNF PHY instance.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_dl_config_jitter,
++			{ "DL Config Jitter", "nfapi.timing.info.dl.config.jitter",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The inter message jitter of the DL Config message reception in microseconds", HFILL }
++		},
++		{ &hf_nfapi_timing_info_tx_request_jitter,
++			{ "Tx Request Jitter", "nfapi.timing.info.tx.req.jitter",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The inter message jitter of the Tx Request message reception in microseconds", HFILL }
++		},
++		{ &hf_nfapi_timing_info_ul_config_jitter,
++			{ "UL Config Jitter", "nfapi.timing.info.ul.config.jitter",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The inter message jitter of the UL Config message reception in microseconds", HFILL }
++		},
++		{ &hf_nfapi_timing_info_hi_dci0_jitter,
++			{ "HI_DCI0 Jitter", "nfapi.timing.info.hi.dci0.jitter",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The inter message jitter of the HI_DCI0 message reception in microseconds", HFILL }
++		},
++		{ &hf_nfapi_timing_info_dl_config_latest_delay,
++			{ "DL Config Latest Delay", "nfapi.timing.info.dl.config.latest.delay",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The latest delay offset in microseconds from the latest acceptable time for the DL Config as defined in the DL Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_tx_request_latest_delay,
++			{ "Tx Request Latest Delay", "nfapi.timing.info.tx.request.latest.delay",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The latest delay offset in microseconds from the latest acceptable time for the Tx Request as defined in the Tx Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_ul_config_latest_delay,
++			{ "UL Config Latest Delay", "nfapi.timing.info.ul.config.latest.delay",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The latest delay offset in microseconds from the latest acceptable time for the UL Config as defined in the UL Config Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_hi_dci0_latest_delay,
++			{ "HI_DCI0 Latest Delay", "nfapi.timing.info.hi.dci0.latest.delay",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The latest delay offset in microseconds from the latest acceptable time for the HI_DCI0 as defined in the HI_DCI0 Timing in the PNF_PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_dl_config_earliest_arrival,
++			{ "DL Config Earliest Arrival", "nfapi.timing.info.dl.config.earliest.arrival",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The earlierst arrival offset in microseconds from the latest time acceptable for the DL Config as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_tx_request_earliest_arrival,
++			{ "Tx Request Earliest Arrival", "nfapi.timing.info.tx.request.earliest.arrival",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The earlierst arrival offset in microseconds from the latest time acceptable for the Tx Request as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_ul_config_earliest_arrival,
++			{ "UL Config Earliest Arrival", "nfapi.timing.info.ul.config.earliest.arrival",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The earlierst arrival offset in microseconds from the latest time acceptable for the UL Config as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_hi_dci0_earliest_arrival,
++			{ "HI_DCI0 Earliest Arrival", "nfapi.timing.info.hi.dci0.earliest.arrival",
++			FT_INT32, BASE_DEC, NULL, 0x0,
++			"The earlierst arrival offset in microseconds from the latest time acceptable for the HI_DCI0 as defined in the Timing Window in the PARAM.Response since the last transmission of the Timing Info Message.", HFILL }
++		},
++		{ &hf_nfapi_pcfich_power_offset,
++			{ "PCFICH Power Offset", "nfapi.pcfich.power.offset",
++			FT_UINT16, BASE_CUSTOM, CF_FUNC(power_offset_conversion_fn), 0x0,
++			"The power per antenna of the PCFICH with respect to the reference signal.", HFILL }
++		},
++		{ &hf_nfapi_timing_window,
++			{ "NFAPI Timing window", "nfapi.timing.window",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The window in milliseconds that the PHY must receive and queue the P7 messages.", HFILL }
++		},
++		{ &hf_nfapi_timing_info_mode,
++			{ "Timing Info mode", "nfapi.timing.info.mode",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The configured mode of operation for the timing info message to be sent to the VNF from the PHY", HFILL }
++		},
++		{ &hf_nfapi_timing_info_period,
++			{ "Timing info period", "nfapi.timing.info.period",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"If Periodic timing mode is enabled, this defines the periodicity in subframes. This field is ignored if periodic timing mode is disabled.", HFILL }
++		},
++		{ &hf_nfapi_tdd_harq_mode,
++			{ "Mode", "nfapi.tdd.harq.mode",
++			FT_UINT8, BASE_DEC, VALS(tdd_harq_mode_vals), 0x0,
++			"The format of the ACK/NACK response expected", HFILL }
++		},
++		{ &hf_nfapi_fdd_harq_mode,
++			{ "Mode", "nfapi.fdd.harq.mode",
++			FT_UINT8, BASE_DEC, VALS(fdd_harq_mode_vals), 0x0,
++			"The format of the ACK/NACK response expected", HFILL }
++		},
++		{ &hf_nfapi_number_of_ack_nack,
++			{ "Number of ACK/NACK", "nfapi.uint16.tag",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of ACK/NACK results reported for this UE", HFILL }
++		},
++		{ &hf_nfapi_harq_data_value_0,
++			{ "Value 0", "nfapi.harq.value.0",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"Indicates HARQ results", HFILL }
++		},
++		{ &hf_nfapi_harq_data_value_0_special,
++			{ "Value 0", "nfapi.harq.value.0.special",
++			FT_UINT8, BASE_DEC, VALS(harq_special_value_vals), 0x0,
++			"Indicates HARQ results", HFILL }
++		},
++		{ &hf_nfapi_harq_data_value_1,
++			{ "Value 1", "nfapi.harq.value.1",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"Indicates HARQ results", HFILL }
++		},
++		{ &hf_nfapi_harq_data_value_2,
++			{ "Value 2", "nfapi.harq.value.2",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"Indicates HARQ results", HFILL }
++		},
++		{ &hf_nfapi_harq_data_value_3,
++			{ "Value 3", "nfapi.harq.value.3",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"Indicates HARQ results", HFILL }
++		},
++		{ &hf_nfapi_harq_tb_1,
++			{ "HARQ TB1", "nfapi.harq.tb.",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"HARQ feedback of 1st TB.", HFILL }
++		},
++		{ &hf_nfapi_harq_tb_2,
++			{ "HARQ TB2", "nfapi.harq.tb.2",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"HARQ feedback of 2nd TB.", HFILL }
++		},
++		{ &hf_nfapi_harq_tb_n,
++			{ "HARQ TB_N", "nfapi.harq.tb.n",
++			FT_UINT8, BASE_DEC, VALS(harq_value_vals), 0x0,
++			"HARQ feedback of Nth TB.", HFILL }
++		},
++		{ &hf_nfapi_ul_cqi,
++			{ "UL_CQI", "nfapi.ul.cqi",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
++			"SNR", HFILL }
++		},
++		{ &hf_nfapi_channel,
++			{ "Channel", "nfapi.channel",
++			FT_UINT8, BASE_DEC, VALS(channel_vals), 0x0,
++			"The channel to which this measurement refers", HFILL }
++		},
++		{ &hf_nfapi_data_offset,
++			{ "Data Offset", "nfapi.data.offset",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Gives the PDU#i data address offset from the beginning of the 'Number of PDUs' field. An offset of 0 indicates a CRC or decoding error", HFILL }
++		},
++		{ &hf_nfapi_ri,
++			{ "RI", "nfapi.ri",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The rank indication reported by the UE on PUSCH for aperiodic CSI.", HFILL }
++		},
++		{ &hf_nfapi_timing_advance,
++			{ "Timing Advance", "nfapi.timing.advance",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The timing advance measured for this PDU and UE.", HFILL }
++		},
++		{ &hf_nfapi_timing_advance_r9,
++			{ "Timing Advance R9", "nfapi.timing.advance.r9",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Timing advance used for positioning", HFILL }
++		},
++		{ &hf_nfapi_number_of_cc_reported,
++			{ "Number of CC reported", "nfapi.number.of.cc.reported",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_preamble,
++			{ "Preamble", "nfapi.preamble",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The detected preamble", HFILL }
++		},
++		{ &hf_nfapi_rach_resource_type,
++			{ "RACH resource type", "nfapi.rach.resource.type",
++			FT_UINT8, BASE_DEC, VALS(rach_resource_type_vals), 0x0,
++			"Indicates if this indication is related to Cat-M UE and in which CE level", HFILL }
++		},
++		{ &hf_nfapi_doppler_estimation,
++			{ "Doppler estimation", "nfapi.doppler.estimation",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"FFS", HFILL }
++		},
++		{ &hf_nfapi_rb_start,
++			{ "RB Start", "nfapi.rb.start",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The starting point of the RBs to be reported", HFILL }
++		},
++		{ &hf_nfapi_snr,
++			{ "SNR", "nfapi.snr",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(ul_cqi_conversion_fn), 0x0,
++			"Field size dependent on configured bandwidth SNR for RBs, each RBs report one SNR.", HFILL }
++		},
++		{ &hf_nfapi_up_pts_symbol,
++			{ "UpPTS Symbol", "nfapi.uppts.symbol",
++			FT_UINT8, BASE_DEC, VALS(up_pts_symbol_vals), 0x0,
++			"Indicates symbol where SRS was received. Only valid if the SRS was received in subframe 1 or 6.", HFILL }
++		},
++		{ &hf_nfapi_number_prb_per_subband,
++			{ "numPRBperSubband", "nfapi.num.prb.per.subband",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of PRBs that are treated as one subband", HFILL }
++		},
++		{ &hf_nfapi_number_antennas,
++			{ "numAntennas", "nfapi.num.antennas",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Number of physical antennas", HFILL }
++		},
++		{ &hf_nfapi_subband_index,
++			{ "subbandIndex", "nfapi.subband.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"Index of subband for which the following channel coefficient is applied", HFILL }
++		},
++		{ &hf_nfapi_channel_coefficient,
++			{ "Channel", "nfapi.channel.coefficient",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Averaged channel coefficient in a subband for physical antenna #i, real 8 bits followed by imaginary 8 bits", HFILL }
++		},
++		{ &hf_nfapi_ul_rtoa,
++			{ "UL_RTOA", "nfapi.ul.rtoa",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"UL relative time of arrival used for network based positioning", HFILL }
++		},
++		{ &hf_nfapi_frequency_band_indicator,
++			{ "Frequency Band Indicator", "nfapi.frequency.band.indicator",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The E-UTRA band for which the carrierList applies.", HFILL }
++		},
++		{ &hf_nfapi_measurement_period,
++			{ "Measurement Period", "nfapi.measurement.period",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The length of time to measure RSSI over, in units of 1ms.", HFILL }
++		},
++		{ &hf_nfapi_bandwidth,
++			{ "Bandwidth", "nfapi.bandwidth",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The bandwidth (in resource blocks) over which the RSSI is measured.", HFILL }
++		},
++		{ &hf_nfapi_timeout,
++			{ "Timeout", "nfapi.timeout",
++			FT_UINT32, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The timeout value after which the PNF should abort the procedure in units of 1ms. The value of 0 indicates that the PNF should attempt to complete the procedure without any VNF-imposed timeout.", HFILL }
++		},
++		{ &hf_nfapi_number_of_earfcns,
++			{ "Number of EARFCNs", "nfapi.number.of.earfcns",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of EARFCNs which should be measured. In the case that no EARFCN (value 0) is specified, all valid EARFCNs for the specified bandwidth in the band shall be measured, in order of ascending EARCFN.", HFILL }
++		},
++		{ &hf_nfapi_uarfcn,
++			{ "UARFCN", "nfapi.uarfcn",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"UARFCN to be measured.", HFILL }
++		},
++		{ &hf_nfapi_number_of_uarfcns,
++			{ "Number of UARFCNs", "nfapi.number.of.uarfcn",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of UARFCNs which should be measured. In the case that no UARFCN (value 0) is specified, all UARFCNs in the band shall be measured, in order of ascending UARCFN.", HFILL }
++		},
++		{ &hf_nfapi_arfcn,
++			{ "ARFCN", "nfapi.arfcn",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The ARFCN to be measured", HFILL }
++		},
++		{ &hf_nfapi_arfcn_direction,
++			{ "Direction", "nfapi.arfcn.direction",
++			FT_UINT8, BASE_DEC, VALS(arfcn_direction_vals), 0x0,
++			"The link direction to be measured", HFILL }
++		},
++		{ &hf_nfapi_number_of_arfcns,
++			{ "Number of ARFCNs", "nfapi.number.of.arfcn",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of ARFCNs which should be measured. In the case that no ARFCN (value 0) is specified, all ARFCNs in the band shall be measured, in order of ascending ARCFN.", HFILL }
++		},
++		{ &hf_nfapi_rssi,
++			{ "RSSI", "nfapi.rssi",
++			FT_INT16, BASE_CUSTOM, CF_FUNC(rssi_conversion_fn), 0x0,
++			"The list of RSSI values of the carriers measured, in the order of the list of the original request.", HFILL }
++		},
++		{ &hf_nfapi_number_of_rssi,
++			{ "Number of RSSI", "nfapi.number.of.rssi",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of RSSI results returned in the following array.", HFILL }
++		},
++		{ &hf_nfapi_pci,
++			{ "PCI", "nfapi.pci",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PCI for cell which should be searched", HFILL }
++		},
++		{ &hf_nfapi_measurement_bandwidth,
++			{ "Measurement Bandwidth", "nfapi.measurement.bandwidth",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of resource blocks which should be used for measuring RSRP", HFILL }
++		},
++		{ &hf_nfapi_exhaustive_search,
++			{ "Exhaustive Search", "nfapi.exhaustive.search",
++			FT_UINT8, BASE_DEC, VALS(exhustive_search_vals), 0x0,
++			"NMM should try to find all cells on the carrier", HFILL }
++		},
++		{ &hf_nfapi_number_of_pci,
++			{ "Number of PCI", "nfapi.number.of.pci",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of cells in the PCI list. If 0 all cells on the carrier should be found. Otherwise, depending on exhaustiveSearch flag, only the given pciList is searched or the pciList is used for indicating a priority list. Range: 0 to MAX_PCI_LIST.", HFILL }
++		},
++		{ &hf_nfapi_psc,
++			{ "PSC", "nfapi.psc",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The PSC for cells which should be searched.", HFILL }
++		},
++		{ &hf_nfapi_number_of_psc,
++			{ "Number of PSC", "nfapi.number.of.psc",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of cells in the PSC list. If 0 all cells on the carrier should be found. Otherwise, depending on Exhaustive Search flag, only the given PSC list is searched or the PSC list is used for indicating a priority list. Range: 0 to MAX_PSC_LIST.", HFILL }
++		},
++		{ &hf_nfapi_rsrp,
++			{ "RSRP", "nfapi.rsrp",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
++			"The measured RSRP value in units of -1dB", HFILL }
++		},
++		{ &hf_nfapi_rsrq,
++			{ "RSRQ", "nfapi.rsrq",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
++			"The measured RSRQ value in units of -1dB", HFILL }
++		},
++		{ &hf_nfapi_number_of_lte_cells_found,
++			{ "Number of LTE Cells Found", "nfapi.number.of.lte.cells.found",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of LTE cells indicated in this message.", HFILL }
++		},
++		{ &hf_nfapi_rscp,
++			{ "RSCP", "nfapi.rscp",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
++			"The measured RSCP value in units of -1dB", HFILL }
++		},
++		{ &hf_nfapi_enco,
++			{ "EcNo", "nfapi.ecno",
++			FT_UINT8, BASE_CUSTOM, CF_FUNC(neg_pow_conversion_fn), 0x0,
++			"The measured RSCP value in units of -1dB", HFILL }
++		},
++		{ &hf_nfapi_number_of_utran_cells_found,
++			{ "Number of UTRAN Cells Found", "nfapi.number.of.utran.cells.found",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of LTE cells indicated in this message", HFILL }
++		},
++		{ &hf_nfapi_bsic,
++			{ "BSIC", "nfapi.bsic",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The BSIC of the cell which the NMM synchronized to", HFILL }
++		},
++		{ &hf_nfapi_rxlev,
++			{ "RxLev", "nfapi.rxlev",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The measured RxLev value", HFILL }
++		},
++		{ &hf_nfapi_rxqual,
++			{ "RxQual", "nfapi.rxqual",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The measured RxQual value", HFILL }
++		},
++		{ &hf_nfapi_sfn_offset,
++			{ "SFN Offset", "nfapi.sfn.offset",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"The offset in us of the start of the current GSM Radio HyperFrame (i.e. FN=0) from the start of the preceding LTE Radio Frame of the PNF for SFN=0", HFILL }
++		},
++		{ &hf_nfapi_number_of_geran_cells_found,
++			{ "Number of GSM Cells Found", "nfapi.number.of.geran.cells.found",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The number of GSM cells indicated in this message", HFILL }
++		},
++		{ &hf_nfapi_number_of_tx_antenna,
++			{ "Number of Tx Antenna", "nfapi.number.of.tx.antenna",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of Tx Antenna detected for the cell", HFILL }
++		},
++		{ &hf_nfapi_mib_length,
++			{ "MIB Length", "nfapi.mib.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Length in bytes of the following MIB array", HFILL }
++		},
++		{ &hf_nfapi_mib,
++			{ "MIB", "nfapi.mib",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"The MIB read from the specified cell.", HFILL }
++		},
++		{ &hf_nfapi_phich_configuration,
++			{ "PHICH Configuration", "nfapi.phich.configuration",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The PHICH-Config of the cell", HFILL }
++		},
++		{ &hf_nfapi_retry_count,
++			{ "retryCount", "nfapi.retry.count",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of SIB1 repetition periods for which decoding of SIB1 should be retried.", HFILL }
++		},
++		{ &hf_nfapi_sib1,
++			{ "SIB1", "nfapi.sib1",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_si_periodicity,
++			{ "SI Periodicity", "nfapi.si.periodicity",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The SI Periodicity of the requested SIBs, with the first element being for SIB2, the next for SIB3, etc, encoded as follows", HFILL }
++		},
++		{ &hf_nfapi_si_index,
++			{ "SI Index", "nfapi.si.index",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The index of this SIB in the SIB1 SchedulingInfoList:", HFILL }
++		},
++		{ &hf_nfapi_number_of_si_periodicity,
++			{ "Number of SI Periodicity", "nfapi.number.of.si.periodicity",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The number of System Information periodicity values in the following array", HFILL }
++		},
++		{ &hf_nfapi_si_window_length,
++			{ "SI Window Length", "nfapi.si.window.length",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The SI window in units of 1ms", HFILL }
++		},
++		{ &hf_nfapi_sib_type,
++			{ "SIB Type", "nfapi.sib.type",
++			FT_UINT8, BASE_DEC, NULL, 0x0,
++			"The SIB type", HFILL }
++		},
++		{ &hf_nfapi_sib_len,
++			{ "SIB Length", "nfapi.sib.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The length in bytes of the following SIB array", HFILL }
++		},
++		{ &hf_nfapi_sib,
++			{ "SIB", "nfapi.sib",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"The SIB element read from the specified cell.", HFILL }
++		},
++		{ &hf_nfapi_si_len,
++			{ "SI Length", "nfapi.si.length",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The length in bytes of the following SI array", HFILL }
++		},
++		{ &hf_nfapi_si,
++			{ "SI", "nfapi.si",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"The SI element read from the specified cell.", HFILL }
++		},
++		{ &hf_nfapi_pnf_search_state,
++			{ "State", "nfapi.state",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
++		},
++		{ &hf_nfapi_pnf_broadcast_state,
++			{ "State", "nfapi.state",
++			FT_BYTES, BASE_NONE, NULL, 0x0,
++			"A structure of opaque data optionally sent by the PNF to the VNF", HFILL }
++		},
++		{ &hf_nfapi_dl_rs_tx_power,
++			{ "DL RS Tx power", "nfapi.dl.rs.tx.power",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"The DL RS Tx power measurement", HFILL }
++		},
++		{ &hf_nfapi_received_interference_power,
++			{ "Received interference power", "nfapi.received.interference.power",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The Received interference power measurement", HFILL }
++		},
++		{ &hf_nfapi_thermal_noise_power,
++			{ "Thermal noise power", "nfapi.thermal.noise.power",
++			FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0,
++			"The Thermal noise power measurement", HFILL }
++		},
++		{ &hf_nfapi_dl_rs_tx_power_measurement,
++			{ "DL RS TX Power measurement", "nfapi.dl.rs.tx.power.measurement",
++			FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
++			"The DL RS Tx power measurement defined", HFILL }
++		},
++		{ &hf_nfapi_received_interference_power_measurement,
++			{ "Received interference power measurement", "nfapi.received.interference.power.measurement",
++			FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
++			NULL, HFILL }
++		},
++		{ &hf_nfapi_thermal_noise_power_measurement,
++			{ "Thermal noise power measurement", "nfapi.thermal.noise.power.measurement",
++			FT_INT16, BASE_CUSTOM, CF_FUNC(dl_rs_tx_pow_measment_conversion_fn), 0x0,
++			"The Thermal noise power measurement", HFILL }
++		},
++		{ &hf_nfapi_initial_partial_sf,
++			{ "Initial Partial SF", "nfapi.initial.partial.sf",
++			FT_BOOLEAN, 32, TFS(&initial_partial_sf_strname), 0x0,
++			"Indicates whether the initial SF in the LBT process is full or partial", HFILL }
++		},
++		{ &hf_nfapi_lbt_mode,
++			{ "LBT Mode", "nfapi.lbt.mode",
++			FT_BOOLEAN, 32, TFS(&lbt_mode_strname), 0x0,
++			"Part of multi-carrier support. Indicates whether full LBT process is carried or partial LBT process is carried (multi carrier mode B according to [9] section 15.1.5.2)", HFILL }
++		},
++		{ &hf_nfapi_lte_txop_sf,
++			{ "LTE TXOP SF", "nfapi.txop.sf",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"Indicates the LTE TXOP (TMCOT,P in [9] section 15.1.1) duration in subframes.", HFILL }
++		},
++		{ &hf_nfapi_mp_cca,
++			{ "mp cca", "nfapi.mp.cca",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"Indicates the value of the defer factor", HFILL }
++		},
++		{ &hf_nfapi_n_cca,
++			{ "n cca", "nfapi.n.cca",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"Indicates the value of LBT backoff counter", HFILL }
++		},
++		{ &hf_nfapi_offset,
++			{ "offset", "nfapi.offset",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"Indicates the LBT start time in microseconds from the beginning of the subframe scheduled by this message.", HFILL }
++		},
++		{ &hf_nfapi_result,
++			{ "result", "nfapi.result",
++			FT_BOOLEAN, 32, TFS(&tfs_fail_success), 0x0,
++			"Indicates the LBT procedure result of SFN/SF:", HFILL }
++		},
++		{ &hf_nfapi_sfn_sf_end,
++			{ "SFN/SF End", "nfapi.sfn.sf.end",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates the SFN/SF by which the DRS window (Discovery signal occasion as described in [9] section 6.11A) must end. In worst case, this would be the last TXOP subframe.", HFILL }
++		},
++		{ &hf_nfapi_txop_sfn_sf_end,
++			{ "TXOP SFN/SF End", "nfapi.txop.sfn.sf.end",
++			FT_UINT16, BASE_DEC, NULL, 0x0,
++			"Indicates the SFN/SF by which the TXOP must end. In worst case, this would be the last TXOP subframe.", HFILL }
++		},
++		{ &hf_nfapi_txop_symbols,
++			{ "LTE TXOP symbols", "nfapi.lte.txop.symbols",
++			FT_UINT32, BASE_DEC, NULL, 0x0,
++			"Actual LTE TXOP in symbols", HFILL }
++		},
++	};
++
++	/* Setup protocol subtree array */
++	static gint *ett[] =
++	{
++		&ett_nfapi_message_tree,
++		&ett_nfapi_p4_p5_message_header,
++		&ett_nfapi_p7_message_header,
++		&ett_nfapi_tlv_tree,
++		&ett_nfapi_tl,
++		&ett_nfapi_pnf_phy_rf_config,
++		&ett_nfapi_pnf_phy,
++		&ett_nfapi_pnf_phy_rel10,
++		&ett_nfapi_pnf_phy_rel11,
++		&ett_nfapi_pnf_phy_rel12,
++		&ett_nfapi_pnf_phy_rel13,
++		&ett_nfapi_rf_bands,
++		&ett_nfapi_bf_vectors,
++		&ett_nfapi_csi_rs_bf_vector,
++		&ett_nfapi_csi_rs_resource_configs,
++		&ett_nfapi_tx_antenna_ports,
++		&ett_nfapi_harq_ack_nack_data,
++		&ett_nfapi_harq_data,
++		&ett_nfapi_cqi_pmi_size,
++		&ett_nfapi_cc,
++		&ett_nfapi_rbs,
++		&ett_nfapi_antennas,
++		&ett_nfapi_epdcch_prbs,
++		&ett_nfapi_dl_config_request_pdu_list,
++		&ett_nfapi_ul_config_request_pdu_list,
++		&ett_nfapi_hi_dci0_request_pdu_list,
++		&ett_nfapi_tx_request_pdu_list,
++		&ett_nfapi_rx_indication_pdu_list,
++		&ett_nfapi_harq_indication_pdu_list,
++		&ett_nfapi_crc_indication_pdu_list,
++		&ett_nfapi_sr_indication_pdu_list,
++		&ett_nfapi_cqi_indication_pdu_list,
++		&ett_nfapi_preamble_indication_pdu_list,
++		&ett_nfapi_srs_indication_pdu_list,
++		&ett_nfapi_lbt_dl_config_pdu_list,
++		&ett_nfapi_lbt_dl_indication_pdu_list,
++		&ett_nfapi_subbands,
++		&ett_nfapi_precoding,
++		&ett_nfapi_bf_vector_antennas,
++		&ett_nfapi_received_interference_power_mesurement_results,
++		&ett_nfapi_downlink_bandwidth_support,
++		&ett_nfapi_uplink_bandwidth_support,
++		&ett_nfapi_release_support,
++		&ett_nfapi_downlink_modulation_support,
++		&ett_nfapi_uplink_modulation_support,
++
++		&ett_nfapi_earfcn_list,
++		&ett_nfapi_uarfcn_list,
++		&ett_nfapi_arfcn_list,
++		&ett_nfapi_rssi_list,
++		&ett_nfapi_pci_list,
++		&ett_nfapi_psc_list,
++		&ett_nfapi_lte_cells_found_list,
++		&ett_nfapi_utran_cells_found_list,
++		&ett_nfapi_geran_cells_found_list,
++		&ett_nfapi_si_periodicity_list,
++
++		/* for fragmentation support*/
++		&ett_msg_fragment,
++		&ett_msg_fragments
++	};
++
++	static ei_register_info ei[] =
++	{
++		{ &ei_invalid_range, { "nfapi.invalid.range", PI_PROTOCOL, PI_WARN, NULL, EXPFILL } },
++		{ &ei_invalid_tlv_length, { "nfapi.invalid.tlv.length", PI_PROTOCOL, PI_ERROR, NULL, EXPFILL } },
++	};
++
++	expert_module_t* expert_nfapi;
++	/* Register protocol */
++	proto_nfapi = proto_register_protocol("Nfapi", "NFAPI", "nfapi");
++
++	expert_nfapi = expert_register_protocol(proto_nfapi);
++	expert_register_field_array(expert_nfapi, ei, array_length(ei));
++
++
++	proto_register_field_array(proto_nfapi, hf, array_length(hf));
++	proto_register_subtree_array(ett, array_length(ett));
++
++	reassembly_table_register(&ul_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
++	reassembly_table_register(&dl_p7_reassemble_table, &addresses_ports_reassembly_table_functions);
++
++	register_dissector("nfapi", dissect_nfapi, proto_nfapi);
++
++}
++
++// ----------------------------------------------------------------------------|
++
++void proto_reg_handoff_nfapi(void)
++{
++	static dissector_handle_t nfapi_handle;
++
++	nfapi_handle = create_dissector_handle(dissect_nfapi, proto_nfapi);
++
++	dissector_add_for_decode_as("sctp.port", nfapi_handle);
++
++	dissector_add_uint("udp.port", 41700, nfapi_handle);
++
++}
++
++
++/*
++* Editor modelines  -  http://www.wireshark.org/tools/modelines.html
++*
++* Local variables:
++* c-basic-offset: 8
++* tab-width: 8
++* indent-tabs-mode: t
++* End:
++*
++* vi: set shiftwidth=8 tabstop=8 noexpandtab:
++* :indentSize=8:tabSize=8:noTabs=false:
++*/
+diff --git a/xml/pnf_phy_1_A.xml b/xml/pnf_phy_1_A.xml
+index da6cc26..45f8f46 100644
+--- a/xml/pnf_phy_1_A.xml
++++ b/xml/pnf_phy_1_A.xml
+@@ -26,7 +26,7 @@
+ 		<phy>
+ 			<index>88</index>
+ 			<port>2500</port>
+-			<address>127.0.0.1</address>
++			<address>192.168.1.74</address>
+ 
+ 			<duplex_mode>1</duplex_mode>
+ 
+@@ -54,9 +54,9 @@
  
--typedef struct { 
-+typedef struct {  
- 	nfapi_tl_t tl;
- 	uint8_t harq_size;
- 	uint8_t ack_nack_mode;
+ 			<data>
+ 				<udp>
+-					<rx_port>7722</rx_port>
+-					<tx_addr>127.0.0.1</tx_addr>
+-					<tx_port>7733</tx_port>
++					<rx_port>5201</rx_port>
++					<tx_addr>192.168.1.28</tx_addr>
++					<tx_port>5200</tx_port>
+ 				</udp>
+ 			</data>
+ 		</phy>
+diff --git a/xml/vnf_A.xml b/xml/vnf_A.xml
+index e609c93..3791239 100644
+--- a/xml/vnf_A.xml
++++ b/xml/vnf_A.xml
+@@ -2,8 +2,8 @@
+ <vnf>
+ 	<vnf_p7_list>
+ 		<vnf_p7>
+-			<port>5200</port>
+-			<address>127.0.0.1</address>
++			<port>5201</port>
++			<address>192.168.1.28</address>
+ 			<timing_window>10</timing_window>
+ 			<periodic_timing_enabled>0</periodic_timing_enabled>
+ 			<periodic_timing_window>0</periodic_timing_window>
+@@ -12,7 +12,7 @@
+ 			<data>
+ 				<udp>
+ 					<rx_port>8891</rx_port>
+-					<tx_addr>127.0.0.1</tx_addr>
++					<tx_addr>192.168.1.28</tx_addr>
+ 					<tx_port>8892</tx_port>
+ 				</udp>
+ 			</data>
diff --git a/openair1/PHY/CODING/3gpplte.c b/openair1/PHY/CODING/3gpplte.c
index 99b3923746705c8552682effdeec8a8cfb5b2582..ca63857d7205cc4b37c7da5d89ff4988127f0b5e 100644
--- a/openair1/PHY/CODING/3gpplte.c
+++ b/openair1/PHY/CODING/3gpplte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c
index aeec529562c5c200708e559c9b47cffa1a60b47d..5d87a60477db22600da14707604db1745ddc304c 100644
--- a/openair1/PHY/CODING/3gpplte_sse.c
+++ b/openair1/PHY/CODING/3gpplte_sse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder.c b/openair1/PHY/CODING/3gpplte_turbo_decoder.c
index c6976df16495685095be08c80588f304ed33ebb9..4470ecca05ba426e30113e6a71eacf76e87a0465 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c
index 4efd366bed2cb39058fa685b7e4f53baeb2dccb2..616eed7446df4d611a4addba06cec2e90b1a32aa 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_avx2_16bit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
index 085dbb723c3eee5382886e253fdaebc5ac9a520e..9ec25367d9c435af597c124a13f74af80d35f577 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
index a1e408dcda72ff57ec520b8138e0193266155f7c..cb4a4e1f84124553c09391c6649b67921b2bafb7 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
index b43f477e0693428638357f50a5528bc8621f4102..d6ef84b218388dcdf0ad9e24e4391c85fe9bc82a 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/TESTBENCH/ltetest.c b/openair1/PHY/CODING/TESTBENCH/ltetest.c
index 6bc5e2526430336465824f72a9ac26d866536ccc..77e1f3f14fdc5292bd77e6d7507fa16da6fd2017 100644
--- a/openair1/PHY/CODING/TESTBENCH/ltetest.c
+++ b/openair1/PHY/CODING/TESTBENCH/ltetest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/TESTBENCH/pdcch_test.c b/openair1/PHY/CODING/TESTBENCH/pdcch_test.c
index c083da85a776935fff8d721f913c5525ed1485af..9e055412f0e0117c2a75f8b358c4335110b11138 100644
--- a/openair1/PHY/CODING/TESTBENCH/pdcch_test.c
+++ b/openair1/PHY/CODING/TESTBENCH/pdcch_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c
index 907d7b6384659f46c591dfae544e771a30ca2002..385910f680ec52caaee86d45fedc902ce822b0c7 100644
--- a/openair1/PHY/CODING/TESTBENCH/viterbi_test.c
+++ b/openair1/PHY/CODING/TESTBENCH/viterbi_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/ccoding_byte.c b/openair1/PHY/CODING/ccoding_byte.c
index 5595ee9af3815510d0fcdf4c1adc3970e16556b8..8511a5ea0f7103cfcf252a9ededf4103ab8e4977 100644
--- a/openair1/PHY/CODING/ccoding_byte.c
+++ b/openair1/PHY/CODING/ccoding_byte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/ccoding_byte_lte.c b/openair1/PHY/CODING/ccoding_byte_lte.c
index ac3ff1cd7b3702a4ccb7318e49dba0376946c964..6eb654827bc874c9d27a405d2975b014a572a32d 100644
--- a/openair1/PHY/CODING/ccoding_byte_lte.c
+++ b/openair1/PHY/CODING/ccoding_byte_lte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/crc_byte.c b/openair1/PHY/CODING/crc_byte.c
index 46d48e5d69e65e7d33dba48214b582b99abda1cb..4f0dcf2196749111989bd5f8e9cc5567476b97b9 100644
--- a/openair1/PHY/CODING/crc_byte.c
+++ b/openair1/PHY/CODING/crc_byte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/defs.h b/openair1/PHY/CODING/defs.h
index 97dcc11b2e690417bc1a0956d401293e9715d204..06311a188bc9c9123162df5a3467fd0723608e9e 100644
--- a/openair1/PHY/CODING/defs.h
+++ b/openair1/PHY/CODING/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/extern.h b/openair1/PHY/CODING/extern.h
index aed8e90d75f743be78bb90fa9cfe5c37b0763757..9c58920a10d003db6e73768638cbdf594146dd24 100644
--- a/openair1/PHY/CODING/extern.h
+++ b/openair1/PHY/CODING/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/extern_3GPPinterleaver.h b/openair1/PHY/CODING/extern_3GPPinterleaver.h
index e7134b56907dfbbdc9068e60824cf8a6cb7c901a..007c1fecc31445cc1a4ddbd5390fac0a0ebf4159 100644
--- a/openair1/PHY/CODING/extern_3GPPinterleaver.h
+++ b/openair1/PHY/CODING/extern_3GPPinterleaver.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/lte_interleaver.h b/openair1/PHY/CODING/lte_interleaver.h
index 165dcfac277c4584db0025d186a1bf194a87cf40..fbf26a8e1f45f566a1f7735e9b5dac5dc323c71f 100644
--- a/openair1/PHY/CODING/lte_interleaver.h
+++ b/openair1/PHY/CODING/lte_interleaver.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/lte_interleaver2.h b/openair1/PHY/CODING/lte_interleaver2.h
index 74805922f95c83b049e657f2a4d9d24d2b5044be..60b2fa6d1f6f65439f69925e982e82cf1431cd80 100644
--- a/openair1/PHY/CODING/lte_interleaver2.h
+++ b/openair1/PHY/CODING/lte_interleaver2.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/lte_interleaver_inline.h b/openair1/PHY/CODING/lte_interleaver_inline.h
index 8dc56f869e5d78f42c2d2ad59b31630a361ad726..bf560128f0e4f2c5ce7fb25d565ca36158518268 100644
--- a/openair1/PHY/CODING/lte_interleaver_inline.h
+++ b/openair1/PHY/CODING/lte_interleaver_inline.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/lte_rate_matching.c b/openair1/PHY/CODING/lte_rate_matching.c
index a25dbe8b79ceb8cdc4463bc2590297b6bb9431e9..13870e3303ccf17f117a97df225dc06a5f72c83b 100644
--- a/openair1/PHY/CODING/lte_rate_matching.c
+++ b/openair1/PHY/CODING/lte_rate_matching.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/lte_segmentation.c b/openair1/PHY/CODING/lte_segmentation.c
index 0941069067dbaced2ef7a83233a64a27b13ec723..3ae65e20900e95323efee6563cbc9d7dd705b856 100644
--- a/openair1/PHY/CODING/lte_segmentation.c
+++ b/openair1/PHY/CODING/lte_segmentation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/scrambler.h b/openair1/PHY/CODING/scrambler.h
index 06ff2d7663fc9ddea33a6ebc8bd035d11e9a90bd..3c1b1de0a71eb8b0198ea114dbb109f755d11005 100644
--- a/openair1/PHY/CODING/scrambler.h
+++ b/openair1/PHY/CODING/scrambler.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/vars.h b/openair1/PHY/CODING/vars.h
index 9c0cf66c3e8cb7069472222c81691e2e1bd5f8b2..944ea08d0c8121e92189ea06d9edd1d2f3154854 100644
--- a/openair1/PHY/CODING/vars.h
+++ b/openair1/PHY/CODING/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/viterbi.c b/openair1/PHY/CODING/viterbi.c
index b2ab26e91c2d121b447538ec27e8757510eb8170..f44e2ebf8f203336cb8389d63cd00a77c5363c6e 100644
--- a/openair1/PHY/CODING/viterbi.c
+++ b/openair1/PHY/CODING/viterbi.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/CODING/viterbi_lte.c b/openair1/PHY/CODING/viterbi_lte.c
index e1d3a99cbeac0ec9f7445b14b02fb5ccb129b5b5..d112e7c10958aa91db1ef898c4575a492c886d07 100644
--- a/openair1/PHY/CODING/viterbi_lte.c
+++ b/openair1/PHY/CODING/viterbi_lte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h
index 229c24f96f8eceb2d98fe3d4951615a646962cd2..5d61b250ce46c0dd46193c7cb4595495a3e9a7bf 100644
--- a/openair1/PHY/INIT/defs.h
+++ b/openair1/PHY/INIT/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -65,7 +65,7 @@ int phy_init_top(LTE_DL_FRAME_PARMS *frame_parms);
 @returns -1 if any memory allocation failed
 @note The current implementation will never return -1, but segfault.
  */
-int phy_init_lte_ue_signal(PHY_VARS_UE *phy_vars_ue,
+int init_lte_ue_signal(PHY_VARS_UE *phy_vars_ue,
 			   int          nb_connected_eNB,
 			   uint8_t         abstraction_flag);
 
diff --git a/openair1/PHY/INIT/extern.h b/openair1/PHY/INIT/extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/INIT/extern.h
+++ b/openair1/PHY/INIT/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c
index 33ff141203f351fb8549b5ecd026072f99af2706..c4d5850501813961470a02f9ca90c0391f947114 100644
--- a/openair1/PHY/INIT/init_top.c
+++ b/openair1/PHY/INIT/init_top.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index a170838dad3559a19763773bd2f5dd3c315453b7..aac609765f959fbc3ab73c3bfe1b1501e263e82a 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -32,6 +32,9 @@
 #include "assertions.h"
 #include <math.h>
 
+extern uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn);
+extern int32_t get_uldl_offset(int eutra_bandP);
+
 extern uint16_t prach_root_sequence_map0_3[838];
 extern uint16_t prach_root_sequence_map4[138];
 uint8_t dmrs1_tab[8] = {0,2,3,4,6,8,9,10};
@@ -42,19 +45,37 @@ int N_RB_DL_array[6] = {6,15,25,50,75,100};
 int l1_north_init_eNB() {
 
   int i,j;
-  AssertFatal(RC.nb_L1_inst>0,"nb_L1_inst=%d\n",RC.nb_L1_inst);
-  AssertFatal(RC.nb_L1_CC!=NULL,"nb_L1_CC is null\n");
-  AssertFatal(RC.eNB!=NULL,"RC.eNB is null\n");
-  for (i=0;i<RC.nb_L1_inst;i++) {
-    AssertFatal(RC.eNB[i]!=NULL,"RC.eNB[%d] is null\n",i);
-    AssertFatal(RC.nb_L1_CC[i]>0,"RC.nb_L1_CC[%d]=%d\n",i,RC.nb_L1_CC[i]);
-    for (j=0;j<RC.nb_L1_CC[i];j++) {
-      AssertFatal(RC.eNB[i][j]!=NULL,"RC.eNB[%d][%d] is null\n",i,j);
-      if ((RC.eNB[i][j]->if_inst =  IF_Module_init(i))<0) return(-1); 
-      RC.eNB[i][j]->if_inst->PHY_config_req = phy_config_request;
-      RC.eNB[i][j]->if_inst->schedule_response = schedule_response;
+
+  if (RC.nb_L1_inst > 0 && RC.nb_L1_CC != NULL && RC.eNB != NULL)
+  {
+    AssertFatal(RC.nb_L1_inst>0,"nb_L1_inst=%d\n",RC.nb_L1_inst);
+    AssertFatal(RC.nb_L1_CC!=NULL,"nb_L1_CC is null\n");
+    AssertFatal(RC.eNB!=NULL,"RC.eNB is null\n");
+
+    LOG_I(PHY,"%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst);
+
+    for (i=0;i<RC.nb_L1_inst;i++) {
+      AssertFatal(RC.eNB[i]!=NULL,"RC.eNB[%d] is null\n",i);
+      AssertFatal(RC.nb_L1_CC[i]>0,"RC.nb_L1_CC[%d]=%d\n",i,RC.nb_L1_CC[i]);
+
+      LOG_I(PHY,"%s() RC.nb_L1_CC[%d]:%d\n", __FUNCTION__, i,  RC.nb_L1_CC[i]);
+
+      for (j=0;j<RC.nb_L1_CC[i];j++) {
+        AssertFatal(RC.eNB[i][j]!=NULL,"RC.eNB[%d][%d] is null\n",i,j);
+
+        if ((RC.eNB[i][j]->if_inst =  IF_Module_init(i))<0) return(-1); 
+
+        LOG_I(PHY,"%s() RC.eNB[%d][%d] installing callbacks\n", __FUNCTION__, i,  j);
+
+        RC.eNB[i][j]->if_inst->PHY_config_req = phy_config_request;
+        RC.eNB[i][j]->if_inst->schedule_response = schedule_response;
+      }
     }
   }
+  else
+  {
+    LOG_I(PHY,"%s() Not installing PHY callbacks - RC.nb_L1_inst:%d RC.nb_L1_CC:%p RC.eNB:%p\n", __FUNCTION__, RC.nb_L1_inst, RC.nb_L1_CC, RC.eNB);
+  }
   return(0);
 }
 
@@ -70,13 +91,14 @@ void phy_config_request(PHY_Config_t *phy_config) {
   PHICH_RESOURCE_t phich_resource_table[4]={oneSixth,half,one,two};
   int                 eutra_band     = cfg->nfapi_config.rf_bands.rf_band[0];  
   int                 dl_Bandwidth   = cfg->rf_config.dl_channel_bandwidth.value;
+  int                 ul_Bandwidth   = cfg->rf_config.ul_channel_bandwidth.value;
   int                 Nid_cell       = cfg->sch_config.physical_cell_id.value;
   int                 Ncp            = cfg->subframe_config.dl_cyclic_prefix_type.value;
   int                 p_eNB          = cfg->rf_config.tx_antenna_ports.value;
   uint32_t            dl_CarrierFreq = cfg->nfapi_config.earfcn.value;
 
-  LOG_I(PHY,"Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,Ncp %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n",
-	Mod_id, CC_id, eutra_band, N_RB_DL_array[dl_Bandwidth], Nid_cell, p_eNB,Ncp,dl_CarrierFreq,
+  LOG_I(PHY,"Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d, N_RB_UL %d, Nid_cell %d,eNB_tx_antenna_ports %d,Ncp %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n",
+	Mod_id, CC_id, eutra_band, dl_Bandwidth, ul_Bandwidth, Nid_cell, p_eNB,Ncp,dl_CarrierFreq,
 	cfg->phich_config.phich_resource.value,
 	cfg->phich_config.phich_duration.value);
 
@@ -85,13 +107,18 @@ void phy_config_request(PHY_Config_t *phy_config) {
   AssertFatal(RC.eNB[Mod_id][CC_id] != NULL, "PHY instance %d, CCid %d doesn't exist\n",Mod_id,CC_id);
 
 
+  if (RC.eNB[Mod_id][CC_id]->configured == 1)
+  {
+    LOG_E(PHY,"Already eNB already configured, do nothing\n");
+    return;
+  }
 
   RC.eNB[Mod_id][CC_id]->mac_enabled     = 1;
 
   fp = &RC.eNB[Mod_id][CC_id]->frame_parms;
 
-  fp->N_RB_DL                            = N_RB_DL_array[dl_Bandwidth];
-  fp->N_RB_UL                            = N_RB_DL_array[dl_Bandwidth];
+  fp->N_RB_DL                            = dl_Bandwidth;
+  fp->N_RB_UL                            = ul_Bandwidth;
   fp->Nid_cell                           = Nid_cell;
   fp->nushift                            = fp->Nid_cell%6;
   fp->eutra_band                         = eutra_band;
@@ -153,93 +180,95 @@ void phy_config_request(PHY_Config_t *phy_config) {
                     RC.eNB[Mod_id][CC_id]->X_u);
 
 #ifdef Rel14
-  if (cfg->emtc_config.prach_ce_level_0_enable.value == 1) {
-    fp->prach_emtc_config_common.prach_Config_enabled=1;
-
-    fp->prach_emtc_config_common.rootSequenceIndex                                         = cfg->emtc_config.prach_catm_root_sequence_index.value;
-
-    fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag                            = cfg->emtc_config.prach_catm_high_speed_flag.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig                = cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.value;
-
-    // CE Level 3 parameters
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3]                  = cfg->emtc_config.prach_ce_level_3_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3]   = cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3] = cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value;
-    AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3],
-		"prach_starting_subframe_periodicity[3] < prach_numPetitionPerPreambleAttempt[3]\n");
-
-
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3]                     = cfg->emtc_config.prach_ce_level_3_configuration_index.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[3]                      = cfg->emtc_config.prach_ce_level_3_frequency_offset.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[3]                  = cfg->emtc_config.prach_ce_level_3_hopping_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[3]                  = cfg->emtc_config.prach_ce_level_3_hopping_offset.value;
-    if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3] == 1)
-      compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
-			fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
-			fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
-			fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
-			fp->frame_type,
-			RC.eNB[Mod_id][CC_id]->X_u_br[3]);
-
-    // CE Level 2 parameters
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2]                  = cfg->emtc_config.prach_ce_level_2_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2]   = cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2] = cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value;
-    AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2],
-		"prach_starting_subframe_periodicity[2] < prach_numPetitionPerPreambleAttempt[2]\n");
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[2]                     = cfg->emtc_config.prach_ce_level_2_configuration_index.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[2]                      = cfg->emtc_config.prach_ce_level_2_frequency_offset.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[2]                  = cfg->emtc_config.prach_ce_level_2_hopping_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[2]                  = cfg->emtc_config.prach_ce_level_2_hopping_offset.value;
-    if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2] == 1)
-      compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
-			fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
-			fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
-			fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
-			fp->frame_type,
-			RC.eNB[Mod_id][CC_id]->X_u_br[2]);
-
-    // CE Level 1 parameters
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1]                  = cfg->emtc_config.prach_ce_level_1_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1]   = cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1] = cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value;
-    AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1],
-		"prach_starting_subframe_periodicity[1] < prach_numPetitionPerPreambleAttempt[1]\n");
-
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[1]                     = cfg->emtc_config.prach_ce_level_1_configuration_index.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[1]                      = cfg->emtc_config.prach_ce_level_1_frequency_offset.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[1]                  = cfg->emtc_config.prach_ce_level_1_hopping_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[1]                  = cfg->emtc_config.prach_ce_level_1_hopping_offset.value;
-    if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1] == 1)
-      compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
-			fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
-			fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
-			fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
-			fp->frame_type,
-			RC.eNB[Mod_id][CC_id]->X_u_br[1]);
+  fp->prach_emtc_config_common.prach_Config_enabled=1;
+
+  fp->prach_emtc_config_common.rootSequenceIndex                                         = cfg->emtc_config.prach_catm_root_sequence_index.value;
+
+  fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag                            = cfg->emtc_config.prach_catm_high_speed_flag.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig                = cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.value;
+
+  // CE Level 3 parameters
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3]                  = cfg->emtc_config.prach_ce_level_3_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3]   = cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3] = cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value;
+  AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[3]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[3],
+	      "prach_starting_subframe_periodicity[3] < prach_numPetitionPerPreambleAttempt[3]\n");
+
+
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3]                     = cfg->emtc_config.prach_ce_level_3_configuration_index.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[3]                      = cfg->emtc_config.prach_ce_level_3_frequency_offset.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[3]                  = cfg->emtc_config.prach_ce_level_3_hopping_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[3]                  = cfg->emtc_config.prach_ce_level_3_hopping_offset.value;
+  if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[3] == 1)
+    compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
+		      fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
+		      fp->frame_type,
+		      RC.eNB[Mod_id][CC_id]->X_u_br[3]);
+
+  // CE Level 2 parameters
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2]                  = cfg->emtc_config.prach_ce_level_2_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2]   = cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2] = cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value;
+  AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[2]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[2],
+	      "prach_starting_subframe_periodicity[2] < prach_numPetitionPerPreambleAttempt[2]\n");
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[2]                     = cfg->emtc_config.prach_ce_level_2_configuration_index.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[2]                      = cfg->emtc_config.prach_ce_level_2_frequency_offset.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[2]                  = cfg->emtc_config.prach_ce_level_2_hopping_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[2]                  = cfg->emtc_config.prach_ce_level_2_hopping_offset.value;
+  if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[2] == 1)
+    compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
+		      fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
+		      fp->frame_type,
+		      RC.eNB[Mod_id][CC_id]->X_u_br[2]);
+
+  // CE Level 1 parameters
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1]                  = cfg->emtc_config.prach_ce_level_1_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1]   = cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1] = cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value;
+  AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[1]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[1],
+	      "prach_starting_subframe_periodicity[1] < prach_numPetitionPerPreambleAttempt[1]\n");
+
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[1]                     = cfg->emtc_config.prach_ce_level_1_configuration_index.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[1]                      = cfg->emtc_config.prach_ce_level_1_frequency_offset.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[1]                  = cfg->emtc_config.prach_ce_level_1_hopping_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[1]                  = cfg->emtc_config.prach_ce_level_1_hopping_offset.value;
+  if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[1] == 1)
+    compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
+		      fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
+		      fp->frame_type,
+		      RC.eNB[Mod_id][CC_id]->X_u_br[1]);
   
-    // CE Level 0 parameters
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0]                  = cfg->emtc_config.prach_ce_level_0_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]   = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value;
-    AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0],
-		"prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n",
-		fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0],
-		fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]);
-    AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0,
-		"prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n");
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0]                     = cfg->emtc_config.prach_ce_level_0_configuration_index.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0]                      = cfg->emtc_config.prach_ce_level_0_frequency_offset.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0]                = cfg->emtc_config.prach_ce_level_0_hopping_enable.value;
-    fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[0]                = cfg->emtc_config.prach_ce_level_0_hopping_offset.value;
-    if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0] == 1)
-      compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
-			fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
-			fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
-			fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
-			fp->frame_type,
-			RC.eNB[Mod_id][CC_id]->X_u_br[0]);
-  }
+  // CE Level 0 parameters
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0]                  = cfg->emtc_config.prach_ce_level_0_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]   = cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] = cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value;
+  AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0]>=fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0],
+	      "prach_starting_subframe_periodicity[0] %d < prach_numPetitionPerPreambleAttempt[0] %d\n",
+	      fp->prach_emtc_config_common.prach_ConfigInfo.prach_starting_subframe_periodicity[0],
+	      fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]);
+#if 0
+  AssertFatal(fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0] > 0,
+	      "prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]==0\n");
+#else
+  LOG_E(PHY,"***DJP*** removed assert on preamble fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0]:%d expecting >0 %s:%d\n\n\n", fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[0], __FILE__, __LINE__);
+#endif
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[0]                     = cfg->emtc_config.prach_ce_level_0_configuration_index.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[0]                      = cfg->emtc_config.prach_ce_level_0_frequency_offset.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_enable[0]                = cfg->emtc_config.prach_ce_level_0_hopping_enable.value;
+  fp->prach_emtc_config_common.prach_ConfigInfo.prach_hopping_offset[0]                = cfg->emtc_config.prach_ce_level_0_hopping_offset.value;
+  if (fp->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0] == 1)
+    compute_prach_seq(fp->prach_emtc_config_common.rootSequenceIndex,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[3],
+		      fp->prach_emtc_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
+		      fp->prach_emtc_config_common.prach_ConfigInfo.highSpeedFlag,
+		      fp->frame_type,
+		      RC.eNB[Mod_id][CC_id]->X_u_br[0]);
 #endif
 
 
@@ -266,9 +295,9 @@ void phy_config_request(PHY_Config_t *phy_config) {
   fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled     = 0;
   fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled  = 0;
   if (cfg->uplink_reference_signal_config.uplink_rs_hopping.value == 1) 
-    fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1;
+      fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = 1;
   if (cfg->uplink_reference_signal_config.uplink_rs_hopping.value == 2) 
-    fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 1;
+      fp->pusch_config_common.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled = 1;
   LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupHoppingEnabled);
   fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH   =  cfg->uplink_reference_signal_config.group_assignment.value;
   LOG_I(PHY,"pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH = %d\n",fp->pusch_config_common.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH);
@@ -327,14 +356,14 @@ void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
 }
 
 /*
-  void phy_config_sib2_eNB(uint8_t Mod_id,
-  int CC_id,
-  RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
-  ARFCN_ValueEUTRA_t *ul_CArrierFreq,
-  long *ul_Bandwidth,
-  AdditionalSpectrumEmission_t *additionalSpectrumEmission,
-  struct MBSFN_SubframeConfigList  *mbsfn_SubframeConfigList)
-  {
+void phy_config_sib2_eNB(uint8_t Mod_id,
+                         int CC_id,
+                         RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
+                         ARFCN_ValueEUTRA_t *ul_CArrierFreq,
+                         long *ul_Bandwidth,
+                         AdditionalSpectrumEmission_t *additionalSpectrumEmission,
+                         struct MBSFN_SubframeConfigList  *mbsfn_SubframeConfigList)
+{
 
   LTE_DL_FRAME_PARMS *fp = &RC.eNB[Mod_id][CC_id]->frame_parms;
   //LTE_eNB_UE_stats *eNB_UE_stats      = RC.eNB[Mod_id][CC_id].eNB_UE_stats;
@@ -361,7 +390,7 @@ void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
 
   init_prach_tables(839);
   compute_prach_seq(&fp->prach_config_common,fp->frame_type,
-  RC.eNB[Mod_id][CC_id]->X_u);
+                    RC.eNB[Mod_id][CC_id]->X_u);
 
   fp->pucch_config_common.deltaPUCCH_Shift = 1+radioResourceConfigCommon->pucch_ConfigCommon.deltaPUCCH_Shift;
   fp->pucch_config_common.nRB_CQI          = radioResourceConfigCommon->pucch_ConfigCommon.nRB_CQI;
@@ -403,15 +432,15 @@ void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
   fp->soundingrs_ul_config_common.enabled_flag                        = 0;
 
   if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.present==SoundingRS_UL_ConfigCommon_PR_setup) {
-  fp->soundingrs_ul_config_common.enabled_flag                        = 1;
-  fp->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
-  fp->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
-  fp->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
+    fp->soundingrs_ul_config_common.enabled_flag                        = 1;
+    fp->soundingrs_ul_config_common.srs_BandwidthConfig                 = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
+    fp->soundingrs_ul_config_common.srs_SubframeConfig                  = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
+    fp->soundingrs_ul_config_common.ackNackSRS_SimultaneousTransmission = radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
 
-  if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts)
-  fp->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
-  else
-  fp->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
+    if (radioResourceConfigCommon->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts)
+      fp->soundingrs_ul_config_common.srs_MaxUpPts                      = 1;
+    else
+      fp->soundingrs_ul_config_common.srs_MaxUpPts                      = 0;
   }
 
 
@@ -439,34 +468,34 @@ void phy_config_sib1_ue(uint8_t Mod_id,int CC_id,
 
   // MBSFN
   if (mbsfn_SubframeConfigList != NULL) {
-  fp->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
-
-  for (i=0; i<mbsfn_SubframeConfigList->list.count; i++) {
-  fp->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
-  fp->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
-
-  if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {
-  fp->MBSFN_config[i].fourFrames_flag = 0;
-  fp->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
-  LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %d\n", i,
-  fp->MBSFN_config[i].mbsfn_SubframeConfig);
-  } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
-  fp->MBSFN_config[i].fourFrames_flag = 1;
-  fp->MBSFN_config[i].mbsfn_SubframeConfig =
-  mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
-  (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
-  (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
-
-  LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %d\n", i,
-  fp->MBSFN_config[i].mbsfn_SubframeConfig);
-  }
-  }
+    fp->num_MBSFN_config = mbsfn_SubframeConfigList->list.count;
+
+    for (i=0; i<mbsfn_SubframeConfigList->list.count; i++) {
+      fp->MBSFN_config[i].radioframeAllocationPeriod = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod;
+      fp->MBSFN_config[i].radioframeAllocationOffset = mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset;
+
+      if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) {
+        fp->MBSFN_config[i].fourFrames_flag = 0;
+        fp->MBSFN_config[i].mbsfn_SubframeConfig = mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]; // 6-bit subframe configuration
+        LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %d\n", i,
+              fp->MBSFN_config[i].mbsfn_SubframeConfig);
+      } else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
+        fp->MBSFN_config[i].fourFrames_flag = 1;
+        fp->MBSFN_config[i].mbsfn_SubframeConfig =
+          mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
+          (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
+          (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
+
+        LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is  %d\n", i,
+              fp->MBSFN_config[i].mbsfn_SubframeConfig);
+      }
+    }
 
   } else
-  fp->num_MBSFN_config = 0;
+    fp->num_MBSFN_config = 0;
 
   //
-  }
+}
 */
 
 void phy_config_sib2_ue(uint8_t Mod_id,int CC_id,
@@ -866,7 +895,7 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
     PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_id]->crnti = mobilityControlInfo->newUE_Identity.buf[0]|(mobilityControlInfo->newUE_Identity.buf[1]<<8);
 
     LOG_I(PHY,"SET C-RNTI %x %x\n",PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[0][eNB_id]->crnti,
-	  PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_id]->crnti);
+                                   PHY_vars_UE_g[Mod_id][CC_id]->pdcch_vars[1][eNB_id]->crnti);
   }
 
   if(ho_failed) {
@@ -895,67 +924,67 @@ void phy_config_meas_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,uint8_t n
 }
 
 /*
-  void phy_config_dedicated_eNB(uint8_t Mod_id,
-  int CC_id,
-  uint16_t rnti,
-  struct PhysicalConfigDedicated *physicalConfigDedicated)
-  {
+void phy_config_dedicated_eNB(uint8_t Mod_id,
+                              int CC_id,
+                              uint16_t rnti,
+                              struct PhysicalConfigDedicated *physicalConfigDedicated)
+{
 
   PHY_VARS_eNB *eNB = RC.eNB[Mod_id][CC_id];
   int8_t UE_id = find_ue(rnti,eNB);
   int i;
 
   if (UE_id == -1) {
-  LOG_E( PHY, "[eNB %"PRIu8"] find_ue() returns -1\n", Mod_id);
-  return;
+    LOG_E( PHY, "[eNB %"PRIu8"] find_ue() returns -1\n", Mod_id);
+    return;
   }
 
 
   if (physicalConfigDedicated) {
-  eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated;
-  LOG_I(PHY,"phy_config_dedicated_eNB: physicalConfigDedicated=%p\n",physicalConfigDedicated);
-
-  if (physicalConfigDedicated->antennaInfo) {
-  switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) {
-  case AntennaInfoDedicated__transmissionMode_tm1:
-  eNB->transmission_mode[UE_id] = 1;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm2:
-  eNB->transmission_mode[UE_id] = 2;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm3:
-  eNB->transmission_mode[UE_id] = 3;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm4:
-  eNB->transmission_mode[UE_id] = 4;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm5:
-  eNB->transmission_mode[UE_id] = 5;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm6:
-  eNB->transmission_mode[UE_id] = 6;
-  break;
-  case AntennaInfoDedicated__transmissionMode_tm7:
-  lte_gold_ue_spec_port5(eNB->lte_gold_uespec_port5_table[0],eNB->frame_parms.Nid_cell,rnti);
-
-  for (i=0;i<eNB->num_RU;i++) eNB->RU_list[i]->do_precoding=1;
-  eNB->transmission_mode[UE_id] = 7;
-  break;
-  default:
-  LOG_E(PHY,"Unknown transmission mode!\n");
-  break;
-  }
-  LOG_I(PHY,"Transmission Mode (phy_config_dedicated_eNB) %d\n",eNB->transmission_mode[UE_id]);
+    eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated;
+    LOG_I(PHY,"phy_config_dedicated_eNB: physicalConfigDedicated=%p\n",physicalConfigDedicated);
 
+    if (physicalConfigDedicated->antennaInfo) {
+      switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) {
+      case AntennaInfoDedicated__transmissionMode_tm1:
+        eNB->transmission_mode[UE_id] = 1;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm2:
+        eNB->transmission_mode[UE_id] = 2;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm3:
+        eNB->transmission_mode[UE_id] = 3;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm4:
+        eNB->transmission_mode[UE_id] = 4;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm5:
+        eNB->transmission_mode[UE_id] = 5;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm6:
+        eNB->transmission_mode[UE_id] = 6;
+        break;
+      case AntennaInfoDedicated__transmissionMode_tm7:
+        lte_gold_ue_spec_port5(eNB->lte_gold_uespec_port5_table[0],eNB->frame_parms.Nid_cell,rnti);
+
+	for (i=0;i<eNB->num_RU;i++) eNB->RU_list[i]->do_precoding=1;
+	eNB->transmission_mode[UE_id] = 7;
+	break;
+      default:
+        LOG_E(PHY,"Unknown transmission mode!\n");
+        break;
+      }
+      LOG_I(PHY,"Transmission Mode (phy_config_dedicated_eNB) %d\n",eNB->transmission_mode[UE_id]);
+
+    } else {
+      LOG_D(PHY,"[eNB %d] : Received NULL radioResourceConfigDedicated->antennaInfo from eNB %d\n",Mod_id,UE_id);
+    }
   } else {
-  LOG_D(PHY,"[eNB %d] : Received NULL radioResourceConfigDedicated->antennaInfo from eNB %d\n",Mod_id,UE_id);
-  }
-  } else {
-  LOG_E(PHY,"[eNB %d] Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, UE_id);
-  return;
+    LOG_E(PHY,"[eNB %d] Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, UE_id);
+    return;
   }
 
-  }
+}
 */
 
 #if defined(Rel10) || defined(Rel14)
@@ -967,11 +996,11 @@ void phy_config_dedicated_scell_ue(uint8_t Mod_id,
 
 }
 /*
-  void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
-  uint16_t rnti,
-  SCellToAddMod_r10_t *sCellToAddMod_r10,
-  int CC_id)
-  {
+void phy_config_dedicated_scell_eNB(uint8_t Mod_id,
+                                    uint16_t rnti,
+                                    SCellToAddMod_r10_t *sCellToAddMod_r10,
+                                    int CC_id)
+{
 
 
   uint8_t UE_id = find_ue(rnti,RC.eNB[Mod_id][0]);
@@ -982,37 +1011,37 @@ void phy_config_dedicated_scell_ue(uint8_t Mod_id,
   uint32_t carrier_freq_local;
 
   if ((dl_CarrierFreq_r10>=36000) && (dl_CarrierFreq_r10<=36199)) {
-  carrier_freq_local = 1900000000 + (dl_CarrierFreq_r10-36000)*100000; //band 33 from 3GPP 36.101 v 10.9 Table 5.7.3-1
-  LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %ld) for UE %d\n",Mod_id,
-  //eNB->frame
-  0,
-  CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
+    carrier_freq_local = 1900000000 + (dl_CarrierFreq_r10-36000)*100000; //band 33 from 3GPP 36.101 v 10.9 Table 5.7.3-1
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %ld) for UE %d\n",Mod_id,
+	  //eNB->frame
+	  0,
+	  CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
   } else if ((dl_CarrierFreq_r10>=6150) && (dl_CarrierFreq_r10<=6449)) {
-  carrier_freq_local = 832000000 + (dl_CarrierFreq_r10-6150)*100000; //band 20 from 3GPP 36.101 v 10.9 Table 5.7.3-1
-  // this is actually for the UL only, but we use it for DL too, since there is no TDD mode for this band
-  LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %ld) for UE %d\n",Mod_id,
-  //eNB->frame
-  0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
+    carrier_freq_local = 832000000 + (dl_CarrierFreq_r10-6150)*100000; //band 20 from 3GPP 36.101 v 10.9 Table 5.7.3-1
+    // this is actually for the UL only, but we use it for DL too, since there is no TDD mode for this band
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured SCell %d to frequency %d (ARFCN %ld) for UE %d\n",Mod_id,
+          //eNB->frame
+          0,CC_id,carrier_freq_local,dl_CarrierFreq_r10,UE_id);
   } else {
-  LOG_E(PHY,"[eNB %d] Frame %d: ARFCN %ld of SCell %d for UE %d not supported\n",Mod_id,
-  //eNB->frame
-  0,dl_CarrierFreq_r10,CC_id,UE_id);
+    LOG_E(PHY,"[eNB %d] Frame %d: ARFCN %ld of SCell %d for UE %d not supported\n",Mod_id,
+	  //eNB->frame
+	  0,dl_CarrierFreq_r10,CC_id,UE_id);
   }
 
   if (physicalConfigDedicatedSCell_r10) {
-  //#warning " eNB->physicalConfigDedicatedSCell_r10 does not exist in eNB"
-  //  eNB->physicalConfigDedicatedSCell_r10[UE_id] = physicalConfigDedicatedSCell_r10;
-  LOG_I(PHY,"[eNB %d] Frame %d: Configured phyConfigDedicatedSCell with CC_id %d for UE %d\n",Mod_id,
-  //eNB->frame
-  0,CC_id,UE_id);
+//#warning " eNB->physicalConfigDedicatedSCell_r10 does not exist in eNB"
+    //  eNB->physicalConfigDedicatedSCell_r10[UE_id] = physicalConfigDedicatedSCell_r10;
+    LOG_I(PHY,"[eNB %d] Frame %d: Configured phyConfigDedicatedSCell with CC_id %d for UE %d\n",Mod_id,
+	  //eNB->frame
+          0,CC_id,UE_id);
   } else {
-  LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated (CC_id %d, UE %d)\n",Mod_id, 
-  //eNB->frame
-  0,CC_id,UE_id);
-  return;
+    LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated (CC_id %d, UE %d)\n",Mod_id, 
+	  //eNB->frame
+	  0,CC_id,UE_id);
+    return;
   }
 
-  }
+}
 */
 
 #endif
@@ -1189,7 +1218,7 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
       }
       if (physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic) {
         if (physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic->present == CQI_ReportPeriodic_PR_setup) {
-	  // configure PUCCH CQI reporting
+        // configure PUCCH CQI reporting
           phy_vars_ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PUCCH_ResourceIndex = physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex;
           phy_vars_ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PMI_ConfigIndex     = physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex;
           if (physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.ri_ConfigIndex)
@@ -1232,12 +1261,12 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t eNB_id,
   }
   //phy_vars_ue->pdcch_vars[1][eNB_id]->crnti = phy_vars_ue->pdcch_vars[0][eNB_id]->crnti;
   if(phy_vars_ue->pdcch_vars[0][eNB_id]->crnti == 0x1234)
-    phy_vars_ue->pdcch_vars[0][eNB_id]->crnti = phy_vars_ue->pdcch_vars[1][eNB_id]->crnti;
+      phy_vars_ue->pdcch_vars[0][eNB_id]->crnti = phy_vars_ue->pdcch_vars[1][eNB_id]->crnti;
   else
-    phy_vars_ue->pdcch_vars[1][eNB_id]->crnti = phy_vars_ue->pdcch_vars[0][eNB_id]->crnti;
+      phy_vars_ue->pdcch_vars[1][eNB_id]->crnti = phy_vars_ue->pdcch_vars[0][eNB_id]->crnti;
 
   LOG_I(PHY,"C-RNTI %x %x \n", phy_vars_ue->pdcch_vars[0][eNB_id]->crnti,
-	phy_vars_ue->pdcch_vars[1][eNB_id]->crnti);
+                               phy_vars_ue->pdcch_vars[1][eNB_id]->crnti);
 
 }
 
@@ -1688,7 +1717,7 @@ int phy_init_RU(RU_t *ru) {
   int p;
   int re;
 
-  LOG_I(PHY,"Initializing RU signal buffers (if_south %s)\n",ru_if_types[ru->if_south]);
+  LOG_I(PHY,"Initializing RU signal buffers (if_south %s) nb_tx %d\n",ru_if_types[ru->if_south],ru->nb_tx);
 
   if (ru->if_south <= REMOTE_IF5) { // this means REMOTE_IF5 or LOCAL_RF, so allocate memory for time-domain signals 
     // Time-domain signals
@@ -1701,7 +1730,7 @@ int phy_init_RU(RU_t *ru) {
       ru->common.txdata[i]  = (int32_t*)malloc16_clear( fp->samples_per_tti*10*sizeof(int32_t) );
 
       LOG_I(PHY,"[INIT] common.txdata[%d] = %p (%lu bytes)\n",i,ru->common.txdata[i],
-	    fp->samples_per_tti*10*sizeof(int32_t));
+	     fp->samples_per_tti*10*sizeof(int32_t));
 
     }
     for (i=0;i<ru->nb_rx;i++) {
@@ -1715,6 +1744,7 @@ int phy_init_RU(RU_t *ru) {
 
   }
   if (ru->function != NGFI_RRU_IF5) { // we need to do RX/TX RU processing
+    LOG_I(PHY,"nb_tx %d\n",ru->nb_tx);
     ru->common.rxdata_7_5kHz = (int32_t**)malloc16(ru->nb_rx*sizeof(int32_t*) );
     for (i=0;i<ru->nb_rx;i++) {
       ru->common.rxdata_7_5kHz[i] = (int32_t*)malloc16_clear( 2*fp->samples_per_tti*2*sizeof(int32_t) );
@@ -1758,9 +1788,13 @@ int phy_init_RU(RU_t *ru) {
     AssertFatal(RC.nb_L1_inst <= NUMBER_OF_eNB_MAX,"eNB instances %d > %d\n",
 		RC.nb_L1_inst,NUMBER_OF_eNB_MAX);
 
+    LOG_E(PHY,"[INIT] %s() RC.nb_L1_inst:%d \n", __FUNCTION__, RC.nb_L1_inst);
+
     for (i=0; i<RC.nb_L1_inst; i++) {
       for (p=0;p<15;p++) {
+        LOG_D(PHY,"[INIT] %s() nb_antenna_ports_eNB:%d \n", __FUNCTION__, ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB);
 	if (p<ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB || p==5) {
+          LOG_D(PHY,"[INIT] %s() DO BEAM WEIGHTS nb_antenna_ports_eNB:%d nb_tx:%d\n", __FUNCTION__, ru->eNB_list[i]->frame_parms.nb_antenna_ports_eNB, ru->nb_tx);
 	  ru->beam_weights[i][p] = (int32_t **)malloc16_clear(ru->nb_tx*sizeof(int32_t*));
 	  for (j=0; j<ru->nb_tx; j++) {
 	    ru->beam_weights[i][p][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t));
@@ -1769,15 +1803,20 @@ int phy_init_RU(RU_t *ru) {
 	    // antenna ports 5-14 are mapped on all antennas 
 	    if (((p<4) && (p==j)) || ((p==4) && (j==0))) {
 	      for (re=0; re<fp->ofdm_symbol_size; re++) 
+              {
 		ru->beam_weights[i][p][j][re] = 0x00007fff; 
+
+                //LOG_D(PHY,"[INIT] lte_common_vars->beam_weights[%d][%d][%d][%d] = %d\n", i,p,j,re,ru->beam_weights[i][p][j][re]);
+              }
 	    }
 	    else if (p>4) {
 	      for (re=0; re<fp->ofdm_symbol_size; re++) 
+              {
 		ru->beam_weights[i][p][j][re] = 0x00007fff/ru->nb_tx; 
+                //LOG_D(PHY,"[INIT] lte_common_vars->beam_weights[%d][%d][%d][%d] = %d\n", i,p,j,re,ru->beam_weights[i][p][j][re]);
+              }
 	    }  
-	    LOG_D(PHY,"[INIT] lte_common_vars->beam_weights[%d][%d] = %p (%lu bytes)\n",
-		  i,j,ru->beam_weights[i][p][j],
-		  fp->ofdm_symbol_size*sizeof(int32_t)); 
+	    //LOG_D(PHY,"[INIT] lte_common_vars->beam_weights[%d][%d] = %p (%lu bytes)\n", i,j,ru->beam_weights[i][p][j], fp->ofdm_symbol_size*sizeof(int32_t)); 
 	  }
 	}
       }
@@ -1804,6 +1843,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
 #endif
   int i, UE_id; 
 
+  LOG_I(PHY,"[eNB %d] %s() About to wait for eNB to be configured", eNB->Mod_id, __FUNCTION__);
 
   eNB->total_dlsch_bitrate = 0;
   eNB->total_transmitted_bits = 0;
@@ -1812,10 +1852,18 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
  
   while(eNB->configured == 0) usleep(10000);
 
-  LOG_I(PHY,"[eNB %"PRIu8"] Initializing DL_FRAME_PARMS : N_RB_DL %"PRIu8", PHICH Resource %d, PHICH Duration %d\n",
+  LOG_I(PHY,"[eNB %"PRIu8"] Initializing DL_FRAME_PARMS : N_RB_DL %"PRIu8", PHICH Resource %d, PHICH Duration %d nb_antennas_tx:%u nb_antennas_rx:%u nb_antenna_ports_eNB:%u PRACH[rootSequenceIndex:%u prach_Config_enabled:%u configIndex:%u highSpeed:%u zeroCorrelationZoneConfig:%u freqOffset:%u]\n",
         eNB->Mod_id,
         fp->N_RB_DL,fp->phich_config_common.phich_resource,
-        fp->phich_config_common.phich_duration);
+        fp->phich_config_common.phich_duration,
+        fp->nb_antennas_tx, fp->nb_antennas_rx, fp->nb_antenna_ports_eNB,
+        fp->prach_config_common.rootSequenceIndex,
+        fp->prach_config_common.prach_Config_enabled,
+        fp->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
+        fp->prach_config_common.prach_ConfigInfo.highSpeedFlag,
+        fp->prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig,
+        fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset
+        );
   LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_eNB][MOD %02"PRIu8"][]\n", eNB->Mod_id);
 
 
@@ -1842,6 +1890,8 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
   common_vars->txdataF = (int32_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(int32_t*));
   common_vars->rxdataF = (int32_t **)malloc16(64*sizeof(int32_t*));
   
+  LOG_D(PHY,"[INIT] NB_ANTENNA_PORTS_ENB:%d fp->nb_antenna_ports_eNB:%d\n", NB_ANTENNA_PORTS_ENB, fp->nb_antenna_ports_eNB);
+
   for (i=0; i<NB_ANTENNA_PORTS_ENB; i++) {
     if (i<fp->nb_antenna_ports_eNB || i==5) {
       common_vars->txdataF[i] = (int32_t*)malloc16_clear(fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t) );
@@ -1896,12 +1946,12 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
 #endif
   
   /* number of elements of an array X is computed as sizeof(X) / sizeof(X[0]) 
-     AssertFatal(fp->nb_antennas_rx <= sizeof(prach_vars->rxsigF) / sizeof(prach_vars->rxsigF[0]),
-     "nb_antennas_rx too large");
-     for (i=0; i<fp->nb_antennas_rx; i++) {
-     prach_vars->rxsigF[i] = (int16_t*)malloc16_clear( fp->ofdm_symbol_size*12*2*sizeof(int16_t) );
-     LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,prach_vars->rxsigF[i]);
-     }*/
+  AssertFatal(fp->nb_antennas_rx <= sizeof(prach_vars->rxsigF) / sizeof(prach_vars->rxsigF[0]),
+              "nb_antennas_rx too large");
+  for (i=0; i<fp->nb_antennas_rx; i++) {
+    prach_vars->rxsigF[i] = (int16_t*)malloc16_clear( fp->ofdm_symbol_size*12*2*sizeof(int16_t) );
+    LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n",i,prach_vars->rxsigF[i]);
+    }*/
   
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
     
@@ -1929,7 +1979,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
       pusch_vars[UE_id]->rxdataF_comp[i]     = (int32_t*)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
       pusch_vars[UE_id]->ul_ch_mag[i]  = (int32_t*)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
       pusch_vars[UE_id]->ul_ch_magb[i] = (int32_t*)malloc16_clear( fp->symbols_per_tti*sizeof(int32_t)*fp->N_RB_UL*12 );
-    }
+      }
     
     pusch_vars[UE_id]->llr = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
   } //UE_id
@@ -1944,3 +1994,9 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
   return (0);
 
 }
+
+void install_schedule_handlers(IF_Module_t *if_inst)
+{
+  if_inst->PHY_config_req = phy_config_request;
+  if_inst->schedule_response = schedule_response;
+}
diff --git a/openair1/PHY/INIT/lte_param_init.c b/openair1/PHY/INIT/lte_param_init.c
index 188b7237a41aa399cd29ed1a3f0accbb36b1433b..d510fc7261e908f153e6f1d714982997125f9799 100644
--- a/openair1/PHY/INIT/lte_param_init.c
+++ b/openair1/PHY/INIT/lte_param_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c
index e071a57bc85b88ce52e2ca2be3950587532305ee..2f2bd95617ebcffa60092376e9778935bd3ce877 100644
--- a/openair1/PHY/INIT/lte_parms.c
+++ b/openair1/PHY/INIT/lte_parms.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/INIT/vars.h b/openair1/PHY/INIT/vars.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/INIT/vars.h
+++ b/openair1/PHY/INIT/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
index 4f6763fa070566939d415f7d737784a542a42ff4..7272b7247d93f451754d41eadfa5edfaf2b51057 100644
--- a/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
+++ b/openair1/PHY/LTE_ESTIMATION/adjust_gain.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h
index e1346bb9556e9c04101f2f2314d1ce116ef8756b..aae97ecd9e9c3565120e69b57e9462466672e208 100644
--- a/openair1/PHY/LTE_ESTIMATION/defs.h
+++ b/openair1/PHY/LTE_ESTIMATION/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/extern.h b/openair1/PHY/LTE_ESTIMATION/extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/LTE_ESTIMATION/extern.h
+++ b/openair1/PHY/LTE_ESTIMATION/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/filt96_32.h b/openair1/PHY/LTE_ESTIMATION/filt96_32.h
index 14f80ef1ee82c49e7252c3ee4304efe45d5affd4..929dfd4d85d220919b2828c23cb19dbeb72d7748 100644
--- a/openair1/PHY/LTE_ESTIMATION/filt96_32.h
+++ b/openair1/PHY/LTE_ESTIMATION/filt96_32.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
index 11701aecedca389d7dcb14079555e646bdf27a23..74a844da8ad943806bbd0ffe7e04c52ff63f3c03 100644
--- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
+++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
index 8875b110237615187585954ba99d70421d768c4e..cd032e688fab2ed984f6fc3e8415cb0699dab498 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -227,11 +227,8 @@ int lte_est_timing_advance(LTE_DL_FRAME_PARMS *frame_parms,
 
 int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
 {
-  static int first_run=1;
-  static int max_pos_fil2=0;
   int temp, i, aa, max_pos=0, max_val=0;
-  short Re,Im,coef=24576;
-  short ncoef = 32768 - coef;
+  short Re,Im;
 
   LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   LTE_eNB_PUSCH *eNB_pusch_vars = eNB->pusch_vars[UE_id];
@@ -260,16 +257,9 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* eNB,uint8_t UE_id)
   if (max_pos>frame_parms->ofdm_symbol_size/2)
     max_pos = max_pos-frame_parms->ofdm_symbol_size;
 
-  // filter position to reduce jitter
-  if (first_run == 1) {
-    first_run=0;
-    max_pos_fil2 = max_pos;
-  } else
-    max_pos_fil2 = ((max_pos_fil2 * coef) + (max_pos * ncoef)) >> 15;
-
   //#ifdef DEBUG_PHY
-  LOG_D(PHY,"frame %d: max_pos = %d, max_pos_fil = %d, sync_pos=%d\n",eNB->proc.frame_rx,max_pos,max_pos_fil2,sync_pos);
+  LOG_D(PHY,"frame %d: max_pos = %d, sync_pos=%d\n",eNB->proc.frame_rx,max_pos,sync_pos);
   //#endif //DEBUG_PHY
 
-  return(max_pos_fil2-sync_pos);
+  return max_pos - sync_pos;
 }
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
index 4e7dbb350fee8f4e3bb0b0b666fb60ee535e8286..8dcf4b1c113f55e08ead44a08c02f05dc00e1aab 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index 8edb66ab4c66fc20722261e0f6748c0769566472..fb935e47a856f3c18b5d2069ff3ebaf87b3dea33 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c
index 331140de0afba16c95e6653e2ea93ff00141524d..a64aa797af06b8fe7df5f207675a519c65b9e749 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation_emos.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
index e1ad291eec90551270f04cfbbc648128c365a6c5..f298f8738cfb0d2ad6e7520eaf894afe3e51c5b2 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index 31136b9eb6b325798f0969615a85ea041e7201ed..42409cbaae6c4d9e53029483543adf79430eb14b 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
index 736a9a412f8e24aba9abf366ffe2846c314ad864..cce1e06df4bce134e149558b4b64c8a4b3f95de5 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index a4be2a776ba5ab731cc300c0017cd8e627295373..c7625ba083e43550036165bfb9aeb443bb1af2f0 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
index 64ff012d536266d28e215ee83838466cf9fc5386..d428f8e6e6d9f927da6dbc7be5a0ffd77ebbf501 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
index cd37f19df0ca6c1e10a88dfc6e3af5f16726dfe9..acda933d388b8b66fa94638b509a7bc9a3f7458b 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 17748af0b9e4428ab998160346fd3eb510cf9b43..b495385612c20c37451cba56978163f3029e9a5c 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/pss6144.h b/openair1/PHY/LTE_ESTIMATION/pss6144.h
index 0fb5e1569d026d151ef3b1517f5a7a01c38a6433..d3d5ee0100e4b39db9a0064f9dcb313f2a0ac19f 100644
--- a/openair1/PHY/LTE_ESTIMATION/pss6144.h
+++ b/openair1/PHY/LTE_ESTIMATION/pss6144.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_ESTIMATION/vars.h b/openair1/PHY/LTE_ESTIMATION/vars.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/LTE_ESTIMATION/vars.h
+++ b/openair1/PHY/LTE_ESTIMATION/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h
index 9c12458ff0fe18d7048dfc502a25665a213d6e92..838406b4444222c2ca341f69ad85213fcd27018c 100644
--- a/openair1/PHY/LTE_REFSIG/defs.h
+++ b/openair1/PHY/LTE_REFSIG/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 022e8bb373ca8334e9c6e4faf41595f04d42b693..b715b3ffa293177b2385e94eb2f033e10514974a 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
index bb0133f7fcb2c5e8e8482b93ba874f65d1430289..445c84623cb369d8285b7a0fb7ec6d7835a5aa94 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_mbsfn.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
index 3cf88fbb7639366ae9e696a2be0e983fefdc43f0..ed9ff1f5cd5b35b5fa775a9c76052b71b7c6359f 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c
index b15bc06cbdd1abf309f6c96862ae5dab1eae0d96..c3a3f42456293460213b3bea994b8757b0be37a0 100644
--- a/openair1/PHY/LTE_REFSIG/lte_gold.c
+++ b/openair1/PHY/LTE_REFSIG/lte_gold.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
index f5c809539609e954b975dc7a23e4a899c9e91cbe..66d7fa8fb253c3cb3ed3d6220e475f0d526ab7b3 100644
--- a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
+++ b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
index 52cd65fb924a82305523acfa381f0e210653a969..cddb642b2b41818f8d814dfd3e2eeb0b4e260bd3 100644
--- a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
+++ b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/mod_table.h b/openair1/PHY/LTE_REFSIG/mod_table.h
index 776ae8acf155607b78220a8533b3997617271659..7bdc1f518f1c072c2381e13ec726154af1e66493 100644
--- a/openair1/PHY/LTE_REFSIG/mod_table.h
+++ b/openair1/PHY/LTE_REFSIG/mod_table.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_REFSIG/primary_synch.h b/openair1/PHY/LTE_REFSIG/primary_synch.h
index 717f2e552cab59313b7c02b7ef4347070f4667b6..8152722df321790018ca88df814a820fbc1bf3e3 100644
--- a/openair1/PHY/LTE_REFSIG/primary_synch.h
+++ b/openair1/PHY/LTE_REFSIG/primary_synch.h
@@ -1,3 +1,24 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
 short primary_synch0[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-26120,-19785,11971,-30502,-24020,-22288,32117,6492,31311,9658,-16384,-28378,25100,-21063,-7292,-31946,20429,25618,14948,29158,11971,-30502,31311,9658,25100,-21063,-16384,28377,-24020,22287,32117,6492,-7292,31945,20429,25618,-26120,-19785,-16384,-28378,-16384,28377,-26120,-19785,-32402,4883,31311,-9659,32117,6492,-7292,-31946,32767,-1,25100,-21063,-24020,22287,-32402,4883,-32402,4883,-24020,22287,25100,-21063,32767,-1,-7292,-31946,32117,6492,31311,-9659,-32402,4883,-26120,-19785,-16384,28377,-16384,-28378,-26120,-19785,20429,25618,-7292,31945,32117,6492,-24020,22287,-16384,28377,25100,-21063,31311,9658,11971,-30502,14948,29158,20429,25618,-7292,-31946,25100,-21063,-16384,-28378,31311,9658,32117,6492,-24020,-22288,11971,-30502,-26120,-19785,32767,0,0,0,0,0,0,0,0,0,0,0};
 short primary_synch1[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-31754,-8086,-24020,-22288,2448,32675,-26120,19784,27073,18458,-16384,28377,25100,21062,-29523,14217,-7292,31945,-13477,-29868,-24020,-22288,27073,18458,25100,21062,-16384,-28378,2448,-32676,-26120,19784,-29523,-14218,-7292,31945,-31754,-8086,-16384,28377,-16384,-28378,-31754,-8086,31311,-9659,27073,-18459,-26120,19784,-29523,14217,32767,-1,25100,21062,2448,-32676,31311,-9659,31311,-9659,2448,-32676,25100,21062,32767,0,-29523,14217,-26120,19784,27073,-18459,31311,-9659,-31754,-8086,-16384,-28378,-16384,28377,-31754,-8086,-7292,31945,-29523,-14218,-26120,19784,2448,-32676,-16384,-28378,25100,21062,27073,18458,-24020,-22288,-13477,-29868,-7292,31945,-29523,14217,25100,21062,-16384,28377,27073,18458,-26120,19784,2448,32675,-24020,-22288,-31754,-8086,32767,0,0,0,0,0,0,0,0,0,0,0};
 short primary_synch2[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-31754,8085,-24020,22287,2448,-32676,-26120,-19785,27073,-18459,-16384,-28378,25100,-21063,-29523,-14218,-7292,-31946,-13477,29867,-24020,22287,27073,-18459,25100,-21063,-16384,28377,2448,32675,-26120,-19785,-29523,14217,-7292,-31946,-31754,8085,-16384,-28378,-16384,28377,-31754,8085,31311,9658,27073,18458,-26120,-19785,-29523,-14218,32767,0,25100,-21063,2448,32675,31311,9658,31311,9658,2448,32675,25100,-21063,32767,0,-29523,-14218,-26120,-19785,27073,18458,31311,9658,-31754,8085,-16384,28377,-16384,-28378,-31754,8085,-7292,-31946,-29523,14217,-26120,-19785,2448,32675,-16384,28377,25100,-21063,27073,-18459,-24020,22287,-13477,29867,-7292,-31946,-29523,-14218,25100,-21063,-16384,-28378,27073,-18459,-26120,-19785,2448,-32676,-24020,22287,-31754,8085,32767,-1,0,0,0,0,0,0,0,0,0,0};
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 3a42a4c5eaa038eef619f2dd78a92b88756df9d3..6ec745293fa49dcee059d112939d62e14cba786f 100755
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -43,6 +43,7 @@
 #include "assertions.h" 
 #include "T.h"
 #include "UTIL/LOG/log.h"
+#include "UTIL/LOG/vcd_signal_dumper.h"
 
 //#define DEBUG_DCI_ENCODING 1
 //#define DEBUG_DCI_DECODING 1
@@ -2065,6 +2066,8 @@ void pdcch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
   uint8_t reset;
   uint32_t x1, x2, s=0;
 
+  //LOG_D(PHY, "%s(fp, subframe:%d, e, length:%d)\n", __FUNCTION__, subframe, length);
+
   reset = 1;
   // x1 is set in lte_gold_generic
 
@@ -2216,6 +2219,11 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
   int Msymb2;
   int split_flag=0;
 
+  if (num_dci>0)
+  {
+    //LOG_D(PHY,"%s(num_pdcch_symbols:%d num_dci:%d dci_alloc:%p n_rnti:%04x amp:%d frame_parms:%p txdataF:%p subframe:%d)\n", __FUNCTION__, num_pdcch_symbols, num_dci, dci_alloc, n_rnti, amp, frame_parms, txdataF, subframe);
+  }
+
   switch (frame_parms->N_RB_DL) {
   case 100:
     Msymb2 = Msymb;
@@ -2247,11 +2255,13 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
   }
 
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PCFICH,1);
   generate_pcfich(num_pdcch_symbols,
                   amp,
                   frame_parms,
                   txdataF,
                   subframe);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PCFICH,0);
   wbar[0] = &wbar0[0];
   wbar[1] = &wbar1[0];
   y[0] = &yseq0[0];
@@ -2272,6 +2282,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
 
   e_ptr = e;
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DCI0,1);
 
   // generate DCIs in order of decreasing aggregation level, then common/ue spec
   // MAC is assumed to have ordered the UE spec DCI according to the RNTI-based randomization
@@ -2298,18 +2309,26 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
       }
     }
   }
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DCI0,0);
 
   // Scrambling
-  //  printf("pdcch scrambling\n");
+#ifdef DEBUG_DCI_ENCODING
+  printf("pdcch scrambling\n");
+#endif
+  //LOG_D(PHY, "num_pdcch_symbols:%d mi:%d nquad:%d\n", num_pdcch_symbols, mi, get_nquad(num_pdcch_symbols, frame_parms, mi));
+
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_SCRAMBLING,1);
   pdcch_scrambling(frame_parms,
                    subframe,
                    e,
                    8*get_nquad(num_pdcch_symbols, frame_parms, mi));
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_SCRAMBLING,0);
   //72*get_nCCE(num_pdcch_symbols,frame_parms,mi));
 
 
 
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_MODULATION,1);
   // Now do modulation
   if (frame_parms->nb_antenna_ports_eNB==1)
     gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15);
@@ -2322,6 +2341,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
   printf(" PDCCH Modulation, Msymb %d, Msymb2 %d,gain_lin_QPSK %d\n",Msymb,Msymb2,gain_lin_QPSK);
 #endif
 
+  //LOG_D(PHY,"%s() Msymb2:%d\n", __FUNCTION__, Msymb2);
 
   if (frame_parms->nb_antenna_ports_eNB==1) { //SISO
 
@@ -2368,22 +2388,38 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
 
     }
   }
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_MODULATION,0);
 
 
 #ifdef DEBUG_DCI_ENCODING
   printf(" PDCCH Interleaving\n");
 #endif
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_INTERLEAVING,1);
   //  printf("y %p (%p,%p), wbar %p (%p,%p)\n",y,y[0],y[1],wbar,wbar[0],wbar[1]);
   // This is the interleaving procedure defined in 36-211, first part of Section 6.8.5
   pdcch_interleaving(frame_parms,&y[0],&wbar[0],num_pdcch_symbols,mi);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_INTERLEAVING,0);
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_TX,1);
   mprime=0;
   nsymb = (frame_parms->Ncp==0) ? 14:12;
   re_offset = frame_parms->first_carrier_offset;
 
   // This is the REG allocation algorithm from 36-211, second part of Section 6.8.5
   //  printf("DCI (SF %d) : txdataF %p (0 %p)\n",subframe,&txdataF[0][512*14*subframe],&txdataF[0][0]);
+#ifdef DEBUG_DCI_ENCODING
+  printf("kprime loop - N_RB_DL:%d lprime:num_pdcch_symbols:%d Ncp:%d pcfich:%02x,%02x,%02x,%02x ofdm_symbol_size:%d first_carrier_offset:%d nb_antenna_ports_eNB:%d\n",
+  frame_parms->N_RB_DL, num_pdcch_symbols,frame_parms->Ncp,
+  frame_parms->pcfich_reg[0],
+  frame_parms->pcfich_reg[1],
+  frame_parms->pcfich_reg[2],
+  frame_parms->pcfich_reg[3],
+  frame_parms->ofdm_symbol_size,
+  frame_parms->first_carrier_offset,
+  frame_parms->nb_antenna_ports_eNB
+  );
+#endif
   for (kprime=0; kprime<frame_parms->N_RB_DL*12; kprime++) {
     for (lprime=0; lprime<num_pdcch_symbols; lprime++) {
 
@@ -2500,6 +2536,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
     if (re_offset == (frame_parms->ofdm_symbol_size))
       re_offset = 1;
   } // kprime loop
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_TX,0);
 
   return(num_pdcch_symbols);
 }
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.h b/openair1/PHY/LTE_TRANSPORT/dci.h
index a6926777af8997ba0f4ae017d5a689cd76a5cb7f..0e74324b2c8673b86e3ccb32225ac5ee7f483e2d 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.h
+++ b/openair1/PHY/LTE_TRANSPORT/dci.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index 8a3047b5b2dac3aedd81088398610565f88865c2..8f8dd1e6ffe4fa300dfa09adacbddebf213a02a3 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -801,6 +801,28 @@ void generate_RIV_tables()
 //       n_tilde_PRB(0,1) = (0,2)
 
 
+void check_dlsch(char *file, int line)
+{
+  PHY_VARS_eNB *eNB = RC.eNB[0][0];
+  static char oldbuf[13*NUMBER_OF_UE_MAX+100]="";
+  char buf[13*NUMBER_OF_UE_MAX+100];
+  char *pbuf=buf;
+
+  for (int i=0; i<NUMBER_OF_UE_MAX; i++) {
+    pbuf+=sprintf(pbuf, "[%02d]:%02x:%04x ", i, eNB->dlsch[i][0]->harq_mask, eNB->dlsch[i][0]->rnti);
+  }
+
+  int diff_size = memcmp(oldbuf, buf, strlen(buf));
+  
+  if (diff_size!=0)
+  {
+    LOG_I(PHY,"check_dlsch:%s:%d:%s\n", file, line, buf);
+    LOG_I(PHY,"check_dlsch:%s:%d:%s\n", file, line, oldbuf);
+  }
+
+  memcpy(oldbuf, buf, sizeof(buf));
+}
+
 int8_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type)
 {
   uint8_t i;
@@ -810,8 +832,7 @@ int8_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB,find_type_t type)
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     AssertFatal(eNB->dlsch[i]!=NULL,"eNB->dlsch[%d] is null\n",i);
     AssertFatal(eNB->dlsch[i]!=NULL,"eNB->dlsch[%d][0] is null\n",i);
-    LOG_D(PHY,"searching for rnti %x : UE index %d=> harq_mask %x, rnti %x, first_free_index %d\n",
-          rnti,i,eNB->dlsch[i][0]->harq_mask,eNB->dlsch[i][0]->rnti,first_free_index);
+    LOG_D(PHY,"searching for rnti %x : UE index %d=> harq_mask %x, rnti %x, first_free_index %d\n", rnti,i,eNB->dlsch[i][0]->harq_mask,eNB->dlsch[i][0]->rnti,first_free_index);
     if ((eNB->dlsch[i][0]->harq_mask >0) &&
         (eNB->dlsch[i][0]->rnti==rnti))       return i;
     else if ((eNB->dlsch[i][0]->harq_mask == 0) && (first_free_index==-1)) first_free_index=i;
@@ -861,13 +882,152 @@ uint8_t get_transmission_mode(module_id_t Mod_id, uint8_t CC_id, rnti_t rnti)
 }
 */
 
-void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,nfapi_dl_config_dci_dl_pdu *pdu) {
+void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,nfapi_dl_config_dci_dl_pdu *pdu)
+{
+  LTE_DL_FRAME_PARMS                *fp      = &eNB->frame_parms;
+  uint8_t                           *dci_pdu = &dci_alloc->dci_pdu[0];
+  nfapi_dl_config_dci_dl_pdu_rel8_t *rel8    = &pdu->dci_dl_pdu_rel8;
 
-  LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
+  dci_alloc->firstCCE = rel8->cce_idx;
+  dci_alloc->L        = rel8->aggregation_level;
+  dci_alloc->rnti     = rel8->rnti;
+  dci_alloc->harq_pid = rel8->harq_process;
+  dci_alloc->ra_flag  = 0;
+  dci_alloc->format   = format1A;
 
+  LOG_D(PHY,"NFAPI: DCI format %d, nCCE %d, L %d, rnti %x,harq_pid %d\n",
+        rel8->dci_format,rel8->cce_idx,rel8->aggregation_level,rel8->rnti,rel8->harq_process);
+
+  switch (fp->N_RB_DL) {
+  case 6:
+    if (fp->frame_type == TDD) {
+      dci_alloc->dci_length                         = sizeof_DCI1A_1_5MHz_TDD_1_6_t;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->type     = 1;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->vrb_type = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->mcs      = rel8->mcs_1;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->ndi      = rel8->new_data_indicator_1;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->rballoc  = rel8->resource_block_coding;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->rv       = rel8->redundancy_version_1;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->TPC      = rel8->tpc;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->harq_pid = rel8->harq_process;
+      ((DCI1A_1_5MHz_TDD_1_6_t *)dci_pdu)->dai      = rel8->downlink_assignment_index;
+    } else {
+      dci_alloc->dci_length                         = sizeof_DCI1A_1_5MHz_FDD_t;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->type         = 1;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->vrb_type     = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->mcs          = rel8->mcs_1;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->ndi          = rel8->new_data_indicator_1;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->rballoc      = rel8->resource_block_coding;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->rv           = rel8->redundancy_version_1;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->TPC          = rel8->tpc;
+      ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->harq_pid     = rel8->harq_process;
+      //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    }
+    break;
+  case 25:
+    if (fp->frame_type == TDD) {
+      dci_alloc->dci_length                         = sizeof_DCI1A_5MHz_TDD_1_6_t;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->type       = 1;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->vrb_type   = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->mcs        = rel8->mcs_1;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->ndi        = rel8->new_data_indicator_1;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->rballoc    = rel8->resource_block_coding;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->rv         = rel8->redundancy_version_1;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->TPC        = rel8->tpc;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->harq_pid   = rel8->harq_process;
+      ((DCI1A_5MHz_TDD_1_6_t *)dci_pdu)->dai      = rel8->downlink_assignment_index;
+       //        printf("TDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    } else {
+      dci_alloc->dci_length                         = sizeof_DCI1A_5MHz_FDD_t;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->type           = 1;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->vrb_type       = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->mcs            = rel8->mcs_1;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->ndi            = rel8->new_data_indicator_1;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->rballoc        = rel8->resource_block_coding;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->rv             = rel8->redundancy_version_1;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->TPC            = rel8->tpc;
+      ((DCI1A_5MHz_FDD_t *)dci_pdu)->harq_pid       = rel8->harq_process;
+      //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    }
+    break;
+  case 50:
+    if (fp->frame_type == TDD) {
+      dci_alloc->dci_length                         = sizeof_DCI1A_10MHz_TDD_1_6_t;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->type      = 1;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->vrb_type  = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->mcs       = rel8->mcs_1;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->ndi       = rel8->new_data_indicator_1;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->rballoc   = rel8->resource_block_coding;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->rv        = rel8->redundancy_version_1;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->TPC       = rel8->tpc;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->harq_pid  = rel8->harq_process;
+      ((DCI1A_10MHz_TDD_1_6_t *)dci_pdu)->dai       = rel8->downlink_assignment_index;
+      //        printf("TDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    } else {
+      dci_alloc->dci_length                         = sizeof_DCI1A_10MHz_FDD_t;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->type          = 1;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->vrb_type      = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->mcs           = rel8->mcs_1;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->ndi           = rel8->new_data_indicator_1;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->rballoc       = rel8->resource_block_coding;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->rv            = rel8->redundancy_version_1;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->TPC           = rel8->tpc;
+      ((DCI1A_10MHz_FDD_t *)dci_pdu)->harq_pid      = rel8->harq_process;
+      //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    }
+    break;
+  case 100:
+    if (fp->frame_type == TDD) {
+      dci_alloc->dci_length                         = sizeof_DCI1A_20MHz_TDD_1_6_t;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->type      = 1;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->vrb_type  = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->mcs       = rel8->mcs_1;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->ndi       = rel8->new_data_indicator_1;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->rballoc   = rel8->resource_block_coding;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->rv        = rel8->redundancy_version_1;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->TPC       = rel8->tpc;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->harq_pid  = rel8->harq_process;
+      ((DCI1A_20MHz_TDD_1_6_t *)dci_pdu)->dai       = rel8->downlink_assignment_index;
+      //        printf("TDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    } else {
+      dci_alloc->dci_length                         = sizeof_DCI1A_20MHz_FDD_t;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->type          = 1;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->vrb_type      = rel8->virtual_resource_block_assignment_flag;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->mcs           = rel8->mcs_1;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->ndi           = rel8->new_data_indicator_1;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->rballoc       = rel8->resource_block_coding;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->rv            = rel8->redundancy_version_1;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->TPC           = rel8->tpc;
+      ((DCI1A_20MHz_FDD_t *)dci_pdu)->harq_pid      = rel8->harq_process;
+      //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
+    }
+    break;
+  }
+
+  LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
+        proc->frame_tx, proc->subframe_tx, rel8->rnti);
+}
+
+void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,nfapi_dl_config_dci_dl_pdu *pdu)
+{
+  LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
   uint8_t *dci_pdu = &dci_alloc->dci_pdu[0];
   nfapi_dl_config_dci_dl_pdu_rel8_t *rel8 = &pdu->dci_dl_pdu_rel8;
 
+  /* check if this is a DCI 1A PDCCH order for RAPROC */
+  if (rel8->dci_format == NFAPI_DL_DCI_FORMAT_1A && rel8->rnti_type == 1) {
+    int full_rb;
+    switch (fp->N_RB_DL) {
+    case 6:   full_rb = 63;   break;
+    case 25:  full_rb = 511;  break;
+    case 50:  full_rb = 2047; break;
+    case 100: full_rb = 8191; break;
+    default:  abort();
+    }
+    if (rel8->resource_block_coding == full_rb)
+      return fill_pdcch_order(eNB, proc, dci_alloc, pdu);
+  }
+
   LTE_eNB_DLSCH_t *dlsch0=NULL,*dlsch1=NULL;
   LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL;
   int beamforming_mode = 0;
@@ -902,6 +1062,12 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
   dlsch1_harq                               = dlsch1->harq_processes[rel8->harq_process];
   dlsch1_harq->codeword                     = 1;
   dlsch0->subframe_tx[subframe]             = 1;
+
+  LOG_D(PHY,"NFAPI: dlsch0[rnti:%x] dci_pdu[rnti:%x rnti_type:%d harq_process:%d ndi1:%d] dlsch0_harq[round:%d harq_mask:%x ndi:%d]\n", 
+      dlsch0->rnti, 
+      rel8->rnti, rel8->rnti_type, rel8->harq_process, rel8->new_data_indicator_1,
+      dlsch0_harq->round, dlsch0->harq_mask, dlsch0_harq->ndi);
+
   if (dlsch0->rnti != rel8->rnti) { // if rnti of dlsch is not the same as in the config, this is a new entry
     dlsch0_harq->round=0;
     dlsch0->harq_mask=0;
@@ -918,8 +1084,9 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci
   dlsch0->active        = 1;
   if (rel8->rnti_type == 2)
       dlsch0_harq->round    = 0;
-LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n",rel8->harq_process,dlsch0->harq_mask,dlsch0_harq->round,
-	dlsch0_harq->ndi,rel8->new_data_indicator_1, rel8->rnti_type);
+
+  LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n",rel8->harq_process,dlsch0->harq_mask,dlsch0_harq->round,
+      dlsch0_harq->ndi,rel8->new_data_indicator_1, rel8->rnti_type);
 
   switch (rel8->dci_format) {
 
@@ -958,11 +1125,6 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n"
         ((DCI1A_1_5MHz_FDD_t *)dci_pdu)->harq_pid     = rel8->harq_process;
         //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
       }
-      // check if PDCCH order
-      if (rel8->resource_block_coding == 63) { 
-          dlsch0->active        = 0;
-          return;
-      }
       AssertFatal(rel8->virtual_resource_block_assignment_flag==LOCALIZED,"Distributed RB allocation not done yet\n");
       dlsch0_harq->rb_alloc[0]    = localRIV2alloc_LUT6[rel8->resource_block_coding];
       dlsch0_harq->vrb_type           =  rel8->virtual_resource_block_assignment_flag;
@@ -993,12 +1155,6 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n"
         ((DCI1A_5MHz_FDD_t *)dci_pdu)->harq_pid       = rel8->harq_process;
         //      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
       }
-
-      // check if PDCCH order
-	  if (rel8->resource_block_coding == 511)  {
-          dlsch0->active        = 0;
-          return;
-      }
       AssertFatal(rel8->virtual_resource_block_assignment_flag==LOCALIZED,"Distributed RB allocation not done yet\n");
       dlsch0_harq->rb_alloc[0]    = localRIV2alloc_LUT25[rel8->resource_block_coding];
       dlsch0_harq->vrb_type           =  rel8->virtual_resource_block_assignment_flag;
@@ -1029,11 +1185,6 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n"
         ((DCI1A_10MHz_FDD_t *)dci_pdu)->harq_pid      = rel8->harq_process;
 	//      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
       }
-      // check if PDCCH order
-      if (rel8->resource_block_coding == 2047) {
-          dlsch0->active        = 0;
-          return;
-      }
       AssertFatal(rel8->virtual_resource_block_assignment_flag==LOCALIZED,"Distributed RB allocation not done yet\n");
       dlsch0_harq->rb_alloc[0]     = localRIV2alloc_LUT50_0[rel8->resource_block_coding];
       dlsch0_harq->rb_alloc[1]     = localRIV2alloc_LUT50_1[rel8->resource_block_coding];
@@ -1065,11 +1216,6 @@ LOG_D(PHY,"NFAPI: harq_pid %d harq_mask %x, round %d ndi (%d,%d) rnti type %d\n"
         ((DCI1A_20MHz_FDD_t *)dci_pdu)->harq_pid      = rel8->harq_process;
 	//      printf("FDD 1A: mcs %d, rballoc %x,rv %d, NPRB %d\n",mcs,rballoc,rv,NPRB);
       }
-      // check if PDCCH order
-      if (rel8->resource_block_coding == 8191) {
-          dlsch0->active        = 0;
-          return;
-      }
       AssertFatal(rel8->virtual_resource_block_assignment_flag==LOCALIZED,"Distributed RB allocation not done yet\n");
       dlsch0_harq->rb_alloc[0]      = localRIV2alloc_LUT100_0[rel8->resource_block_coding];
       dlsch0_harq->rb_alloc[1]      = localRIV2alloc_LUT100_1[rel8->resource_block_coding];
@@ -2287,16 +2433,17 @@ void fill_dci0(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_alloc,
     T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
     T_INT(pdu->dci_pdu_rel8.resource_block_start),
     T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
-    T_INT(-1 /* TODO: get TBS */),
+    T_INT(get_TBS_UL(mcs, pdu->dci_pdu_rel8.number_of_resource_block) * 8),
     T_INT(pdu->dci_pdu_rel8.aggregation_level),
     T_INT(pdu->dci_pdu_rel8.cce_index));
 #endif
 
   void *dci_pdu = (void*)dci_alloc->dci_pdu;
 
-  LOG_D(PHY,"Filling DCI0 with cqi %d, mcs %d, hopping %d, rballoc %x (%d,%d) ndi %d TPC %d cshift %d\n",cqi_req,
-	mcs,hopping,rballoc,pdu->dci_pdu_rel8.resource_block_start,pdu->dci_pdu_rel8.number_of_resource_block,
-	ndi,TPC,cshift);
+  LOG_D(PHY,"Filling DCI0 with rnti %x cqi %d, mcs %d, hopping %d, rballoc %x (%d,%d) ndi %d TPC %d cshift %d\n",
+      pdu->dci_pdu_rel8.rnti,cqi_req, mcs,hopping,rballoc,
+      pdu->dci_pdu_rel8.resource_block_start,
+      pdu->dci_pdu_rel8.number_of_resource_block, ndi,TPC,cshift);
 
   dci_alloc->format   = format0;
   dci_alloc->firstCCE = pdu->dci_pdu_rel8.cce_index;
@@ -2456,10 +2603,10 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
   ulsch->harq_processes[harq_pid]->dci_alloc                             = 1;
   ulsch->harq_processes[harq_pid]->rar_alloc                             = 0;
   ulsch->harq_processes[harq_pid]->n_DMRS                                = ulsch_pdu->ulsch_pdu_rel8.cyclic_shift_2_for_drms;
-
+  
   ulsch->harq_processes[harq_pid]->Nsymb_pusch                           = 12-(frame_parms->Ncp<<1)-(use_srs==0?0:1);
   ulsch->harq_processes[harq_pid]->srs_active                            = use_srs;
-
+  
   //Mapping of cyclic shift field in DCI format0 to n_DMRS2 (3GPP 36.211, Table 5.5.2.1.1-1)
   if(ulsch->harq_processes[harq_pid]->n_DMRS == 0)
     ulsch->harq_processes[harq_pid]->n_DMRS2 = 0;
@@ -2477,23 +2624,25 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
     ulsch->harq_processes[harq_pid]->n_DMRS2 = 10;
   else if(ulsch->harq_processes[harq_pid]->n_DMRS == 7)
     ulsch->harq_processes[harq_pid]->n_DMRS2 = 9;
-
-  LOG_D(PHY,"[eNB %d][PUSCH %d] Programming PUSCH with n_DMRS2 %d (cshift %d) for Frame %d, Subframe %d\n",
-	eNB->Mod_id,harq_pid,ulsch->harq_processes[harq_pid]->n_DMRS2,ulsch->harq_processes[harq_pid]->n_DMRS,
-	frame,subframe);
-
+  
+  LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d\n",
+	eNB->Mod_id,harq_pid,frame,subframe,
+        ulsch->harq_processes[harq_pid]->n_DMRS2,
+        ulsch->harq_processes[harq_pid]->n_DMRS,
+	ulsch->harq_processes[harq_pid]->ndi, ulsch_pdu->ulsch_pdu_rel8.new_data_indication, new_ulsch, ulsch->harq_processes[harq_pid]->status);
+  
   ulsch->harq_processes[harq_pid]->rvidx = ulsch_pdu->ulsch_pdu_rel8.redundancy_version;
   ulsch->harq_processes[harq_pid]->Qm    = ulsch_pdu->ulsch_pdu_rel8.modulation_type;
-  // Set O_ACK to 0 by default, will be set of DLSCH is scheduled and needs to be
+  // Set O_ACK to 0 by default, will be set of DLSCH is scheduled and needs to be 
   ulsch->harq_processes[harq_pid]->O_ACK         = 0;
 
   if ((ulsch->harq_processes[harq_pid]->status == SCH_IDLE) ||
       (ulsch->harq_processes[harq_pid]->ndi    != ulsch_pdu->ulsch_pdu_rel8.new_data_indication) ||
 	  (new_ulsch == TRUE)){
     ulsch->harq_processes[harq_pid]->status        = ACTIVE;
-
+    
     ulsch->harq_processes[harq_pid]->TBS           = ulsch_pdu->ulsch_pdu_rel8.size<<3;
-
+    
     ulsch->harq_processes[harq_pid]->Msc_initial   = 12*ulsch_pdu->ulsch_pdu_rel8.number_of_resource_blocks;
     ulsch->harq_processes[harq_pid]->Nsymb_initial = ulsch->harq_processes[harq_pid]->Nsymb_pusch;
     ulsch->harq_processes[harq_pid]->round         = 0;
@@ -2503,23 +2652,25 @@ void fill_ulsch(PHY_VARS_eNB *eNB,nfapi_ul_config_ulsch_pdu *ulsch_pdu,int frame
     // will be set if MAC has activated ULSCH_CQI_RI_PDU or ULSCH_CQI_HARQ_RI_PDU
     ulsch->harq_processes[harq_pid]->Or1           = 0;
     ulsch->harq_processes[harq_pid]->Or2           = 0;
-  }
+  } 
   else  ulsch->harq_processes[harq_pid]->round++;
 
   ulsch->rnti = ulsch_pdu->ulsch_pdu_rel8.rnti;
-  LOG_D(PHY,"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
+  LOG_D(PHY,"Filling ULSCH %x (UE_id %d) (new_ulsch %d) for Frame %d, Subframe %d : harq_pid %d, status %d, handled %d, first_rb %d, nb_rb %d, rvidx %d, Qm %d, TBS %d, round %d \n",
 	ulsch->rnti,
         UE_id,
         new_ulsch,
 	frame,
 	subframe,
 	harq_pid,
+	ulsch->harq_processes[harq_pid]->status,
+	ulsch->harq_processes[harq_pid]->handled,
 	ulsch->harq_processes[harq_pid]->first_rb,
 	ulsch->harq_processes[harq_pid]->nb_rb,
 	ulsch->harq_processes[harq_pid]->rvidx,
 	ulsch->harq_processes[harq_pid]->Qm,
 	ulsch->harq_processes[harq_pid]->TBS,
-	ulsch->harq_processes[harq_pid]->round);
+	ulsch->harq_processes[harq_pid]->round);  
 }
 
 int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci)
@@ -2607,7 +2758,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci)
         break;
 
       case 25:
-        LOG_D(PHY,"DCI format0 (FDD, 5MHz), rnti %x (%x): hopping %d, rb_alloc %x, mcs %d, ndi %d, TPC %d, cshift %d, cqi_req %d\n",
+        LOG_I(PHY,"DCI format0 (FDD, 5MHz), rnti %x (%x): hopping %d, rb_alloc %x, mcs %d, ndi %d, TPC %d, cshift %d, cqi_req %d\n",
               dci->rnti,
               ((uint32_t*)&dci->dci_pdu[0])[0],
               ((DCI0_5MHz_FDD_t *)&dci->dci_pdu[0])->hopping,
@@ -6283,7 +6434,7 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
   uint8_t ret = 255;
 
   if (frame_parms->frame_type == FDD) {
-    ret = (((frame<<1)+subframe)&7);
+    ret = (((frame*10)+subframe)&7);
   } else {
 
     switch (frame_parms->tdd_config) {
@@ -6374,6 +6525,8 @@ uint8_t pdcch_alloc2ul_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t n)
   else
     ul_subframe = ((n+4)%10);
 
+  if (subframe_select(frame_parms,ul_subframe) != SF_UL) return(255);
+
   LOG_D(PHY, "subframe %d: PUSCH subframe = %d\n", n, ul_subframe);
   return ul_subframe;
 }
@@ -6415,7 +6568,7 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui
   else
     ul_frame = (frame+(n>=6 ? 1 : 0));
 
-  LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, n, ul_frame);
+  //LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, n, ul_frame);
   return ul_frame % 1024;
 }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h
index 1413fbe2aa00303beb3a316e154eee24b1286589..f1f4be3072c86b166168fc906a061b599aa0cfc5 100644
--- a/openair1/PHY/LTE_TRANSPORT/defs.h
+++ b/openair1/PHY/LTE_TRANSPORT/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index f4a06837b9eb13bfe7ab11452536e44005a60165..dbfae80840c4c76fe605fa11fb8023cfb4877b13 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
index d23a7d7e21ab40e546389a949c4837e3bd76d5c7..271de54795337416bf1ba5ec513bfda37dbcb7b8 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index dfd2b2af5f32648c9704a489b2669fc3b74fcdca..f53e83dbaf0bbea9e3ed820ef47a3bbff230f00f 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
index 26c76c553125d090605b813b80b2e60c3354ebd3..8ea922b85c7ea13725aab5d113cdceecc1adaaef 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
index cda5ad0f55ee8afbe37bf4d3536cea17fb3ed575..588adfbc55c65f736444797013a08ab37ade4a65 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 46572c52d69b1b3d54ce071896169e5fb8b26d6f..49b41615f4cd91d43ed5b0f59ae6f2a1a90d3fca 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -38,7 +38,7 @@
 #include "defs.h"
 #include "UTIL/LOG/vcd_signal_dumper.h"
 
-//#define DEBUG_DLSCH_MODULATION
+//#define DEBUG_DLSCH_MODULATION 1
 
 //#define is_not_pilot(pilots,re,nushift,use2ndpilots) ((pilots==0) || ((re!=nushift) && (re!=nushift+6)&&((re!=nushift+3)||(use2ndpilots==1))&&((re!=nushift+9)||(use2ndpilots==1)))?1:0)
 
@@ -78,7 +78,7 @@ uint8_t is_not_UEspecRS(int8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp,
         if ((re!=nushift+offset) && (re!=((nushift+4+offset)%12)) &&  (re!=((nushift+8+offset)%12)))
           return(1);
         /*else{
-          printf("(is_no_UEspec_RS):lprime=%d, re=%d, nushift=%d, offset=%d\n",lprime, re,nushift,offset);
+          LOG_I(PHY,"(is_no_UEspec_RS):lprime=%d, re=%d, nushift=%d, offset=%d\n",lprime, re,nushift,offset);
         }*/
       } else {
         if ((re!=nushift+offset) && (re!=((nushift+3+offset)%12)) && (re!=((nushift+6+offset)%12)) && (re!=((nushift+9+offset)%12)))
@@ -270,7 +270,7 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
 
 
   if (skip_dc == 0) {
-    //    printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
+    //    LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
     for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
          re<12;
          x0p+=4) {
@@ -281,7 +281,7 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
       qam16_table_offset_im+=x0p[3];
       ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qam16_table_offset_re];
       ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];
-      //      printf("pilots: re %d, tti_offset %d, P1_SHIFT %d\n",re,tti_offset,P1_SHIFT[re+1]);
+      //      LOG_I(PHY,"pilots: re %d, tti_offset %d, P1_SHIFT %d\n",re,tti_offset,P1_SHIFT[re+1]);
       tti_offset+=P1_SHIFT[re+1];
       re+=P1_SHIFT[re+1];
     }
@@ -497,7 +497,7 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
 
 
   if (skip_dc == 0) {
-    //    printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
+    //    LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
     for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
          re<12;
          x0p+=6) {
@@ -510,7 +510,7 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
       qam64_table_offset_im+=x0p[5];
       ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qam64_table_offset_re];
       ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam64_table_offset_im];
-      //      printf("pilots: re %d, tti_offset %d, P1_SHIFT %d\n",re,tti_offset,P1_SHIFT[re+1]);
+      //      LOG_I(PHY,"pilots: re %d, tti_offset %d, P1_SHIFT %d\n",re,tti_offset,P1_SHIFT[re+1]);
       tti_offset+=P1_SHIFT[re+1];
       re+=P1_SHIFT[re+1];
     }
@@ -667,11 +667,11 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
 
   if (dlsch0_harq != NULL){
     #ifdef DEBUG_DLSCH_MODULATION
-      printf("allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]);
+      LOG_I(PHY,"allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]);
     #endif
   } else{
     #ifdef DEBUG_DLSCH_MODULATION
-      printf("allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]);
+      LOG_I(PHY,"allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]);
     #endif
   }
 
@@ -685,7 +685,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
 
 
   for (re=first_re; re<last_re; re++) {
-  // printf("element %d precoder_index for allocation %d\n",re, precoder_index );
+  // LOG_I(PHY,"element %d precoder_index for allocation %d\n",re, precoder_index );
 
     if ((skip_dc == 1) && (re==6))
       re_off=re_off - frame_parms->ofdm_symbol_size+1;
@@ -695,7 +695,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
       //check that RE is not from Cell-specific RS
 
     if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==1) {
-      //printf("re %d (jj %d)\n",re,*jj);
+      //LOG_I(PHY,"re %d (jj %d)\n",re,*jj);
 
 
       if (mimo_mode == SISO) {  //SISO mapping
@@ -705,7 +705,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
         case 2:  //QPSK
 
 
-          //printf("re %d %d(%d) : %d,%d => ",re,tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+          //LOG_I(PHY,"re %d %d(%d) : %d,%d => ",re,tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
           ((int16_t*)&txdataF[0][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i
 
           *jj = *jj + 1;
@@ -971,12 +971,12 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
             break;
 
           case 2:  //QPSK
-            //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+            //LOG_I(PHY,"%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
             xx0_re = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
             *jj = *jj + 1;
             xx0_im = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
             *jj = *jj + 1;
-            //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+            //LOG_I(PHY,"%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
             break;
 
           case 4:  //16QAM
@@ -1042,12 +1042,12 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
             break;
 
           case 2:  //QPSK
-            //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+            //LOG_I(PHY,"%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
             xx1_re = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
             *jj2 = *jj2 + 1;
             xx1_im = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
             *jj2 = *jj2 + 1;
-            //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+            //LOG_I(PHY,"%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
             break;
 
           case 4:  //16QAM
@@ -1114,7 +1114,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           ((int16_t *)&txdataF[0][tti_offset])[1]+=((xx0_im+xx1_im)>>1);
           ((int16_t *)&txdataF[1][tti_offset])[1]+=(s*((xx0_im-xx1_im)>>1));
           /*
-          printf("CDD: xx0 (%d,%d), xx1(%d,%d), s(%d), txF[0] (%d,%d), txF[1] (%d,%d)\n",
+          LOG_I(PHY,"CDD: xx0 (%d,%d), xx1(%d,%d), s(%d), txF[0] (%d,%d), txF[1] (%d,%d)\n",
            xx0_re,xx0_im,xx1_re,xx1_im, s, ((int16_t *)&txdataF[0][tti_offset])[0],((int16_t *)&txdataF[0][tti_offset])[1],
            ((int16_t *)&txdataF[1][tti_offset])[0],((int16_t *)&txdataF[1][tti_offset])[1]);
           */
@@ -1244,7 +1244,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           precoder_index1 = 3; //[1 -j]
         }
         else {
-         printf("problem with precoder in TM4\n");
+         LOG_I(PHY,"problem with precoder in TM4\n");
           return(-1);
         }
 
@@ -1263,7 +1263,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15);
           ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15);
 
-          //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+          //LOG_I(PHY,"%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
 
           if (frame_parms->nb_antenna_ports_eNB == 2) {
             layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index0);
@@ -1466,7 +1466,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
               ((int16_t*)&txdataF[5][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
               *jj = *jj + 1;
 
-              //printf("%d(%d) : %d,%d =>
+              //LOG_I(PHY,"%d(%d) : %d,%d =>
               //",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]);
               break;
 
@@ -1545,7 +1545,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           }
         } else {
           //precoding UE spec RS
-          //printf("precoding UE spec RS\n");
+          //LOG_I(PHY,"precoding UE spec RS\n");
 
           ind = 3*lprime*dlsch0_harq->nb_rb+mprime2;
           ind_dword = ind>>4;
@@ -1563,7 +1563,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           switch (mod_order0) {
           case 2:  //QPSK
 
-            //    printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+            //    LOG_I(PHY,"%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
             for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) {
               ((int16_t*)&txdataF[layer][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i
               *jj = *jj + 1;
@@ -1651,7 +1651,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
           }
         }
       } else if (mimo_mode>=TM9_10) {
-        printf("allocate_REs_in_RB() [dlsch.c] : ERROR, unknown mimo_mode %d\n",mimo_mode);
+        LOG_I(PHY,"allocate_REs_in_RB() [dlsch.c] : ERROR, unknown mimo_mode %d\n",mimo_mode);
         return(-1);
       }
     }
@@ -1686,7 +1686,7 @@ int allocate_REs_in_RB_MCH(int32_t **txdataF,
   uint8_t first_re,last_re;
   int inc;
 #ifdef DEBUG_DLSCH_MODULATION
-  printf("allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d, gain_lin_QPSK %d,txdataF %p\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj],gain_lin_QPSK,&txdataF[0][symbol_offset]);
+  LOG_I(PHY,"allocate_re_MCH (mod %d): symbol_offset %d re_offset %d (%d), jj %d -> %d,%d, gain_lin_QPSK %d,txdataF %p\n",mod_order,symbol_offset,re_offset,skip_dc,*jj, x0[*jj], x0[1+*jj],gain_lin_QPSK,&txdataF[0][symbol_offset]);
 #endif
 
   last_re=12;
@@ -1707,7 +1707,7 @@ int allocate_REs_in_RB_MCH(int32_t **txdataF,
 
     tti_offset = symbol_offset + re_off + re;
 
-    //printf("re %d (jj %d)\n",re,*jj);
+    //LOG_I(PHY,"re %d (jj %d)\n",re,*jj);
     *re_allocated = *re_allocated + 1;
 
 
@@ -1715,7 +1715,7 @@ int allocate_REs_in_RB_MCH(int32_t **txdataF,
 
       case 2:  //QPSK
 
-      //            printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+      //            LOG_I(PHY,"%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
       ((int16_t*)&txdataF[4][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i
 
       *jj = *jj + 1;
@@ -1724,7 +1724,7 @@ int allocate_REs_in_RB_MCH(int32_t **txdataF,
 
       *jj = *jj + 1;
 
-      //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
+      //LOG_I(PHY,"%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
       break;
 
 
@@ -1931,7 +1931,7 @@ inline int check_skip(int rb,int subframe_offset,LTE_DL_FRAME_PARMS *frame_parms
 inline int check_skiphalf(int rb,int subframe_offset,LTE_DL_FRAME_PARMS *frame_parms,int l,int nsymb) __attribute__((always_inline));
 inline int check_skiphalf(int rb,int subframe_offset,LTE_DL_FRAME_PARMS *frame_parms,int l,int nsymb) {
 
-  //  printf("check_skiphalf : rb %d, subframe_offset %d,l %d, nsymb %d\n",rb,subframe_offset,l,nsymb);
+  //  LOG_I(PHY,"check_skiphalf : rb %d, subframe_offset %d,l %d, nsymb %d\n",rb,subframe_offset,l,nsymb);
 
   if ((frame_parms->N_RB_DL&1) == 1) { // ODD N_RB_DL
 
@@ -2154,19 +2154,19 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
   re_allocated=0;
 
 
-  //  printf("num_pdcch_symbols %d, nsymb %d\n",num_pdcch_symbols,nsymb);
+  //  LOG_I(PHY,"num_pdcch_symbols %d, nsymb %d\n",num_pdcch_symbols,nsymb);
   for (l=num_pdcch_symbols; l<nsymb; l++) {
 
   if (dlsch0 != NULL ) {
 #ifdef DEBUG_DLSCH_MODULATION
-    printf("Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %lx, mod0 %d, mod1 %d, rb_alloc[0] %d) in %d\n",
+    LOG_I(PHY,"Generating DLSCH (harq_pid %d,mimo %d, pmi_alloc0 %lx, mod0 %d, mod1 %d, rb_alloc[0] %d)\n",
             harq_pid,
             dlsch0_harq->mimo_mode,
             pmi2hex_2Ar2(dlsch0_harq->pmi_alloc),
             mod_order0,
             mod_order1,
-            rb_alloc[0],
-            len);
+            rb_alloc[0]
+            );
 #endif
   }
 
@@ -2216,6 +2216,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 	for (eNB_id=0;eNB_id<ru->num_eNB;eNB_id++){
 	  if (phy_vars_eNB == ru->eNB_list[eNB_id]) {
 	    for (aa=0;aa<ru->nb_tx;aa++){
+              LOG_I(PHY,"ru_id:%d eNB_id:%d aa:%d memcpy(ru->beam_weights, dlsch0->ue_spec_bf_weights[ru_id][0],)\n", ru_id, eNB_id, aa);
 	      memcpy(ru->beam_weights[eNB_id][5][aa],
 		     dlsch0->ue_spec_bf_weights[ru_id][0],
 		     frame_parms->ofdm_symbol_size*sizeof(int32_t));
@@ -2233,7 +2234,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 
     if (pilots>0) {  // compute pilot arrays, could be done statically if performance suffers
       if (frame_parms->nb_antenna_ports_eNB == 1) {
-	//	printf("l %d, nushift %d, offset %d\n",l,frame_parms->nushift,offset);
+	//	LOG_I(PHY,"l %d, nushift %d, offset %d\n",l,frame_parms->nushift,offset);
 	for (i=0,i2=0;i<12;i++) {
 	  if ((i!=(frame_parms->nushift+offset)) && (i!=((frame_parms->nushift+6+offset)%12)))
 	    P1_SHIFT[i2++]=1;
@@ -2340,7 +2341,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 
     //for (aa=0;aa<frame_parms->nb_antennas_tx;aa++)
     //memset(&txdataF[aa][symbol_offset],0,frame_parms->ofdm_symbol_size<<2);
-    //printf("symbol_offset %d,subframe offset %d : pilots %d\n",symbol_offset,subframe_offset,pilots);
+    //LOG_I(PHY,"symbol_offset %d,subframe offset %d : pilots %d\n",symbol_offset,subframe_offset,pilots);
     for (rb=0; rb<frame_parms->N_RB_DL; rb++) {
 
       if (rb < 32)
@@ -2371,7 +2372,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 
       if (dlsch1) {
         if (dlsch1_harq->Nlayers>1) {
-          printf("Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
+          LOG_I(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
           return(-1);
         }
       }
@@ -2379,7 +2380,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 
 
       if (rb_alloc_ind > 0) {
-        //    printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj);
+        //    LOG_I(PHY,"Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj);
 
       if (dlsch0 != NULL) {
         get_pmi_temp = get_pmi(frame_parms->N_RB_DL,
@@ -2419,7 +2420,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
             mprime +=3+frame_parms->Ncp;
       }
       else {
-        //      printf("Unallocated rb %d/symbol %d, re_offset %d, jj %d\n",rb,l,re_offset,jj);
+        //      LOG_I(PHY,"Unallocated rb %d/symbol %d, re_offset %d, jj %d\n",rb,l,re_offset,jj);
       }
       re_offset+=12; // go to next RB
 
@@ -2436,9 +2437,9 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
 
 #ifdef DEBUG_DLSCH_MODULATION
   if (dlsch0 != NULL){
-    printf("generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset));
+    LOG_I(PHY,"generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset,1));
   }else{
-    printf("generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch1_harq->nb_rb,dlsch1_harq->rb_alloc,mod_order1,Nl1,2,0,subframe_offset));
+    LOG_I(PHY,"generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch1_harq->nb_rb,dlsch1_harq->rb_alloc,mod_order1,Nl1,2,0,subframe_offset,1));
   }
 #endif
 
@@ -2493,7 +2494,7 @@ int dlsch_modulation_SIC(int32_t **sic_buffer,
 
       jj = jj + 1;
 
-      //printf("recon %d,%d\n",((int16_t*)&sic_buffer[0][i])[0],((int16_t*)&sic_buffer[0][i])[1]);
+      //LOG_I(PHY,"recon %d,%d\n",((int16_t*)&sic_buffer[0][i])[0],((int16_t*)&sic_buffer[0][i])[1]);
       i++;
 
       break;
@@ -2580,7 +2581,7 @@ int dlsch_modulation_SIC(int32_t **sic_buffer,
 
 
 #ifdef DEBUG_DLSCH_MODULATION
-  printf("generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset,1/*transmission mode*/));
+  LOG_I(PHY,"generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset,1/*transmission mode*/));
 #endif
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_MODULATION, VCD_FUNCTION_OUT);
@@ -2618,11 +2619,11 @@ int mch_modulation(int32_t **txdataF,
   jj=0;
   re_allocated=0;
 
-  //  printf("num_pdcch_symbols %d, nsymb %d\n",num_pdcch_symbols,nsymb);
+  //  LOG_I(PHY,"num_pdcch_symbols %d, nsymb %d\n",num_pdcch_symbols,nsymb);
   for (l=2; l<nsymb_pmch; l++) {
 
 #ifdef DEBUG_DLSCH_MODULATION
-    printf("Generating MCH (mod %d) in subframe %d for symbol %d\n",mod_order, subframe_offset,l);
+    LOG_I(PHY,"Generating MCH (mod %d) in subframe %d for symbol %d\n",mod_order, subframe_offset,l);
 #endif
 
     re_offset = frame_parms->first_carrier_offset;
@@ -2647,7 +2648,7 @@ int mch_modulation(int32_t **txdataF,
       else
         qam_table_s = NULL;
 
-      //printf("Allocated rb %d, subframe_offset %d,amp %d\n",rb,subframe_offset,amp);
+      //LOG_I(PHY,"Allocated rb %d, subframe_offset %d,amp %d\n",rb,subframe_offset,amp);
       allocate_REs_in_RB_MCH(txdataF,
                              &jj,
                              re_offset,
@@ -2674,7 +2675,7 @@ int mch_modulation(int32_t **txdataF,
   }
 
 #ifdef DEBUG_DLSCH_MODULATION
-  printf("generate_dlsch(MCH) : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch->harq_processes[0]->nb_rb,dlsch->harq_processes[0]->rb_alloc,mod_order,1,2,0,subframe_offset,1/*transmission mode*/));
+  LOG_I(PHY,"generate_dlsch(MCH) : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch->harq_processes[0]->nb_rb,dlsch->harq_processes[0]->rb_alloc,mod_order,1,2,0,subframe_offset,1/*transmission mode*/));
 #endif
 
   return (re_allocated);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
index 5eeb661f8cb4dba068ab9a6f36b40424c3855b4f..d90f4c66d255158e35a820602f3140c55e8b69bc 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h
index 5428aa3f832cd74d19bcf21d5f673aed91464221..54803387284b1d31805b2a609b73a05a3791576e 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h
index 10ac5f866b60c173ae48c22b79a42c371b47dae4..9673ba15b503df82ee7ca7befb7f09d1bd2e6fd0 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_tbs_full.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
index 861a25fabb4e505a524ed9462f0a3bebe168ce06..2a94d77b8e0a22d207077fb75ba5f34e97272b78 100644
--- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/extern.h b/openair1/PHY/LTE_TRANSPORT/extern.h
index af4dc20df611b1bff4d66b9e575ccb70411c6f93..e791bec9a0c27f45fd047acc46f510d590684f69 100644
--- a/openair1/PHY/LTE_TRANSPORT/extern.h
+++ b/openair1/PHY/LTE_TRANSPORT/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/group_hopping.c b/openair1/PHY/LTE_TRANSPORT/group_hopping.c
index 9cbdfad39ff0bff094be640bfe584d77631d99c6..a7c8921c2ca0c10a76b666c9b79995b0fb8e10c1 100644
--- a/openair1/PHY/LTE_TRANSPORT/group_hopping.c
+++ b/openair1/PHY/LTE_TRANSPORT/group_hopping.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
index 6024f859c9d3d7838624141ecc36f803566f7259..4528766676137ec8b7b84c5a21380fa11328d2b0 100644
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -67,11 +67,12 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
   if (ru->idx==0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_SEND_IF4, 1 );   
 
   if (packet_type == IF4p5_PDLFFT) {
-    LOG_D(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
+    //LOG_D(PHY,"send DL_IF4p5: RU %d frame %d, subframe %d\n",ru->idx,frame,subframe);
 
     if (subframe_select(fp,subframe)==SF_S)
       nsym=fp->dl_symbols_in_S_subframe;
 
+
     db_fulllength = 12*fp->N_RB_DL;
     db_halflength = (db_fulllength)>>1;
     slotoffsetF = 1;//(subframe)*(fp->ofdm_symbol_size)*((fp->Ncp==1) ? 12 : 14) + 1;
@@ -137,10 +138,9 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) {
 
     if (packet_type == IF4p5_PULFFT) {
 
-      for (symbol_id=fp->symbols_per_tti-nsym; symbol_id<fp->symbols_per_tti; symbol_id++) {	     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SEND_IF4_SYMBOL, symbol_id );
+      for (symbol_id=fp->symbols_per_tti-nsym; symbol_id<fp->symbols_per_tti; symbol_id++) {	     
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SEND_IF4_SYMBOL, symbol_id );
 	VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_COMPR_IF, 1 );		
-	LOG_D(PHY,"IF4p5_PULFFT: frame %d, subframe %d, symbol %d: %d dB\n",frame,subframe,symbol_id,
-	      dB_fixed(signal_energy((int32_t*)&rxdataF[0][blockoffsetF],db_halflength)));
 
 	for (element_id=0; element_id<db_halflength; element_id++) {
 	  i = (uint16_t*) &rxdataF[0][blockoffsetF+element_id];
@@ -353,8 +353,8 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint
              PRACH_BLOCK_SIZE_BYTES);
     }
 
-    LOG_D(PHY,"PRACH_IF4p5: CC_id %d : frame %d, subframe %d => %d dB\n",ru->idx,*frame,*subframe,
-	  dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839)));
+    //LOG_D(PHY,"PRACH_IF4p5: CC_id %d : frame %d, subframe %d => %d dB\n",ru->idx,*frame,*subframe,
+	//  dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839)));
     for (idx=0;idx<ru->num_eNB;idx++) ru->wakeup_prach_eNB(ru->eNB_list[idx],ru,*frame,*subframe);
 
   } else if (*packet_type == IF4p5_PULTICK) {
diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h
index 830c580eb0e3e98655ecf423d1085d1be9256f33..a251c62d0d16673dcbc8649d0392a3ce1d1afc99 100644
--- a/openair1/PHY/LTE_TRANSPORT/if4_tools.h
+++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/if5_tools.c b/openair1/PHY/LTE_TRANSPORT/if5_tools.c
index 72253742e20a6d97c89106fa762351b4fc965878..b160318a6ee9899366430f656c2f300582a53251 100644
--- a/openair1/PHY/LTE_TRANSPORT/if5_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/if5_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/if5_tools.h b/openair1/PHY/LTE_TRANSPORT/if5_tools.h
index f1150cd4d9376dd61a4b9985764ab8f6251fdbf7..84ad5305261b2fa29bbc6fb20aec20f9013715c4 100644
--- a/openair1/PHY/LTE_TRANSPORT/if5_tools.h
+++ b/openair1/PHY/LTE_TRANSPORT/if5_tools.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
index ab66c6fc5481c8f5a677a877bcc017e4b15cf47a..d1880b0c554fedbd746797edd106fb60f19b3c5f 100644
--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c
index bf206bd318492d65163d3605d53a68053c75f5a0..910610b9694c806262928ccd891a5d38f7128150 100644
--- a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c
+++ b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h b/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h
index be7f6a7529a1eddf24e36300e0bc59f0cb345340..59959a90fd3b8203cb59a52c963a5e30229ba8da 100644
--- a/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h
+++ b/openair1/PHY/LTE_TRANSPORT/mcs_tbs_tools.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c
index 603c92d69f121b8384d6eda2c8d7bd5e1121200c..226d5ef0ca34842d9116e67b08b378c852366f48 100644
--- a/openair1/PHY/LTE_TRANSPORT/pbch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pbch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -174,6 +174,8 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch,
   pbch_E  = (frame_parms->Ncp==NORMAL) ? 1920 : 1728; //RE/RB * #RB * bits/RB (QPSK)
   //  pbch_E_bytes = pbch_coded_bits>>3;
 
+  LOG_D(PHY,"%s(eNB_pbch:%p txdataF:%p amp:%d frame_parms:%p pbch_pdu:%p frame_mod4:%d)\n", __FUNCTION__, eNB_pbch, txdataF, amp, frame_parms, pbch_pdu, frame_mod4==0);
+
   if (frame_mod4==0) {
     bzero(pbch_a,PBCH_A>>3);
     bzero(eNB_pbch->pbch_e,pbch_E);
diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c
index 83b3f7331f6a038caab7f62eb7999efc9629d15f..b7e24cb87dad212b71f461996a6a6a89f02468fa 100644
--- a/openair1/PHY/LTE_TRANSPORT/pcfich.c
+++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pch.c b/openair1/PHY/LTE_TRANSPORT/pch.c
index f3dd046373c7bb3183ad304363ef5b75fcef05a5..600c5215bdd5c4bbde741ff86b4dad7196620633 100644
--- a/openair1/PHY/LTE_TRANSPORT/pch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/phich.c b/openair1/PHY/LTE_TRANSPORT/phich.c
index 0f6270956c174ab846be74653634e7887d5266aa..6e955322b8dc1331d8acb8101d7288fa14111202 100644
--- a/openair1/PHY/LTE_TRANSPORT/phich.c
+++ b/openair1/PHY/LTE_TRANSPORT/phich.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -162,7 +162,7 @@ int phich_frame2_pusch_frame(LTE_DL_FRAME_PARMS *frame_parms, int frame, int sub
     pusch_frame = (frame);
   }
 
-  LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, subframe, pusch_frame);
+  //LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, subframe, pusch_frame);
   return pusch_frame % 1024;
 }
 
@@ -184,8 +184,8 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     else if (subframe == 1)
       pusch_subframe = (7);
     else {
-      LOG_E(PHY, "phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
-            subframe,frame_parms->tdd_config);
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+		  subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
 
@@ -201,7 +201,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     else if (subframe == 4)
       pusch_subframe = (8);
     else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -214,7 +214,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     else if (subframe == 3)
       pusch_subframe = (7);
     else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -227,7 +227,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     } else if (subframe==0)
       pusch_subframe = (4);
     else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -238,7 +238,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     if ( (subframe == 8) || (subframe == 9) ) {
       pusch_subframe = (subframe-6);
     } else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -249,7 +249,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     if (subframe == 8) {
       pusch_subframe = (2);
     } else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -268,7 +268,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     } else if (subframe == 5) {
       pusch_subframe = (8);
     } else {
-      LOG_E(PHY,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
+      AssertFatal(1==0,"phich.c: phich_subframe2_pusch_subframe, illegal subframe %d for tdd_config %d\n",
             subframe,frame_parms->tdd_config);
       pusch_subframe = (0);
     }
@@ -276,7 +276,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
     break;
 
   default:
-    LOG_E(PHY, "no implementation for TDD UL/DL-config = %d!\n", frame_parms->tdd_config);
+    AssertFatal(1==0, "no implementation for TDD UL/DL-config = %d!\n", frame_parms->tdd_config);
     pusch_subframe = (0);
   }
 
@@ -560,7 +560,7 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
         break;
 
       default:
-        LOG_E(PHY,"phich_coding.c: Illegal PHICH Number\n");
+        AssertFatal(1==0,"phich_coding.c: Illegal PHICH Number\n");
       } // nseq_PHICH
     }
 
@@ -858,7 +858,7 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
       break;
 
     default:
-      LOG_E(PHY,"phich_coding.c: Illegal PHICH Number\n");
+      AssertFatal(1==0,"phich_coding.c: Illegal PHICH Number\n");
     }
 
 
@@ -1255,7 +1255,7 @@ void rx_phich(PHY_VARS_UE *ue,
         break;
 
       default:
-        LOG_E(PHY,"phich_coding.c: Illegal PHICH Number\n");
+        AssertFatal(1==0,"phich_coding.c: Illegal PHICH Number\n");
       } // nseq_PHICH
     }
 
@@ -1342,7 +1342,7 @@ void rx_phich(PHY_VARS_UE *ue,
       break;
 
     default:
-      LOG_E(PHY,"phich_coding.c: Illegal PHICH Number\n");
+      AssertFatal(1==0,"phich_coding.c: Illegal PHICH Number\n");
     }
   }
 
@@ -1527,9 +1527,11 @@ void generate_phich_top(PHY_VARS_eNB *eNB,
   if (frame_parms->Ncp == 1)
     NSF_PHICH = 2;
 
-  pusch_frame = phich_frame2_pusch_frame(frame_parms,proc->frame_tx,subframe);
-  pusch_subframe = phich_subframe2_pusch_subframe(frame_parms,subframe);
-  harq_pid = subframe2harq_pid(frame_parms,pusch_frame,pusch_subframe);
+  if (eNB->phich_vars[subframe&1].num_hi > 0) {
+    pusch_frame = phich_frame2_pusch_frame(frame_parms,proc->frame_tx,subframe);
+    pusch_subframe = phich_subframe2_pusch_subframe(frame_parms,subframe);
+    harq_pid = subframe2harq_pid(frame_parms,pusch_frame,pusch_subframe);
+  }
 
   for (i=0; i<eNB->phich_vars[subframe&1].num_hi; i++) {
 
diff --git a/openair1/PHY/LTE_TRANSPORT/pilots.c b/openair1/PHY/LTE_TRANSPORT/pilots.c
index 03fd2928860d7893384ec05e096dd2096b6fba02..01b4bb7a8ea4e1ec0703e6ff51ce018e51d3da77 100644
--- a/openair1/PHY/LTE_TRANSPORT/pilots.c
+++ b/openair1/PHY/LTE_TRANSPORT/pilots.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
index 45bd163cf2e12cc49f0fbdf1720828fadc329c35..90e9ae329caed2bf17853f64ea511e4315ec21d8 100644
--- a/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
+++ b/openair1/PHY/LTE_TRANSPORT/pilots_mbsfn.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
index b4199d9b605e36e2f0ca7fa7002d1b9890e25e11..63aac7f091b0288eb172e775ca103e5eec6a80f2 100644
--- a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
+++ b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c
index eb2fa1d8431c2e22cbae2845c6db4c12abf06935..e756df1fe1a5b4fd4612d0f019bca3bd57c7a64f 100644
--- a/openair1/PHY/LTE_TRANSPORT/pmch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pmch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/power_control.c b/openair1/PHY/LTE_TRANSPORT/power_control.c
index 9421efe52d7857f59c07503110a950a8667ef259..10f0c1490c81d2e97fa08887a1c0f75ec4ee2825 100644
--- a/openair1/PHY/LTE_TRANSPORT/power_control.c
+++ b/openair1/PHY/LTE_TRANSPORT/power_control.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index 0282b780d9201a46270a82d936f470857ea2c76a..5f1b3ce448ae42cb905f2c0d6d26969e03ea94e5 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -39,6 +39,7 @@
 #include "UTIL/LOG/vcd_signal_dumper.h"
 
 //#define PRACH_DEBUG 1
+//#define PRACH_WRITE_OUTPUT_DEBUG 1
 
 uint16_t NCS_unrestricted[16] = {0,13,15,18,22,26,32,38,46,59,76,93,119,167,279,419};
 uint16_t NCS_restricted[15]   = {15,18,22,26,32,38,46,55,68,82,100,128,158,202,237}; // high-speed case
@@ -562,7 +563,7 @@ int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex
     t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
     t2_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t2_ra;
 #ifdef PRACH_DEBUG
-    LOG_D(PHY,"[PRACH] Checking for PRACH format (ConfigIndex %d) in TDD subframe %d (%d,%d,%d)\n",
+    LOG_I(PHY,"[PRACH] Checking for PRACH format (ConfigIndex %d) in TDD subframe %d (%d,%d,%d)\n",
           prach_ConfigIndex,
           subframe,
           t0_ra,t1_ra,t2_ra);
@@ -575,7 +576,7 @@ int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex
          (((subframe>4)&&(t1_ra==1))))) {                // PRACH is in 2nd half-frame
       if ((prach_ConfigIndex<48) &&                          // PRACH only in normal UL subframe
 	  (((subframe%5)-2)==t2_ra)) prach_mask=1;
-      else if ((((subframe%5)-1)==t2_ra)) prach_mask=1;      // PRACH can be in UpPTS
+      else if ((prach_ConfigIndex>47) && (((subframe%5)-1)==t2_ra)) prach_mask=1;      // PRACH can be in UpPTS
     }
   }
 
@@ -655,7 +656,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
 
 #else //normal case (simulation)
   prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset;
-  LOG_D(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
+  LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
     prach_start,
     ue->rx_offset,
     ue->hw_timing_advance,
@@ -723,7 +724,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   } else { // This is the high-speed case
 
 #ifdef PRACH_DEBUG
-    LOG_D(PHY,"[UE %d] High-speed mode, NCS_config %d\n",ue->Mod_id,Ncs_config);
+    LOG_I(PHY,"[UE %d] High-speed mode, NCS_config %d\n",ue->Mod_id,Ncs_config);
 #endif
 
     not_found = 1;
@@ -784,7 +785,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
 #ifdef PRACH_DEBUG
 
   if (NCS>0)
-    LOG_D(PHY,"Generate PRACH for RootSeqIndex %d, Preamble Index %d, NCS %d (NCS_config %d, N_ZC/NCS %d) n_ra_prb %d: Preamble_offset %d, Preamble_shift %d\n",
+    LOG_I(PHY,"Generate PRACH for RootSeqIndex %d, Preamble Index %d, NCS %d (NCS_config %d, N_ZC/NCS %d) n_ra_prb %d: Preamble_offset %d, Preamble_shift %d\n",
           rootSequenceIndex,preamble_index,NCS,Ncs_config,N_ZC/NCS,n_ra_prb,
           preamble_offset,preamble_shift);
 
@@ -1039,14 +1040,14 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
     break;
   }
 
-  //LOG_D(PHY,"prach_len=%d\n",prach_len);
+  //LOG_I(PHY,"prach_len=%d\n",prach_len);
 
   AssertFatal(prach_fmt<4,
 	      "prach_fmt4 not fully implemented" );
 #if defined(EXMIMO) || defined(OAI_USRP)
   int j;
   int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
-  LOG_D( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
+  LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
   
   for (i=prach_start,j=0; i<min(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,prach_start+prach_len); i++,j++) {
     ((int16_t*)ue->common_vars.txdata[0])[2*i] = prach[2*j]<<4;
@@ -1079,7 +1080,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   
 
   
-#if 0
+#if defined(PRACH_WRITE_OUTPUT_DEBUG)
   write_output("prach_txF0.m","prachtxF0",prachF,prach_len-Ncp,1,1);
   write_output("prach_tx0.m","prachtx0",prach+(Ncp<<1),prach_len-Ncp,1,1);
   write_output("txsig.m","txs",(int16_t*)(&ue->common_vars.txdata[0][0]),2*ue->frame_parms.samples_per_tti,1,1);
@@ -1114,7 +1115,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
   uint8_t            restricted_set;      
   uint8_t            n_ra_prb;
 
+#ifdef PRACH_DEBUG
   int                frame;
+#endif
   int                subframe;
   int16_t            *prachF=NULL;
   int16_t            **rxsigF=NULL;
@@ -1131,7 +1134,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
   uint16_t numshift=0;
   uint16_t *prach_root_sequence_map;
   uint8_t not_found;
-  int k;
+  int k=0;
   uint16_t u;
   int16_t *Xu;
   uint16_t offset;
@@ -1151,7 +1154,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 #ifdef PRACH_DEBUG
   int en0=0;
 #endif
-  int en;
+
   if (ru) { 
     fp    = &ru->frame_parms;
     nb_rx = ru->nb_rx;
@@ -1202,7 +1205,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 #ifdef Rel14
     if (br_flag == 1) {
       prach_ifftp         = eNB->prach_vars_br.prach_ifft[ce_level];
+#ifdef PRACH_DEBUG
       frame               = eNB->proc.frame_prach_br;
+#endif
       subframe            = eNB->proc.subframe_prach_br;
       prachF              = eNB->prach_vars_br.prachF;
       rxsigF              = eNB->prach_vars_br.rxsigF[ce_level];
@@ -1219,19 +1224,23 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 #endif
       {
         prach_ifftp       = eNB->prach_vars.prach_ifft[0];
+#ifdef PRACH_DEBUG
         frame             = eNB->proc.frame_prach;
+#endif
         subframe          = eNB->proc.subframe_prach;
         prachF            = eNB->prach_vars.prachF;
         rxsigF            = eNB->prach_vars.rxsigF[0];
 #ifdef PRACH_DEBUG
-        if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n",
-				     subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
+        //if ((frame&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
 #endif
       }
   }
   else {
 #ifdef Rel14
     if (br_flag == 1) {
+#ifdef PRACH_DEBUG
+        frame             = ru->proc.frame_prach_br;
+#endif
         subframe          = ru->proc.subframe_prach_br;
         rxsigF            = ru->prach_rxsigF_br[ce_level];
 #ifdef PRACH_DEBUG
@@ -1242,6 +1251,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     else
 #endif
       {
+#ifdef PRACH_DEBUG
+        frame             = ru->proc.frame_prach;
+#endif
         subframe          = ru->proc.subframe_prach;
         rxsigF            = ru->prach_rxsigF;
 #ifdef PRACH_DEBUG
@@ -1256,9 +1268,32 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 
   for (aa=0; aa<nb_rx; aa++) {
     if (ru->if_south == LOCAL_RF) { // set the time-domain signal if we have to use it in this node
+      // DJP - indexing below in subframe zero takes us off the beginning of the array???
       prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
 #ifdef PRACH_DEBUG
-	if ((frame&1023) < 20) LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d, : prach %p (energy %d)\n",ru->idx,br_flag,ce_level,frame,subframe,prach[aa],dB_fixed(en0=signal_energy(prach[aa],fp->samples_per_tti))); 
+      int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
+      int8_t dbEn0 = dB_fixed(en0);
+      int8_t rach_dBm = dbEn0 - eNB->rx_total_gain_dB;
+
+#ifdef PRACH_WRITE_OUTPUT_DEBUG
+        if (dbEn0>32 && prach[0]!= NULL)
+        {
+          static int counter=0;
+
+          char buffer[80];
+          //counter++;
+          sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
+          write_output(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
+        }
+#endif
+
+      if (dbEn0>32)
+      {
+#ifdef PRACH_WRITE_OUTPUT_DEBUG
+        if (prach[0]!= NULL) write_output("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
+#endif
+        LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d rach_dBm:%d rxdata:%p index:%d\n",ru->idx,br_flag,ce_level,frame,subframe,fp->samples_per_tti,prach[aa],dbEn0,ru->N_TA_offset,rach_dBm,ru->common.rxdata[aa], (subframe*fp->samples_per_tti)-ru->N_TA_offset);
+        }
 #endif
     }
   }
@@ -1341,7 +1376,9 @@ void rx_prach0(PHY_VARS_eNB *eNB,
   if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
       ((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
     // Do forward transform
-    LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d\n",fp->N_RB_UL);
+#ifdef PRACH_DEBUG
+    LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
+#endif
     for (aa=0; aa<nb_rx; aa++) {
       AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
       prach2 = prach[aa] + (Ncp<<1);
@@ -1446,7 +1483,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
       k+=13; 
       k*=2;
       int dftsize_x2 = fp->ofdm_symbol_size*24;
-      LOG_D(PHY,"Shifting prach_rxF from %d to 0\n",k);
+      //LOG_D(PHY,"Shifting prach_rxF from %d to 0\n",k);
 
       if ((k+(839*2)) > dftsize_x2) { // PRACH signal is split around DC 
 	memmove((void*)&rxsigF[aa][dftsize_x2-k],(void*)&rxsigF[aa][0],(k+(839*2)-dftsize_x2)*2);	
@@ -1472,11 +1509,10 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     return;
   } else if (eNB!=NULL) {
 
-    en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
 #ifdef PRACH_DEBUG
+    int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
     if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
 #endif
-
   }
   
   // in case of RAU and prach received rx_thread wakes up prach
@@ -1621,7 +1657,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 	}
 
       memset(prachF, 0, sizeof(int16_t)*2*1024 );
-#ifdef PRACH_DEBUG
+#if defined(PRACH_WRITE_OUTPUT_DEBUG)
       if (prach[0]!= NULL) write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
 #endif
       // write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
@@ -1646,16 +1682,16 @@ void rx_prach0(PHY_VARS_eNB *eNB,
 	  idft1024(prachF,prach_ifft_tmp,1);
 	  // compute energy and accumulate over receive antennas and repetitions for BR
 	  for (i=0;i<2048;i++)
-	    prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[i<<1] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>15;
+	    prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[i<<1] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
 	} else {
 	  idft256(prachF,prach_ifft_tmp,1);
 	  log2_ifft_size = 8;
 	  // compute energy and accumulate over receive antennas and repetitions for BR
 	  for (i=0;i<256;i++)
-	    prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>15;
+	    prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
 	}
 	
-#ifdef PRACH_DEBUG
+#if defined(PRACH_WRITE_OUTPUT_DEBUG)
 	if (aa==0) write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
 #endif
       // if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
@@ -1704,19 +1740,22 @@ void rx_prach0(PHY_VARS_eNB *eNB,
     k*=2;
     
     if (br_flag == 0) {
-      /*
+#if defined(PRACH_WRITE_OUTPUT_DEBUG)
 	write_output("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
 	write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
 	write_output("Xu.m","xu",Xu,N_ZC,1,1);
-	write_output("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);*/
+	write_output("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
+#endif
     }
     else {
+#if defined(PRACH_WRITE_OUTPUT_DEBUG)
       printf("Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
       write_output("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
       write_output("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
       write_output("Xu_br.m","xu_br",Xu,N_ZC,1,1);
       write_output("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
       exit(-1);      
+#endif
     }
 
   }
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.h b/openair1/PHY/LTE_TRANSPORT/prach.h
index efdb257785d8cfdaff3cdd29db228f963e6e13e6..f135af6d811b5187a2fe5d4892bdce7b7ff88b7b 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.h
+++ b/openair1/PHY/LTE_TRANSPORT/prach.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/print_stats.c b/openair1/PHY/LTE_TRANSPORT/print_stats.c
index d4ed922274679e0a133a550d7e967b22479b3057..9e328353a4fdd975b26640822813bd4d5a909846 100644
--- a/openair1/PHY/LTE_TRANSPORT/print_stats.c
+++ b/openair1/PHY/LTE_TRANSPORT/print_stats.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h
index 3ee8df87e3296bbb2c2331e77032264a6cc5cf55..8a0e160f23361f1630c8b15b31b67779425b6d8b 100644
--- a/openair1/PHY/LTE_TRANSPORT/proto.h
+++ b/openair1/PHY/LTE_TRANSPORT/proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pss.c b/openair1/PHY/LTE_TRANSPORT/pss.c
index e6674d6cc780e7c800d929bd55e9621dfec295c4..c746a331db246e2e46139d4386120389d3549557 100644
--- a/openair1/PHY/LTE_TRANSPORT/pss.c
+++ b/openair1/PHY/LTE_TRANSPORT/pss.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c
index ad9ed2c95d8089f261513ce4767000ddc6c6f91a..61d2cc0e9b3a841e904e45452fe511df20cab387 100644
--- a/openair1/PHY/LTE_TRANSPORT/pucch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pucch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -113,7 +113,18 @@ int16_t W3_im[3][6] = {{0    ,0     ,0     },
   {0    ,-28378, 28377}
 };
 
-char pucch_format_string[6][20] = {"format 1\0","format 1a\0","format 1b\0","format 2\0","format 2a\0","format 2b\0"};
+char *pucch_format_string[] = {
+  "format 1",
+  "format 1a",
+  "format 1b",
+  "pucch_format1b_csA2",
+  "pucch_format1b_csA3",
+  "pucch_format1b_csA4",
+  "format 2",
+  "format 2a",
+  "format 2b",
+  "pucch_format3"
+};
 
 /* PUCCH format3 >> */
 #define D_I             0
diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c
index b62e46244980703ec41a3a9c34fc4b108ad60f5d..e9ae36026312f681c21847beb815c24a5f340389 100644
--- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -185,7 +185,7 @@ int generate_eNB_ulsch_params_from_rar(PHY_VARS_eNB *eNB,
   LOG_D(PHY,"ulsch ra (eNB): harq_pid %d\n",harq_pid);
   LOG_D(PHY,"ulsch ra (eNB): round    %d\n",ulsch_harq->round);
   LOG_D(PHY,"ulsch ra (eNB): TBS      %d\n",ulsch_harq->TBS);
-  LOG_D(PHY,"ulsch ra (eNB): mcs      %d\n",ulsch_harq->mcs);
+  LOG_D(PHY,"ulsch ra (eNB): mcs      %d\n",ulsch_harq->Msc_initial);
   LOG_D(PHY,"ulsch ra (eNB): Or1      %d\n",ulsch_harq->Or1);
   LOG_D(PHY,"ulsch ra (eNB): ORI      %d\n",ulsch_harq->O_RI);
 #endif
diff --git a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
index 8381eca5e411c95d9130f93eb1e3206fa1401aa1..a360b35ff6a0733a15d8bbfd54b685e1a4593b3a 100644
--- a/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/srs_modulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c
index bb12be9157126f6d8798786c0526191506d41ab1..17a4680c54f7a19beee1b91225b9ef54095ea672 100644
--- a/openair1/PHY/LTE_TRANSPORT/sss.c
+++ b/openair1/PHY/LTE_TRANSPORT/sss.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/sss.h b/openair1/PHY/LTE_TRANSPORT/sss.h
index 290e2453e25aada3dd1e6ba13f42e4444825d9df..6d42acaefc1e45450300e0af347f77dba52c01f5 100644
--- a/openair1/PHY/LTE_TRANSPORT/sss.h
+++ b/openair1/PHY/LTE_TRANSPORT/sss.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/uci.h b/openair1/PHY/LTE_TRANSPORT/uci.h
index 8b479ed9ba452003e78e6750594fcf2d77c93a85..c7741533da543b909aa00bbaad4151274b210595 100644
--- a/openair1/PHY/LTE_TRANSPORT/uci.h
+++ b/openair1/PHY/LTE_TRANSPORT/uci.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
index f61749e6cac54e3b88cd8ba6d842eae0dea0b862..65640e2ec713331c9531e5b852dd953a45707bea 100644
--- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
index f4d7cee401ddc6d1f7d6f6d7921541c486bd2cdd..71c36f7c3c206c69443e8c1efff7ea3b407cf4c5 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index b8a31f3daa68a4ea536f8dad9ea10f55231a8ca8..f885bf8eb379d0beaa3ff96023c14452a9633a13 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index 8e97a9af2eed59ea7931f2288b412af1c49df11a..795ed5896b2debb49be34b06a9d5075513b44b2a 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
index 6dced43b5f65b951785e9224ba5da10ef10a8bfc..d1718f6e90f600927f5d93f3a18e93213bea86f8 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/LTE_TRANSPORT/vars.h b/openair1/PHY/LTE_TRANSPORT/vars.h
index 4845ab6925aef5ca9de38339e4a4e7f263d1adeb..4b6fa920ea76b863d1e6d2b0f5b8dae19c9c9ea1 100644
--- a/openair1/PHY/LTE_TRANSPORT/vars.h
+++ b/openair1/PHY/LTE_TRANSPORT/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c
index e1a28ea4f0a5d623dcaa5a430a150124e05a8462..84863c81e89ce8c6742e8ca10896cd81ed3fa92c 100644
--- a/openair1/PHY/MODULATION/beamforming.c
+++ b/openair1/PHY/MODULATION/beamforming.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h
index 65bfda2fbfd16d7fb7a59184b72a32ca78daedce..f9bbdcd27156e82cd7e41d010f406a58a905d6ca 100644
--- a/openair1/PHY/MODULATION/defs.h
+++ b/openair1/PHY/MODULATION/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/extern.h b/openair1/PHY/MODULATION/extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/MODULATION/extern.h
+++ b/openair1/PHY/MODULATION/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/kHz_7_5.h b/openair1/PHY/MODULATION/kHz_7_5.h
index c6d484143a9fd3636e2aa632e6cdea30b1fa9c9a..ce2f0d5f2c11a3c06a93baf368a99f8cee01308b 100644
--- a/openair1/PHY/MODULATION/kHz_7_5.h
+++ b/openair1/PHY/MODULATION/kHz_7_5.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c
index 369a63355c93d97aaaf102d84fed10cad526c752..37d1a483119cda97b5e455787d51bada349b83fc 100644
--- a/openair1/PHY/MODULATION/ofdm_mod.c
+++ b/openair1/PHY/MODULATION/ofdm_mod.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/prach625Hz.h b/openair1/PHY/MODULATION/prach625Hz.h
index 63606ae57bbc5e3d2ad2d6dfbb47b017fc901fd4..38b63b3b053bb02d7e609137bcfcd0af78031d1c 100644
--- a/openair1/PHY/MODULATION/prach625Hz.h
+++ b/openair1/PHY/MODULATION/prach625Hz.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index d97ffbc543e080a5d594b430ccb798c85daf25d6..39ae90217f9b336d2afc397bd60106adc4ecb50f 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
index adcd8cd186bd7d50c556c536f9c7dd90a78baa84..7b902bb8f1524199980c08a7b9dc3bf1208ed403 100644
--- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c
+++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c
index bbf29508745a9ec68c5644f85322735ac4337a85..1f2963017e137e940e1c0cbacc5db6c567ae8029 100644
--- a/openair1/PHY/MODULATION/slot_fep_ul.c
+++ b/openair1/PHY/MODULATION/slot_fep_ul.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c
index 14abd2380d2038b8d1e121e31ab5101887e1fada..f2e43a533e23e86fd1d9fff77834293e51e8a8fb 100644
--- a/openair1/PHY/MODULATION/ul_7_5_kHz.c
+++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/MODULATION/vars.h b/openair1/PHY/MODULATION/vars.h
index adda18dffc1188a303fc9fa078f542bf2c8dd7ab..a05999afe1661142ecb9fbbce6c5f1d46bce0f4b 100644
--- a/openair1/PHY/MODULATION/vars.h
+++ b/openair1/PHY/MODULATION/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/8bit_rxdemux.c b/openair1/PHY/TOOLS/8bit_rxdemux.c
index 47d7b27571a169604bddf7436ae0d22ea1cf9a02..030be47b5daf1a04b524de31f36eb93f314a8e4d 100644
--- a/openair1/PHY/TOOLS/8bit_rxdemux.c
+++ b/openair1/PHY/TOOLS/8bit_rxdemux.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/8bit_txmux.c b/openair1/PHY/TOOLS/8bit_txmux.c
index 761f15c4f09196f5439343966a51d5ec03dc54b6..b103bc9c5cd9b49a4d0df7411da79410c518250c 100644
--- a/openair1/PHY/TOOLS/8bit_txmux.c
+++ b/openair1/PHY/TOOLS/8bit_txmux.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/alaw_lut.h b/openair1/PHY/TOOLS/alaw_lut.h
index 0531e4eba7f721a87b351c54f1aa1e26e2189d92..e7b9539e7f3ffcce0301be82c3468261dc77bf7e 100644
--- a/openair1/PHY/TOOLS/alaw_lut.h
+++ b/openair1/PHY/TOOLS/alaw_lut.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/angle.c b/openair1/PHY/TOOLS/angle.c
index 9ea714b4fcf73d390f7dad84d943a43ce621100b..a06640d1cf4a8762121b515c4b78bd9db0c0a42d 100644
--- a/openair1/PHY/TOOLS/angle.c
+++ b/openair1/PHY/TOOLS/angle.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/cadd_sv.c b/openair1/PHY/TOOLS/cadd_sv.c
index b83f9e1fce9d076b338aa027441ac5f22bd952b5..caa8d1cc04197480ee30483bf544dc03baeb75bf 100644
--- a/openair1/PHY/TOOLS/cadd_sv.c
+++ b/openair1/PHY/TOOLS/cadd_sv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/cadd_vv.c b/openair1/PHY/TOOLS/cadd_vv.c
index a08564daf302e5da32f96fbe8b124931437d2f5a..34808552fcaab7966d46249853b2ed4a6c9093d8 100644
--- a/openair1/PHY/TOOLS/cadd_vv.c
+++ b/openair1/PHY/TOOLS/cadd_vv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/cdot_prod.c b/openair1/PHY/TOOLS/cdot_prod.c
index 7e73e58e5e6523305b4aff7ae5d64222e9d026a1..91ba246bddf51afeb637976ace75c8decec83cae 100644
--- a/openair1/PHY/TOOLS/cdot_prod.c
+++ b/openair1/PHY/TOOLS/cdot_prod.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c
index bc631bd6ccc7768d342243fea9df2ebb6876efff..61970ca2b69afa6d8ce38df8fe9d3bf3cc9c9636 100644
--- a/openair1/PHY/TOOLS/cmult_sv.c
+++ b/openair1/PHY/TOOLS/cmult_sv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c
index f8caa0c6da0261e84d6f6ecfca7119937c637b03..b5b551f008ea4bd9aa1e57738ffd79a10f20b915 100644
--- a/openair1/PHY/TOOLS/cmult_vv.c
+++ b/openair1/PHY/TOOLS/cmult_vv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/costable.h b/openair1/PHY/TOOLS/costable.h
index 03682f84dcd787cbece6b2add79f07c21074750d..b9d24c75b4857f46960b60e3680592eae6005d79 100644
--- a/openair1/PHY/TOOLS/costable.h
+++ b/openair1/PHY/TOOLS/costable.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/dB_routines.c b/openair1/PHY/TOOLS/dB_routines.c
index 1bcefbba03a76e9b04fe9813f37bff5526e1f8b9..c99703eaf3c6139682f098aa932691a6522bcfc5 100644
--- a/openair1/PHY/TOOLS/dB_routines.c
+++ b/openair1/PHY/TOOLS/dB_routines.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/dB_routines.h b/openair1/PHY/TOOLS/dB_routines.h
index 965caf76d7b25e2a1301e788b23949fbbdde0b4e..c28184259f4d909770da23675be35658f8cbe07e 100644
--- a/openair1/PHY/TOOLS/dB_routines.h
+++ b/openair1/PHY/TOOLS/dB_routines.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h
index a90a8b718cfc36ec6ccbd3927eae8f70ae3abfea..41d7c9528adc52c45a79a6923b872abcf87eae56 100644
--- a/openair1/PHY/TOOLS/defs.h
+++ b/openair1/PHY/TOOLS/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/extern.h b/openair1/PHY/TOOLS/extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/TOOLS/extern.h
+++ b/openair1/PHY/TOOLS/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/file_output.c b/openair1/PHY/TOOLS/file_output.c
index 16b8b108d0fcf8cd3e262b1e09b9ffd8d7941217..c2256707b5195a7adf8b065bd724ddcf7ef792a0 100644
--- a/openair1/PHY/TOOLS/file_output.c
+++ b/openair1/PHY/TOOLS/file_output.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -33,7 +33,7 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d
   int i;
 
 
-  printf("Writing %d elements of type %d to %s\n",length,format,fname);
+  //printf("Writing %d elements of type %d to %s\n",length,format,fname);
 
 
   if (format == 10 || format ==11 || format == 12 || format == 13 || format == 14) {
@@ -68,9 +68,11 @@ int write_output(const char *fname,const char *vname,void *data,int length,int d
   case 15:
 
     for (i=0; i<length<<1; i+=(2*dec)) {
-      fprintf(fp,"%d + j*(%d)\n",((short *)data)[i],((short *)data)[i+1]);
+      //fprintf(fp,"%d + j*(%d)\n",((short *)data)[i],((short *)data)[i+1]);
+      fprintf(fp,"%d,%d,",((short *)data)[i],((short *)data)[i+1]);
 
     }
+    fprintf(fp,"\n");
 
 
     break;
diff --git a/openair1/PHY/TOOLS/invSqrt.c b/openair1/PHY/TOOLS/invSqrt.c
index 332cb638863460d74f136adf7a4e3115620b027e..b3e0d9749afed846cd04f2a15aac314166fad728 100644
--- a/openair1/PHY/TOOLS/invSqrt.c
+++ b/openair1/PHY/TOOLS/invSqrt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/log2_approx.c b/openair1/PHY/TOOLS/log2_approx.c
index bd4d5d04ab87fec8fad51b0026163fa1a3bce3c2..acd15348571a290f80b3d83cca86e3210d6eb608 100644
--- a/openair1/PHY/TOOLS/log2_approx.c
+++ b/openair1/PHY/TOOLS/log2_approx.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index 0aaea70d7d4a95f517e6d832f2f235dd23f2fb48..dc4708ce6cefab738e9e1e5b22b7e927323bf6a8 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c
index ad51a348ec467a1ef5239b822b9744b331735d08..30e57c1c62530e80a22c22d979e9a887f297231f 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/lte_phy_scope.h b/openair1/PHY/TOOLS/lte_phy_scope.h
index 2e8ca96c3aff82f34ad1a92c7b85edd1ae7357dc..1d2b2ea1ed99c5b579aaa6f77b16bf5485108a7d 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope.h
+++ b/openair1/PHY/TOOLS/lte_phy_scope.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
index e5d667c3c20c6528cb2126f27a49fdaac9c225b6..8dd41548ab3b62f915b1873acdfe84227fa425fe 100644
--- a/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
+++ b/openair1/PHY/TOOLS/lte_phy_scope_tm4.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/lut.c b/openair1/PHY/TOOLS/lut.c
index ba9da904e3b897f45907896140787a1da945a62f..f58a06c8ae103cbace8f22927f4e1f3fe94c0af8 100644
--- a/openair1/PHY/TOOLS/lut.c
+++ b/openair1/PHY/TOOLS/lut.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/memory_routines.c b/openair1/PHY/TOOLS/memory_routines.c
index c7015ff46e050f1fed0f840f27f74c5c239f30fb..cef9928988bd79cd809b0108810d65f3c74fa262 100644
--- a/openair1/PHY/TOOLS/memory_routines.c
+++ b/openair1/PHY/TOOLS/memory_routines.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c
index 2ae49ae87f7baaa2cc1adfb5cdbcecfe5c1d065b..918d2e3ba0043c636dcd67a2a875f338e7234063 100644
--- a/openair1/PHY/TOOLS/signal_energy.c
+++ b/openair1/PHY/TOOLS/signal_energy.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/smbv.c b/openair1/PHY/TOOLS/smbv.c
index adc512d7e5a2aeac61db41b8ae0e87d9cfd3841f..e020ca0c5200573c391d2d0235a9d0bfb855b3cb 100644
--- a/openair1/PHY/TOOLS/smbv.c
+++ b/openair1/PHY/TOOLS/smbv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/smbv.h b/openair1/PHY/TOOLS/smbv.h
index 40a954d6e30968dc8e7376d0db080135e1c7f6bc..127cd3f7b976ad6a5c54aff5e064cd4e436c5745 100644
--- a/openair1/PHY/TOOLS/smbv.h
+++ b/openair1/PHY/TOOLS/smbv.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/sqrt.c b/openair1/PHY/TOOLS/sqrt.c
index b950f4b542a352511c97fd745e88ec600eec4255..e6a4d9bb244202ae3127beaaf95ae6923a99675b 100644
--- a/openair1/PHY/TOOLS/sqrt.c
+++ b/openair1/PHY/TOOLS/sqrt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/time_meas.c b/openair1/PHY/TOOLS/time_meas.c
index 31a613d03297700b9beaeb662a91b487cae50afe..d80832e243c9b0af7cea98e1d3da9fca0ff01b67 100644
--- a/openair1/PHY/TOOLS/time_meas.c
+++ b/openair1/PHY/TOOLS/time_meas.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/time_meas.h b/openair1/PHY/TOOLS/time_meas.h
index 233d16ebbea83f7e95acebbbc196dc7c82fffca0..32e6883d56f5a7c2fca509b282e8205ef2a04104 100644
--- a/openair1/PHY/TOOLS/time_meas.h
+++ b/openair1/PHY/TOOLS/time_meas.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddle12288.h b/openair1/PHY/TOOLS/twiddle12288.h
index 8039b0b0ce094601197030db975098c03fb43c01..17fa92f4e9b341ccb0dd05cc44e83817ed6a2475 100644
--- a/openair1/PHY/TOOLS/twiddle12288.h
+++ b/openair1/PHY/TOOLS/twiddle12288.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddle1536.h b/openair1/PHY/TOOLS/twiddle1536.h
index c84724904e933ec39cfe776ae1fee21aecffe6a0..304766caaf13fc507afa08a357b82c5562f50dae 100644
--- a/openair1/PHY/TOOLS/twiddle1536.h
+++ b/openair1/PHY/TOOLS/twiddle1536.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddle18432.h b/openair1/PHY/TOOLS/twiddle18432.h
index 8c6c9822dc69c7c15ef1141b40a5ea4454e323bd..696c7f37aeb2fe25dbc4edabc6bccaef1d53fdc7 100644
--- a/openair1/PHY/TOOLS/twiddle18432.h
+++ b/openair1/PHY/TOOLS/twiddle18432.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddle24576.h b/openair1/PHY/TOOLS/twiddle24576.h
index 4ab699b9fd1765bb089d080ec5da66fe9a5c5b5e..34fc59d7796a54a9aafb230ddcfa7c02dd0057c9 100644
--- a/openair1/PHY/TOOLS/twiddle24576.h
+++ b/openair1/PHY/TOOLS/twiddle24576.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddle6144.h b/openair1/PHY/TOOLS/twiddle6144.h
index bc46647dbf7c91769575fd33b541002444cb5116..6fc18ebfbe0cbe52c5da48026e59f209e696e87d 100644
--- a/openair1/PHY/TOOLS/twiddle6144.h
+++ b/openair1/PHY/TOOLS/twiddle6144.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddles4096.h b/openair1/PHY/TOOLS/twiddles4096.h
index 3122e1fbb907ec1882526d33ee913cac88d110ec..af2b6a8887619bd82949cfa72ac54f814d5b83a6 100644
--- a/openair1/PHY/TOOLS/twiddles4096.h
+++ b/openair1/PHY/TOOLS/twiddles4096.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/twiddles8192.h b/openair1/PHY/TOOLS/twiddles8192.h
index 344f5e33255c3c37bed118d18f7037142e45744a..6b76619013387f85ddac1292a29fa5b39fff4ecd 100644
--- a/openair1/PHY/TOOLS/twiddles8192.h
+++ b/openair1/PHY/TOOLS/twiddles8192.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/TOOLS/vars.h b/openair1/PHY/TOOLS/vars.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair1/PHY/TOOLS/vars.h
+++ b/openair1/PHY/TOOLS/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index b8bf9524ad3e24a60e3e978572c78450bc21cf28..462f5c45eb88c24bb012d57a069bdf8434078143 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -767,6 +767,10 @@ typedef struct RU_t_s{
   time_stats_t ofdm_demod_stats;
   /// Timing statistics (TX)
   time_stats_t ofdm_mod_stats;
+  /// Timing statistics (RX Fronthaul + Compression)
+  time_stats_t rx_fhaul;
+  /// Timing statistics (TX Fronthaul + Compression)
+  time_stats_t tx_fhaul; 
   /// RX and TX buffers for precoder output
   RU_COMMON            common;
   /// beamforming weight vectors per eNB
@@ -930,7 +934,8 @@ typedef struct {
   int            subband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB][100];
   /// Total Subband CQI and RB
   int            subband_cqi_tot_dB[NUMBER_OF_UE_MAX][100];
-
+  /// PRACH background noise level
+  int            prach_I0;
 } PHY_MEASUREMENTS_eNB;
 
 
@@ -1046,8 +1051,8 @@ typedef struct PHY_VARS_eNB_s {
 
   /// if ==0 enables phy only test mode
   int mac_enabled;
-
-
+  /// counter to average prach energh over first 100 prach opportunities
+  int prach_energy_counter;
 
   // PDSCH Varaibles
   PDSCH_CONFIG_DEDICATED pdsch_config_dedicated[NUMBER_OF_UE_MAX];
@@ -1519,6 +1524,10 @@ typedef struct RRU_config_s {
   uint8_t num_bands;
   /// EUTRA band list configured in RRU
   uint8_t band_list[MAX_BANDS_PER_RRU];
+  /// TDD configuration (0-6)
+  uint8_t tdd_config[MAX_BANDS_PER_RRU];
+  /// TDD special subframe configuration (0-10)
+  uint8_t tdd_config_S[MAX_BANDS_PER_RRU];
   /// TX frequency
   uint32_t tx_freq[MAX_BANDS_PER_RRU];
   /// RX frequency
@@ -1612,6 +1621,8 @@ static inline int release_thread(pthread_mutex_t *mutex,int *instance_cnt,char *
     return(-1);
   }
 
+  //LOG_D(PHY, "%s() name:%s instance_cnt:%u - about to decrement\n", __FUNCTION__, name, *instance_cnt);
+
   *instance_cnt=*instance_cnt-1;
 
   if (pthread_mutex_unlock(mutex) != 0) {
diff --git a/openair1/PHY/extern.h b/openair1/PHY/extern.h
index 5f86678159f91f87fd09c046357f4e928cab219f..3ff2d64da05cfd8ed124e217020e340ba0ffdf59 100644
--- a/openair1/PHY/extern.h
+++ b/openair1/PHY/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index b5b1774c6e7af9fadbb09477ddc0c1d8a45fb2b7..d72a2bd8d6886823269728589d8025d6e7795170 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -817,7 +817,7 @@ typedef struct {
   uint8_t narrowband;
   /// number of PRB pairs for MPDCCH
   uint8_t number_of_prb_pairs;
-  /// mpdcch resource assignement (combinatorial index r)
+  /// mpdcch resource assignment (combinatorial index r)
   uint8_t resource_block_assignment;
   /// transmission type (0=localized,1=distributed) 
   uint8_t transmission_type;
diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h
index b510f8bb3f50c726e7a5f1d393ef8928d4efa87a..6fe6b46a380537afe004d5e13d74932eb78fe777 100644
--- a/openair1/PHY/impl_defs_top.h
+++ b/openair1/PHY/impl_defs_top.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/sse_intrin.h b/openair1/PHY/sse_intrin.h
index 8ae5de547a9f480a5b4795b6248123d460815d58..da4d1db846b30c24d927e4b6975c61296665ab34 100644
--- a/openair1/PHY/sse_intrin.h
+++ b/openair1/PHY/sse_intrin.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/types.h b/openair1/PHY/types.h
index 61cafaefa94b12a408723dbf1586b7548dacfbf8..be8ec7115a5aed02091bea5973df54ee8a333b3b 100644
--- a/openair1/PHY/types.h
+++ b/openair1/PHY/types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/PHY/vars.h b/openair1/PHY/vars.h
index 7bdb072b967a6e6238b9e6902fff19870c2ddaec..f78cb92bcd394bd57394ed73fcba6819375c4169 100644
--- a/openair1/PHY/vars.h
+++ b/openair1/PHY/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h
index 785e34e3c4459a911953993a8e0a6b24f41d4cb8..e29bbf7aad220952cc5ab1b240658ce0ba006fd3 100644
--- a/openair1/SCHED/defs.h
+++ b/openair1/SCHED/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/extern.h b/openair1/SCHED/extern.h
index 2c5ac12ca554bd1220996a1f8e5d3b904e317adb..80a815dda769d16f63fc38f95123f8f8a7c6140d 100644
--- a/openair1/SCHED/extern.h
+++ b/openair1/SCHED/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/fapi_l1.c b/openair1/SCHED/fapi_l1.c
index 11cd85d57d35af1c3614c37dfdb44cccc1be70e1..1f93c51eac5cd452eb5b93eb6888c11523967b87 100644
--- a/openair1/SCHED/fapi_l1.c
+++ b/openair1/SCHED/fapi_l1.c
@@ -37,6 +37,14 @@
 #include "nfapi_interface.h"
 #include "fapi_l1.h"
 
+int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req);
+int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req);
+int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req);
+int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req);
+
+extern uint8_t nfapi_mode;
+
+
 void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB,
                              eNB_rxtx_proc_t *proc,
                              nfapi_dl_config_request_pdu_t *dl_config_pdu)
@@ -45,7 +53,7 @@ void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB,
   LTE_eNB_PDCCH *pdcch_vars       = &eNB->pdcch_vars[idx];
   nfapi_dl_config_dci_dl_pdu *pdu = &dl_config_pdu->dci_dl_pdu;
 
-  LOG_D(PHY,"Frame %d, Subframe %d: DCI processing\n",proc->frame_tx,proc->subframe_tx);
+  LOG_D(PHY,"Frame %d, Subframe %d: DCI processing - populating pdcch_vars->dci_alloc[%d] proc:subframe_tx:%d idx:%d pdcch_vars->num_dci:%d\n",proc->frame_tx,proc->subframe_tx, pdcch_vars->num_dci, proc->subframe_tx, idx, pdcch_vars->num_dci);
 
   // copy dci configuration into eNB structure
   fill_dci_and_dlsch(eNB,proc,&pdcch_vars->dci_alloc[pdcch_vars->num_dci],pdu);
@@ -70,6 +78,9 @@ void handle_nfapi_hi_dci0_dci_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
 {
   int idx                         = proc->subframe_tx&1;
   LTE_eNB_PDCCH *pdcch_vars       = &eNB->pdcch_vars[idx];
+
+  //LOG_D(PHY,"%s() Before num_dci:%d\n", __FUNCTION__, pdcch_vars->num_dci);
+
   // copy dci configuration in to eNB structure
   fill_dci0(eNB,proc,&pdcch_vars->dci_alloc[pdcch_vars->num_dci], &hi_dci0_config_pdu->dci_pdu);
 }
@@ -80,11 +91,12 @@ void handle_nfapi_hi_dci0_hi_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
   LTE_eNB_PHICH *phich           = &eNB->phich_vars[proc->subframe_tx&1];
 
   // copy dci configuration in to eNB structure
-  LOG_D(PHY,"Received HI PDU which value %d (rbstart %d,cshift %d)\n",
+  LOG_D(PHY,"Received HI PDU with value %d (rbstart %d,cshift %d)\n",
         hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.hi_value,
         hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.resource_block_start,
         hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms);
 
+  // DJP - TODO FIXME - transmission power ignored
   phich->config[phich->num_hi].hi       = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.hi_value;
   phich->config[phich->num_hi].first_rb = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.resource_block_start;
   phich->config[phich->num_hi].n_DMRS   = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms;
@@ -100,7 +112,7 @@ void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
 
   AssertFatal(rel8->length == 3, "BCH PDU has length %d != 3\n",rel8->length);
 
-  LOG_D(PHY,"bch_pdu: %x,%x,%x\n",sdu[0],sdu[1],sdu[2]);
+  //LOG_D(PHY,"bch_pdu: %x,%x,%x\n",sdu[0],sdu[1],sdu[2]);
   eNB->pbch_pdu[0] = sdu[2];
   eNB->pbch_pdu[1] = sdu[1];
   eNB->pbch_pdu[2] = sdu[0];
@@ -168,9 +180,9 @@ void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
   dlsch0_harq->pdsch_start = eNB->pdcch_vars[proc->subframe_tx & 1].num_pdcch_symbols;
 
   if (dlsch0_harq->round==0) {  //get pointer to SDU if this a new SDU
-    AssertFatal(sdu!=NULL,"NFAPI: frame %d, subframe %d: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d\n",
+    AssertFatal(sdu!=NULL,"NFAPI: frame %d, subframe %d: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]\n",
                 proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid,
-                dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index);
+                dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,dlsch0_harq->round,dlsch0_harq->frame,dlsch0_harq->subframe,dlsch0_harq->pdu,dlsch0_harq->mcs,dlsch0_harq->ndi,dlsch0_harq->pdsch_start);
     if (rel8->rnti != 0xFFFF) LOG_D(PHY,"NFAPI: frame %d, subframe %d: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d\n",
                                     proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid);
     if (codeword_index == 0) dlsch0_harq->pdu                    = sdu;
@@ -571,7 +583,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
   frame_t                   frame        = Sched_INFO->frame;
   sub_frame_t               subframe     = Sched_INFO->subframe;
   LTE_DL_FRAME_PARMS        *fp;
-  int                       ul_subframe;
+  uint8_t                   ul_subframe;
   int                       ul_frame;
   int                       harq_pid;
   LTE_UL_eNB_HARQ_t         *ulsch_harq;
@@ -586,12 +598,16 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
   ul_subframe = pdcch_alloc2ul_subframe(fp,subframe);
   ul_frame    = pdcch_alloc2ul_frame(fp,frame,subframe);
 
-  AssertFatal(proc->subframe_tx == subframe, "Current subframe %d != NFAPI subframe %d\n",proc->subframe_tx,subframe);
-  AssertFatal(proc->frame_tx == frame, "Current frame %d != NFAPI frame %d\n",proc->frame_tx,frame);
+  // DJP - subframe assert will fail - not sure why yet
+  // DJP - AssertFatal(proc->subframe_tx == subframe, "Current subframe %d != NFAPI subframe %d\n",proc->subframe_tx,subframe);
+  // DJP - AssertFatal(proc->subframe_tx == subframe, "Current frame %d != NFAPI frame %d\n",proc->frame_tx,frame);
+
+  uint8_t number_dci                = DL_req->dl_config_request_body.number_dci;
+  uint8_t number_pdcch_ofdm_symbols = DL_req->dl_config_request_body.number_pdcch_ofdm_symbols;
 
   uint8_t number_dl_pdu             = DL_req->dl_config_request_body.number_pdu;
   uint8_t number_hi_dci0_pdu        = HI_DCI0_req->hi_dci0_request_body.number_of_dci+HI_DCI0_req->hi_dci0_request_body.number_of_hi;
-  uint8_t number_ul_pdu             = UL_req->ul_config_request_body.number_of_pdus;
+  uint8_t number_ul_pdu             = UL_req!=NULL ? UL_req->ul_config_request_body.number_of_pdus : 0;
 
   nfapi_dl_config_request_pdu_t *dl_config_pdu;
   nfapi_hi_dci0_request_pdu_t   *hi_dci0_req_pdu;
@@ -599,16 +615,18 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
 
   int i;
 
-  eNB->pdcch_vars[subframe&1].num_pdcch_symbols = DL_req->dl_config_request_body.number_pdcch_ofdm_symbols;
-  eNB->pdcch_vars[subframe&1].num_dci           = 0;
+  eNB->pdcch_vars[subframe&1].num_pdcch_symbols = number_pdcch_ofdm_symbols;
+  eNB->pdcch_vars[subframe&1].num_dci           = number_dci;
   eNB->phich_vars[subframe&1].num_hi            = 0;
 
-  LOG_D(PHY,"NFAPI: Frame %d, Subframe %d: received %d dl_pdu, %d tx_req, %d hi_dci0_config_req, %d UL_config \n",
-        frame,subframe,number_dl_pdu,TX_req->tx_request_body.number_of_pdus,number_hi_dci0_pdu,number_ul_pdu);
-
+  LOG_D(PHY,"NFAPI: Sched_INFO:SFN/SF:%d%d dl_pdu:%d tx_req:%d hi_dci0:%d ul_cfg:%d num_pdcch_symbols:%d\n",
+	frame,subframe,number_dl_pdu,TX_req->tx_request_body.number_of_pdus,number_hi_dci0_pdu,number_ul_pdu, eNB->pdcch_vars[subframe&1].num_pdcch_symbols);
 
-  if ((subframe_select(fp,ul_subframe)==SF_UL) ||
-      (fp->frame_type == FDD)) {
+  int do_oai =0;
+  int dont_send =0;
+  
+  if (ul_subframe<10) { // This means that there is an ul_subframe that can be configured here
+    LOG_D(PHY,"NFAPI: Clearing dci allocations for potential UL\n");
     harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe);
 
     // clear DCI allocation maps for new subframe
@@ -623,11 +641,13 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
   }
   for (i=0;i<number_dl_pdu;i++) {
     dl_config_pdu = &DL_req->dl_config_request_body.dl_config_pdu_list[i];
-    LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);
+    //LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type);
     switch (dl_config_pdu->pdu_type) {
     case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE:
       handle_nfapi_dci_dl_pdu(eNB,proc,dl_config_pdu);
       eNB->pdcch_vars[subframe&1].num_dci++;
+      //LOG_E(PHY,"Incremented num_dci:%d but already set??? dl_config:num_dci:%d\n", eNB->pdcch_vars[subframe&1].num_dci, number_dci);
+      do_oai=1;
       break;
     case NFAPI_DL_CONFIG_BCH_PDU_TYPE:
       AssertFatal(dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index<TX_req->tx_request_body.number_of_pdus,
@@ -635,6 +655,11 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
                   dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index,
                   TX_req->tx_request_body.number_of_pdus);
       eNB->pbch_configured=1;
+      do_oai=1;
+      //LOG_D(PHY,"%s() NFAPI_DL_CONFIG_BCH_PDU_TYPE TX:%d/%d RX:%d/%d TXREQ:%d/%d\n", 
+          //__FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->frame_rx, proc->subframe_rx, NFAPI_SFNSF2SFN(TX_req->sfn_sf), NFAPI_SFNSF2SF(TX_req->sfn_sf));
+
+
       handle_nfapi_bch_pdu(eNB,proc,dl_config_pdu,
                            TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index].segments[0].segment_data);
       break;
@@ -642,22 +667,44 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
       //      handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu);
       break;
     case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE:
+      {
+        nfapi_dl_config_dlsch_pdu_rel8_t *dlsch_pdu_rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8;
+        uint16_t pdu_index = dlsch_pdu_rel8->pdu_index;
+        uint16_t tx_pdus = TX_req->tx_request_body.number_of_pdus;
+        uint16_t invalid_pdu = pdu_index == -1;
+        uint8_t *sdu = invalid_pdu ? NULL : pdu_index >= tx_pdus ? NULL : TX_req->tx_request_body.tx_pdu_list[pdu_index].segments[0].segment_data;
+
+        LOG_D(PHY,"%s() [PDU:%d] NFAPI_DL_CONFIG_DLSCH_PDU_TYPE TX:%d/%d RX:%d/%d transport_blocks:%d pdu_index:%d sdu:%p\n", 
+            __FUNCTION__, i, proc->frame_tx, proc->subframe_tx, proc->frame_rx, proc->subframe_rx, dlsch_pdu_rel8->transport_blocks, pdu_index, sdu);
+
       /*
       AssertFatal(dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index<TX_req->tx_request_body.number_of_pdus,
                   "dlsch_pdu_rel8.pdu_index>=TX_req->number_of_pdus (%d>%d)\n",
                   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,
                   TX_req->tx_request_body.number_of_pdus);
       */
-      AssertFatal((dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks<3) &&
-                  (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks>0),
-                  "dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = %d not in [1,2]\n",
-                  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks);
-      handle_nfapi_dlsch_pdu(eNB,proc,dl_config_pdu,
-                             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks-1,
-                             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index == -1 ? NULL
-                               : TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data);
+      AssertFatal((dlsch_pdu_rel8->transport_blocks<3) &&
+                  (dlsch_pdu_rel8->transport_blocks>0),
+                  "dlsch_pdu_rel8->transport_blocks = %d not in [1,2]\n",
+                  dlsch_pdu_rel8->transport_blocks);
+      if (1)//sdu != NULL)
+      {
+        handle_nfapi_dlsch_pdu(eNB,proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu);
+      }
+      else
+      {
+        dont_send=1;
+
+        LOG_E(MAC,"%s() NFAPI_DL_CONFIG_DLSCH_PDU_TYPE sdu is NULL DL_CFG:SFN/SF:%d:pdu_index:%d TX_REQ:SFN/SF:%d:pdus:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(DL_req->sfn_sf), pdu_index, NFAPI_SFNSF2DEC(TX_req->sfn_sf), tx_pdus);
+      }
+
+      // Send the data first so that the DL_CONFIG can just pluck it out of the buffer
+      // DJP - OAI was here - moved to bottom
+      do_oai=1;
+
       /*
       if (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti == eNB->preamble_list[0].preamble_rel8.rnti) {// is RAR pdu
+
         LOG_D(PHY,"Frame %d, Subframe %d: Received LTE RAR pdu, programming based on UL Grant\n",frame,subframe);
         generate_eNB_ulsch_params_from_rar(eNB,
                                            TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data,
@@ -665,6 +712,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
                                            subframe);
 
                                            }        */
+      }
       break;
     case NFAPI_DL_CONFIG_PCH_PDU_TYPE:
       //      handle_nfapi_pch_pdu(eNB,dl_config_pdu);
@@ -684,6 +732,18 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
       break;
     }
   }
+  
+  if (nfapi_mode && do_oai && !dont_send) {
+    oai_nfapi_tx_req(Sched_INFO->TX_req);
+
+    oai_nfapi_dl_config_req(Sched_INFO->DL_req); // DJP - .dl_config_request_body.dl_config_pdu_list[0]); // DJP - FIXME TODO - yuk - only copes with 1 pdu
+  }
+
+  if (nfapi_mode && number_hi_dci0_pdu!=0) {
+    oai_nfapi_hi_dci0_req(HI_DCI0_req);
+    eNB->pdcch_vars[subframe&1].num_dci=0;
+    eNB->pdcch_vars[subframe&1].num_pdcch_symbols=0;
+  }
 
   for (i=0;i<number_hi_dci0_pdu;i++) {
 
@@ -693,31 +753,62 @@ void schedule_response(Sched_Rsp_t *Sched_INFO)
 
     switch (hi_dci0_req_pdu->pdu_type) {
 
+      case NFAPI_HI_DCI0_DCI_PDU_TYPE:
 
-    case NFAPI_HI_DCI0_DCI_PDU_TYPE:
-      handle_nfapi_hi_dci0_dci_pdu(eNB,proc,hi_dci0_req_pdu);
-      eNB->pdcch_vars[subframe&1].num_dci++;
-      break;
+        handle_nfapi_hi_dci0_dci_pdu(eNB,proc,hi_dci0_req_pdu);
 
-    case NFAPI_HI_DCI0_HI_PDU_TYPE:
-      handle_nfapi_hi_dci0_hi_pdu(eNB,proc,hi_dci0_req_pdu);
+        eNB->pdcch_vars[subframe&1].num_dci++;
+        break;
 
-      break;
+      case NFAPI_HI_DCI0_HI_PDU_TYPE:
+        handle_nfapi_hi_dci0_hi_pdu(eNB,proc,hi_dci0_req_pdu);
+
+        break;
     }
   }
 
-  for (i=0;i<number_ul_pdu;i++) {
-    ul_config_pdu = &UL_req->ul_config_request_body.ul_config_pdu_list[i];
-    LOG_D(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type);
-    AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE ||
-                ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
-                ,
-                "Optional UL_PDU type %d not supported\n",ul_config_pdu->pdu_type);
-    handle_nfapi_ul_pdu(eNB,proc,ul_config_pdu,UL_req->sfn_sf>>4,UL_req->sfn_sf&0xf,UL_req->ul_config_request_body.srs_present);
+  if (0){//nfapi_mode) {
+    int future_subframe=subframe;
+    //for (int future_subframe=0;future_subframe<10;future_subframe++) { 
+    {
+      nfapi_ul_config_request_t *ul_req_tmp = &RC.mac[0]->UL_req_tmp[CC_id][future_subframe];
+
+      // DJP - indexing directly into the mac - not good - ??????
+      if (ul_req_tmp->ul_config_request_body.number_of_pdus > 0)
+      {
+        LOG_D(PHY,"UL_CONFIG for the future future_subframe:%d UL_req_tmp[PDUs:%d SFN/SF:%d]\n", 
+            future_subframe, 
+            ul_req_tmp->ul_config_request_body.number_of_pdus, 
+            NFAPI_SFNSF2DEC(ul_req_tmp->sfn_sf));
+
+        oai_nfapi_ul_config_req(ul_req_tmp);
+      }
+    }
+  }
+
+  if (nfapi_mode) {
+    if (number_ul_pdu>0)
+    {
+      //LOG_D(PHY, "UL_CONFIG to send to PNF\n");
+      oai_nfapi_ul_config_req(UL_req);
+      UL_req->ul_config_request_body.number_of_pdus=0;
+      number_ul_pdu=0;
+    }
+  }
+  else {
+    for (i=0;i<number_ul_pdu;i++) {
+      ul_config_pdu = &UL_req->ul_config_request_body.ul_config_pdu_list[i];
+      LOG_D(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type);
+      AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE ||
+          ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE
+          ,
+          "Optional UL_PDU type %d not supported\n",ul_config_pdu->pdu_type);
+      handle_nfapi_ul_pdu(eNB,proc,ul_config_pdu,UL_req->sfn_sf>>4,UL_req->sfn_sf&0xf,UL_req->ul_config_request_body.srs_present);
+    }
   }
 }
diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c
index 835066748dabecbc7f4b87a578ec5a2686675b6b..15c6fa7557da2d4eb0bed5d9a7d8b895ae1d720c 100644
--- a/openair1/SCHED/phy_mac_stub.c
+++ b/openair1/SCHED/phy_mac_stub.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/phy_procedures_emos.h b/openair1/SCHED/phy_procedures_emos.h
index 567ec7ec80eb9e2778f6fe47cedc21f370b30632..266a95b3c9fe42576545c8f6480e1ddae6c25166 100644
--- a/openair1/SCHED/phy_procedures_emos.h
+++ b/openair1/SCHED/phy_procedures_emos.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c
index 66e43b6960d4249801ead781653113fa0d9bf180..01c44d6078f6df559cfaf0b99643d14d388eb736 100644
--- a/openair1/SCHED/phy_procedures_lte_common.c
+++ b/openair1/SCHED/phy_procedures_lte_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -918,7 +918,7 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf
   if(frame_parms->soundingrs_ul_config_common.enabled_flag)
   {
 
-    LOG_D(PHY," SRS SUBFRAMECONFIG: %d\n", frame_parms->soundingrs_ul_config_common.srs_SubframeConfig);
+    //LOG_D(PHY," SRS SUBFRAMECONFIG: %d\n", frame_parms->soundingrs_ul_config_common.srs_SubframeConfig);
 
       uint8_t  TSFC;
       uint16_t deltaTSFC; // bitmap
@@ -951,7 +951,7 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf
       }
       LOG_D(PHY," ISTDD: %d, TSFC: %d, deltaTSFC: %d, AbsSubframeTX: %d.%d\n", frame_parms->frame_type, TSFC, deltaTSFC, frame_tx, subframe_tx);
   }
-  LOG_D(PHY," isSubframeSRS %d\n", isSubframeSRS);
+  //LOG_D(PHY," isSubframeSRS %d\n", isSubframeSRS);
   return(isSubframeSRS);
 }
 
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index 8e5358da34fee29ede1624f16ba7ac98cf5538b1..9d9c84706b514803882d6ceff94f70022db7dfc5 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -50,6 +50,8 @@
 #   include "intertask_interface.h"
 #endif
 
+extern uint8_t nfapi_mode;
+int oai_nfapi_rach_ind(nfapi_rach_indication_t *rach_ind);
 
 
 
@@ -137,15 +139,13 @@ void pmch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,PHY_VARS_RN *rn,rel
 #endif
 }
 
-void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
+void common_signal_procedures (PHY_VARS_eNB *eNB,int frame, int subframe) {
 
   LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   int **txdataF = eNB->common_vars.txdataF;
   uint8_t *pbch_pdu=&eNB->pbch_pdu[0];
-  int subframe = proc->subframe_tx;
-  int frame = proc->frame_tx;
 
-  LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d\n",frame,subframe); 
+  //LOG_D(PHY,"common_signal_procedures: frame %d, subframe %d fdd:%s dir:%s\n",frame,subframe,fp->frame_type == FDD?"FDD":"TDD", subframe_select(fp,subframe) == SF_DL?"DL":"UL?"); 
 
   // generate Cell-Specific Reference Signals for both slots
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1);
@@ -196,7 +196,8 @@ void common_signal_procedures (PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
 
     /// generate PBCH
     if ((frame&3)==0) {
-      AssertFatal(eNB->pbch_configured==1,"PBCH was not configured by MAC\n");
+      //AssertFatal(eNB->pbch_configured==1,"PBCH was not configured by MAC\n");
+      if (eNB->pbch_configured!=1) return;
       eNB->pbch_configured=0;
     }
     generate_pbch(&eNB->pbch,
@@ -270,9 +271,10 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
   int input_buffer_length = dlsch_harq->TBS/8;
   LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
 
-  if (dlsch->rnti == 0x02) {//frame < 200) {
+  if (1){
+  //if (dlsch->rnti == 0x02) {//frame < 200) {
 
-    LOG_I(PHY,
+    LOG_D(PHY,
 	  "[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", pdsch_start %d, G %d, nb_rb %"PRIu16", rb0 %x, rb1 %x, TBS %"PRIu16", pmi_alloc %"PRIx64", rv %"PRIu8" (round %"PRIu8")\n",
 	  eNB->Mod_id, dlsch->rnti,harq_pid,
 	  frame, subframe, input_buffer_length, dlsch_harq->pdsch_start,
@@ -421,7 +423,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   }
   else {
     // this is not a pmch subframe, so generate PSS/SSS/PBCH
-    common_signal_procedures(eNB,proc);
+    common_signal_procedures(eNB,proc->frame_tx, proc->subframe_tx);
   }
 
   // clear existing ulsch dci allocations before applying info from MAC  (this is table
@@ -437,33 +439,33 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   }
 
   /* save old HARQ information needed for PHICH generation */
-  for (i=0; i<NUMBER_OF_UE_MAX; i++) {
-    harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe);
-    if (eNB->ulsch[i]) {
-      ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid];
-
-      /* Store first_rb and n_DMRS for correct PHICH generation below.
-       * For PHICH generation we need "old" values of last scheduling
-       * for this HARQ process. 'generate_eNB_dlsch_params' below will
-       * overwrite first_rb and n_DMRS and 'generate_phich_top', done
-       * after 'generate_eNB_dlsch_params', would use the "new" values
-       * instead of the "old" ones.
-       *
-       * This has been tested for FDD only, may be wrong for TDD.
-       *
-       * TODO: maybe we should restructure the code to be sure it
-       *       is done correctly. The main concern is if the code
-       *       changes and first_rb and n_DMRS are modified before
-       *       we reach here, then the PHICH processing will be wrong,
-       *       using wrong first_rb and n_DMRS values to compute
-       *       ngroup_PHICH and nseq_PHICH.
-       *
-       * TODO: check if that works with TDD.
-       */
-      if ((subframe_select(fp,ul_subframe)==SF_UL) ||
-          (fp->frame_type == FDD)) {
-        ulsch_harq->previous_first_rb = ulsch_harq->first_rb;
-        ulsch_harq->previous_n_DMRS   = ulsch_harq->n_DMRS;
+  if (ul_subframe < 10) { // This means that there is a potential UL subframe that will be scheduled here
+    for (i=0; i<NUMBER_OF_UE_MAX; i++) {
+      harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe);
+      if (eNB->ulsch[i]) {
+	ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid];
+	
+	/* Store first_rb and n_DMRS for correct PHICH generation below.
+	 * For PHICH generation we need "old" values of last scheduling
+	 * for this HARQ process. 'generate_eNB_dlsch_params' below will
+	 * overwrite first_rb and n_DMRS and 'generate_phich_top', done
+	 * after 'generate_eNB_dlsch_params', would use the "new" values
+	 * instead of the "old" ones.
+	 *
+	 * This has been tested for FDD only, may be wrong for TDD.
+	 *
+	 * TODO: maybe we should restructure the code to be sure it
+	 *       is done correctly. The main concern is if the code
+	 *       changes and first_rb and n_DMRS are modified before
+	 *       we reach here, then the PHICH processing will be wrong,
+	 *       using wrong first_rb and n_DMRS values to compute
+	 *       ngroup_PHICH and nseq_PHICH.
+	 *
+	 * TODO: check if that works with TDD.
+	 */
+	ulsch_harq->previous_first_rb = ulsch_harq->first_rb;
+	ulsch_harq->previous_n_DMRS   = ulsch_harq->n_DMRS;
+	
       }
     }
   }
@@ -475,30 +477,36 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
   num_dci           = eNB->pdcch_vars[subframe&1].num_dci;
   //  LOG_D(PHY,"num_pdcch_symbols %"PRIu8",(dci common %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,
   //        DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
-  LOG_D(PHY,"num_pdcch_symbols %"PRIu8",(number dci %"PRIu8"\n",num_pdcch_symbols,
-	num_dci);
+  //LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,num_pdcch_symbols);
 
 
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,(frame*10)+subframe);
 
   if (num_dci > 0)
-    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (num_dci %"PRIu8")\n",eNB->Mod_id,frame, subframe,
-	  num_dci);
-
+  {
+    //LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (num_dci %"PRIu8") num_pdcch_symbols:%d\n",eNB->Mod_id,frame, subframe, num_dci, num_pdcch_symbols);
+  }
     
-  generate_dci_top(num_pdcch_symbols,
-		   num_dci,
-		   &eNB->pdcch_vars[subframe&1].dci_alloc[0],
-		   0,
-		   AMP,
-		   fp,
-		   eNB->common_vars.txdataF,
-		   subframe);
-  
+  //LOG_D(PHY,"Before generate_dci_top num_pdcch_symbols:%d num_dci:%d dci_alloc:dci_length:%d\n", num_pdcch_symbols, num_dci, eNB->pdcch_vars[subframe&1].dci_alloc[0].dci_length);
+
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
+
+  if (nfapi_mode == 0 || nfapi_mode == 1) {
+    generate_dci_top(num_pdcch_symbols,
+        num_dci,
+        &eNB->pdcch_vars[subframe&1].dci_alloc[0],
+        0,
+        AMP,
+        fp,
+        eNB->common_vars.txdataF,
+        subframe);
+  }
+
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,0);
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1);
   // Now scan UE specific DLSCH
   LTE_eNB_DLSCH_t *dlsch0,*dlsch1;
   for (UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++)
@@ -513,33 +521,44 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
 	// get harq_pid
 	harq_pid = dlsch0->harq_ids[subframe];
 	AssertFatal(harq_pid>=0,"harq_pid is negative\n");
-	// generate pdsch
-	pdsch_procedures(eNB,
-			 proc,
-			 harq_pid,
-			 dlsch0,
-			 dlsch1,
-			 &eNB->UE_stats[(uint32_t)UE_id],
-			 0);
+
+        if (harq_pid>=8)
+        {
+          LOG_E(PHY,"harq_pid:%d corrupt must be 0-7\n", harq_pid);
+        }
+        else
+        {
+          // generate pdsch
+          pdsch_procedures(eNB,
+              proc,
+              harq_pid,
+              dlsch0,
+              dlsch1,
+              &eNB->UE_stats[(uint32_t)UE_id],
+              0);
+        }
 
 
       }
 
 
       else if ((dlsch0)&&
-	       (dlsch0->rnti>0)&&
-	       (dlsch0->active == 0)) {
+          (dlsch0->rnti>0)&&
+          (dlsch0->active == 0)) {
 
-	// clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
-	dlsch0->subframe_tx[subframe]=0;
+        // clear subframe TX flag since UE is not scheduled for PDSCH in this subframe (so that we don't look for PUCCH later)
+        dlsch0->subframe_tx[subframe]=0;
       }
     }
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
 
 
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PHICH,1);
   generate_phich_top(eNB,
 		     proc,
 		     AMP);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PHICH,0);
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX+offset,0);
   if (do_meas==1) stop_meas(&eNB->phy_proc_tx);
@@ -555,21 +574,20 @@ void prach_procedures(PHY_VARS_eNB *eNB,
   uint16_t max_preamble[4],max_preamble_energy[4],max_preamble_delay[4];
   uint16_t i;
   int frame,subframe;
-  LTE_eNB_PRACH *prach_vars=NULL;
 
 #ifdef Rel14
   if (br_flag==1) {
     subframe = eNB->proc.subframe_prach_br;
     frame = eNB->proc.frame_prach_br;
     pthread_mutex_lock(&eNB->UL_INFO_mutex);
-    eNB->UL_INFO.rach_ind_br.number_of_preambles=0;
+    eNB->UL_INFO.rach_ind_br.rach_indication_body.number_of_preambles=0;
     pthread_mutex_unlock(&eNB->UL_INFO_mutex);
   }
   else
 #endif
     {
       pthread_mutex_lock(&eNB->UL_INFO_mutex);
-      eNB->UL_INFO.rach_ind.number_of_preambles=0;
+      eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles=0;
       pthread_mutex_unlock(&eNB->UL_INFO_mutex);
       subframe = eNB->proc.subframe_prach;
       frame = eNB->proc.frame_prach;
@@ -609,9 +627,10 @@ void prach_procedures(PHY_VARS_eNB *eNB,
 	   );
 
   //#ifdef DEBUG_PHY_PROC
-  LOG_D(PHY,"[RAPROC] Frame %d, subframe %d : Most likely preamble %d, energy %d dB delay %d\n",
+  if (max_preamble_energy[0]/10 > 32)
+    LOG_E(PHY,"[RAPROC] Frame %d, subframe %d : Most likely preamble %d, energy %d dB delay %d\n",
         frame,subframe,
-	max_preamble[0],
+        max_preamble[0],
         max_preamble_energy[0]/10,
         max_preamble_delay[0]);
   //q#endif
@@ -619,12 +638,11 @@ void prach_procedures(PHY_VARS_eNB *eNB,
 #ifdef Rel14
   if (br_flag==1) {
 
-    prach_vars = &eNB->prach_vars_br;
     int prach_mask;
       
     prach_mask = is_prach_subframe(&eNB->frame_parms,eNB->proc.frame_prach_br,eNB->proc.subframe_prach_br);
     
-    eNB->UL_INFO.rach_ind_br.preamble_list                              = eNB->preamble_list_br;
+    eNB->UL_INFO.rach_ind_br.rach_indication_body.preamble_list                              = eNB->preamble_list_br;
     int ind=0;
     int ce_level=0;
     /* Save for later, it doesn't work    
@@ -636,8 +654,9 @@ void prach_procedures(PHY_VARS_eNB *eNB,
 	   eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level])) {
     */ 
     if (eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[0]==1){ 
-      if (max_preamble_energy[0] > 350) {
-	eNB->UL_INFO.rach_ind_br.number_of_preambles++;
+      if ((eNB->prach_energy_counter == 100) && 
+          (max_preamble_energy[0] > eNB->measurements.prach_I0 + 100)) {
+	eNB->UL_INFO.rach_ind_br.rach_indication_body.number_of_preambles++;
 	
 	eNB->preamble_list_br[ind].preamble_rel8.timing_advance        = max_preamble_delay[ind];//
 	eNB->preamble_list_br[ind].preamble_rel8.preamble              = max_preamble[ind];
@@ -664,9 +683,10 @@ void prach_procedures(PHY_VARS_eNB *eNB,
 #endif
 
     {
-      if (max_preamble_energy[0] > 350) {
+      if ((eNB->prach_energy_counter == 100) && 
+          (max_preamble_energy[0] > eNB->measurements.prach_I0+100)) {
 
-	LOG_D(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
+	LOG_E(PHY,"[eNB %d/%d][RAPROC] Frame %d, subframe %d Initiating RA procedure with preamble %d, energy %d.%d dB, delay %d\n",
 	      eNB->Mod_id,
 	      eNB->CC_id,
 	      frame,
@@ -679,43 +699,45 @@ void prach_procedures(PHY_VARS_eNB *eNB,
 	    T(T_ENB_PHY_INITIATE_RA_PROCEDURE, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
 	      T_INT(max_preamble[0]), T_INT(max_preamble_energy[0]), T_INT(max_preamble_delay[0]));
 	    
-	    prach_vars = &eNB->prach_vars;
-	    
-	    
 	    pthread_mutex_lock(&eNB->UL_INFO_mutex);
 	    
-	    eNB->UL_INFO.rach_ind.number_of_preambles                 = 1;
-	    eNB->UL_INFO.rach_ind.preamble_list                       = eNB->preamble_list;
+	    eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles  = 1;
+	    eNB->UL_INFO.rach_ind.rach_indication_body.preamble_list        = &eNB->preamble_list[0];
+	    eNB->UL_INFO.rach_ind.rach_indication_body.tl.tag               = NFAPI_RACH_INDICATION_BODY_TAG;
+            eNB->UL_INFO.rach_ind.header.message_id                         = NFAPI_RACH_INDICATION;
+            eNB->UL_INFO.rach_ind.sfn_sf                                    = frame<<4 | subframe;
 	    
+	    eNB->preamble_list[0].preamble_rel8.tl.tag                = NFAPI_PREAMBLE_REL8_TAG;
 	    eNB->preamble_list[0].preamble_rel8.timing_advance        = max_preamble_delay[0];
 	    eNB->preamble_list[0].preamble_rel8.preamble              = max_preamble[0];
 	    eNB->preamble_list[0].preamble_rel8.rnti                  = 1+subframe;  // note: fid is implicitly 0 here
 	    eNB->preamble_list[0].preamble_rel13.rach_resource_type   = 0;
 	    eNB->preamble_list[0].instance_length                     = 0; //don't know exactly what this is
 	    
-	    LOG_D(PHY,"Filling NFAPI indication for RACH : TA %d, Preamble %d, rnti %x, rach_resource_type %d\n",
-		  eNB->preamble_list[0].preamble_rel8.timing_advance,
-		  eNB->preamble_list[0].preamble_rel8.preamble,
-		  eNB->preamble_list[0].preamble_rel8.rnti,
-		  eNB->preamble_list[0].preamble_rel13.rach_resource_type);	    
+            if (nfapi_mode == 1)    // If NFAPI PNF then we need to send the message to the VNF
+            {
+              LOG_E(PHY,"\n\n\n\nDJP - this needs to be sent to VNF **********************************************\n\n\n\n");
+              LOG_E(PHY,"Filling NFAPI indication for RACH : SFN_SF:%d TA %d, Preamble %d, rnti %x, rach_resource_type %d\n",
+                  NFAPI_SFNSF2DEC(eNB->UL_INFO.rach_ind.sfn_sf),
+                  eNB->preamble_list[0].preamble_rel8.timing_advance,
+                  eNB->preamble_list[0].preamble_rel8.preamble,
+                  eNB->preamble_list[0].preamble_rel8.rnti,
+                  eNB->preamble_list[0].preamble_rel13.rach_resource_type);	    
+
+              oai_nfapi_rach_ind(&eNB->UL_INFO.rach_ind);
+
+              eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles = 0;
+            }
+
 	    pthread_mutex_unlock(&eNB->UL_INFO_mutex);
       
-      } // max_preamble_energy > 350
+      } // max_preamble_energy > prach_I0 + 100 
+      else {
+         eNB->measurements.prach_I0 = ((eNB->measurements.prach_I0*900)>>10) + ((max_preamble_energy[0]*124)>>10); 
+         if (frame==0) LOG_I(PHY,"prach_I0 = %d.%d dB\n",eNB->measurements.prach_I0/10,eNB->measurements.prach_I0%10);
+         if (eNB->prach_energy_counter < 100) eNB->prach_energy_counter++;
+      }
     } // else br_flag
-      /*
-	mac_xface->initiate_ra_proc(eNB->Mod_id,
-	eNB->CC_id,
-	frame,
-	preamble_max,
-	preamble_delay_list[preamble_max]*update_TA/update_TA2,
-	0,subframe,0);*/
-      
-    
-    /*  } else {
-    MSC_LOG_EVENT(MSC_PHY_ENB, "0 RA Failed add user, too many");
-    LOG_I(PHY,"[eNB %d][RAPROC] frame %d, subframe %d: Unable to add user, max user count reached\n",
-	  eNB->Mod_id,frame, subframe);
-	  }*/
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX,0);
 }
@@ -755,21 +777,31 @@ void srs_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) {
 void fill_sr_indication(PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int subframe,uint32_t stat) {
   
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
-  nfapi_sr_indication_pdu_t *pdu =   &eNB->UL_INFO.sr_ind.sr_pdu_list[eNB->UL_INFO.sr_ind.number_of_srs];
+  nfapi_sr_indication_t       *sr_ind =         &eNB->UL_INFO.sr_ind;
+  nfapi_sr_indication_body_t  *sr_ind_body =    &sr_ind->sr_indication_body;
+  nfapi_sr_indication_pdu_t *pdu =   &sr_ind_body->sr_pdu_list[sr_ind_body->number_of_srs];
+
+  sr_ind->sfn_sf = frame<<4|subframe;
+  sr_ind->header.message_id = NFAPI_RX_SR_INDICATION;
+
+  sr_ind_body->tl.tag = NFAPI_SR_INDICATION_BODY_TAG;
 
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
+  pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti                         = rnti;
 
   int SNRtimes10 = dB_fixed_times10(stat) - 200;//(10*eNB->measurements.n0_power_dB[0]);
 
 
+  pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
+
   if      (SNRtimes10 < -640) pdu->ul_cqi_information.ul_cqi=0;
   else if (SNRtimes10 >  635) pdu->ul_cqi_information.ul_cqi=255;
   else                        pdu->ul_cqi_information.ul_cqi=(640+SNRtimes10)/5;
   pdu->ul_cqi_information.channel = 0;
 
-  eNB->UL_INFO.sr_ind.number_of_srs++;
+  sr_ind_body->number_of_srs++;
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 }
 
@@ -1095,7 +1127,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
 		}
 	      }
             uci->stat = max_metric;
-            fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode
+	    fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode
 	    }
 	  } //else if ((uci->tdd_bundling == 0) && (res==3)) 
 	  else if ((uci->tdd_bundling == 0) && (uci->num_pucch_resources==4)){ // multiplexing + no SR, implement Table 10.1.3-7 (Rel14) for multiplexing with M=4
@@ -1256,14 +1288,14 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
       }
     
       if (SR_payload == 1) {
-	LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id,
+	LOG_E(PHY,"[eNB %d][SR %x] Frame %d subframe %d Got SR for PUSCH, transmitting to MAC\n",eNB->Mod_id,
 	      uci->rnti,frame,subframe);
 	
 	if (eNB->first_sr[i] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4
 	  eNB->first_sr[i] = 0;
 	  eNB->dlsch[i][0]->harq_processes[0]->round=0;
 	  eNB->dlsch[i][0]->harq_processes[0]->status=SCH_IDLE;
-	  LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
+	  LOG_E(PHY,"[eNB %d][SR %x] Frame %d subframe %d First SR\n",
 		eNB->Mod_id,
 		eNB->ulsch[i]->rnti,frame,subframe);
 	}
@@ -1280,81 +1312,80 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
   LTE_DL_FRAME_PARMS *fp=&eNB->frame_parms;
   LTE_eNB_ULSCH_t *ulsch;
   LTE_UL_eNB_HARQ_t *ulsch_harq;
+  struct timespec t_decode, t_crc,t_rx_ind,t_rx_ind_b,t_harq_a,t_harq_b,t_end;
 
   const int subframe = proc->subframe_rx;
   const int frame    = proc->frame_rx;
-
+  
   if (fp->frame_type == FDD) harq_pid = ((10*frame) + subframe)&7;
   else                       harq_pid = subframe%10;
 
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     ulsch = eNB->ulsch[i];
     ulsch_harq = ulsch->harq_processes[harq_pid];
-    if (ulsch->rnti>0) LOG_D(PHY,"Frame %d, subframe %d: PUSCH procedures, harq_pid %d, UE %d/%x\n",
-                             frame,subframe,harq_pid,i,ulsch->rnti);
-
+    if (ulsch->rnti>0) LOG_D(PHY,"eNB->ulsch[%d]->harq_processes[harq_pid:%d] Frame %d, subframe %d: PUSCH procedures, harq_pid %d, UE %d/%x ulsch_harq[status:%d frame:%d subframe:%d handled:%d]\n",
+			     i, harq_pid, frame,subframe,harq_pid,i,ulsch->rnti,
+                             ulsch_harq->status, ulsch_harq->frame, ulsch_harq->subframe, ulsch_harq->handled);
+    
     if ((ulsch) &&
         (ulsch->rnti>0) &&
         (ulsch_harq->status == ACTIVE) &&
-            (ulsch_harq->frame == frame) &&
-            (ulsch_harq->subframe == subframe) &&
+	    (ulsch_harq->frame == frame) &&
+	    (ulsch_harq->subframe == subframe) &&
         (ulsch_harq->handled == 0)) {
-
+      
       // UE has ULSCH scheduling
       for (int rb=0;
            rb<=ulsch_harq->nb_rb;
-           rb++) {
-        int rb2 = rb+ulsch_harq->first_rb;
-        eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
+	   rb++) {
+	int rb2 = rb+ulsch_harq->first_rb;
+	eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
       }
 
-      LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n",
-            eNB->Mod_id,
-            frame,
-            subframe,
-            i);
+      //LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i);
 
       nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1];
 
       ulsch->cyclicShift = (ulsch_harq->n_DMRS2 +
-                            fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
-                            nPRS)%12;
+          fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
+          nPRS)%12;
 
       LOG_D(PHY,
-            "[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, nprs %d), O_ACK %d, beta_cqi %d \n",
-            eNB->Mod_id,harq_pid,frame,subframe,
-            ulsch_harq->dci_alloc,
-            ulsch_harq->rar_alloc,
-            ulsch_harq->round,
-            ulsch_harq->first_rb,
-            ulsch_harq->nb_rb,
-            ulsch_harq->Qm,
-            ulsch_harq->TBS,
-            ulsch_harq->rvidx,
-            ulsch->cyclicShift,
-            ulsch_harq->n_DMRS2,
-            fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
-            nPRS,
-            ulsch_harq->O_ACK,
-            ulsch->beta_offset_cqi_times8);
-
-      start_meas(&eNB->ulsch_demodulation_stats);
+          "[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n",
+          eNB->Mod_id,harq_pid,frame,subframe,
+          ulsch_harq->dci_alloc,
+          ulsch_harq->rar_alloc,
+          ulsch_harq->round,
+          ulsch_harq->first_rb,
+          ulsch_harq->nb_rb,
+          ulsch_harq->Qm,
+          ulsch_harq->TBS,
+          ulsch_harq->rvidx,
+          ulsch->cyclicShift,
+          ulsch_harq->n_DMRS2,
+          fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
+          ulsch_harq->O_ACK,
+          ulsch->beta_offset_cqi_times8);
+
+        start_meas(&eNB->ulsch_demodulation_stats);
 
       rx_ulsch(eNB,proc, i);
 
-      stop_meas(&eNB->ulsch_demodulation_stats);
+        stop_meas(&eNB->ulsch_demodulation_stats);
+
+        clock_gettime(CLOCK_MONOTONIC,&t_decode);
 
-      start_meas(&eNB->ulsch_decoding_stats);
+        start_meas(&eNB->ulsch_decoding_stats);
 
-      ret = ulsch_decoding(eNB,proc,
-                           i,
-                           0, // control_only_flag
-                           ulsch_harq->V_UL_DAI,
-                           ulsch_harq->nb_rb>20 ? 1 : 0);
+        ret = ulsch_decoding(eNB,proc,
+            i,
+            0, // control_only_flag
+            ulsch_harq->V_UL_DAI,
+            ulsch_harq->nb_rb>20 ? 1 : 0);
 
-      stop_meas(&eNB->ulsch_decoding_stats);
+        stop_meas(&eNB->ulsch_decoding_stats);
 
-      LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
+        LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n",
             eNB->Mod_id,harq_pid,
             frame,subframe,
             ulsch->rnti,
@@ -1364,51 +1395,55 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
             20,//eNB->measurements.n0_power_dB[1],
             ulsch_harq->o_ACK[0],
             ulsch_harq->o_ACK[1],
-            ret);
+            ret,
+            ulsch_harq->cqi_crc_status,
+            ulsch_harq->O_ACK,
+            eNB->ulsch_decoding_stats.diff_now, eNB->ulsch_decoding_stats.max);
 
-      //compute the expected ULSCH RX power (for the stats)
-      ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
+        //compute the expected ULSCH RX power (for the stats)
+        ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
 
-      if (ulsch_harq->cqi_crc_status == 1) {
+        if (ulsch_harq->cqi_crc_status == 1) {
 #ifdef DEBUG_PHY_PROC
-        //if (((frame%10) == 0) || (frame < 50))
-        print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL);
+          //if (((frame%10) == 0) || (frame < 50))
+          print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL);
 #endif
 
-        fill_ulsch_cqi_indication(eNB,frame,subframe,
-                                  ulsch_harq,
-                                  ulsch->rnti);
+	fill_ulsch_cqi_indication(eNB,frame,subframe,
+				  ulsch_harq,
+				  ulsch->rnti);
       }
-
+      
       if (ret == (1+MAX_TURBO_ITERATIONS)) {
         T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
           T_INT(harq_pid));
 
-        fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC
-        fill_rx_indication(eNB,i,frame,subframe);  // indicate SDU to MAC
+	fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC
+	fill_rx_indication(eNB,i,frame,subframe);  // indicate SDU to MAC
+
+	LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
+	      eNB->Mod_id,harq_pid,
+	      frame,subframe, i,
+	      ulsch_harq->round-1,
+	      ulsch->Mlimit,
+	      ulsch_harq->o_ACK[0],
+	      ulsch_harq->o_ACK[1]);
 
-        LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
-              eNB->Mod_id,harq_pid,
-              frame,subframe, i,
-              ulsch_harq->round-1,
-              ulsch->Mlimit,
-              ulsch_harq->o_ACK[0],
-              ulsch_harq->o_ACK[1]);
         if (ulsch_harq->round >= 3)  {
            ulsch_harq->status  = SCH_IDLE;
            ulsch_harq->handled = 0;
            ulsch->harq_mask   &= ~(1 << harq_pid);
            ulsch_harq->round   = 0;
-        } 
+	  }
 #if defined(MESSAGE_CHART_GENERATOR_PHY)
         MSC_LOG_RX_DISCARDED_MESSAGE(
-                                     MSC_PHY_ENB,MSC_PHY_UE,
-                                     NULL,0,
-                                     "%05u:%02u ULSCH received rnti %x harq id %u round %d",
-                                     frame,subframe,
-                                     ulsch->rnti,harq_pid,
-                                     ulsch_harq->round-1
-                                     );
+            MSC_PHY_ENB,MSC_PHY_UE,
+            NULL,0,
+            "%05u:%02u ULSCH received rnti %x harq id %u round %d",
+            frame,subframe,
+            ulsch->rnti,harq_pid,
+            ulsch_harq->round-1
+            );
 #endif
 
         /* Mark the HARQ process to release it later if max transmission reached
@@ -1419,8 +1454,12 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
         ulsch_harq->handled = 1;
       }  // ulsch in error
       else {
-        fill_crc_indication(eNB,i,frame,subframe,0); // indicate ACK to MAC
-        fill_rx_indication(eNB,i,frame,subframe);  // indicate SDU to MAC
+        clock_gettime(CLOCK_MONOTONIC,&t_crc);
+
+	fill_crc_indication(eNB,i,frame,subframe,0); // indicate ACK to MAC
+        clock_gettime(CLOCK_MONOTONIC,&t_rx_ind);
+	fill_rx_indication(eNB,i,frame,subframe);  // indicate SDU to MAC
+        clock_gettime(CLOCK_MONOTONIC,&t_rx_ind_b);
 
         ulsch_harq->status = SCH_IDLE;
         ulsch->harq_mask   &= ~(1 << harq_pid);
@@ -1429,29 +1468,31 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
           T_INT(harq_pid));
 
 #if defined(MESSAGE_CHART_GENERATOR_PHY)
-        MSC_LOG_RX_MESSAGE(
-                           MSC_PHY_ENB,MSC_PHY_UE,
-                           NULL,0,
-                           "%05u:%02u ULSCH received rnti %x harq id %u",
-                           frame,subframe,
-                           ulsch->rnti,harq_pid
-                           );
+          MSC_LOG_RX_MESSAGE(
+              MSC_PHY_ENB,MSC_PHY_UE,
+              NULL,0,
+              "%05u:%02u ULSCH received rnti %x harq id %u",
+              frame,subframe,
+              ulsch->rnti,harq_pid
+              );
 #endif
 
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_ULSCH
-        LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,subframe,
-                harq_pid,ulsch_harq->TBS>>3);
+          LOG_D(PHY,"[eNB] Frame %d, Subframe %d : ULSCH SDU (RX harq_pid %d) %d bytes:",frame,subframe,
+              harq_pid,ulsch_harq->TBS>>3);
 
-        for (j=0; j<ulsch_harq->TBS>>3; j++)
-          LOG_T(PHY,"%x.",ulsch->harq_processes[harq_pid]->b[j]);
+          for (j=0; j<ulsch_harq->TBS>>3; j++)
+            LOG_T(PHY,"%x.",ulsch->harq_processes[harq_pid]->b[j]);
 
-        LOG_T(PHY,"\n");
+          LOG_T(PHY,"\n");
 #endif
 #endif
-      }  // ulsch not in error
+        }  // ulsch not in error
 
+      clock_gettime(CLOCK_MONOTONIC,&t_harq_a);
       if (ulsch_harq->O_ACK>0) fill_ulsch_harq_indication(eNB,ulsch_harq,ulsch->rnti,frame,subframe,ulsch->bundling);
+      clock_gettime(CLOCK_MONOTONIC,&t_harq_b);
 
       LOG_D(PHY,"[eNB %d] Frame %d subframe %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n",
             eNB->Mod_id,frame,subframe,
@@ -1472,14 +1513,23 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
              (ulsch_harq->frame == frame) &&
              (ulsch_harq->subframe == subframe) &&
              (ulsch_harq->handled == 1)) {
-      // this harq process is stale, kill it, this 1024 frames later (10s), consider reducing that
-      ulsch_harq->status = SCH_IDLE;
+          // this harq process is stale, kill it, this 1024 frames later (10s), consider reducing that
+           ulsch_harq->status = SCH_IDLE;
       ulsch_harq->handled = 0;
       ulsch->harq_mask   &= ~(1 << harq_pid);
       LOG_W(PHY,"Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)\n",
             ulsch->rnti, harq_pid, ulsch->harq_mask);
     }
   }   //   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
+  clock_gettime(CLOCK_MONOTONIC,&t_end);
+  if (0)LOG_E(PHY,"%s() TIMING:decode:%ld.%09ld crc:%ld.%09ld rx_ind:%ld.%09ld-%ld.%09ld harq:%ld.%09ld-%ld.%09ld end:%ld.%09ld\n", __FUNCTION__, 
+      t_decode.tv_sec, t_decode.tv_nsec, 
+      t_crc.tv_sec, t_crc.tv_nsec, 
+      t_rx_ind.tv_sec, t_rx_ind.tv_nsec, 
+      t_rx_ind_b.tv_sec, t_rx_ind_b.tv_nsec, 
+      t_harq_a.tv_sec, t_harq_a.tv_nsec,
+      t_harq_b.tv_sec, t_harq_b.tv_nsec,
+      t_end.tv_sec, t_end.tv_nsec);
 }
 
 extern int oai_exit;
@@ -1525,19 +1575,25 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe)
   int sync_pos;
 
   uint32_t harq_pid = subframe2harq_pid(&eNB->frame_parms,
-                                        frame,subframe);
+					frame,subframe);
 
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
-  pdu                                    = &eNB->UL_INFO.rx_ind.rx_pdu_list[eNB->UL_INFO.rx_ind.number_of_pdus];
+
+  eNB->UL_INFO.rx_ind.sfn_sf                    = frame<<4| subframe;
+  eNB->UL_INFO.rx_ind.rx_indication_body.tl.tag = NFAPI_RX_INDICATION_BODY_TAG;
+
+  pdu                                    = &eNB->UL_INFO.rx_ind.rx_indication_body.rx_pdu_list[eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus];
 
   //  pdu->rx_ue_information.handle          = eNB->ulsch[UE_id]->handle;
+  pdu->rx_ue_information.tl.tag          = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti            = eNB->ulsch[UE_id]->rnti;
+  pdu->rx_indication_rel8.tl.tag         = NFAPI_RX_INDICATION_REL8_TAG;
   pdu->rx_indication_rel8.length         = eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS>>3;
-  pdu->rx_indication_rel8.offset         = 0;  // filled in at the end of the UL_INFO formation
-  pdu->data                              = eNB->ulsch[UE_id]->harq_processes[harq_pid]->b;
+  pdu->rx_indication_rel8.offset         = 1;   // DJP - I dont understand - but broken unless 1 ????  0;  // filled in at the end of the UL_INFO formation
+  pdu->data                              = eNB->ulsch[UE_id]->harq_processes[harq_pid]->b;  
   // estimate timing advance for MAC
   sync_pos                               = lte_est_timing_advance_pusch(eNB,UE_id);
-  timing_advance_update                  = sync_pos - eNB->frame_parms.nb_prefix_samples/4; //to check
+  timing_advance_update                  = sync_pos; // - eNB->frame_parms.nb_prefix_samples/4; //to check
 
   //  if (timing_advance_update > 10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
   //  if (timing_advance_update < -10) { dump_ulsch(eNB,frame,subframe,UE_id); exit(-1);}
@@ -1564,10 +1620,10 @@ void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe)
   else                        pdu->rx_indication_rel8.ul_cqi=(640+SNRtimes10)/5;
 
   LOG_D(PHY,"[PUSCH %d] Filling RX_indication with SNR %d (%d), timing_advance %d (update %d)\n",
-        harq_pid,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,pdu->rx_indication_rel8.timing_advance,
-        timing_advance_update);
+	harq_pid,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,pdu->rx_indication_rel8.timing_advance,
+	timing_advance_update);
 
-  eNB->UL_INFO.rx_ind.number_of_pdus++;
+  eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus++;
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 }
 
@@ -1662,11 +1718,13 @@ void fill_ulsch_cqi_indication(PHY_VARS_eNB *eNB,uint16_t frame,uint8_t subframe
   nfapi_cqi_indication_pdu_t *pdu         = &eNB->UL_INFO.cqi_ind.cqi_pdu_list[eNB->UL_INFO.cqi_ind.number_of_cqis];
   nfapi_cqi_indication_raw_pdu_t *raw_pdu = &eNB->UL_INFO.cqi_ind.cqi_raw_pdu_list[eNB->UL_INFO.cqi_ind.number_of_cqis];
 
+  pdu->rx_ue_information.tl.tag          = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti = rnti;
   if (ulsch_harq->cqi_crc_status != 1) pdu->cqi_indication_rel9.data_offset = 0;
   else               pdu->cqi_indication_rel9.data_offset = 1; // fill in after all cqi_indications have been generated when non-zero
 
   // by default set O to rank 1 value
+  pdu->cqi_indication_rel9.tl.tag = NFAPI_CQI_INDICATION_REL9_TAG;
   pdu->cqi_indication_rel9.length = (ulsch_harq->Or1>>3) + ((ulsch_harq->Or1&7) > 0 ? 1 : 0);
   pdu->cqi_indication_rel9.ri[0]  = 0;
 
@@ -1681,6 +1739,8 @@ void fill_ulsch_cqi_indication(PHY_VARS_eNB *eNB,uint16_t frame,uint8_t subframe
   pdu->ul_cqi_information.channel = 1; // PUSCH
   memcpy((void*)raw_pdu->pdu,ulsch_harq->o,pdu->cqi_indication_rel9.length);
   eNB->UL_INFO.cqi_ind.number_of_cqis++;
+  LOG_E(PHY,"eNB->UL_INFO.cqi_ind.number_of_cqis:%d\n", eNB->UL_INFO.cqi_ind.number_of_cqis);
+
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 
 }
@@ -1690,16 +1750,23 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
   int UE_id = find_dlsch(rnti,eNB,SEARCH_EXIST);
   AssertFatal(UE_id>=0,"UE_id doesn't exist\n");
 
+  LOG_I(PHY,"%s(eNB, ulsch_harq, rnti:%04x, frame:%d, subframe:%d, bundling:%d) harq_pdus:%d\n", __FUNCTION__, rnti, frame, subframe, bundling,eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs);
+
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
-  nfapi_harq_indication_pdu_t *pdu =   &eNB->UL_INFO.harq_ind.harq_pdu_list[eNB->UL_INFO.harq_ind.number_of_harqs];
+  nfapi_harq_indication_pdu_t *pdu =   &eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list[eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs];
   int M;
   int i;
 
+  eNB->UL_INFO.harq_ind.header.message_id = NFAPI_HARQ_INDICATION;
+  eNB->UL_INFO.harq_ind.sfn_sf = frame<<4|subframe;
+
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
+  pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti                         = rnti;
 
   if (eNB->frame_parms.frame_type == FDD) {
+    pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
     pdu->harq_indication_fdd_rel13.mode = 0;
     pdu->harq_indication_fdd_rel13.number_of_ack_nack = ulsch_harq->O_ACK;
 
@@ -1725,8 +1792,9 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
     M=ul_ACK_subframe2_M(&eNB->frame_parms,
 			 subframe);
 
-    pdu->harq_indication_fdd_rel13.mode = 1-bundling;
-    pdu->harq_indication_fdd_rel13.number_of_ack_nack = ulsch_harq->O_ACK;
+    pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
+    pdu->harq_indication_tdd_rel13.mode = 1-bundling;
+    pdu->harq_indication_tdd_rel13.number_of_ack_nack = ulsch_harq->O_ACK;
 
     for (i=0;i<ulsch_harq->O_ACK;i++) {
       AssertFatal(ulsch_harq->o_ACK[i] == 0 || ulsch_harq->o_ACK[i] == 1, "harq_ack[%d] is %d, should be 1,2 or 4\n",i,ulsch_harq->o_ACK[i]);
@@ -1744,7 +1812,9 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
     }	
   }
 
-  eNB->UL_INFO.harq_ind.number_of_harqs++;
+  //LOG_E(PHY,"eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs:%d\n", eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs);
+  eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs++;
+
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 }
 
@@ -1757,17 +1827,26 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 			      uint16_t tdd_multiplexing_mask) {
 
   int UE_id=find_dlsch(uci->rnti,eNB,SEARCH_EXIST);
-  AssertFatal(UE_id>=0,"UE_id doesn't exist\n");
-
+  AssertFatal(UE_id>=0,"UE_id doesn't exist rnti:%x\n", uci->rnti);
 
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
-  nfapi_harq_indication_pdu_t *pdu =   &eNB->UL_INFO.harq_ind.harq_pdu_list[eNB->UL_INFO.harq_ind.number_of_harqs];
 
+  nfapi_harq_indication_t *ind       = &eNB->UL_INFO.harq_ind;
+  nfapi_harq_indication_body_t *body = &ind->harq_indication_body;
+  nfapi_harq_indication_pdu_t *pdu   = &body->harq_pdu_list[eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs];
+
+  ind->sfn_sf = frame<<4|subframe;
+  ind->header.message_id = NFAPI_HARQ_INDICATION;
+
+  body->tl.tag = NFAPI_HARQ_INDICATION_BODY_TAG;
+ 
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
+  pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti                         = uci->rnti;
 
   // estimate UL_CQI for MAC (from antenna port 0 only)
+  pdu->ul_cqi_information.tl.tag = NFAPI_UL_CQI_INFORMATION_TAG;
   int SNRtimes10 = dB_fixed_times10(uci->stat) - 200;//(10*eNB->measurements.n0_power_dB[0]);
 
   if (SNRtimes10 < -100) LOG_I(PHY,"uci->stat %d \n",uci->stat);
@@ -1779,6 +1858,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 
   if (eNB->frame_parms.frame_type == FDD) {
     if (uci->pucch_fmt == pucch_format1a) {
+      pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
       pdu->harq_indication_fdd_rel13.mode = 0;  
       pdu->harq_indication_fdd_rel13.number_of_ack_nack = 1;
       
@@ -1797,6 +1877,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 #endif
     }
     else if (uci->pucch_fmt == pucch_format1b) {
+      pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
       pdu->harq_indication_fdd_rel13.mode = 0;  
       pdu->harq_indication_fdd_rel13.number_of_ack_nack = 2;
       AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[1] == 4, "harq_ack[0] is %d, should be 0,1 or 4\n",harq_ack[0]);
@@ -1814,12 +1895,14 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
     AssertFatal(tdd_mapping_mode==0 || tdd_mapping_mode==1 || tdd_mapping_mode==2,
 		"Illegal tdd_mapping_mode %d\n",tdd_mapping_mode);
 
+    pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
     pdu->harq_indication_tdd_rel13.mode = tdd_mapping_mode;  
 
     switch (tdd_mapping_mode) {
     case 0: // bundling
 
       if (uci->pucch_fmt == pucch_format1a) {
+        pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
 	pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1;	
 	AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]);
 	pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0];
@@ -1830,6 +1913,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	pdu->harq_indication_tdd_rel13.number_of_ack_nack = 2;
 	AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[1] == 4, "harq_ack[0] is %d, should be 0,1 or 4\n",harq_ack[0]);
 	AssertFatal(harq_ack[1] == 1 || harq_ack[1] == 2 || harq_ack[1] == 4, "harq_ack[1] is %d, should be 0,1 or 4\n",harq_ack[1]);
+        pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
 	pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0];
 	pdu->harq_indication_tdd_rel13.harq_data[1].bundling.value_0 = harq_ack[1]; 
 	// release all DLSCH if needed
@@ -1841,6 +1925,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
       AssertFatal(uci->pucch_fmt == pucch_format1b,"uci->pucch_format %d is not format1b\n",uci->pucch_fmt);
       
       if (uci->num_pucch_resources == 1 && uci->pucch_fmt == pucch_format1a) {
+        pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
 	pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1;	
 	AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]);
 	pdu->harq_indication_tdd_rel13.harq_data[0].multiplex.value_0 = harq_ack[0];
@@ -1848,6 +1933,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	if (harq_ack[0] == 1) release_harq(eNB,UE_id,0,frame,subframe,0xffff);
       }
       else if (uci->num_pucch_resources == 1 && uci->pucch_fmt == pucch_format1b) {
+        pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
 	pdu->harq_indication_tdd_rel13.number_of_ack_nack = 2;
 	AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[1] == 4, "harq_ack[0] is %d, should be 0,1 or 4\n",harq_ack[0]);
 	AssertFatal(harq_ack[1] == 1 || harq_ack[1] == 2 || harq_ack[1] == 4, "harq_ack[1] is %d, should be 0,1 or 4\n",harq_ack[1]);
@@ -1858,6 +1944,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 	if (harq_ack[1] == 1) release_harq(eNB,UE_id,1,frame,subframe,0xffff);
       }
       else { // num_pucch_resources (M) > 1
+        pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
 	pdu->harq_indication_tdd_rel13.number_of_ack_nack = uci->num_pucch_resources;
 
 	pdu->harq_indication_tdd_rel13.harq_data[0].multiplex.value_0 = harq_ack[0];
@@ -1870,6 +1957,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
       }
       break;
     case 2: // special bundling (SR collision)
+      pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
       pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1;
       int tdd_config5_sf2scheds=0;
       if (eNB->frame_parms.tdd_config==5) tdd_config5_sf2scheds = getM(eNB,frame,subframe);
@@ -1905,7 +1993,8 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
   } //TDD
 
 
-  eNB->UL_INFO.harq_ind.number_of_harqs++;
+  eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs++;
+  LOG_E(PHY,"Incremented eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs:%d\n", eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs);
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);  
 
 }
@@ -1914,14 +2003,23 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
 void fill_crc_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe,uint8_t crc_flag) {
 
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
-  nfapi_crc_indication_pdu_t *pdu =   &eNB->UL_INFO.crc_ind.crc_pdu_list[eNB->UL_INFO.crc_ind.number_of_crcs];
+  nfapi_crc_indication_pdu_t *pdu =   &eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list[eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs];
+
+  eNB->UL_INFO.crc_ind.sfn_sf                         = frame<<4 | subframe;
+  eNB->UL_INFO.crc_ind.header.message_id              = NFAPI_CRC_INDICATION;
+  eNB->UL_INFO.crc_ind.crc_indication_body.tl.tag     = NFAPI_CRC_INDICATION_BODY_TAG;
 
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
+  pdu->rx_ue_information.tl.tag                       = NFAPI_RX_UE_INFORMATION_TAG;
   pdu->rx_ue_information.rnti                         = eNB->ulsch[UE_id]->rnti;
+  pdu->crc_indication_rel8.tl.tag                     = NFAPI_CRC_INDICATION_REL8_TAG; 
   pdu->crc_indication_rel8.crc_flag                   = crc_flag;
 
-  eNB->UL_INFO.crc_ind.number_of_crcs++;
+  eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs++;
+
+  //LOG_D(PHY, "%s() rnti:%04x crcs:%d crc_flag:%d\n", __FUNCTION__, pdu->rx_ue_information.rnti, eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs, crc_flag);
+
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
 }
 
@@ -1944,38 +2042,53 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 );
 
-  LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe);
+  //LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe);
 
   eNB->rb_mask_ul[0]=0;
   eNB->rb_mask_ul[1]=0;
   eNB->rb_mask_ul[2]=0;
   eNB->rb_mask_ul[3]=0;
 
-  // Fix me here, these should be locked
-  eNB->UL_INFO.rx_ind.number_of_pdus  = 0;
-  eNB->UL_INFO.crc_ind.number_of_crcs = 0;
-
   // Call SRS first since all others depend on presence of SRS or lack thereof
   srs_procedures(eNB,proc);
 
-  lte_eNB_I0_measurements(eNB,
-			  subframe,
-			  0,
-			  eNB->first_run_I0_measurements);
+  {
+    static int first_time=1;
+    if (first_time)
+    {
+      LOG_E(PHY,"%s() DJP - removed lte_eNB_I0_measurements because it core dumps - no idea why!!!\n\n\n\n\n", __FUNCTION__);
+      first_time=0;
+    }
+  }
   eNB->first_run_I0_measurements = 0;
 
   uci_procedures(eNB,proc);
 
-  pusch_procedures(eNB,proc);
+  if (nfapi_mode == 0 || nfapi_mode == 1) // If PNF or monolithic
+  {
+    pusch_procedures(eNB,proc);
+  }
 
+#if 0
+  lte_eNB_I0_measurements(eNB,
+                          subframe,
+                          0,
+                          eNB->first_run_I0_measurements);
+#endif
+
+  int min_I0=1000,max_I0=0;
+  if ((frame==0) && (subframe==6)) { 
+    for (int i=0;i<eNB->frame_parms.N_RB_UL;i++) {
+      if (i==(eNB->frame_parms.N_RB_UL>>1) - 1) i+=2;
+ 
+      if (eNB->measurements.n0_subband_power_tot_dB[i]<min_I0) min_I0 = eNB->measurements.n0_subband_power_tot_dB[i];
+      if (eNB->measurements.n0_subband_power_tot_dB[i]>max_I0) max_I0 = eNB->measurements.n0_subband_power_tot_dB[i];
+    }
+    LOG_I(PHY,"max_I0 %d, min_I0 %d\n",max_I0,min_I0);
+  }
 
-  
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 0 );
 
   stop_meas(&eNB->phy_proc_rx);
 
 }
-
-
-
-
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index 15f735c5c91a92e455ef3630534663619d8d9b44..7d91dc3c243c04dcb74fecca945789fb43a4aa1c 100644
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -75,7 +75,8 @@ fifo_dump_emos_UE emos_dump_UE;
 
 extern double cpuf;
 
-
+void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
+void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
 
 #if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
 extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
@@ -3637,7 +3638,6 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
       }
     }
     
-    if (abstraction_flag == 0) {
       
       // start turbo decode for CW 0
       dlsch0->harq_processes[harq_pid]->G = get_G(&ue->frame_parms,
@@ -3774,17 +3774,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 	}
       
       LOG_D(PHY," ------ end turbo decoder for AbsSubframe %d.%d ------  \n", frame_rx, subframe_rx);
-    }
     
-    else {
-      LOG_D(PHY,"Calling dlsch_decoding_emul ...\n");
-#ifdef PHY_ABSTRACTION
-      ret = dlsch_decoding_emul(ue,
-				subframe_rx,
-				pdsch,
-				eNB_id);
-#endif
-    }
     
 
     // Check CRC for CW 0
diff --git a/openair1/SCHED/pucch_pc.c b/openair1/SCHED/pucch_pc.c
index 510d9a1401547ab1ae1106318d52f17ff818ff1e..f01d0d96dd7df5ddbc65cc8270d0ea4d760e5b43 100644
--- a/openair1/SCHED/pucch_pc.c
+++ b/openair1/SCHED/pucch_pc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c
index 8b2e19eef186416ed6e2c6a780168cd734266dba..caef13162726849dd38948a8079adaca4982bcc9 100644
--- a/openair1/SCHED/pusch_pc.c
+++ b/openair1/SCHED/pusch_pc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/rt_compat.h b/openair1/SCHED/rt_compat.h
index b220d6f06a97b505602082b3e8f6871f700297c0..35e99098fa37473e96dfff4c2c8b11029d1f7a97 100644
--- a/openair1/SCHED/rt_compat.h
+++ b/openair1/SCHED/rt_compat.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/ru_procedures.c b/openair1/SCHED/ru_procedures.c
index 7e0ca4e76a156c8c3ce1f13644125788de6b1143..ce49d72c68cf66f94b09082437db86bf2daf1639 100644
--- a/openair1/SCHED/ru_procedures.c
+++ b/openair1/SCHED/ru_procedures.c
@@ -69,16 +69,17 @@ void feptx0(RU_t *ru,int slot) {
   //int dummy_tx_b[7680*2] __attribute__((aligned(32)));
 
   unsigned int aa,slot_offset;
-  int i,j, tx_offset;
+  int i, tx_offset;
   int slot_sizeF = (fp->ofdm_symbol_size)*
                    ((fp->Ncp==1) ? 6 : 7);
-  int len,len2;
-  int16_t *txdata;
   int subframe = ru->proc.subframe_tx;
 
+
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 1 );
+
   slot_offset = subframe*fp->samples_per_tti + (slot*(fp->samples_per_tti>>1));
 
-  //    LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
+  //LOG_D(PHY,"SFN/SF:RU:TX:%d/%d Generating slot %d\n",ru->proc.frame_tx, ru->proc.subframe_tx,slot);
 
   for (aa=0; aa<ru->nb_tx; aa++) {
     if (fp->Ncp == EXTENDED) PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot*slot_sizeF],
@@ -134,6 +135,7 @@ void feptx0(RU_t *ru,int slot) {
       }
     }
   }
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM+slot , 0);
 }
 
 static void *feptx_thread(void *param) {
@@ -175,6 +177,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
 
   if (subframe_select(fp,subframe) == SF_UL) return;
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 1 );
+
   if (subframe_select(fp,subframe)==SF_DL) {
     // If this is not an S-subframe
     if (pthread_mutex_timedlock(&proc->mutex_feptx,&wait) != 0) {
@@ -206,6 +210,8 @@ void feptx_ofdm_2thread(RU_t *ru) {
   feptx0(ru,0);
   wait_on_busy_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread");  
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 );
+
   stop_meas(&ru->ofdm_mod_stats);
 
 }
@@ -300,11 +306,11 @@ void feptx_ofdm(RU_t *ru) {
 	}
 	txdata = (int16_t*)&ru->common.txdata[aa][0];
 	for (j=0; i<(len<<1); i++,j++) {
-	  txdata[j++] = ((int16_t*)dummy_tx_b)[i];
+          txdata[j++] = ((int16_t*)dummy_tx_b)[i];
 	}
       }
       else {
-	LOG_D(PHY,"feptx_ofdm: Writing to position %d\n",slot_offset);
+	//LOG_D(PHY,"feptx_ofdm: Writing to position %d\n",slot_offset);
 	tx_offset = (int)slot_offset;
 	txdata = (int16_t*)&ru->common.txdata[aa][tx_offset];
 
@@ -323,9 +329,9 @@ void feptx_ofdm(RU_t *ru) {
       */
      if ((fp->frame_type == TDD) && 
          ((fp->tdd_config==0) ||
-	      (fp->tdd_config==1) ||
-	      (fp->tdd_config==2) ||
-	      (fp->tdd_config==6)) && 
+	   (fp->tdd_config==1) ||
+	   (fp->tdd_config==2) ||
+	   (fp->tdd_config==6)) && 
 	     ((subframe==0) || (subframe==5))) {
        // turn on tx switch N_TA_offset before
        //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,ru->N_TA_offset,slot_offset);
@@ -361,10 +367,24 @@ void feptx_prec(RU_t *ru) {
     eNB = eNB_list[0];
     fp  = &eNB->frame_parms;
     
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 1);
+
+    //LOG_D(PHY, "%s() subframe:%d\n", __FUNCTION__, subframe);
+
+    if (0) LOG_E(PHY,"%s() run->nb_tx:%u subframe:%u fp->symbols_per_tti:%u fp->ofdm_symbol_size:%u symbols:(%d, %d), (%d,%d)\n", 
+    __FUNCTION__, ru->nb_tx, subframe, fp->symbols_per_tti, fp->ofdm_symbol_size,
+    ((short*)&eNB->common_vars.txdataF[0][1])[0],
+    ((short*)&eNB->common_vars.txdataF[0][1])[1],
+    ((short*)&eNB->common_vars.txdataF[0][2])[0],
+    ((short*)&eNB->common_vars.txdataF[0][2])[1]
+    );
+
     for (aa=0;aa<ru->nb_tx;aa++)
       memcpy((void*)ru->common.txdataF_BF[aa],
 	     (void*)&eNB->common_vars.txdataF[aa][subframe*fp->symbols_per_tti*fp->ofdm_symbol_size],
 	     fp->symbols_per_tti*fp->ofdm_symbol_size*sizeof(int32_t));
+
+    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_PREC , 0);
   }
   else {
     for (i=0;i<ru->num_eNB;i++) {
@@ -383,9 +403,11 @@ void feptx_prec(RU_t *ru) {
 			 aa);
 	}
       }
+#if 0
       LOG_D(PHY,"feptx_prec: frame %d, subframe %d: txp (freq) %d dB\n",
 	    ru->proc.frame_tx,subframe,
 	    dB_fixed(signal_energy_nodc(ru->common.txdataF_BF[0],2*fp->symbols_per_tti*fp->ofdm_symbol_size)));
+#endif
     }
   }
 }
@@ -398,6 +420,8 @@ void fep0(RU_t *ru,int slot) {
 
   //  printf("fep0: slot %d\n",slot);
 
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX+slot, 1);
+
   remove_7_5_kHz(ru,(slot&1)+(proc->subframe_rx<<1));
   for (l=0; l<fp->symbols_per_tti/2; l++) {
     slot_fep_ul(ru,
@@ -406,6 +430,7 @@ void fep0(RU_t *ru,int slot) {
 		0
 		);
   }
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX+slot, 0);
 }
 
 
@@ -468,6 +493,13 @@ void ru_fep_full_2thread(RU_t *ru) {
 
   struct timespec wait;
 
+  LTE_DL_FRAME_PARMS *fp=&ru->frame_parms;
+
+  if ((fp->frame_type == TDD) &&
+     (subframe_select(fp,proc->subframe_rx) != SF_UL)) return;
+
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 );
+
   wait.tv_sec=0;
   wait.tv_nsec=5000000L;
 
@@ -513,8 +545,11 @@ void fep_full(RU_t *ru) {
   int l;
   LTE_DL_FRAME_PARMS *fp=&ru->frame_parms;
 
-  start_meas(&ru->ofdm_demod_stats);
+  if ((fp->frame_type == TDD) && 
+     (subframe_select(fp,proc->subframe_rx) != SF_UL)) return;
 
+  start_meas(&ru->ofdm_demod_stats);
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 );
 
   remove_7_5_kHz(ru,proc->subframe_rx<<1);
   remove_7_5_kHz(ru,1+(proc->subframe_rx<<1));
@@ -530,6 +565,7 @@ void fep_full(RU_t *ru) {
 		0
 		);
   }
+  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 0 );
   stop_meas(&ru->ofdm_demod_stats);
   
   
@@ -575,4 +611,3 @@ void do_prach_ru(RU_t *ru) {
   }
 
 }
-
diff --git a/openair1/SCHED/srs_pc.c b/openair1/SCHED/srs_pc.c
index 98049b2ed0cd09a9e1c32da5e8dfad4254970242..04dacecc25a5aa59e6feb2ea35811dbe913082fc 100644
--- a/openair1/SCHED/srs_pc.c
+++ b/openair1/SCHED/srs_pc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SCHED/vars.h b/openair1/SCHED/vars.h
index 39eaf7f1188b8f8d20831d9854bf16f3b3889f80..4dac375f18d0973167228192c7371f75b89d5eea 100644
--- a/openair1/SCHED/vars.h
+++ b/openair1/SCHED/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c
index c7815b087db9c3ddaaa46849e7b5bd2a08dcff26..01bc8f490106736c9615187c02e397b21c997a6e 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/defs.h b/openair1/SIMULATION/ETH_TRANSPORT/defs.h
index 48531a2da660de4629bb9acdf72eabe74a7149d7..3b744aa859fd74b2bca76305dab11019918c9151 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/defs.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
index 5f34e0e0233e6cc13fbab64f79d29f99914a9714..186201cd0b19e9ed03759e2b1faa5c7e27dbe9cd 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/extern.h b/openair1/SIMULATION/ETH_TRANSPORT/extern.h
index 89cf38f15b82b7af95deae3f4afcecb5d5b62bfb..fafa7009f5480bd1ec0983b58cea8cf21f4aa863 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/extern.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
index d161da6a74d13ce32e7518f84e428d1ed69a751e..f32823f3bb51fe66f74a8f82a996175f51dda847 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
index d4071e7ff2bd8c47ec768c87587dda09c2011224..3c072e0e3c8911cbed63a09bb3e198fd41ac1b3f 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c
index b0c01706fd23606aed73e41835525bfcd8de28de..b578721a1a0ffed4b79f7956551d8ae3fe49c00c 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/netlink_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c
index 9feeeca45786298d67c04eadf748e0540b49186c..61bf9406607e4198920a8a35649daf629e9a9cd4 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h
index b444d123bc51b4ea632f6a62ce5780f6cdb02ac0..03fa6d4b482aa1b84ed4e6d35814c6d1fedd739e 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/proto.h b/openair1/SIMULATION/ETH_TRANSPORT/proto.h
index 5b43c8621771f9a4fdae2713a62b26cb2b07803b..6a693085c99867f2ccec551a01339df1a63b999f 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/proto.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/socket.c b/openair1/SIMULATION/ETH_TRANSPORT/socket.c
index d8dd81ffdc56e76e78294d07420d0edc16541572..e288dcb37896f70b79951a33491f50149931a920 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/socket.c
+++ b/openair1/SIMULATION/ETH_TRANSPORT/socket.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/socket.h b/openair1/SIMULATION/ETH_TRANSPORT/socket.h
index ede14f8db150b97f00f520ca03b33ac368169a64..c7a2224375e8f9d797c0ad9c6bf515dc1f90f9e1 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/socket.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/socket.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/ETH_TRANSPORT/vars.h b/openair1/SIMULATION/ETH_TRANSPORT/vars.h
index 09d9c94295a340fdfaea18283fff6c3af789387a..0ec38a8e907ad153ac8d5b4d37a3341005c60334 100644
--- a/openair1/SIMULATION/ETH_TRANSPORT/vars.h
+++ b/openair1/SIMULATION/ETH_TRANSPORT/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c
index 6507a656a1e775f3a1fa3381d1e02064fe214e8a..c894e49e909e378760ce4a493bfdd3917bcc74db 100644
--- a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c
+++ b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h
index ce8a3b994f19f227465dbe315ca17a3d92e4aee2..06b93650e7e0f02a502810337e09adda8606ec5a 100644
--- a/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h
+++ b/openair1/SIMULATION/LTE_PHY/LTE_Configuration.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 02591dcc8f3ecd608372bae441b6d598c8e6cdd9..34055517b24507482545f26ac4357882a4ea3a72 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
index f493336e988aa453a525609ad845d2570476c4fe..90ba1ec8044e81b6491e98a82e26a14c3909ad73 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
index b257b1561b533b104a05fe76d704e66a46b4167c..3c4b3d0cd308cf8ea52667ff25f8ade505607f88 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c
index 9719aeb9e52c0be1cc4544325d5d59b81ea4984f..0adc07ff97f8fccb4928c4fa4725069f447ec56b 100644
--- a/openair1/SIMULATION/LTE_PHY/framegen.c
+++ b/openair1/SIMULATION/LTE_PHY/framegen.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/gpib_send.c b/openair1/SIMULATION/LTE_PHY/gpib_send.c
index 40bcfa87221601899c4015d4858498048e181104..a8ae48cdfae32fb22fd476d5e9610ba7a3d0560f 100644
--- a/openair1/SIMULATION/LTE_PHY/gpib_send.c
+++ b/openair1/SIMULATION/LTE_PHY/gpib_send.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/gpib_send.h b/openair1/SIMULATION/LTE_PHY/gpib_send.h
index 1f1f14e9560398a7682cdfad6340a9505cbece5d..b83026296ac0a20243f48fb4f55064c1c2a1c618 100644
--- a/openair1/SIMULATION/LTE_PHY/gpib_send.h
+++ b/openair1/SIMULATION/LTE_PHY/gpib_send.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 69de4aee9f000337292bff2f6d5c2e5b9f9d3822..773ec57a3e914284a6a151e9214e7ad161f99afd 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c
index 687e7219e82b55cd1c01863fa69a4667ad99c924..e240f88ce6665f36529871a19386591b8ffb43ed 100644
--- a/openair1/SIMULATION/LTE_PHY/pbchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index 1102d4be3800ba2515669dfb2020aab0604741ab..71e2f881721dc7a38b1fefca9317c4e03add7745 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c
index 52339cdc5d585c1a20f6276bc680283d6bb46afa..cab2ecb8fb06c813fc01489432a9ff41ce5cc0f9 100644
--- a/openair1/SIMULATION/LTE_PHY/prachsim.c
+++ b/openair1/SIMULATION/LTE_PHY/prachsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h b/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h
index a17d708747a78cefd408fa60eae29797b7cabc43..779b9ed423028422357a4b378529e33b0784c6ef 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h
+++ b/openair1/SIMULATION/LTE_PHY/pucchsignalgegerator.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c b/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c
index 20f044eb930d83516d1ac17b1fa6df80e3869f06..cf8e0b6d4a882b50bc36afb01369bd4eeb28f453 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c
+++ b/openair1/SIMULATION/LTE_PHY/pucchsignalgenerator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c
index 9deff20d350dcfc11f876486bb0b7e5306cd42ee..1e5f47e59eaa8411d98f64804e27861381cadf63 100644
--- a/openair1/SIMULATION/LTE_PHY/pucchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c
index ba355bbbebb113131761b93eaedb75288a811188..94bc991e3fd67e7e8382db0739e6194ff7d6ee08 100644
--- a/openair1/SIMULATION/LTE_PHY/scansim.c
+++ b/openair1/SIMULATION/LTE_PHY/scansim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/signalanalyzer.c b/openair1/SIMULATION/LTE_PHY/signalanalyzer.c
index cf63bd831211e64c7fddc10eeab719a221282061..62b0f9362414159b4d9593c4264cfbe8f9125e6d 100644
--- a/openair1/SIMULATION/LTE_PHY/signalanalyzer.c
+++ b/openair1/SIMULATION/LTE_PHY/signalanalyzer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/signalanalyzer.h b/openair1/SIMULATION/LTE_PHY/signalanalyzer.h
index 8be2f1b6cbf47e4fad5431ee39d3853954deca97..e8aaddb493755532efacb009b9c3378158f5dc22 100644
--- a/openair1/SIMULATION/LTE_PHY/signalanalyzer.h
+++ b/openair1/SIMULATION/LTE_PHY/signalanalyzer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/syncsim.c b/openair1/SIMULATION/LTE_PHY/syncsim.c
index 58e96a9abef054cdb198e7ec5bd8824349a0cc02..acad27ca113797d96bf4edfb01d3593d56ee6926 100644
--- a/openair1/SIMULATION/LTE_PHY/syncsim.c
+++ b/openair1/SIMULATION/LTE_PHY/syncsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/test.c b/openair1/SIMULATION/LTE_PHY/test.c
index 16a7b636f5b3054dd0c86fec2259ddd9b359ae8f..b7781ce6908d2eb430c78e56d32eecfb16c936ef 100644
--- a/openair1/SIMULATION/LTE_PHY/test.c
+++ b/openair1/SIMULATION/LTE_PHY/test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c
index 7c46d057e0258074c056123c98652d9a608411e1..70bbda151ca7d8d562a624f78a85491ed46770a7 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h
index 0a676be00f5745e88e8420fe274e7e9f1a8a4327..81777ff9582275da0e298f61ff05f6b0543be9a0 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h
+++ b/openair1/SIMULATION/LTE_PHY/ulsignalgenerator.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index 03c736ecd3f3475bfcbd7a1c22f899701235795c..cabe9664917882cc1ca26c4aee7fbf9c3eec6725 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim2.c b/openair1/SIMULATION/LTE_PHY/ulsim2.c
index 26cec52187427ccde561705eaa5ad452ff2a66b7..d91b35782cfd5985f030d62717d7c6dccb6d8ec7 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim2.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/LTE_PHY/unitary_defs.h b/openair1/SIMULATION/LTE_PHY/unitary_defs.h
index 73d0bc0900ddddb7ad674e07619e9be13f4f0504..c33b72f64990f20cba9ae4abe817509366c4fef0 100644
--- a/openair1/SIMULATION/LTE_PHY/unitary_defs.h
+++ b/openair1/SIMULATION/LTE_PHY/unitary_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/RF/adc.c b/openair1/SIMULATION/RF/adc.c
index 8bb32778fee0748c8791a768df32b08cced99345..3bf70a203a4432b620cbc4bc7bbf961a25394d51 100644
--- a/openair1/SIMULATION/RF/adc.c
+++ b/openair1/SIMULATION/RF/adc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/RF/dac.c b/openair1/SIMULATION/RF/dac.c
index 4822a4d26d08d0271eaa6dcd65fa428932a04b7f..8cf6b496231d630df17437b3712fd0f617eb218a 100644
--- a/openair1/SIMULATION/RF/dac.c
+++ b/openair1/SIMULATION/RF/dac.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/RF/defs.h b/openair1/SIMULATION/RF/defs.h
index 74bca6350bb33e5afab6f2b53c48ae8236de093b..05e74647a06c0f6c4ac17d61369eb76fdb56c841 100644
--- a/openair1/SIMULATION/RF/defs.h
+++ b/openair1/SIMULATION/RF/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/RF/rf.c b/openair1/SIMULATION/RF/rf.c
index cb2af3836714fad929dcc1088fd1644081cc1e26..3cf770ac7cf8c1a0f3038626807dedf18fccdef2 100644
--- a/openair1/SIMULATION/RF/rf.c
+++ b/openair1/SIMULATION/RF/rf.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/abstraction.c b/openair1/SIMULATION/TOOLS/abstraction.c
index 88b3ce6406bfbf72272d75f155f69edefb1704b4..7e99371c3736dae18f92ac18c2b6536347506087 100644
--- a/openair1/SIMULATION/TOOLS/abstraction.c
+++ b/openair1/SIMULATION/TOOLS/abstraction.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/ch_desc_proto.c b/openair1/SIMULATION/TOOLS/ch_desc_proto.c
index e47ac81440e52b04e318c62f558ca5a00589e5ff..8b07a596a925774c1c6cdc4a9296bcec2e8673be 100644
--- a/openair1/SIMULATION/TOOLS/ch_desc_proto.c
+++ b/openair1/SIMULATION/TOOLS/ch_desc_proto.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/defs.h b/openair1/SIMULATION/TOOLS/defs.h
index 4378ca2da309c1002a7e99408dbbd74ac4a74519..a958c6b4ebcfb2737c58f30fff63d6475d8446d3 100644
--- a/openair1/SIMULATION/TOOLS/defs.h
+++ b/openair1/SIMULATION/TOOLS/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/gauss.c b/openair1/SIMULATION/TOOLS/gauss.c
index ff3ff14e247ef6077e622899a16e8339e6deb2ea..f69748270b0cc8a4baf23e54ae8fc0259159913e 100644
--- a/openair1/SIMULATION/TOOLS/gauss.c
+++ b/openair1/SIMULATION/TOOLS/gauss.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/llr_quantization.c b/openair1/SIMULATION/TOOLS/llr_quantization.c
index 3cb221e6755b0627ce355a585f269c94a3aa18fe..57cb61e007d126a2f5ba421b3f9e2327d595d917 100644
--- a/openair1/SIMULATION/TOOLS/llr_quantization.c
+++ b/openair1/SIMULATION/TOOLS/llr_quantization.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/multipath_channel.c b/openair1/SIMULATION/TOOLS/multipath_channel.c
index 43af2efb874b18cd1f3aca86744ae00395ff48f3..757d5023de214d5ae8a823b3a3dd03e6ca045b9e 100644
--- a/openair1/SIMULATION/TOOLS/multipath_channel.c
+++ b/openair1/SIMULATION/TOOLS/multipath_channel.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/multipath_tv_channel.c b/openair1/SIMULATION/TOOLS/multipath_tv_channel.c
index a75d432120dc03340ac7b97d2aacad505433431b..c2078b91d478763895c25771f24fe109260e4eb6 100644
--- a/openair1/SIMULATION/TOOLS/multipath_tv_channel.c
+++ b/openair1/SIMULATION/TOOLS/multipath_tv_channel.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c
index b8ab133d12fc477c47d4d83b6b849cadd17cebb5..222a196e20b9c0e171ecd3ac5c5177a88138e889 100644
--- a/openair1/SIMULATION/TOOLS/random_channel.c
+++ b/openair1/SIMULATION/TOOLS/random_channel.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/rangen_double.c b/openair1/SIMULATION/TOOLS/rangen_double.c
index 2d1de80197da131dc75fa2c71f00699f250fa26d..5168a64ef40a667a611b4088e3763f861e2f3aaa 100644
--- a/openair1/SIMULATION/TOOLS/rangen_double.c
+++ b/openair1/SIMULATION/TOOLS/rangen_double.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/scm_corrmat.h b/openair1/SIMULATION/TOOLS/scm_corrmat.h
index ff89b2f33e355f0d41c180c71f84d54d121ab38b..6ee6567ce9a77d8dd76c5027d61a9818fd7aa929 100644
--- a/openair1/SIMULATION/TOOLS/scm_corrmat.h
+++ b/openair1/SIMULATION/TOOLS/scm_corrmat.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair1/SIMULATION/TOOLS/taus.c b/openair1/SIMULATION/TOOLS/taus.c
index e8a13da0768048b32bb7e59eb96813c1a841d9b9..a86be23aec6a5c92fa463aa356f3ce0d7c5e43ed 100644
--- a/openair1/SIMULATION/TOOLS/taus.c
+++ b/openair1/SIMULATION/TOOLS/taus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h
index acc9ae6ba11f466fe95ef90b3a10d0ad2a0ea05c..829c3c9e33a203aeac0d21f24a612224f874697a 100644
--- a/openair2/COMMON/as_message.h
+++ b/openair2/COMMON/as_message.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h
index 37d05f3fda8a858737384a3627c6a6306a2d7bbc..b37230cdd45ffbd9154556bb4ed5aa46d7185af6 100644
--- a/openair2/COMMON/commonDef.h
+++ b/openair2/COMMON/commonDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/gtpv1_u_messages_def.h b/openair2/COMMON/gtpv1_u_messages_def.h
index 4abbbf85b4b22aa32c128f073ae3de1ae22b63b4..9cc41a70eaa3d456a512cf475f7dcfc828c80431 100644
--- a/openair2/COMMON/gtpv1_u_messages_def.h
+++ b/openair2/COMMON/gtpv1_u_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h
index c791b25cf7f55c66167a550520f2b789b7c09ca5..c3c9c6b7c78f0ead0447ea8ac239b4876d7a43da 100644
--- a/openair2/COMMON/gtpv1_u_messages_types.h
+++ b/openair2/COMMON/gtpv1_u_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/intertask_interface_conf.h b/openair2/COMMON/intertask_interface_conf.h
index 2d4bebdee8c20e46b6d103b4c815734fd5f94034..9c108f87e08395753404665293f67ca282751f3f 100644
--- a/openair2/COMMON/intertask_interface_conf.h
+++ b/openair2/COMMON/intertask_interface_conf.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/mac_messages_def.h b/openair2/COMMON/mac_messages_def.h
index 0aa9a6f90991a964b8dd433aee5f2c28e78d62e1..c1135a34ae05cbae7143d4be13f5eba70f31861e 100644
--- a/openair2/COMMON/mac_messages_def.h
+++ b/openair2/COMMON/mac_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h
index 91c06b847ada04fd6315139cd7686ed8bd35d3c0..5f27a0fe69ea20b1673c6e8110f28f1c3d68983d 100644
--- a/openair2/COMMON/mac_messages_types.h
+++ b/openair2/COMMON/mac_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/mac_primitives.h b/openair2/COMMON/mac_primitives.h
index aa6bbd6cae1f331ec03dccd5dc066dcfed1a8455..c901722d5d7b67622791abeb8cd04126176f92d5 100644
--- a/openair2/COMMON/mac_primitives.h
+++ b/openair2/COMMON/mac_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/mac_rlc_primitives.h b/openair2/COMMON/mac_rlc_primitives.h
index 0033e2449985b704cea5acec0d14f2aec74b5a1e..4e3e22781c5fbb9494c23f271ddfe543bae2be2f 100644
--- a/openair2/COMMON/mac_rlc_primitives.h
+++ b/openair2/COMMON/mac_rlc_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h
index 49d22a8ceb0256c18d0ebf2dcca9c4174b58c23c..8df0970ba0183d0f3dbeb710d591973a41872722 100644
--- a/openair2/COMMON/mac_rrc_primitives.h
+++ b/openair2/COMMON/mac_rrc_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/messages_def.h b/openair2/COMMON/messages_def.h
index fd3a4e9ea1e1f1a3ffee730022001a1cde65158d..2434d157767bb2369c53eaf4aa2cb5fe07f5588b 100644
--- a/openair2/COMMON/messages_def.h
+++ b/openair2/COMMON/messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/messages_types.h b/openair2/COMMON/messages_types.h
index a8bb0d8d7e6f42065be15abfc79f04b690c3bddc..5e5fdadd2adb4e7e3316454a69e802197fde3c1c 100644
--- a/openair2/COMMON/messages_types.h
+++ b/openair2/COMMON/messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/nas_messages_def.h b/openair2/COMMON/nas_messages_def.h
index db766fe99ce4ad81544e68851f60cbea3918ac34..34d6d64a1fbd736c63851658a7dfa7135c7d3976 100644
--- a/openair2/COMMON/nas_messages_def.h
+++ b/openair2/COMMON/nas_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/nas_messages_types.h b/openair2/COMMON/nas_messages_types.h
index 6d433241961ad799bc7d134a5de4ffaca5fe0b89..5cb1927aca782c5dc1a1f5eff27e7b86d6171c27 100644
--- a/openair2/COMMON/nas_messages_types.h
+++ b/openair2/COMMON/nas_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/networkDef.h b/openair2/COMMON/networkDef.h
index 42c812baada0127cc8c15c2ad014863f7bbc5523..89f8d5fc44f3eddc64abcd2b70352af6f7323dc3 100644
--- a/openair2/COMMON/networkDef.h
+++ b/openair2/COMMON/networkDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/openair_defs.h b/openair2/COMMON/openair_defs.h
index 58be0e58e9a77eb9003c9cab49fddbadb743d7ea..908f8f98131cc5df026f635f040b9d80dd9bb1fd 100644
--- a/openair2/COMMON/openair_defs.h
+++ b/openair2/COMMON/openair_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/openair_types.h b/openair2/COMMON/openair_types.h
index 0971d7648f04452749f68cf5d11284b3c88769a9..d28380e752eb0588d4b259a91a2cb4a974e573a0 100644
--- a/openair2/COMMON/openair_types.h
+++ b/openair2/COMMON/openair_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/pdcp_messages_def.h b/openair2/COMMON/pdcp_messages_def.h
index 9ac1e4e95a53d7322e33eb9a67fd5d24b374fd58..da0d770def60982456d1312874e6828215aed70f 100644
--- a/openair2/COMMON/pdcp_messages_def.h
+++ b/openair2/COMMON/pdcp_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/pdcp_messages_types.h b/openair2/COMMON/pdcp_messages_types.h
index ca5af05b1860077f3a0775e6b1f895ad067e3ac8..033e73e86bbd8370f442d566238d7f01ed78e965 100644
--- a/openair2/COMMON/pdcp_messages_types.h
+++ b/openair2/COMMON/pdcp_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/phy_messages_def.h b/openair2/COMMON/phy_messages_def.h
index d0e2b83e3a1c774f33725bec6f95e944d6a7a59a..a2f16e64c8a5e8258029589793db916b7ea35094 100644
--- a/openair2/COMMON/phy_messages_def.h
+++ b/openair2/COMMON/phy_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/phy_messages_types.h b/openair2/COMMON/phy_messages_types.h
index 1742fac8d4fabb35b7a7e1cc481ac5fc96aeec5a..c425efa89cb38b88fe08c804ecbcc11bf0e29ecb 100644
--- a/openair2/COMMON/phy_messages_types.h
+++ b/openair2/COMMON/phy_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h
index 377773b642a4c28dc43e73d77c5bf478e0e0de9e..533c5eaa2bfcb20cae20988d4abb792ec0161ec9 100644
--- a/openair2/COMMON/platform_constants.h
+++ b/openair2/COMMON/platform_constants.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h
index 45d7774afad0bf382481a644c4fbb4536f243a2a..3997d579bd309dde38f9bc7801011604c5dccc12 100644
--- a/openair2/COMMON/platform_types.h
+++ b/openair2/COMMON/platform_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/ral_messages_def.h b/openair2/COMMON/ral_messages_def.h
index b10c6453622c00c7faf37c82eee5c8d1fdbef058..7dd41b5db395eb5213b2cc4d385417bb72fd6559 100644
--- a/openair2/COMMON/ral_messages_def.h
+++ b/openair2/COMMON/ral_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/ral_messages_types.h b/openair2/COMMON/ral_messages_types.h
index a9817a55509bc2c0d283213756c43eb571feebb0..22e3b5143f53fd0f662e61dcf1eb02eedb078970 100644
--- a/openair2/COMMON/ral_messages_types.h
+++ b/openair2/COMMON/ral_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rlc_messages_def.h b/openair2/COMMON/rlc_messages_def.h
index 36ec94a773cb6a83b1890beb3f20cd3ec2a1f565..af78f2d098df5a8601d77acb873b42f083e7b732 100644
--- a/openair2/COMMON/rlc_messages_def.h
+++ b/openair2/COMMON/rlc_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rlc_messages_types.h b/openair2/COMMON/rlc_messages_types.h
index 127b686cf7b2bcef5a35614957d26ab476327552..fe4614f3bc7ffb7a9800f00ed13303652fb320c9 100644
--- a/openair2/COMMON/rlc_messages_types.h
+++ b/openair2/COMMON/rlc_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h
index 04b1182482a137f9db97e3855163b97e4507c4aa..be3d18c996126583c79b6df83f84754a34116dac 100644
--- a/openair2/COMMON/rrc_messages_def.h
+++ b/openair2/COMMON/rrc_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h
index 6cec18e026268aa59a4fac788d63814359abee33..9822d26971be5ca2b1dba068a74a65937f4979df 100644
--- a/openair2/COMMON/rrc_messages_types.h
+++ b/openair2/COMMON/rrc_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rrm_config_structs.h b/openair2/COMMON/rrm_config_structs.h
index 73f5997932f96bf93a448d75ae30ecf8ae3e0e6e..9d060d102d1b3718349d9371f2aa4fda8384ce5c 100644
--- a/openair2/COMMON/rrm_config_structs.h
+++ b/openair2/COMMON/rrm_config_structs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rrm_constants.h b/openair2/COMMON/rrm_constants.h
index 9fe3a28d9b74e6b097addc8e952b0a24ecf5507e..5da8f773c339d582854d8d5293774f732b3d0ffb 100644
--- a/openair2/COMMON/rrm_constants.h
+++ b/openair2/COMMON/rrm_constants.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/rtos_header.h b/openair2/COMMON/rtos_header.h
index ed10ef4a10bd968ce96e5ed7bd70d586d60bb5aa..63bc57d9423994d7600f7567249c4f397dc161fa 100644
--- a/openair2/COMMON/rtos_header.h
+++ b/openair2/COMMON/rtos_header.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/s1ap_messages_def.h b/openair2/COMMON/s1ap_messages_def.h
index 10c70439d26c67e864632d957894f121a9ffc215..d3d853c7e714532e36d12119e19e0f8520ccf624 100644
--- a/openair2/COMMON/s1ap_messages_def.h
+++ b/openair2/COMMON/s1ap_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index 4fc043f28111246ebc1f91819f084b2d21b60936..c17097d4ecb9b3b3ea02d13e8d618e863dc69df1 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/sctp_messages_def.h b/openair2/COMMON/sctp_messages_def.h
index ffe13bae56412a038c259a83cafb6c439b26fee2..d4248b7bc342edc307081d61aa43c572ebe5e924 100644
--- a/openair2/COMMON/sctp_messages_def.h
+++ b/openair2/COMMON/sctp_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/sctp_messages_types.h b/openair2/COMMON/sctp_messages_types.h
index 57e0f37e71cbb54f5f58beeb1e75b35713a5db75..184e951acb3b8732c2e7b056d6204d20fddba0d8 100644
--- a/openair2/COMMON/sctp_messages_types.h
+++ b/openair2/COMMON/sctp_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/tasks_def.h b/openair2/COMMON/tasks_def.h
index c9e210fd1f4bc27a1a0e55d85a27088d4a697750..530365828dbaca39d594d5d278efb3cc73b29727 100644
--- a/openair2/COMMON/tasks_def.h
+++ b/openair2/COMMON/tasks_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/udp_messages_def.h b/openair2/COMMON/udp_messages_def.h
index 41b5e8aa52b551c52f3bfdd8d97e1c82922e4001..35322f2450cd270f417a66de1c170427dad75ea7 100644
--- a/openair2/COMMON/udp_messages_def.h
+++ b/openair2/COMMON/udp_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/udp_messages_types.h b/openair2/COMMON/udp_messages_types.h
index 1ec878782a23fb292fd6ef524253d49b61e75d8b..7825a924d1cb5e1fc2600aecbbcd97a8d7a46e80 100644
--- a/openair2/COMMON/udp_messages_types.h
+++ b/openair2/COMMON/udp_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/x2ap_messages_def.h b/openair2/COMMON/x2ap_messages_def.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair2/COMMON/x2ap_messages_def.h
+++ b/openair2/COMMON/x2ap_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair2/COMMON/x2ap_messages_types.h
+++ b/openair2/COMMON/x2ap_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/DOCS/TEMPLATES/CODE/example_doxy.h b/openair2/DOCS/TEMPLATES/CODE/example_doxy.h
index 27691f46f1d2b79cee3f0df8d9a38e85a6ba6e7b..c51bdbccabc2ea6bb007b728567e7c8b62f9ac05 100644
--- a/openair2/DOCS/TEMPLATES/CODE/example_doxy.h
+++ b/openair2/DOCS/TEMPLATES/CODE/example_doxy.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/DOCS/TEMPLATES/README/Readme.doxy b/openair2/DOCS/TEMPLATES/README/Readme.doxy
index 099c51cdf4761292266cec4bf1440ef97f6abe14..c87289d678c8c64d7d6f5794bbcf661be5dfeafc 100644
--- a/openair2/DOCS/TEMPLATES/README/Readme.doxy
+++ b/openair2/DOCS/TEMPLATES/README/Readme.doxy
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/DOCS/TEMPLATES/README/readme.txt b/openair2/DOCS/TEMPLATES/README/readme.txt
index 23ecdd5e913fc64d77491fbea5b5d658c50c4601..f31f7cd30e98b7d2867d8a310ea4ecfeb1769a77 100644
--- a/openair2/DOCS/TEMPLATES/README/readme.txt
+++ b/openair2/DOCS/TEMPLATES/README/readme.txt
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
index 1a43f203df6b918888981298cda34684e770914e..fcf9fb537c013180a016509d5873505b1b60c961 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h
index e2378e93119264517ab2a1c2815e3eddb242d918..090a599abef7bbdf81176013ddb4292b6fbcd1ca 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_defs.h b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_defs.h
index 9ec8594f88e567643f566145bb4dc2a0268a616c..70254bd7ba4ed28154820443b8f31954ecae4447 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_defs.h
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
index 1fa9852487d6922ba211be4e7affddcedbf3339a..5c37ba81321076b1e6ec26d070b31285dfa7fd99 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.h b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.h
index 9a7d4a8555b070fde7f389e30b46d256f84bc278..263b85eb87fef9dfd70a13ba15d702ea14c06e5b 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.h
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c
index 0ca8616fd9a8e88dcb3e683e16aa96d79e247f4e..1699eaad553e84850611e500ea2d5d616383bb40 100644
--- a/openair2/ENB_APP/enb_app.c
+++ b/openair2/ENB_APP/enb_app.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -211,19 +211,11 @@ static void configure_rrc(uint32_t enb_id)
 static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, const Enb_properties_array_t *enb_properties)
 {
   uint32_t         enb_id;
-  uint32_t         mme_id;
   MessageDef      *msg_p;
   uint32_t         register_enb_pending = 0;
-  char            *str                  = NULL;
-  struct in_addr   addr;
-
-#   if defined(OAI_EMU)
-
-#   endif
 
   for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
 #   if defined(OAI_EMU)
-
     if (oai_emulation.info.cli_start_enb[enb_id] == 1)
 #   endif
     {
@@ -307,16 +299,19 @@ void *eNB_app_task(void *args_p)
   const char                      *msg_name        = NULL;
   instance_t                      instance;
   int                             result;
-  int                             j;
   /* for no gcc warnings */
   (void)instance;
 
   itti_mark_task_ready (TASK_ENB_APP);
 
+  LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__);
+
   RCconfig_L1();
 
   RCconfig_macrlc();
 
+  LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst);
+
   if (RC.nb_L1_inst>0) AssertFatal(l1_north_init_eNB()==0,"could not initialize L1 north interface\n");
 
   # if defined(ENABLE_ITTI)
@@ -339,9 +334,11 @@ void *eNB_app_task(void *args_p)
   LOG_I(ENB_APP,"Allocating eNB_RRC_INST for %d instances\n",RC.nb_inst);
 
   RC.rrc = (eNB_RRC_INST **)malloc(RC.nb_inst*sizeof(eNB_RRC_INST *));
+  LOG_I(PHY, "%s() RC.nb_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_inst, RC.rrc);
 
   for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
     RC.rrc[enb_id] = (eNB_RRC_INST*)malloc(sizeof(eNB_RRC_INST));
+    LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, enb_id, RC.rrc[enb_id], enb_id+1, enb_id_end);
     memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST));
     configure_rrc(enb_id);
   }
diff --git a/openair2/ENB_APP/enb_app.h b/openair2/ENB_APP/enb_app.h
index 8e3c28760b98d3b7df1f7c119eb9cd6723aa256c..52f63806e8e9a27fd042b759ff12ace41f23c892 100644
--- a/openair2/ENB_APP/enb_app.h
+++ b/openair2/ENB_APP/enb_app.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index cfeb4964b4b5f114bf2b1f1df5e6c589f8744fc8..01605ae05f329f0d30ed9ba913ea280a217f6373 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -50,15 +50,16 @@
 #include "sctp_default_values.h"
 #include "SystemInformationBlockType2.h"
 #include "LAYER2/MAC/extern.h"
+#include "LAYER2/MAC/proto.h"
 #include "PHY/extern.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
+#include "nfapi_vnf.h"
+#include "nfapi_pnf.h"
+
 #include "enb_paramdef.h"
 #include "common/config/config_userapi.h"
 
-
-int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
-int RCconfig_S1(MessageDef *msg_p, uint32_t i);
-
+extern uint16_t sf_ahead;
 
 static int enb_check_band_frequencies(char* lib_config_file_name_pP,
                                       int ind,
@@ -102,11 +103,6 @@ static int enb_check_band_frequencies(char* lib_config_file_name_pP,
 }
 
 
-
-
-
-
-
 /* --------------------------------------------------------*/
 /* from here function to use configuration module          */
 void RCconfig_RU(void) {
@@ -124,7 +120,6 @@ void RCconfig_RU(void) {
   
   if ( RUParamList.numelt > 0) {
 
-
     RC.ru = (RU_t**)malloc(RC.nb_RU*sizeof(RU_t*));
    
 
@@ -139,6 +134,8 @@ void RCconfig_RU(void) {
       memset((void*)RC.ru[j],0,sizeof(RU_t));
       RC.ru[j]->idx                                 = j;
 
+      printf("Creating RC.ru[%d]:%p\n", j, RC.ru[j]);
+
       RC.ru[j]->if_timing                           = synch_to_ext_device;
       if (RC.nb_L1_inst >0)
         RC.ru[j]->num_eNB                           = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
@@ -237,48 +234,47 @@ void RCconfig_RU(void) {
   
 }
 
-void RCconfig_L1() {
+void RCconfig_L1(void) {
   int               i,j;
   paramdef_t L1_Params[] = L1PARAMS_DESC;
   paramlist_def_t L1_ParamList = {CONFIG_STRING_L1_LIST,NULL,0};
 
 
+  if (RC.eNB == NULL) {
+    RC.eNB                       = (PHY_VARS_eNB ***)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_eNB**));
+    LOG_I(PHY,"RC.eNB = %p\n",RC.eNB);
+    memset(RC.eNB,0,(1+NUMBER_OF_eNB_MAX)*sizeof(PHY_VARS_eNB***));
+    RC.nb_L1_CC = malloc((1+RC.nb_L1_inst)*sizeof(int));
+  }
+
   config_getlist( &L1_ParamList,L1_Params,sizeof(L1_Params)/sizeof(paramdef_t), NULL);    
   if (L1_ParamList.numelt > 0) {
 
-    if (RC.eNB == NULL) {
-      RC.eNB                               = (PHY_VARS_eNB ***)malloc((1+NUMBER_OF_eNB_MAX)*sizeof(PHY_VARS_eNB***));
-      LOG_I(PHY,"RC.eNB = %p\n",RC.eNB);
-      memset(RC.eNB,0,(1+NUMBER_OF_eNB_MAX)*sizeof(PHY_VARS_eNB***));
-      RC.nb_L1_CC = malloc((1+RC.nb_L1_inst)*sizeof(int));
-    }
-
     for (j = 0; j < RC.nb_L1_inst; j++) {
       RC.nb_L1_CC[j] = *(L1_ParamList.paramarray[j][L1_CC_IDX].uptr);
 
-
       if (RC.eNB[j] == NULL) {
 	RC.eNB[j]                       = (PHY_VARS_eNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_eNB**));
 	LOG_I(PHY,"RC.eNB[%d] = %p\n",j,RC.eNB[j]);
 	memset(RC.eNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_eNB***));
       }
 
-
       for (i=0;i<RC.nb_L1_CC[j];i++) {
-	if (RC.eNB[j][i] == NULL) {
-	  RC.eNB[j][i] = (PHY_VARS_eNB *)malloc(sizeof(PHY_VARS_eNB));
-	  memset((void*)RC.eNB[j][i],0,sizeof(PHY_VARS_eNB));
-	  LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.eNB[j][i]);
-	  RC.eNB[j][i]->Mod_id  = j;
-	  RC.eNB[j][i]->CC_id   = i;
-	}
+        if (RC.eNB[j][i] == NULL) {
+          RC.eNB[j][i] = (PHY_VARS_eNB *)malloc(sizeof(PHY_VARS_eNB));
+          memset((void*)RC.eNB[j][i],0,sizeof(PHY_VARS_eNB));
+          LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.eNB[j][i]);
+          RC.eNB[j][i]->Mod_id  = j;
+          RC.eNB[j][i]->CC_id   = i;
+        }
       }
 
       if (strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_mac") == 0) {
 
+        sf_ahead = 4; // Need 4 subframe gap between RX and TX
       }
       else if (strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "nfapi") == 0) {
-	RC.eNB[j][0]->eth_params_n.local_if_name            = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_IF_NAME_IDX].strptr));
+        RC.eNB[j][0]->eth_params_n.local_if_name            = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_IF_NAME_IDX].strptr));
 	RC.eNB[j][0]->eth_params_n.my_addr                  = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_ADDRESS_IDX].strptr));
 	RC.eNB[j][0]->eth_params_n.remote_addr              = strdup(*(L1_ParamList.paramarray[j][L1_REMOTE_N_ADDRESS_IDX].strptr));
 	RC.eNB[j][0]->eth_params_n.my_portc                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTC_IDX].iptr);
@@ -286,8 +282,25 @@ void RCconfig_L1() {
 	RC.eNB[j][0]->eth_params_n.my_portd                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTD_IDX].iptr);
 	RC.eNB[j][0]->eth_params_n.remote_portd             = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTD_IDX].iptr);
 	RC.eNB[j][0]->eth_params_n.transp_preference        = ETH_UDP_MODE;
+
+        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2
+
+        RC.nb_macrlc_inst = 1;  // This is used by mac_top_init_eNB()
+
+        // This is used by init_eNB_afterRU()
+        RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int));
+        RC.nb_CC[0]=1;
+
+        RC.nb_inst =1; // DJP - feptx_prec uses num_eNB but phy_init_RU uses nb_inst
+
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_inst=1 this is because phy_init_RU() uses that to index and not RC.num_eNB - why the 2 similar variables?\n", __FUNCTION__);
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_CC[0]=%d for init_eNB_afterRU()\n", __FUNCTION__, RC.nb_CC[0]);
+        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_macrlc_inst:%d because used by mac_top_init_eNB()\n", __FUNCTION__, RC.nb_macrlc_inst);
+
+        mac_top_init_eNB();
+
+        configure_nfapi_pnf(RC.eNB[j][0]->eth_params_n.remote_addr, RC.eNB[j][0]->eth_params_n.remote_portc, RC.eNB[j][0]->eth_params_n.my_addr, RC.eNB[j][0]->eth_params_n.my_portd, RC.eNB[j][0]->eth_params_n     .remote_portd);
       }
-      
       else { // other midhaul
       }	
     }// j=0..num_inst
@@ -295,6 +308,30 @@ void RCconfig_L1() {
     l1_north_init_eNB();
   } else {
     LOG_I(PHY,"No " CONFIG_STRING_L1_LIST " configuration found");    
+
+    // DJP need to create some structures for VNF
+
+    j = 0;
+
+    RC.nb_L1_CC = malloc((1+RC.nb_L1_inst)*sizeof(int)); // DJP - 1 lot then???
+
+    RC.nb_L1_CC[j]=1; // DJP - hmmm
+
+    if (RC.eNB[j] == NULL) {
+      RC.eNB[j]                       = (PHY_VARS_eNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_eNB**));
+      LOG_I(PHY,"RC.eNB[%d] = %p\n",j,RC.eNB[j]);
+      memset(RC.eNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_eNB***));
+    }
+
+    for (i=0;i<RC.nb_L1_CC[j];i++) {
+      if (RC.eNB[j][i] == NULL) {
+        RC.eNB[j][i] = (PHY_VARS_eNB *)malloc(sizeof(PHY_VARS_eNB));
+        memset((void*)RC.eNB[j][i],0,sizeof(PHY_VARS_eNB));
+        LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.eNB[j][i]);
+        RC.eNB[j][i]->Mod_id  = j;
+        RC.eNB[j][i]->CC_id   = i;
+      }
+    }
   }
 }
 
@@ -307,7 +344,6 @@ void RCconfig_macrlc() {
 
   config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL);    
   
-
   if ( MacRLC_ParamList.numelt > 0) {
 
     RC.nb_macrlc_inst=MacRLC_ParamList.numelt; 
@@ -342,6 +378,12 @@ void RCconfig_macrlc() {
 	RC.mac[j]->eth_params_s.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTD_IDX].iptr);
 	RC.mac[j]->eth_params_s.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTD_IDX].iptr);
 	RC.mac[j]->eth_params_s.transp_preference        = ETH_UDP_MODE;
+
+        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2
+
+        printf("**************** vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc);
+        configure_nfapi_vnf(RC.mac[j]->eth_params_s.my_addr, RC.mac[j]->eth_params_s.my_portc);
+        printf("**************** RETURNED FROM configure_nfapi_vnf() vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc);
       } else { // other midhaul
 	AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr));
       }	
@@ -424,7 +466,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
   int32_t     rach_powerRampingStep         = 0;
   int32_t     rach_preambleInitialReceivedTargetPower    = 0;
   int32_t     rach_preambleTransMax         = 0;
-  int32_t     rach_raResponseWindowSize     = 0;
+  int32_t     rach_raResponseWindowSize     = 10;
   int32_t     rach_macContentionResolutionTimer = 0;
   int32_t     rach_maxHARQ_Msg3Tx           = 0;
   int32_t     pcch_defaultPagingCycle       = 0;
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index b41545bcecea1036cb271d9ac27947e6af8de079..0406e11e4cd04608df0b494596595ee4af89314c 100644
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -46,6 +46,8 @@
 #else
 #include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h"
 #endif
+#include "intertask_interface_types.h"
+#include "RRC/LITE/defs.h"
 
 #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\
             struct in_addr inp;\
@@ -100,5 +102,8 @@ extern void RCConfig(void);
 void                          enb_config_display(void);
 void                          ru_config_display(void);
 
+int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc);
+int RCconfig_S1(MessageDef *msg_p, uint32_t i);
+
 #endif /* ENB_CONFIG_H_ */
 /** @} */
diff --git a/openair2/ENB_APP/flexran_agent.c b/openair2/ENB_APP/flexran_agent.c
index 0dcacd4b81a6d64da85524cb42619c4937330583..4faa1f36243353aa7faf6e070e2aa8319a79e8f9 100644
--- a/openair2/ENB_APP/flexran_agent.c
+++ b/openair2/ENB_APP/flexran_agent.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent.h b/openair2/ENB_APP/flexran_agent.h
index 21ea21aafcf336551b9c276ef51d0e9976a34b8e..579bf3be2357b4a0ad7d942194fc5690d3eec978 100644
--- a/openair2/ENB_APP/flexran_agent.h
+++ b/openair2/ENB_APP/flexran_agent.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_async.c b/openair2/ENB_APP/flexran_agent_async.c
index 978b44929d7607b0b1a384447255d506e6de10c1..f1edc291c9cfab179ab46e5f932578e08ad85357 100644
--- a/openair2/ENB_APP/flexran_agent_async.c
+++ b/openair2/ENB_APP/flexran_agent_async.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_async.h b/openair2/ENB_APP/flexran_agent_async.h
index b097b15c2590885648a32d010e8287626022f562..03aebd0058fc6c3293baa664119124e6921f6ef2 100644
--- a/openair2/ENB_APP/flexran_agent_async.h
+++ b/openair2/ENB_APP/flexran_agent_async.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_common.c b/openair2/ENB_APP/flexran_agent_common.c
index 073bb8029cfca92266973a5b172f028001c08900..69c786edb333e33f0d12679bd5f711e6dbaa0799 100644
--- a/openair2/ENB_APP/flexran_agent_common.c
+++ b/openair2/ENB_APP/flexran_agent_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_common.h b/openair2/ENB_APP/flexran_agent_common.h
index abe5a05b447fe206e7f0bc857c82019806037277..7ab89acb4b1e4690b6ea6b1d3249427a9ecd853e 100644
--- a/openair2/ENB_APP/flexran_agent_common.h
+++ b/openair2/ENB_APP/flexran_agent_common.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_common_internal.c b/openair2/ENB_APP/flexran_agent_common_internal.c
index e735b2748b955c98c4666fe68828360229d1fc89..240856b948254f45d558848a0050b1720595b2f2 100644
--- a/openair2/ENB_APP/flexran_agent_common_internal.c
+++ b/openair2/ENB_APP/flexran_agent_common_internal.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_common_internal.h b/openair2/ENB_APP/flexran_agent_common_internal.h
index c8f78aafe90a251c37911b398faaf457aa245c58..d91c2dc7f6578db33ece11dfeb642ea701c35ae9 100644
--- a/openair2/ENB_APP/flexran_agent_common_internal.h
+++ b/openair2/ENB_APP/flexran_agent_common_internal.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_defs.h b/openair2/ENB_APP/flexran_agent_defs.h
index d60510b0c782bbf39fc17a3b650bc4aa9edc2a03..12e3c56dffa16ffeb71a8141bf0499e8db585bba 100644
--- a/openair2/ENB_APP/flexran_agent_defs.h
+++ b/openair2/ENB_APP/flexran_agent_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_extern.h b/openair2/ENB_APP/flexran_agent_extern.h
index 4a04d5d3a670b290ab8009e6a61adb79a168b27a..6237f78367cad368d6115e42f7b6e02cdae88f75 100644
--- a/openair2/ENB_APP/flexran_agent_extern.h
+++ b/openair2/ENB_APP/flexran_agent_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_handler.c b/openair2/ENB_APP/flexran_agent_handler.c
index 29a1c1000c369c33fc2de403e277310133fdc976..51188bea86216a8ce6640e396d31bdae1046ea45 100644
--- a/openair2/ENB_APP/flexran_agent_handler.c
+++ b/openair2/ENB_APP/flexran_agent_handler.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_net_comm.c b/openair2/ENB_APP/flexran_agent_net_comm.c
index 6e39d6089f2fbb261c0bd5e71693a8aaf2db9a6f..e6442512095963885e6361f7a3c7595d7dd0b9b9 100644
--- a/openair2/ENB_APP/flexran_agent_net_comm.c
+++ b/openair2/ENB_APP/flexran_agent_net_comm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_net_comm.h b/openair2/ENB_APP/flexran_agent_net_comm.h
index e4aa854c70c9f0cbb454662eaaac89de752a49c6..2f59b0f7a379f90659e127ac2244cbba935b4919 100644
--- a/openair2/ENB_APP/flexran_agent_net_comm.h
+++ b/openair2/ENB_APP/flexran_agent_net_comm.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_task_manager.c b/openair2/ENB_APP/flexran_agent_task_manager.c
index eaa6a58af8d0cfcf2f6019f3674bcfa964df6c5f..088ec618c7b3ba7b270faf84c1b90c28e486ed28 100644
--- a/openair2/ENB_APP/flexran_agent_task_manager.c
+++ b/openair2/ENB_APP/flexran_agent_task_manager.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/ENB_APP/flexran_agent_task_manager.h b/openair2/ENB_APP/flexran_agent_task_manager.h
index 1b14f1f6f6754d6e45d5201a40650f54146a8eac..165b9dda1c54c86521636564b3449f77a49296e1 100644
--- a/openair2/ENB_APP/flexran_agent_task_manager.h
+++ b/openair2/ENB_APP/flexran_agent_task_manager.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c
index 6c369bf7cf056553e4440fd0a132ad8def8006be..24727eb40832a5b4c843bc3b2e019ab8a82e5484 100644
--- a/openair2/LAYER2/MAC/config.c
+++ b/openair2/LAYER2/MAC/config.c
@@ -4,7 +4,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -32,6 +32,7 @@
 
 #include "COMMON/platform_types.h"
 #include "COMMON/platform_constants.h"
+#include "SCHED/defs.h"
 #include "SystemInformationBlockType2.h"
 //#include "RadioResourceConfigCommonSIB.h"
 #include "RadioResourceConfigDedicated.h"
@@ -57,6 +58,12 @@
 #endif
 
 extern RAN_CONTEXT_t RC;
+extern int l2_init_eNB(void);
+extern void mac_top_init_eNB(void);
+extern void mac_init_cell_params(int Mod_idP,int CC_idP);
+extern void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
+
+extern uint8_t nfapi_mode;
 
 /* sec 5.9, 36.321: MAC Reset Procedure */
 void ue_mac_reset(module_id_t module_idP,uint8_t eNB_index)
@@ -217,32 +224,100 @@ void config_mib(int                 Mod_idP,
 		uint32_t            pbch_repetitionP) {
 
   nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
+
+  cfg->num_tlv=0;
 		
   cfg->subframe_config.pcfich_power_offset.value   = 6000;  // 0dB
+  cfg->subframe_config.pcfich_power_offset.tl.tag = NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG;
+  cfg->num_tlv++;
+
   cfg->subframe_config.dl_cyclic_prefix_type.value = NcpP;
+  cfg->subframe_config.dl_cyclic_prefix_type.tl.tag = NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG;
+  cfg->num_tlv++;
+
   cfg->subframe_config.ul_cyclic_prefix_type.value = NcpP;
+  cfg->subframe_config.ul_cyclic_prefix_type.tl.tag = NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG;
+  cfg->num_tlv++;
  
-  LOG_I(MAC,"Ncp %d,p_eNB %d\n",NcpP,p_eNBP);
+  cfg->rf_config.dl_channel_bandwidth.value        = to_prb(dl_BandwidthP);
+  cfg->rf_config.dl_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG;
+  cfg->num_tlv++;
+LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP);
+
+  cfg->rf_config.ul_channel_bandwidth.value        = to_prb(dl_BandwidthP);
+  cfg->rf_config.ul_channel_bandwidth.tl.tag = NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG;
+  cfg->num_tlv++;
 
-  cfg->rf_config.dl_channel_bandwidth.value        = dl_BandwidthP;
-  cfg->rf_config.ul_channel_bandwidth.value        = dl_BandwidthP;
   cfg->rf_config.tx_antenna_ports.value            = p_eNBP;
+  cfg->rf_config.tx_antenna_ports.tl.tag = NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG;
+  cfg->num_tlv++;
+
   cfg->rf_config.rx_antenna_ports.value            = 2;
+  cfg->rf_config.rx_antenna_ports.tl.tag = NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG;
+  cfg->num_tlv++;
 
   cfg->nfapi_config.earfcn.value                   = to_earfcn(eutra_bandP,dl_CarrierFreqP,bw_table[dl_BandwidthP]/100);
+  cfg->nfapi_config.earfcn.tl.tag = NFAPI_NFAPI_EARFCN_TAG;
+  cfg->num_tlv++;
+
   cfg->nfapi_config.rf_bands.number_rf_bands       = 1;
   cfg->nfapi_config.rf_bands.rf_band[0]            = eutra_bandP;  
+  cfg->nfapi_config.rf_bands.tl.tag = NFAPI_PHY_RF_BANDS_TAG;
+  cfg->num_tlv++;
+
   cfg->phich_config.phich_resource.value           = phich_configP->phich_Resource;
+  cfg->phich_config.phich_resource.tl.tag = NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG;
+  cfg->num_tlv++;
+
   cfg->phich_config.phich_duration.value           = phich_configP->phich_Duration;
+  cfg->phich_config.phich_duration.tl.tag = NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG;
+  cfg->num_tlv++;
+
   cfg->phich_config.phich_power_offset.value       = 6000;  // 0dB
+  cfg->phich_config.phich_power_offset.tl.tag = NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG;
+  cfg->num_tlv++;
 
   cfg->sch_config.primary_synchronization_signal_epre_eprers.value   = 6000; // 0dB
+  cfg->sch_config.primary_synchronization_signal_epre_eprers.tl.tag = NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG;
+  cfg->num_tlv++;
+
   cfg->sch_config.secondary_synchronization_signal_epre_eprers.value = 6000; // 0dB
+  cfg->sch_config.secondary_synchronization_signal_epre_eprers.tl.tag = NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG;
+  cfg->num_tlv++;
+
   cfg->sch_config.physical_cell_id.value                             = Nid_cellP;
+  cfg->sch_config.physical_cell_id.tl.tag = NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG;
+  cfg->num_tlv++;
 
 #ifdef Rel14
   cfg->emtc_config.pbch_repetitions_enable_r13.value                 = pbch_repetitionP;
+  cfg->emtc_config.pbch_repetitions_enable_r13.tl.tag = NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG;
+  cfg->num_tlv++;
 #endif  
+
+  LOG_I(MAC,
+      "%s() NFAPI_CONFIG_REQUEST(num_tlv:%u) DL_BW:%u UL_BW:%u Ncp %d,p_eNB %d,earfcn %d,band %d,phich_resource %u phich_duration %u phich_power_offset %u PSS %d SSS %d PCI %d"
+#ifdef Rel14
+      " PBCH repetition %d"
+#endif  
+      "\n"
+      ,__FUNCTION__
+      ,cfg->num_tlv
+      ,cfg->rf_config.dl_channel_bandwidth.value
+      ,cfg->rf_config.ul_channel_bandwidth.value
+      ,NcpP,p_eNBP
+      ,cfg->nfapi_config.earfcn.value
+      ,cfg->nfapi_config.rf_bands.rf_band[0]
+      ,cfg->phich_config.phich_resource.value
+      ,cfg->phich_config.phich_duration.value
+      ,cfg->phich_config.phich_power_offset.value
+      ,cfg->sch_config.primary_synchronization_signal_epre_eprers.value
+      ,cfg->sch_config.secondary_synchronization_signal_epre_eprers.value
+      ,cfg->sch_config.physical_cell_id.value
+#ifdef Rel14
+      ,cfg->emtc_config.pbch_repetitions_enable_r13.value
+#endif  
+      );
 }
 
 void config_sib1(int Mod_idP,
@@ -253,11 +328,21 @@ void config_sib1(int Mod_idP,
 
   if (tdd_ConfigP)   { //TDD
     cfg->subframe_config.duplex_mode.value                          = 0;
+    cfg->subframe_config.duplex_mode.tl.tag = NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG;
+    cfg->num_tlv++;
+
     cfg->tdd_frame_structure_config.subframe_assignment.value       = tdd_ConfigP->subframeAssignment;
+    cfg->tdd_frame_structure_config.subframe_assignment.tl.tag = NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG;
+    cfg->num_tlv++;
+
     cfg->tdd_frame_structure_config.special_subframe_patterns.value = tdd_ConfigP->specialSubframePatterns;
+    cfg->tdd_frame_structure_config.special_subframe_patterns.tl.tag = NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG;
+    cfg->num_tlv++;
   }
   else { // FDD
     cfg->subframe_config.duplex_mode.value                          = 1;
+    cfg->subframe_config.duplex_mode.tl.tag = NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG;
+    cfg->num_tlv++;
     // Note no half-duplex here
   }
 
@@ -281,46 +366,117 @@ void config_sib2(int Mod_idP,
   nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP];
 
   cfg->subframe_config.pb.value               = radioResourceConfigCommonP->pdsch_ConfigCommon.p_b;
+  cfg->subframe_config.pb.tl.tag = NFAPI_SUBFRAME_CONFIG_PB_TAG;
+  cfg->num_tlv++;
+
   cfg->rf_config.reference_signal_power.value = radioResourceConfigCommonP->pdsch_ConfigCommon.referenceSignalPower;
+  cfg->rf_config.reference_signal_power.tl.tag = NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG;
+  cfg->num_tlv++;
+
   cfg->nfapi_config.max_transmit_power.value  = cfg->rf_config.reference_signal_power.value + power_off_dB[cfg->rf_config.dl_channel_bandwidth.value];
+  cfg->nfapi_config.max_transmit_power.tl.tag = NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG;
+  cfg->num_tlv++;
 
   cfg->prach_config.configuration_index.value                 = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.prach_ConfigIndex;
+  cfg->prach_config.configuration_index.tl.tag = NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG;
+  cfg->num_tlv++;
+
   cfg->prach_config.root_sequence_index.value                 = radioResourceConfigCommonP->prach_Config.rootSequenceIndex;
+  cfg->prach_config.root_sequence_index.tl.tag = NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG;
+  cfg->num_tlv++;
+
   cfg->prach_config.zero_correlation_zone_configuration.value = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
+  cfg->prach_config.zero_correlation_zone_configuration.tl.tag = NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG;
+  cfg->num_tlv++;
+
   cfg->prach_config.high_speed_flag.value                     = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.highSpeedFlag;
+  cfg->prach_config.high_speed_flag.tl.tag = NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG;
+  cfg->num_tlv++;
+
   cfg->prach_config.frequency_offset.value                    = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.prach_FreqOffset;
+  cfg->prach_config.frequency_offset.tl.tag = NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG;
+  cfg->num_tlv++;
+
 
   cfg->pusch_config.hopping_mode.value                        = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode;
+  cfg->pusch_config.hopping_mode.tl.tag = NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG;
+  cfg->num_tlv++;
+
   cfg->pusch_config.number_of_subbands.value                  = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.n_SB;
+  cfg->pusch_config.number_of_subbands.tl.tag = NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG;
+  cfg->num_tlv++;
+
   cfg->pusch_config.hopping_offset.value                      = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset;
+  cfg->pusch_config.hopping_offset.tl.tag = NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG;
+  cfg->num_tlv++;
+
 
 
 		
   cfg->pucch_config.delta_pucch_shift.value                         = radioResourceConfigCommonP->pucch_ConfigCommon.deltaPUCCH_Shift;
+  cfg->pucch_config.delta_pucch_shift.tl.tag = NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG;
+  cfg->num_tlv++;
+
   cfg->pucch_config.n_cqi_rb.value                                  = radioResourceConfigCommonP->pucch_ConfigCommon.nRB_CQI;
+  cfg->pucch_config.n_cqi_rb.tl.tag = NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG;
+  cfg->num_tlv++;
+
   cfg->pucch_config.n_an_cs.value                                   = radioResourceConfigCommonP->pucch_ConfigCommon.nCS_AN;
+  cfg->pucch_config.n_an_cs.tl.tag = NFAPI_PUCCH_CONFIG_N_AN_CS_TAG;
+  cfg->num_tlv++;
+
   cfg->pucch_config.n1_pucch_an.value                               = radioResourceConfigCommonP->pucch_ConfigCommon.n1PUCCH_AN;
+  cfg->pucch_config.n1_pucch_an.tl.tag = NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG;
+  cfg->num_tlv++;
+
 
   if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == true)
+  {
     cfg->uplink_reference_signal_config.uplink_rs_hopping.value     = 1;
+  }
   else if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled == true)
+  {
     cfg->uplink_reference_signal_config.uplink_rs_hopping.value     = 2;
+  }
   else // No hopping
+  {
     cfg->uplink_reference_signal_config.uplink_rs_hopping.value     = 0;
+  }
+  cfg->uplink_reference_signal_config.uplink_rs_hopping.tl.tag = NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG;
+  cfg->num_tlv++;
 
   cfg->uplink_reference_signal_config.group_assignment.value        = radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH;
+  cfg->uplink_reference_signal_config.group_assignment.tl.tag = NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG;
+  cfg->num_tlv++;
+
   cfg->uplink_reference_signal_config.cyclic_shift_1_for_drms.value = radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift;
+  cfg->uplink_reference_signal_config.cyclic_shift_1_for_drms.tl.tag = NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG;
+  cfg->num_tlv++;
+
 
   // how to enable/disable SRS?
   if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.present==SoundingRS_UL_ConfigCommon_PR_setup) {
     cfg->srs_config.bandwidth_configuration.value                       = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig;
+    cfg->srs_config.bandwidth_configuration.tl.tag = NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG;
+    cfg->num_tlv++;
+
     cfg->srs_config.srs_subframe_configuration.value                    = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig;
+    cfg->srs_config.srs_subframe_configuration.tl.tag = NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG;
+    cfg->num_tlv++;
+
     cfg->srs_config.srs_acknack_srs_simultaneous_transmission.value     = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
+    cfg->srs_config.srs_acknack_srs_simultaneous_transmission.tl.tag = NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG;
+    cfg->num_tlv++;
+
 
-    if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts)
+    if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts) {
        cfg->srs_config.max_up_pts.value                                 = 1;
-    else
+    }
+    else {
        cfg->srs_config.max_up_pts.value                                 = 0;
+    }
+    cfg->srs_config.max_up_pts.tl.tag = NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG;
+    cfg->num_tlv++;
   }
 
 #ifdef Rel14
@@ -328,8 +484,16 @@ void config_sib2(int Mod_idP,
     AssertFatal(radioResourceConfigCommon_BRP!=NULL,"radioResource rou is missing\n");
     AssertFatal(radioResourceConfigCommon_BRP->ext4!=NULL,"ext4 is missing\n");
     cfg->emtc_config.prach_catm_root_sequence_index.value                 = radioResourceConfigCommon_BRP->prach_Config.rootSequenceIndex;
+    cfg->emtc_config.prach_catm_root_sequence_index.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG;
+    cfg->num_tlv++;
+
     cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.value = radioResourceConfigCommon_BRP->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig;
+    cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG;
+    cfg->num_tlv++;
+
     cfg->emtc_config.prach_catm_high_speed_flag.value                     = radioResourceConfigCommon_BRP->prach_Config.prach_ConfigInfo.highSpeedFlag;
+    cfg->emtc_config.prach_catm_high_speed_flag.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG;
+    cfg->num_tlv++;
  
     struct PRACH_ConfigSIB_v1310 *ext4_prach=radioResourceConfigCommon_BRP->ext4->prach_ConfigCommon_v1310; 
 
@@ -337,50 +501,149 @@ void config_sib2(int Mod_idP,
 
     PRACH_ParametersCE_r13_t *p;
     cfg->emtc_config.prach_ce_level_0_enable.value=0;
+    cfg->emtc_config.prach_ce_level_0_enable.tl.tag=NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG;
+    cfg->num_tlv++;
+ 
     cfg->emtc_config.prach_ce_level_1_enable.value=0;
+    cfg->emtc_config.prach_ce_level_1_enable.tl.tag=NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG;
+    cfg->num_tlv++;
+ 
     cfg->emtc_config.prach_ce_level_2_enable.value=0;
+    cfg->emtc_config.prach_ce_level_2_enable.tl.tag=NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG;
+    cfg->num_tlv++;
+ 
     cfg->emtc_config.prach_ce_level_3_enable.value=0;
+    cfg->emtc_config.prach_ce_level_3_enable.tl.tag=NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG;
+    cfg->num_tlv++;
+ 
     switch (prach_ParametersListCE_r13->list.count) {
     case 4:
       p=prach_ParametersListCE_r13->list.array[3];
       cfg->emtc_config.prach_ce_level_3_enable.value                            = 1;
+      cfg->emtc_config.prach_ce_level_3_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_3_configuration_index.value               = p->prach_ConfigIndex_r13;
+      cfg->emtc_config.prach_ce_level_3_configuration_index.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_3_frequency_offset.value                  = p->prach_FreqOffset_r13;
+      cfg->emtc_config.prach_ce_level_3_frequency_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
-      if (p->prach_StartingSubframe_r13) 
+      cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG;
+      cfg->num_tlv++;
+
+      if (p->prach_StartingSubframe_r13) {
 	cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value   = *p->prach_StartingSubframe_r13;
+	cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.tl.tag  = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG;
+        cfg->num_tlv++;
+      }
+
       cfg->emtc_config.prach_ce_level_3_hopping_enable.value                    = p->prach_HoppingConfig_r13;
+      cfg->emtc_config.prach_ce_level_3_hopping_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_3_hopping_offset.value                    = cfg->rf_config.ul_channel_bandwidth.value-6;
+      cfg->emtc_config.prach_ce_level_3_hopping_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG;
+      cfg->num_tlv++;
+
     case 3:
       p=prach_ParametersListCE_r13->list.array[2];
       cfg->emtc_config.prach_ce_level_2_enable.value                            = 1;
+      cfg->emtc_config.prach_ce_level_2_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_2_configuration_index.value               = p->prach_ConfigIndex_r13;
+      cfg->emtc_config.prach_ce_level_2_configuration_index.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_2_frequency_offset.value                  = p->prach_FreqOffset_r13;
+      cfg->emtc_config.prach_ce_level_2_frequency_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
-      if (p->prach_StartingSubframe_r13) 
+      cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG;
+      cfg->num_tlv++;
+
+      if (p->prach_StartingSubframe_r13) {
 	cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value   = *p->prach_StartingSubframe_r13;
+	cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.tl.tag  = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG;
+        cfg->num_tlv++;
+      }
+
       cfg->emtc_config.prach_ce_level_2_hopping_enable.value                    = p->prach_HoppingConfig_r13;
+      cfg->emtc_config.prach_ce_level_2_hopping_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_2_hopping_offset.value                    = cfg->rf_config.ul_channel_bandwidth.value-6;
+      cfg->emtc_config.prach_ce_level_2_hopping_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG;
+      cfg->num_tlv++;
+
     case 2:
       p=prach_ParametersListCE_r13->list.array[1];
       cfg->emtc_config.prach_ce_level_1_enable.value                            = 1;
+      cfg->emtc_config.prach_ce_level_1_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_1_configuration_index.value               = p->prach_ConfigIndex_r13;
+      cfg->emtc_config.prach_ce_level_1_configuration_index.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_1_frequency_offset.value                  = p->prach_FreqOffset_r13;
+      cfg->emtc_config.prach_ce_level_1_frequency_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG;
+      cfg->num_tlv++;
+
       cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
-      if (p->prach_StartingSubframe_r13) 
+      cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG;
+      cfg->num_tlv++;
+
+      if (p->prach_StartingSubframe_r13) {
 	cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value   = *p->prach_StartingSubframe_r13;
+	cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.tl.tag  = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG;
+        cfg->num_tlv++;
+      }
+ 
       cfg->emtc_config.prach_ce_level_1_hopping_enable.value                    = p->prach_HoppingConfig_r13;
+      cfg->emtc_config.prach_ce_level_1_hopping_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG;
+      cfg->num_tlv++;
+ 
       cfg->emtc_config.prach_ce_level_1_hopping_offset.value                    = cfg->rf_config.ul_channel_bandwidth.value-6;
+      cfg->emtc_config.prach_ce_level_1_hopping_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG;
+      cfg->num_tlv++;
+ 
     case 1:
       p=prach_ParametersListCE_r13->list.array[0];
       cfg->emtc_config.prach_ce_level_0_enable.value                            = 1;
+      cfg->emtc_config.prach_ce_level_0_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG;
+      cfg->num_tlv++;
+ 
       cfg->emtc_config.prach_ce_level_0_configuration_index.value               = p->prach_ConfigIndex_r13;
+      cfg->emtc_config.prach_ce_level_0_configuration_index.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG;
+      cfg->num_tlv++;
+ 
       cfg->emtc_config.prach_ce_level_0_frequency_offset.value                  = p->prach_FreqOffset_r13;
+      cfg->emtc_config.prach_ce_level_0_frequency_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG;
+      cfg->num_tlv++;
+ 
       cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13;
-      if (p->prach_StartingSubframe_r13) 
+      cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG;
+      cfg->num_tlv++;
+ 
+      if (p->prach_StartingSubframe_r13) {
 	cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value   = *p->prach_StartingSubframe_r13;
+	cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.tl.tag  = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG;
+        cfg->num_tlv++;
+      }
+ 
       cfg->emtc_config.prach_ce_level_0_hopping_enable.value                    = p->prach_HoppingConfig_r13;
+      cfg->emtc_config.prach_ce_level_0_hopping_enable.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG;
+      cfg->num_tlv++;
+ 
       cfg->emtc_config.prach_ce_level_0_hopping_offset.value                    = cfg->rf_config.ul_channel_bandwidth.value-6;
+      cfg->emtc_config.prach_ce_level_0_hopping_offset.tl.tag = NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG;
+      cfg->num_tlv++;
     }
 
     struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13;
@@ -391,9 +654,13 @@ void config_sib2(int Mod_idP,
 	break;
       case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_FDD_r13:
 	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13->choice.interval_FDD_r13;
+	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.tl.tag = NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG;
+        cfg->num_tlv++;
 	break;
       case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_TDD_r13:
 	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13->choice.interval_TDD_r13;
+	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.tl.tag = NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG;
+        cfg->num_tlv++;
 	break;
       }
     }
@@ -404,9 +671,13 @@ void config_sib2(int Mod_idP,
 	break;
       case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_FDD_r13:
 	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13->choice.interval_FDD_r13;
+	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.tl.tag = NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG;
+        cfg->num_tlv++;
 	break;
       case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_TDD_r13:
 	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13->choice.interval_TDD_r13;
+	cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.tl.tag = NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG;
+        cfg->num_tlv++;
 	break;
       }
     }
@@ -484,18 +755,26 @@ int rrc_mac_config_req_eNB(module_id_t                      Mod_idP,
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN);
 
-  
-  if (mib!=NULL) {
-    if (RC.mac == NULL) l2_init_eNB();
+  LOG_E(MAC, "RC.mac:%p mib:%p\n", RC.mac, mib);
+
+  if (RC.mac == NULL) {
+    LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
 
+    l2_init_eNB();
+
+    LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
     mac_top_init_eNB();
+    LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
+  }
 
-    RC.mac[Mod_idP]->common_channels[CC_idP].mib             = mib;
-    RC.mac[Mod_idP]->common_channels[CC_idP].physCellId      = physCellId;
-    RC.mac[Mod_idP]->common_channels[CC_idP].p_eNB           = p_eNB;
-    RC.mac[Mod_idP]->common_channels[CC_idP].Ncp             = Ncp;
-    RC.mac[Mod_idP]->common_channels[CC_idP].eutra_band      = eutra_band;
-    RC.mac[Mod_idP]->common_channels[CC_idP].dl_CarrierFreq  = dl_CarrierFreq;
+  if (mib!=NULL) {
+    LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
+      RC.mac[Mod_idP]->common_channels[CC_idP].mib             = mib;
+      RC.mac[Mod_idP]->common_channels[CC_idP].physCellId      = physCellId;
+      RC.mac[Mod_idP]->common_channels[CC_idP].p_eNB           = p_eNB;
+      RC.mac[Mod_idP]->common_channels[CC_idP].Ncp             = Ncp;
+      RC.mac[Mod_idP]->common_channels[CC_idP].eutra_band      = eutra_band;
+      RC.mac[Mod_idP]->common_channels[CC_idP].dl_CarrierFreq  = dl_CarrierFreq;
 
     LOG_I(MAC,
 	  "Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n",
@@ -524,7 +803,6 @@ int rrc_mac_config_req_eNB(module_id_t                      Mod_idP,
 	       );
 
     mac_init_cell_params(Mod_idP,CC_idP);
-  }
   if (schedulingInfoList!=NULL)  {
     RC.mac[Mod_idP]->common_channels[CC_idP].tdd_Config         = tdd_Config;    
     RC.mac[Mod_idP]->common_channels[CC_idP].schedulingInfoList = schedulingInfoList;    
@@ -564,6 +842,7 @@ int rrc_mac_config_req_eNB(module_id_t                      Mod_idP,
 
 
   }
+  } // mib != NULL
 
 
   // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup
@@ -639,6 +918,7 @@ int rrc_mac_config_req_eNB(module_id_t                      Mod_idP,
     }
   } 
 
+    LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
   if (pmch_InfoList != NULL) {
 
     //    LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9));
@@ -663,18 +943,34 @@ int rrc_mac_config_req_eNB(module_id_t                      Mod_idP,
 
 #endif
 
-  if (radioResourceConfigCommon!=NULL) {
-    AssertFatal(RC.mac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n");
-    PHY_Config_t phycfg;
-    phycfg.Mod_id = Mod_idP;
-    phycfg.CC_id  = CC_idP;
-    phycfg.cfg    = &RC.mac[Mod_idP]->config[CC_idP];
-    
-    if (RC.mac[Mod_idP]->if_inst->PHY_config_req) RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg); 
+  LOG_E(MAC, "%s() %s:%d RC.mac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req);
+
+  // if in nFAPI mode 
+  if (
+      (nfapi_mode == 1 || nfapi_mode == 2) &&
+      (RC.mac[Mod_idP]->if_inst->PHY_config_req == NULL)
+    )
+  {
+    while(RC.mac[Mod_idP]->if_inst->PHY_config_req == NULL) {
+      // DJP AssertFatal(RC.mac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n");
+      usleep(100 * 1000);
+      printf("Waiting for PHY_config_req\n");
+    }
   }
+
+  PHY_Config_t phycfg;
+  phycfg.Mod_id = Mod_idP;
+  phycfg.CC_id  = CC_idP;
+  phycfg.cfg    = &RC.mac[Mod_idP]->config[CC_idP];
+
+  LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
+  if (RC.mac[Mod_idP]->if_inst->PHY_config_req) RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg); 
+  LOG_E(MAC, "%s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
+
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT);
-  
-  return(0);			     
+
+  return(0);			   
+
 }
 
 /*
@@ -755,8 +1051,6 @@ rrc_mac_config_req_ue(
 
   int i;
 
-  int UE_id = -1;
- 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN);
 
   LOG_I(MAC,"[CONFIG][UE %d] Configuring MAC/PHY from eNB %d\n",Mod_idP,eNB_index);
diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index cba8112f34999e70c807074ffdfe65cd7af5b70d..d6229643b7e4fecc72b5a6bc8b50f75ffbe9a8d5 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index 5b74cdc4aec5180ce4473dfa60209222b53f2226..efb3615a8184851288c1f5596a6b5f71c475092a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -128,7 +128,8 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
 		memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
 		ul_config_pdu->pdu_type                                             = NFAPI_UL_CONFIG_SRS_PDU_TYPE;
 		ul_config_pdu->pdu_size                                             = 2+(uint8_t)(2+sizeof(nfapi_ul_config_srs_pdu));
-		ul_config_pdu->srs_pdu.srs_pdu_rel8.size                            = (uint8_t)sizeof(nfapi_ul_config_srs_pdu);;
+		ul_config_pdu->srs_pdu.srs_pdu_rel8.tl.tag                          = NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL8_TAG;
+		ul_config_pdu->srs_pdu.srs_pdu_rel8.size                            = (uint8_t)sizeof(nfapi_ul_config_srs_pdu);
 		ul_config_pdu->srs_pdu.srs_pdu_rel8.rnti                            = UE_list->UE_template[CC_id][UE_id].rnti;
 		ul_config_pdu->srs_pdu.srs_pdu_rel8.srs_bandwidth                   = soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth;
 		ul_config_pdu->srs_pdu.srs_pdu_rel8.frequency_domain_position       = soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition;
@@ -139,6 +140,7 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
 		//		ul_config_pdu->srs_pdu.srs_pdu_rel10.antenna_port                   = ;//
 		//		ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs                = ;//
 		RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP<<4)+subframeP;
+		RC.mac[module_idP]->UL_req[CC_id].header.message_id = NFAPI_UL_CONFIG_REQUEST;
 		ul_req->number_of_pdus++;
 	      } // if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset)
 	    } // if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup)
@@ -188,7 +190,9 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
 	    memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
 	    ul_config_pdu->pdu_type                                                          = NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE;
 	    ul_config_pdu->pdu_size                                                          = 2+(uint8_t)(2+sizeof(nfapi_ul_config_uci_cqi_pdu));
+	    ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.tl.tag             = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
 	    ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti               = UE_list->UE_template[CC_id][UE_id].rnti;
+	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.tl.tag           = NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG;
 	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.pucch_index      = cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex;
 	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.dl_cqi_pmi_size  = get_rel8_dl_cqi_pmi_size(&UE_list->UE_sched_ctrl[UE_id],
 															CC_id,
@@ -196,6 +200,7 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
 															get_tmode(module_idP,CC_id,UE_id),
 															cqi_ReportPeriodic);
 	    ul_req->number_of_pdus++;
+	    ul_req->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
 
 #if defined(Rel10) || defined(Rel14)
 	    // PUT rel10-13 UCI options here
@@ -209,11 +214,14 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
 	    memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
 	    ul_config_pdu->pdu_type                                                          = NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE;
 	    ul_config_pdu->pdu_size                                                          = 2+(uint8_t)(2+sizeof(nfapi_ul_config_uci_cqi_pdu));
+	    ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.tl.tag             = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
 	    ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti               = UE_list->UE_template[CC_id][UE_id].rnti;
+	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.tl.tag           = NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG;
 	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.pucch_index      = cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex;
 	    ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.dl_cqi_pmi_size  = (cc->p_eNB==2)?1:2;
 	    RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP<<4)+subframeP;
 	    ul_req->number_of_pdus++;
+	    ul_req->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
 	  }
 
 	} // if ((cqi_ReportPeriodic = cqi_ReportConfig->cqi_ReportPeriodic)!=NULL) {
@@ -226,7 +234,8 @@ void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
 {
   eNB_MAC_INST                   *eNB        = RC.mac[module_idP];
   UE_list_t                      *UE_list    = &eNB->UE_list;
-  nfapi_ul_config_request_body_t *ul_req;
+  nfapi_ul_config_request_t      *ul_req;
+  nfapi_ul_config_request_body_t *ul_req_body;
   int                             CC_id;
   int                             UE_id;
   SchedulingRequestConfig_t      *SRconfig;
@@ -241,7 +250,10 @@ void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
     for (UE_id = 0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
       if (RC.mac[module_idP]->UE_list.active[UE_id]!=TRUE) continue;
 
-      ul_req        = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
+      ul_req        = &RC.mac[module_idP]->UL_req[CC_id];
+      ul_req_body   = &ul_req->ul_config_request_body;
+
+      //LOG_D(MAC, "UE active UE_id:%d ul_req_body->number_of_pdus:%d\n", UE_id, ul_req_body->number_of_pdus);
 
       AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id);
 
@@ -274,18 +286,18 @@ void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
       skip_ue=0;
       is_harq = 0;
       // check that there is no existing UL grant for ULSCH which overrides the SR
-      for (i = 0; i < ul_req->number_of_pdus; i++) {
-        if (((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)||
-             (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)||
-             (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)||
-             (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE))&&
-            (ul_req->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
+      for (i = 0; i < ul_req_body->number_of_pdus; i++) {
+        if (((ul_req_body->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)||
+             (ul_req_body->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)||
+             (ul_req_body->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)||
+             (ul_req_body->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE))&&
+            (ul_req_body->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
             skip_ue=1;
             break;
         }
         /* if there is already an HARQ pdu, convert to SR_HARQ */
-        else if ((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&&
-                 (ul_req->ul_config_pdu_list[i].uci_harq_pdu.ue_information.ue_information_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
+        else if ((ul_req_body->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&&
+                 (ul_req_body->ul_config_pdu_list[i].uci_harq_pdu.ue_information.ue_information_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
           is_harq = 1;
           break;
         }
@@ -294,33 +306,45 @@ void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
       // drop the allocation because ULSCH with handle it with BSR
       if (skip_ue==1) continue;
 
-      LOG_D(MAC,"Frame %d, Subframe %d : Scheduling SR for UE %d/%x\n",frameP,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].rnti);
+      LOG_D(MAC,"Frame %d, Subframe %d : Scheduling SR for UE %d/%x is_harq:%d\n",frameP,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].rnti, is_harq);
 
       // check Rel10 or Rel8 SR
 #if defined(Rel10) || defined(Rel14)
       if ((UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2) &&
-          (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)&&
           (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)) {
+        sr.sr_information_rel8.tl.tag = 0;
+        sr.sr_information_rel10.tl.tag = NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL10_TAG;
         sr.sr_information_rel10.number_of_pucch_resources = 1;
         sr.sr_information_rel10.pucch_index_p1 = *UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020->sr_PUCCH_ResourceIndexP1_r10;
+
+        LOG_D(MAC,"REL10 PUCCH INDEX P1:%d\n", sr.sr_information_rel10.pucch_index_p1);
       } else
 #endif
       {
+        sr.sr_information_rel8.tl.tag = NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL8_TAG;
         sr.sr_information_rel8.pucch_index = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex;
+        sr.sr_information_rel10.tl.tag = 0;
+
+        LOG_D(MAC,"REL8 PUCCH INDEX:%d\n", sr.sr_information_rel8.pucch_index);
       }
 
       /* if there is already an HARQ pdu, convert to SR_HARQ */
       if (is_harq) {
-        nfapi_ul_config_harq_information h = ul_req->ul_config_pdu_list[i].uci_harq_pdu.harq_information;
-        ul_req->ul_config_pdu_list[i].pdu_type                         = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE;
-        ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.sr_information   = sr;
-        ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.harq_information = h;
+        nfapi_ul_config_harq_information h = ul_req_body->ul_config_pdu_list[i].uci_harq_pdu.harq_information;
+        ul_req_body->ul_config_pdu_list[i].pdu_type                         = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE;
+        ul_req_body->ul_config_pdu_list[i].uci_sr_harq_pdu.sr_information   = sr;
+        ul_req_body->ul_config_pdu_list[i].uci_sr_harq_pdu.harq_information = h;
       } else {
-        ul_req->ul_config_pdu_list[ul_req->number_of_pdus].pdu_type                                           = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE;
-        ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti;
-        ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information                          = sr;
-        ul_req->number_of_pdus++;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].pdu_type                                             = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.tl.tag = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.rnti   = UE_list->UE_template[CC_id][UE_id].rnti;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel11.tl.tag = 0;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel13.tl.tag = 0;
+        ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus].uci_sr_pdu.sr_information                            = sr;
+        ul_req_body->number_of_pdus++;
       } /* if (is_harq) */
+      ul_req_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+
     } // for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id])
   } // for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
 }
@@ -345,6 +369,7 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
       memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
       dl_config_pdu->pdu_type                                         = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
       dl_config_pdu->pdu_size                                         = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format1A);
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = rnti;
@@ -355,7 +380,11 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
 		  "illegal dl_Bandwidth %d\n",(int)cc[CC_id].mib->message.dl_Bandwidth);
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = pdcch_order_table[cc[CC_id].mib->message.dl_Bandwidth];
       DL_req[CC_id].dl_config_request_body.number_dci++;
+      LOG_E(MAC, "%s() number_dci:%u\n", __FUNCTION__, DL_req[CC_id].dl_config_request_body.number_dci);
+
       DL_req[CC_id].dl_config_request_body.number_pdu++;
+      DL_req[CC_id].dl_config_request_body.tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+     
       LOG_I(MAC,"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d), resource_block_coding %d \n",UE_id,rnti,UE_list->UE_sched_ctrl[UE_id].ul_failure_timer,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding);
     }
     else { // ra_pdcch_sent==1
@@ -377,6 +406,8 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
 
 }
 
+extern uint8_t nfapi_mode;
+
 void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_frame_t subframeP)
 {
   nfapi_dl_config_request_t *DL_req         = &eNB->DL_req[0];
@@ -384,50 +415,71 @@ void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_fra
   nfapi_hi_dci0_request_t   *HI_DCI0_req    = &eNB->HI_DCI0_req[0];
   nfapi_tx_request_t        *TX_req         = &eNB->TX_req[0];
 
-
   eNB->pdu_index[CC_idP]                                     = 0;
-  DL_req[CC_idP].dl_config_request_body.number_pdcch_ofdm_symbols           = 1;
-  DL_req[CC_idP].dl_config_request_body.number_dci                          = 0;
-  DL_req[CC_idP].dl_config_request_body.number_pdu                          = 0;
-  DL_req[CC_idP].dl_config_request_body.number_pdsch_rnti                   = 0;
-  DL_req[CC_idP].dl_config_request_body.transmission_power_pcfich           = 6000;
-
-  HI_DCI0_req[CC_idP].hi_dci0_request_body.sfnsf                            = subframeP + (frameP<<4);
-  HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci                    = 0;
-
-
-  UL_req[CC_idP].ul_config_request_body.number_of_pdus                      = 0;
-  UL_req[CC_idP].ul_config_request_body.rach_prach_frequency_resources      = 0; // ignored, handled by PHY for now
-  UL_req[CC_idP].ul_config_request_body.srs_present                         = 0; // ignored, handled by PHY for now
-
-
-  TX_req[CC_idP].tx_request_body.number_of_pdus                 = 0;
-
 
+  if (nfapi_mode==0 || nfapi_mode == 1)   // monolithic or PNF
+  {
+    DL_req[CC_idP].dl_config_request_body.number_pdcch_ofdm_symbols           = 1;
+    DL_req[CC_idP].dl_config_request_body.number_dci                          = 0;
+    DL_req[CC_idP].dl_config_request_body.number_pdu                          = 0;
+    DL_req[CC_idP].dl_config_request_body.number_pdsch_rnti                   = 0;
+    DL_req[CC_idP].dl_config_request_body.transmission_power_pcfich           = 6000;
+
+    HI_DCI0_req[CC_idP].hi_dci0_request_body.sfnsf                            = subframeP + (frameP<<4);
+    HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci                    = 0;
+
+
+    UL_req[CC_idP].ul_config_request_body.number_of_pdus                      = 0;
+    UL_req[CC_idP].ul_config_request_body.rach_prach_frequency_resources      = 0; // ignored, handled by PHY for now
+    UL_req[CC_idP].ul_config_request_body.srs_present                         = 0; // ignored, handled by PHY for now
+
+
+    TX_req[CC_idP].tx_request_body.number_of_pdus                 = 0;
+
+    if (0) LOG_D(MAC,"%s() SFN_SF:%d%d ZERO PDUs of TX_req:(SFN_SF:%d):%d UL_req:(SFN_SF:%d):%d HI_DCI0_req:(SFN_SF:%d):dci:%d hi:%d DL:(SFN_SF:%d):dci:%d DL:pdu:%d\n", 
+        __FUNCTION__,
+        frameP, subframeP,
+        NFAPI_SFNSF2DEC(TX_req[CC_idP].sfn_sf),
+        TX_req[CC_idP].tx_request_body.number_of_pdus,
+        NFAPI_SFNSF2DEC(UL_req[CC_idP].sfn_sf),
+        UL_req[CC_idP].ul_config_request_body.number_of_pdus,
+        NFAPI_SFNSF2DEC(HI_DCI0_req[CC_idP].sfn_sf),
+        HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci,
+        HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_hi,
+        NFAPI_SFNSF2DEC(DL_req[CC_idP].sfn_sf),
+        DL_req[CC_idP].dl_config_request_body.number_dci,
+        DL_req[CC_idP].dl_config_request_body.number_pdu);
+  }
 }
 
 void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP)
 {
   int CC_id;
-  eNB_MAC_INST *eNB;
-  nfapi_ul_config_request_body_t *ul_req_tmp;
-  nfapi_ul_config_request_body_t *ul_req;
-
-  eNB = RC.mac[module_idP];
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
 
   for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
 
-    ul_req_tmp       = &eNB->UL_req_tmp[CC_id][subframeP].ul_config_request_body;
-    ul_req           = &eNB->UL_req[CC_id].ul_config_request_body;
+    nfapi_ul_config_request_t *ul_req_tmp = &eNB->UL_req_tmp[CC_id][subframeP];
+    nfapi_ul_config_request_t *ul_req     = &eNB->UL_req[CC_id];
+    nfapi_ul_config_request_pdu_t *ul_req_pdu = ul_req->ul_config_request_body.ul_config_pdu_list;
 
-    eNB->UL_req[CC_id].sfn_sf   = (frameP<<4) + subframeP;
-    ul_req->number_of_pdus                     = ul_req_tmp->number_of_pdus;
-    ul_req_tmp->number_of_pdus = 0;
+    *ul_req = *ul_req_tmp;
 
-    memcpy((void*)ul_req->ul_config_pdu_list,
-	   (void*)ul_req_tmp->ul_config_pdu_list,
-	   ul_req->number_of_pdus*sizeof(nfapi_ul_config_request_pdu_t));
+    // Restore the pointer
+    ul_req->ul_config_request_body.ul_config_pdu_list = ul_req_pdu;
 
+    ul_req->sfn_sf   = (frameP<<4) + subframeP;
+
+    ul_req_tmp->ul_config_request_body.number_of_pdus = 0;
+
+    if (ul_req->ul_config_request_body.number_of_pdus>0)
+    {
+      LOG_D(PHY, "%s() active NOW (frameP:%d subframeP:%d) pdus:%d\n", __FUNCTION__, frameP, subframeP, ul_req->ul_config_request_body.number_of_pdus);
+    }
+
+    memcpy((void*)ul_req->ul_config_request_body.ul_config_pdu_list,
+	   (void*)ul_req_tmp->ul_config_request_body.ul_config_pdu_list,
+	   ul_req->ul_config_request_body.number_of_pdus*sizeof(nfapi_ul_config_request_pdu_t));
   }
 }
 
@@ -464,8 +516,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
 #endif
     RC.mac[module_idP]->frame    = frameP;
     RC.mac[module_idP]->subframe = subframeP;
-
-    clear_nfapi_information(RC.mac[module_idP],CC_id,frameP,subframeP);
   }
 
   // refresh UE list based on UEs dropped by PHY in previous subframe
@@ -518,7 +568,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
 #endif
 
   // This schedules MIB
-  if ((subframeP==0) && (frameP&3) == 0) schedule_mib(module_idP,frameP,subframeP);
+  //if ((subframeP==0) && (frameP&3) == 0) schedule_mib(module_idP,frameP,subframeP);
+  if (subframeP==0) schedule_mib(module_idP,frameP,subframeP);
   // This schedules SI for legacy LTE and eMTC starting in subframeP
   schedule_SI(module_idP,frameP,subframeP);
   // This schedules Random-Access for legacy LTE and eMTC starting in subframeP
@@ -530,7 +581,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
   // This schedules ULSCH in subframeP (dci0)
   schedule_ulsch(module_idP,frameP,subframeP);
   // This schedules UCI_SR in subframeP
-  schedule_SR(module_idP,frameP,subframeP);
+  //schedule_SR(module_idP,frameP,subframeP);
   // This schedules UCI_CSI in subframeP
   schedule_CSI(module_idP, frameP, subframeP);
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index eb26e55d59c167851308bb03a6a8a21fa6745eb9..8b2b47c450789a4f05714849c9ee31ad17576c0e 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -62,6 +62,38 @@
 
 #include "T.h"
 
+extern uint8_t nfapi_mode;
+extern uint8_t sf_ahead;
+extern int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req);
+
+void add_subframe(uint16_t *frameP, uint16_t *subframeP, int offset)
+{
+    *frameP    = *frameP + ((*subframeP + offset) / 10);
+
+    *subframeP = ((*subframeP + offset) % 10);
+}
+
+uint16_t sfnsf_add_subframe(uint16_t frameP, uint16_t subframeP, int offset)
+{
+  add_subframe(&frameP, &subframeP, offset);
+  return frameP<<4|subframeP;
+}
+
+void subtract_subframe(uint16_t *frameP, uint16_t *subframeP, int offset)
+{
+  if (*subframeP < offset)
+  {
+    *frameP = (*frameP+1024-1)%1024;
+  }
+  *subframeP = (*subframeP+10-offset)%10;
+}
+
+uint16_t sfnsf_subtract_subframe(uint16_t frameP, uint16_t subframeP, int offset)
+{
+  subtract_subframe(&frameP, &subframeP, offset);
+  return frameP<<4|subframeP;
+}
+
 void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_t frameP, sub_frame_t subframeP) {
 
   eNB_MAC_INST                    *eNB = RC.mac[module_idP];
@@ -70,13 +102,13 @@ void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_
   nfapi_ul_config_request_t      *ul_req;
   nfapi_ul_config_request_pdu_t  *ul_config_pdu;
   nfapi_ul_config_request_body_t *ul_req_body;
-  nfapi_hi_dci0_request_body_t   *hi_dci0_req;
+  nfapi_hi_dci0_request_t        *hi_dci0_req = &eNB->HI_DCI0_req[CC_id];
+  nfapi_hi_dci0_request_body_t   *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
   nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu;
 
   uint8_t rvseq[4] = {0,2,3,1};
 
 
-  hi_dci0_req   = &eNB->HI_DCI0_req[CC_id].hi_dci0_request_body;
   ul_req        = &eNB->UL_req_tmp[CC_id][RA_template->Msg3_subframe];
   ul_req_body   = &ul_req->ul_config_request_body;
   AssertFatal(RA_template->RA_active == TRUE,"RA is not active for RA %X\n",RA_template->rnti);
@@ -94,6 +126,7 @@ void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_
     memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
     ul_config_pdu->pdu_type                                                        = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; 
     ul_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu));
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.tl.tag                                 = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle                                 = eNB->ul_handle++;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti                                   = RA_template->rnti;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start                   = narrowband_to_first_rb(cc,RA_template->msg34_narrowband)+RA_template->msg3_first_rb;
@@ -111,11 +144,17 @@ void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size                                   = get_TBS_UL(RA_template->msg3_mcs,
 												RA_template->msg3_nb_rb);
     // Re13 fields
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.tl.tag                                = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type                               = RA_template->rach_resource_type>2 ? 2 : 1;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions           = 1;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number                     = 1;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io            = (RA_template->Msg3_frame*10)+RA_template->Msg3_subframe;
+
     ul_req_body->number_of_pdus++;
+    ul_req_body->tl.tag                                                            = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+
+    ul_req->sfn_sf = RA_template->Msg3_frame<<4|RA_template->Msg3_subframe; //sfnsf_add_subframe(RA_template->Msg3_frame, RA_template->Msg3_subframe, 0);
+    ul_req->header.message_id = NFAPI_UL_CONFIG_REQUEST;
   } //  if (RA_template->rach_resource_type>0) {	 
   else
 #endif
@@ -132,6 +171,7 @@ void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_
       memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
       ul_config_pdu->pdu_type                                                        = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; 
       ul_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu));
+      ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.tl.tag                                 = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG;
       ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle                                 = eNB->ul_handle++;
       ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti                                   = RA_template->rnti;
       ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start                   = RA_template->msg3_first_rb;
@@ -149,23 +189,39 @@ void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_
       ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs                                  = 1;
       ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size                                   = get_TBS_UL(10,RA_template->msg3_nb_rb);
       ul_req_body->number_of_pdus++;
+      ul_req_body->tl.tag                                                            = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+      ul_req->sfn_sf = sfnsf_add_subframe(RA_template->Msg3_frame, RA_template->Msg3_subframe, 0);
+      ul_req->header.message_id = NFAPI_UL_CONFIG_REQUEST;
       // save UL scheduling information for preprocessor
       for (j=0;j<RA_template->msg3_nb_rb;j++) cc->vrb_map_UL[RA_template->msg3_first_rb+j]=1;
       
+      LOG_D(MAC, "MSG3: UL_CONFIG SFN/SF:%d number_of_pdus:%d RA_template->msg3_round:%d\n", NFAPI_SFNSF2DEC(ul_req->sfn_sf), ul_req_body->number_of_pdus, RA_template->msg3_round);
       
       if (RA_template->msg3_round != 0) { // program HI too
-	hi_dci0_pdu                                                         = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]; 	
+	hi_dci0_pdu                                                         = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci+hi_dci0_req_body->number_of_hi];
 	memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
 	hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_HI_PDU_TYPE; 
 	hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_hi_pdu);
+	hi_dci0_pdu->hi_pdu.hi_pdu_rel8.tl.tag                              = NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG;
 	hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start                = RA_template->msg3_first_rb; 
 	hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms             = 0;
 	hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value                            = 0;
-	hi_dci0_req->number_of_hi++;
+	hi_dci0_req_body->number_of_hi++;
+	hi_dci0_req_body->sfnsf = sfnsf_add_subframe(RA_template->Msg3_frame, RA_template->Msg3_subframe, 0);
+        hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG;
+
+        hi_dci0_req->sfn_sf = sfnsf_add_subframe(RA_template->Msg3_frame, RA_template->Msg3_subframe, 4);
+        hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
+
+        oai_nfapi_hi_dci0_req(hi_dci0_req);
+        hi_dci0_req_body->number_of_hi=0;
+
+        LOG_D(MAC, "MSG3: HI_DCI0 SFN/SF:%d number_of_dci:%d number_of_hi:%d\n", NFAPI_SFNSF2DEC(hi_dci0_req->sfn_sf), hi_dci0_req_body->number_of_dci, hi_dci0_req_body->number_of_hi);
+
 	// save UL scheduling information for preprocessor
 	for (j=0;j<RA_template->msg3_nb_rb;j++) cc->vrb_map_UL[RA_template->msg3_first_rb+j]=1;
 	
-	LOG_D(MAC,"[eNB %d][PUSCH-RA %x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) RA (mcs %d, first rb %d, nb_rb %d,round %d)\n",
+	LOG_I(MAC,"[eNB %d][PUSCH-RA %x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) RA (mcs %d, first rb %d, nb_rb %d,round %d)\n",
 	      module_idP,RA_template->rnti,CC_id,frameP,subframeP,10,
 	      1,1,
 	      RA_template->msg3_round-1);
@@ -227,6 +283,9 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
     }
   }
 
+  LOG_I(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, RA_template[rach_resource_type:%d Msg2:%d/%d]\n",module_idP,frameP,subframeP,
+      RA_template->rach_resource_type,RA_template->Msg2_frame,RA_template->Msg2_subframe);
+
   if (RA_template->rach_resource_type > 0) {
     
     // This uses an MPDCCH Type 2 common allocation according to Section 9.1.5 36-213
@@ -259,6 +318,7 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
       memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
       dl_config_pdu->pdu_type                                                                  = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; 
       dl_config_pdu->pdu_size                                                                  = (uint8_t)(2+sizeof(nfapi_dl_config_mpdcch_pdu));
+      dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tl.tag                                        = NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format                                    = (RA_template->rach_resource_type > 1) ? 11 : 10;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band                            = RA_template->msg2_narrowband;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_prb_pairs                           = 6;
@@ -304,8 +364,12 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_tx_antenna_ports                    = 1;
       RA_template->msg2_mpdcch_repetition_cnt++;
       dl_req->number_pdu++;
+      dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
       RA_template->Msg2_subframe = (RA_template->Msg2_subframe+9)%10;
 
+      eNB->DL_req[CC_idP].sfn_sf = sfnsf_add_subframe(RA_template->Msg2_frame, RA_template->Msg2_subframe, 4);	// nFAPI is runnning at TX SFN/SF - ie 4 ahead
+      eNB->DL_req[CC_idP].header.message_id = NFAPI_DL_CONFIG_REQUEST;
+
     } //repetition_count==0 && SF condition met
     if (RA_template->msg2_mpdcch_repetition_cnt>0) { // we're in a stream of repetitions
       LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, MPDCCH repetition %d\n",
@@ -334,6 +398,7 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; 
 	dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_idP];
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = RA_template->RA_rnti;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;   
@@ -358,20 +423,30 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	//	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
 
 	// Rel10 fields
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
 	// Rel13 fields
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = (RA_template->rach_resource_type < 3) ? 1 : 2;;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;  // not SI message
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = (10*frameP)+subframeP;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag                       = 0;
 	dl_req->number_pdu++;
+        dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+        eNB->DL_req[CC_idP].sfn_sf = (frameP<<4)+subframeP;
+        eNB->DL_req[CC_idP].header.message_id = NFAPI_DL_CONFIG_REQUEST;
 	
+        LOG_E(MAC,"DL_CONFIG SFN/SF:%d/%d MESSAGE2\n", frameP, subframeP);
+
 	// Program UL processing for Msg3, same as regular LTE
 	get_Msg3alloc(&cc[CC_idP],subframeP,frameP,&RA_template->Msg3_frame,&RA_template->Msg3_subframe);
 	add_msg3(module_idP,CC_idP, RA_template,frameP,subframeP);
 	fill_rar_br(eNB,CC_idP,RA_template,frameP,subframeP,cc[CC_idP].RAR_pdu.payload,RA_template->rach_resource_type-1);
 	// DL request
 	eNB->TX_req[CC_idP].sfn_sf                                            = (frameP<<4)+subframeP;
+        eNB->TX_req[CC_idP].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+        eNB->TX_req[CC_idP].header.message_id = NFAPI_TX_REQUEST;
 	TX_req                                                                = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; 		     
 	TX_req->pdu_length                                                    = 7;  // This should be changed if we have more than 1 preamble 
 	TX_req->pdu_index                                                     = eNB->pdu_index[CC_idP]++;
@@ -379,6 +454,8 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	TX_req->segments[0].segment_length                                    = 7;
 	TX_req->segments[0].segment_data                                      = cc[CC_idP].RAR_pdu.payload;
 	eNB->TX_req[CC_idP].tx_request_body.number_of_pdus++;
+
+        LOG_E(MAC,"TX_REQ SFN/SF:%d/%d MESSAGE2\n", frameP, subframeP);
       }
     }      
     
@@ -386,14 +463,16 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
   else
 #endif
     {
+      LOG_E(MAC,"%s() Compare SFN/SF:%04d%d Msg2:%04d%d\n", __FUNCTION__,frameP,subframeP,RA_template->Msg2_frame,RA_template->Msg2_subframe);
 
       if ((RA_template->Msg2_frame == frameP) && (RA_template->Msg2_subframe == subframeP)) {
-	LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, RA_active %d format 1A (%d,%d))\n",
+  struct timespec t;
+  clock_gettime(CLOCK_MONOTONIC, &t);
+	LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, RA_active %d format 1A (%d,%d)) t:%ld.%09ld\n",
 	      module_idP, CC_idP, frameP, subframeP,
 	      RA_template->RA_active,
-	      
 	      RA_template->RA_dci_fmt1,
-	      RA_template->RA_dci_size_bits1);
+	      RA_template->RA_dci_size_bits1, t.tv_sec,t.tv_nsec);
 
 	// Allocate 4 PRBS starting in RB 0
 	first_rb = 0;
@@ -405,6 +484,7 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	dl_config_pdu->pdu_type                                                          = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; 
 	dl_config_pdu->pdu_size                                                          = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                             = NFAPI_DL_DCI_FORMAT_1A;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level                      = 4;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                                   = RA_template->RA_rnti;
@@ -422,15 +502,17 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 
 	// This checks if the above DCI allocation is feasible in current subframe
 	if (!CCE_allocation_infeasible(module_idP,CC_idP,0,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,RA_template->RA_rnti)) {
-	  LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for RA_RNTI %x\n",
-		frameP,subframeP,RA_template->RA_rnti);
+	  LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for RA_RNTI %x pdu_index:%d\n",
+		frameP,subframeP,RA_template->RA_rnti, eNB->pdu_index[CC_idP]);
 	  dl_req->number_dci++;
 	  dl_req->number_pdu++;
+          dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
 	  
 	  dl_config_pdu                                                                  = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
 	  memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	  dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; 
 	  dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_idP];
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = RA_template->RA_rnti;
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;   // format 1A/1B/1D
@@ -454,7 +536,13 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
 	  //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
 	  dl_req->number_pdu++;
+          dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
 	  
+          eNB->DL_req[CC_idP].sfn_sf = (frameP<<4)+subframeP;
+          eNB->DL_req[CC_idP].header.message_id = NFAPI_DL_CONFIG_REQUEST;
+
+          LOG_E(MAC,"DL_CONFIG SFN/SF:%d/%d MESSAGE2\n", frameP, subframeP);
+
 	  // Program UL processing for Msg3
 	  get_Msg3alloc(&cc[CC_idP],subframeP,frameP,&RA_template->Msg3_frame,&RA_template->Msg3_subframe);
 
@@ -466,6 +554,8 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 
 	  // DL request
 	  eNB->TX_req[CC_idP].sfn_sf                                             = (frameP<<4)+subframeP;
+          eNB->TX_req[CC_idP].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_idP].header.message_id = NFAPI_TX_REQUEST;
 	  TX_req                                                                = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; 		     
 	  TX_req->pdu_length                                                    = 7;  // This should be changed if we have more than 1 preamble 
 	  TX_req->pdu_index                                                     = eNB->pdu_index[CC_idP]++;
@@ -473,6 +563,9 @@ void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  TX_req->segments[0].segment_length                                    = 7;
 	  TX_req->segments[0].segment_data                                      = cc[CC_idP].RAR_pdu.payload;
 	  eNB->TX_req[CC_idP].tx_request_body.number_of_pdus++;
+
+          LOG_E(MAC,"TX_REQ SFN/SF:%d/%d MESSAGE2\n", frameP, subframeP);
+
 	} // PDCCH CCE allocation is feasible
       } // Msg2 frame/subframe condition
     } // else BL/CE
@@ -496,8 +589,10 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
   nfapi_ul_config_request_pdu_t   *ul_config_pdu;
   nfapi_tx_request_pdu_t          *TX_req;
   UE_list_t                       *UE_list=&eNB->UE_list;
-  nfapi_dl_config_request_body_t *dl_req;
-  nfapi_ul_config_request_body_t *ul_req;
+  nfapi_dl_config_request_t      *dl_req;
+  nfapi_dl_config_request_body_t *dl_req_body;
+  nfapi_ul_config_request_body_t *ul_req_body;
+  nfapi_ul_config_request_t      *ul_req;
   uint8_t                         lcid;
   uint8_t                         offset;
 
@@ -559,8 +654,9 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 
   vrb_map       = cc[CC_idP].vrb_map;
   
-  dl_req        = &eNB->DL_req[CC_idP].dl_config_request_body;
-  dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
+  dl_req        = &eNB->DL_req[CC_idP];
+  dl_req_body   = &dl_req->dl_config_request_body;
+  dl_config_pdu = &dl_req_body->dl_config_pdu_list[dl_req_body->number_pdu]; 
   N_RB_DL       = to_prb(cc[CC_idP].mib->message.dl_Bandwidth);
 
   UE_id = find_UE_id(module_idP,RA_template->rnti);
@@ -568,10 +664,9 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
   
   // set HARQ process round to 0 for this UE
   
-  if (cc->tdd_Config) RA_template->harq_pid = ((frameP*10)+subframeP)%10;
-  else RA_template->harq_pid = ((frameP*10)+subframeP)&7;
+  if (cc->tdd_Config) RA_template->harq_pid = ((RA_template->Msg4_frame*10)+RA_template->Msg4_subframe)%10;
+  else RA_template->harq_pid = ((RA_template->Msg4_frame*10)+RA_template->Msg4_subframe)&7;
 
-  
   // Get RRCConnectionSetup for Piggyback
   rrc_sdu_length = mac_rrc_data_req(module_idP,
 				    CC_idP,
@@ -587,8 +682,8 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	      "[MAC][eNB Scheduler] CCCH not allocated\n");
   
   
-  LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: UE_id %d, rrc_sdu_length %d\n",
-	module_idP, CC_idP, frameP, subframeP,UE_id, rrc_sdu_length);
+  LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d MSG4:SFN/SF:%d%d UE_id %d, rrc_sdu_length %d harq_pid %d\n",
+	module_idP, CC_idP, frameP, subframeP,RA_template->Msg4_frame,RA_template->Msg4_subframe,UE_id, rrc_sdu_length, RA_template->harq_pid);
   
   
 #ifdef Rel14
@@ -615,12 +710,13 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
     first_rb = narrowband_to_first_rb(&cc[CC_idP],RA_template->msg34_narrowband);
 
     if ((RA_template->msg4_mpdcch_repetition_cnt == 0) &&
-    (mpdcch_sf_condition(eNB,CC_idP,frameP,subframeP,rmax,TYPE2,-1)>0)){
+    (mpdcch_sf_condition(eNB,CC_idP,RA_template->Msg4_frame,RA_template->Msg4_subframe,rmax,TYPE2,-1)>0)){
       // MPDCCH configuration for RAR
       
       memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
       dl_config_pdu->pdu_type                                                                  = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; 
       dl_config_pdu->pdu_size                                                                  = (uint8_t)(2+sizeof(nfapi_dl_config_mpdcch_pdu));
+      dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tl.tag                                        = NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format                                    = (RA_template->rach_resource_type > 1) ? 11 : 10;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band                            = RA_template->msg34_narrowband;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_prb_pairs                           = 6;
@@ -635,7 +731,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti                                          = RA_template->RA_rnti;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ce_mode                                       = (RA_template->rach_resource_type < 3) ? 1 : 2;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.drms_scrambling_init                          = cc[CC_idP].physCellId;  /// Check this is still N_id_cell for type2 common
-      dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.initial_transmission_sf_io                    = (frameP*10)+subframeP;
+      dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.initial_transmission_sf_io                    = (RA_template->Msg4_frame*10)+RA_template->Msg4_subframe;
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.transmission_power                            = 6000; // 0dB
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_coding                         = getRIV(6,0,6);// check if not getRIV(N_RB_DL,first_rb,6);
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mcs                                           = 4; // adjust according to size of Msg4, 208 bits with N1A_PRB=3
@@ -665,17 +761,21 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.total_dci_length_including_padding            = 0; // this is not needed by OAI L1, but should be filled in
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_tx_antenna_ports                    = 1;
       RA_template->msg4_mpdcch_repetition_cnt++;
-      dl_req->number_pdu++;
+      dl_req_body->number_pdu++;
+      dl_req_body->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
       
+      dl_req->sfn_sf = (RA_template->Msg4_frame<<4)+RA_template->Msg4_subframe;
+      dl_req->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+
     } //repetition_count==0 && SF condition met
     else if (RA_template->msg4_mpdcch_repetition_cnt>0) { // we're in a stream of repetitions
       RA_template->msg4_mpdcch_repetition_cnt++;	      
       if (RA_template->msg4_mpdcch_repetition_cnt==reps) { // this is the last mpdcch repetition
 	if (cc[CC_idP].tdd_Config==NULL) { // FDD case
 	  // wait 2 subframes for PDSCH transmission
-	  if (subframeP>7) RA_template->Msg4_frame = (frameP+1)&1023;
+	  if (RA_template->Msg4_subframe>7) RA_template->Msg4_frame = (frameP+1)&1023;
 	  else             RA_template->Msg4_frame = frameP;
-	  RA_template->Msg4_subframe               = (subframeP+2)%10; 
+	  RA_template->Msg4_subframe               = (RA_template->Msg4_subframe+2)%10; 
 	}
 	else {
 	  AssertFatal(1==0,"TDD case not done yet\n");
@@ -689,10 +789,11 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	      module_idP, CC_idP, frameP, subframeP,RA_template->rach_resource_type-1,RA_template->rnti);
 
 	AssertFatal(1==0,"Msg4 generation not finished for BL/CE UE\n");
-	dl_config_pdu                                                                  = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
+	dl_config_pdu                                                                  = &dl_req_body->dl_config_pdu_list[dl_req_body->number_pdu]; 
 	memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; 
 	dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_idP];
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = RA_template->rnti;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;   // format 1A/1B/1D
@@ -716,14 +817,22 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
 	//	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
 
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
 	
+	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = (RA_template->rach_resource_type < 3) ? 1 : 2;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;  // not SI message
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = (10*frameP)+subframeP;
 	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag                       = 0;
-	dl_req->number_pdu++;
+	dl_req_body->number_pdu++;
+        dl_req_body->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+	eNB->DL_req[CC_idP].sfn_sf = (frameP<<4)+subframeP;
+	eNB->DL_req[CC_idP].header.message_id = NFAPI_DL_CONFIG_REQUEST;
 	
+        LOG_D(MAC, "[eNB %d][RAPROC] CC_id %d DL_CONFIG frame:%d subframe:%d\n", module_idP,CC_idP,frameP,subframeP);
+
 	RA_template->generate_Msg4=0;
 	RA_template->wait_ack_Msg4=1;
 
@@ -750,7 +859,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 				       &lcid,                       // sdu_lcid
 				       255,                         // no drx
 				       31,                          // no timing advance
-				       RA_template->cont_res_id,    // contention res id
+				       RA_template->cont_res_id,  // contention res id
 				       msg4_padding,                // no padding
 				       msg4_post_padding);
 	
@@ -758,8 +867,11 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	       &cc[CC_idP].CCCH_pdu.payload[0],
 	       rrc_sdu_length);
 	
-	// DL request
-	eNB->TX_req[CC_idP].sfn_sf                                             = (frameP<<4)+subframeP;
+	// Tx request
+	eNB->TX_req[CC_idP].sfn_sf                                            = (frameP<<4)+subframeP;
+        eNB->TX_req[CC_idP].tx_request_body.tl.tag 			      = NFAPI_TX_REQUEST_BODY_TAG;
+        eNB->TX_req[CC_idP].header.message_id 				      = NFAPI_TX_REQUEST;
+
 	TX_req                                                                = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; 		     	      
 	TX_req->pdu_length                                                    = rrc_sdu_length;
 	TX_req->pdu_index                                                     = eNB->pdu_index[CC_idP]++;
@@ -773,19 +885,32 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	// see Section 10.2 from 36.213
 	int ackNAK_absSF = absSF + reps + 4;
 	AssertFatal(reps>2,"Have to handle programming of ACK when PDSCH repetitions is > 2\n");
-	ul_req        = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10].ul_config_request_body;
-	ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; 
+
+	ul_req             = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10];
+	ul_req_body        = &ul_req->ul_config_request_body;
+	ul_config_pdu = &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus]; 
 
 	ul_config_pdu->pdu_type                                                                     = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE; 
 	ul_config_pdu->pdu_size                                                                     = (uint8_t)(2+sizeof(nfapi_ul_config_uci_harq_pdu));
+	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.tl.tag                       = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle                       = 0; // don't know how to use this
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti                         = RA_template->rnti;
+	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.tl.tag			    = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG;
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.ue_type                     = (RA_template->rach_resource_type < 3) ? 1 : 2;
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.empty_symbols               = 0;
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.total_number_of_repetitions = pucchreps[RA_template->rach_resource_type-1];
 	ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.repetition_number           = 0;
+
+	ul_req_body->tl.tag                                                                         = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+
+	ul_req->sfn_sf  									    = sfnsf_add_subframe(RA_template->Msg3_frame, RA_template->Msg3_subframe, 4);
+	ul_req->header.message_id  								    = NFAPI_UL_CONFIG_REQUEST;
+
+        LOG_D(MAC,"UL_req_tmp[CC_idP:%d][ackNAK_absSF mod 10:%d] RA_template->Msg3_frame:%d RA_template->Msg3_subframe:%d + 4 sfn_sf:%d\n", CC_idP, ackNAK_absSF%10, RA_template->Msg3_frame, RA_template->Msg3_subframe, NFAPI_SFNSF2DEC(ul_req->sfn_sf));
+
 	// Note need to keep sending this across reptitions!!!! Not really for PUCCH, to ask small-cell forum, we'll see for the other messages, maybe parameters change across repetitions and FAPI has to provide for that
 	if (cc[CC_idP].tdd_Config==NULL) { // FDD case
+          ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel8_fdd.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG;
 	  ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel8_fdd.n_pucch_1_0   = n1pucchan[RA_template->rach_resource_type-1];
 	  // NOTE: How to fill in the rest of the n_pucch_1_0 information 213 Section 10.1.2.1 in the general case
 	  // = N_ECCE_q + Delta_ARO + n1pucchan[ce_level]
@@ -796,7 +921,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	else {
 	  AssertFatal(1==0,"PUCCH configuration for ACK/NAK not handled yet for TDD BL/CE case\n");
 	}
-	ul_req->number_of_pdus++;
+	ul_req_body->number_of_pdus++;
 	T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_idP), T_INT(RA_template->rnti), T_INT(frameP), T_INT(subframeP),
 	  T_INT(0 /*harq_pid always 0?*/), T_BUFFER(&eNB->UE_list.DLSCH_pdu[CC_idP][0][UE_id].payload[0], RA_template->msg4_TBsize));
 	
@@ -813,7 +938,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
   else
 #endif
     { // This is normal LTE case
-      if ((RA_template->Msg4_frame == frameP) && (RA_template->Msg4_subframe == subframeP)) {	      
+      if (1){     // || (RA_template->Msg4_frame == frameP) && (RA_template->Msg4_subframe == subframeP)) {	      
 	LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n",
 	      module_idP, CC_idP, frameP, subframeP,RA_template->rnti);
 	
@@ -860,40 +985,64 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 			     1,                           // ndi
 			     0,                           // rv
 			     0);                          // vrb_flag
-    LOG_D(MAC,"Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d\n",
+  struct timespec t;
+  clock_gettime(CLOCK_MONOTONIC, &t);
+    LOG_D(MAC,"Frame %d, subframe %d: Msg4 SFN/SF:%d%d DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d t:%ld.%09ld\n",
 		  frameP,
 	      subframeP,
-          dl_req->number_pdu,
+              RA_template->Msg4_frame, RA_template->Msg4_subframe,
+          dl_req_body->number_pdu,
           dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti,
           dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type,
           dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process,
           &dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding,
-          dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding);
+          dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding,t.tv_sec,t.tv_nsec);
     AssertFatal(dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding < 8192,
 				"resource_block_coding %u < 8192\n",
                 dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding);	
 	if (!CCE_allocation_infeasible(module_idP,CC_idP,1,
-				       subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,
+				       RA_template->Msg4_subframe,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,
 				       RA_template->rnti)) {
-	  dl_req->number_dci++;
-	  dl_req->number_pdu++;
+	  dl_req_body->number_dci++;
+	  dl_req_body->number_pdu++;
+          dl_req_body->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+          dl_req->sfn_sf = RA_template->Msg4_frame<<4|RA_template->Msg4_subframe;
+          dl_req->header.message_id = NFAPI_DL_CONFIG_REQUEST;
 	  
 	  RA_template->generate_Msg4=0;
 	  RA_template->wait_ack_Msg4=1;
 	  
+          uint16_t orig_Msg4_frame    = RA_template->Msg4_frame;
+          uint16_t orig_Msg4_subframe = RA_template->Msg4_subframe;
+
 	  // increment Absolute subframe by 8 for Msg4 retransmission
 	  LOG_D(MAC,"Frame %d, Subframe %d: Preparing for Msg4 retransmission currently %d.%d\n",
 		frameP,subframeP,RA_template->Msg4_frame,RA_template->Msg4_subframe);
-	  if (RA_template->Msg4_subframe > 1) RA_template->Msg4_frame++;
-	  RA_template->Msg4_frame&=1023;
-	  RA_template->Msg4_subframe = (RA_template->Msg4_subframe+8)%10;
-	  LOG_D(MAC,"Frame %d, Subframe %d: Msg4 retransmission in %d.%d\n",
+
+	  //if (RA_template->Msg4_subframe > 1) RA_template->Msg4_frame++;
+	  //RA_template->Msg4_frame&=1023;
+	  //RA_template->Msg4_subframe = (RA_template->Msg4_subframe+8)%10;
+
+          // Expect +8 for TX->UL:ACK
+          uint16_t retrans_frame = RA_template->Msg4_frame;
+          uint16_t retrans_subframe = RA_template->Msg4_subframe;
+
+          add_subframe(&retrans_frame, &retrans_subframe, 8+sf_ahead);
+
+          RA_template->Msg4_frame = retrans_frame;
+          RA_template->Msg4_subframe = retrans_subframe;
+
+          LOG_D(MAC,"Frame %d, Subframe %d: Msg4 retransmission in %d.%d\n",
 		frameP,subframeP,RA_template->Msg4_frame,RA_template->Msg4_subframe);
 	  lcid=0;
 	  
+          // DJP - FIXME TODO TDD broken
+          //
 	  // put HARQ process round to 0
-	  if (cc->tdd_Config) RA_template->harq_pid = ((frameP*10)+subframeP)%10;
-	  else RA_template->harq_pid = ((frameP*10)+subframeP)&7;
+	  if (cc->tdd_Config) RA_template->harq_pid = ((RA_template->Msg4_frame*10)+RA_template->Msg4_subframe)%10;
+	  else RA_template->harq_pid = dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process;
+	  //else RA_template->harq_pid = ((RA_template->Msg4_frame*10)+RA_template->Msg4_subframe)&7;
 	  UE_list->UE_sched_ctrl[UE_id].round[CC_idP][RA_template->harq_pid] = 0;
 	  
 	  if ((RA_template->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) {
@@ -904,8 +1053,8 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	    msg4_post_padding = RA_template->msg4_TBsize - rrc_sdu_length - msg4_header -1;
 	  }
 	  
-	  LOG_D(MAC,"[eNB %d][RAPROC] CC_idP %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n",
-		module_idP,CC_idP,frameP,subframeP,RA_template->msg4_TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding);
+	  LOG_D(MAC,"[eNB %d][RAPROC] CC_idP %d Frame %d subframeP %d Msg4 : SFN/SF:%d%d TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n",
+		module_idP,CC_idP,frameP,subframeP,orig_Msg4_frame,orig_Msg4_subframe,RA_template->msg4_TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding);
 	  DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return
 	  // CHECK THIS: &cc[CC_idP].CCCH_pdu.payload[0]
 	  offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
@@ -914,7 +1063,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 					 &lcid,                       // sdu_lcid
 					 255,                         // no drx
 					 31,                          // no timing advance
-					 RA_template->cont_res_id,    // contention res id
+					 RA_template->cont_res_id,  // contention res id
 					 msg4_padding,                // no padding
 					 msg4_post_padding);
 	  
@@ -924,7 +1073,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  
 	  // DLSCH Config
 	  fill_nfapi_dlsch_config(eNB,
-				  dl_req,
+				  dl_req_body,
 				  RA_template->msg4_TBsize,
 				  eNB->pdu_index[CC_idP],
 				  RA_template->rnti,
@@ -947,14 +1096,15 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 				  (cc->p_eNB==1 ) ? 1 : 2,     // transmission mode
 				  1,                           // num_bf_prb_per_subband
 				  1);                          // num_bf_vector
-      LOG_D(MAC,"Filled DLSCH config, pdu number %d, non-dci pdu_index %d\n",dl_req->number_pdu,eNB->pdu_index[CC_idP]);
+          LOG_D(MAC,"Filled DLSCH config, pdu number %d, non-dci pdu_index %d\n",dl_req_body->number_pdu,eNB->pdu_index[CC_idP]);
 
 	  // DL request
 	  eNB->TX_req[CC_idP].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_idP].tx_request_body,
-							 (frameP*10)+subframeP,
+							 (orig_Msg4_frame*10)+orig_Msg4_subframe,
 							 rrc_sdu_length,
 							 eNB->pdu_index[CC_idP],
 							 eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]); 
+          eNB->TX_req[CC_idP].header.message_id = NFAPI_TX_REQUEST;
 	  eNB->pdu_index[CC_idP]++;
 
 	  LOG_D(MAC,"Filling UCI ACK/NAK information, cce_idx %d\n",dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
@@ -963,7 +1113,7 @@ void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t
 	  fill_nfapi_uci_acknak(module_idP,
 				CC_idP,
 				RA_template->rnti,
-				(frameP*10)+subframeP,
+				(orig_Msg4_frame*10)+orig_Msg4_subframe,
 				dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
 
 	  
@@ -993,7 +1143,8 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
   int                             N_RB_DL;
   nfapi_dl_config_request_pdu_t   *dl_config_pdu;
   UE_list_t                       *UE_list=&eNB->UE_list;
-  nfapi_dl_config_request_body_t *dl_req;
+  nfapi_dl_config_request_t      *dl_req;
+  nfapi_dl_config_request_body_t *dl_req_body;
 
   int                             round;
   /*
@@ -1039,12 +1190,13 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
   round = UE_list->UE_sched_ctrl[UE_id].round[CC_idP][RA_template->harq_pid];
   vrb_map       = cc[CC_idP].vrb_map;
   
-  dl_req        = &eNB->DL_req[CC_idP].dl_config_request_body;
-  dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
+  dl_req        = &eNB->DL_req[CC_idP];
+  dl_req_body   = &dl_req->dl_config_request_body;
+  dl_config_pdu = &dl_req_body->dl_config_pdu_list[dl_req_body->number_pdu]; 
   N_RB_DL       = to_prb(cc[CC_idP].mib->message.dl_Bandwidth);
   
-  LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 for harq_pid %d was acknowledged (round %d)\n",
-	module_idP,CC_idP,frameP,subframeP,RA_template->harq_pid,round);
+  LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 for harq_pid %d was acknowledged (round %d) RA_template[Msg4:SFN/SF:%d/%d]\n",
+	module_idP,CC_idP,frameP,subframeP,RA_template->harq_pid,round, RA_template->Msg4_frame, RA_template->Msg4_subframe);
 
   if (round!=8) {
     
@@ -1060,6 +1212,8 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
 	  //RA_template->wait_ack_Msg4++;
 	  // we have to schedule a retransmission
 	  
+          dl_req->sfn_sf = frameP<<4 | subframeP;
+
 	  first_rb=0;
 	  vrb_map[first_rb] = 1;
 	  vrb_map[first_rb+1] = 1;
@@ -1079,13 +1233,14 @@ void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,
 			       0);                          // vrb_flag
 	  
 	  if (!CCE_allocation_infeasible(module_idP,CC_idP,1,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,RA_template->rnti)) {
-	    dl_req->number_dci++;
-	    dl_req->number_pdu++;
+	    dl_req_body->number_dci++;
+	    dl_req_body->number_pdu++;
+            dl_req_body->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
 	    
 	    LOG_D(MAC,"msg4 retransmission for rnti %x (round %d) fsf %d/%d\n", RA_template->rnti, round, frameP, subframeP);
 	    	  // DLSCH Config
 	    fill_nfapi_dlsch_config(eNB,
-				    dl_req,
+				    dl_req_body,
 				    RA_template->msg4_TBsize,
 				    -1                           /* retransmission, no pdu_index */,
 				    RA_template->rnti,
@@ -1164,8 +1319,8 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP)
 
       if (RA_template->RA_active == TRUE) {
 
-        LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)\n",
-              module_idP,frameP,subframeP,CC_id,i,RA_template->generate_rar,RA_template->generate_Msg4,RA_template->wait_ack_Msg4, RA_template->rnti);
+        LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA %d is active (generate RAR %d[SFN/SF:%d%d], generate_Msg4 %d[SFN/SF:%d%d], wait_ack_Msg4 %d, rnti %x)\n",
+              module_idP,frameP,subframeP,CC_id,i,RA_template->generate_rar,RA_template->Msg2_frame,RA_template->Msg2_subframe,RA_template->generate_Msg4,RA_template->Msg4_frame,RA_template->Msg4_subframe,RA_template->wait_ack_Msg4, RA_template->rnti);
 
         if      (RA_template->generate_rar == 1)  generate_Msg2(module_idP,CC_id,frameP,subframeP,RA_template);
 	else if (RA_template->generate_Msg4 == 1) generate_Msg4(module_idP,CC_id,frameP,subframeP,RA_template);
@@ -1228,7 +1383,9 @@ void initiate_ra_proc(module_id_t module_idP,
     if (RA_template[i].RA_active==FALSE &&
         RA_template[i].wait_ack_Msg4 == 0) {
       int loop = 0;
-      LOG_D(MAC,"Frame %d, Subframe %d: Activating RA process %d\n",frameP,subframeP,i);
+      uint16_t msg2_frame = frameP;
+      uint16_t msg2_subframe = subframeP;
+      int offset;
       RA_template[i].RA_active          = TRUE;
       RA_template[i].generate_rar       = 1;
       RA_template[i].generate_Msg4      = 0;
@@ -1240,8 +1397,20 @@ void initiate_ra_proc(module_id_t module_idP,
       RA_template[i].msg2_mpdcch_repetition_cnt = 0;		      
       RA_template[i].msg4_mpdcch_repetition_cnt = 0;		      
 #endif
-      RA_template[i].Msg2_frame         = frameP+((subframeP>5)?1:0);
-      RA_template[i].Msg2_subframe      = (subframeP+4)%10;
+
+      // DJP - this is because VNF is 2 subframes ahead of PNF and TX needs 4 subframes
+      if (nfapi_mode)
+        offset = 7;
+      else
+        offset = 5;
+
+      add_subframe(&msg2_frame, &msg2_subframe, offset);
+
+      RA_template[i].Msg2_frame         = msg2_frame;
+      RA_template[i].Msg2_subframe      = msg2_subframe;
+
+      LOG_E(MAC,"%s() Msg2[%04d%d] SFN/SF:%04d%d offset:%d\n", __FUNCTION__,RA_template[i].Msg2_frame,RA_template[i].Msg2_subframe,frameP,subframeP,offset);
+
       /* TODO: find better procedure to allocate RNTI */
       do {
         RA_template[i].rnti = taus();
@@ -1256,8 +1425,9 @@ void initiate_ra_proc(module_id_t module_idP,
       if (loop == 100) { printf("%s:%d:%s: FATAL ERROR! contact the authors\n", __FILE__, __LINE__, __FUNCTION__); abort(); }
       RA_template[i].RA_rnti        = ra_rnti;
       RA_template[i].preamble_index = preamble_index;
-      LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, RA_active %d\n",
-            module_idP,CC_id,frameP,
+
+      LOG_E(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Subframe %d: Activating RAR generation (Msg2) in Frame %d, subframe %d for process %d, rnti %x, RA_active %d\n",
+            module_idP,CC_id,frameP,subframeP,
 	    RA_template[i].Msg2_frame,
 	    RA_template[i].Msg2_subframe,
 	    i,RA_template[i].rnti,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index 3aa2ce38fe728b80b164df224af715e0b3051adf..119df4e8339367117048e78dd2d0cd7ee350a2d0 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -100,6 +100,7 @@ schedule_SIB1_BR(
   int                            n_NB = 0;
   int                            TBS;
   int                            k=0,rvidx;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
 
@@ -240,10 +241,11 @@ schedule_SIB1_BR(
     // Rel13 fields
     dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 1; // CEModeA UE
     dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 0; // SIB1-BR
-    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF; // absolute SFx
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF; // absolute SF
     
     //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
     dl_req->number_pdu++;
+    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
     
     // Program TX Request
     TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; 
@@ -252,8 +254,14 @@ schedule_SIB1_BR(
     TX_req->num_segments                                                  = 1;
     TX_req->segments[0].segment_length                                    = bcch_sdu_length;
     TX_req->segments[0].segment_data                                      = cc->BCCH_BR_pdu[0].payload;
+    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
     eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
     
+    if (frameP%100==0) LOG_E(MAC,"%s() TX_REQ: sfn_sf:%u pdus:%u pdu_length:%u pdu_index:%u segments:%u segment_length:%u\n", 
+        __FUNCTION__, eNB->TX_req[CC_id].sfn_sf, eNB->TX_req[CC_id].tx_request_body.number_of_pdus,
+        TX_req->pdu_length, TX_req->pdu_index, TX_req->num_segments, TX_req->segments[0].segment_length);
     
     
     if (opt_enabled == 1) {
@@ -314,6 +322,7 @@ schedule_SI_BR(
   int                                     i;
   int                                     rvidx;
   int                                     absSF = (frameP*10)+subframeP;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
 
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
@@ -400,10 +409,10 @@ schedule_SI_BR(
 	    vrb_map[first_rb+4] = 1;
 	    vrb_map[first_rb+5] = 1;
 
-	    if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
-					   module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx,
-					   sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13,
-					   bcch_sdu_length);	    
+	    if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %ld rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %ld : si_RepetitionPattern_r13 %ld) bcch_sdu_length %d\n",
+					   module_idP,frameP,subframeP,CC_id,si_Narrowband_r13-1,rvidx,
+					   sf_mod_period,si_WindowLength_BR_r13,si_RepetitionPattern_r13,
+					   bcch_sdu_length);
 
 
 
@@ -412,6 +421,7 @@ schedule_SI_BR(
 	    memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	    dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; 
 	    dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+	    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
 	    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = si_TBS_r13>>3;
 	    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
 	    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
@@ -443,6 +453,7 @@ schedule_SI_BR(
 	    
 	    //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
 	    dl_req->number_pdu++;
+            dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
 	    
 	    // Program TX Request
 	    TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; 
@@ -452,7 +463,14 @@ schedule_SI_BR(
 	    TX_req->segments[0].segment_length                                    = bcch_sdu_length;
 	    TX_req->segments[0].segment_data                                      = cc->BCCH_BR_pdu[i+1].payload;
 	    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-	    
+            eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+            eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+            eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+
+            if (frameP%100==0) LOG_E(MAC,"%s() TX_REQ: sfn_sf:%u pdus:%u pdu_length:%u pdu_index:%u segments:%u segment_length:%u\n", 
+                __FUNCTION__, eNB->TX_req[CC_id].sfn_sf, eNB->TX_req[CC_id].tx_request_body.number_of_pdus,
+                TX_req->pdu_length, TX_req->pdu_index, TX_req->num_segments, TX_req->segments[0].segment_length);
+
 	    if (opt_enabled == 1) {
 	      trace_pdu(1,
 			&cc->BCCH_BR_pdu[i+1].payload[0],
@@ -493,18 +511,22 @@ void schedule_mib(module_id_t   module_idP,
 
   eNB_MAC_INST                   *eNB = RC.mac[module_idP];
   COMMON_channels_t              *cc;
+  nfapi_dl_config_request_t      *dl_config_request;
   nfapi_dl_config_request_pdu_t  *dl_config_pdu;
   nfapi_tx_request_pdu_t         *TX_req;
   int mib_sdu_length;
   int CC_id;
   nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
 
-  AssertFatal(subframeP==0,"Subframe must be 0\n");
-  AssertFatal((frameP&3)==0,"Frame must be a multiple of 4\n");
+// DJP - commented out because I am going to try and send MIB every frame
+  //AssertFatal(subframeP==0,"Subframe must be 0\n");
+  //AssertFatal((frameP&3)==0,"Frame must be a multiple of 4\n");
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
 
-    dl_req          = &eNB->DL_req[CC_id].dl_config_request_body;
+    dl_config_request = &eNB->DL_req[CC_id];
+    dl_req          = &dl_config_request->dl_config_request_body;
     cc              = &eNB->common_channels[CC_id];
 
     mib_sdu_length = mac_rrc_data_req(module_idP,
@@ -516,36 +538,46 @@ void schedule_mib(module_id_t   module_idP,
 				      module_idP,
 				      0); // not used in this case
 
-    LOG_D(MAC,"Frame %d, subframe %d: BCH PDU length %d\n",
-	  frameP,subframeP,mib_sdu_length);
+    //LOG_D(MAC,"Frame %d, subframe %d: BCH PDU length %d\n", frameP,subframeP,mib_sdu_length);
 
     if (mib_sdu_length > 0) {
 
-      LOG_D(MAC,"Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n",
-	    frameP,subframeP,dl_req->number_pdu,mib_sdu_length);
+      //LOG_D(MAC,"Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", frameP,subframeP,dl_req->number_pdu,mib_sdu_length);
 
-      if ((frameP&1023) < 40) LOG_D(MAC,"[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",module_idP,frameP,CC_id,mib_sdu_length,(int)cc->mib->message.schedulingInfoSIB1_BR_r13);
+      if (0 && (frameP&1023) < 40) LOG_D(MAC,"[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %ld)\n",module_idP,frameP,CC_id,mib_sdu_length,cc->mib->message.schedulingInfoSIB1_BR_r13);
 
       dl_config_pdu                                                         = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
       memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
-      dl_config_pdu->pdu_type                                               = NFAPI_DL_CONFIG_BCH_PDU_TYPE,
+      dl_config_pdu->pdu_type                                               = NFAPI_DL_CONFIG_BCH_PDU_TYPE;
       dl_config_pdu->pdu_size                                               = 2+sizeof(nfapi_dl_config_bch_pdu);
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag                            = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
       dl_config_pdu->bch_pdu.bch_pdu_rel8.length                            = mib_sdu_length;
       dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index                         = eNB->pdu_index[CC_id];
       dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power                = 6000;
+      dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
       dl_req->number_pdu++;
 
-      LOG_D(MAC,"eNB->DL_req[0].number_pdu %d (%p)\n",
-	    dl_req->number_pdu,&dl_req->number_pdu);
+      dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+      dl_config_request->sfn_sf = sfn_sf;
+
+      //LOG_D(MAC,"eNB->DL_req[0].number_pdu %d (%p) sfn_sf:%d\n", dl_req->number_pdu,&dl_req->number_pdu, NFAPI_SFNSF2DEC(dl_config_request->sfn_sf));
       // DL request
 
       TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; 
       TX_req->pdu_length                                                    = 3;
       TX_req->pdu_index                                                     = eNB->pdu_index[CC_id]++;
       TX_req->num_segments                                                  = 1;
-      TX_req->segments[0].segment_length                                    = 0;
+      TX_req->segments[0].segment_length                                    = mib_sdu_length;
       TX_req->segments[0].segment_data                                      = cc[CC_id].MIB_pdu.payload;
       eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+      eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+      eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+      eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+
+      if (0 && frameP%100==0)
+        LOG_D(MAC,"%s() TX_REQ: sfn_sf:%u pdus:%u pdu_length:%u pdu_index:%u segments:%u segment_length:%u\n", 
+            __FUNCTION__, NFAPI_SFNSF2DEC(eNB->TX_req[CC_id].sfn_sf), eNB->TX_req[CC_id].tx_request_body.number_of_pdus,
+            TX_req->pdu_length, TX_req->pdu_index, TX_req->num_segments, TX_req->segments[0].segment_length);
     }
   }
 }
@@ -569,9 +601,11 @@ schedule_SI(
   uint8_t                        *vrb_map;
   int                            first_rb = -1;
   int                            N_RB_DL;
+  nfapi_dl_config_request_t      *dl_config_request;
   nfapi_dl_config_request_pdu_t  *dl_config_pdu;
   nfapi_tx_request_pdu_t         *TX_req;
   nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
 
   start_meas(&eNB->schedule_si);
   
@@ -583,9 +617,9 @@ schedule_SI(
       cc              = &eNB->common_channels[CC_id];
       vrb_map         = (void*)&cc->vrb_map;
       N_RB_DL         = to_prb(cc->mib->message.dl_Bandwidth); 
+      dl_config_request = &eNB->DL_req[CC_id];
       dl_req          = &eNB->DL_req[CC_id].dl_config_request_body;
       
-      
       bcch_sdu_length = mac_rrc_data_req(module_idP,
 					 CC_id,
 					 frameP,
@@ -596,7 +630,7 @@ schedule_SI(
 					 0); // not used in this case
       
       if (bcch_sdu_length > 0) {
-	LOG_D(MAC,"[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,CC_id,bcch_sdu_length);
+	//LOG_D(MAC,"[eNB %d] Frame %d subframe %d : BCCH->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length);
 	
 	// Allocate 4 PRBs in a random location
 	/*
@@ -654,10 +688,22 @@ schedule_SI(
 	}
 	
 	
+        //dl_req->number_pdcch_ofdm_symbols = &RC.mac[module_idP]->DL_req[CC_id].dl_config_request_body;
+
+
+
+
+
+        //LOG_D(MAC,"%s() Before ADDING SI dl_req->number_pdu:%d dl_req->number_dci:%d eNB->TX_req[CC_id].tx_request_body.number_of_pdus:%d\n", __FUNCTION__, dl_req->number_pdu, dl_req->number_dci, eNB->TX_req[CC_id].tx_request_body.number_of_pdus);
+
+
 	dl_config_pdu                                                         = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
 	memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	dl_config_pdu->pdu_type                                               = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; 
-	dl_config_pdu->pdu_size                                               = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+	dl_config_pdu->pdu_size                                               = (uint8_t)(sizeof(nfapi_dl_config_dci_dl_pdu));
+        dl_req->number_dci++;
+        //LOG_D(MAC, "%s() number_dci:%u\n", __FUNCTION__, dl_req->number_dci);
+	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                      = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                  = NFAPI_DL_DCI_FORMAT_1A;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level           = 4;
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                        = 0xFFFF;
@@ -671,24 +717,27 @@ schedule_SI(
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1        = 0;
 	
 	dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding       = getRIV(N_RB_DL,first_rb,4);      
-
-	// Rel10 fields
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
-	// Rel13 fields
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0; // regular UE
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2; // not BR
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF; // absolute SF	
+        dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+        dl_config_request->sfn_sf = sfn_sf;
+	
+        //LOG_D(MAC, "%s() mcs:%d bcch_sdu_length:%d N_RB_DL:%d first_rb:%d resource_block_coding:%d\n", __FUNCTION__, mcs, bcch_sdu_length, N_RB_DL, first_rb, dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding);
 
 	if (!CCE_allocation_infeasible(module_idP,CC_id,0,subframeP,
 				       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,SI_RNTI)) {
-	  LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for S_RNTI\n",
-		frameP,subframeP);
+	  //LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP,subframeP);
 	  dl_req->number_dci++;
 	  dl_req->number_pdu++;
+	  dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+	  //LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP,subframeP);
+
 	  dl_config_pdu                                                                  = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; 
 	  memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	  dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; 
-	  dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+	  dl_config_pdu->pdu_size                                                        = (uint8_t)(sizeof(nfapi_dl_config_dlsch_pdu));
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length; // DJP - is the BCCH size the thing to put here? to match TX_REQ???
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;   // format 1A/1B/1D
@@ -706,13 +755,24 @@ schedule_SI(
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
-	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = 1; // DJP - wireshark whinges - get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored
 	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB==1 ) ? 1 : 2;
-	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
-	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 0; // DJP 
+	  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 0; // DJP 
 	  //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-	  dl_req->number_pdu++;
+          dl_req->number_pdu++;
+          dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+          dl_config_request->sfn_sf = sfn_sf;
 	  
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel9.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG;
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel9.nscid = 0;
+
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel11.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG;
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel12.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG;
+	  //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+
 	  // Program TX Request
 	  TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; 
 	  TX_req->pdu_length                                                    = bcch_sdu_length;
@@ -721,7 +781,13 @@ schedule_SI(
 	  TX_req->segments[0].segment_length                                    = bcch_sdu_length;
 	  TX_req->segments[0].segment_data                                      = cc->BCCH_pdu.payload;
 	  eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+          eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+          eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
 	  
+	  if (0 && frameP%100==0) LOG_D(MAC,"%s() TX_REQ: sfn_sf:%u pdus:%u pdu_length:%u pdu_index:%u segments:%u segment_length:%u\n", 
+              __FUNCTION__, NFAPI_SFNSF2DEC(eNB->TX_req[CC_id].sfn_sf), eNB->TX_req[CC_id].tx_request_body.number_of_pdus,
+              TX_req->pdu_length, TX_req->pdu_index, TX_req->num_segments, TX_req->segments[0].segment_length);
 	}
 	else {
 	  LOG_E(MAC,"[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",module_idP, CC_id,frameP,subframeP);
@@ -748,7 +814,7 @@ schedule_SI(
 		bcch_sdu_length,
 		mcs);
 	} else {
-	  LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
+	  if (0) LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
 		frameP,
 		CC_id,
 		bcch_sdu_length,
@@ -773,6 +839,4 @@ schedule_SI(
 #endif
 
   stop_meas(&eNB->schedule_si);
-  return;
 }
- 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 80c35adbcec04d06e805c2a56f9f569b5677a0c2..82e102868f1566858ad50a7218796e479e57cf2b 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -75,6 +75,7 @@ add_ue_dlsch_info(
 )
 //------------------------------------------------------------------------------
 {
+  //LOG_D(MAC, "%s(module_idP:%d, CC_id:%d, UE_id:%d, subframeP:%d, status:%d) serving_num:%d rnti:%x\n", __FUNCTION__, module_idP, CC_id, UE_id, subframeP, status, eNB_dlsch_info[module_idP][CC_id][UE_id].serving_num, UE_RNTI(module_idP,UE_id));
 
   eNB_dlsch_info[module_idP][CC_id][UE_id].rnti             = UE_RNTI(module_idP,UE_id);
   //  eNB_dlsch_info[module_idP][CC_id][ue_mod_idP].weight           = weight;
@@ -538,7 +539,7 @@ schedule_ue_spec(
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_OUT);
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-    LOG_D(MAC, "doing schedule_ue_spec for CC_id %d\n",CC_id);
+    //LOG_D(MAC, "doing schedule_ue_spec for CC_id %d\n",CC_id);
 
     dl_req        = &eNB->DL_req[CC_id].dl_config_request_body;
 
@@ -551,6 +552,7 @@ schedule_ue_spec(
       eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
       ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
 
+      //LOG_D(MAC,"%s() rnti:%x, eNB_UE_stats:%p, ue_sched_ctl:%p tmode:%d\n", __FUNCTION__, rnti, eNB_UE_stats, ue_sched_ctl, get_tmode(module_idP,CC_id,UE_id));
 
       if (rnti==NOT_A_RNTI) {
         LOG_D(MAC,"Cannot find rnti for UE_id %d (num_UEs %d)\n",UE_id,UE_list->num_UEs);
@@ -585,8 +587,7 @@ schedule_ue_spec(
       if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) ||  // no RBs allocated 
 	  CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,aggregation,rnti)
 	  ) {
-        LOG_D(MAC,"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n",
-              module_idP, frameP, UE_id, CC_id);
+        //LOG_D(MAC,"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n", module_idP, frameP, UE_id, CC_id);
         continue_flag=1; //to next user (there might be rbs availiable for other UEs in TM5
       }
 
@@ -601,6 +602,7 @@ schedule_ue_spec(
       }
 
       if (continue_flag == 1 ) {
+        //LOG_D(MAC,"[eNB %d] Frame %d : UE %d on CC_id %d: continue flag - add_ue_dlsch_info\n", module_idP, frameP, UE_id, CC_id);
         add_ue_dlsch_info(module_idP,
                           CC_id,
                           UE_id,
@@ -646,8 +648,7 @@ schedule_ue_spec(
       DevCheck(((eNB_UE_stats->dl_cqi < MIN_CQI_VALUE) || (eNB_UE_stats->dl_cqi > MAX_CQI_VALUE)),
       eNB_UE_stats->dl_cqi, MIN_CQI_VALUE, MAX_CQI_VALUE);
       */
-      eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]];
-      eNB_UE_stats->dlsch_mcs1 = eNB_UE_stats->dlsch_mcs1;//cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs);
+      eNB_UE_stats->dlsch_mcs1 = 10;//cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]];
 
 
       // store stats
@@ -725,6 +726,7 @@ schedule_ue_spec(
 	    memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	    dl_config_pdu->pdu_type                                               = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; 
 	    dl_config_pdu->pdu_size                                               = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                      = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
 	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                  = NFAPI_DL_DCI_FORMAT_1;
 	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level           = get_aggregation(get_bw_index(module_idP,CC_id),ue_sched_ctl->dl_cqi[CC_id],format1);
 	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                        = rnti;
@@ -754,6 +756,10 @@ schedule_ue_spec(
 					   rnti)) {
 	      dl_req->number_dci++;
 	      dl_req->number_pdu++;
+	      dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+              eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP;
+              eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST;
 
 	      fill_nfapi_dlsch_config(eNB,dl_req,
 				      TBS,
@@ -781,6 +787,7 @@ schedule_ue_spec(
 				      );
 
 	      LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH %d, retransmission round %d\n",eNB->pdu_index[CC_id],round);
+             
 
 	      program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
 	      // No TX request for retransmission (check if null request for FAPI)
@@ -944,7 +951,7 @@ schedule_ue_spec(
 	  
 	  header_len_dtch+=3; 
 	  header_len_dtch_last=3;
-	  LOG_D(MAC,"[eNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (tbs %d, len %d)\n",
+	  if (0)LOG_D(MAC,"[eNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (tbs %d, len %d)\n",
 		module_idP,frameP,lcid,TBS,
 		TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch);
 	  
@@ -1075,7 +1082,7 @@ schedule_ue_spec(
             TBS = get_TBS_DL(mcs,nb_rb);
           }
 
-          LOG_D(MAC,"dlsch_mcs before and after the rate matching = (%d, %d)\n",eNB_UE_stats->dlsch_mcs1, mcs);
+          //LOG_D(MAC,"dlsch_mcs before and after the rate matching = (%d, %d)\n",eNB_UE_stats->dlsch_mcs1, mcs);
 
 #ifdef DEBUG_eNB_SCHEDULER
           LOG_D(MAC,"[eNB %d] CC_id %d Generated DLSCH header (mcs %d, TBS %d, nb_rb %d)\n",
@@ -1206,7 +1213,7 @@ schedule_ue_spec(
 		tpc = 1; //0
 	      }
 	      	      
-	      LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
+	      if(0)LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
 		    module_idP,frameP, subframeP,harq_pid,tpc,
 		    tpc_accumulated,normalized_rx_power,target_rx_power);
 
@@ -1222,6 +1229,7 @@ schedule_ue_spec(
 	  memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
 	  dl_config_pdu->pdu_type                                               = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; 
 	  dl_config_pdu->pdu_size                                               = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+	  dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                      = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
 	  dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                  = NFAPI_DL_DCI_FORMAT_1;
 	  dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level           = get_aggregation(get_bw_index(module_idP,CC_id),ue_sched_ctl->dl_cqi[CC_id],format1);
 	  dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                        = rnti;
@@ -1243,18 +1251,24 @@ schedule_ue_spec(
 		  (UE_list->UE_template[CC_id][UE_id].DAI-1),
 		  mcs);
 	  } else {
-	    LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n",
-		  module_idP,CC_id,harq_pid,mcs);
+  struct timespec t;
+  clock_gettime(CLOCK_MONOTONIC, &t);
+	    LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d t:%ld.%09ld\n",
+		  module_idP,CC_id,harq_pid,mcs,t.tv_sec,t.tv_nsec);
 	    
 	  }
-	  LOG_D(MAC,"Checking feasibility pdu %d (new sdu)\n",dl_req->number_pdu);
+	  //LOG_D(MAC,"Checking feasibility pdu %d (new sdu)\n",dl_req->number_pdu);
 	  if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,rnti)) {
 
 
 	    ue_sched_ctl->round[CC_id][harq_pid] = 0;
 	    dl_req->number_dci++;
 	    dl_req->number_pdu++;
+            dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
 	    
+            eNB->DL_req[CC_id].sfn_sf = frameP<<4 | subframeP;
+            eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST;
+
 	    // Toggle NDI for next time
 	    LOG_D(MAC,"CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n",
 		  CC_id, frameP,subframeP,UE_id,
@@ -1296,7 +1310,7 @@ schedule_ue_spec(
 							  eNB->pdu_index[CC_id],
 							  eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0]);
 	    
-	    LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n",eNB->pdu_index[CC_id]);
+            LOG_D(MAC,"SFN/SF:%d Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n",NFAPI_SFNSF2DEC(eNB->TX_req[CC_id].sfn_sf), eNB->pdu_index[CC_id]);
 
 	    eNB->pdu_index[CC_id]++;
 	    program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx);
@@ -1315,10 +1329,11 @@ schedule_ue_spec(
         set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP);
       }
 
-    } // UE_id loop
-  }  // CC_id loop
+    } // round != 8
+  }  // UE_id loop
 
 
+    //LOG_D(MAC,"%s() AFTER dl_config dci:%d pdu:%d TX_REQ[pdus:%d]\n", __FUNCTION__, dl_req->number_dci, dl_req->number_pdu, eNB->TX_req[0].tx_request_body.number_of_pdus);
      
   fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_flag);
 
@@ -1360,7 +1375,7 @@ fill_DLSCH_dci(
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_IN);
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-    LOG_D(MAC,"Doing fill DCI for CC_id %d\n",CC_id);
+    //LOG_D(MAC,"Doing fill DCI for CC_id %d\n",CC_id);
 
     if (mbsfn_flagP[CC_id]>0)
       continue;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index 67fba12ce720a70e6f99f2c03789f58b5f8be819..3b05850a1d58d851c609d9b22985208265360ff3 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 3097a0c094ccd680136fc35a2d2b464ed045b4b2..7ecb0778ef0069b5778caad4e1e039d44d4a8fef 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -311,7 +311,7 @@ uint8_t subframe2harqpid(COMMON_channels_t *cc,frame_t frame,sub_frame_t subfram
   AssertFatal(cc!=NULL,"cc is null\n");
 
   if (cc->tdd_Config == NULL) { // FDD
-    ret = (((frame<<1)+subframe)&7);
+    ret = (((frame*10)+subframe)&7);
   } else {
     switch (cc->tdd_Config->subframeAssignment) {
     case 1:
@@ -895,6 +895,7 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t   *dl_config_pdu,
   memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t));
   dl_config_pdu->pdu_type                                                          = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
   dl_config_pdu->pdu_size                                                          = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
+  dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
   dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                             = NFAPI_DL_DCI_FORMAT_1A;
   dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level                      = aggregation_level;
   dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                                   = rnti;
@@ -970,6 +971,7 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
         // Convert it to an NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE
         ulsch_harq_information = &ul_config_pdu->ulsch_harq_pdu.harq_information;
         ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE;
+        ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag=NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG;
         ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial=0; // last symbol not punctured
         ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks=
           ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet
@@ -997,6 +999,7 @@ void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t
        * Those two types are not compatible. 'initial_transmission_parameters' is not at the
        * place in both.
        */
+      ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.tl.tag=NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG;
       ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial=0; // last symbol not punctured
       ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks=
         ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet
@@ -1105,6 +1108,7 @@ void fill_nfapi_ulsch_harq_information(module_id_t module_idP,
   if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5) puschConfigDedicated_v1250 =  UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5->pusch_ConfigDedicated_v1250;
   */
 #endif
+  harq_information->harq_information_rel10.tl.tag = NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL10_TAG;
   harq_information->harq_information_rel10.delta_offset_harq = puschConfigDedicated->betaOffset_ACK_Index;
   AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL,"pucch_ConfigDedicated is null!\n");
   if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode!=NULL)&&
@@ -1157,8 +1161,9 @@ void fill_nfapi_harq_information(module_id_t module_idP,
 
   AssertFatal(UE_id>=0,"UE_id cannot be found, impossible\n");
   AssertFatal(UE_list!=NULL,"UE_list is null\n");
-  AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null\n",rntiP);
+  AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null CC_idP:%d UE_id:%d UE_list:rnti:%04x\n",rntiP,CC_idP,UE_id,UE_list->UE_template[CC_idP][UE_id].rnti);
 
+  harq_information->harq_information_rel11.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG;
   harq_information->harq_information_rel11.num_ant_ports = 1;
 
   switch(get_tmode(module_idP,CC_idP,UE_id)) {
@@ -1179,9 +1184,11 @@ void fill_nfapi_harq_information(module_id_t module_idP,
         harq_information->harq_information_rel10_tdd.harq_size     = 1;  // 1-bit ACK/NAK
         harq_information->harq_information_rel10_tdd.ack_nack_mode = 0;  // bundling
       }
-      harq_information->harq_information_rel10_tdd.n_pucch_1_0   = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP;
+      harq_information->harq_information_rel10_tdd.tl.tag                    = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG;
+      harq_information->harq_information_rel10_tdd.n_pucch_1_0               = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP;
       harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1;
     } else {
+      harq_information->harq_information_rel9_fdd.tl.tag                    = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG;
       harq_information->harq_information_rel9_fdd.number_of_pucch_resources = 1;
       harq_information->harq_information_rel9_fdd.harq_size                 = 1;  // 1-bit ACK/NAK
       harq_information->harq_information_rel9_fdd.n_pucch_1_0               = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP;
@@ -1189,6 +1196,7 @@ void fill_nfapi_harq_information(module_id_t module_idP,
     break;
   default: // for any other TM we need 2 bits harq
     if (cc->tdd_Config!=NULL) {
+      AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null\n",rntiP);
       AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL,
                   "pucch_ConfigDedicated is null for TDD!\n");
       if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode!=NULL)&&
@@ -1198,11 +1206,12 @@ void fill_nfapi_harq_information(module_id_t module_idP,
       else {
         harq_information->harq_information_rel10_tdd.ack_nack_mode = 0;  // bundling
       }
-      harq_information->harq_information_rel10_tdd.harq_size       = 2;
+      harq_information->harq_information_rel10_tdd.tl.tag          = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG;
       harq_information->harq_information_rel10_tdd.n_pucch_1_0   = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP;
       harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1;
     }
     else {
+      harq_information->harq_information_rel9_fdd.tl.tag           = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG;
       harq_information->harq_information_rel9_fdd.number_of_pucch_resources = 1;
       harq_information->harq_information_rel9_fdd.ack_nack_mode    = 0;  // 1a/b
       harq_information->harq_information_rel9_fdd.harq_size        = 2;
@@ -1222,12 +1231,14 @@ uint16_t fill_nfapi_uci_acknak(module_id_t module_idP,
   COMMON_channels_t              *cc           = &eNB->common_channels[CC_idP];
 
   int ackNAK_absSF                             = get_pucch1_absSF(cc,absSFP);
-  nfapi_ul_config_request_body_t *ul_req       = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10].ul_config_request_body;
-  nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus];
+  nfapi_ul_config_request_t      *ul_req       = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10];
+  nfapi_ul_config_request_body_t *ul_req_body  = &ul_req->ul_config_request_body;
+  nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus];
 
   memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
   ul_config_pdu->pdu_type                                                              = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE;
   ul_config_pdu->pdu_size                                                              = (uint8_t)(2+sizeof(nfapi_ul_config_uci_harq_pdu));
+  ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.tl.tag                = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
   ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle                = 0; // don't know how to use this
   ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti                  = rntiP;
 
@@ -1239,7 +1250,11 @@ uint16_t fill_nfapi_uci_acknak(module_id_t module_idP,
   LOG_D(MAC,"Filled in UCI HARQ request for rnti %x SF %d.%d acknakSF %d.%d, cce_idxP %d-> n1_pucch %d\n",rntiP,
         absSFP/10,absSFP%10,ackNAK_absSF/10,ackNAK_absSF%10,cce_idxP,ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel9_fdd.n_pucch_1_0);
 
-  ul_req->number_of_pdus++;
+  ul_req_body->number_of_pdus++;
+  ul_req_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+  ul_req->header.message_id = NFAPI_UL_CONFIG_REQUEST;
+  //ul_req->sfn_sf = sfnsf_add_subframe(ackNAK_absSF/10, ackNAK_absSF%10, 4); // Still need to add 4 to ACK/NAK SFN/SF because of NFAPI running off TX frame 
+  ul_req->sfn_sf = (ackNAK_absSF/10) << 4 | ackNAK_absSF%10;
 
   return(((ackNAK_absSF/10)<<4) + (ackNAK_absSF%10));
 }
@@ -1275,6 +1290,7 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
 
   dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
   dl_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu));
+  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = length;
   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = pdu_index;
   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = rnti;
@@ -1298,19 +1314,25 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB,
   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = num_bf_prb_per_subband;
   dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = num_bf_vector;
   dl_req->number_pdu++;
+  dl_req->tl.tag=NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+
+  //LOG_D(MAC,"Filled DL_CONFIG_PDU - DLSCH - dl_req->number_pdu:%d pdu_index:%d\n", dl_req->number_pdu, pdu_index);
 }
 
 uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t pdu_index, uint8_t *pdu)
 {
   nfapi_tx_request_pdu_t *TX_req        = &tx_req_body->tx_pdu_list[tx_req_body->number_of_pdus];
-  LOG_D(MAC,"Filling TX_req %d for pdu length %d\n",tx_req_body->number_of_pdus,pdu_length);
+
   TX_req->pdu_length                    = pdu_length;
   TX_req->pdu_index                     = pdu_index;
   TX_req->num_segments                  = 1;
   TX_req->segments[0].segment_length    = pdu_length;
   TX_req->segments[0].segment_data      = pdu;
+  tx_req_body->tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
   tx_req_body->number_of_pdus++;
 
+  //LOG_D(MAC,"Filling TX_req SFN/SF:%d/%d PDUs:%d for pdu length %d pdu_index:%d\n",absSF/10,absSF%10,tx_req_body->number_of_pdus,pdu_length,pdu_index);
+
   return(((absSF/10)<<4) + (absSF%10));
 }
 
@@ -1338,30 +1360,32 @@ void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t  *ul_con
 {
   memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t));
 
-  ul_config_pdu->pdu_type                                                        = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE;
-  ul_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu));
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle                                 = handle;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti                                   = rnti;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start                   = resource_block_start;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks              = number_of_resource_blocks;
-  if      (mcs<11) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 2;
-  else if (mcs<21) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 4;
-  else             ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 6;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms                = cyclic_shift_2_for_drms;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag         = frequency_hopping_enabled_flag;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits                 = frequency_hopping_bits;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication                    = new_data_indication;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version                     = redundancy_version;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number                    = harq_process_number;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode                             = ul_tx_mode;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb                          = current_tx_nb;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs                                  = n_srs;
-  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size                                   = size;
-
   if (cqi_req == 1) {
+
+    ul_config_pdu->pdu_type                                                                         = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE;
+    ul_config_pdu->pdu_size                                                                         = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_cqi_ri_pdu));
+
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.tl.tag                                 = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.handle                                 = handle;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti                                   = rnti;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.resource_block_start                   = resource_block_start;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks              = number_of_resource_blocks;
+    if      (mcs<11) ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 2;
+    else if (mcs<21) ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 4;
+    else             ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 6;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms                = cyclic_shift_2_for_drms;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag         = frequency_hopping_enabled_flag;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits                 = frequency_hopping_bits;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.new_data_indication                    = new_data_indication;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.redundancy_version                     = redundancy_version;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.harq_process_number                    = harq_process_number;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode                             = ul_tx_mode;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.current_tx_nb                          = current_tx_nb;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.n_srs                                  = n_srs;
+    ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.size                                   = size;
+
     // Add CQI portion
-    ul_config_pdu->pdu_type                                                           = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE;
-    ul_config_pdu->pdu_size                                                           = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_cqi_ri_pdu));
+    ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.tl.tag                  = NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL9_TAG;
     ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.report_type             = 1;
     ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.number_of_cc = 1;
     LOG_D(MAC,"report_type %d\n",ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.report_type);
@@ -1388,18 +1412,44 @@ void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t  *ul_con
 
     ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.delta_offset_cqi        = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_CQI_Index;
     ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.delta_offset_ri         = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_RI_Index;
+
+    LOG_D(MAC,"%s() ri_size:%d\n",__FUNCTION__, ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size);
+  }
+  else
+  {
+    ul_config_pdu->pdu_type                                                        = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE;
+    ul_config_pdu->pdu_size                                                        = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu));
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.tl.tag                                 = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle                                 = handle;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti                                   = rnti;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start                   = resource_block_start;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks              = number_of_resource_blocks;
+    if      (mcs<11) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 2;
+    else if (mcs<21) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 4;
+    else             ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type       = 6;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms                = cyclic_shift_2_for_drms;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag         = frequency_hopping_enabled_flag;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits                 = frequency_hopping_bits;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication                    = new_data_indication;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version                     = redundancy_version;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number                    = harq_process_number;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode                             = ul_tx_mode;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb                          = current_tx_nb;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs                                  = n_srs;
+    ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size                                   = size;
   }
 }
 
 #ifdef Rel14
 void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t  *ul_config_pdu,
-                                          uint8_t ue_type,
-                                          uint16_t total_number_of_repetitions,
-                                          uint16_t repetition_number,
-                                          uint16_t initial_transmission_sf_io)
+    uint8_t ue_type,
+    uint16_t total_number_of_repetitions,
+    uint16_t repetition_number,
+    uint16_t initial_transmission_sf_io)
 {
   // Re13 fields
 
+  ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.tl.tag                                = NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG;
   ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type                               = ue_type;
   ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions           = total_number_of_repetitions;
   ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number                     = repetition_number;
@@ -1547,6 +1597,10 @@ int find_UE_id(module_id_t mod_idP, rnti_t rntiP)
   UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list;
 
   for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) {
+
+    //LOG_D(PHY,"%s(mod_idP:%d, rntiP:%04x) UE_id:%d active:%d UE_PCCID(mod_idP,UE_id):%d UE_list->UE_template[UE_PCCID(mod_idP,UE_id)][UE_id].rnti:%04x\n", 
+        //__FUNCTION__, mod_idP, rntiP, UE_id, UE_list->active[UE_id], UE_PCCID(mod_idP,UE_id), UE_list->UE_template[UE_PCCID(mod_idP,UE_id)][UE_id].rnti);
+
     if (UE_list->active[UE_id] != TRUE) continue;
     if (UE_list->UE_template[UE_PCCID(mod_idP,UE_id)][UE_id].rnti==rntiP) {
       return(UE_id);
@@ -1566,10 +1620,7 @@ int find_RA_id(module_id_t mod_idP, int CC_idP, rnti_t rntiP)
   RA_TEMPLATE *RA_template = (RA_TEMPLATE *)&RC.mac[mod_idP]->common_channels[CC_idP].RA_template[0];
 
   for (RA_id = 0; RA_id < NB_RA_PROC_MAX; RA_id++) {
-    LOG_D(MAC,"Checking RA_id %d for %x : RA_active %d, wait_ack_Msg4 %d\n",
-          RA_id,rntiP,
-          RA_template[RA_id].RA_active,
-          RA_template[RA_id].wait_ack_Msg4);
+    //LOG_D(MAC,"Checking RA_id %d for %x : RA_active %d, wait_ack_Msg4 %d\n", RA_id,rntiP, RA_template[RA_id].RA_active, RA_template[RA_id].wait_ack_Msg4);
 
     if (RA_template[RA_id].RA_active==TRUE &&
         RA_template[RA_id].wait_ack_Msg4 == 0 &&
@@ -1669,8 +1720,7 @@ unsigned char get_aggregation (uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt)
     LOG_W(MAC,"unsupported DCI format %d\n",dci_fmt);
   }
 
-  LOG_D(MAC,"Aggregation level %d (cqi %d, bw_index %d, format %d)\n",
-        1<<aggregation, cqi,bw_index,dci_fmt);
+  //LOG_D(MAC,"Aggregation level %d (cqi %d, bw_index %d, format %d)\n", 1<<aggregation, cqi,bw_index,dci_fmt);
 
   return 1<<aggregation;
 }
@@ -1707,6 +1757,7 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP
   for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
     if (UE_list->active[i] == TRUE) continue;
     UE_id = i;
+    memset(&UE_list->UE_template[cc_idP][UE_id], 0, sizeof(UE_TEMPLATE));
     UE_list->UE_template[cc_idP][UE_id].rnti       = rntiP;
     UE_list->UE_template[cc_idP][UE_id].configured = FALSE;
     UE_list->numactiveCCs[UE_id]                   = 1;
@@ -2076,9 +2127,10 @@ uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id)
   if (UE_sched_ctl->ul_out_of_sync>0)
     return(0);
 
-  LOG_D(MAC,"[eNB %d][PUSCH] Checking UL requirements UE %d/%x\n",module_idP,UE_id,UE_RNTI(module_idP,UE_id));
+  //LOG_D(MAC,"[eNB %d][PUSCH] Checking UL requirements UE %d/%x bsr_info:%d:%d:%d:%d ul_SR:%d ul_inactivity_timer:%d ul_scheduled:%d rrc_status:%d\n",module_idP,UE_id,UE_RNTI(module_idP,UE_id),UE_template->bsr_info[LCGID0], UE_template->bsr_info[LCGID1],UE_template->bsr_info[LCGID2],UE_template->bsr_info[LCGID3],UE_template->ul_SR, UE_sched_ctl->ul_inactivity_timer, UE_sched_ctl->ul_scheduled,mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)));
 
-  if ((UE_template->bsr_info[LCGID0]>0) ||
+  if (1|| // DJP - no check in
+      (UE_template->bsr_info[LCGID0]>0) ||
       (UE_template->bsr_info[LCGID1]>0) ||
       (UE_template->bsr_info[LCGID2]>0) ||
       (UE_template->bsr_info[LCGID3]>0) ||
@@ -2677,7 +2729,7 @@ int allocate_CCEs(int module_idP,
   int i,j,idci;
   int nCCE=0;
 
-  LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n",subframeP,test_onlyP,DL_req->number_pdu,DL_req->number_dci,HI_DCI0_req->number_of_dci);
+  //LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n",subframeP,test_onlyP,DL_req->number_pdu,DL_req->number_dci,HI_DCI0_req->number_of_dci);
   DL_req->number_pdcch_ofdm_symbols=1;
 
 try_again:
@@ -2689,7 +2741,7 @@ try_again:
     if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)&&
         (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type==2)
         ) {
-      LOG_D(MAC,"Trying to allocate COMMON DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+      if (0) LOG_D(MAC,"Trying to allocate COMMON DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
             idci,DL_req->number_dci+HI_DCI0_req->number_of_dci,
             DL_req->number_dci,HI_DCI0_req->number_of_dci,
             dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti,
@@ -2699,7 +2751,7 @@ try_again:
       if (nCCE + (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level) > nCCE_max) {
         if (DL_req->number_pdcch_ofdm_symbols == 3)
           goto failed;
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
         goto try_again;
@@ -2729,7 +2781,7 @@ try_again:
           //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
           goto failed;
         }
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
 
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
@@ -2738,10 +2790,10 @@ try_again:
 
       // the allocation is feasible, rnti rule passes
       nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level;
-      LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
+      //LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
       if (test_onlyP == 0) {
         dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx=fCCE;
-        LOG_D(MAC,"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n",subframeP,test_onlyP,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,fCCE);
+        //LOG_D(MAC,"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n",subframeP,test_onlyP,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,fCCE);
       }
       idci++;
     }
@@ -2753,7 +2805,7 @@ try_again:
     // allocate UL DCIs
     if (hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) {
 
-      LOG_D(MAC,"Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+      if (0)LOG_D(MAC,"Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
             idci,DL_req->number_dci+HI_DCI0_req->number_of_dci,
             DL_req->number_dci,HI_DCI0_req->number_of_dci,
             hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti,hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level,
@@ -2762,7 +2814,7 @@ try_again:
       if (nCCE + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level) > nCCE_max) {
         if (DL_req->number_pdcch_ofdm_symbols == 3)
           goto failed;
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
 
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
@@ -2793,7 +2845,7 @@ try_again:
           //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
           goto failed;
         }
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
 
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
@@ -2802,10 +2854,10 @@ try_again:
 
       // the allocation is feasible, rnti rule passes
       nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level;
-      LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
+      //LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
       if (test_onlyP == 0) {
         hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index=fCCE;
-        LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
+        //LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
       }
       idci++;
     }
@@ -2815,7 +2867,7 @@ try_again:
     // allocate DL UE specific DCIs
     if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)&&
         (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type==1)) {
-      LOG_D(MAC,"Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
+      if (0)LOG_D(MAC,"Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n",
             idci,DL_req->number_dci+HI_DCI0_req->number_of_dci,
             DL_req->number_dci,HI_DCI0_req->number_of_dci,
             dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,
@@ -2824,7 +2876,7 @@ try_again:
       if (nCCE + (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level) > nCCE_max) {
         if (DL_req->number_pdcch_ofdm_symbols == 3)
           goto failed;
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
 
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
@@ -2855,7 +2907,7 @@ try_again:
           //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<<dci_alloc->L);
           goto failed;
         }
-        LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
+        //LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols);
 
         DL_req->number_pdcch_ofdm_symbols++;
         nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP);
@@ -2864,10 +2916,10 @@ try_again:
 
       // the allocation is feasible, rnti rule passes
       nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level;
-      LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
+      //LOG_D(MAC,"Allocating at nCCE %d\n",fCCE);
       if (test_onlyP == 0) {
         dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx=fCCE;
-        LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
+        //LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP);
       }
       idci++;
     }
@@ -2923,7 +2975,7 @@ nfapi_ul_config_request_pdu_t* has_ul_grant(module_id_t module_idP,int CC_idP,ui
 
   ul_req        = &RC.mac[module_idP]->UL_req_tmp[CC_idP][absSFP%10].ul_config_request_body;
   ul_config_pdu = &ul_req->ul_config_pdu_list[0];
-  LOG_D(MAC,"Checking for rnti %x UL grant in subframeP %d (num pdu %d)\n",rnti,absSFP%10,ul_req->number_of_pdus);
+  //LOG_D(MAC,"Checking for rnti %x UL grant in subframeP %d (num pdu %d)\n",rnti,absSFP%10,ul_req->number_of_pdus);
 
   for (int i=0; i<ul_req->number_of_pdus;i++){
     LOG_D(MAC,"PDU %d : type %d,rnti %x\n",i,ul_config_pdu[i].pdu_type,rnti);
@@ -2982,11 +3034,12 @@ boolean_t CCE_allocation_infeasible(int module_idP,
             subframe, rnti);
     } else {
       dl_config_pdu->pdu_type                                     = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
+      dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag            = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti              = rnti;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type         = (format_flag == 0)?2:1;
       dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = aggregation;
       DL_req->number_pdu++;
-      LOG_D(MAC,"Subframe %d: Checking CCE feasibility format %d : (%x,%d) (%x,%d,%d)\n",
+      if(0)LOG_D(MAC,"Subframe %d: Checking CCE feasibility format %d : (%x,%d) (%x,%d,%d)\n",
         subframe,format_flag,rnti,aggregation,
           dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti,
           dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,
@@ -3003,6 +3056,7 @@ boolean_t CCE_allocation_infeasible(int module_idP,
             subframe, rnti);
     } else {
       hi_dci0_pdu->pdu_type                               = NFAPI_HI_DCI0_DCI_PDU_TYPE;
+      hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tl.tag            = NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG;
       hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti              = rnti;
       hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation;
       HI_DCI0_req->number_of_dci++;
@@ -3078,10 +3132,9 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
         if (tmode[0]==1 || tmode[0]==2 || tmode[0]==5 || tmode[0]==6 || tmode[0]==7) { // NOTE: have to handle the case of TM9-10 with 1 antenna port
           // single ACK/NAK bit
           AssertFatal(num_ack_nak==1,"num_ack_nak %d > 1 for 1 CC and single-layer transmission\n",num_ack_nak);
-          AssertFatal(sched_ctl->round[CC_idP][harq_pid]<8,"Got ACK/NAK for inactive harq_pid %d for UE %d/%x\n",harq_pid,UE_id,rnti);
+          AssertFatal(sched_ctl->round[CC_idP][harq_pid]<8,"Got ACK/NAK for inactive harq_pid %d for UE %d/%x SFN/SF:%d%d\n",harq_pid,UE_id,rnti,frameP,subframeP);
           AssertFatal(pdu[0] == 1 || pdu[0] == 2 || pdu[0] == 4,
                       "Received ACK/NAK %d which is not 1 or 2 for harq_pid %d from UE %d/%x\n",pdu[0],harq_pid,UE_id,rnti);
-          LOG_D(MAC,"Received %d for harq_pid %d\n",pdu[0],harq_pid);
 
           if (pdu[0] == 1) { // ACK
             sched_ctl->round[CC_idP][harq_pid]=8; // release HARQ process
@@ -3089,10 +3142,13 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
           }
           else if (pdu[0] == 2 || pdu[0] == 4) // NAK (treat DTX as NAK)
             sched_ctl->round[CC_idP][harq_pid]++; // increment round
+
+          LOG_D(MAC,"Received PDU[0]:%d for harq_pid %d [round:%d tbcnt:%d]\n",pdu[0],harq_pid,sched_ctl->round[CC_idP][harq_pid],sched_ctl->tbcnt[CC_idP][harq_pid]);
         }
         else {
           // one or two ACK/NAK bits
           AssertFatal(num_ack_nak>2,"num_ack_nak %d > 2 for 1 CC and TM3/4/8/9/10\n",num_ack_nak);
+          LOG_D(MAC,"Received PDU[0]:%d:[1]:%d for harq_pid %d [round:%d tbcnt:%d]\n",pdu[0],pdu[1],harq_pid,sched_ctl->round[CC_idP][harq_pid],sched_ctl->tbcnt[CC_idP][harq_pid]);
           if ((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[CC_idP][harq_pid]==1) && (pdu[0] == 1) && (pdu[1] == 1)) {
             sched_ctl->round[CC_idP][harq_pid]=8;
             sched_ctl->tbcnt[CC_idP][harq_pid]=0;
@@ -3109,6 +3165,7 @@ void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_fr
           else AssertFatal(1==0,"Illegal ACK/NAK/round combination (%d,%d,%d,%d,%d) for harq_pid %d, UE %d/%x\n",
                            num_ack_nak,sched_ctl->round[CC_idP][harq_pid],sched_ctl->round[CC_idP][harq_pid],pdu[0],pdu[1], harq_pid,UE_id,
                            rnti);
+          LOG_D(MAC,"AFTER Received PDU[0]:%d:[1]:%d for harq_pid %d [round:%d tbcnt:%d]\n",pdu[0],pdu[1],harq_pid,sched_ctl->round[CC_idP][harq_pid],sched_ctl->tbcnt[CC_idP][harq_pid]);
         }
         break;
       case 1: // FDD Channel Selection (10.1.2.2.1), must be received for 2 serving cells
@@ -3600,13 +3657,15 @@ void SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, sub_frame_t
   int UE_id = find_UE_id(mod_idP, rntiP);
   UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list;
 
+  LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n",mod_idP,rntiP,frameP,subframeP,UE_id,cc_idP);
+
   if (UE_id  != -1) {
-    if (mac_eNB_get_rrc_status(mod_idP,UE_RNTI(mod_idP,UE_id)) < RRC_CONNECTED)
-      LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n",mod_idP,rntiP,frameP,subframeP, UE_id,cc_idP);
+    //if (mac_eNB_get_rrc_status(mod_idP,UE_RNTI(mod_idP,UE_id)) < RRC_CONNECTED)
+      //LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n",mod_idP,rntiP,frameP,subframeP,UE_id,cc_idP);
 
+#if 0
     UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
 
-#if 0
     /* for the moment don't use ul_cqi from SR, value is too different from harq */
     sched_ctl->pucch1_snr[cc_idP]        = ul_cqi;
     sched_ctl->pucch1_cqi_update[cc_idP] = 1;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index ee5ae3b5849328cf7ae4a5f57cc37e39cab5d6cd..4afd40e27b1dee0add0a832b8df47f5e4ebece53 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -60,17 +60,24 @@
 #define ENABLE_MAC_PAYLOAD_DEBUG
 #define DEBUG_eNB_SCHEDULER 1
 
+extern void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_t frameP, sub_frame_t subframeP);
+
+extern int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req);
+extern void add_subframe(uint16_t *frameP, uint16_t *subframeP, int offset);
+extern uint16_t sfnsf_add_subframe(uint16_t frameP, uint16_t subframeP, int offset);
+extern int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req);
+
 // This table holds the allowable PRB sizes for ULSCH transmissions
 uint8_t rb_table[34] = {1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,50,54,60,64,72,75,80,81,90,96,100};
 
 void rx_sdu(const module_id_t enb_mod_idP,
-            const int         CC_idP,
-            const frame_t     frameP,
-            const sub_frame_t subframeP,
-            const rnti_t      rntiP,
-            uint8_t          *sduP,
-            const uint16_t    sdu_lenP,
-            const uint16_t    timing_advance,
+	    const int         CC_idP,
+	    const frame_t     frameP,
+	    const sub_frame_t subframeP,
+	    const rnti_t      rntiP,
+	    uint8_t          *sduP,
+	    const uint16_t    sdu_lenP,
+	    const uint16_t    timing_advance,
             const uint8_t     ul_cqi)
 {
   int current_rnti = rntiP;
@@ -82,7 +89,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
   int ii,j;
   eNB_MAC_INST *eNB = RC.mac[enb_mod_idP];
   int    harq_pid = subframe2harqpid(&eNB->common_channels[CC_idP],frameP,subframeP);
-
+  
   UE_list_t *UE_list= &eNB->UE_list;
   int crnti_rx=0;
   int old_buffer_info;
@@ -91,6 +98,8 @@ void rx_sdu(const module_id_t enb_mod_idP,
 
   start_meas(&eNB->rx_ulsch_sdu);
 
+  LOG_D(PHY,"%s() rntiP:%04x UE_id:%d harq_pid:%d\n", __FUNCTION__, rntiP, UE_id, harq_pid);
+
   if ((UE_id >  NUMBER_OF_UE_MAX) || (UE_id == -1)  )
     for(ii=0; ii<NB_RB_MAX; ii++) {
       rx_lengths[ii] = 0;
@@ -102,20 +111,24 @@ void rx_sdu(const module_id_t enb_mod_idP,
     LOG_D(OPT,"[eNB %d][ULSCH] Frame %d  rnti %x  with size %d\n",
                       enb_mod_idP, frameP, current_rnti, sdu_lenP);
   }
-
+  
   if (UE_id!=-1) {
-    LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP, UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],
+    LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu(%p) round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP,sduP,UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],
           current_rnti, UE_id,ul_cqi);
 
     AssertFatal(UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] < 8,
-                "round >= 8\n");
-    if (sduP!=NULL) {
+		"round >= 8\n");
+    if (sduP!=NULL) { 
        UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer   = 0;
        UE_list->UE_sched_ctrl[UE_id].ul_failure_timer      = 0;
        UE_list->UE_sched_ctrl[UE_id].ul_scheduled         &= (~(1<<harq_pid));
-       /* don't take into account TA if timer is running */
-       if (UE_list->UE_sched_ctrl[UE_id].ta_timer == 0)
-         UE_list->UE_sched_ctrl[UE_id].ta_update             = timing_advance;
+       /* Update with smoothing: 3/4 of old value and 1/4 of new.
+        * This is the logic that was done in the function
+        * lte_est_timing_advance_pusch, maybe it's not necessary?
+        * maybe it's even not correct at all?
+        */
+       UE_list->UE_sched_ctrl[UE_id].ta_update             =
+           (UE_list->UE_sched_ctrl[UE_id].ta_update * 3 + timing_advance)/4;
        UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP]       = ul_cqi;
        UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors = 0;
        first_rb =  UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid];
@@ -127,13 +140,13 @@ void rx_sdu(const module_id_t enb_mod_idP,
     }
     else { // we've got an error
       LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d ULSCH in error in round %d, ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP,
-                UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],ul_cqi);
+	        UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],ul_cqi);
 
       //      AssertFatal(1==0,"ulsch in error\n");
       if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] == 3) {
-             UE_list->UE_sched_ctrl[UE_id].ul_scheduled       &= (~(1<<harq_pid));
-             UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]=0;
-             if (UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors++ == 10)
+	     UE_list->UE_sched_ctrl[UE_id].ul_scheduled       &= (~(1<<harq_pid));
+	     UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]=0;
+	     if (UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors++ == 10)
             UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 1;
       }
       else UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]++;
@@ -143,14 +156,14 @@ void rx_sdu(const module_id_t enb_mod_idP,
   }
   else if ((RA_id = find_RA_id(enb_mod_idP,CC_idP,current_rnti))!=-1) { // Check if this is an RA process for the rnti
     AssertFatal(eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx>1,
-                "maxHARQ %d should be greater than 1\n",
-                (int)eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
+		"maxHARQ %d should be greater than 1\n",
+		(int)eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx);
 
     LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP,
      RA_template[RA_id].msg3_round,
      current_rnti,RA_id,ul_cqi);
 
-    first_rb                   = RA_template->msg3_first_rb;
+    first_rb                   = RA_template->msg3_first_rb; 
 
     if (sduP==NULL) { // we've got an error on Msg3
       LOG_D(MAC,"[eNB %d] CC_id %d, RA %d ULSCH in error in round %d/%d\n",enb_mod_idP,CC_idP,RA_id,
@@ -193,7 +206,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
 
     T(T_ENB_MAC_UE_UL_CE, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(current_rnti), T_INT(frameP), T_INT(subframeP),
       T_INT(rx_ces[i]));
-
+    
     switch (rx_ces[i]) { // implement and process BSR + CRNTI +
     case POWER_HEADROOM:
       if (UE_id != -1) {
@@ -201,7 +214,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
         LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received PHR PH = %d (db)\n",
               enb_mod_idP, CC_idP, rx_ces[i], UE_list->UE_template[CC_idP][UE_id].phr_info);
         UE_list->UE_template[CC_idP][UE_id].phr_info_configured=1;
-        UE_list->UE_sched_ctrl[UE_id].phr_received = 1;
+	UE_list->UE_sched_ctrl[UE_id].phr_received = 1;
       }
       payload_ptr+=sizeof(POWER_HEADROOM_CMD);
       break;
@@ -245,31 +258,31 @@ void rx_sdu(const module_id_t enb_mod_idP,
       lcgid = (payload_ptr[0] >> 6);
 
       LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
-            enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
+	    enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
 
       if (crnti_rx==1)
-        LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
-              enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
+	LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
+	      enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
       if (UE_id  != -1) {
 
         UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
 
-        // update buffer info
-
-        UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid]];
+	// update buffer info
+	
+	UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid]];
 
-        UE_list->UE_template[CC_idP][UE_id].ul_total_buffer= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid];
+	UE_list->UE_template[CC_idP][UE_id].ul_total_buffer= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid];
 
-        RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP] = (payload_ptr[0] & 0x3f);
-        if (UE_id == UE_list->head)
-          VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP]);
+	RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP] = (payload_ptr[0] & 0x3f);
+	if (UE_id == UE_list->head)
+	  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP]);	
         if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid] == 0 ) {
           UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid]=frameP;
         }
-        if (mac_eNB_get_rrc_status(enb_mod_idP,UE_RNTI(enb_mod_idP,UE_id)) < RRC_CONNECTED)
-          LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : ul_total_buffer = %d (lcg increment %d)\n",
-                enb_mod_idP, CC_idP, rx_ces[i], UE_list->UE_template[CC_idP][UE_id].ul_total_buffer,
-                UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]);
+	if (mac_eNB_get_rrc_status(enb_mod_idP,UE_RNTI(enb_mod_idP,UE_id)) < RRC_CONNECTED)
+	  LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : ul_total_buffer = %d (lcg increment %d)\n",
+		enb_mod_idP, CC_idP, rx_ces[i], UE_list->UE_template[CC_idP][UE_id].ul_total_buffer,
+		UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]);	
       }
       else {
 
@@ -287,39 +300,39 @@ void rx_sdu(const module_id_t enb_mod_idP,
           ((payload_ptr[1] & 0x0F) << 2) | ((payload_ptr[2] & 0xC0) >> 6);
         UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3] = (payload_ptr[2] & 0x3F);
 
-        // update buffer info
-        old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0];
-        UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0]];
-
-        UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0];
-        if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
-        else
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
-
-        old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1];
-        UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1]];
-        UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1];
-        if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
-        else
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
-
-        old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2];
-        UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2]];
-        UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2];
-        if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
-        else
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
-
-        old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3];
-        UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]];
-        UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3];
-        if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
-        else
-          UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
+	// update buffer info
+	old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0];
+	UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0]];
+
+	UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0];
+	if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
+	else
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
+
+	old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1];
+	UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1]];
+	UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1];
+	if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
+	else
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
+
+	old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2];
+	UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2]];
+	UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2];
+	if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
+	else
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
+
+	old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3];
+	UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]];
+	UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3];
+	if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
+	else
+	  UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
 
         LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
               "%u LCGID2 = %u LCGID3 = %u\n",
@@ -375,7 +388,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
   }
 
   for (i=0; i<num_sdu; i++) {
-    LOG_D(MAC,"SDU Number %d MAC Subheader SDU_LCID %d, length %d\n",i,rx_lcids[i],rx_lengths[i]);
+    LOG_D(MAC,"SDU Number %d MAC Subheader SDU_LCID %d, length %d UE_id %d\n",i,rx_lcids[i],rx_lengths[i],UE_id);
 
     T(T_ENB_MAC_UE_UL_SDU, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(current_rnti), T_INT(frameP), T_INT(subframeP),
       T_INT(rx_lcids[i]), T_INT(rx_lengths[i]));
@@ -395,7 +408,7 @@ void rx_sdu(const module_id_t enb_mod_idP,
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC,1);
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC,0);
       for (ii=0; ii<NB_RA_PROC_MAX; ii++) {
-        RA_TEMPLATE *RA_template = &eNB->common_channels[CC_idP].RA_template[ii];
+	RA_TEMPLATE *RA_template = &eNB->common_channels[CC_idP].RA_template[ii];
 
         LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Checking proc %d : rnti (%x, %x), active %d\n",
               enb_mod_idP, CC_idP, ii,
@@ -418,14 +431,14 @@ void rx_sdu(const module_id_t enb_mod_idP,
                       #endif
                       )) == -1 ) {
               AssertFatal(1==0,"[MAC][eNB] Max user count reached\n");
-              // kill RA procedure
+	      // kill RA procedure
             } else
               LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Added user with rnti %x => UE %d\n",
                     enb_mod_idP,CC_idP,frameP,RA_template->rnti,UE_id);
           } else {
             LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3 from already registered UE %d: length %d, offset %ld\n",
                   enb_mod_idP,CC_idP,frameP,UE_id,rx_lengths[i],payload_ptr-sduP);
-            // kill RA procedure
+	    // kill RA procedure
           }
 
           mac_rrc_data_ind(
@@ -440,31 +453,33 @@ void rx_sdu(const module_id_t enb_mod_idP,
                            enb_mod_idP,
                            0
                            );
-
-
+	  
+	  
           if (num_ce >0) {  // handle msg3 which is not RRCConnectionRequest
             //  process_ra_message(msg3,num_ce,rx_lcids,rx_ces);
           }
 
-          // prepare transmission of Msg4
+	  // prepare transmission of Msg4
           RA_template->generate_Msg4 = 1;
           RA_template->wait_ack_Msg4 = 0;
 
 
 
-          // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different
-          RA_template->Msg4_frame    = frameP + ((subframeP>5) ? 1 : 0);
-          RA_template->Msg4_subframe = (subframeP+4)%10;
+	  // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different
+	  RA_template->Msg4_frame    = frameP + ((subframeP>5) ? 1 : 0);
+	  RA_template->Msg4_subframe = (subframeP+4)%10;
 
+          LOG_D(MAC,"CCCH: rnti matches RA_active : Msg4 scheduled for frame:%d subframe:%d (current frame:%d subframe:%d)\n",RA_template->Msg4_frame, RA_template->Msg4_subframe,frameP,subframeP);
+	  
         } // if process is active
       } // loop on RA processes
-
+      
       break ;
 
     case DCCH :
     case DCCH1 :
       //      if(eNB_mac_inst[module_idP][CC_idP].Dcch_lchan[UE_id].Active==1){
-
+      
 
 #if defined(ENABLE_MAC_PAYLOAD_DEBUG)
       LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sduP));
@@ -475,13 +490,13 @@ void rx_sdu(const module_id_t enb_mod_idP,
 #endif
 
       if (UE_id != -1) {
-        // adjust buffer occupancy of the correponding logical channel group
-        if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] >= rx_lengths[i])
-          UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] -= rx_lengths[i];
-        else
-          UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] = 0;
+	// adjust buffer occupancy of the correponding logical channel group
+	if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] >= rx_lengths[i])
+	  UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] -= rx_lengths[i];
+	else
+	  UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] = 0;
 
-          LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d \n",
+          LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DCCH, received %d bytes from UE %d on LCID %d \n",
                 enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]);
 
           mac_rlc_data_ind(
@@ -502,8 +517,8 @@ void rx_sdu(const module_id_t enb_mod_idP,
 
       } /* UE_id != -1 */
 
-
-      // }
+ 
+      // } 
       break;
 
       // all the DRBS
@@ -563,21 +578,31 @@ void rx_sdu(const module_id_t enb_mod_idP,
 
       break;
     }
-
+  
     payload_ptr+=rx_lengths[i];
   }
 
   // Program ACK for PHICH
-  LOG_D(MAC,"Programming PHICH ACK for rnti %x harq_pid %d (first_rb %d)\n",current_rnti,harq_pid,first_rb);
-  nfapi_hi_dci0_request_body_t   *hi_dci0_req = &eNB->HI_DCI0_req[CC_idP].hi_dci0_request_body;
-  nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi];
+  LOG_D(MAC,"SFN/SF:%d%d Programming PHICH ACK for rnti %x harq_pid %d (first_rb %d)\n",frameP,subframeP,rntiP,harq_pid,first_rb);
+  nfapi_hi_dci0_request_t        *hi_dci0_req = &eNB->HI_DCI0_req[CC_idP];
+  nfapi_hi_dci0_request_body_t   *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
+  nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci+hi_dci0_req_body->number_of_hi]; 	
   memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
-  hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_HI_PDU_TYPE;
+  hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_HI_PDU_TYPE; 
   hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_hi_pdu);
-  hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start                = first_rb;
+  hi_dci0_pdu->hi_pdu.hi_pdu_rel8.tl.tag                              = NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG;
+  hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start                = first_rb; 
   hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms             = 0;
   hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value                            = 1;
-  hi_dci0_req->number_of_hi++;
+  //hi_dci0_pdu->hi_pdu.hi_pdu_rel8.transmission_power = 6000; // DJP - TODO FIXME - not used??
+  hi_dci0_req_body->number_of_hi++;
+  hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP,subframeP, 0);
+  hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG;
+  hi_dci0_req->sfn_sf = sfnsf_add_subframe(frameP,subframeP, 4);
+  hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
+
+  //oai_nfapi_hi_dci0_req(hi_dci0_req);
+  //hi_dci0_req_body->number_of_hi=0;
 
   /* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */
   if ((num_sdu == 0) && (num_ce==0)) {
@@ -723,8 +748,8 @@ void set_msg3_subframe(module_id_t Mod_id,
 }
 
 
-void schedule_ulsch(module_id_t module_idP,
-                    frame_t frameP,
+void schedule_ulsch(module_id_t module_idP, 
+		    frame_t frameP,
                     sub_frame_t subframeP)
 {
   uint16_t first_rb[MAX_NUM_CCs],i;
@@ -744,13 +769,13 @@ void schedule_ulsch(module_id_t module_idP,
     switch (subframeP) {
     case 0:
       if ((tdd_sfa == 0)||
-          (tdd_sfa == 3)||
-          (tdd_sfa == 6)) sched_subframe = 4;
+	  (tdd_sfa == 3)||
+	  (tdd_sfa == 6)) sched_subframe = 4;
       else return;
       break;
     case 1:
       if ((tdd_sfa==0)||
-          (tdd_sfa==1)) sched_subframe = 7;
+	  (tdd_sfa==1)) sched_subframe = 7;
       else if (tdd_sfa==6) sched_subframe = 8;
       break;
     default:
@@ -809,7 +834,7 @@ void schedule_ulsch(module_id_t module_idP,
     // Msg3 is using 1 PRB so we need to increase first_rb accordingly
     // not sure about the break (can there be more than 1 active RA procedure?)
 
-
+    
     for (i=0; i<NB_RA_PROC_MAX; i++) {
       if ((cc->RA_template[i].RA_active == TRUE) &&
           (cc->RA_template[i].generate_rar == 0) &&
@@ -817,12 +842,13 @@ void schedule_ulsch(module_id_t module_idP,
           (cc->RA_template[i].wait_ack_Msg4 == 0) &&
           (cc->RA_template[i].Msg3_subframe == sched_subframe)) {
         first_rb[CC_id]++;
-        //    cc->RA_template[i].Msg3_subframe = -1;
+	//    cc->RA_template[i].Msg3_subframe = -1;
         break;
       }
     }
   }
 
+  //schedule_ulsch_rnti(module_idP, frameP, subframeP, subframeP,first_rb); sunday
   schedule_ulsch_rnti(module_idP, frameP, subframeP, sched_subframe,first_rb);
 
   stop_meas(&eNB->schedule_ulsch);
@@ -839,7 +865,7 @@ void schedule_ulsch_rnti(module_id_t   module_idP,
   rnti_t            rnti           = -1;
   uint8_t           round          = 0;
   uint8_t           harq_pid       = 0;
-  uint8_t           status         = 0;
+  uint8_t           status         = 0; 
   uint8_t           rb_table_index = -1;
   uint32_t          cqi_req,cshift,ndi,tpc;
   int32_t           normalized_rx_power;
@@ -854,56 +880,49 @@ void schedule_ulsch_rnti(module_id_t   module_idP,
   UE_list_t         *UE_list=&eNB->UE_list;
   UE_TEMPLATE       *UE_template;
   UE_sched_ctrl     *UE_sched_ctrl;
-  int               tmode;
   int               sched_frame=frameP;
   int               rvidx_tab[4] = {0,2,3,1};
 
   if (sched_subframeP<subframeP) sched_frame++;
 
-  nfapi_hi_dci0_request_body_t   *hi_dci0_req = &eNB->HI_DCI0_req[CC_id].hi_dci0_request_body;
+  nfapi_hi_dci0_request_t        *hi_dci0_req = &eNB->HI_DCI0_req[CC_id];
+  nfapi_hi_dci0_request_body_t   *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
   nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu;
 
-  nfapi_ul_config_request_pdu_t  *ul_config_pdu;
-
-  nfapi_ul_config_request_body_t *ul_req_tmp       = &eNB->UL_req_tmp[CC_id][sched_subframeP].ul_config_request_body;
-
-  ul_config_pdu                                    = &ul_req_tmp->ul_config_pdu_list[0];
-
+  nfapi_ul_config_request_t *ul_req_tmp            = &eNB->UL_req_tmp[CC_id][sched_subframeP];
+  nfapi_ul_config_request_body_t *ul_req_tmp_body  = &ul_req_tmp->ul_config_request_body;
 
-  LOG_D(MAC,"entering ulsch preprocesor\n");
+  //LOG_D(MAC,"entering ulsch preprocesor\n");
   ulsch_scheduler_pre_processor(module_idP,
                                 frameP,
                                 subframeP,
                                 first_rb);
 
-  LOG_D(MAC,"exiting ulsch preprocesor\n");
-
-  eNB->HI_DCI0_req[CC_id].sfn_sf = (frameP<<4)+subframeP;
+  //LOG_D(MAC,"exiting ulsch preprocesor\n");
 
   // loop over all active UEs
   for (UE_id=UE_list->head_ul; UE_id>=0; UE_id=UE_list->next_ul[UE_id]) {
 
     // don't schedule if Msg4 is not received yet
     if (UE_list->UE_template[UE_PCCID(module_idP,UE_id)][UE_id].configured==FALSE) {
-      LOG_D(MAC,"[eNB %d] frame %d subfarme %d, UE %d: not configured, skipping UE scheduling \n",
-            module_idP,frameP,subframeP,UE_id);
+      //LOG_D(MAC,"[eNB %d] frame %d subframe %d, UE %d: not configured, skipping UE scheduling \n", module_idP,frameP,subframeP,UE_id);
       continue;
     }
 
     rnti = UE_RNTI(module_idP,UE_id);
 
     if (rnti==NOT_A_RNTI) {
-      LOG_W(MAC,"[eNB %d] frame %d subfarme %d, UE %d: no RNTI \n", module_idP,frameP,subframeP,UE_id);
+      LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d: no RNTI \n", module_idP,frameP,subframeP,UE_id);
       continue;
     }
 
     drop_ue = 0;
     /* let's drop the UE if get_eNB_UE_stats returns NULL when calling it with any of the UE's active UL CCs */
-    /* TODO: refine?
+    /* TODO: refine? 
 
     for (n=0; n<UE_list->numactiveULCCs[UE_id]; n++) {
       CC_id = UE_list->ordered_ULCCids[n][UE_id];
-
+      
       if (mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti) == NULL) {
         LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: no PHY context\n", module_idP,frameP,subframeP,UE_id,rnti,CC_id);
         drop_ue = 1;
@@ -939,20 +958,20 @@ abort();
       N_RB_UL      = to_prb(cc[CC_id].ul_Bandwidth);
 
       /*
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),
-                                  eNB_UE_stats->dl_cqi,
-                                  format0);
+      aggregation=get_aggregation(get_bw_index(module_idP,CC_id), 
+				  eNB_UE_stats->dl_cqi,
+				  format0);
       */
 
       if (CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,aggregation,rnti)) {
         LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: not enough nCCE\n", module_idP,frameP,subframeP,UE_id,rnti,CC_id);
         continue; // break;
-      }
+      } 
 
       /* be sure that there are some free RBs */
       if (first_rb[CC_id] >= N_RB_UL-1) {
-        LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
-              module_idP,frameP,subframeP,UE_id,rnti,CC_id);
+	LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
+	      module_idP,frameP,subframeP,UE_id,rnti,CC_id);
         continue;
       }
 
@@ -960,258 +979,319 @@ abort();
 
       UE_template   = &UE_list->UE_template[CC_id][UE_id];
       UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id];
-      harq_pid      = subframe2harqpid(&cc[CC_id],sched_frame,sched_subframeP);
+      {
+        uint16_t ul_sched_frame = sched_frame;
+        uint16_t ul_sched_subframeP = sched_subframeP;
+
+        add_subframe(&ul_sched_frame, &ul_sched_subframeP, 0);
+
+        harq_pid      = subframe2harqpid(&cc[CC_id],ul_sched_frame,ul_sched_subframeP);
+      }
+
       round         = UE_sched_ctrl->round_UL[CC_id][harq_pid];
       AssertFatal(round<8,"round %d > 7 for UE %d/%x\n",round,UE_id,rnti);
-      LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n",
-            module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL);
+      //LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n", module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL);
 
       RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->ul_total_buffer;
-      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO,RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP]);
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO,RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP]);	
       if (UE_is_to_be_scheduled(module_idP,CC_id,UE_id) > 0 || round > 0)// || ((frameP%10)==0))
-        // if there is information on bsr of DCCH, DTCH or if there is UL_SR, or if there is a packet to retransmit, or we want to schedule a periodic feedback every 10 frames
+	// if there is information on bsr of DCCH, DTCH or if there is UL_SR, or if there is a packet to retransmit, or we want to schedule a periodic feedback every 10 frames
         {
-          LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
-                module_idP,harq_pid,frameP,subframeP,UE_id,rnti,round,UE_template->ul_SR,
-                UE_sched_ctrl->ul_inactivity_timer,
+	  LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
+		module_idP,harq_pid,frameP,subframeP,UE_id,rnti,round,UE_template->ul_SR,
+		UE_sched_ctrl->ul_inactivity_timer,
 
-                UE_sched_ctrl->ul_failure_timer,
+		UE_sched_ctrl->ul_failure_timer,
 
-                UE_sched_ctrl->cqi_req_timer);
+		UE_sched_ctrl->cqi_req_timer);
           // reset the scheduling request
           UE_template->ul_SR = 0;
           status = mac_eNB_get_rrc_status(module_idP,rnti);
-          if (status < RRC_CONNECTED)
-            cqi_req = 0;
-          else if (UE_sched_ctrl->cqi_req_timer>30) {
-            cqi_req = 1;
-            UE_sched_ctrl->cqi_req_timer=0;
-          }
-          else
-            cqi_req = 0;
+	  if (status < RRC_CONNECTED)
+	    cqi_req = 0;
+	  else if (UE_sched_ctrl->cqi_req_timer>30) {
+            //
+            //
+            //
+            //
+            //
+            //
+            //
+            //
+	    cqi_req = 0;
+
+            //
+            //
+            //
+            //
+            //
+            //
+            //
+            //
+	    UE_sched_ctrl->cqi_req_timer=0;
+	  }
+	  else
+	    cqi_req = 0;
+	  
+	  LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x cqi_req %d RRC Status %d\n",
+		module_idP,harq_pid,frameP,subframeP,UE_id,rnti,cqi_req,status);
 
           //power control
           //compute the expected ULSCH RX power (for the stats)
-
+	  
           // this is the normalized RX power and this should be constant (regardless of mcs
           normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id];
           target_rx_power = 178;
-
+	  
           // this assumes accumulated tpc
-          // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
-          int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame*10+UE_template->pusch_tpc_tx_subframe;
+	  // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
+	  int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame*10+UE_template->pusch_tpc_tx_subframe;
           if (((framex10psubframe+10)<=(frameP*10+subframeP)) || //normal case
-              ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around
-            {
-              UE_template->pusch_tpc_tx_frame=frameP;
-              UE_template->pusch_tpc_tx_subframe=subframeP;
+	      ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around
+	    {
+	      UE_template->pusch_tpc_tx_frame=frameP;
+	      UE_template->pusch_tpc_tx_subframe=subframeP;
               if (normalized_rx_power>(target_rx_power+4)) {
-                tpc = 0; //-1
-                tpc_accumulated--;
+		tpc = 0; //-1
+		tpc_accumulated--;
               } else if (normalized_rx_power<(target_rx_power-4)) {
-                tpc = 2; //+1
-                tpc_accumulated++;
-              } else {
-                tpc = 1; //0
-              }
-            } else {
+		tpc = 2; //+1
+		tpc_accumulated++;
+	      } else {
+		tpc = 1; //0
+	      }
+	    } else {
             tpc = 1; //0
           }
           //tpc = 1;
-          if (tpc!=1) {
-            LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
-                  module_idP,frameP,subframeP,harq_pid,tpc,
-                  tpc_accumulated,normalized_rx_power,target_rx_power);
-          }
-
+	  if (tpc!=1) {
+	    LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n",
+		  module_idP,frameP,subframeP,harq_pid,tpc,
+		  tpc_accumulated,normalized_rx_power,target_rx_power);
+	  }
+	  
           // new transmission
           if (round==0) {
-
+	    
             ndi = 1-UE_template->oldNDI_UL[harq_pid];
             UE_template->oldNDI_UL[harq_pid]=ndi;
-            UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power=normalized_rx_power;
-            UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power;
-            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
+	    UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power=normalized_rx_power;
+	    UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power;
+	    UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
             UE_template->mcs_UL[harq_pid] = UE_template->pre_assigned_mcs_ul;//cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS
             if (UE_template->pre_allocated_rb_table_index_ul >=0) {
               rb_table_index=UE_template->pre_allocated_rb_table_index_ul;
             } else {
-              UE_template->mcs_UL[harq_pid]=10;//cmin (10, openair_daq_vars.target_ue_ul_mcs);
+	      UE_template->mcs_UL[harq_pid]=10;//cmin (10, openair_daq_vars.target_ue_ul_mcs);
               rb_table_index=5; // for PHR
-            }
-
+	    }
+	    
             UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=UE_template->mcs_UL[harq_pid];
-            //            buffer_occupancy = UE_template->ul_total_buffer;
-
+	    //            buffer_occupancy = UE_template->ul_total_buffer;
 
+	    
             while (((rb_table[rb_table_index]>(N_RB_UL-1-first_rb[CC_id])) ||
-                    (rb_table[rb_table_index]>45)) &&
+		    (rb_table[rb_table_index]>45)) &&
                    (rb_table_index>0)) {
               rb_table_index--;
             }
-
+	    
             UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid],rb_table[rb_table_index]);
-            UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=rb_table[rb_table_index];
-            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS=UE_template->TBS_UL[harq_pid];
-            //            buffer_occupancy -= TBS;
-
+	    UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=rb_table[rb_table_index];
+	    UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS=UE_template->TBS_UL[harq_pid];
+	    //            buffer_occupancy -= TBS;
+            	    
             T(T_ENB_MAC_UE_UL_SCHEDULE, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP),
               T_INT(subframeP), T_INT(harq_pid), T_INT(UE_template->mcs_UL[harq_pid]), T_INT(first_rb[CC_id]), T_INT(rb_table[rb_table_index]),
               T_INT(UE_template->TBS_UL[harq_pid]), T_INT(ndi));
-
-            if (mac_eNB_get_rrc_status(module_idP,rnti) < RRC_CONNECTED)
-              LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d)\n",
-                    module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,UE_template->mcs_UL[harq_pid],
-                    first_rb[CC_id],rb_table[rb_table_index],
-                    rb_table_index,UE_template->TBS_UL[harq_pid],harq_pid);
-
-            // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB)
+	    
+	    if (mac_eNB_get_rrc_status(module_idP,rnti) < RRC_CONNECTED)
+	      LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d frame %d subframe %d)\n",
+		    module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,UE_template->mcs_UL[harq_pid],
+		    first_rb[CC_id],rb_table[rb_table_index],
+		    rb_table_index,UE_template->TBS_UL[harq_pid],harq_pid, sched_frame, sched_subframeP);
+	    
+	    // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB)
             //store for possible retransmission
             UE_template->nb_rb_ul[harq_pid]    = rb_table[rb_table_index];
             UE_template->first_rb_ul[harq_pid] = first_rb[CC_id];
+	    
+	    UE_sched_ctrl->ul_scheduled |= (1<<harq_pid);
+	    if (UE_id == UE_list->head)
+	      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,UE_sched_ctrl->ul_scheduled);
+	    
+	    // adjust total UL buffer status by TBS, wait for UL sdus to do final update
+	    LOG_D(MAC,"[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", module_idP,CC_id,UE_id,rnti,UE_template->ul_total_buffer,UE_template->TBS_UL[harq_pid]);
+	    if (UE_template->ul_total_buffer > UE_template->TBS_UL[harq_pid])
+	      UE_template->ul_total_buffer -= UE_template->TBS_UL[harq_pid];
+	    else
+	      UE_template->ul_total_buffer = 0;
+	    LOG_D(MAC,"ul_total_buffer, new %d\n", UE_template->ul_total_buffer);
+	    // Cyclic shift for DM RS
+	    cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
+	    // save it for a potential retransmission
+            UE_template->cshift[harq_pid] = cshift;	    
+
+	    hi_dci0_pdu                                                         = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci+hi_dci0_req_body->number_of_hi]; 	
+	    memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
+	    hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_DCI_PDU_TYPE; 
+	    hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_dci_pdu);
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tl.tag                            = NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format                        = NFAPI_UL_DCI_FORMAT_0;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level                 = aggregation;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti                              = rnti;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.transmission_power                = 6000;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.resource_block_start              = first_rb[CC_id];
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.number_of_resource_block          = rb_table[rb_table_index];
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.mcs_1                             = UE_template->mcs_UL[harq_pid];
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cyclic_shift_2_for_drms           = cshift;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.frequency_hopping_enabled_flag    = 0;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.new_data_indication_1             = ndi;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc                               = tpc;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request                   = cqi_req;
+	    hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index               = UE_template->DAI_ul[sched_subframeP];
+
+	    hi_dci0_req_body->number_of_dci++;
+            hi_dci0_req_body->sfnsf = sfnsf_add_subframe(frameP, subframeP, 4);
+            hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG;
+	    
+            hi_dci0_req->sfn_sf = frameP<<4|subframeP; // sfnsf_add_subframe(sched_frame, sched_subframeP, 0); // sunday!
+            hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
+
+	    // Add UL_config PDUs
+	    fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus],
+						 cqi_req,
+						 cc,
+						 UE_template->physicalConfigDedicated,
+						 get_tmode(module_idP,CC_id,UE_id),
+						 eNB->ul_handle,
+						 rnti,
+						 first_rb[CC_id], // resource_block_start
+						 rb_table[rb_table_index], // number_of_resource_blocks
+						 UE_template->mcs_UL[harq_pid],
+						 cshift, // cyclic_shift_2_for_drms
+						 0, // frequency_hopping_enabled_flag
+						 0, // frequency_hopping_bits
+						 ndi, // new_data_indication
+						 0, // redundancy_version
+						 harq_pid, // harq_process_number
+						 0, // ul_tx_mode
+						 0, // current_tx_nb
+						 0, // n_srs
+						 get_TBS_UL(UE_template->mcs_UL[harq_pid],
+							    rb_table[rb_table_index])
+						 );
 
-            UE_sched_ctrl->ul_scheduled |= (1<<harq_pid);
-            if (UE_id == UE_list->head)
-              VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,UE_sched_ctrl->ul_scheduled);
-
-            // adjust total UL buffer status by TBS, wait for UL sdus to do final update
-            LOG_D(MAC,"[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", module_idP,CC_id,UE_id,rnti,UE_template->ul_total_buffer,UE_template->TBS_UL[harq_pid]);
-            if (UE_template->ul_total_buffer > UE_template->TBS_UL[harq_pid])
-              UE_template->ul_total_buffer -= UE_template->TBS_UL[harq_pid];
-            else
-              UE_template->ul_total_buffer = 0;
-            LOG_D(MAC,"ul_total_buffer, new %d\n", UE_template->ul_total_buffer);
-            // Cyclic shift for DM RS
-            cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
-            // save it for a potential retransmission
-            UE_template->cshift[harq_pid] = cshift;
-
-            hi_dci0_pdu                                                         = &hi_dci0_req->hi_dci0_pdu_list[eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci+eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi];
-            memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
-            hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_DCI_PDU_TYPE;
-            hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_dci_pdu);
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format                        = NFAPI_UL_DCI_FORMAT_0;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level                 = aggregation;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti                              = rnti;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.transmission_power                = 6000;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.resource_block_start              = first_rb[CC_id];
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.number_of_resource_block          = rb_table[rb_table_index];
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.mcs_1                             = UE_template->mcs_UL[harq_pid];
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cyclic_shift_2_for_drms           = cshift;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.frequency_hopping_enabled_flag    = 0;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.new_data_indication_1             = ndi;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc                               = tpc;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request                   = cqi_req;
-            hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index               = UE_template->DAI_ul[sched_subframeP];
-
-            eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci++;
-
-            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n",
-                  harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP);
-
-            // Add UL_config PDUs
-            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                                 cqi_req,
-                                                 cc,
-                                                 UE_template->physicalConfigDedicated,
-                                                 get_tmode(module_idP,CC_id,UE_id),
-                                                 eNB->ul_handle,
-                                                 rnti,
-                                                 first_rb[CC_id], // resource_block_start
-                                                 rb_table[rb_table_index], // number_of_resource_blocks
-                                                 UE_template->mcs_UL[harq_pid],
-                                                 cshift, // cyclic_shift_2_for_drms
-                                                 0, // frequency_hopping_enabled_flag
-                                                 0, // frequency_hopping_bits
-                                                 ndi, // new_data_indication
-                                                 0, // redundancy_version
-                                                 harq_pid, // harq_process_number
-                                                 0, // ul_tx_mode
-                                                 0, // current_tx_nb
-                                                 0, // n_srs
-                                                 get_TBS_UL(UE_template->mcs_UL[harq_pid],
-                                                            rb_table[rb_table_index])
-                                                 );
 #ifdef Rel14
-            if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation
-              fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                                   UE_template->rach_resource_type>2 ? 2 : 1,
-                                                   1, //total_number_of_repetitions
-                                                   1, //repetition_number
-                                                   (frameP*10)+subframeP);
-            }
+	    if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation
+	      fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus],
+						   UE_template->rach_resource_type>2 ? 2 : 1,
+						   1, //total_number_of_repetitions
+						   1, //repetition_number
+						   (frameP*10)+subframeP);
+	    }
 #endif
-            ul_req_tmp->number_of_pdus++;
-            eNB->ul_handle++;
+	    ul_req_tmp_body->number_of_pdus++;
+	    eNB->ul_handle++;
+	    
+            ul_req_tmp_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+
+            //ul_req_tmp->sfn_sf = sfnsf_add_subframe(sched_frame, sched_subframeP, 4); sunday
+            ul_req_tmp->sfn_sf = sched_frame<<4|sched_subframeP;
+            ul_req_tmp->header.message_id = NFAPI_UL_CONFIG_REQUEST;
 
-            add_ue_ulsch_info(module_idP,
-                              CC_id,
-                              UE_id,
-                              subframeP,
-                              S_UL_SCHEDULED);
+	    //LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP);
+	    
 
-            LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP,CC_id,frameP,subframeP,UE_id);
+            // Scheduler dips into this structure to work out if UE has a grant, so in nfapi mode we still need to populate it
+            // but we can send it right here, right now
+
+            //if (nfapi_mode)
+            {
+              //LOG_D(MAC,"Sending out future UE UL_CONFIG_REQ now in nFAPI mode for future frame:%d subframe:%d\n", sched_frame, sched_subframeP);
+              //oai_nfapi_ul_config_req(ul_req_tmp);
+            }
+
+	    add_ue_ulsch_info(module_idP,
+			      CC_id,
+			      UE_id,
+			      subframeP,
+			      S_UL_SCHEDULED);
+	    
+	    LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP,CC_id,frameP,subframeP,UE_id);
 
             // increment first rb for next UE allocation
             first_rb[CC_id]+=rb_table[rb_table_index];
-          }
-          else { // round > 0 => retransmission
+	  }
+	  else { // round > 0 => retransmission
             T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP),
               T_INT(subframeP), T_INT(harq_pid), T_INT(UE_template->mcs_UL[harq_pid]), T_INT(first_rb[CC_id]), T_INT(rb_table[rb_table_index]),
               T_INT(round));
 
-            // fill in NAK information
-
-            hi_dci0_pdu                                                         = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi];
-            memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
-            hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_HI_PDU_TYPE;
-            hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_hi_pdu);
-            hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start                = UE_template->first_rb_ul[harq_pid];
-            hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms             = UE_template->cshift[harq_pid];
-            hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value                            = 0;
-            hi_dci0_req->number_of_hi++;
-            LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)\n",
+	    // fill in NAK information
+	    
+	    hi_dci0_pdu                                                         = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci+hi_dci0_req_body->number_of_hi]; 	
+	    memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
+	    hi_dci0_pdu->pdu_type                                               = NFAPI_HI_DCI0_HI_PDU_TYPE; 
+	    hi_dci0_pdu->pdu_size                                               = 2+sizeof(nfapi_hi_dci0_hi_pdu);
+	    hi_dci0_pdu->hi_pdu.hi_pdu_rel8.tl.tag                              = NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG;
+	    hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start                = UE_template->first_rb_ul[harq_pid];
+	    hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms             = UE_template->cshift[harq_pid];
+	    hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value                            = 0;
+	    hi_dci0_req_body->number_of_hi++;
+            hi_dci0_req_body->sfnsf = sfnsf_add_subframe(sched_frame, sched_subframeP, 0);
+            hi_dci0_req_body->tl.tag = NFAPI_HI_DCI0_REQUEST_BODY_TAG;
+
+            hi_dci0_req->sfn_sf = frameP<<4|subframeP; //sfnsf_add_subframe(sched_frame, sched_subframeP, 0); - sunday
+            hi_dci0_req->header.message_id = NFAPI_HI_DCI0_REQUEST;
+
+            LOG_I(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, harq_pid %d,round %d)\n",
                   module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,UE_template->mcs_UL[harq_pid],
                   UE_template->first_rb_ul[harq_pid], UE_template->nb_rb_ul[harq_pid],
-                  UE_template->TBS_UL[harq_pid],round);
-            // Add UL_config PDUs
-            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n",
-                  harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP);
-            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                                 cqi_req,
-                                                 cc,
-                                                 UE_template->physicalConfigDedicated,
-                                                 get_tmode(module_idP,CC_id,UE_id),
-                                                 eNB->ul_handle,
-                                                 rnti,
-                                                 UE_template->first_rb_ul[harq_pid], // resource_block_start
-                                                 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
-                                                 UE_template->mcs_UL[harq_pid],
-                                                 cshift, // cyclic_shift_2_for_drms
-                                                 0, // frequency_hopping_enabled_flag
-                                                 0, // frequency_hopping_bits
-                                                 UE_template->oldNDI_UL[harq_pid], // new_data_indication
-                                                 rvidx_tab[round&3], // redundancy_version
-                                                 harq_pid, // harq_process_number
-                                                 0, // ul_tx_mode
-                                                 0, // current_tx_nb
-                                                 0, // n_srs
-                                                 UE_template->TBS_UL[harq_pid]
-                                                 );
+                  UE_template->TBS_UL[harq_pid],harq_pid,round);
+	    // Add UL_config PDUs
+	    fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus],
+						 cqi_req,
+						 cc,
+						 UE_template->physicalConfigDedicated,
+						 get_tmode(module_idP,CC_id,UE_id),
+						 eNB->ul_handle,
+						 rnti,
+						 UE_template->first_rb_ul[harq_pid], // resource_block_start
+						 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
+						 UE_template->mcs_UL[harq_pid],
+						 cshift, // cyclic_shift_2_for_drms
+						 0, // frequency_hopping_enabled_flag
+						 0, // frequency_hopping_bits
+						 UE_template->oldNDI_UL[harq_pid], // new_data_indication
+						 rvidx_tab[round&3], // redundancy_version
+						 harq_pid, // harq_process_number
+						 0, // ul_tx_mode
+						 0, // current_tx_nb
+						 0, // n_srs
+						 UE_template->TBS_UL[harq_pid]
+						 );
 #ifdef Rel14
-            if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation
-              fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                                   UE_template->rach_resource_type>2 ? 2 : 1,
-                                                   1, //total_number_of_repetitions
-                                                   1, //repetition_number
-                                                   (frameP*10)+subframeP);
-            }
+	    if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation
+	      fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_tmp_body->number_of_pdus],
+						   UE_template->rach_resource_type>2 ? 2 : 1,
+						   1, //total_number_of_repetitions
+						   1, //repetition_number
+						   (frameP*10)+subframeP);
+	    }
 #endif
-              ul_req_tmp->number_of_pdus++;
-              eNB->ul_handle++;
+	      ul_req_tmp_body->number_of_pdus++;
+	      eNB->ul_handle++;
+
+              ul_req_tmp_body->tl.tag = NFAPI_UL_CONFIG_REQUEST_BODY_TAG;
+
+              ul_req_tmp->sfn_sf = sched_frame<<4|sched_subframeP;
+              ul_req_tmp->header.message_id = NFAPI_UL_CONFIG_REQUEST;
 
-          }/*
-          else if (round > 0) { //we schedule a retransmission
+              LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d cqi_req %d\n",
+                  harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP,cqi_req);
+	  }/* 
+	  else if (round > 0) { //we schedule a retransmission
 
             ndi = UE_template->oldNDI_UL[harq_pid];
 
@@ -1225,21 +1305,21 @@ abort();
             LOG_I(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, harq_pid %d, round %d)\n",
                   module_idP,UE_id,rnti,CC_id,frameP,subframeP,mcs,
                   first_rb[CC_id],UE_template->nb_rb_ul[harq_pid],
-                  harq_pid, round);
+		  harq_pid, round);
 
             rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL,
                                             first_rb[CC_id],
                                             UE_template->nb_rb_ul[harq_pid]);
             first_rb[CC_id]+=UE_template->nb_rb_ul[harq_pid];  // increment for next UE allocation
-
-            UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1;
-            UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid];
-            UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid];
-            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs;
-            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs;
-          }
-           */
-
+         
+	    UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1;
+	    UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid];
+	    UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid];
+	    UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs;
+	    UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs;
+	  }
+	   */
+	  
         } // UE_is_to_be_scheduled
     } // loop over UE_id
   } // loop of CC_id
diff --git a/openair2/LAYER2/MAC/extern.h b/openair2/LAYER2/MAC/extern.h
index 77e6e761a88deceb30d72028023ef9627a95c8ed..f192cd7e127ef01b1ea66adc14c03c4d2217f7a3 100644
--- a/openair2/LAYER2/MAC/extern.h
+++ b/openair2/LAYER2/MAC/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/flexran_agent_mac_proto.h b/openair2/LAYER2/MAC/flexran_agent_mac_proto.h
index a3ff3b6a4aa9ee88b176b795d3246312e0ddfcc0..5b152a1138c80536876d0e83335368aeb90392c9 100644
--- a/openair2/LAYER2/MAC/flexran_agent_mac_proto.h
+++ b/openair2/LAYER2/MAC/flexran_agent_mac_proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c
index 38f39e50e10e613a2f979ae8e32a6eaf0cf1901a..018d490f4430e696e70870383eb72c8b2d18e049 100644
--- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c
+++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
index 5f1df6766340f637634343be389c027dec12d0a0..0c03e549f6e16c5b4b2c9c1776db73ad97d6fa35 100644
--- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
+++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -178,7 +178,7 @@ void _store_dlsch_buffer (module_id_t Mod_id,
        */
       if (UE_template->dl_buffer_info[i]>0)
         LOG_D(MAC,
-              "[eNB %d][SLICE %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n",
+              "[eNB %d][SLICE %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmented %d \n",
               Mod_id, slice_id,frameP, subframeP, UE_id,
               i, UE_template->dl_pdus_in_buffer[i],UE_template->dl_buffer_info[i],
               UE_template->dl_buffer_head_sdu_creation_time[i],
@@ -275,7 +275,7 @@ void _assign_rbs_required (module_id_t Mod_id,
         TBS = mac_xface->get_TBS_DL(cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)], nb_rbs_required[CC_id][UE_id]);
 	nb_rbs_allowed_slice[CC_id][slice_id] = flexran_nb_rbs_allowed_slice(slice_percentage[slice_id],
 									     flexran_get_N_RB_DL(Mod_id, CC_id));
-        LOG_D(MAC,"[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n",
+        LOG_D(MAC,"[preprocessor] start RB assignment for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n",
               UE_id, CC_id, UE_list->UE_template[pCCid][UE_id].dl_buffer_total,
               nb_rbs_required[CC_id][UE_id], flexran_get_ue_wcqi(Mod_id, UE_id), TBS);
 
@@ -548,11 +548,11 @@ void _dlsch_scheduler_pre_processor (module_id_t   Mod_id,
       }
 
 
-      // hypotetical assignement
+      // hypotetical assignment
       /*
        * If schedule is enabled and if the priority of the UEs is modified
        * The average rbs per logical channel per user will depend on the level of
-       * priority. Concerning the hypothetical assignement, we should assign more
+       * priority. Concerning the hypothetical assignment, we should assign more
        * rbs to prioritized users. Maybe, we can do a mapping between the
        * average rbs per user and the level of priority or multiply the average rbs
        * per user by a coefficient which represents the degree of priority.
diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c
index 7dec8d0c563169a0bb9136ce3fd30521166b5634..17424b27970c806dd1bb8413e4ed852530d9b878 100644
--- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c
+++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h
index 7a02ff2f1db6d278247bba94ec4481821916c6be..997b9d1d24d5dc4b9cc454decf2cb7563b781e8b 100644
--- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h
+++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/flexran_dci_conversions.h b/openair2/LAYER2/MAC/flexran_dci_conversions.h
index a417c39d208f853cafedb8c70974cee502c2d971..f52ae5b807207426cdc6e79298bd1d11515436cd 100644
--- a/openair2/LAYER2/MAC/flexran_dci_conversions.h
+++ b/openair2/LAYER2/MAC/flexran_dci_conversions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/l1_helpers.c b/openair2/LAYER2/MAC/l1_helpers.c
index b136b993a649bc2f0abe172ff88ab232194d2854..2b5a38eda7cfc802e84da5391ab0724591676010 100644
--- a/openair2/LAYER2/MAC/l1_helpers.c
+++ b/openair2/LAYER2/MAC/l1_helpers.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/lte_transport_init.c b/openair2/LAYER2/MAC/lte_transport_init.c
index 07aadc371520e723922bf1bb7b50a2a05301acf9..1f67d8913c9c7392a959cb2a6282c8307b646aaa 100644
--- a/openair2/LAYER2/MAC/lte_transport_init.c
+++ b/openair2/LAYER2/MAC/lte_transport_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index b06184c566517fb255a75c095c249581c35538a9..56f53b4e0b7451c9d8f723c86ed0b23025aacd8f 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -47,6 +47,7 @@
 #include "common/ran_context.h"
 
 extern RAN_CONTEXT_t RC;
+extern void openair_rrc_top_init_ue( int eMBMS_active, char* uecap_xer, uint8_t cba_group_active, uint8_t HO_active);
 
 void dl_phy_sync_success(module_id_t   module_idP,
                          frame_t       frameP,
@@ -112,7 +113,7 @@ int mac_top_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
 }
 
 
-void mac_top_init_eNB()
+void mac_top_init_eNB(void)
 {
 
   module_id_t    i,j;
@@ -343,7 +344,7 @@ int l2_init_ue(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8
   return(1);
 }
 
-int l2_init_eNB()
+int l2_init_eNB(void)
 {
 
 
diff --git a/openair2/LAYER2/MAC/openair2_proc.c b/openair2/LAYER2/MAC/openair2_proc.c
index 89eea810c9e13734a8ff6a4174cee3e262aa90f1..ab78be3c61048577790325f1b83d4a5f29af1058 100644
--- a/openair2/LAYER2/MAC/openair2_proc.c
+++ b/openair2/LAYER2/MAC/openair2_proc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 5337dcf657acd225d0c668d2a311a5609989218c..257b693d910b19768bd3f24853aa6a424930fdeb 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -144,7 +144,7 @@ void store_dlsch_buffer (module_id_t Mod_id,
        */
       if (UE_template->dl_buffer_info[i]>0)
         LOG_D(MAC,
-              "[eNB %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n",
+              "[eNB %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmented %d \n",
               Mod_id, frameP, subframeP, UE_id,
               i, UE_template->dl_pdus_in_buffer[i],UE_template->dl_buffer_info[i],
               UE_template->dl_buffer_head_sdu_creation_time[i],
@@ -216,7 +216,7 @@ void assign_rbs_required (module_id_t Mod_id,
     }
 
     if (UE_list->UE_template[pCCid][UE_id].dl_buffer_total> 0) {
-      LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id);
+      //LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id);
 
       for (i=0; i<UE_list->numactiveCCs[UE_id]; i++) {
         CC_id = UE_list->ordered_CCids[i][UE_id];
@@ -230,7 +230,7 @@ void assign_rbs_required (module_id_t Mod_id,
 
         TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]);
 
-        LOG_D(MAC,"[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n",
+        if(0)LOG_D(MAC,"[preprocessor] start RB assignment for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n",
               UE_id, CC_id, UE_list->UE_template[pCCid][UE_id].dl_buffer_total,
               nb_rbs_required[CC_id][UE_id],eNB_UE_stats->dlsch_mcs1,TBS);
 
@@ -607,7 +607,7 @@ void dlsch_scheduler_pre_processor (module_id_t   Mod_id,
       /*
        * If schedule is enabled and if the priority of the UEs is modified
        * The average rbs per logical channel per user will depend on the level of
-       * priority. Concerning the hypothetical assignement, we should assign more
+       * priority. Concerning the hypothetical assignment, we should assign more
        * rbs to prioritized users. Maybe, we can do a mapping between the
        * average rbs per user and the level of priority or multiply the average rbs
        * per user by a coefficient which represents the degree of priority.
@@ -668,7 +668,7 @@ if (nb_rbs_required_remaining[CC_id][i]<0) abort();
         }
 
         if (nb_rbs_required[CC_id][i]> 0 )
-          LOG_D(MAC,"round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d,  pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n",
+          if (0)LOG_D(MAC,"round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d,  pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n",
                 r1, CC_id, i,
                 nb_rbs_required_remaining[CC_id][i],
                 nb_rbs_required_remaining_1[CC_id][i],
@@ -848,17 +848,17 @@ if (nb_rbs_required_remaining[CC_id][i]<0) abort();
       //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id];
 
       if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0 ) {
-        LOG_D(MAC,"******************DL Scheduling Information for UE%d ************************\n",UE_id);
-        LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,ue_sched_ctl->dl_pow_off[CC_id]);
-        LOG_D(MAC,"***********RB Alloc for every subband for UE%d ***********\n",UE_id);
+        //LOG_D(MAC,"******************DL Scheduling Information for UE%d ************************\n",UE_id);
+        //LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,ue_sched_ctl->dl_pow_off[CC_id]);
+        //LOG_D(MAC,"***********RB Alloc for every subband for UE%d ***********\n",UE_id);
 
         for(j=0; j<N_RBG[CC_id]; j++) {
           //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i];
-          LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,ue_sched_ctl->rballoc_sub_UE[CC_id][j]);
+          //LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,ue_sched_ctl->rballoc_sub_UE[CC_id][j]);
         }
 
         //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id];
-        LOG_D(MAC,"Total RBs allocated for UE%d = %d\n",UE_id,ue_sched_ctl->pre_nb_available_rbs[CC_id]);
+        //LOG_D(MAC,"Total RBs allocated for UE%d = %d\n",UE_id,ue_sched_ctl->pre_nb_available_rbs[CC_id]);
       }
     }
   }
@@ -881,7 +881,6 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
   int i,j;
   UE_list_t *UE_list=&RC.mac[module_idP]->UE_list;
   UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
-  rnti_t rnti = UE_RNTI(module_idP,UE_id);
 
   uint8_t *vrb_map = RC.mac[module_idP]->common_channels[CC_id].vrb_map;
   int N_RB_DL = to_prb(RC.mac[module_idP]->common_channels[CC_id].mib->message.dl_Bandwidth);
@@ -891,7 +890,8 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
 #endif
 
 
-  LOG_D(MAC,"Running preprocessor for UE %d (%x)\n",UE_id,rnti);
+  //rnti_t rnti = UE_RNTI(module_idP,UE_id);
+  //LOG_D(MAC,"Running preprocessor for UE %d (%x)\n",UE_id,rnti);
   // initialize harq_pid and round
 
   if (ue_sched_ctl->ta_timer) ue_sched_ctl->ta_timer--;
@@ -1014,11 +1014,11 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,
     for (j = 0; j < rb_size; j++) {
       if (vrb_map[j+(i*RBGsize)] != 0)  {
 	rballoc_sub[CC_id][i] = 1;
-	LOG_D(MAC,"Frame %d, subframe %d : vrb %d allocated\n",frameP,subframeP,j+(i*RBGsize));
+	//LOG_D(MAC,"Frame %d, subframe %d : vrb %d allocated\n",frameP,subframeP,j+(i*RBGsize));
 	break;
       }
     }
-    LOG_D(MAC,"Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n",frameP,subframeP,CC_id,i,rballoc_sub[CC_id][i]);
+    //LOG_D(MAC,"Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n",frameP,subframeP,CC_id,i,rballoc_sub[CC_id][i]);
     MIMO_mode_indicator[CC_id][i] = 2;
   }
 }
@@ -1101,11 +1101,11 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
   UE_TEMPLATE        *UE_template               = 0;
   int                N_RB_DL;
   int                N_RB_UL;
-  LOG_D(MAC,"In ulsch_preprocessor: assign max mcs min rb\n");
+  //LOG_D(MAC,"In ulsch_preprocessor: assign max mcs min rb\n");
   // maximize MCS and then allocate required RB according to the buffer occupancy with the limit of max available UL RB
   assign_max_mcs_min_rb(module_idP,frameP, subframeP, first_rb);
 
-  LOG_D(MAC,"In ulsch_preprocessor: sort ue \n");
+  //LOG_D(MAC,"In ulsch_preprocessor: sort ue \n");
   // sort ues
   sort_ue_ul (module_idP,frameP, subframeP);
 
@@ -1124,7 +1124,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
     }
   }
 
-  LOG_D(MAC,"In ulsch_preprocessor: step2 \n");
+  //LOG_D(MAC,"In ulsch_preprocessor: step2 \n");
   // step 2: calculate the average rb per UE
   total_ue_count =0;
   max_num_ue_to_be_scheduled=0;
@@ -1142,11 +1142,11 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
 
     UE_id = i;
 
-    LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x\n",UE_id,rnti);
+    //LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x\n",UE_id,rnti);
     for (n=0; n<UE_list->numactiveULCCs[UE_id]; n++) {
       // This is the actual CC_id in the list
       CC_id = UE_list->ordered_ULCCids[n][UE_id];
-      LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x CCid %d\n",UE_id,rnti,CC_id);
+      //LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x CCid %d\n",UE_id,rnti,CC_id);
       UE_template = &UE_list->UE_template[CC_id][UE_id];
       average_rbs_per_user[CC_id]=0;
 
@@ -1177,9 +1177,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
       }
     }
   }
-  if (total_ue_count > 0)
-    LOG_D(MAC,"[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n",
-	  module_idP, frameP, subframeP,total_ue_count, max_num_ue_to_be_scheduled);
+  //if (total_ue_count > 0) LOG_D(MAC,"[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n", module_idP, frameP, subframeP,total_ue_count, max_num_ue_to_be_scheduled);
 
   //LOG_D(MAC,"step3\n");
 
@@ -1209,7 +1207,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
       }
 
       total_allocated_rbs[CC_id]+= nb_allocated_rbs[CC_id][UE_id];
-      LOG_D(MAC,"In ulsch_preprocessor: assigning %d RBs for UE %d/%x CCid %d, harq_pid %d\n",nb_allocated_rbs[CC_id][UE_id],UE_id,rnti,CC_id,harq_pid);
+      //LOG_D(MAC,"In ulsch_preprocessor: assigning %d RBs for UE %d/%x CCid %d, harq_pid %d\n",nb_allocated_rbs[CC_id][UE_id],UE_id,rnti,CC_id,harq_pid);
     }
   }
 
@@ -1245,8 +1243,8 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
           }
         } else {
           UE_template->pre_allocated_nb_rb_ul= nb_allocated_rbs[CC_id][UE_id];
-          LOG_D(MAC,"******************UL Scheduling Information for UE%d CC_id %d ************************\n",UE_id, CC_id);
-          LOG_D(MAC,"[eNB %d] total RB allocated for UE%d CC_id %d  = %d\n", module_idP, UE_id, CC_id, UE_template->pre_allocated_nb_rb_ul);
+          //LOG_D(MAC,"******************UL Scheduling Information for UE%d CC_id %d ************************\n",UE_id, CC_id);
+          //LOG_D(MAC,"[eNB %d] total RB allocated for UE%d CC_id %d  = %d\n", module_idP, UE_id, CC_id, UE_template->pre_allocated_nb_rb_ul);
         }
       }
     }
@@ -1255,7 +1253,7 @@ void ulsch_scheduler_pre_processor(module_id_t module_idP,
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
 
     if (total_allocated_rbs[CC_id]>0) {
-      LOG_D(MAC,"[eNB %d] total RB allocated for all UEs = %d/%d\n", module_idP, total_allocated_rbs[CC_id], N_RB_UL - first_rb[CC_id]);
+      //LOG_D(MAC,"[eNB %d] total RB allocated for all UEs = %d/%d\n", module_idP, total_allocated_rbs[CC_id], N_RB_UL - first_rb[CC_id]);
     }
   }
 }
@@ -1277,11 +1275,15 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
   int Ncp;
   int N_RB_UL;
 
+  //LOG_D(MAC, "%s() Enter\n", __FUNCTION__);
+
   for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
     if (UE_list->active[i] != TRUE) continue;
 
     rnti = UE_RNTI(module_idP,i);
 
+    //LOG_D(MAC, "%s() UE active rnti:%04x UE_list->UE_sched_ctrl[i].ul_out_of_sync:%d UE_list->UE_sched_ctrl[i].phr_received:%d numactiveULCCs[UE_id]:%d UE_list->UE_template[CC_id][UE_id].ul_total_buffer:%d\n", __FUNCTION__, rnti, UE_list->UE_sched_ctrl[i].ul_out_of_sync, UE_list->UE_sched_ctrl[i].phr_received, UE_list->numactiveULCCs[i], UE_list->UE_template[CC_id][i].ul_total_buffer);
+
     if (rnti==NOT_A_RNTI)
       continue;
     if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1)
@@ -1330,7 +1332,7 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
 
         while ((((UE_template->phr_info - tx_power) < 0 ) || (tbs > UE_template->ul_total_buffer))&&
                (mcs > 3)) {
-          // LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs);
+          LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs);
           mcs--;
           tbs = get_TBS_UL(mcs,rb_table[rb_table_index])<<3;
           tx_power = estimate_ue_tx_power(tbs,rb_table[rb_table_index],0,Ncp,0); // fixme: set use_srs
@@ -1367,14 +1369,19 @@ void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subfra
               UE_template->pre_allocated_nb_rb_ul,
               UE_template->phr_info,tx_power);
       } else {
+        //LOG_E(MAC,"no ul buffer");
+
         /* if UE has pending scheduling request then pre-allocate 3 RBs */
         //if (UE_template->ul_active == 1 && UE_template->ul_SR == 1) {
         if (UE_is_to_be_scheduled(module_idP, CC_id, i)) {
+          /* use QPSK mcs */
+          UE_template->pre_assigned_mcs_ul             = 10;
           UE_template->pre_allocated_rb_table_index_ul = 2;
           UE_template->pre_allocated_nb_rb_ul          = 3;
         } else {
-          UE_template->pre_allocated_rb_table_index_ul=-1;
-          UE_template->pre_allocated_nb_rb_ul=0;
+          UE_template->pre_assigned_mcs_ul             = 0;
+          UE_template->pre_allocated_rb_table_index_ul = -1;
+          UE_template->pre_allocated_nb_rb_ul          = 0;
         }
       }
     }
diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h
index 2bad81d52c49ec2fff125dfd581d2d48b681c1de..b316cbfeeb8333e709106d0e44a2dc024760d454 100644
--- a/openair2/LAYER2/MAC/proto.h
+++ b/openair2/LAYER2/MAC/proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -1058,7 +1058,11 @@ int narrowband_to_first_rb(COMMON_channels_t *cc, int nb_index);
 
 int l2_init_eNB(void);
 
-
+void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
+void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id);
+uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn);
+int32_t get_uldl_offset(int eutra_bandP);
+int l2_init_ue(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active);
 
 #endif
 /** @}*/
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index c63db2b02f6a6c1d189438e7074441427657ecc0..ef19a4c532c0f14ff19e108c057a693fbf851479 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -35,6 +35,7 @@
 #include "proto.h"
 #include "UTIL/LOG/vcd_signal_dumper.h"
 #include "PHY_INTERFACE/extern.h"
+#include "SCHED/defs.h"
 #include "COMMON/mac_rrc_primitives.h"
 #include "RRC/LITE/extern.h"
 #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
@@ -49,6 +50,8 @@
 #include "SIMULATION/TOOLS/defs.h" // for taus
 
 extern uint8_t  nfapi_mode;
+extern UE_MODE_t get_ue_mode(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
+
 
 int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id)
 {
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index 62346603e231b7fda6314dbb9fd253f502ee2fc7..ad870b63879f4dd05bd3faea7d550f8b9ec3062c 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index 9e0a4039251a5a46cb1cb266495b1c6af627626f..1d219825c2540964463a2d0748a298d0bdc3f687 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/MAC/vars.h b/openair2/LAYER2/MAC/vars.h
index 92e00eaaa70217aea51c7e9fccfb7cf244390b00..4ff54752530fe9e892d8bf93f355effd03d12c89 100644
--- a/openair2/LAYER2/MAC/vars.h
+++ b/openair2/LAYER2/MAC/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index ac8b87a41a7cb079528922dcd33defb0323a47a1..b362e8887a08066b969d160d7d86222cbff06e2e 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
index b33eb2f2aa344af0bcbcda7f2cf60d79a07db299..30a45acc72fc9d7183b156a4bd85f5e8112bf251 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c
index 795cb2e80aa3056a6581bc56470a6fb31039a818..abec97ddfd4c0c8a6aea1cede86a7dc19c170837 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitive.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h
index b7930ab1e1481ef4ceefa4e8a83a72f574308c6f..6226dccc335c3b46d9010d224d8c103c28c331ca 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_control_primitives_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
index 046ba33e71de16fe607a67b703c4f5118b8aac3c..e65bbf1db06880384dd925c95b4807f141177937 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -89,8 +89,11 @@ extern Packet_OTG_List_t *otg_pdcp_buffer;
 
 #if defined(LINK_ENB_PDCP_TO_GTPV1U)
 #  include "gtpv1u_eNB_task.h"
+#  include "gtpv1u_eNB_defs.h"
 #endif
 
+extern int gtpv1u_new_data_req( uint8_t  enb_module_idP, rnti_t   ue_rntiP, uint8_t  rab_idP, uint8_t *buffer_pP, uint32_t buf_lenP, uint32_t buf_offsetP);
+
 /* Prevent de-queueing the same PDCP SDU from the queue twice
  * by multiple threads. This has happened in TDD when thread-odd
  * is flushing a PDCP SDU after UE_RX() processing; whereas
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c
index 68cf6facdeee9b77782619bfac1b32feda3bf9ff..eddd42c34b5317588889bd111153ae3a0b641b1b 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
index 6cef21c4931ae4f5f1241b6e60832a5e19bd6451..7117a760b979a2ba1d6470d99cfcd0d62b955e08 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
index cc86a1cd6a559c334e5bb0e13ca0691aead3e39c..8e57f84b0a9e9fa86ec72144b219a2b9714304f3 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h
index 8bb383e6159678ec73c6fbc2794cf1a4c8c93df3..afcc2fdd0255dc0f11d15df8e670ee29dec8119f 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c
index 030505d9ac7822003cdf51ac573676160e1cea1b..d395f959819098e9ff7e4db191afeddd1d823b6e 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
index 3eff6e335c6310f30eab32eff0d09aab7e1c3dd0..949858c1e52f155fe28023d129cd6db7887169b4 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
index 3faa001575e3bf5b8c8de822c892888827c7c30f..ec59a4b4fe8dca5190bd26118b0e0209af2f8b8e 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
index a4d6b7d112556362c12d02da67f9b49f2319db51..0200ffdbf8fc485d837b35ccc913d1abd017c94c 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_thread.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
index eac42cb1297c8958a580f70c57685903f223b5ad..ad2cbae8479ad13c21f3a8463c1636b442f6c687 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
index 4934e0c635ab30107e93dc9db7ced6e170ec2916..7944049c3bd06f24b44549ccc6c134867061f372 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_util.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
index 03fabf47b31facd3d84479c1a7cc874713cfc88c..0e21d5cfac8c8d79237b472a1ce691512eede2cb 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h
index 4619a07315fa67cc6d6836a5b125c2ba208e0960..131d56e1f89a6f677ec7750ac5c6c7d948dafe1d 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h
index 12af0279a8143fcd966f72c4b4d83e6f92b1fc12..674b8c244eef590fb830e39053fdd6837b41c85c 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_constants.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h
index 602e8e98c2f7ff1bc3abef94b3ba07c1fe8fe45c..1b6d8375655d00a98b5851daf8e40cc4c207535f 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_entity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c
index 4b5c173d4b6e891c5d98b7eb7c1d95ade8e60719..a133ce09920157695402118420de43ab601e610b 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h
index c596bc671accf0c97b013c0342a6b7a21675d0d6..43503a1b3a014169ddcc2741044f2cf2e2a385fa 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_in_sdu.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c
index 129d4ffb0f97f621cc3d17898006a17082c39a5d..f6dd0c58095c5a946b326582cee0edd104797d9a 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h
index d088f9f0116430ef137d8307bc815e5671c178ad..2ee7d040ab36b65b0a617dacd8a24e69aa34d996 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_init.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
index 4202443a5a4e02c5248836e0607a61a9a5ce9bf7..addc949d356bd875eb03d6f0aac753256cee774a 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h
index 4b780ce4414c2735074a4477b93fbf3e58c5e5e9..82148a4a377899c4a98c5b0a2909e79764a3d846 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_reassembly.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
index d2a5cc985e848881c26fda350b996a6e5bb5485e..b1facdfb023671b9e948280b6031c1ade079e285 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h
index fbc02474eb0480c0085458bfad36278742f46f01..9d2978b0f8a6566cef8418f0a112b2c489767e37 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
index 06ad9a3b05ace2ccbaeff4fe42a5d6a040254181..9e1db8a95bb07d58a4f582c302088156425c8f0e 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h
index 7224d39bf96b90b11562fb4be5eb47c74daeca41..60fefab84b22c17ce36bd87401d5ee170ca8e088 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
index cad1a776a8244503a7257fca0d3799c9d43d05d3..dc1ed2116341ed9d395a9546c103b61f022c25e3 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h
index e6e043dd0a579092223189ba1464519bc931be15..d2f0740b33de9530a97e531f442f955562ba2d42 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
index 113ee7d048a61677c67fac3d7f818dde03b3374b..afce72b45571112aaaf459034beff3fd1a678246 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h
index b52b3e5aaa5d87e78b413e911504df7aa337f030..aa5cb6dceb25ecd00576cea224b1eca1b9909007 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segment.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c
index 46a656e65a5961058625c4b973659ab729f21595..1da5bbc441cb1aa865afc6e58ee951c7761dd498 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h
index 68200c0f996fedfab863267f84714534ac078154..7c22697ac42b08186856287ab4d222c310f9d2cf 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_segments_holes.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
index a5c15a5262a15bcb154c9c013765ebeb8f5645db..092c7c65f135f05827e36fcf46bc5c56f4d72a86 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h
index 31afd6ae4bade810ae7fd7121e770f5ef7d836dd..e09189fcd6060c9b303c59b6b3a6a75cd98df10a 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h
index 2b75cb21a7a8eaf63a9d42a9239e654bb366cb37..a6c340a165299bdc59ed1dc3e5e8363e774a05f1 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_structs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c
index 86cafb89ce441ab8cad42825bc661a8ac131cc11..ff969c0b6ee8f4fb45916b71bf6670973258a93b 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h
index 6064f777cb8cbc06e92c9cee4a2cbea77cca4ba8..b42800e15f3a3799920075dec308d34fbce530c7 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_test.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c
index 3edb09d22815ca0053af0aecf9aed40f1f53e8a7..0b88e7c650fe4e3d4b9fb23e93eb7fbfb45c9f00 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h
index 1df0be62d98bece13415d48baa1a65755e21c842..c5d49268c4d0f95e299eea9dfa1d066bf226e94d 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_poll_retransmit.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c
index cec0dffd1d726ea6027e809b630cff5504ae4c46..b9383980a4231cd9f84dba7b276bf7c1787dd3be 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h
index dcf27a1977895e0ad4c5f26b1a9d2a68fd610811..a2876d91694b91a66202a66c87f4c3a2943a700b 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_reordering.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c
index 65ea0561205b6d09d28026edac333978e9a0b364..13d4205c2800cd1f7de367f46547ce928e9efe53 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h
index e6445b6d156ec06a9911d2ff0502c26bfcaace06..31ff985e414a0e1c41e3a63d2786ce9f5000fcf4 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_timer_status_prohibit.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c
index 2c181b5d6c857ff469d431e16c6148f7d4dd29b8..f0cacc287486123a4c19a777d59e25eb47e68c30 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h
index 8274de2428ee5fc21cba56a2342404008f99caba..aff78a15c6e21c4298f7c813372c8822597b3b7d 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_windows.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
index 077e9f403aea32cf35d4f63bf909584e44b875ce..ee2ff57c1eae1a9a48d9e4013a1abe76907ec9bc 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h
index 3c74470eba41f473895ec5146b36d26df3f625f4..a0049e4c2a5d89ab3f315c23ba8247019105eb61 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h
index 9c4e06efbc02396d02fb18926169b2454f5d16ec..1a13982df65fd2bac70d02dae4452c7ea0711e0c 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_entity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c
index 8ddea705cdc5acfb0949653089e7c81245688bbd..faf7763e4fae992fa6e175ca2c4e69ea1d70c796 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h
index 0e400a48adc6172633c6cfc4ec6acd2be5045344..35e6c792aea248aaabb73ffad819af5de6a47c65 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_init.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h
index 597fe0f04aff0bc63bee185cb48e6a1346fc7c9d..ee9d5268d4a25b3ed601aa15465261658e421740 100644
--- a/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h
+++ b/openair2/LAYER2/RLC/TM_v9.3.0/rlc_tm_structs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
index e3322d9410b62829e2a4bede9937d70adb0b8b2b..2e1629f8c882b58d17a11579f03f017d1b93a8a9 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h
index 87cf2e2f3764b8d17c60b917070aa013c4ccba75..c7754f587a09a3638c8f04cfec386ac4c2492e31 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h
index 34d97de59d35b96cb7ebfb0403d23d5e8269a813..5f210dbe7b08bdb4c413b54e01abd4eaff1ce6d9 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_constants.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
index 14ca1a62a985674078cd7b7542ab5b83e5a0a48c..423aca55e9242f6db9ed647b6327cfbbed7c9b7f 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -79,9 +79,9 @@ void config_req_rlc_um (
 }
 //-----------------------------------------------------------------------------
 #if defined(Rel14)
-const uint32_t const t_Reordering_tab[32] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,110,120,130,140,150,160,170,180,190,200,1600};
+const uint32_t t_Reordering_tab[32] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,110,120,130,140,150,160,170,180,190,200,1600};
 #else
-const uint32_t const t_Reordering_tab[T_Reordering_spare1] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,110,120,130,140,150,160,170,180,190,200};
+const uint32_t t_Reordering_tab[T_Reordering_spare1] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,110,120,130,140,150,160,170,180,190,200};
 #endif
 
 void config_req_rlc_um_asn1 (
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
index b6964f9f129f0ad1911fc39891d9a9208e13affd..5847a8bb13bbe08b445284efaed347331faf8740 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_control_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
index c00e87c4e09fa3a29cb599f792c4e9bc82d719d4..fe718392310a8ef4e9c854775cf46d5883a4b41c 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h
index 10816a372afff747e8c5d3e5457a53c6a9dbd5c6..f62cddfbcae2c2437f8d7b4735635f39f23fc744 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_dar.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h
index f4bfef2b149347eb968783e21f80de3a1db21113..3250ac85b85c925cfaea642af929f200eecd4752 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_entity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c
index a0995944504edb1d05d7c99889ad58611f686be1..758630b3cce88476ea49df4a253a60d7d36c9879 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h
index 28fec3567a2a99707bd7ab1f4945da22324c0416..1f7310803be110ccc03916d5f3f92c19ce46772a 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_fsm.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c
index 0805d708ca99fb01cb5eaea8197c52d52755a4a1..468a7d062aded4e95a01741caaa962eafd11a70a 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h
index d199409c57551bfbd4b7fb239b4bb68fb2bd40ac..95aac89623e6adf29a531f60b871ee6f840e50e8 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_reassembly.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c
index 3f083a77a881bc069c6597a9a7ec280dc50d69b2..37608d43308b12b88dde5e274f3d6445314958ce 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h
index 882a29de7e01edf822c3672a7a5e7f64beb72993..5e93f272fdb0140ae1506f32c33c038d8a78350d 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_receiver.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c
index bae9bd8d80535e3bfc253b7f272e99b3ff96f81c..4d4362251eaf96847882391c09d9eb83bc8d6e43 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h
index 7f3d8d7e92c6c3dd32232a0fdeafb3a8c7eea25b..9794f9a502fa3628da00afbcfa83fd7f1fcbb06c 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_segment.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h
index 232450c5accbf63966e1fe196ab6eddddb818a06..a5425cb8a0f8a5e6a754ba4dfd364528495cf1fb 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_structs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c
index fced6efbf92bff76713c998974b19897185dd659..2c1fa9333f0136c8ae42e61fd428fa4140974bca 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h
index 71030b639dcc5095df73c3cd48990ddca0008ce0..2c874b8d2432c32d4cdf7afe86a46e1da3b71478 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_test.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c
index 9934fd3a588e2d7f921005a0226ba9fa18ae2322..91985e4800d96f88f651c9d648af5eac35db0587 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h
index 34cd0fea12c22d9593940e1de297d76e7f872c3e..261183ad1d8be8660725d96b39f22da32d91e649 100644
--- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h
+++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um_very_simple_test.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/mac_primitives.h b/openair2/LAYER2/RLC/mac_primitives.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair2/LAYER2/RLC/mac_primitives.h
+++ b/openair2/LAYER2/RLC/mac_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c
index 1472a990c8823bea61e858cacbb19106c8ed9ce9..d70d85f2d52519316977d3e5faf3f2100a0df7ad 100644
--- a/openair2/LAYER2/RLC/rlc.c
+++ b/openair2/LAYER2/RLC/rlc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index 3d6be205249b0284c2f9062c838a38a88051964c..fca786b4d3eed3bfcf02e16851ac59e8037c9547 100644
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_def.h b/openair2/LAYER2/RLC/rlc_def.h
index 929d66b70bc55f77f4dbe26c02d874d32edcc021..e7014043f74b7ce3bba049e459464c1e48773627 100644
--- a/openair2/LAYER2/RLC/rlc_def.h
+++ b/openair2/LAYER2/RLC/rlc_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_def_lte.h b/openair2/LAYER2/RLC/rlc_def_lte.h
index 20a60c5d9310723993a73031bb1e4dcdb5be73c6..aa4dac79ae354e32e4b4b28f432aa6fa0b236625 100644
--- a/openair2/LAYER2/RLC/rlc_def_lte.h
+++ b/openair2/LAYER2/RLC/rlc_def_lte.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c
index b4061ad29f9b9adc1e1adc2d57897541da7a2d8e..6793e71c547ffd1d9fa5782b049bf96565273ea4 100644
--- a/openair2/LAYER2/RLC/rlc_mac.c
+++ b/openair2/LAYER2/RLC/rlc_mac.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_mpls.c b/openair2/LAYER2/RLC/rlc_mpls.c
index e508c3193f628e4e4ec6f64a0da82173256265a6..34e4f028aec13ccc4f6a234413cffca1791c0643 100644
--- a/openair2/LAYER2/RLC/rlc_mpls.c
+++ b/openair2/LAYER2/RLC/rlc_mpls.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_primitives.h b/openair2/LAYER2/RLC/rlc_primitives.h
index 611c48ee4c36252d390ac2066467f5e002138f3f..8d679ab9aaf61f8f67d720ef68df79adcbb84e33 100644
--- a/openair2/LAYER2/RLC/rlc_primitives.h
+++ b/openair2/LAYER2/RLC/rlc_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/RLC/rlc_rrc.c b/openair2/LAYER2/RLC/rlc_rrc.c
index a45838603e324f9aa3adb0fc78e67f3a0adce011..68f5971bf1e1986d6a1064a11e610685b2054b94 100644
--- a/openair2/LAYER2/RLC/rlc_rrc.c
+++ b/openair2/LAYER2/RLC/rlc_rrc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/openair2_proc.c b/openair2/LAYER2/openair2_proc.c
index 10a4059950c79844b064b53c141a97ffe153e480..7801279be2058fc2fc6f653084f70ef4b4c52d0d 100644
--- a/openair2/LAYER2/openair2_proc.c
+++ b/openair2/LAYER2/openair2_proc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/register.c b/openair2/LAYER2/register.c
index 400020b8a561fa40078df1ba1990aec4aa578757..964666875a5a5d6a86a9bbb7276c567c3121c870 100644
--- a/openair2/LAYER2/register.c
+++ b/openair2/LAYER2/register.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/LAYER2/register.h b/openair2/LAYER2/register.h
index e65aa92361b464237486fd91df89a4489c95d74e..8a4aeb5b12336011cbc80aff0a6f547a411b49c4 100644
--- a/openair2/LAYER2/register.h
+++ b/openair2/LAYER2/register.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/Makefile b/openair2/Makefile
index 87b3108f1bc4dafb969fdaded01a783651c0beea..2fbeb193a6e949e8a4ff9b5de1aa9837a01e57b9 100755
--- a/openair2/Makefile
+++ b/openair2/Makefile
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.c b/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.c
index a15b4bf6af89b82157afa7633599b6dff859e710..0b520ed151bc3e06672f58fe4ed2893cece59189 100644
--- a/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.c
+++ b/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.h b/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.h
index ee4efd8c7599b4450115386ed5a9a1ab8c7f3220..128503094f3deda19e45c54406c50a0ac58e7c5a 100644
--- a/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.h
+++ b/openair2/NAS/DRIVER/CELLULAR/CTL_TOOL/nascell_ioctl.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_ascontrol.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_ascontrol.c
index 8f34e93565c90c6d0d0d931d4f4725fed3ff0dd6..666cbb1a044c9b98c1f0b6d7d9bca26b6ad071f4 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_ascontrol.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_ascontrol.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_classifier.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_classifier.c
index 689b51584340868f01aaf834bc36353a98425c19..3cc1ac0879822d1ad85d169ac1cc665774386f67 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_classifier.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_classifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_common.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_common.c
index 4782f13488f1259ee6eeddca55c12572a6c7103c..bbafa86ad1c0fdb0b74301b78e8d3ace99802789 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_common.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_constant.h b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_constant.h
index 0e77b3e44c00de3502c70e15b1106f09b8856ad5..bdba11ff79bc77d4ca5d97f527ecae698205a537 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_constant.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_constant.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
index 77b3c28165f879f182c6204398cd3e0685fe1ca7..efc8562bf9fa5f6e7ec5dc8adb733d382ac7fd7f 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.c
index 14d598abb79422f487da30c416ea0aae80752238..296ae788666e83b4ce1b7fbe0bf4e057d2ea5acb 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.h b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.h
index 924f442341a2e2bbbded39e44e5be04b4a6f7e03..40118d8368257a4586b7f6b07db91ddaf7ea91ae 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_iocontrol.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_netlink.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_netlink.c
index 13c50570b4b6b305bd90cde209a93dc16aefbf65..2f92b94717ea2eca2171298ee8fcaecd09258f27 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_netlink.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_proto.h b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_proto.h
index ec7f7ec2cce5bd112a7c6c6d97eef6a39e114c58..3a6ffe4848a0deffb0b81c01263a1224748f317f 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_proto.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_sap.h b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_sap.h
index 83874b375d04041504250476849f3041b6a32c33..c0934f4622a2c519bbe6e5143e073b0041b1cec7 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_sap.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_tool.c b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_tool.c
index c4e8ed284c3c1decfe9293f80e91f810c225e0dd..4c5d3fcf6e700742a13ba017caad1af567de051a 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_tool.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_variables.h b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_variables.h
index 130488bca6be95862ab52afa014deeb18f2c766e..c5754e948eb0ba1440bdc76a7b68ff1a499b18d0 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_variables.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASMT/nasmt_variables.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_ascontrol.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_ascontrol.c
index 1864406ce0dea6aacb0137cbb197f41989bfba8c..4a6ef0e27510e512703b35804237b107b2add8c3 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_ascontrol.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_ascontrol.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_classifier.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_classifier.c
index 1883b17eb06e21efa2250ea01a17b25091f5dc33..4c0cf8aa1ed4e9da01083b0143ee05f13a9fe3fe 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_classifier.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_classifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_common.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_common.c
index e2819d075ed905b3a1646645c4ae7a835b86a959..6bfd77a17d3aa636397ea777f7582ed2bb2e37f2 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_common.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_constant.h b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_constant.h
index b346816e8f68e9aa29a3eb6d73767413478bf3de..7a0e69cc4847caa05129ce397efb81008a86c841 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_constant.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_constant.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
index 970600de214357157b9546eec561d02a846de770..8fe2d48e3fabaf29bf4d8acaf3490a76f3764b89 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.c
index 86576500b7ed7e03040fe798f1de8c66ee7ac906..3c8f5d3cc6e9f41ecb384168765ed3a47470f104 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.h b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.h
index 2104c6cac1287ab156052b7eb718f9b33adf3de2..bd7baac3b63bbb2d3e948d3bc40a99a9517f8f78 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_iocontrol.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_netlink.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_netlink.c
index 9cccb7c22674de9e7c2bad6b0020c2a6ae0687d9..d0a3516567f952089b11e17796d8cf5bdf98b577 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_netlink.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_proto.h b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_proto.h
index 74eb226b05f1e10b452c3671014924a49c6f3d3f..9053c88a56e24775213ee88a842fd04710779e56 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_proto.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_sap.h b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_sap.h
index 84f508cbc363753aa081e20061b24b14c81f74ce..e2835adf7d61773552bb9090993c5de106b0009b 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_sap.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_tool.c b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_tool.c
index 4891f5447f4dd42f0161b036cbacb6bc18e786a1..54324cf63fc322866bd4ecb33acee592e1ed8698 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_tool.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_variables.h b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_variables.h
index a8677452bcca209a4ac98efe14194f63baf26c9a..7c2b69459ca7ee733225665270f9f98c6645c18c 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_variables.h
+++ b/openair2/NAS/DRIVER/CELLULAR/NASRG/nasrg_variables.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NETLTEST/netltest.c b/openair2/NAS/DRIVER/CELLULAR/NETLTEST/netltest.c
index 9f33bf6ce033b351dc4a0b16178de44ae80f0549..84de51a68d5a6b9ad5581cb8323d144c74901075 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NETLTEST/netltest.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NETLTEST/netltest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/DRIVER/CELLULAR/NETLTEST/nettestPDCP.c b/openair2/NAS/DRIVER/CELLULAR/NETLTEST/nettestPDCP.c
index 172110fa9b8f3bce79c57dac4e7ca2f20c76a241..121d3bba8b9cb9ade5a35f79a82d7ab7d37d5f39 100644
--- a/openair2/NAS/DRIVER/CELLULAR/NETLTEST/nettestPDCP.c
+++ b/openair2/NAS/DRIVER/CELLULAR/NETLTEST/nettestPDCP.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/SIMU_CELLULAR/nas_simu_proto.h b/openair2/NAS/SIMU_CELLULAR/nas_simu_proto.h
index ef728f1b142162465e2187d681549ff7c5861d09..86ab7a1ec53173011bc0302f2089ca484f2d11b6 100644
--- a/openair2/NAS/SIMU_CELLULAR/nas_simu_proto.h
+++ b/openair2/NAS/SIMU_CELLULAR/nas_simu_proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/SIMU_CELLULAR/nasrg_simu_meas.c b/openair2/NAS/SIMU_CELLULAR/nasrg_simu_meas.c
index 37fbcb7756bd926368d294561bf3eb9d7360216c..a192b82d7247eafc2f8ae8e94df2e88d65507fb0 100644
--- a/openair2/NAS/SIMU_CELLULAR/nasrg_simu_meas.c
+++ b/openair2/NAS/SIMU_CELLULAR/nasrg_simu_meas.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NAS/SIMU_CELLULAR/rrm_fifo_standalone.c b/openair2/NAS/SIMU_CELLULAR/rrm_fifo_standalone.c
index 08a19403886ed06256fd79c944e1c695b120f882..e9cefdd926a169c48986c4627541a2d13079f08c 100644
--- a/openair2/NAS/SIMU_CELLULAR/rrm_fifo_standalone.c
+++ b/openair2/NAS/SIMU_CELLULAR/rrm_fifo_standalone.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c b/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c
index edf29dbee0e12606741531daaff356ef0a247257..e918f209e37f3dab584a81a3bdcbd6f67f077550 100644
--- a/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c
+++ b/openair2/NETWORK_DRIVER/LITE/RB_TOOL/rb_tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/classifier.c b/openair2/NETWORK_DRIVER/LITE/classifier.c
index 18dba8725341273345e73f77bec1d2ce0deb675c..bc6888279b422eed3a16021892a70055f0be4296 100644
--- a/openair2/NETWORK_DRIVER/LITE/classifier.c
+++ b/openair2/NETWORK_DRIVER/LITE/classifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/common.c b/openair2/NETWORK_DRIVER/LITE/common.c
index 9749429201b6d27efdb09ee6e1eb3ea5b7df53f6..0d616d5764fa16e47ec5971b8f81346c54d110c8 100644
--- a/openair2/NETWORK_DRIVER/LITE/common.c
+++ b/openair2/NETWORK_DRIVER/LITE/common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/constant.h b/openair2/NETWORK_DRIVER/LITE/constant.h
index 1d8821dfdd99fab445804ca6175915a2caa6014d..efeba0b86dd92c817db6ac43f7de0f7520e0544d 100644
--- a/openair2/NETWORK_DRIVER/LITE/constant.h
+++ b/openair2/NETWORK_DRIVER/LITE/constant.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/device.c b/openair2/NETWORK_DRIVER/LITE/device.c
index 616af5e14550c47e52f38c91b292ff64806bcab8..fe60d82c157881236a6c0955106af1beca2b6ffd 100644
--- a/openair2/NETWORK_DRIVER/LITE/device.c
+++ b/openair2/NETWORK_DRIVER/LITE/device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/ioctl.c b/openair2/NETWORK_DRIVER/LITE/ioctl.c
index 06309403d1de9d1d14edb05cbf8327db082c85fa..85c213c5fff365f31970c31a7f15d3ca32fdd69b 100644
--- a/openair2/NETWORK_DRIVER/LITE/ioctl.c
+++ b/openair2/NETWORK_DRIVER/LITE/ioctl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/ioctl.h b/openair2/NETWORK_DRIVER/LITE/ioctl.h
index dcd26543de71eea267bdc79f7ad0465fe52731f6..d5bab2038c2c4d8363b689b66e0b91bb45f1836b 100644
--- a/openair2/NETWORK_DRIVER/LITE/ioctl.h
+++ b/openair2/NETWORK_DRIVER/LITE/ioctl.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/local.h b/openair2/NETWORK_DRIVER/LITE/local.h
index f1d2a7bb3dd29705fceeb01e6e00224521c53c0b..ea82dd9b8588519c9c740abbd9e7f78ed440d29f 100644
--- a/openair2/NETWORK_DRIVER/LITE/local.h
+++ b/openair2/NETWORK_DRIVER/LITE/local.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/netlink.c b/openair2/NETWORK_DRIVER/LITE/netlink.c
index b54ec4a9875a38d311cf233790804e67d8f2a2fa..2ad104b421358fc91876dc21ca4e8550ad0f3edf 100644
--- a/openair2/NETWORK_DRIVER/LITE/netlink.c
+++ b/openair2/NETWORK_DRIVER/LITE/netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/proto_extern.h b/openair2/NETWORK_DRIVER/LITE/proto_extern.h
index 57aa601a61a9f9d3c3c3e0bc93aa2def9b2be8af..f07083921f3f81adc07a34c25aea4358609eb04c 100644
--- a/openair2/NETWORK_DRIVER/LITE/proto_extern.h
+++ b/openair2/NETWORK_DRIVER/LITE/proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/sap.h b/openair2/NETWORK_DRIVER/LITE/sap.h
index 1fff9744afae2e2d9385d8c0f3a98e84b9b3ba5f..d72a1b10df1ee35d685f8a7be8beea5939ed4015 100644
--- a/openair2/NETWORK_DRIVER/LITE/sap.h
+++ b/openair2/NETWORK_DRIVER/LITE/sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/LITE/tool.c b/openair2/NETWORK_DRIVER/LITE/tool.c
index 089259458d4cd82e6d56ace58f2601f16a33d264..d8d0030dd9186c85cf07e759a3c046270d635ee0 100644
--- a/openair2/NETWORK_DRIVER/LITE/tool.c
+++ b/openair2/NETWORK_DRIVER/LITE/tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c b/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c
index 24dfcaf61ec098c3c85269a40945fdb52296cbdd..8e231895d97a0961da97e9f060c673a5cbe80e39 100644
--- a/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c
+++ b/openair2/NETWORK_DRIVER/MESH/RB_TOOL/rb_tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/TESTBENCH/testbench.c b/openair2/NETWORK_DRIVER/MESH/TESTBENCH/testbench.c
index 172110fa9b8f3bce79c57dac4e7ca2f20c76a241..121d3bba8b9cb9ade5a35f79a82d7ab7d37d5f39 100644
--- a/openair2/NETWORK_DRIVER/MESH/TESTBENCH/testbench.c
+++ b/openair2/NETWORK_DRIVER/MESH/TESTBENCH/testbench.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/classifier.c b/openair2/NETWORK_DRIVER/MESH/classifier.c
index f47d63008c947d74a098ba58ee9e07f2983ee87e..985bab946ecffc9241661b447e735fa09ab0d32e 100644
--- a/openair2/NETWORK_DRIVER/MESH/classifier.c
+++ b/openair2/NETWORK_DRIVER/MESH/classifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/common.c b/openair2/NETWORK_DRIVER/MESH/common.c
index 95e4cf1fc2662f890192e8e106e7a53e7ae62a7f..0eb7530ee6fabbf8c130d5172d5e9e27339879d0 100644
--- a/openair2/NETWORK_DRIVER/MESH/common.c
+++ b/openair2/NETWORK_DRIVER/MESH/common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/constant.h b/openair2/NETWORK_DRIVER/MESH/constant.h
index fed132c61ea5d263ca0958dd870f70584db2932f..1c756765c6c1a0e86201332f5ef77bc8cca6333e 100644
--- a/openair2/NETWORK_DRIVER/MESH/constant.h
+++ b/openair2/NETWORK_DRIVER/MESH/constant.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/device.c b/openair2/NETWORK_DRIVER/MESH/device.c
index 393fe9f9e01fe3ffd4fe863a7b693ab5d309e4f8..f9bc592bce4a3ddf335064842a377a1490fba732 100644
--- a/openair2/NETWORK_DRIVER/MESH/device.c
+++ b/openair2/NETWORK_DRIVER/MESH/device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/ioctl.c b/openair2/NETWORK_DRIVER/MESH/ioctl.c
index 913fcc1e755e2ac9dd658d5fc1d34c1ee1146053..56dfb1cfe8dd4f7e25edebb8d5498b71de798a29 100644
--- a/openair2/NETWORK_DRIVER/MESH/ioctl.c
+++ b/openair2/NETWORK_DRIVER/MESH/ioctl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/ioctl.h b/openair2/NETWORK_DRIVER/MESH/ioctl.h
index 9273d1865103771989fdaf51a94e0a630efd8217..ffa9b4e79b7ed4c02a091fc117b2c2243e612796 100644
--- a/openair2/NETWORK_DRIVER/MESH/ioctl.h
+++ b/openair2/NETWORK_DRIVER/MESH/ioctl.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/local.h b/openair2/NETWORK_DRIVER/MESH/local.h
index 0e0a581cbc9590a0cda18fe29caba28a9e91e5b5..e23188d357006d2bebf16f58c5650cbea5d39266 100644
--- a/openair2/NETWORK_DRIVER/MESH/local.h
+++ b/openair2/NETWORK_DRIVER/MESH/local.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/mesh.c b/openair2/NETWORK_DRIVER/MESH/mesh.c
index e2cf3bcf0a0e31ad350de7ee56040030e5cdc560..367e34cc4fb519265ad568e60292af048d0241c5 100644
--- a/openair2/NETWORK_DRIVER/MESH/mesh.c
+++ b/openair2/NETWORK_DRIVER/MESH/mesh.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/netlink.c b/openair2/NETWORK_DRIVER/MESH/netlink.c
index 8d40a9d965bc890f04e70f6fae7c1a0ebb9c5656..9ac44453a94ab43e6dbc3c390d7a9dcfb25134bd 100644
--- a/openair2/NETWORK_DRIVER/MESH/netlink.c
+++ b/openair2/NETWORK_DRIVER/MESH/netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/proto_extern.h b/openair2/NETWORK_DRIVER/MESH/proto_extern.h
index a362876f834fa8227619063bb0f54c0d93e004f9..844c5b41a4a3d9a9f99e454ef93d51977f37af05 100644
--- a/openair2/NETWORK_DRIVER/MESH/proto_extern.h
+++ b/openair2/NETWORK_DRIVER/MESH/proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h b/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h
index cb4c00dcb92332c5588bbdbb8ca3106aef95966f..193ce286cb970e2751eff2d45a1e4a30274ecd8f 100644
--- a/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h
+++ b/openair2/NETWORK_DRIVER/MESH/rrc_nas_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/sap.h b/openair2/NETWORK_DRIVER/MESH/sap.h
index eb85437999d06ec2b3b102b3799bcdfe94d0edfe..60b8fa11fb5ef8830557e28812a08341b14323c2 100644
--- a/openair2/NETWORK_DRIVER/MESH/sap.h
+++ b/openair2/NETWORK_DRIVER/MESH/sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/MESH/tool.c b/openair2/NETWORK_DRIVER/MESH/tool.c
index 872a2583ce9454599ef44397b4b282dafa13d92d..2e8e68a17cfb821f44c72bdae0fed1754c7099e5 100644
--- a/openair2/NETWORK_DRIVER/MESH/tool.c
+++ b/openair2/NETWORK_DRIVER/MESH/tool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c
index 8c3e4557d36d109efcf7198a41a033a906897108..99712cc5d2fc7e749109280c01a59e808b1e28e1 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/common.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/constant.h b/openair2/NETWORK_DRIVER/UE_IP/constant.h
index 42fd0b6303c0bcaca9665e0eae52c135a31d6a0b..faff970dcdb3cb32e8ade1d2a3e8ee0cae1e3600 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/constant.h
+++ b/openair2/NETWORK_DRIVER/UE_IP/constant.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/device.c b/openair2/NETWORK_DRIVER/UE_IP/device.c
index a4f714d4c5537218896398f5fd6d92dbee44a12e..a4398e9d9ed62634afadfebe37e9566e90f67056 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/device.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/local.h b/openair2/NETWORK_DRIVER/UE_IP/local.h
index 3c9c4c4295d6bad486f63fdf1c554900bd4286b0..ac3b0409954daab75466448b14a1727c94d76ada 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/local.h
+++ b/openair2/NETWORK_DRIVER/UE_IP/local.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/netlink.c b/openair2/NETWORK_DRIVER/UE_IP/netlink.c
index 8ecd989f4d4ed1ea44ac2c1a5b333159c96b70e7..e8e36619d1b6942dcc0c1bbc73e353078baddcb5 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/netlink.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/netlink.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h b/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h
index 459fbc0837331fd2d6477b3dc472ed91b0cc8467..b335b019c120e1ee9a6261bb54cb0d04f3de7a45 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h
+++ b/openair2/NETWORK_DRIVER/UE_IP/proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/NETWORK_DRIVER/UE_IP/sap.h b/openair2/NETWORK_DRIVER/UE_IP/sap.h
index cfe4bf81b85f55330058771a8b58cbce9703d06b..ad70386ed7da95c8ceaa41169dc2fcff36cca5a4 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/sap.h
+++ b/openair2/NETWORK_DRIVER/UE_IP/sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/PHY_INTERFACE/IF_Module.c b/openair2/PHY_INTERFACE/IF_Module.c
index b1014e8bde4305bbda989435bd456e0bec63daeb..8f4720024b5b161d07f3f7334370441636f25299 100644
--- a/openair2/PHY_INTERFACE/IF_Module.c
+++ b/openair2/PHY_INTERFACE/IF_Module.c
@@ -10,21 +10,29 @@
 IF_Module_t *if_inst[MAX_IF_MODULES];
 Sched_Rsp_t Sched_INFO[MAX_IF_MODULES][MAX_NUM_CCs];
 
+extern int oai_nfapi_harq_indication(nfapi_harq_indication_t *harq_ind);
+extern int oai_nfapi_crc_indication(nfapi_crc_indication_t *crc_ind);
+extern int oai_nfapi_cqi_indication(nfapi_cqi_indication_t *cqi_ind);
+extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind);
+extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
+extern uint8_t nfapi_mode;
+extern uint16_t sf_ahead;
+
 void handle_rach(UL_IND_t *UL_info) {
   int i;
 
-  if (UL_info->rach_ind.number_of_preambles>0) {
+  if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
 
-    AssertFatal(UL_info->rach_ind.number_of_preambles==1,"More than 1 preamble not supported\n");
-    UL_info->rach_ind.number_of_preambles=0;
-    LOG_D(MAC,"Frame %d, Subframe %d Calling initiate_ra_proc\n",UL_info->frame,UL_info->subframe);
+    AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+    UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
+    LOG_E(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
     initiate_ra_proc(UL_info->module_id,
 		     UL_info->CC_id,
-		     UL_info->frame,
-		     UL_info->subframe,
-		     UL_info->rach_ind.preamble_list[0].preamble_rel8.preamble,
-		     UL_info->rach_ind.preamble_list[0].preamble_rel8.timing_advance,
-		     UL_info->rach_ind.preamble_list[0].preamble_rel8.rnti
+		     NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
+		     NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
+		     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+		     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+		     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
 #ifdef Rel14
 		     ,0
 #endif
@@ -32,24 +40,24 @@ void handle_rach(UL_IND_t *UL_info) {
   }
 
 #ifdef Rel14
-  if (UL_info->rach_ind_br.number_of_preambles>0) {
+  if (UL_info->rach_ind_br.rach_indication_body.number_of_preambles>0) {
 
-    AssertFatal(UL_info->rach_ind_br.number_of_preambles<5,"More than 4 preambles not supported\n");
-    for (i=0;i<UL_info->rach_ind_br.number_of_preambles;i++) {
-      AssertFatal(UL_info->rach_ind_br.preamble_list[i].preamble_rel13.rach_resource_type>0,
+    AssertFatal(UL_info->rach_ind_br.rach_indication_body.number_of_preambles<5,"More than 4 preambles not supported\n");
+    for (i=0;i<UL_info->rach_ind_br.rach_indication_body.number_of_preambles;i++) {
+      AssertFatal(UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type>0,
 		  "Got regular PRACH preamble, not BL/CE\n");
       LOG_D(MAC,"Frame %d, Subframe %d Calling initiate_ra_proc (CE_level %d)\n",UL_info->frame,UL_info->subframe,
-	    UL_info->rach_ind_br.preamble_list[i].preamble_rel13.rach_resource_type-1);
+	    UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type-1);
       initiate_ra_proc(UL_info->module_id,
 		       UL_info->CC_id,
 		       UL_info->frame,
 		       UL_info->subframe,
-		       UL_info->rach_ind_br.preamble_list[i].preamble_rel8.preamble,
-		       UL_info->rach_ind_br.preamble_list[i].preamble_rel8.timing_advance,
-		       UL_info->rach_ind_br.preamble_list[i].preamble_rel8.rnti,
-		       UL_info->rach_ind_br.preamble_list[i].preamble_rel13.rach_resource_type);
+		       UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.preamble,
+		       UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.timing_advance,
+		       UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel8.rnti,
+		       UL_info->rach_ind_br.rach_indication_body.preamble_list[i].preamble_rel13.rach_resource_type);
     }
-    UL_info->rach_ind.number_of_preambles=0;
+    UL_info->rach_ind_br.rach_indication_body.number_of_preambles=0;
   }
 #endif
 }
@@ -58,91 +66,169 @@ void handle_sr(UL_IND_t *UL_info) {
 
   int i;
 
-  for (i=0;i<UL_info->sr_ind.number_of_srs;i++) 
-    SR_indication(UL_info->module_id,
-		  UL_info->CC_id,
-		  UL_info->frame,
-		  UL_info->subframe,
-		  UL_info->sr_ind.sr_pdu_list[i].rx_ue_information.rnti,
-		  UL_info->sr_ind.sr_pdu_list[i].ul_cqi_information.ul_cqi);
+  if (nfapi_mode == 1)  // PNF
+  {
+    if (UL_info->sr_ind.sr_indication_body.number_of_srs>0)
+    {
+      oai_nfapi_sr_indication(&UL_info->sr_ind);
+    }
+  }
+  else
+  {
+    for (i=0;i<UL_info->sr_ind.sr_indication_body.number_of_srs;i++) 
+      SR_indication(UL_info->module_id,
+          UL_info->CC_id,
+          UL_info->frame,
+          UL_info->subframe,
+          UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
+          UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
+  }
 
-  UL_info->sr_ind.number_of_srs=0;
+  UL_info->sr_ind.sr_indication_body.number_of_srs=0;
 }
 
 void handle_cqi(UL_IND_t *UL_info) {
 
   int i;
 
-  for (i=0;i<UL_info->cqi_ind.number_of_cqis;i++) 
-    cqi_indication(UL_info->module_id,
-		   UL_info->CC_id,
-		   UL_info->frame,
-		   UL_info->subframe,
-		   UL_info->cqi_ind.cqi_pdu_list[i].rx_ue_information.rnti,
-		   &UL_info->cqi_ind.cqi_pdu_list[i].cqi_indication_rel9,
-		   UL_info->cqi_ind.cqi_raw_pdu_list[i].pdu,
-		   &UL_info->cqi_ind.cqi_pdu_list[i].ul_cqi_information);
-
-  UL_info->cqi_ind.number_of_cqis=0;
+  if (nfapi_mode == 1)
+  {
+    if (UL_info->cqi_ind.number_of_cqis>0)
+    {
+      LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.number_of_cqis);
+      nfapi_cqi_indication_t ind;
+
+      ind.header.message_id = NFAPI_RX_CQI_INDICATION;
+      ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
+      ind.cqi_indication_body = UL_info->cqi_ind;
+
+      oai_nfapi_cqi_indication(&ind);
+
+      UL_info->cqi_ind.number_of_cqis=0;
+    }
+  }
+  else
+  {
+    for (i=0;i<UL_info->cqi_ind.number_of_cqis;i++) 
+      cqi_indication(UL_info->module_id,
+          UL_info->CC_id,
+          UL_info->frame,
+          UL_info->subframe,
+          UL_info->cqi_ind.cqi_pdu_list[i].rx_ue_information.rnti,
+          &UL_info->cqi_ind.cqi_pdu_list[i].cqi_indication_rel9,
+          UL_info->cqi_ind.cqi_raw_pdu_list[i].pdu,
+          &UL_info->cqi_ind.cqi_pdu_list[i].ul_cqi_information);
+
+    UL_info->cqi_ind.number_of_cqis=0;
+  }
 }
 
 void handle_harq(UL_IND_t *UL_info) {
 
   int i;
 
-  for (i=0;i<UL_info->harq_ind.number_of_harqs;i++) 
-    harq_indication(UL_info->module_id,
-		    UL_info->CC_id,
-		    UL_info->frame,
-		    UL_info->subframe,
-		    &UL_info->harq_ind.harq_pdu_list[i]);
+  //if (UL_info->harq_ind.number_of_harqs>0)
+
+  if (nfapi_mode == 1 && UL_info->harq_ind.harq_indication_body.number_of_harqs>0) // PNF
+  {
+    LOG_E(PHY, "UL_info->harq_ind.harq_indication_body.number_of_harqs:%d Send to VNF\n", UL_info->harq_ind.harq_indication_body.number_of_harqs);
+
+    int retval = oai_nfapi_harq_indication(&UL_info->harq_ind);
+
+    if (retval!=0)
+    {
+      LOG_E(PHY, "Failed to encode NFAPI HARQ_IND retval:%d\n", retval);
+    }
 
-  UL_info->harq_ind.number_of_harqs=0;
+    UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
+  }
+  else
+  {
+    for (i=0;i<UL_info->harq_ind.harq_indication_body.number_of_harqs;i++) 
+      harq_indication(UL_info->module_id,
+          UL_info->CC_id,
+          NFAPI_SFNSF2SFN(UL_info->harq_ind.sfn_sf),
+          NFAPI_SFNSF2SF(UL_info->harq_ind.sfn_sf),
+          &UL_info->harq_ind.harq_indication_body.harq_pdu_list[i]);
+
+    UL_info->harq_ind.harq_indication_body.number_of_harqs=0;
+  }
 }
 
 void handle_ulsch(UL_IND_t *UL_info) {
 
   int i,j;
 
-  for (i=0;i<UL_info->rx_ind.number_of_pdus;i++) {
-
-    for (j=0;j<UL_info->crc_ind.number_of_crcs;j++) {
-      // find crc_indication j corresponding rx_indication i
-      if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
-	  UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti) {
-	if (UL_info->crc_ind.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
-	  LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
-	  rx_sdu(UL_info->module_id,
-		 UL_info->CC_id,
-		 UL_info->frame,
-		 UL_info->subframe,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti,
-		 (uint8_t *)NULL,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.length,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
-	}
-	else {
-	  LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
-	  rx_sdu(UL_info->module_id,
-		 UL_info->CC_id,
-		 UL_info->frame,
-		 UL_info->subframe,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti,
-		 UL_info->rx_ind.rx_pdu_list[i].data,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.length,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-		 UL_info->rx_ind.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
-	}
-	break;
-      } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
-	//    UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti) {
-    } //    for (j=0;j<UL_info->crc_ind.number_of_crcs;j++) {
-    AssertFatal(j<UL_info->crc_ind.number_of_crcs,"Couldn't find matchin CRC indication\n");
-  } //   for (i=0;i<UL_info->rx_ind.number_of_pdus;i++) {
-    
-  UL_info->rx_ind.number_of_pdus=0;
-  UL_info->crc_ind.number_of_crcs=0;
+  if(nfapi_mode == 1)
+  {
+    if (UL_info->crc_ind.crc_indication_body.number_of_crcs>0)
+    {
+      //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf));
+
+      oai_nfapi_crc_indication(&UL_info->crc_ind);
+
+      UL_info->crc_ind.crc_indication_body.number_of_crcs = 0;
+    }
+
+    if (UL_info->rx_ind.rx_indication_body.number_of_pdus>0)
+    {
+      //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf));
+      oai_nfapi_rx_ind(&UL_info->rx_ind);
+      UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
+    }
+  }
+  else
+  {
+    for (i=0;i<UL_info->rx_ind.rx_indication_body.number_of_pdus;i++) {
+      for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++) {
+        // find crc_indication j corresponding rx_indication i
+        LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x\n", j, UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i, UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+        if (UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti ==
+            UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti) {
+          LOG_D(PHY, "UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d\n", j, UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+          if (UL_info->crc_ind.crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
+            LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
+            rx_sdu(UL_info->module_id,
+                UL_info->CC_id,
+                NFAPI_SFNSF2SFN(UL_info->rx_ind.sfn_sf), //UL_info->frame,
+                NFAPI_SFNSF2SF(UL_info->rx_ind.sfn_sf), //UL_info->subframe,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                (uint8_t *)NULL,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+          }
+          else {
+            LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
+            rx_sdu(UL_info->module_id,
+                UL_info->CC_id,
+                NFAPI_SFNSF2SFN(UL_info->rx_ind.sfn_sf), //UL_info->frame,
+                NFAPI_SFNSF2SF(UL_info->rx_ind.sfn_sf), //UL_info->subframe,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].data,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                UL_info->rx_ind.rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+          }
+          break;
+        } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti ==
+        //    UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
+      } //    for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
+      AssertFatal(j<UL_info->crc_ind.crc_indication_body.number_of_crcs,"SFN/SF:%d Couldn't find matchin CRC indication RX_IND:PDUs:%d CRCs:%d\n", NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf),UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->crc_ind.crc_indication_body.number_of_crcs);
+    } //   for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
+  }
+
+  if (UL_info->rx_ind.rx_indication_body.number_of_pdus>0)
+  {
+    UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
+    //LOG_D(PHY, "UL_INFO:SFN/SF:%d%d ZEROING rx_ind[SFN/SF:%d number_of_pdus:%d]\n", UL_info->frame, UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf), UL_info->rx_ind.rx_indication_body.number_of_pdus);
+  }
+
+  if (UL_info->subframe && UL_info->crc_ind.crc_indication_body.number_of_crcs>0)
+  {
+    //LOG_D(PHY, "UL_INFO:SFN/SF:%d%d ZEROING crc_ind[SFN/SF:%d crcs:%d]\n", UL_info->frame, UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf), UL_info->crc_ind.crc_indication_body.number_of_crcs);
+    UL_info->crc_ind.crc_indication_body.number_of_crcs=0;
+  }
 }
 
 /****************************************************************************/
@@ -156,6 +242,9 @@ void handle_ulsch(UL_IND_t *UL_info) {
 #define C do { size = 0; put(0); } while (0)
 #define A(...) do { char t[4096]; sprintf(t, __VA_ARGS__); append_string(t); } while (0)
 
+#if 0
+
+/* eats lots of ms at startup, disrupts realtime */
 static char *s;
 static int size;
 static int maxsize;
@@ -169,6 +258,22 @@ static void put(char x)
   s[size++] = x;
 }
 
+#else
+
+/* eats nothing at startup, but fixed size */
+#define SMAX 65536
+static char s[SMAX];
+static int size;
+static int maxsize = SMAX;
+
+static void put(char x)
+{
+  if (size == maxsize) { printf("incrase SMAX\n"); exit(1); }
+  s[size++] = x;
+}
+
+#endif
+
 static void append_string(char *t)
 {
   size--;
@@ -184,22 +289,22 @@ static void dump_ul(UL_IND_t *u)
   A("XXXX UL  mod %d CC %d f.sf %d.%d\n",
     u->module_id, u->CC_id, u->frame, u->subframe);
 
-  A("XXXX     harq_ind %d\n", u->harq_ind.number_of_harqs);
-      for (i = 0; i < u->harq_ind.number_of_harqs; i++) {
-        nfapi_harq_indication_pdu_t *v = &u->harq_ind.harq_pdu_list[i];
+  A("XXXX     harq_ind %d\n", u->harq_ind.harq_indication_body.number_of_harqs);
+      for (i = 0; i < u->harq_ind.harq_indication_body.number_of_harqs; i++) {
+        nfapi_harq_indication_pdu_t *v = &u->harq_ind.harq_indication_body.harq_pdu_list[i];
   A("XXXX         harq ind %d\n", i);
-  A("XXXX             rnti %d\n", v->rx_ue_information.rnti);
-  A("XXXX             tb1 %d tb2 %d\n", v->harq_indication_fdd_rel8.harq_tb1,
-                                        v->harq_indication_fdd_rel8.harq_tb2);
-  A("XXXX             number_of_ack_nack %d\n",
-                              v->harq_indication_fdd_rel9.number_of_ack_nack);
+  A("XXXX         rnti %d\n", v->rx_ue_information.rnti);
+  A("XXXX         tb1 %d tb2 %d\n", v->harq_indication_fdd_rel8.harq_tb1,
+                                    v->harq_indication_fdd_rel8.harq_tb2);
+  A("XXXX         number_of_ack_nack %d\n",
+                          v->harq_indication_fdd_rel9.number_of_ack_nack);
   A("XXXX             harq[0] = %d\n",
                                     v->harq_indication_fdd_rel9.harq_tb_n[0]);
   A("XXXX harq        ul_cqi %d channel %d\n", v->ul_cqi_information.ul_cqi,
-                                               v->ul_cqi_information.channel);
+                                           v->ul_cqi_information.channel);
       }
 
-  A("XXXX     crc_ind  %d\n", u->crc_ind.number_of_crcs);
+  A("XXXX     crc_ind  %d\n", u->crc_ind.crc_indication_body.number_of_crcs);
 
   A("XXXX     sr_ind   %d\n", u->sr_ind.number_of_srs);
 
@@ -211,11 +316,11 @@ static void dump_ul(UL_IND_t *u)
                                                v->ul_cqi_information.channel);
       }
 
-  A("XXXX     rach_ind %d\n", u->rach_ind.number_of_preambles);
+  A("XXXX     rach_ind %d\n", u->rach_ind.rach_indication_body.number_of_preambles);
 
-  A("XXXX     rx_ind   %d\n", u->rx_ind.number_of_pdus);
-      for (i = 0; i < u->rx_ind.number_of_pdus; i++) {
-        nfapi_rx_indication_pdu_t *v = &u->rx_ind.rx_pdu_list[i];
+  A("XXXX     rx_ind   %d\n", u->rx_ind.rx_indication_body.number_of_pdus);
+      for (i = 0; i < u->rx_ind.rx_indication_body.number_of_pdus; i++) {
+        nfapi_rx_indication_pdu_t *v = &u->rx_ind.rx_indication_body.rx_pdu_list[i];
   A("XXXX         rx ind %d\n", i);
   A("XXXX             timing_advance %d\n",
                                     v->rx_indication_rel8.timing_advance);
@@ -442,25 +547,31 @@ void UL_indication(UL_IND_t *UL_info)
   IF_Module_t  *ifi        = if_inst[module_id];
   eNB_MAC_INST *mac        = RC.mac[module_id];
 
-  LOG_D(PHY,"UL_Indication: frame %d, subframe %d, module_id %d, CC_id %d\n",
-	UL_info->frame,UL_info->subframe,
-	module_id,CC_id);
+  LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n", 
+      UL_info->frame,UL_info->subframe,
+      module_id,CC_id,
+      UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
 
-  if (ifi->CC_mask==0) {
-    ifi->current_frame    = UL_info->frame;
-    ifi->current_subframe = UL_info->subframe;
-  }
-  else {
-    AssertFatal(UL_info->frame != ifi->current_frame,"CC_mask %x is not full and frame has changed\n",ifi->CC_mask);
-    AssertFatal(UL_info->subframe != ifi->current_subframe,"CC_mask %x is not full and subframe has changed\n",ifi->CC_mask);
+  if (nfapi_mode != 1)
+  {
+    if (ifi->CC_mask==0) {
+      ifi->current_frame    = UL_info->frame;
+      ifi->current_subframe = UL_info->subframe;
+    }
+    else {
+      AssertFatal(UL_info->frame != ifi->current_frame,"CC_mask %x is not full and frame has changed\n",ifi->CC_mask);
+      AssertFatal(UL_info->subframe != ifi->current_subframe,"CC_mask %x is not full and subframe has changed\n",ifi->CC_mask);
+    }
+    ifi->CC_mask |= (1<<CC_id);
   }
-  ifi->CC_mask |= (1<<CC_id);
- 
+
+
+  //LOG_D(PHY,"%s() SFN_SF:%d%d About to call clear_nfapi_information()\n", __FUNCTION__, UL_info->frame, UL_info->subframe);
 
   // clear DL/UL info for new scheduling round
   clear_nfapi_information(RC.mac[module_id],CC_id,
 			  UL_info->frame,UL_info->subframe);
-
+  //LOG_D(PHY,"%s() SFN_SF:%d%d Returned from call clear_nfapi_information()\n", __FUNCTION__, UL_info->frame, UL_info->subframe);
 
   handle_rach(UL_info);
 
@@ -470,61 +581,68 @@ void UL_indication(UL_IND_t *UL_info)
 
   handle_harq(UL_info);
 
-  // clear HI prior to hanling ULSCH
+  // clear HI prior to handling ULSCH
   mac->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi                     = 0;
   
   handle_ulsch(UL_info);
 
-  if (ifi->CC_mask == ((1<<MAX_NUM_CCs)-1)) {
+  if (nfapi_mode != 1)
+  {
+    if (ifi->CC_mask == ((1<<MAX_NUM_CCs)-1)) {
 
-    eNB_dlsch_ulsch_scheduler(module_id,
-			      (UL_info->frame+((UL_info->subframe>5)?1:0)) % 1024,
-			      (UL_info->subframe+4)%10);
+      eNB_dlsch_ulsch_scheduler(module_id,
+          (UL_info->frame+((UL_info->subframe>(9-sf_ahead))?1:0)) % 1024,
+          (UL_info->subframe+sf_ahead)%10);
 
-    ifi->CC_mask            = 0;
+      ifi->CC_mask            = 0;
 
-    sched_info->module_id   = module_id;
-    sched_info->CC_id       = CC_id;
-    sched_info->frame       = (UL_info->frame + ((UL_info->subframe>5) ? 1 : 0)) % 1024;
-    sched_info->subframe    = (UL_info->subframe+4)%10;
-    sched_info->DL_req      = &mac->DL_req[CC_id];
-    sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id];
-    if ((mac->common_channels[CC_id].tdd_Config==NULL) ||
-	(is_UL_sf(&mac->common_channels[CC_id],(sched_info->subframe+4)%10)>0)) 
-      sched_info->UL_req      = &mac->UL_req[CC_id];
-    else
-      sched_info->UL_req      = NULL;
+      sched_info->module_id   = module_id;
+      sched_info->CC_id       = CC_id;
+      sched_info->frame       = (UL_info->frame + ((UL_info->subframe>(9-sf_ahead)) ? 1 : 0)) % 1024;
+      sched_info->subframe    = (UL_info->subframe+sf_ahead)%10;
+      sched_info->DL_req      = &mac->DL_req[CC_id];
+      sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id];
+      if ((mac->common_channels[CC_id].tdd_Config==NULL) ||
+          (is_UL_sf(&mac->common_channels[CC_id],(sched_info->subframe+sf_ahead)%10)>0)) 
+        sched_info->UL_req      = &mac->UL_req[CC_id];
+      else
+        sched_info->UL_req      = NULL;
 
-    sched_info->TX_req      = &mac->TX_req[CC_id];
+      sched_info->TX_req      = &mac->TX_req[CC_id];
 
 #ifdef DUMP_FAPI
-    dump_dl(sched_info);
+      dump_dl(sched_info);
 #endif
 
-    AssertFatal(ifi->schedule_response!=NULL,
-		"UL_indication is null (mod %d, cc %d)\n",
-		module_id,
-		CC_id);
-    ifi->schedule_response(sched_info);
+      if (ifi->schedule_response)
+      {
+        AssertFatal(ifi->schedule_response!=NULL,
+            "schedule_response is null (mod %d, cc %d)\n",
+            module_id,
+            CC_id);
+        ifi->schedule_response(sched_info);
+      }
 
-    LOG_D(PHY,"Schedule_response: frame %d, subframe %d (dl_pdus %d / %p)\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu,
-	  &sched_info->DL_req->dl_config_request_body.number_pdu);
-  }						 
+      LOG_D(PHY,"Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu);
+    }						 
+  }
 }
 
 IF_Module_t *IF_Module_init(int Mod_id){
 
   AssertFatal(Mod_id<MAX_MODULES,"Asking for Module %d > %d\n",Mod_id,MAX_IF_MODULES);
 
+  LOG_D(PHY,"Installing callbacks for IF_Module - UL_indication\n");
+
   if (if_inst[Mod_id]==NULL) {
     if_inst[Mod_id] = (IF_Module_t*)malloc(sizeof(IF_Module_t));
     memset((void*)if_inst[Mod_id],0,sizeof(IF_Module_t));
-    
+
     if_inst[Mod_id]->CC_mask=0;
     if_inst[Mod_id]->UL_indication = UL_indication;
 
     AssertFatal(pthread_mutex_init(&if_inst[Mod_id]->if_mutex,NULL)==0,
-		"allocation of if_inst[%d]->if_mutex fails\n",Mod_id);
+        "allocation of if_inst[%d]->if_mutex fails\n",Mod_id);
   }
   return if_inst[Mod_id];
 }
diff --git a/openair2/PHY_INTERFACE/IF_Module.h b/openair2/PHY_INTERFACE/IF_Module.h
index e33a8291e2eab88969a790df5d3d2ffc09269643..7baae6c3b6f8e09c9eef43a77a207ac3989f99c5 100644
--- a/openair2/PHY_INTERFACE/IF_Module.h
+++ b/openair2/PHY_INTERFACE/IF_Module.h
@@ -61,30 +61,30 @@ typedef struct{
   sub_frame_t subframe;
 
   /// harq indication list
-  nfapi_harq_indication_body_t harq_ind;
+  nfapi_harq_indication_t harq_ind;
 
   /// crc indication list
-  nfapi_crc_indication_body_t crc_ind;
+  nfapi_crc_indication_t crc_ind;
 
   /// SR indication list
-  nfapi_sr_indication_body_t sr_ind;
+  nfapi_sr_indication_t sr_ind;
 
   /// CQI indication list
   nfapi_cqi_indication_body_t cqi_ind;
 
   /// RACH indication list
-  nfapi_rach_indication_body_t rach_ind;
+  nfapi_rach_indication_t rach_ind;
 
 #ifdef Rel14
   /// RACH indication list for BR UEs
-  nfapi_rach_indication_body_t rach_ind_br;
+  nfapi_rach_indication_t rach_ind_br;
 #endif
 
   /// SRS indication list
   nfapi_srs_indication_body_t srs_ind;
 
   /// RX indication
-  nfapi_rx_indication_body_t rx_ind;
+  nfapi_rx_indication_t rx_ind;
 
 } UL_IND_t;
 
diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h
index 1fdd69497aa66e045d426ec5b3ec211124b27422..deb07443f18fcddf3a1555821fece15ca0acd7c4 100644
--- a/openair2/PHY_INTERFACE/defs.h
+++ b/openair2/PHY_INTERFACE/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/PHY_INTERFACE/extern.h b/openair2/PHY_INTERFACE/extern.h
index 403847f3f4c8e31b9414268776c7387a7ff6b90d..b87fa42fe41ae930bce6b0d03abfea34bb20c0b8 100644
--- a/openair2/PHY_INTERFACE/extern.h
+++ b/openair2/PHY_INTERFACE/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/PHY_INTERFACE/mac_phy_primitives.c b/openair2/PHY_INTERFACE/mac_phy_primitives.c
index d9693e3d5ec8f4e273b4292a34b795f18d031f0d..3d42393d1140800fa08cefb67652729689e68cd0 100644
--- a/openair2/PHY_INTERFACE/mac_phy_primitives.c
+++ b/openair2/PHY_INTERFACE/mac_phy_primitives.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/PHY_INTERFACE/mac_phy_primitives.h b/openair2/PHY_INTERFACE/mac_phy_primitives.h
index 02ff1fceac9c7e359a505973b7efe2c5c0a92718..889cb503dca1d91088401f20c8ee963433512e35 100644
--- a/openair2/PHY_INTERFACE/mac_phy_primitives.h
+++ b/openair2/PHY_INTERFACE/mac_phy_primitives.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c
index 528608105550d394b81d3e1dc31fdd01b63dcb24..799ad1a06abcac6020f4683a0dffa234282e8334 100644
--- a/openair2/PHY_INTERFACE/phy_stub_UE.c
+++ b/openair2/PHY_INTERFACE/phy_stub_UE.c
@@ -42,7 +42,7 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe, UL_IND
 	  //eNB->UL_INFO.rx_ind.sfn_sf                    = frame<<4| subframe;
 	  //eNB->UL_INFO.rx_ind.rx_indication_body.tl.tag = NFAPI_RX_INDICATION_BODY_TAG;
 
-	  pdu                                    = &UL_INFO->rx_ind.rx_pdu_list[UL_INFO->rx_ind.number_of_pdus];
+	  pdu                                    = &UL_INFO->rx_ind.rx_indication_body.rx_pdu_list[UL_INFO->rx_ind.rx_indication_body.number_of_pdus];
 
 	  //  pdu->rx_ue_information.handle          = eNB->ulsch[UE_id]->handle;
 	  pdu->rx_ue_information.tl.tag          = NFAPI_RX_UE_INFORMATION_TAG;
@@ -100,7 +100,7 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe, UL_IND
 		harq_pid,SNRtimes10,pdu->rx_indication_rel8.ul_cqi,pdu->rx_indication_rel8.timing_advance,
 		timing_advance_update);*/
 
-	  UL_INFO->rx_ind.number_of_pdus++;
+	  UL_INFO->rx_ind.rx_indication_body.number_of_pdus++;
 	  pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 
 
@@ -109,7 +109,7 @@ void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe, UL_IND
 void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint16_t rnti) {
 
   pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
-  nfapi_sr_indication_pdu_t *pdu =   &UL_INFO->sr_ind.sr_pdu_list[UL_INFO->rx_ind.number_of_pdus];
+  nfapi_sr_indication_pdu_t *pdu =   &UL_INFO->sr_ind.sr_indication_body.sr_pdu_list[UL_INFO->rx_ind.rx_indication_body.number_of_pdus];
 
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
@@ -127,7 +127,7 @@ void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_I
   else                        pdu->ul_cqi_information.ul_cqi=(640+SNRtimes10)/5;
   pdu->ul_cqi_information.channel = 0;
 
-  UL_INFO->rx_ind.number_of_pdus++;
+  UL_INFO->rx_ind.rx_indication_body.number_of_pdus++;
   pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 }
 
@@ -135,7 +135,7 @@ void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_I
 void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t crc_flag) {
 
   pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
-  nfapi_crc_indication_pdu_t *pdu =   &UL_INFO->crc_ind.crc_pdu_list[UL_INFO->crc_ind.number_of_crcs];
+  nfapi_crc_indication_pdu_t *pdu =   &UL_INFO->crc_ind.crc_indication_body.crc_pdu_list[UL_INFO->crc_ind.crc_indication_body.number_of_crcs];
 
   //eNB->UL_INFO.crc_ind.sfn_sf                         = frame<<4 | subframe;
   //eNB->UL_INFO.crc_ind.crc_indication_body.tl.tag     = NFAPI_CRC_INDICATION_BODY_TAG;
@@ -147,9 +147,9 @@ void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_
   pdu->crc_indication_rel8.tl.tag                     = NFAPI_CRC_INDICATION_REL8_TAG;
   pdu->crc_indication_rel8.crc_flag                   = crc_flag;
 
-  UL_INFO->crc_ind.number_of_crcs++;
+  UL_INFO->crc_ind.crc_indication_body.number_of_crcs++;
 
-  LOG_D(PHY, "%s() rnti:%04x pdus:%d\n", __FUNCTION__, pdu->rx_ue_information.rnti, UL_INFO->crc_ind.number_of_crcs);
+  LOG_D(PHY, "%s() rnti:%04x pdus:%d\n", __FUNCTION__, pdu->rx_ue_information.rnti, UL_INFO->crc_ind.crc_indication_body.number_of_crcs);
 
   pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 }
@@ -158,21 +158,21 @@ void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL
 
 	pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 
-	    UL_INFO->rach_ind.number_of_preambles                 = 1;
+	    UL_INFO->rach_ind.rach_indication_body.number_of_preambles                 = 1;
 	    //eNB->UL_INFO.rach_ind.preamble_list                       = &eNB->preamble_list[0];
-	    UL_INFO->rach_ind.tl.tag                              = NFAPI_RACH_INDICATION_BODY_TAG;
+	    UL_INFO->rach_ind.rach_indication_body.tl.tag                              = NFAPI_RACH_INDICATION_BODY_TAG;
 
-	    UL_INFO->rach_ind.preamble_list[0].preamble_rel8.tl.tag   		= NFAPI_PREAMBLE_REL8_TAG;
-	    UL_INFO->rach_ind.preamble_list[0].preamble_rel8.timing_advance = 0; //Panos: Not sure about that
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.tl.tag   		= NFAPI_PREAMBLE_REL8_TAG;
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance = 0; //Panos: Not sure about that
 
 	    //Panos: The two following should get extracted from the call to get_prach_resources().
-	    UL_INFO->rach_ind.preamble_list[0].preamble_rel8.preamble = ra_PreambleIndex;
-	    UL_INFO->rach_ind.preamble_list[0].preamble_rel8.rnti 	  = ra_RNTI;
-	    UL_INFO->rach_ind.number_of_preambles++;
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble = ra_PreambleIndex;
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti 	  = ra_RNTI;
+	    UL_INFO->rach_ind.rach_indication_body.number_of_preambles++;
 
 
-	    UL_INFO->rach_ind.preamble_list[0].preamble_rel13.rach_resource_type = 0;
-	    UL_INFO->rach_ind.preamble_list[0].instance_length					 = 0;
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel13.rach_resource_type = 0;
+	    UL_INFO->rach_ind.rach_indication_body.preamble_list[0].instance_length					 = 0;
 
 
 	        // If NFAPI PNF then we need to send the message to the VNF
@@ -189,10 +189,10 @@ void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL
 
 	          LOG_E(PHY,"\n\n\n\nDJP - this needs to be sent to VNF **********************************************\n\n\n\n");
 	          LOG_E(PHY,"UE Filling NFAPI indication for RACH : TA %d, Preamble %d, rnti %x, rach_resource_type %d\n",
-	        	  UL_INFO->rach_ind.preamble_list[0].preamble_rel8.timing_advance,
-	        	  UL_INFO->rach_ind.preamble_list[0].preamble_rel8.preamble,
-	        	  UL_INFO->rach_ind.preamble_list[0].preamble_rel8.rnti,
-	        	  UL_INFO->rach_ind.preamble_list[0].preamble_rel13.rach_resource_type);
+	        	  UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+	        	  UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+	        	  UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti,
+	        	  UL_INFO->rach_ind.rach_indication_body.preamble_list[0].preamble_rel13.rach_resource_type);
 
 	          //Panos: This function is currently defined only in the nfapi-RU-RAU-split so we should call it when we merge
 	          // with that branch.
@@ -251,7 +251,7 @@ void fill_ulsch_harq_indication_UE_MAC(int Mod_id, int frame,int subframe, UL_IN
   //AssertFatal(UE_id>=0,"UE_id doesn't exist\n");
 
   pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
-  nfapi_harq_indication_pdu_t *pdu =   &UL_INFO->harq_ind.harq_pdu_list[UL_INFO->harq_ind.number_of_harqs];
+  nfapi_harq_indication_pdu_t *pdu =   &UL_INFO->harq_ind.harq_indication_body.harq_pdu_list[UL_INFO->harq_ind.harq_indication_body.number_of_harqs];
   int i;
 
   pdu->instance_length                                = 0; // don't know what to do with this
@@ -298,7 +298,7 @@ void fill_ulsch_harq_indication_UE_MAC(int Mod_id, int frame,int subframe, UL_IN
     }
   }*/
 
-  UL_INFO->harq_ind.number_of_harqs++;
+  UL_INFO->harq_ind.harq_indication_body.number_of_harqs++;
   pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 }
 
@@ -317,7 +317,7 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id,
 
 
   pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
-  nfapi_harq_indication_pdu_t *pdu =   &UL_INFO->harq_ind.harq_pdu_list[UL_INFO->harq_ind.number_of_harqs];
+  nfapi_harq_indication_pdu_t *pdu =   &UL_INFO->harq_ind.harq_indication_body.harq_pdu_list[UL_INFO->harq_ind.harq_indication_body.number_of_harqs];
 
   pdu->instance_length                                = 0; // don't know what to do with this
   //  pdu->rx_ue_information.handle                       = handle;
@@ -461,8 +461,8 @@ void fill_uci_harq_indication_UE_MAC(int Mod_id,
   } //TDD*/
 
 
-  UL_INFO->harq_ind.number_of_harqs++;
-  LOG_E(PHY,"Incremented eNB->UL_INFO.harq_ind.number_of_harqs:%d\n", UL_INFO->harq_ind.number_of_harqs);
+  UL_INFO->harq_ind.harq_indication_body.number_of_harqs++;
+  LOG_E(PHY,"Incremented eNB->UL_INFO.harq_ind.number_of_harqs:%d\n", UL_INFO->harq_ind.harq_indication_body.number_of_harqs);
   pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
 
 }
diff --git a/openair2/PHY_INTERFACE/vars.h b/openair2/PHY_INTERFACE/vars.h
index 810d073a233606d77a51ca9f67fb7de5c422932c..736d6f89db2038bb3dd87cf71be8dc44d7063922 100644
--- a/openair2/PHY_INTERFACE/vars.h
+++ b/openair2/PHY_INTERFACE/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
index 222b9f7b410f1e04e3b347d7a25e2daef3c6c8d5..8d69b6e76ba8e22a217e53a1da33a6098eb0ec2a 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
index c2325f99bd1628cb19fc5dc29c437aeb8672d1b2..b13d72f980bcdc6eb21872bbe1fb1b5775adb96b 100644
--- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
+++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c
index bac68807906f22cb5c10b7ba6c95b1b79bfd70ac..07d75d097008c89ea328ff6bfca3fecb6fc00ab5 100644
--- a/openair2/RRC/LITE/L2_interface.c
+++ b/openair2/RRC/LITE/L2_interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -81,7 +81,6 @@ mac_rrc_data_req(
   uint8_t sfn                     = (uint8_t)((frameP>>2)&0xff);
 
 
-  
 #ifdef DEBUG_RRC
   int i;
   LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
@@ -148,6 +147,7 @@ mac_rrc_data_req(
         return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
       } // All RFN mod 8 transmit SIB2-3 in SF 5
       else if ((frameP%8) == 1) {
+      //LOG_D(RRC, "%s() frameP mod 8==1 (frameP:%d) copy into buffer SIB23 size:%d\n", __FUNCTION__, frameP, RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
         memcpy(&buffer_pP[0],
                RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
                RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
@@ -197,7 +197,7 @@ mac_rrc_data_req(
 					 (void*)mib,
 					 carrier->MIB,
 					 24);
-	LOG_D(RRC,"Encoded MIB for frame %d (%p), bits %lu\n",sfn,carrier->MIB,enc_rval.encoded);
+	//LOG_D(RRC,"Encoded MIB for frame %d (%p), bits %lu\n",sfn,carrier->MIB,enc_rval.encoded);
 	buffer_pP[0]=carrier->MIB[0];
 	buffer_pP[1]=carrier->MIB[1];
 	buffer_pP[2]=carrier->MIB[2];
@@ -312,7 +312,7 @@ mac_rrc_data_req(
                RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1_BR);
         return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1_BR);
     }
-
+ 
     if ((Srb_id & RAB_OFFSET) == BCCH_SI_BR){ // First SI message with SIB2/3
         memcpy(&buffer_pP[0],
                RC.rrc[Mod_idP]->carrier[CC_id].SIB23_BR,
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index da46f161faf1be90e18c8624c8e7a6b6dedebbf1..c22ceef6bb689b63870eab1a1180b04d506ca46e 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -160,11 +160,11 @@ int xer_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td, voi
   er = xer_encode(td, sptr, XER_F_BASIC, xer__print2s, &string_buffer);
 
   if (er.encoded < 0) {
-    LOG_E(RRC, "xer_sprint encoding error (%d)!", er.encoded);
+    LOG_E(RRC, "xer_sprint encoding error (%zd)!", er.encoded);
     er.encoded = string_buffer.string_size;
   } else {
     if (er.encoded > string_buffer.string_size) {
-      LOG_E(RRC, "xer_sprint string buffer too small, got %d need %d!", string_buffer.string_size, er.encoded);
+      LOG_E(RRC, "xer_sprint string buffer too small, got %zd need %zd!", string_buffer.string_size, er.encoded);
       er.encoded = string_buffer.string_size;
     }
   }
@@ -557,7 +557,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[eNB] SystemInformationBlockType1 Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_D(RRC,"[eNB] SystemInformationBlockType1 Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
   if (enc_rval.encoded==-1) {
@@ -1326,7 +1326,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[eNB] SystemInformation Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_D(RRC,"[eNB] SystemInformation Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
   if (enc_rval.encoded==-1) {
@@ -1415,7 +1415,7 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv)
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[UE] RRCConnectionRequest Encoded %d bits (%d bytes), ecause %d\n",enc_rval.encoded,(enc_rval.encoded+7)/8,ecause);
+  LOG_D(RRC,"[UE] RRCConnectionRequest Encoded %zd bits (%zd bytes), ecause %d\n",enc_rval.encoded,(enc_rval.encoded+7)/8,ecause);
 #endif
 
   return((enc_rval.encoded+7)/8);
@@ -1664,7 +1664,7 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"RRCConnectionSetupComplete Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_D(RRC,"RRCConnectionSetupComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
   return((enc_rval.encoded+7)/8);
@@ -1726,7 +1726,7 @@ do_RRCConnectionReconfigurationComplete(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"RRCConnectionReconfigurationComplete Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_D(RRC,"RRCConnectionReconfigurationComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
   return((enc_rval.encoded+7)/8);
@@ -1946,7 +1946,7 @@ do_RRCConnectionSetup(
       if (carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present
 	  == SoundingRS_UL_ConfigCommon_PR_setup)
 	if (carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig!=0) 
-	  LOG_W(RRC,"This code has been optimized for SRS Subframe Config 0, but current config is %d. Expect undefined behaviour!\n",
+	  LOG_W(RRC,"This code has been optimized for SRS Subframe Config 0, but current config is %zd. Expect undefined behaviour!\n",
 		carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig);
       if (ue_context_pP->local_uid >=20) 
 	LOG_W(RRC,"This code has been optimized for up to 10 UEs, but current UE_id is %d. Expect undefined behaviour!\n",
@@ -1959,7 +1959,7 @@ do_RRCConnectionSetup(
       if (carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present
 	  == SoundingRS_UL_ConfigCommon_PR_setup)
 	if (carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig!=7) {
-	  LOG_W(RRC,"This code has been optimized for SRS Subframe Config 7 and TDD config 3, but current configs are %d and %d. Expect undefined behaviour!\n",
+	  LOG_W(RRC,"This code has been optimized for SRS Subframe Config 7 and TDD config 3, but current configs are %zd and %zd. Expect undefined behaviour!\n",
 		carrier->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig,
 		carrier->sib1->tdd_Config->subframeAssignment);
 	}
@@ -1969,7 +1969,7 @@ do_RRCConnectionSetup(
       physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=17+ue_context_pP->local_uid/2;
       physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb= ue_context_pP->local_uid%2;
     }
-    LOG_W(RRC,"local UID %d, srs ConfigIndex %d, TransmissionComb %d\n",ue_context_pP->local_uid,
+    LOG_W(RRC,"local UID %d, srs ConfigIndex %zd, TransmissionComb %zd\n",ue_context_pP->local_uid,
 	  physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex,
 	  physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb);
 
@@ -2115,7 +2115,7 @@ do_RRCConnectionSetup(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"RRCConnectionSetup Encoded %d bits (%d bytes), ecause %d\n",
+  LOG_D(RRC,"RRCConnectionSetup Encoded %zd bits (%zd bytes), ecause %d\n",
         enc_rval.encoded,(enc_rval.encoded+7)/8,ecause);
 #endif
 
@@ -2188,7 +2188,7 @@ do_SecurityModeCommand(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[eNB %d] securityModeCommand for UE %x Encoded %d bits (%d bytes)\n",
+  LOG_D(RRC,"[eNB %d] securityModeCommand for UE %x Encoded %zd bits (%zd bytes)\n",
         ctxt_pP->module_id,
         ctxt_pP->rnti,
         enc_rval.encoded,
@@ -2266,7 +2266,7 @@ do_UECapabilityEnquiry(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[eNB %d] UECapabilityRequest for UE %x Encoded %d bits (%d bytes)\n",
+  LOG_D(RRC,"[eNB %d] UECapabilityRequest for UE %x Encoded %zd bits (%zd bytes)\n",
         ctxt_pP->module_id,
         ctxt_pP->rnti,
         enc_rval.encoded,
@@ -2448,7 +2448,7 @@ do_RRCConnectionReconfiguration(
                                    (void*)&dl_dcch_msg,
                                    buffer,
                                    RRC_BUF_SIZE);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %l)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %zd)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #ifdef XER_PRINT
@@ -2475,7 +2475,7 @@ do_RRCConnectionReconfiguration(
 #endif
 
   //#ifdef USER_MODE
-  LOG_I(RRC,"RRCConnectionReconfiguration Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_I(RRC,"RRCConnectionReconfiguration Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
   // for (i=0;i<30;i++)
   //    msg("%x.",buffer[i]);
   // msg("\n");
@@ -2536,7 +2536,7 @@ do_RRCConnectionReestablishmentReject(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"RRCConnectionReestablishmentReject Encoded %d bits (%d bytes)\n",
+  LOG_D(RRC,"RRCConnectionReestablishmentReject Encoded %zd bits (%zd bytes)\n",
         enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
@@ -2597,7 +2597,7 @@ do_RRCConnectionReject(
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"RRCConnectionReject Encoded %d bits (%d bytes)\n",
+  LOG_D(RRC,"RRCConnectionReject Encoded %zd bits (%zd bytes)\n",
         enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
@@ -2788,7 +2788,7 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
 #endif
 
 #ifdef USER_MODE
-  LOG_D(RRC,"[eNB] MCCH Message Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
+  LOG_D(RRC,"[eNB] MCCH Message Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
 #endif
 
   if (enc_rval.encoded==-1) {
@@ -3011,7 +3011,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
   char UE_EUTRA_Capability_xer[8192];
   size_t size;
 
-  LOG_I(RRC,"Allocating %u bytes for UE_EUTRA_Capability\n",sizeof(*UE_EUTRA_Capability));
+  LOG_I(RRC,"Allocating %zu bytes for UE_EUTRA_Capability\n",sizeof(*UE_EUTRA_Capability));
 
   UE_EUTRA_Capability = CALLOC(1, sizeof(*UE_EUTRA_Capability));
 
@@ -3098,18 +3098,17 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
     // UE_EUTRA_Capability->measParameters.bandListEUTRA.list.count                         = 0;  // no measurements on other bands
     // UE_EUTRA_Capability->featureGroupIndicators  // null
 
-    // featureGroup is mandatory for CMW tests
-    // featureGroup is filled only for usim-test mode
-    BIT_STRING_t *bit_string;
-    uint32_t     featrG;
-    bit_string = CALLOC(1, sizeof(*bit_string));
-    featrG     = 0x04000800;
     if(usim_test == 1)
     {
-        bit_string->buf         = &featrG;
-        bit_string->size        = 4;
-        bit_string->bits_unused = 0;
-        UE_EUTRA_Capability->featureGroupIndicators = bit_string;
+      // featureGroup is mandatory for CMW tests
+      // featureGroup is filled only for usim-test mode
+      BIT_STRING_t *bit_string = CALLOC(1, sizeof(*bit_string));
+      char featrG[4]           = { 0x00, 0x08, 0x00, 0x04 };
+      bit_string->buf          = CALLOC(1, 4);
+      memcpy(bit_string->buf, featrG, 4);
+      bit_string->size         = 4;
+      bit_string->bits_unused  = 0;
+      UE_EUTRA_Capability->featureGroupIndicators = bit_string;
     }
 
     // UE_EUTRA_Capability->interRAT_Parameters     // null
@@ -3170,7 +3169,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
 #endif
 
   UECapability.sdu_size = (enc_rval.encoded + 7) / 8;
-  LOG_I(PHY, "[RRC]UE Capability encoded, %d bytes (%d bits)\n",
+  LOG_I(PHY, "[RRC]UE Capability encoded, %d bytes (%zd bits)\n",
         UECapability.sdu_size, enc_rval.encoded + 7);
   {
     char *sdu;
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
index 51eed0aff382ef12b7c71c5ae73f09f9e7bae068..207cdb6d2b1d1be5d827532eb6f63f2f4591776b 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e10.asn b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e30.asn
similarity index 83%
rename from openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e10.asn
rename to openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e30.asn
index cb13f30c0eef108b1d09e1bd68cbbab424c332cc..2f02a8b4e55c32a65b53653df40d0c6d23fbd36f 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e10.asn
+++ b/openair2/RRC/LITE/MESSAGES/asn1c/ASN1_files/RRC-e30.asn
@@ -11,6 +11,13 @@ BCCH-BCH-Message ::= SEQUENCE {
 BCCH-BCH-MessageType ::=                        MasterInformationBlock
 
 
+BCCH-BCH-Message-MBMS::= SEQUENCE {
+    message                 BCCH-BCH-MessageType-MBMS-r14
+}
+
+BCCH-BCH-MessageType-MBMS-r14 ::=                   MasterInformationBlock-MBMS-r14
+
+
 BCCH-DL-SCH-Message ::= SEQUENCE {
     message                 BCCH-DL-SCH-MessageType
 }
@@ -37,6 +44,19 @@ BCCH-DL-SCH-MessageType-BR-r13 ::= CHOICE {
 }
 
 
+BCCH-DL-SCH-Message-MBMS ::= SEQUENCE {
+    message                     BCCH-DL-SCH-MessageType-MBMS-r14
+}
+
+BCCH-DL-SCH-MessageType-MBMS-r14 ::= CHOICE {
+    c1                      CHOICE {
+        systemInformation-MBMS-r14                      SystemInformation-MBMS-r14,
+        systemInformationBlockType1-MBMS-r14                SystemInformationBlockType1-MBMS-r14
+    },
+    messageClassExtension   SEQUENCE {}
+}
+
+
 MCCH-Message ::=        SEQUENCE {
     message                 MCCH-MessageType
 }
@@ -130,21 +150,21 @@ UL-DCCH-Message ::= SEQUENCE {
 
 UL-DCCH-MessageType ::= CHOICE {
     c1                      CHOICE {
-        csfbParametersRequestCDMA2000           CSFBParametersRequestCDMA2000,
-        measurementReport                       MeasurementReport,
-        rrcConnectionReconfigurationComplete    RRCConnectionReconfigurationComplete,
-        rrcConnectionReestablishmentComplete    RRCConnectionReestablishmentComplete,
+        csfbParametersRequestCDMA2000               CSFBParametersRequestCDMA2000,
+        measurementReport                           MeasurementReport,
+        rrcConnectionReconfigurationComplete        RRCConnectionReconfigurationComplete,
+        rrcConnectionReestablishmentComplete        RRCConnectionReestablishmentComplete,
         rrcConnectionSetupComplete              RRCConnectionSetupComplete,
-        securityModeComplete                    SecurityModeComplete,
+        securityModeComplete                        SecurityModeComplete,
         securityModeFailure                     SecurityModeFailure,
         ueCapabilityInformation                 UECapabilityInformation,
-        ulHandoverPreparationTransfer           ULHandoverPreparationTransfer,
-        ulInformationTransfer                   ULInformationTransfer,
-        counterCheckResponse                    CounterCheckResponse,
-        ueInformationResponse-r9                UEInformationResponse-r9,
+        ulHandoverPreparationTransfer               ULHandoverPreparationTransfer,
+        ulInformationTransfer                       ULInformationTransfer,
+        counterCheckResponse                        CounterCheckResponse,
+        ueInformationResponse-r9                    UEInformationResponse-r9,
         proximityIndication-r9                  ProximityIndication-r9,
-        rnReconfigurationComplete-r10           RNReconfigurationComplete-r10,
-        mbmsCountingResponse-r10                MBMSCountingResponse-r10,
+        rnReconfigurationComplete-r10               RNReconfigurationComplete-r10,
+        mbmsCountingResponse-r10                    MBMSCountingResponse-r10,
         interFreqRSTDMeasurementIndication-r10  InterFreqRSTDMeasurementIndication-r10
     },
     messageClassExtension   CHOICE {
@@ -152,9 +172,9 @@ UL-DCCH-MessageType ::= CHOICE {
             ueAssistanceInformation-r11         UEAssistanceInformation-r11,
             inDeviceCoexIndication-r11          InDeviceCoexIndication-r11,
             mbmsInterestIndication-r11          MBMSInterestIndication-r11,
-            scgFailureInformation-r12           SCGFailureInformation-r12,
-            sidelinkUEInformation-r12           SidelinkUEInformation-r12,
-            wlanConnectionStatusReport-r13          WLANConnectionStatusReport-r13,
+            scgFailureInformation-r12               SCGFailureInformation-r12,
+            sidelinkUEInformation-r12               SidelinkUEInformation-r12,
+            wlanConnectionStatusReport-r13      WLANConnectionStatusReport-r13,
             rrcConnectionResumeComplete-r13     RRCConnectionResumeComplete-r13,
             spare9 NULL, spare8 NULL, spare7 NULL,
             spare6 NULL, spare5 NULL, spare4 NULL,
@@ -174,7 +194,13 @@ SC-MCCH-MessageType-r13 ::= CHOICE {
     c1                      CHOICE {
         scptmConfiguration-r13                      SCPTMConfiguration-r13
     },
-    messageClassExtension   SEQUENCE {}
+    messageClassExtension   CHOICE {
+        c2                          CHOICE {
+            scptmConfiguration-BR-r14               SCPTMConfiguration-BR-r14,
+            spare                                   NULL
+        },
+        messageClassExtensionFuture-r14 SEQUENCE {}
+    }
 }
 
 
@@ -360,9 +386,14 @@ InDeviceCoexIndication-v11d0-IEs ::=    SEQUENCE {
 }
 
 InDeviceCoexIndication-v1310-IEs ::=    SEQUENCE {
-    affectedCarrierFreqList-v1310       AffectedCarrierFreqList-v1310           OPTIONAL,
-    affectedCarrierFreqCombList-r13 AffectedCarrierFreqCombList-r13     OPTIONAL,
-    nonCriticalExtension                    SEQUENCE {}                             OPTIONAL
+    affectedCarrierFreqList-v1310       AffectedCarrierFreqList-v1310       OPTIONAL,
+    affectedCarrierFreqCombList-r13     AffectedCarrierFreqCombList-r13     OPTIONAL,
+    nonCriticalExtension                    InDeviceCoexIndication-v1360-IEs        OPTIONAL
+}
+
+InDeviceCoexIndication-v1360-IEs ::=    SEQUENCE {
+    hardwareSharingProblem-r13      ENUMERATED {true}                       OPTIONAL,
+    nonCriticalExtension                SEQUENCE {}                         OPTIONAL
 }
 
 AffectedCarrierFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreqIDC-r11)) OF AffectedCarrierFreq-r11
@@ -510,6 +541,15 @@ MasterInformationBlock ::=          SEQUENCE {
 
 
 
+MasterInformationBlock-MBMS-r14 ::=         SEQUENCE {
+    dl-Bandwidth-MBMS-r14                       ENUMERATED {
+                                            n6, n15, n25, n50, n75, n100},
+    systemFrameNumber-r14                   BIT STRING (SIZE (6)),
+    additionalNonMBSFNSubframes-r14     INTEGER (0..3),
+    spare                                   BIT STRING (SIZE (13))
+}
+
+
 MBMSCountingRequest-r10 ::=     SEQUENCE {
     countingRequestList-r10         CountingRequestList-r10,
     lateNonCriticalExtension        OCTET STRING                        OPTIONAL,
@@ -582,16 +622,23 @@ MBSFNAreaConfiguration-r9 ::=       SEQUENCE {
 
 MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE {
     lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
-    nonCriticalExtension                MBSFNAreaConfiguration-v1250-IEs        OPTIONAL
+    nonCriticalExtension                MBSFNAreaConfiguration-v1250-IEs    OPTIONAL
 }
 
 MBSFNAreaConfiguration-v1250-IEs ::= SEQUENCE {
     pmch-InfoListExt-r12                PMCH-InfoListExt-r12                OPTIONAL,   -- Need OR
+    nonCriticalExtension                MBSFNAreaConfiguration-v1430-IEs    OPTIONAL
+}
+
+MBSFNAreaConfiguration-v1430-IEs ::= SEQUENCE {
+    commonSF-Alloc-r14                  CommonSF-AllocPatternList-r14,
     nonCriticalExtension                SEQUENCE {}                         OPTIONAL
 }
 
 CommonSF-AllocPatternList-r9 ::=    SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig
 
+CommonSF-AllocPatternList-r14 ::=   SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig-v1430
+
 
 MeasurementReport ::=               SEQUENCE {
     criticalExtensions                  CHOICE {
@@ -904,12 +951,14 @@ RRCConnectionReconfiguration-v1310-IEs ::= SEQUENCE {
     lwa-Configuration-r13               LWA-Configuration-r13           OPTIONAL,   -- Need ON
     lwip-Configuration-r13              LWIP-Configuration-r13          OPTIONAL,   -- Need ON
     rclwi-Configuration-r13             RCLWI-Configuration-r13         OPTIONAL,   -- Need ON
-    nonCriticalExtension                RRCConnectionReconfiguration-v14x0-IEs                      OPTIONAL
+    nonCriticalExtension                RRCConnectionReconfiguration-v1430-IEs                      OPTIONAL
 }
 
-RRCConnectionReconfiguration-v14x0-IEs ::= SEQUENCE {
+RRCConnectionReconfiguration-v1430-IEs ::= SEQUENCE {
     sl-V2X-ConfigDedicated-r14      SL-V2X-ConfigDedicated-r14          OPTIONAL,   -- Need ON
-    sCellToAddModListExt-v14xy      SCellToAddModListExt-v14xy          OPTIONAL,   -- Need ON
+    sCellToAddModListExt-v1430      SCellToAddModListExt-v1430          OPTIONAL,   -- Need ON
+    perCC-GapIndicationRequest-r14  ENUMERATED{true}                    OPTIONAL,   -- Need ON
+    systemInformationBlockType2Dedicated-r14    OCTET STRING (CONTAINING SystemInformationBlockType2)                                                                           OPTIONAL,   -- Need ON
     nonCriticalExtension            SEQUENCE {}                         OPTIONAL
 }
 
@@ -942,7 +991,7 @@ SCellToAddModList-r10 ::=       SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddM
 
 SCellToAddModListExt-r13 ::=    SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-r13
 
-SCellToAddModListExt-v14xy ::=  SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-v14xy
+SCellToAddModListExt-v1430 ::=  SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-v1430
 
 SCellToAddMod-r10 ::=           SEQUENCE {
     sCellIndex-r10                      SCellIndex-r10,
@@ -972,8 +1021,9 @@ SCellToAddModExt-r13 ::=            SEQUENCE {
     antennaInfoDedicatedSCell-r13           AntennaInfoDedicated-v10i0      OPTIONAL    -- Need ON
 }
 
-SCellToAddModExt-v14xy ::=          SEQUENCE {
-    srs-SwitchFromServCellIndex-r14         INTEGER (0.. 31) OPTIONAL   -- Need ON
+SCellToAddModExt-v1430 ::=          SEQUENCE {
+    srs-SwitchFromServCellIndex-r14         INTEGER (0.. 31)            OPTIONAL,   -- Need ON
+    ...
 }
 
 SCellToReleaseList-r10 ::=          SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10
@@ -1053,6 +1103,13 @@ RRCConnectionReconfigurationComplete-v1130-IEs ::= SEQUENCE {
 
 RRCConnectionReconfigurationComplete-v1250-IEs ::= SEQUENCE {
     logMeasAvailableMBSFN-r12           ENUMERATED {true}               OPTIONAL,
+    nonCriticalExtension                RRCConnectionReconfigurationComplete-v1430-IEs                      OPTIONAL
+}
+
+RRCConnectionReconfigurationComplete-v1430-IEs ::= SEQUENCE {
+    perCC-GapIndicationList-r14         PerCC-GapIndicationList-r14     OPTIONAL,
+    numFreqEffective-r14                INTEGER (1..12)                 OPTIONAL,
+    numFreqEffectiveReduced-r14         INTEGER (1..12)                 OPTIONAL,
     nonCriticalExtension                SEQUENCE {}                     OPTIONAL
 }
 
@@ -1417,8 +1474,8 @@ RRCConnectionResume-r13 ::=     SEQUENCE {
     criticalExtensions                  CHOICE {
         c1                                  CHOICE {
             rrcConnectionResume-r13             RRCConnectionResume-r13-IEs,
-            spare3                              NULL, 
-            spare2                              NULL, 
+            spare3                              NULL,
+            spare2                              NULL,
             spare1                              NULL
         },
         criticalExtensionsFuture            SEQUENCE {}
@@ -1432,7 +1489,12 @@ RRCConnectionResume-r13-IEs ::=     SEQUENCE {
     antennaInfoDedicatedPCell-r13           AntennaInfoDedicated-v10i0      OPTIONAL,   -- Need ON
     drb-ContinueROHC-r13                    ENUMERATED {true}               OPTIONAL,   -- Need OP
     lateNonCriticalExtension                OCTET STRING                    OPTIONAL,
-    nonCriticalExtension                    SEQUENCE {}                     OPTIONAL
+    rrcConnectionResume-v1430-IEs           RRCConnectionResume-v1430-IEs   OPTIONAL
+}
+
+RRCConnectionResume-v1430-IEs ::= SEQUENCE {
+    otherConfig-r14             OtherConfig-r9              OPTIONAL,           -- Need ON
+    nonCriticalExtension        SEQUENCE {}                 OPTIONAL
 }
 
     
@@ -1549,17 +1611,22 @@ RRCConnectionSetupComplete-v1250-IEs ::= SEQUENCE {
 }
 
 RRCConnectionSetupComplete-v1320-IEs ::= SEQUENCE {
-    ce-ModeB-r13                        ENUMERATED {supported}          OPTIONAL,
-    s-TMSI-r13                              S-TMSI                          OPTIONAL,
-    attachWithoutPDN-Connectivity-r13       ENUMERATED {true}               OPTIONAL,
-    up-CIoT-EPS-Optimisation-r13            ENUMERATED {true}               OPTIONAL,
-    cp-CIoT-EPS-Optimisation-r13            ENUMERATED {true}               OPTIONAL,
-    nonCriticalExtension                RRCConnectionSetupComplete-v1330-IEs                OPTIONAL
+    ce-ModeB-r13                        ENUMERATED {supported}                      OPTIONAL,
+    s-TMSI-r13                          S-TMSI                                      OPTIONAL,
+    attachWithoutPDN-Connectivity-r13   ENUMERATED {true}                           OPTIONAL,
+    up-CIoT-EPS-Optimisation-r13        ENUMERATED {true}                           OPTIONAL,
+    cp-CIoT-EPS-Optimisation-r13        ENUMERATED {true}                           OPTIONAL,
+    nonCriticalExtension                RRCConnectionSetupComplete-v1330-IEs        OPTIONAL
 }
 
 RRCConnectionSetupComplete-v1330-IEs ::= SEQUENCE {
     ue-CE-NeedULGaps-r13                    ENUMERATED {true}               OPTIONAL,
-    nonCriticalExtension                    SEQUENCE {}                     OPTIONAL
+    nonCriticalExtension                RRCConnectionSetupComplete-v1430-IEs        OPTIONAL
+}
+
+RRCConnectionSetupComplete-v1430-IEs ::= SEQUENCE {
+    dcn-ID-r14                          INTEGER (0..65535)              OPTIONAL,
+    nonCriticalExtension                SEQUENCE {}                     OPTIONAL
 }
 
 RegisteredMME ::=                   SEQUENCE {
@@ -1585,10 +1652,16 @@ SCGFailureInformation-r12-IEs ::=   SEQUENCE {
 }
 
 SCGFailureInformation-v1310-IEs ::= SEQUENCE {
-    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
+    lateNonCriticalExtension            OCTET STRING (CONTAINING SCGFailureInformation-v12d0-IEs)                       OPTIONAL,
     nonCriticalExtension                SEQUENCE {}                         OPTIONAL
 }
 
+-- Late non-critical extensions:
+SCGFailureInformation-v12d0-IEs ::= SEQUENCE {
+    failureReportSCG-v12d0              FailureReportSCG-v12d0              OPTIONAL,   nonCriticalExtension                SEQUENCE {}                         OPTIONAL
+}
+
+-- Regular non-critical extensions:
 FailureReportSCG-r12 ::=            SEQUENCE {
     failureType-r12                     ENUMERATED {t313-Expiry, randomAccessProblem,
                                                 rlc-MaxNumRetx, scg-ChangeFailure },
@@ -1601,6 +1674,10 @@ FailureReportSCG-r12 ::=            SEQUENCE {
     ]]
 }
 
+FailureReportSCG-v12d0 ::= SEQUENCE {
+    measResultNeighCells-v12d0          MeasResultList2EUTRA-v9e0           OPTIONAL
+}
+
 
 SCPTMConfiguration-r13 ::=      SEQUENCE {
     sc-mtch-InfoList-r13            SC-MTCH-InfoList-r13,
@@ -1615,6 +1692,15 @@ SCPTMConfiguration-v1340 ::= SEQUENCE {
 }
 
 
+SCPTMConfiguration-BR-r14 ::=   SEQUENCE {
+    sc-mtch-InfoList-r14            SC-MTCH-InfoList-BR-r14,
+    scptm-NeighbourCellList-r14     SCPTM-NeighbourCellList-r13         OPTIONAL,   -- Need OP
+    p-b-r14                         INTEGER (0..3)                      OPTIONAL,   -- Need OR
+    lateNonCriticalExtension        OCTET STRING                        OPTIONAL,
+    nonCriticalExtension            SEQUENCE {}                         OPTIONAL
+}
+
+
 SecurityModeCommand ::=             SEQUENCE {
     rrc-TransactionIdentifier           RRC-TransactionIdentifier,
     criticalExtensions                  CHOICE {
@@ -1712,12 +1798,13 @@ SidelinkUEInformation-v1310-IEs ::= SEQUENCE {
     discRxGapReq-r13                    SL-GapRequest-r13           OPTIONAL,
     discTxGapReq-r13                    SL-GapRequest-r13           OPTIONAL,
     discSysInfoReportFreqList-r13       SL-DiscSysInfoReportFreqList-r13    OPTIONAL,
-    nonCriticalExtension            SidelinkUEInformation-v14x0-IEs                 OPTIONAL
+    nonCriticalExtension            SidelinkUEInformation-v1430-IEs                 OPTIONAL
 }
 
-SidelinkUEInformation-v14x0-IEs ::= SEQUENCE {
-    v2x-CommRxInterestedFreq-r14        INTEGER (0..maxFreq)                OPTIONAL,
-    v2x-CommTxResourceReq-r14           V2X-CommTxResourceReq-r14           OPTIONAL,
+SidelinkUEInformation-v1430-IEs ::= SEQUENCE {
+    v2x-CommRxInterestedFreqList-r14    SL-V2X-CommFreqList-r14             OPTIONAL,
+    p2x-CommTxType-r14                  ENUMERATED {true}                   OPTIONAL,
+    v2x-CommTxResourceReq-r14           SL-V2X-CommTxFreqList-r14           OPTIONAL,
     nonCriticalExtension                SEQUENCE {}                         OPTIONAL
 }
 
@@ -1726,11 +1813,6 @@ SL-CommTxResourceReq-r12 ::=        SEQUENCE {
     destinationInfoList-r12         SL-DestinationInfoList-r12
 }
 
-V2X-CommTxResourceReq-r14 ::=   SEQUENCE {
-    v2x-CommTxFreq-r14              INTEGER (0..maxFreq)                OPTIONAL,
-    v2x-DestinationInfoList-r14     SL-DestinationInfoList-r12          OPTIONAL
-}
-
 SL-DiscTxResourceReqPerFreqList-r13 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-DiscTxResourceReq-r13
 
 SL-DiscTxResourceReq-r13 ::=        SEQUENCE {
@@ -1744,9 +1826,23 @@ SL-DestinationIdentity-r12 ::=  BIT STRING (SIZE (24))
 
 SL-DiscSysInfoReportFreqList-r13 ::=    SEQUENCE (SIZE (1.. maxSL-DiscSysInfoReportFreq-r13)) OF SL-DiscSysInfoReport-r13
 
+SL-V2X-CommFreqList-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF INTEGER (0..maxFreqV2X-1-r14)
+
+SL-V2X-CommTxFreqList-r14 ::=   SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF SL-V2X-CommTxResourceReq-r14
+
+SL-V2X-CommTxResourceReq-r14 ::=        SEQUENCE {
+    carrierFreqCommTx-r14           INTEGER (0.. maxFreqV2X-1-r14)          OPTIONAL,
+    v2x-TypeTxSync-r14              SL-TypeTxSync-r14               OPTIONAL,
+    v2x-DestinationInfoList-r14     SL-DestinationInfoList-r12      OPTIONAL
+}
+
+SL-TypeTxSyncList-r14 ::=   SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF SL-TypeTxSync-r14
+
 
 SystemInformation-BR-r13 ::=    SystemInformation
 
+SystemInformation-MBMS-r14 ::=  SystemInformation
+
 SystemInformation ::=               SEQUENCE {
     criticalExtensions                  CHOICE {
         systemInformation-r8                SystemInformation-r8-IEs,
@@ -1775,7 +1871,7 @@ SystemInformation-r8-IEs ::=        SEQUENCE {
         sib18-v1250                         SystemInformationBlockType18-r12,
         sib19-v1250                         SystemInformationBlockType19-r12,
         sib20-v1310                         SystemInformationBlockType20-r13,
-        sib21-v14x0                         SystemInformationBlockType21-r14
+        sib21-v1430                         SystemInformationBlockType21-r14
     },
     nonCriticalExtension                SystemInformation-v8a0-IEs          OPTIONAL
 }
@@ -1895,11 +1991,24 @@ SystemInformationBlockType1-v1320-IEs ::=   SEQUENCE {
         }                                                                   OPTIONAL,   -- Need OR
         mpdcch-pdsch-HoppingOffset-r13          INTEGER (1..maxAvailNarrowBands-r13)    OPTIONAL    -- Need OR
     }                                                               OPTIONAL,   -- Cond Hopping
-    nonCriticalExtension                        SystemInformationBlockType1-v14xy-IEs                   OPTIONAL
+    nonCriticalExtension                        SystemInformationBlockType1-v1350-IEs                   OPTIONAL
+}
+
+SystemInformationBlockType1-v1350-IEs ::=   SEQUENCE {
+    cellSelectionInfoCE1-r13                CellSelectionInfoCE1-r13    OPTIONAL,   -- Need OP
+    nonCriticalExtension                    SystemInformationBlockType1-v1360-IEs               OPTIONAL
+}
+
+SystemInformationBlockType1-v1360-IEs ::=   SEQUENCE {
+    cellSelectionInfoCE1-v1360              CellSelectionInfoCE1-v1360  OPTIONAL,   -- Cond QrxlevminCE1
+    nonCriticalExtension                        SystemInformationBlockType1-v1430-IEs       OPTIONAL
 }
 
-SystemInformationBlockType1-v14xy-IEs ::=   SEQUENCE {
+SystemInformationBlockType1-v1430-IEs ::=   SEQUENCE {
     eCallOverIMS-Support-r14                ENUMERATED {true}           OPTIONAL,   -- Need OR
+    tdd-Config-v1430                        TDD-Config-v1430            OPTIONAL,   -- Cond TDD-OR
+    cellAccessRelatedInfoList-r14           SEQUENCE (SIZE (1..maxPLMN-1-r14)) OF 
+                                            CellAccessRelatedInfo-r14   OPTIONAL,   -- Need OR
     nonCriticalExtension                    SEQUENCE {}                 OPTIONAL
 }
 
@@ -1934,7 +2043,7 @@ SIB-Type ::=                        ENUMERATED {
                                         sibType11, sibType12-v920, sibType13-v920,
                                         sibType14-v1130, sibType15-v1130,
                                         sibType16-v1130, sibType17-v1250, sibType18-v1250,
-                                        ..., sibType19-v1250, sibType20-v1310, sibType21-v14x0}
+                                        ..., sibType19-v1250, sibType20-v1310, sibType21-v1430}
 
 SystemInfoValueTagList-r13 ::=      SEQUENCE (SIZE (1..maxSI-Message)) OF SystemInfoValueTagSI-r13
 
@@ -1953,6 +2062,56 @@ CellSelectionInfo-v1250 ::=         SEQUENCE {
     q-QualMinRSRQ-OnAllSymbols-r12                      Q-QualMin-r9
 }
 
+CellAccessRelatedInfo-r14 ::=   SEQUENCE {
+    plmn-IdentityList-r14               PLMN-IdentityList,
+    trackingAreaCode-r14                TrackingAreaCode,
+    cellIdentity-r14                    CellIdentity
+}
+
+
+SystemInformationBlockType1-MBMS-r14 ::=    SEQUENCE {
+    cellAccessRelatedInfo-r14               SEQUENCE {
+        plmn-IdentityList-r14                   PLMN-IdentityList-MBMS-r14,
+        trackingAreaCode-r14                        TrackingAreaCode,
+        cellIdentity-r14                            CellIdentity
+    },
+    freqBandIndicator-r14                   FreqBandIndicator-r11,
+    multiBandInfoList-r14                   MultiBandInfoList-r11               OPTIONAL, -- Need OR
+    schedulingInfoList-MBMS-r14         SchedulingInfoList-MBMS-r14,
+    si-WindowLength-r14                     ENUMERATED {
+                                                ms1, ms2, ms5, ms10, ms15, ms20,ms40, ms80},
+    systemInfoValueTag-r14                  INTEGER (0..31),
+    nonMBSFN-SubframeConfig-r14             NonMBSFN-SubframeConfig-r14     OPTIONAL, --Need OR
+    pdsch-ConfigCommon-r14                  PDSCH-ConfigCommon,
+    systemInformationBlockType13-r14        SystemInformationBlockType13-r9 OPTIONAL, --Need OR
+    cellAccessRelatedInfoList-r14       SEQUENCE (SIZE (1..maxPLMN-1-r14)) OF 
+                                            CellAccessRelatedInfo-r14   OPTIONAL,   -- Need OR
+    nonCriticalExtension                    SEQUENCE {}                         OPTIONAL
+}
+
+PLMN-IdentityList-MBMS-r14 ::=              SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-Identity
+
+SchedulingInfoList-MBMS-r14 ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo-MBMS-r14
+
+SchedulingInfo-MBMS-r14 ::= SEQUENCE {
+    si-Periodicity-r14                      ENUMERATED {
+                                                rf16, rf32, rf64, rf128, rf256, rf512},
+    sib-MappingInfo-r14                     SIB-MappingInfo-MBMS-r14
+}
+
+SIB-MappingInfo-MBMS-r14 ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type-MBMS-r14
+
+SIB-Type-MBMS-r14 ::=                   ENUMERATED {
+                                            sibType10, sibType11, sibType12-v920, sibType13-v920,
+                                            sibType15-v1130, sibType16-v1130, ...}
+
+
+NonMBSFN-SubframeConfig-r14 ::=         SEQUENCE {
+    radioFrameAllocationPeriod-r14      ENUMERATED {rf4, rf8, rf16, rf32, rf64, rf128, rf512},
+    radioFrameAllocationOffset-r14      INTEGER (0..7),
+    subframeAllocation-r14              BIT STRING (SIZE(9))
+}
+
 
 UEAssistanceInformation-r11 ::=             SEQUENCE {
     criticalExtensions                  CHOICE {
@@ -1966,8 +2125,48 @@ UEAssistanceInformation-r11 ::=             SEQUENCE {
 
 UEAssistanceInformation-r11-IEs ::=     SEQUENCE {
     powerPrefIndication-r11             ENUMERATED  {normal, lowPowerConsumption}   OPTIONAL,
-    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
-    nonCriticalExtension                SEQUENCE {}                         OPTIONAL
+    lateNonCriticalExtension            OCTET STRING                                    OPTIONAL,
+    nonCriticalExtension                UEAssistanceInformation-v1430-IEs           OPTIONAL
+}
+
+UEAssistanceInformation-v1430-IEs ::=       SEQUENCE    {
+    bw-Preference-r14                   BW-Preference-r14                                   OPTIONAL,
+    sps-AssistanceInformation-r14       SEQUENCE {
+        trafficPatternInfoListSL-r14        TrafficPatternInfoList-r14      OPTIONAL,
+        trafficPatternInfoListUL-r14        TrafficPatternInfoList-r14      OPTIONAL
+    }           OPTIONAL,
+    rlm-Report-r14                      SEQUENCE {
+        rlm-Event-r14                       ENUMERATED {earlyOutOfSync, earlyInSync},
+        excessRep-MPDCCH-r14                ENUMERATED {excessRep1, excessRep2}     OPTIONAL
+    }                                                                               OPTIONAL,   delayBudgetReport-r14               DelayBudgetReport-r14                       OPTIONAL,
+    nonCriticalExtension                SEQUENCE {}                                 OPTIONAL
+}
+
+BW-Preference-r14 ::= SEQUENCE {
+    dl-Preference-r14       ENUMERATED  {mhz1dot4, mhz5, mhz20 }                        OPTIONAL,
+    ul-Preference-r14       ENUMERATED  {mhz1dot4, mhz5}                        OPTIONAL
+}
+
+TrafficPatternInfoList-r14 ::= SEQUENCE (SIZE (1..maxTrafficPattern-r14)) OF TrafficPatternInfo-r14
+
+TrafficPatternInfo-r14 ::=  SEQUENCE {
+    trafficPeriodicity-r14          ENUMERATED {
+                                            sf20, sf50, sf100, sf200, sf300, sf400, sf500,
+                                            sf600, sf700, sf800, sf900, sf1000},
+    timingOffset-r14                    INTEGER (0..10239),
+    priorityInfoSL-r14                  SL-Priority-r13                             OPTIONAL,
+    logicalChannelIdentityUL-r14        INTEGER (3..10)                             OPTIONAL,
+    messageSize-r14                 BIT STRING (SIZE (6))
+}
+
+DelayBudgetReport-r14::=    CHOICE {
+    type1                           ENUMERATED {
+                                        msMinus1280, msMinus640, msMinus320, msMinus160,
+                                        msMinus80, msMinus60, msMinus40, msMinus20, ms0, ms20,                                              ms40, ms60, ms80, ms160, ms320, ms640, ms1280}, 
+
+    type2                           ENUMERATED {
+                                        msMinus192, msMinus168,msMinus144, msMinus120, 
+                                        msMinus96, msMinus72, msMinus48, msMinus24, ms0, ms24,                                              ms48, ms72, ms96, ms120, ms144, ms168, ms192}
 }
 
 
@@ -2003,6 +2202,11 @@ UECapabilityEnquiry-v1310-IEs ::=   SEQUENCE {
     requestedMaxCCsDL-r13               INTEGER (2..32)                 OPTIONAL,   -- Need ON
     requestedMaxCCsUL-r13               INTEGER (2..32)                 OPTIONAL,   -- Need ON
     requestReducedIntNonContComb-r13    ENUMERATED {true}                   OPTIONAL,   -- Need ON
+    nonCriticalExtension                UECapabilityEnquiry-v1430-IEs       OPTIONAL
+}
+
+UECapabilityEnquiry-v1430-IEs ::=   SEQUENCE {
+    requestDiffFallbackCombList-r14     BandCombinationList-r14         OPTIONAL,   -- Need ON
     nonCriticalExtension                SEQUENCE {}                     OPTIONAL
 }
 
@@ -2183,6 +2387,8 @@ RLF-Report-r9 ::=                   SEQUENCE {
         measResultListEUTRA-v1250       MeasResultList2EUTRA-v1250      OPTIONAL
     ]],
     [[  drb-EstablishedWithQCI-1-r13            ENUMERATED {qci1}               OPTIONAL
+    ]],
+    [[  measResultLastServCell-v1360            RSRP-Range-v1360                OPTIONAL
     ]]
 }
 
@@ -2258,6 +2464,8 @@ LogMeasInfo-r10 ::=         SEQUENCE {
         measResultListEUTRA-v1250           MeasResultList2EUTRA-v1250  OPTIONAL
     ]],
     [[  inDeviceCoexDetected-r13            ENUMERATED {true}           OPTIONAL
+    ]],
+    [[  measResultServCell-v1360            RSRP-Range-v1360            OPTIONAL
     ]]
 }
 
@@ -2316,6 +2524,8 @@ ConnEstFailReport-r11 ::=               SEQUENCE {
     [[  measResultFailedCell-v1250      RSRQ-Range-v1250                OPTIONAL,
         failedCellRSRQ-Type-r12         RSRQ-Type-r12                   OPTIONAL,
         measResultListEUTRA-v1250       MeasResultList2EUTRA-v1250      OPTIONAL
+    ]],
+    [[  measResultFailedCell-v1360      RSRP-Range-v1360            OPTIONAL
     ]]
 }
 
@@ -2387,6 +2597,11 @@ WLANConnectionStatusReport-r13 ::=  SEQUENCE {
 WLANConnectionStatusReport-r13-IEs ::=  SEQUENCE {
     wlan-Status-r13                 WLAN-Status-r13,
     lateNonCriticalExtension        OCTET STRING                        OPTIONAL,
+    nonCriticalExtension            WLANConnectionStatusReport-v1430-IEs    OPTIONAL
+}
+
+WLANConnectionStatusReport-v1430-IEs ::=    SEQUENCE {
+    wlan-Status-v1430               WLAN-Status-v1430,
     nonCriticalExtension            SEQUENCE {}                         OPTIONAL
 }
 
@@ -2425,10 +2640,15 @@ SystemInformationBlockType2 ::=     SEQUENCE {
         acdc-BarringPerPLMN-List-r13        ACDC-BarringPerPLMN-List-r13    OPTIONAL    -- Need OP
     ]],
     [[
-        udt-RestrictingForCommon-r13            UDT-Restricting-r13             OPTIONAL,   -- Need OR
+        udt-RestrictingForCommon-r13        UDT-Restricting-r13             OPTIONAL,   -- Need OR
         udt-RestrictingPerPLMN-List-r13     UDT-RestrictingPerPLMN-List-r13 OPTIONAL,   -- Need OR
         cIoT-EPS-OptimisationInfo-r13       CIOT-EPS-OptimisationInfo-r13   OPTIONAL,   -- Need OP
         useFullResumeID-r13                 ENUMERATED {true}               OPTIONAL    -- Need OP
+    ]],
+    [[  unicastFreqHoppingInd-r13           ENUMERATED {true}               OPTIONAL    -- Need OP
+    ]],
+    [[  mbsfn-SubframeConfigList-v1430      MBSFN-SubframeConfigList-v1430  OPTIONAL,   -- Need OP
+        videoServiceCauseIndication-r14     ENUMERATED {true}               OPTIONAL    -- Need OP
     ]]
 
 }
@@ -2453,6 +2673,8 @@ AC-BarringConfig ::=                SEQUENCE {
 
 MBSFN-SubframeConfigList ::=        SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig
 
+MBSFN-SubframeConfigList-v1430 ::=      SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig-v1430
+
 AC-BarringPerPLMN-List-r12 ::=      SEQUENCE (SIZE (1.. maxPLMN-r11)) OF AC-BarringPerPLMN-r12
 
 AC-BarringPerPLMN-r12 ::=           SEQUENCE {
@@ -2567,7 +2789,11 @@ SystemInformationBlockType3 ::=     SEQUENCE {
         redistributionServingInfo-r13           RedistributionServingInfo-r13 OPTIONAL, --Need OR
         cellSelectionInfoCE-r13                 CellSelectionInfoCE-r13     OPTIONAL,       -- Need OP
         t-ReselectionEUTRA-CE-r13               T-ReselectionEUTRA-CE-r13   OPTIONAL        -- Need OP
-        ]]
+    ]],
+    [[  cellSelectionInfoCE1-r13                CellSelectionInfoCE1-r13    OPTIONAL    -- Need OP
+    ]],
+    [[  cellSelectionInfoCE1-v1360          CellSelectionInfoCE1-v1360  OPTIONAL        -- Cond QrxlevminCE1
+    ]]
 }
 
 RedistributionServingInfo-r13 ::=       SEQUENCE {
@@ -2620,6 +2846,13 @@ SystemInformationBlockType5 ::=     SEQUENCE {
     ]],
     [[  interFreqCarrierFreqList-v1310      InterFreqCarrierFreqList-v1310      OPTIONAL,   -- Need OR
         interFreqCarrierFreqListExt-v1310   InterFreqCarrierFreqListExt-v1310   OPTIONAL    -- Need OR
+    ]],
+    [[  interFreqCarrierFreqList-v1350      InterFreqCarrierFreqList-v1350  OPTIONAL,   -- Need OR
+    interFreqCarrierFreqListExt-v1350   InterFreqCarrierFreqListExt-v1350   OPTIONAL    -- Need OR
+    ]],
+    [[  interFreqCarrierFreqListExt-v1360   InterFreqCarrierFreqListExt-v1360   OPTIONAL    -- Need OR
+    ]],
+    [[  scptm-FreqOffset-r14                INTEGER (1..8)                  OPTIONAL    -- Need OP 
     ]]
 }
 
@@ -2642,14 +2875,20 @@ InterFreqCarrierFreqList ::=        SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCar
 
 InterFreqCarrierFreqList-v1250 ::=  SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1250
 
+InterFreqCarrierFreqList-v1310 ::=  SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1310
+
+InterFreqCarrierFreqList-v1350 ::=  SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1350
+
 InterFreqCarrierFreqListExt-r12 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-r12
 
 InterFreqCarrierFreqListExt-v1280 ::=   SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v10j0
 
-InterFreqCarrierFreqList-v1310 ::=  SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1310
-
 InterFreqCarrierFreqListExt-v1310 ::=   SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1310
 
+InterFreqCarrierFreqListExt-v1350 ::=   SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1350
+
+InterFreqCarrierFreqListExt-v1360 ::=   SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1360
+
 InterFreqCarrierFreqInfo ::=    SEQUENCE {
     dl-CarrierFreq                      ARFCN-ValueEUTRA,
     q-RxLevMin                          Q-RxLevMin,
@@ -2729,6 +2968,14 @@ InterFreqCarrierFreqInfo-v1310  ::= SEQUENCE {
     t-ReselectionEUTRA-CE-r13           T-ReselectionEUTRA-CE-r13       OPTIONAL    -- Need OP
 }
 
+InterFreqCarrierFreqInfo-v1350  ::= SEQUENCE {
+    cellSelectionInfoCE1-r13            CellSelectionInfoCE1-r13            OPTIONAL    -- Need OP
+}
+
+InterFreqCarrierFreqInfo-v1360  ::= SEQUENCE {
+    cellSelectionInfoCE1-v1360      CellSelectionInfoCE1-v1360  OPTIONAL    -- Cond QrxlevminCE1
+}
+
 InterFreqNeighCellList ::=          SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo
 
 InterFreqNeighCellInfo ::=          SEQUENCE {
@@ -3058,7 +3305,10 @@ SystemInformationBlockType13-r9 ::= SEQUENCE {
     mbsfn-AreaInfoList-r9               MBSFN-AreaInfoList-r9,
     notificationConfig-r9               MBMS-NotificationConfig-r9,
     lateNonCriticalExtension            OCTET STRING                    OPTIONAL,
-    ...
+    ...,
+    [[  
+     notificationConfig-v1430           MBMS-NotificationConfig-v1430       OPTIONAL
+    ]]
 }
 
 
@@ -3087,6 +3337,10 @@ SystemInformationBlockType15-r11 ::=    SEQUENCE {
     lateNonCriticalExtension                OCTET STRING                    OPTIONAL,
     ...,
     [[  mbms-SAI-InterFreqList-v1140        MBMS-SAI-InterFreqList-v1140    OPTIONAL    -- Cond InterFreq
+    ]],
+    [[  mbms-IntraFreqCarrierType-r14       MBMS-CarrierType-r14            OPTIONAL,   -- Need OR
+        mbms-InterFreqCarrierTypeList-r14   
+                                            MBMS-InterFreqCarrierTypeList-r14   OPTIONAL    -- Need OR
     ]]
 }
 
@@ -3107,6 +3361,12 @@ MBMS-SAI-InterFreq-v1140 ::=            SEQUENCE {
         multiBandInfoList-r11               MultiBandInfoList-r11           OPTIONAL    -- Need OR
 }
 
+MBMS-InterFreqCarrierTypeList-r14 ::=   SEQUENCE (SIZE (1..maxFreq)) OF MBMS-CarrierType-r14
+
+MBMS-CarrierType-r14 ::=                SEQUENCE {
+    carrierType-r14                         ENUMERATED {mbms, fembmsMixed, fembmsDedicated},
+    frameOffset-r14                         INTEGER (0..3)                  OPTIONAL    -- Need OR
+}
 
 
 SystemInformationBlockType16-r11 ::=        SEQUENCE {
@@ -3251,40 +3511,96 @@ SL-ResourcesInterFreq-r13 ::= SEQUENCE {
 
 
 SystemInformationBlockType20-r13 ::=    SEQUENCE {
-    sc-mcch-RepetionPeriod-r13      ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256},
+    sc-mcch-RepetitionPeriod-r13        ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256},
     sc-mcch-Offset-r13              INTEGER (0..10),
     sc-mcch-FirstSubframe-r13       INTEGER (0..9),
     sc-mcch-duration-r13            INTEGER (2..9)  OPTIONAL,
     sc-mcch-ModificationPeriod-r13  ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256,
                                          rf512, rf1024, r2048, rf4096, rf8192, rf16384, rf32768,                                                 rf65536},
-    lateNonCriticalExtension            OCTET STRING                    OPTIONAL,
+    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
+    ...,
+    [[  br-BCCH-Config-r14                  SEQUENCE {
+            sc-mcch-RepetitionPeriod-v1430      ENUMERATED {rf1},
+            sc-mcch-ModificationPeriod-v1430    ENUMERATED {rf1},
+            mpdcch-Narrowband-SC-MCCH-r14       INTEGER (1..maxAvailNarrowBands-r13),
+            mpdcch-NumRepetition-SC-MCCH-r14    ENUMERATED {r1, r2, r4, r8, r16, 
+                                                            r32, r64, r128, r256},
+            mpdcch-StartSF-SC-MCCH-r14          CHOICE {
+                fdd-r14                             ENUMERATED {v1, v1dot5, v2, v2dot5, v4,
+                                                                v5, v8, v10},
+                tdd-r14                             ENUMERATED {v1, v2, v4, v5, v8, v10, v20}
+            },
+            mpdcch-PDSCH-HoppingConfig-SC-MCCH-r14  ENUMERATED {off, ce-ModeA, ce-ModeB},
+            sc-mcch-CarrierFreq-r14             ARFCN-ValueEUTRA-r9,
+            sc-mcch-Offset-BR-r14               INTEGER (0..10),
+            sc-mcch-RepetitionPeriod-BR-r14     ENUMERATED {rf32, rf128, rf512, rf1024,
+                                                    rf2048, rf4096, rf8192, rf16384},
+            sc-mcch-ModificationPeriod-BR-r14   ENUMERATED { rf32, rf128, rf256, rf512, rf1024, 
+                                                    rf2048, rf4096, rf8192, rf16384, rf32768, 
+                                                    rf65536, rf131072, rf262144, rf524288, 
+                                                    rf1048576}
+        }                                                                   OPTIONAL,   -- Need OR
+        sc-mcch-SchedulingInfo-r14          SC-MCCH-SchedulingInfo-r14      OPTIONAL,   -- Need OP
+        pdsch-maxNumRepetitionCEmodeA-SC-MTCH-r14
+                                            ENUMERATED { r16, r32 }     OPTIONAL,   -- Need OR
+        pdsch-maxNumRepetitionCEmodeB-SC-MTCH-r14
+                                            ENUMERATED {
+                                                r192, r256, r384, r512, r768, r1024, 
+                                                r1536, r2048}               OPTIONAL    -- Need OR
+    ]]
+}
+
+SC-MCCH-SchedulingInfo-r14::=   SEQUENCE    {
+    onDurationTimerSCPTM-r14            ENUMERATED {psf10, psf20, psf100, psf300, 
+                                                psf500, psf1000, psf1200, psf1600},
+    drx-InactivityTimerSCPTM-r14        ENUMERATED {psf0, psf1, psf2, psf4, psf8, psf16, 
+                                                psf32, psf64, psf128, psf256, ps512, 
+                                                psf1024, psf2048, psf4096, psf8192, psf16384},
+    schedulingPeriodStartOffsetSCPTM-r14    CHOICE {
+        sf10                                    INTEGER(0..9),
+        sf20                                    INTEGER(0..19),
+        sf32                                    INTEGER(0..31),
+        sf40                                    INTEGER(0..39),
+        sf64                                    INTEGER(0..63),
+        sf80                                    INTEGER(0..79),
+        sf128                                   INTEGER(0..127),
+        sf160                                   INTEGER(0..159),
+        sf256                                   INTEGER(0..255),
+        sf320                                   INTEGER(0..319),
+        sf512                                   INTEGER(0..511),
+        sf640                                   INTEGER(0..639),
+        sf1024                                  INTEGER(0..1023),
+        sf2048                                  INTEGER(0..2047),
+        sf4096                                  INTEGER(0..4095),
+        sf8192                                  INTEGER(0..8191)
+    },
     ...
 }
 
 
 SystemInformationBlockType21-r14 ::= SEQUENCE {
-    sl-V2X-ConfigCommon-r14         SL-V2X-ConfigCommon-r14         OPTIONAL,   -- Need OR
-    lateNonCriticalExtension        OCTET STRING                    OPTIONAL,
+    sl-V2X-ConfigCommon-r14             SL-V2X-ConfigCommon-r14             OPTIONAL,   -- Need OR
+    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
     ...
 }
 
 SL-V2X-ConfigCommon-r14 ::=     SEQUENCE {
     v2x-CommRxPool-r14                  SL-CommRxPoolListV2X-r14            OPTIONAL,   -- Need OR
     v2x-CommTxPoolNormalCommon-r14      SL-CommTxPoolListV2X-r14            OPTIONAL,   -- Need OR
+    p2x-CommTxPoolNormalCommon-r14      SL-CommTxPoolListV2X-r14            OPTIONAL,   -- Need OR
     v2x-CommTxPoolExceptional-r14       SL-CommResourcePoolV2X-r14          OPTIONAL,   -- Need OR
     v2x-SyncConfig-r14                  SL-SyncConfigListV2X-r14            OPTIONAL,   -- Need OR
     v2x-InterFreqInfoList-r14           SL-InterFreqInfoListV2X-r14         OPTIONAL,   -- Need OR
-    v2x-ResourceSelectionConfig-r14         SL-CommTxPoolSensingConfig-r14      OPTIONAL,   -- Need OR
-    zoneConfig-r14                      SL-ZoneConfig-r14                   OPTIONAL    -- Need OR
+    v2x-ResourceSelectionConfig-r14     SL-CommTxPoolSensingConfig-r14      OPTIONAL,   -- Need OR
+    zoneConfig-r14                      SL-ZoneConfig-r14                   OPTIONAL,   -- Need OR
+    typeTxSync-r14                      SL-TypeTxSync-r14                   OPTIONAL,   -- Need OR
+    thresSL-TxPrioritization-r14        SL-Priority-r13                     OPTIONAL,   -- Need OR
+    anchorCarrierFreqList-r14           SL-AnchorCarrierFreqList-V2X-r14    OPTIONAL,   -- Need OR
+    offsetDFN-r14                       INTEGER (0..1000)                   OPTIONAL,   -- Need OR
+    cbr-CommonTxConfigList-r14          SL-CBR-CommonTxConfigList-r14       OPTIONAL    -- Need OR
 }
 
-SL-CommTxPoolSensingConfig-r14 ::=      SEQUENCE {
-    pssch-TxConfigList-r14                  SL-PSSCH-TxConfigList-r14,
-    thresPSSCH-RSRP-List-r14                SL-ThresPSSCH-RSRP-List-r14,
-    restrictResourceReservationPeriodList-r14   SL-RestrictResourceReservationPeriodList-r14    OPTIONAL,   -- Need OR
-    probResourceKeep-r14                ENUMERATED {v0, v0dot2, v0dot4, v0dot6, v0dot8,
-                                                    spare3,spare2, spare1}
-}
+
 
 AntennaInfoCommon ::=               SEQUENCE {
     antennaPortsCount                   ENUMERATED {an1, an2, an4, spare1}
@@ -3337,6 +3653,10 @@ AntennaInfoDedicated-v1250 ::=      SEQUENCE {
     alternativeCodebookEnabledFor4TX-r12    BOOLEAN
 }
 
+AntennaInfoDedicated-v1430 ::=      SEQUENCE {
+    ce-UE-TxAntennaSelection-config-r14         ENUMERATED {on}     OPTIONAL    -- Need OR 
+}
+
 
 AntennaInfoUL-r10 ::=       SEQUENCE {
     transmissionModeUL-r10              ENUMERATED {tm1, tm2, spare6, spare5,
@@ -3399,6 +3719,10 @@ CQI-ReportConfig-v1320 ::=          SEQUENCE {
         cqi-ReportPeriodic-v1320            CQI-ReportPeriodic-v1320    OPTIONAL    -- Need ON
 }
 
+CQI-ReportConfig-v1430 ::=          SEQUENCE {
+        cqi-ReportAperiodicHybrid-r14       CQI-ReportAperiodicHybrid-r14   OPTIONAL    -- Need ON
+}
+
 CQI-ReportConfigSCell-r10 ::=               SEQUENCE {
     cqi-ReportModeAperiodic-r10         CQI-ReportModeAperiodic OPTIONAL,           -- Need OR
     nomPDSCH-RS-EPRE-Offset-r10             INTEGER (-1..6),
@@ -3561,6 +3885,28 @@ CQI-ReportAperiodicProc-v1310   ::=     SEQUENCE {
     trigger111-r13                      BOOLEAN
 }
 
+CQI-ReportAperiodicHybrid-r14   ::=     SEQUENCE {
+    triggers-r14                        CHOICE {
+        oneBit-r14                          SEQUENCE {
+            trigger1-Indicator-r14              BIT STRING (SIZE (8))
+        },
+        twoBit-r14                          SEQUENCE {
+            trigger01-Indicator-r14         BIT STRING (SIZE (8)),
+            trigger10-Indicator-r14         BIT STRING (SIZE (8)),
+            trigger11-Indicator-r14         BIT STRING (SIZE (8))
+        },
+        threeBit-r14                        SEQUENCE {
+            trigger001-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger010-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger011-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger100-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger101-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger110-Indicator-r14            BIT STRING (SIZE (32)),
+            trigger111-Indicator-r14            BIT STRING (SIZE (32))
+        }
+    }                                                               OPTIONAL    -- Need OR
+}
+
 CQI-ReportModeAperiodic ::=             ENUMERATED {
                                             rm12, rm20, rm22, rm30, rm31,
                                             rm32-v1250, rm10-v1310, rm11-v1310
@@ -3699,6 +4045,10 @@ CSI-Process-r11 ::=     SEQUENCE {
             setup                           CQI-ReportAperiodicProc-v1310
         }                                                               OPTIONAL,       -- Need ON
         eMIMO-Type-r13                  CSI-RS-ConfigEMIMO-r13          OPTIONAL        -- Need ON
+    ]],
+    [[  eMIMO-Type-v1430                CSI-RS-ConfigEMIMO-v1430        OPTIONAL,       -- Need ON
+        eMIMO-Hybrid-r14                CSI-RS-ConfigEMIMO-Hybrid-r14       OPTIONAL,   -- Need ON
+        advancedCodebookEnabled-r14     BOOLEAN                         OPTIONAL        -- Need ON
     ]]
 }
 
@@ -3733,6 +4083,12 @@ CSI-RS-Config-v1310 ::=     SEQUENCE {
     eMIMO-Type-r13              CSI-RS-ConfigEMIMO-r13          OPTIONAL    -- Need ON
 }
 
+CSI-RS-Config-v1430 ::=     SEQUENCE {
+    eMIMO-Type-v1430                CSI-RS-ConfigEMIMO-v1430            OPTIONAL,   -- Need ON
+    eMIMO-Hybrid-r14                CSI-RS-ConfigEMIMO-Hybrid-r14       OPTIONAL,   -- Need ON
+    advancedCodebookEnabled-r14     BOOLEAN                             OPTIONAL    -- Need ON
+}
+
 ZeroTxPowerCSI-RS-Conf-r12 ::=  CHOICE {
         release                         NULL,
         setup                           ZeroTxPowerCSI-RS-r12 
@@ -3752,6 +4108,27 @@ CSI-RS-ConfigEMIMO-r13 ::=  CHOICE {
     }
 }
 
+CSI-RS-ConfigEMIMO-v1430 ::=    CHOICE {
+    release                     NULL,
+    setup                       CHOICE {
+        nonPrecoded-v1430               CSI-RS-ConfigNonPrecoded-v1430,
+        beamformed-v1430                CSI-RS-ConfigBeamformed-v1430
+    }
+}
+
+CSI-RS-ConfigEMIMO2-r14 ::= CHOICE {
+    release                     NULL,
+    setup                       CSI-RS-ConfigBeamformed-r14
+}
+
+CSI-RS-ConfigEMIMO-Hybrid-r14 ::=   CHOICE {
+    release                     NULL,
+    setup                       SEQUENCE {
+        periodicityOffsetIndex-r14          INTEGER (0..1023)               OPTIONAL,   -- Need OR
+        eMIMO-Type2-r14                     CSI-RS-ConfigEMIMO2-r14     OPTIONAL    -- Need ON
+    }
+}
+
 CSI-RS-ConfigNonPrecoded-r13 ::=        SEQUENCE {
     p-C-AndCBSRList-r13                     P-C-AndCBSR-Pair-r13            OPTIONAL,   -- Need OR
     codebookConfigN1-r13                    ENUMERATED {n1, n2, n3, n4, n8},
@@ -3763,6 +4140,13 @@ CSI-RS-ConfigNonPrecoded-r13 ::=        SEQUENCE {
     csi-RS-ConfigNZP-EMIMO-r13              CSI-RS-ConfigNZP-EMIMO-r13      OPTIONAL    -- Need ON
 }
 
+CSI-RS-ConfigNonPrecoded-v1430::=       SEQUENCE {
+    csi-RS-ConfigNZP-EMIMO-v1430            CSI-RS-ConfigNZP-EMIMO-v1430    OPTIONAL,   -- Need ON
+    codebookConfigN1-v1430                  ENUMERATED {n5, n6, n7, n10, n12, n14, n16},
+    codebookConfigN2-r1430                  ENUMERATED {n5, n6, n7 },
+    nzp-ResourceConfigTM9-Original-v1430    CSI-RS-Config-NZP-v1430
+}
+
 CSI-RS-ConfigBeamformed-r13 ::=         SEQUENCE    {
     csi-RS-ConfigNZPIdListExt-r13           SEQUENCE (SIZE (1..7)) OF CSI-RS-ConfigNZPId-r13    OPTIONAL,   -- Need OR
     csi-IM-ConfigIdList-r13                 SEQUENCE (SIZE (1..8)) OF CSI-IM-ConfigId-r13   OPTIONAL,   -- Need OR
@@ -3772,6 +4156,36 @@ CSI-RS-ConfigBeamformed-r13 ::=         SEQUENCE    {
     channelMeasRestriction-r13              ENUMERATED {on}         OPTIONAL    -- Need OR
 }
 
+CSI-RS-ConfigBeamformed-r14 ::=         SEQUENCE    {
+    csi-RS-ConfigNZPIdListExt-r14           SEQUENCE (SIZE (1..7)) OF CSI-RS-ConfigNZPId-r13    OPTIONAL,   -- Need OR
+    csi-IM-ConfigIdList-r14                 SEQUENCE (SIZE (1..8)) OF CSI-IM-ConfigId-r13   OPTIONAL,   -- Need OR
+    p-C-AndCBSR-PerResourceConfigList-r14   SEQUENCE (SIZE (1..8)) OF P-C-AndCBSR-Pair-r13  OPTIONAL,   -- Need OR
+    ace-For4Tx-PerResourceConfigList-r14    SEQUENCE (SIZE (1..7)) OF BOOLEAN   OPTIONAL,   -- Need OR
+    alternativeCodebookEnabledBeamformed-r14    ENUMERATED {true}   OPTIONAL,   -- Need OR
+    channelMeasRestriction-r14              ENUMERATED {on}         OPTIONAL,   -- Need OR
+    csi-RS-ConfigNZP-ApList-r14             SEQUENCE (SIZE (1..8)) OF CSI-RS-ConfigNZP-r11
+                                                                            OPTIONAL,   -- Need OR
+    nzp-ResourceConfigOriginal-v1430    CSI-RS-Config-NZP-v1430     OPTIONAL,   -- Need OR
+    csi-RS-NZP-Activation-r14               CSI-RS-ConfigNZP-Activation-r14 OPTIONAL        -- Need OR
+}
+
+CSI-RS-ConfigBeamformed-v1430::=        SEQUENCE {
+    csi-RS-ConfigNZP-ApList-r14             SEQUENCE (SIZE (1..8)) OF CSI-RS-ConfigNZP-r11
+                                                                            OPTIONAL,   -- Need OR
+    nzp-ResourceConfigOriginal-v1430    CSI-RS-Config-NZP-v1430     OPTIONAL,   -- Need OR
+    csi-RS-NZP-Activation-r14               CSI-RS-ConfigNZP-Activation-r14 OPTIONAL        -- Need OR
+}
+
+CSI-RS-Config-NZP-v1430::=      SEQUENCE {
+    transmissionComb-r14                    NZP-TransmissionComb-r14    OPTIONAL,   -- Need OR
+    frequencyDensity-r14                    NZP-FrequencyDensity-r14    OPTIONAL    -- Need OR
+}
+
+CSI-RS-ConfigNZP-Activation-r14::=      SEQUENCE {
+    csi-RS-NZP-mode-r14                     ENUMERATED {semiPersistent, aperiodic},
+    activatedResources-r14                  INTEGER (0..4)
+}
+
 
 CSI-RS-ConfigNZP-r11 ::=        SEQUENCE {
     csi-RS-ConfigNZPId-r11          CSI-RS-ConfigNZPId-r11,
@@ -3791,6 +4205,16 @@ CSI-RS-ConfigNZP-r11 ::=        SEQUENCE {
     }                                                                   OPTIONAL,   -- Need OR
     ...,
     [[  csi-RS-ConfigNZPId-v1310        CSI-RS-ConfigNZPId-v1310        OPTIONAL    -- Need ON
+    ]],
+    [[  transmissionComb-r14            NZP-TransmissionComb-r14        OPTIONAL,   -- Need OR
+        frequencyDensity-r14            NZP-FrequencyDensity-r14        OPTIONAL    -- Need OR
+    ]],
+    [[  mbsfn-SubframeConfigList-v1430  CHOICE {
+                release                     NULL,
+                setup                       SEQUENCE {
+                    subframeConfigList-v1430    MBSFN-SubframeConfigList-v1430
+                }
+        }                                                               OPTIONAL    -- Need OP
     ]]
 }
 
@@ -3802,13 +4226,25 @@ CSI-RS-ConfigNZP-EMIMO-r13 ::=  CHOICE {
         }
 }
 
+CSI-RS-ConfigNZP-EMIMO-v1430 ::=    SEQUENCE {
+    -- All extensions are for Non-Precoded so could be grouped by setup/ release choice
+    nzp-resourceConfigListExt-r14   SEQUENCE (SIZE (0..4)) OF NZP-ResourceConfig-r13,
+    cdmType-v1430                   ENUMERATED {cdm8 }          OPTIONAL    -- Need OR
+}
+
 NZP-ResourceConfig-r13 ::=  SEQUENCE {
     resourceConfig-r13              ResourceConfig-r13,
-    ...
+    ...,
+    [[  transmissionComb-r14        NZP-TransmissionComb-r14        OPTIONAL,   -- Need OR
+        frequencyDensity-r14        NZP-FrequencyDensity-r14        OPTIONAL    -- Need OR
+    ]]
 }
 
 ResourceConfig-r13 ::=              INTEGER (0..31)
 
+NZP-TransmissionComb-r14 ::=            INTEGER (0..2)
+NZP-FrequencyDensity-r14 ::=            ENUMERATED {d1, d2, d3}
+
 
 CSI-RS-ConfigNZPId-r11 ::=                  INTEGER (1..maxCSI-RS-NZP-r11)
 CSI-RS-ConfigNZPId-v1310 ::=                INTEGER (minCSI-RS-NZP-r13..maxCSI-RS-NZP-r13)
@@ -3822,10 +4258,20 @@ CSI-RS-ConfigZP-r11 ::=     SEQUENCE {
     ...
 }
 
+CSI-RS-ConfigZP-ApList-r14 ::=  CHOICE {
+    release                         NULL,
+    setup                           SEQUENCE (SIZE (1.. maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZP-r11
+}
+
 
 CSI-RS-ConfigZPId-r11 ::=                   INTEGER (1..maxCSI-RS-ZP-r11)
 
 
+DataInactivityTimer-r14 ::=                     ENUMERATED {
+                                                s1, s2, s3, s5, s7, s10, s15, s20, s40, s50, s60,
+                                                s80, s100, s120, s150, s180}
+
+
 DMRS-Config-r11 ::=     CHOICE {
     release                     NULL,
     setup                       SEQUENCE {
@@ -3916,7 +4362,7 @@ EIMTA-MainConfigServCell-r12 ::=    CHOICE {
     release                             NULL,
     setup                               SEQUENCE {
         eimta-UL-DL-ConfigIndex-r12             INTEGER (1..5),
-        eimta-HARQ-ReferenceConfig-r12      ENUMERATED {sa2,sa4,sa5},
+        eimta-HARQ-ReferenceConfig-r12      ENUMERATED {sa2, sa4, sa5},
         mbsfn-SubframeConfigList-v1250      CHOICE {
                 release                             NULL,
                 setup                               SEQUENCE {
@@ -3945,7 +4391,10 @@ LogicalChannelConfig ::=            SEQUENCE {
     ]],
     [[  logicalChannelSR-Prohibit-r12       BOOLEAN                 OPTIONAL        -- Need ON
     ]],
-    [[  laa-Allowed-r14                 BOOLEAN                 OPTIONAL        -- Need ON
+    [[  laa-UL-Allowed-r14                  BOOLEAN                 OPTIONAL,       -- Need ON
+        bitRateQueryProhibitTimer-r14   ENUMERATED {
+                                            s0, s0dot4, s0dot8, s1dot6, s3, s6, s12,
+                                            s30}                OPTIONAL        --Need OR
     ]]
 }
 
@@ -3960,7 +4409,9 @@ LWA-Configuration-r13 ::=           CHOICE {
 LWA-Config-r13 ::=  SEQUENCE {
     lwa-MobilityConfig-r13          WLAN-MobilityConfig-r13     OPTIONAL,   -- Need ON
     lwa-WT-Counter-r13              INTEGER (0..65535)          OPTIONAL,   -- Need ON
-    ...
+    ...,
+    [[  wt-MAC-Address-r14      OCTET STRING (SIZE (6)) OPTIONAL    -- Need ON
+    ]]
 }
 
 
@@ -4051,7 +4502,13 @@ MAC-MainConfig ::=                  SEQUENCE {
                 skipUplinkTxSPS-r14                 ENUMERATED {true}       OPTIONAL,   -- Need OR
                 skipUplinkTxDynamic-r14             ENUMERATED {true}       OPTIONAL    -- Need OR
             }
-        }                                                           OPTIONAL    -- Need ON
+        }                                                           OPTIONAL,   -- Need ON
+        dataInactivityTimerConfig-r14       CHOICE {
+            release                             NULL,
+            setup                               SEQUENCE {
+                dataInactivityTimer-r14             DataInactivityTimer-r14
+            }
+        }                                                OPTIONAL   -- Need ON
     ]]
 }
 
@@ -4188,18 +4645,8 @@ PDCCH-ConfigSCell-r13 ::=       SEQUENCE {
 }
 
 PDCCH-ConfigLAA-r14 ::=     SEQUENCE {
-    enableMonitoringDCI-Format0B-r14    CHOICE {
-        release                             NULL,
-        setup                               SEQUENCE {
-            maxNumberOfSchedSubframes-Format0B-r14  ENUMERATED {sf2, sf3, sf4}
-        }
-    }                                                                   OPTIONAL,       -- Need ON
-    enableMonitoringDCI-Format4B-r14    CHOICE {
-        release                             NULL,
-        setup                               SEQUENCE {
-            maxNumberOfSchedSubframes-Format4B-r14  ENUMERATED {sf2, sf3, sf4}
-        }
-    }                                                                   OPTIONAL,       -- Need ON
+    maxNumberOfSchedSubframes-Format0B-r14  ENUMERATED {sf2, sf3, sf4}  OPTIONAL,       -- Need OR
+    maxNumberOfSchedSubframes-Format4B-r14  ENUMERATED {sf2, sf3, sf4}  OPTIONAL,       -- Need OR
     skipMonitoringDCI-Format0A-r14              ENUMERATED {true}       OPTIONAL,       -- Need OR
     skipMonitoringDCI-Format4A-r14              ENUMERATED {true}       OPTIONAL,       -- Need OR
     pdcch-CandidateReductions-Format0A-r14      
@@ -4305,9 +4752,29 @@ PDCP-Config ::=                     SEQUENCE {
                                         ms1, ms2, ms5, ms10, ms25, ms50, ms100, ms250, ms500,
                                         ms2500, ms5000, ms25000}    OPTIONAL    -- Need ON
             }
-        }                                                               OPTIONAL    -- Need ON 
+        }                                                               OPTIONAL    -- Need ON
+    ]],
+    [[  ul-LWA-Config-r14           CHOICE {
+            release                     NULL,
+            setup                       SEQUENCE {
+                ul-LWA-DRB-ViaWLAN-r14      BOOLEAN,
+                ul-LWA-DataSplitThreshold-r14   ENUMERATED {
+                                        b0, b100, b200, b400, b800, b1600, b3200, b6400,
+                                        b12800, b25600, b51200, b102400, b204800, b409600,
+                                        b819200 }           OPTIONAL    -- Need OR
+            }
+        }                                                       OPTIONAL,       -- Need ON
+        uplinkOnlyHeaderCompression-r14     CHOICE {
+            notUsed-r14                         NULL,
+            rohc-r14                                SEQUENCE {
+                maxCID-r14                              INTEGER (1..16383)      DEFAULT 15,
+                profiles-r14                            SEQUENCE {
+                    profile0x0006-r14                       BOOLEAN
+                },
+                ...
+            }
+        }                                                   OPTIONAL -- Need ON
     ]]
-
 }
 
 
@@ -4345,6 +4812,18 @@ PDSCH-ConfigDedicated-v1310 ::=     SEQUENCE {
     dmrs-ConfigPDSCH-v1310              DMRS-Config-v1310                   OPTIONAL    -- Need ON
 }
 
+PDSCH-ConfigDedicated-v1430 ::=     SEQUENCE {
+    ce-PDSCH-MaxBandwidth-r14           ENUMERATED {bw5, bw20}              OPTIONAL,   -- Need OP
+    ce-PDSCH-TenProcesses-r14           ENUMERATED {on}                     OPTIONAL,   -- Need OR
+    ce-HARQ-AckBundling-r14             ENUMERATED {on}                     OPTIONAL,   -- Need OR
+    ce-SchedulingEnhancement-r14        ENUMERATED {range1, range2}         OPTIONAL,   -- Need OR
+    tbsIndexAlt2-r14                        ENUMERATED {b33}                OPTIONAL    -- Need OR
+}
+
+PDSCH-ConfigDedicatedSCell-v1430 ::=        SEQUENCE {
+    tbsIndexAlt2-r14                        ENUMERATED {b33}                OPTIONAL    -- Need OR
+}
+
 RE-MappingQCLConfigToAddModList-r11 ::=     SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-Config-r11
 
 RE-MappingQCLConfigToReleaseList-r11 ::=    SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-ConfigId-r11
@@ -4364,12 +4843,26 @@ PDSCH-RE-MappingQCL-Config-r11 ::=      SEQUENCE {
     }                                                                       OPTIONAL,   -- Need OP
     csi-RS-ConfigZPId-r11               CSI-RS-ConfigZPId-r11,
     qcl-CSI-RS-ConfigNZPId-r11          CSI-RS-ConfigNZPId-r11              OPTIONAL,   -- Need OR
-    ...
+    ...,
+    [[  mbsfn-SubframeConfigList-v1430  CHOICE {
+            release                     NULL,
+            setup                       SEQUENCE {
+                subframeConfigList-v1430    MBSFN-SubframeConfigList-v1430
+            }
+        }                                                                   OPTIONAL    -- Need OP
+    ]]
 }
 
 
 PDSCH-RE-MappingQCL-ConfigId-r11 ::=        INTEGER (1..maxRE-MapQCL-r11)
 
+PerCC-GapIndicationList-r14 ::=     SEQUENCE (SIZE (1..maxServCell-r13)) OF PerCC-GapIndication-r14
+
+PerCC-GapIndication-r14 ::=         SEQUENCE {
+    servCellId-r14                              ServCellIndex-r13,      
+    gapIndication-r14                           ENUMERATED {gap, ncsg, nogap-noNcsg}
+}
+
 
 PHICH-Config ::=                    SEQUENCE {
     phich-Duration                      ENUMERATED {normal, extended},
@@ -4473,7 +4966,10 @@ PhysicalConfigDedicated ::=     SEQUENCE {
     ]],
     [[  cqi-ReportConfig-v1320                  CQI-ReportConfig-v1320  OPTIONAL        -- Need ON
     ]],
-    [[  typeA-SRS-TPC-PDCCH-Group-r14           SEQUENCE (SIZE (1..32)) OF SRS-TPC-PDCCH-Config-r14         OPTIONAL,       -- Need ON
+    [[  typeA-SRS-TPC-PDCCH-Group-r14   CHOICE {
+            release                         NULL,
+            setup                           SEQUENCE (SIZE (1..32)) OF SRS-TPC-PDCCH-Config-r14
+        }                                                               OPTIONAL,       -- Need ON
         must-Config-r14                         CHOICE{
             release                             NULL,
             setup                               SEQUENCE {
@@ -4482,9 +4978,22 @@ PhysicalConfigDedicated ::=     SEQUENCE {
                                                     dB-6, dB-4dot77, dB-3, dB-1dot77,
                                                     dB0, dB1, dB2, dB3} OPTIONAL        -- Need ON
             }
-        }                                                           OPTIONAL        -- Need ON
+        }                                                           OPTIONAL,       -- Need ON
+        pusch-EnhancementsConfig-r14        PUSCH-EnhancementsConfig-r14        OPTIONAL,   -- Need 
+        ce-pdsch-pusch-EnhancementConfig-r14        ENUMERATED {on}     OPTIONAL,   -- Need OR
+        antennaInfo-v1430               AntennaInfoDedicated-v1430      OPTIONAL,   -- Need ON
+        pucch-ConfigDedicated-v1430     PUCCH-ConfigDedicated-v1430     OPTIONAL,   -- Need ON
+        pdsch-ConfigDedicated-v1430     PDSCH-ConfigDedicated-v1430     OPTIONAL,       -- Need ON
+        pusch-ConfigDedicated-v1430     PUSCH-ConfigDedicated-v1430 OPTIONAL,       -- Need ON
+        soundingRS-UL-PeriodicConfigDedicatedList-r14           SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicated OPTIONAL,       -- Cond PeriodicSRSPCell
+        soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14   SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 OPTIONAL,       -- Cond PeriodicSRSExt      
+        soundingRS-UL-AperiodicConfigDedicatedList-r14          SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicatedAperiodic-r10    OPTIONAL,       -- Cond AperiodicSRS
+        soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14 SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13    OPTIONAL,       -- Cond AperiodicSRSExt
+        csi-RS-Config-v1430             CSI-RS-Config-v1430             OPTIONAL,       -- Need ON
+        csi-RS-ConfigZP-ApList-r14              CSI-RS-ConfigZP-ApList-r14  OPTIONAL,   -- Need ON
+        cqi-ReportConfig-v1430                  CQI-ReportConfig-v1430  OPTIONAL,   -- Need ON
+        semiOpenLoop-r14                        BOOLEAN                 OPTIONAL    -- Need ON
     ]]
-
 }
 
 PhysicalConfigDedicatedSCell-r10 ::=        SEQUENCE {
@@ -4575,18 +5084,17 @@ PhysicalConfigDedicatedSCell-r10 ::=        SEQUENCE {
         csi-RS-ConfigNZPToAddModListExt-r13 CSI-RS-ConfigNZPToAddModListExt-r13 OPTIONAL,   -- Need ON
         csi-RS-ConfigNZPToReleaseListExt-r13    CSI-RS-ConfigNZPToReleaseListExt-r13    OPTIONAL    -- Need ON
     ]],
-    [[  cqi-ReportConfig-v1320                  CQI-ReportConfig-v1320  OPTIONAL        -- Need ON
+    [[  cqi-ReportConfig-v1320              CQI-ReportConfig-v1320  OPTIONAL        -- Need ON
     ]],
-    [[  laa-SCellConfiguration-v14xy                    LAA-SCellConfiguration-v14xy    OPTIONAL,       -- Need ON      
-        typeB-SRS-TPC-PDCCH-Config-r14                      SRS-TPC-PDCCH-Config-r14            OPTIONAL,       -- Need ON
+    [[  laa-SCellConfiguration-v1430        LAA-SCellConfiguration-v1430
+                                                                        OPTIONAL,   -- Need ON
+        typeB-SRS-TPC-PDCCH-Config-r14      SRS-TPC-PDCCH-Config-r14    OPTIONAL,   -- Need ON
 
-        uplinkPUSCH-LessPowerControlDedicated-v14xy         UplinkPUSCH-LessPowerControlDedicated-v14xy OPTIONAL,       -- Need ON
+        uplinkPUSCH-LessPowerControlDedicated-v1430         UplinkPUSCH-LessPowerControlDedicated-v1430 OPTIONAL,       -- Need ON
         soundingRS-UL-PeriodicConfigDedicatedList-r14                   SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicated                      OPTIONAL,      -- Cond PeriodicSRS
         soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14                   SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedUpPTsExt-r13                      OPTIONAL,      -- Cond PeriodicSRSExt      
-
-        soundingRS-UL-AperiodicConfigDedicatedList-r14                  SEQUENCE (SIZE (1..2)) OF SoundingRSAperiodicGroup-r14                       OPTIONAL,      -- Cond AperiodicSRS
-        soundingRS-UL-AperiodicConfigDedicatedUpPTsExtList-r14                  SEQUENCE (SIZE (1..4)) OF SoundingRSAperiodicGroupUpPTsExt-r14               OPTIONAL,      -- Cond AperiodicSRSExt
-
+        soundingRS-UL-AperiodicConfigDedicatedList-r14                  SEQUENCE (SIZE (1..2)) OF SoundingRS-AperiodicSet-r14                        OPTIONAL,      -- Cond AperiodicSRS
+        soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14                 SEQUENCE (SIZE (1..4)) OF SoundingRS-AperiodicSetUpPTsExt-r14                OPTIONAL,      -- Cond AperiodicSRSExt
         must-Config-r14                         CHOICE{
             release                             NULL,
             setup                               SEQUENCE {
@@ -4595,7 +5103,13 @@ PhysicalConfigDedicatedSCell-r10 ::=        SEQUENCE {
                                                     dB-6, dB-4dot77, dB-3, dB-1dot77,
                                                     dB0, dB1, dB2, dB3} OPTIONAL        -- Need ON
             }
-        }                                                           OPTIONAL        -- Need ON
+        }                                                           OPTIONAL,       -- Need ON
+        pusch-ConfigDedicated-v1430             PUSCH-ConfigDedicatedSCell-v1430    OPTIONAL,   -- Need ON
+        csi-RS-Config-v1430                     CSI-RS-Config-v1430         OPTIONAL,   -- Need ON
+        csi-RS-ConfigZP-ApList-r14              CSI-RS-ConfigZP-ApList-r14      OPTIONAL,   -- Need ON
+        cqi-ReportConfig-v1430                  CQI-ReportConfig-v1430  OPTIONAL,   -- Need ON
+        semiOpenLoop-r14                        BOOLEAN                     OPTIONAL,   -- Need ON
+        pdsch-ConfigDedicatedSCell-v1430        PDSCH-ConfigDedicatedSCell-v1430        OPTIONAL        -- Need ON
     ]]
 }
 
@@ -4604,7 +5118,7 @@ LAA-SCellConfiguration-r13 ::=          SEQUENCE {
     laa-SCellSubframeConfig-r13             BIT STRING (SIZE(8))
 }
 
-LAA-SCellConfiguration-v14xy ::=        SEQUENCE {
+LAA-SCellConfiguration-v1430 ::=        SEQUENCE {
     crossCarrierSchedulingConfig-UL-r14 CHOICE {
         release                                 NULL,
         setup                                   SEQUENCE {
@@ -4614,8 +5128,8 @@ LAA-SCellConfiguration-v14xy ::=        SEQUENCE {
     lbt-Config-r14                              LBT-Config-r14          OPTIONAL,       -- Need ON
     pdcch-ConfigLAA-r14                         PDCCH-ConfigLAA-r14     OPTIONAL,       -- Need ON
     absenceOfAnyOtherTechnology-r14         ENUMERATED {true}       OPTIONAL,       -- Need OR
-    soundingRS-UL-ConfigDedicatedAperiodic-v14xy
-                        SoundingRS-UL-ConfigDedicatedAperiodic-v14xy    OPTIONAL        -- Need ON
+    soundingRS-UL-ConfigDedicatedAperiodic-v1430
+                        SoundingRS-UL-ConfigDedicatedAperiodic-v1430    OPTIONAL        -- Need ON
 }
 
 LBT-Config-r14 ::=      CHOICE{
@@ -4635,14 +5149,20 @@ CSI-RS-ConfigZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI
 
 CSI-RS-ConfigZPToReleaseList-r11 ::=    SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZPId-r11
 
-SoundingRSAperiodicGroup-r14 ::= SEQUENCE{
-    srsCcGroupIndexList                 SEQUENCE (SIZE (1..4)) OF SrsCcGroupIndex OPTIONAL, -- Cond Srs-Trigger-TypeA
-    soundingRS-UL-ConfigDedicatedAperiodic-r10      SoundingRS-UL-ConfigDedicatedAperiodic-r10
+SoundingRS-AperiodicSet-r14 ::= SEQUENCE{
+    srs-CC-SetIndexList-r14                 
+                                SEQUENCE (SIZE (1..4)) OF SRS-CC-SetIndex-r14
+                                                             OPTIONAL,  -- Cond SRS-Trigger-TypeA
+    soundingRS-UL-ConfigDedicatedAperiodic-r14
+                                                SoundingRS-UL-ConfigDedicatedAperiodic-r10
 }
 
-SoundingRSAperiodicGroupUpPTsExt-r14 ::= SEQUENCE{
-    srsCcGroupIndexList                 SEQUENCE (SIZE (1..4)) OF SrsCcGroupIndex OPTIONAL, -- Cond Srs-Trigger-TypeA
-    soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13      SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13
+SoundingRS-AperiodicSetUpPTsExt-r14 ::= SEQUENCE{
+    srs-CC-SetIndexList-r14
+                                SEQUENCE (SIZE (1..4)) OF SRS-CC-SetIndex-r14 
+                                                            OPTIONAL,   -- Cond SRS-Trigger-TypeA
+    soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r14
+                                            SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13
 }
 
 
@@ -4682,9 +5202,11 @@ PRACH-Config-v1310 ::=              SEQUENCE {
     initial-CE-level-r13                    INTEGER (0..3)      OPTIONAL    -- Need OR
 }
 
-PRACH-Config-v14xy ::=              SEQUENCE {
+PRACH-Config-v1430 ::=              SEQUENCE {
     rootSequenceIndexHighSpeed-r14              INTEGER (0..837),
-    zeroCorrelationZoneConfigHighSpeed-r14      INTEGER (0..12)
+    zeroCorrelationZoneConfigHighSpeed-r14      INTEGER (0..12),
+    prach-ConfigIndexHighSpeed-r14              INTEGER (0..63),
+    prach-FreqOffsetHighSpeed-r14               INTEGER (0..94)
 }
 
 PRACH-ConfigSCell-r10 ::=               SEQUENCE {
@@ -4736,7 +5258,11 @@ PUCCH-ConfigCommon-v1310 ::=        SEQUENCE {
     pucch-NumRepetitionCE-Msg4-Level3-r13   ENUMERATED {n4, n8, n16, n32}   OPTIONAL    -- Need OR
 }
 
-PUCCH-ConfigDedicated ::=           SEQUENCE {
+PUCCH-ConfigCommon-v1430 ::=        SEQUENCE {
+    pucch-NumRepetitionCE-Msg4-Level3-r14   ENUMERATED {n64, n128}  OPTIONAL    -- Need OR
+}
+
+PUCCH-ConfigDedicated ::=           SEQUENCE {
     ackNackRepetition                   CHOICE{
         release                             NULL,
         setup                               SEQUENCE {
@@ -4875,6 +5401,10 @@ PUCCH-ConfigDedicated-r13 ::=       SEQUENCE {
     }                                                                       OPTIONAL    --Need ON
 }
 
+PUCCH-ConfigDedicated-v1430 ::=     SEQUENCE {
+    pucch-NumRepetitionCE-format1-r14       ENUMERATED {r64,r128}       OPTIONAL    -- Need OR
+}
+
 Format4-resource-r13    ::=             SEQUENCE {
     startingPRB-format4-r13                     INTEGER (0..109),
     numberOfPRB-format4-r13                 INTEGER (0..7)
@@ -4976,7 +5506,7 @@ PUSCH-ConfigDedicated-r13 ::=           SEQUENCE {
             nPUSCH-Identity-r13                     INTEGER (0..509),
             nDMRS-CSH-Identity-r13                  INTEGER (0..509)
         }
-    }                                                                   OPTIONAL,   -- Need ON
+    }                                                                       OPTIONAL,   -- Need ON
     uciOnPUSCH                              CHOICE {
         release                                 NULL,
         setup                                   SEQUENCE {
@@ -4995,11 +5525,58 @@ PUSCH-ConfigDedicated-r13 ::=           SEQUENCE {
     pusch-HoppingConfig-r13                 ENUMERATED {on}                 OPTIONAL    -- Need OR
 }
 
+PUSCH-ConfigDedicated-v1430 ::=         SEQUENCE {
+    ce-PUSCH-NB-MaxTBS-r14                  ENUMERATED {on}                 OPTIONAL,   -- Need OR
+    ce-PUSCH-MaxBandwidth-r14               ENUMERATED {bw5}                OPTIONAL,   -- Need OP
+    tdd-PUSCH-UpPTS-r14                     TDD-PUSCH-UpPTS-r14             OPTIONAL,   -- Need ON
+    ul-DMRS-IFDMA-r14                       BOOLEAN,
+    enable256QAM-r14                        Enable256QAM-r14                OPTIONAL    -- Need ON
+}
+
 PUSCH-ConfigDedicatedSCell-r10 ::=      SEQUENCE {
     groupHoppingDisabled-r10                ENUMERATED {true}               OPTIONAL,   -- Need OR
     dmrs-WithOCC-Activated-r10              ENUMERATED {true}               OPTIONAL    -- Need OR
 }
 
+PUSCH-ConfigDedicatedSCell-v1430 ::=            SEQUENCE {
+    enable256QAM-r14                        Enable256QAM-r14                OPTIONAL    -- Need OR
+}
+
+TDD-PUSCH-UpPTS-r14 ::=                 CHOICE {
+    release                                 NULL,
+    setup                                   SEQUENCE {
+        symPUSCH-UpPTS-r14                      ENUMERATED {sym1, sym2, sym3, sym4, sym5, sym6}                                                                                 OPTIONAL,   -- Need ON
+        dmrs-LessUpPTS-Config-r14               ENUMERATED {true}           OPTIONAL    -- Need OR
+    }
+}
+
+Enable256QAM-r14 ::=                    CHOICE {
+        release                             NULL,
+        setup                               CHOICE {
+            tpc-SubframeSet-Configured-r14      SEQUENCE {
+                    subframeSet1-DCI-Format0-r14                                        BOOLEAN,
+                    subframeSet1-DCI-Format4-r14                                        BOOLEAN,
+                    subframeSet2-DCI-Format0-r14                                        BOOLEAN,
+                    subframeSet2-DCI-Format4-r14                                        BOOLEAN
+            },
+            tpc-SubframeSet-NotConfigured-r14   SEQUENCE {
+                    dci-Format0-r14     BOOLEAN,
+                    dci-Format4-r14     BOOLEAN
+            }
+        }
+}
+
+PUSCH-EnhancementsConfig-r14 ::=        CHOICE {
+    release                         NULL,
+    setup                           SEQUENCE {
+        pusch-HoppingOffsetPUSCH-Enh-r14            INTEGER (1..100)        OPTIONAL,   -- Need ON
+        interval-ULHoppingPUSCH-Enh-r14         CHOICE {
+            interval-FDD-PUSCH-Enh-r14              ENUMERATED {int1, int2, int4, int8},
+            interval-TDD-PUSCH-Enh-r14              ENUMERATED {int1, int5, int10, int20}
+        }                                                                   OPTIONAL    -- Need ON
+    }
+}
+
 UL-ReferenceSignalsPUSCH ::=        SEQUENCE {
     groupHoppingEnabled                 BOOLEAN,
     groupAssignmentPUSCH                INTEGER (0..29),
@@ -5123,7 +5700,8 @@ RadioResourceConfigCommonSIB ::=    SEQUENCE {
         pucch-ConfigCommon-v1310        PUCCH-ConfigCommon-v1310            OPTIONAL    -- Need OR
     ]],
     [[  highSpeedConfig-r14             HighSpeedConfig-r14                 OPTIONAL,   -- Need OR
-        prach-Config-v14xy              PRACH-Config-v14xy                  OPTIONAL    -- Need OR
+        prach-Config-v1430              PRACH-Config-v1430                  OPTIONAL,   -- Need OR
+        pucch-ConfigCommon-v1430        PUCCH-ConfigCommon-v1430            OPTIONAL    -- Need OR
     ]]
 }
 
@@ -5156,7 +5734,9 @@ RadioResourceConfigCommon ::=       SEQUENCE {
         uplinkPowerControlCommon-v1310  UplinkPowerControlCommon-v1310      OPTIONAL    -- Need ON
     ]],
     [[  highSpeedConfig-r14             HighSpeedConfig-r14                 OPTIONAL,   -- Need OR
-        prach-Config-v14xy              PRACH-Config-v14xy                  OPTIONAL    -- Need OR
+        prach-Config-v1430              PRACH-Config-v1430                  OPTIONAL,   -- Need OR
+        pucch-ConfigCommon-v1430        PUCCH-ConfigCommon-v1430            OPTIONAL,   -- Need OR
+        tdd-Config-v1430                TDD-Config-v1430                    OPTIONAL    -- Cond TDD3
     ]]
 }
 
@@ -5219,7 +5799,7 @@ RadioResourceConfigCommonSCell-r10 ::=  SEQUENCE {
                                 UplinkPowerControlCommonSCell-v1310 OPTIONAL    -- Cond UL
     ]],
     [[  highSpeedConfigSCell-r14        HighSpeedConfigSCell-r14            OPTIONAL,   -- Need OR
-        prach-Config-v14xy              PRACH-Config-v14xy                  OPTIONAL,   -- Cond UL
+        prach-Config-v1430              PRACH-Config-v1430                  OPTIONAL,   -- Cond UL
     ul-Configuration-r14                SEQUENCE {
         ul-FreqInfo-r14                     SEQUENCE {
             ul-CarrierFreq-r14                  ARFCN-ValueEUTRA-r9         OPTIONAL,   -- Need OP
@@ -5231,11 +5811,13 @@ RadioResourceConfigCommonSCell-r10 ::=  SEQUENCE {
         soundingRS-UL-ConfigCommon-r14      SoundingRS-UL-ConfigCommon,
         ul-CyclicPrefixLength-r14           UL-CyclicPrefixLength,
         prach-ConfigSCell-r14                   PRACH-ConfigSCell-r10       OPTIONAL,   -- Cond TDD-OR-NoR11        
-        uplinkPowerControlCommonPUSCH-LessCell-v14xy                                                UplinkPowerControlCommonPUSCH-LessCell-v14xy    OPTIONAL    -- Need OR
+        uplinkPowerControlCommonPUSCH-LessCell-v1430                                                UplinkPowerControlCommonPUSCH-LessCell-v1430    OPTIONAL    -- Need OR
 }                                                                   OPTIONAL,   -- Cond ULSRS
     harq-ReferenceConfig-r14                    ENUMERATED {sa2,sa4,sa5}    OPTIONAL,       -- Need OR
     soundingRS-FlexibleTiming-r14               ENUMERATED {true}           OPTIONAL        -- Need OR
-    ]]  
+    ]],
+    [[  mbsfn-SubframeConfigList-v1430      MBSFN-SubframeConfigList-v1430      OPTIONAL-- Need ON
+    ]]
 }
 
 BCCH-Config ::=                     SEQUENCE {
@@ -5316,6 +5898,8 @@ RadioResourceConfigDedicated ::=        SEQUENCE {
     ]],
     [[  neighCellsCRS-Info-r13          NeighCellsCRS-Info-r13              OPTIONAL,   -- Cond CRSIM
         rlf-TimersAndConstants-r13      RLF-TimersAndConstants-r13          OPTIONAL    -- Need ON
+    ]],
+    [[  sps-Config-v1430                SPS-Config-v1430                    OPTIONAL    -- Cond SPS
     ]]
 }
 
@@ -5326,6 +5910,8 @@ RadioResourceConfigDedicatedPSCell-r12 ::=      SEQUENCE {
     naics-Info-r12                          NAICS-AssistanceInfo-r12    OPTIONAL,   -- Need ON
     ...,
     [[  neighCellsCRS-InfoPSCell-r13        NeighCellsCRS-Info-r13      OPTIONAL    -- Need ON
+    ]],
+    [[  sps-Config-v1430                SPS-Config-v1430                OPTIONAL    -- Cond SPS2
     ]]
 }
 
@@ -5346,7 +5932,6 @@ RadioResourceConfigDedicatedSCell-r10 ::=   SEQUENCE {
     ]],
     [[  neighCellsCRS-InfoSCell-r13         NeighCellsCRS-Info-r13      OPTIONAL    -- Need ON
     ]]
-
 }
 
 SRB-ToAddModList ::=                SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod
@@ -5384,9 +5969,10 @@ DRB-ToAddMod ::=    SEQUENCE {
         drb-TypeLWIP-r13                    ENUMERATED {lwip, lwip-DL-only,
                                              lwip-UL-only, eutran}      OPTIONAL        -- Need ON
     ]],
-    [[  rlc-Config-v14xy                    RLC-Config-v14xy        OPTIONAL,       -- Need ON
+    [[  rlc-Config-v1430                    RLC-Config-v1430        OPTIONAL,       -- Need ON
         lwip-UL-Aggregation-r14             BOOLEAN                 OPTIONAL,       -- Cond LWIP
-        lwip-DL-Aggregation-r14             BOOLEAN                 OPTIONAL        -- Cond LWIP
+        lwip-DL-Aggregation-r14             BOOLEAN                 OPTIONAL,       -- Cond LWIP
+        lwa-WLAN-AC-r14         ENUMERATED {ac-bk, ac-be, ac-vi, ac-vo} OPTIONAL    -- Cond UL-LWA
     ]]
 }
 
@@ -5404,7 +5990,7 @@ DRB-ToAddModSCG-r12 ::= SEQUENCE {
     logicalChannelIdentitySCG-r12       INTEGER (3..10)         OPTIONAL,   -- Cond DRB-SetupS
     logicalChannelConfigSCG-r12         LogicalChannelConfig    OPTIONAL,   -- Cond SetupS
     ...,
-    [[  rlc-Config-v14xy                    RLC-Config-v14xy        OPTIONAL        -- Need ON
+    [[  rlc-Config-v1430                    RLC-Config-v1430        OPTIONAL        -- Need ON
     ]]
 }
 
@@ -5426,7 +6012,9 @@ CRS-AssistanceInfo-r11 ::= SEQUENCE {
     physCellId-r11                      PhysCellId,
     antennaPortsCount-r11               ENUMERATED {an1, an2, an4, spare1},
     mbsfn-SubframeConfigList-r11        MBSFN-SubframeConfigList,
-    ...
+    ...,
+    [[  mbsfn-SubframeConfigList-v1430  MBSFN-SubframeConfigList-v1430      OPTIONAL    -- Need ON
+    ]]
 }
 
 NeighCellsCRS-Info-r13 ::=      CHOICE {
@@ -5439,8 +6027,10 @@ CRS-AssistanceInfoList-r13 ::=  SEQUENCE (SIZE (1..maxCellReport)) OF CRS-Assist
 CRS-AssistanceInfo-r13 ::= SEQUENCE {
     physCellId-r13                      PhysCellId,
     antennaPortsCount-r13               ENUMERATED {an1, an2, an4, spare1},
-    mbsfn-SubframeConfigList-r13        MBSFN-SubframeConfigList    OPTIONAL,   -- Need ON
-    ...
+    mbsfn-SubframeConfigList-r13        MBSFN-SubframeConfigList            OPTIONAL,   -- Need ON
+    ...,
+    [[  mbsfn-SubframeConfigList-v1430  MBSFN-SubframeConfigList-v1430      OPTIONAL    -- Need ON
+    ]]
 }
 
 NAICS-AssistanceInfo-r12 ::=        CHOICE {
@@ -5517,7 +6107,7 @@ RLC-Config-v1310 ::=                SEQUENCE {
     pollPDU-v1310                               PollPDU-v1310       OPTIONAL    -- Need OR
 }
 
-RLC-Config-v14xy ::=                CHOICE {
+RLC-Config-v1430 ::=                CHOICE {
     release                             NULL,
     setup                               SEQUENCE {
         pollByte-r14                        PollByte-r14
@@ -5826,7 +6416,7 @@ SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 ::=  CHOICE{
     }
 }
 
-SoundingRS-UL-ConfigDedicatedAperiodic-v14xy ::=    CHOICE{
+SoundingRS-UL-ConfigDedicatedAperiodic-v1430 ::=    CHOICE{
     release                             NULL,
     setup                               SEQUENCE {      
         srs-SubframeIndication-r14          INTEGER (1..4)  OPTIONAL        -- Need ON
@@ -5866,6 +6456,23 @@ SPS-Config ::=  SEQUENCE {
     sps-ConfigUL                    SPS-ConfigUL            OPTIONAL            -- Need ON
 }
 
+SPS-Config-v1430 ::=    SEQUENCE {
+    ul-SPS-V-RNTI-r14                   C-RNTI                  OPTIONAL,           -- Need OR
+    sl-SPS-V-RNTI-r14                   C-RNTI                  OPTIONAL,           -- Need OR
+    sps-ConfigUL-ToAddModList-r14       SPS-ConfigUL-ToAddModList-r14   OPTIONAL,   -- Need ON
+    sps-ConfigUL-ToReleaseList-r14      SPS-ConfigUL-ToReleaseList-r14  OPTIONAL,   -- Need ON
+    sps-ConfigSL-ToAddModList-r14       SPS-ConfigSL-ToAddModList-r14   OPTIONAL,   -- Need ON
+    sps-ConfigSL-ToReleaseList-r14      SPS-ConfigSL-ToReleaseList-r14  OPTIONAL    -- Need ON
+}
+
+SPS-ConfigUL-ToAddModList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigUL
+
+SPS-ConfigUL-ToReleaseList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigIndex-r14
+
+SPS-ConfigSL-ToAddModList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigSL-r14
+
+SPS-ConfigSL-ToReleaseList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigIndex-r14
+
 SPS-ConfigDL ::=    CHOICE{
     release                         NULL,
     setup                           SEQUENCE {
@@ -5892,8 +6499,8 @@ SPS-ConfigUL ::=    CHOICE {
     setup                           SEQUENCE {
         semiPersistSchedIntervalUL          ENUMERATED {
                                                 sf10, sf20, sf32, sf40, sf64, sf80,
-                                                sf128, sf160, sf320, sf640, sf1-v14xy,
-                                                sf2-v14xy, sf3-v14xy, sf4-v14xy, sf5-v14xy,
+                                                sf128, sf160, sf320, sf640, sf1-v1430,
+                                                sf2-v1430, sf3-v1430, sf4-v1430, sf5-v1430,
                                                 spare1},
         implicitReleaseAfter                ENUMERATED {e2, e3, e4, e8},
         p0-Persistent                       SEQUENCE {
@@ -5912,11 +6519,27 @@ SPS-ConfigUL ::=    CHOICE {
         ]],
         [[  numberOfConfUlSPS-Processes-r13         INTEGER (1..8)      OPTIONAL    -- Need OR
         ]],
-        [[  fixedRV-NonAdaptive-r14                 ENUMERATED {true}       OPTIONAL    -- Need OR
+        [[  fixedRV-NonAdaptive-r14                 ENUMERATED {true}       OPTIONAL,   -- Need OR
+            sps-ConfigIndex-r14                     SPS-ConfigIndex-r14     OPTIONAL,   -- Need OR
+            semiPersistSchedIntervalUL-v1430        ENUMERATED {
+                                            sf50, sf100, sf200, sf300, sf400, sf500,
+                                            sf600, sf700, sf800, sf900, sf1000, spare5,
+                                            spare4, spare3, spare2, spare1} OPTIONAL    -- Need OR
+
         ]]
     }
 }
 
+SPS-ConfigSL-r14 ::=    SEQUENCE {
+    sps-ConfigIndex-r14             SPS-ConfigIndex-r14,
+    semiPersistSchedIntervalSL-r14  ENUMERATED {
+                                        sf20, sf50, sf100, sf200, sf300, sf400,
+                                        sf500, sf600, sf700, sf800, sf900, sf1000,
+                                        spare4, spare3, spare2, spare1}
+}
+
+SPS-ConfigIndex-r14 ::=         INTEGER (1..maxConfigSPS-r14)
+
 N1PUCCH-AN-PersistentList ::=       SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047)
 
 
@@ -5925,12 +6548,16 @@ SRS-TPC-PDCCH-Config-r14 ::=                    CHOICE {
     setup                               SEQUENCE {
         srs-TPC-RNTI-r14                                    BIT STRING (SIZE (16)),
     startingBitOfFormat3B-r14                           INTEGER (0..31),                fieldTypeFormat3B-r14                               INTEGER (1..4), 
-        srsCcGroupIndexlist                                 SEQUENCE (SIZE(1..4)) OF SrsCcGroupIndex    OPTIONAL    -- Cond Srs-Trigger-TypeA       
+        srs-CC-SetIndexlist-r14                                 SEQUENCE (SIZE(1..4)) OF SRS-CC-SetIndex-r14    OPTIONAL    -- Cond SRS-Trigger-TypeA       
 
     }
 }
 
-SrsCcGroupIndex ::=                     INTEGER (0..3)
+SRS-CC-SetIndex-r14 ::=         SEQUENCE {
+    cc-SetIndex-r14             INTEGER (0..3),
+    cc-IndexInOneCC-Set-r14     INTEGER (0..7)
+}
+
 
 TDD-Config ::=                      SEQUENCE {
     subframeAssignment                  ENUMERATED {
@@ -5944,6 +6571,10 @@ TDD-Config-v1130 ::=                SEQUENCE {
     specialSubframePatterns-v1130       ENUMERATED {ssp7,ssp9}
 }
 
+TDD-Config-v1430 ::=                SEQUENCE {
+    specialSubframePatterns-v1430       ENUMERATED {ssp10}
+}
+
 TDD-ConfigSL-r12 ::=        SEQUENCE {
     subframeAssignmentSL-r12                ENUMERATED {
                                             none, sa0, sa1, sa2, sa3, sa4, sa5, sa6}
@@ -6049,9 +6680,9 @@ UplinkPowerControlCommonSCell-v1310 ::= SEQUENCE {
                                                 deltaF10, deltaF9, deltaF8, deltaF7, 
                                                 spare1}                         OPTIONAL    -- Need OR
 }
-UplinkPowerControlCommonPUSCH-LessCell-v14xy ::=    SEQUENCE {
-    p0-Nominal-PeriodicSRS                      INTEGER (-126..24)          OPTIONAL,   -- Need OR
-    p0-Nominal-AperiodicSRS                     INTEGER (-126..24)          OPTIONAL,   -- Need OR
+UplinkPowerControlCommonPUSCH-LessCell-v1430 ::=    SEQUENCE {
+    p0-Nominal-PeriodicSRS-r14                      INTEGER (-126..24)      OPTIONAL,   -- Need OR
+    p0-Nominal-AperiodicSRS-r14                     INTEGER (-126..24)      OPTIONAL,   -- Need OR
     alpha-SRS-r14                               Alpha-r12                   OPTIONAL    -- Need OR
 }
 
@@ -6087,10 +6718,10 @@ UplinkPowerControlDedicated-v1250 ::=   SEQUENCE {
     }
 }
 
-UplinkPUSCH-LessPowerControlDedicated-v14xy ::=     SEQUENCE {
-    p0-UE-PeriodicSRS                           INTEGER (-8..7)             OPTIONAL,   -- Need OR
-    p0-UE-AperiodicSRS                          INTEGER (-8..7)             OPTIONAL,   -- Need OR
-    accumulationEnabled                         BOOLEAN
+UplinkPUSCH-LessPowerControlDedicated-v1430 ::=     SEQUENCE {
+    p0-UE-PeriodicSRS-r14                       INTEGER (-8..7)             OPTIONAL,   -- Need OR
+    p0-UE-AperiodicSRS-r14                      INTEGER (-8..7)             OPTIONAL,   -- Need OR
+    accumulationEnabled-r14                     BOOLEAN
 }
 
 UplinkPowerControlDedicatedSCell-r10 ::=        SEQUENCE {
@@ -6143,7 +6774,9 @@ WLAN-MobilityConfig-r13 ::=     SEQUENCE {
     associationTimer-r13                ENUMERATED {s10, s30,
                                          s60, s120, s240}           OPTIONAL,   -- Need OR
     successReportRequested-r13          ENUMERATED {true}           OPTIONAL,   -- Need OR
-    ...
+    ...,
+    [[  wlan-SuspendConfig-r14          WLAN-SuspendConfig-r14      OPTIONAL    -- Need ON
+    ]]
 }
 
 
@@ -6246,6 +6879,15 @@ CellSelectionInfoCE-r13 ::=     SEQUENCE {
 }
 
 
+CellSelectionInfoCE1-r13 ::=        SEQUENCE {
+    q-RxLevMinCE1-r13               Q-RxLevMin,
+    q-QualMinRSRQ-CE1-r13           Q-QualMin-r9                        OPTIONAL    -- Need OR
+}
+
+CellSelectionInfoCE1-v1360 ::=      SEQUENCE {
+    delta-RxLevMinCE1-v1360                 INTEGER (-8..-1)
+}
+
 CellReselectionSubPriority-r13 ::=          ENUMERATED {oDot2, oDot4, oDot6, oDot8}
 
 
@@ -6334,7 +6976,11 @@ MobilityControlInfo ::=     SEQUENCE {
     ]],
     [[  drb-ContinueROHC-r11            ENUMERATED {true}                   OPTIONAL    -- Cond HO
     ]],
-    [[  mobilityControlInfoV2X-r14  MobilityControlInfoV2X-r14              OPTIONAL    -- Need OR
+    [[  mobilityControlInfoV2X-r14  MobilityControlInfoV2X-r14              OPTIONAL,   -- Need ON
+        handoverWithoutWT-Change-r14    ENUMERATED {keepLWA-Config, sendEndMarker}  OPTIONAL,   -- Cond HO
+        makeBeforeBreak-r14             ENUMERATED {true}                   OPTIONAL,   -- Need OR
+        rach-Skip-r14                   RACH-Skip-r14                       OPTIONAL,   -- Need OR
+        sameSFN-Indication-r14          ENUMERATED {true}                   OPTIONAL    -- Cond HO-SFNsynced
     ]]
 }
 
@@ -6345,13 +6991,17 @@ MobilityControlInfoSCG-r12 ::=      SEQUENCE {
     ue-IdentitySCG-r12                  C-RNTI                          OPTIONAL,   -- Cond SCGEst,
     rach-ConfigDedicated-r12            RACH-ConfigDedicated            OPTIONAL,   -- Need OP
     cipheringAlgorithmSCG-r12       CipheringAlgorithm-r12      OPTIONAL,   -- Need ON
-    ...
+    ...,
+    [[  makeBeforeBreakSCG-r14          ENUMERATED {true}               OPTIONAL,   -- Need OR
+        rach-SkipSCG-r14                RACH-Skip-r14                   OPTIONAL    -- Need OR
+    ]]
 }
 
 MobilityControlInfoV2X-r14 ::=  SEQUENCE {
     v2x-CommTxPoolExceptional-r14       SL-CommResourcePoolV2X-r14      OPTIONAL,       -- Need OR
     v2x-CommRxPool-r14                  SL-CommRxPoolListV2X-r14        OPTIONAL,       -- Need OR
-    v2x-CommSyncConfig-r14              SL-SyncConfigListV2X-r14        OPTIONAL        -- Need OR
+    v2x-CommSyncConfig-r14              SL-SyncConfigListV2X-r14        OPTIONAL,       -- Need OR
+    cbr-MobilityTxConfigList-r14        SL-CBR-CommonTxConfigList-r14   OPTIONAL        -- Need OR
 }
 
 CarrierBandwidthEUTRA ::=           SEQUENCE {
@@ -6375,6 +7025,22 @@ CarrierFreqEUTRA-v9e0 ::=           SEQUENCE {
     ul-CarrierFreq-v9e0                 ARFCN-ValueEUTRA-r9         OPTIONAL    -- Cond FDD
 }
 
+RACH-Skip-r14 ::=                   SEQUENCE {
+    targetTA-r14                    CHOICE {
+        ta0-r14                         NULL,
+        ptag-r14                        NULL,
+        pstag-r14                       NULL,
+        mcg-STAG-r14                    STAG-Id-r11,
+        scg-STAG-r14                    STAG-Id-r11
+    },
+    ul-ConfigInfo-r14               SEQUENCE {
+        numberOfConfUL-Processes-r14            INTEGER (1..8),
+        ul-SchedInterval-r14            ENUMERATED {sf2, sf5, sf10},
+        ul-StartSubframe-r14            INTEGER (0..9),
+        ul-Grant-r14                    BIT STRING (SIZE (16))
+    }                                                               OPTIONAL    -- Need OR
+}
+
 
 MobilityParametersCDMA2000 ::=          OCTET STRING
 
@@ -6599,7 +7265,10 @@ MeasConfig ::=                      SEQUENCE {
         measObjectToRemoveListExt-r13       MeasObjectToRemoveListExt-r13   OPTIONAL,   -- Need ON
         measObjectToAddModListExt-r13       MeasObjectToAddModListExt-r13   OPTIONAL,   -- Need ON
         measIdToAddModList-v1310            MeasIdToAddModList-v1310        OPTIONAL,   -- Need ON
-        measIdToAddModListExt-v1310         MeasIdToAddModListExt-v1310     OPTIONAL        -- Need ON
+        measIdToAddModListExt-v1310         MeasIdToAddModListExt-v1310     OPTIONAL    -- Need ON
+    ]],
+    [[  measGapConfigPerCC-List-r14         MeasGapConfigPerCC-List-r14     OPTIONAL,   -- Need ON
+        measGapSharingConfig-r14            MeasGapSharingConfig-r14        OPTIONAL    -- Need ON
     ]]
 }
 
@@ -6656,12 +7325,50 @@ MeasGapConfig ::=                   CHOICE {
         gapOffset                           CHOICE {
                 gp0                                 INTEGER (0..39),
                 gp1                                 INTEGER (0..79),
-                ...
+                
+                ...,
+                gp2-r14                             INTEGER (0..39),
+                gp3-r14                             INTEGER (0..79), 
+                gp-ncsg1-r14                        INTEGER (0..39), 
+                gp-ncsg2-r14                        INTEGER (0..79), 
+                gp-ncsg3-r14                        INTEGER (0..39), 
+                gp-ncsg4-r14                        INTEGER (0..79),
+                gp-nonUniform1-r14                  INTEGER (0..1279),
+                gp-nonUniform2-r14                  INTEGER (0..2559),
+                gp-nonUniform3-r14                  INTEGER (0..5119),
+                gp-nonUniform4-r14                  INTEGER (0..10239)
         }
     }
 }
 
 
+
+MeasGapConfigPerCC-List-r14 ::= CHOICE {
+    release                     NULL,
+    setup                       SEQUENCE {
+        measGapConfigToRemoveList-r14   MeasGapConfigToRemoveList-r14   OPTIONAL,   -- Need ON
+        measGapConfigToAddModList-r14   MeasGapConfigToAddModList-r14   OPTIONAL    -- Need ON
+    }
+}
+
+MeasGapConfigToRemoveList-r14 ::=   SEQUENCE (SIZE (1..maxServCell-r13)) OF ServCellIndex-r13
+
+MeasGapConfigToAddModList-r14 ::=   SEQUENCE (SIZE (1..maxServCell-r13)) OF MeasGapConfigPerCC-r14
+
+MeasGapConfigPerCC-r14 ::=  SEQUENCE {
+    servCellId-r14              ServCellIndex-r13,
+    measGapConfigCC-r14         MeasGapConfig
+}
+
+
+MeasGapSharingConfig-r14 ::=            CHOICE {
+    release                             NULL,
+    setup                               SEQUENCE {
+        measGapSharingScheme-r14                ENUMERATED {scheme00, scheme01, scheme10, scheme11} 
+    }
+}
+
+
 MeasId ::=                          INTEGER (1..maxMeasId)
 
 MeasId-v1250 ::=                    INTEGER (maxMeasId-Plus1..maxMeasId-r12)
@@ -6745,6 +7452,11 @@ MeasObjectEUTRA ::=                 SEQUENCE {
         whiteCellsToAddModList-r13      WhiteCellsToAddModList-r13  OPTIONAL,       -- Need ON
         rmtc-Config-r13             RMTC-Config-r13         OPTIONAL,       -- Need ON
         carrierFreq-r13                 ARFCN-ValueEUTRA-v9e0       OPTIONAL            -- Need ON
+    ]],
+    [[  
+        tx-ResourcePoolToRemoveList-r14 Tx-ResourcePoolMeasList-r14     OPTIONAL,   -- Need ON
+        tx-ResourcePoolToAddList-r14    Tx-ResourcePoolMeasList-r14     OPTIONAL,   -- Need ON
+        fembms-MixedCarrier-r14             BOOLEAN                 OPTIONAL            -- Need ON
     ]]
 }
 
@@ -6804,6 +7516,8 @@ RMTC-Config-r13 ::= CHOICE {
     }
 }
 
+Tx-ResourcePoolMeasList-r14 ::= SEQUENCE (SIZE (1..maxSL-PoolToMeasure-r14)) OF SL-V2X-TxPoolReportIdentity-r14
+
 
 MeasObjectGERAN ::=                 SEQUENCE {
     carrierFreqs                        CarrierFreqsGERAN,
@@ -6903,7 +7617,7 @@ MeasObjectWLAN-r13 ::=  SEQUENCE {
     ...
 }
 
-WLAN-BandIndicator-r13 ::=  ENUMERATED {band2dot4, band5, spare6, spare5, spare4, spare3, spare2, spare1, ...}
+WLAN-BandIndicator-r13 ::=  ENUMERATED {band2dot4, band5, band60-v1430, spare5, spare4, spare3, spare2, spare1, ...}
 
 
 MeasResults ::=                     SEQUENCE {
@@ -6937,8 +7651,12 @@ MeasResults ::=                     SEQUENCE {
         }                                                                   OPTIONAL,
         ul-PDCP-DelayResultList-r13         UL-PDCP-DelayResultList-r13     OPTIONAL,
         measResultListWLAN-r13              MeasResultListWLAN-r13          OPTIONAL
+    ]],
+    [[  measResultPCell-v1360               RSRP-Range-v1360                OPTIONAL
+    ]],
+    [[  measResultListCBR-r14               MeasResultListCBR-r14           OPTIONAL,
+        measResultListWLAN-r14              MeasResultListWLAN-r14          OPTIONAL
     ]]
-
 }
 
 MeasResultListEUTRA ::=             SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA 
@@ -6965,6 +7683,9 @@ MeasResultEUTRA ::= SEQUENCE {
                 multiBandInfoList-r13               MultiBandInfoList-r11       OPTIONAL,
                 freqBandIndicatorPriority-r13       ENUMERATED {true}           OPTIONAL
             }                                                               OPTIONAL
+        ]],
+        [[
+            measResult-v1360                    RSRP-Range-v1360                    OPTIONAL
         ]]
     }
 }
@@ -7010,7 +7731,11 @@ MeasResultServFreq-r13 ::=          SEQUENCE {
         rsrqResultNCell-r13                 RSRQ-Range-r13,
         rs-sinr-Result-r13                  RS-SINR-Range-r13   OPTIONAL
     }                                                           OPTIONAL,
-    ...
+    ...,
+    [[  measResultBestNeighCell-v1360       SEQUENCE {
+            rsrpResultNCell-v1360               RSRP-Range-v1360
+        }                                                       OPTIONAL
+    ]]
 }
 
 MeasResultCSI-RS-List-r12 ::=   SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCSI-RS-r12
@@ -7079,6 +7804,8 @@ MeasResultCDMA2000 ::=  SEQUENCE {
 
 MeasResultListWLAN-r13 ::=      SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultWLAN-r13
 
+MeasResultListWLAN-r14 ::=      SEQUENCE (SIZE (1..maxWLAN-Id-Report-r14)) OF MeasResultWLAN-r13
+
 MeasResultWLAN-r13 ::=  SEQUENCE {
     wlan-Identifiers-r13                    WLAN-Identifiers-r12,
     carrierInfoWLAN-r13                     WLAN-CarrierInfo-r13    OPTIONAL,
@@ -7093,6 +7820,14 @@ MeasResultWLAN-r13 ::=  SEQUENCE {
     ...
 }
 
+MeasResultListCBR-r14 ::=           SEQUENCE (SIZE (1..maxCBR-Report-r14)) OF MeasResultCBR-r14
+
+MeasResultCBR-r14 ::=   SEQUENCE {
+    poolIdentity-r14        SL-V2X-TxPoolReportIdentity-r14,
+    cbr-PSSCH-r14           SL-CBR-r14,
+    cbr-PSCCH-r14           SL-CBR-r14              OPTIONAL
+}
+
 MeasResultForECID-r9 ::=        SEQUENCE {
     ue-RxTxTimeDiffResult-r9                INTEGER (0..4095),
     currentSFN-r9                           BIT STRING (SIZE (10))
@@ -7217,6 +7952,12 @@ ReportConfigEUTRA ::=               SEQUENCE {
                     c2-RefCSI-RS-r12                    MeasCSI-RS-Id-r12,
                     c2-Offset-r12                       INTEGER (-30..30),
                     c2-ReportOnLeave-r12                BOOLEAN
+                },
+                eventV1-r14                         SEQUENCE {
+                    v1-Threshold-r14                    SL-CBR-r14
+                },
+                eventV2-r14                         SEQUENCE {
+                    v2-Threshold-r14                    SL-CBR-r14
                 }
             },
             hysteresis                          Hysteresis,
@@ -7267,6 +8008,10 @@ ReportConfigEUTRA ::=               SEQUENCE {
         ul-DelayConfig-r13                  UL-DelayConfig-r13          OPTIONAL    -- Need ON
     ]],
     [[  ue-RxTxTimeDiffPeriodicalTDD-r13    BOOLEAN                     OPTIONAL    -- Need ON
+    ]],
+    [[  
+        purpose-v1430           ENUMERATED {reportLocation, sidelink, spare2, spare1}       
+                                                            OPTIONAL    -- Need ON
     ]]
 }
 
@@ -7347,6 +8092,8 @@ ReportConfigInterRAT ::=            SEQUENCE {
         }                                                           OPTIONAL    -- Need ON
     ]],
     [[  reportQuantityWLAN-r13              ReportQuantityWLAN-r13  OPTIONAL    -- Need ON
+    ]],
+    [[  reportAnyWLAN-r14                   BOOLEAN                 OPTIONAL    -- Need ON
     ]]
 }
 
@@ -7362,11 +8109,11 @@ ThresholdCDMA2000 ::=           INTEGER (0..63)
 ReportQuantityWLAN-r13 ::=      SEQUENCE {
     bandRequestWLAN-r13                         ENUMERATED {true}   OPTIONAL,   -- Need OR
     carrierInfoRequestWLAN-r13                  ENUMERATED {true}   OPTIONAL,   -- Need OR
-    availableAdmissionCapacityRequestWLAN-r13   ENUMERATED {true}   OPTIONAL,   -- Need ON
+    availableAdmissionCapacityRequestWLAN-r13   ENUMERATED {true}   OPTIONAL,   -- Need OR
     backhaulDL-BandwidthRequestWLAN-r13         ENUMERATED {true}   OPTIONAL,   -- Need OR
     backhaulUL-BandwidthRequestWLAN-r13         ENUMERATED {true}   OPTIONAL,   -- Need OR
     channelUtilizationRequestWLAN-r13           ENUMERATED {true}   OPTIONAL,   -- Need OR
-    stationCountRequestWLAN-r13                 ENUMERATED {true}   OPTIONAL    ,   -- Need OR
+    stationCountRequestWLAN-r13                 ENUMERATED {true}   OPTIONAL,   -- Need OR
     ...
 }
 
@@ -7390,6 +8137,8 @@ ReportInterval ::=                  ENUMERATED {
 
 RSRP-Range ::=                      INTEGER(0..97)
 
+RSRP-Range-v1360 ::=                    INTEGER(-17..-1)
+
 RSRP-RangeSL-r12 ::=                INTEGER(0..13)
 
 RSRP-RangeSL2-r12 ::=               INTEGER(0..7)
@@ -7451,6 +8200,14 @@ WLAN-RSSI-Range-r13 ::=                     INTEGER(0..141)
 
 WLAN-Status-r13 ::=     ENUMERATED {successfulAssociation, failureWlanRadioLink, failureWlanUnavailable, failureTimeout}
 
+WLAN-Status-v1430 ::=   ENUMERATED {suspended, resumed}
+
+
+WLAN-SuspendConfig-r14 ::=  SEQUENCE {
+    wlan-SuspendResumeAllowed-r14           BOOLEAN     OPTIONAL,   -- Need ON
+    wlan-SuspendTriggersStatusReport-r14        BOOLEAN     OPTIONAL    -- Need ON
+}
+
 
 AbsoluteTimeInfo-r10 ::=                BIT STRING (SIZE (48))
 
@@ -7473,6 +8230,17 @@ TrackingAreaCodeList-v1130 ::=  SEQUENCE {
 }
 
 
+BandCombinationList-r14 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombination-r14
+
+BandCombination-r14 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandIndication-r14
+
+BandIndication-r14 ::=  SEQUENCE {
+    bandEUTRA-r14                   FreqBandIndicator-r11,
+    ca-BandwidthClassDL-r14         CA-BandwidthClass-r10,
+    ca-BandwidthClassUL-r14         CA-BandwidthClass-r10           OPTIONAL
+}
+
+
 C-RNTI ::=                          BIT STRING (SIZE (16))
 
 
@@ -7521,11 +8289,32 @@ OtherConfig-r9 ::= SEQUENCE {
     [[  idc-Config-r11                  IDC-Config-r11                  OPTIONAL,   -- Need ON
         powerPrefIndicationConfig-r11   PowerPrefIndicationConfig-r11   OPTIONAL,   -- Need ON
         obtainLocationConfig-r11        ObtainLocationConfig-r11        OPTIONAL    -- Need ON
+    ]],
+    [[  powerPrefIndicationTimer-r11        ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, 
+                                            s30, s60, s90, s120, s300, s600, spare3, 
+                                            spare2, spare1}         OPTIONAL,   -- Need OR
+        sps-AssistanceInfoReport-r14        BOOLEAN             OPTIONAL,   -- Need ON
+        delayBudgetReportingConfig-r14  CHOICE{
+            release                 NULL,
+            setup                   SEQUENCE{
+                delayBudgetReportingProhibitTimer-r14   ENUMERATED {
+                                                                s0, s0dot4, s0dot8, 
+                                                                s1dot6, s3, s6, s12, s30}
+            }
+        }                                                               OPTIONAL,   -- Need ON
+        rlm-ReportConfig-r14            CHOICE {
+            release                 NULL,
+            setup                   SEQUENCE{
+                rlmReportTimer-r14              ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30, 
+                                                s60, s90, s120, s300, s600, spare3, spare2, spare1},
+                rlmReportRep-MPDCCH-r14         ENUMERATED {setup}      OPTIONAL    -- Need OR
+            }
+        }   OPTIONAL    -- Need ON
     ]]
 }
 
 IDC-Config-r11 ::=              SEQUENCE {
-    idc-Indication-r11                  ENUMERATED {setup}      OPTIONAL,       -- Need OR
+    idc-Indication-r11                  ENUMERATED {setup}              OPTIONAL,   -- Need OR
     autonomousDenialParameters-r11      SEQUENCE {
             autonomousDenialSubframes-r11           ENUMERATED {n2, n5, n10, n15,
                                                         n20, n30, spare2, spare1},
@@ -7534,12 +8323,14 @@ IDC-Config-r11 ::=              SEQUENCE {
                                                         spare4, spare3, spare2, spare1}
     }       OPTIONAL,       -- Need OR
     ...,
-    [[  idc-Indication-UL-CA-r11        ENUMERATED {setup}      OPTIONAL        -- Cond idc-Ind
+    [[  idc-Indication-UL-CA-r11            ENUMERATED {setup}      OPTIONAL    -- Cond idc-Ind
+    ]],
+    [[  idc-HardwareSharingIndication-r13   ENUMERATED {setup}      OPTIONAL    -- Need OR
     ]]
 }
 
 ObtainLocationConfig-r11 ::= SEQUENCE {
-    obtainLocation-r11              ENUMERATED {setup}              OPTIONAL        -- Need OR
+    obtainLocation-r11              ENUMERATED {setup}                  OPTIONAL    -- Need OR
 }
 
 PowerPrefIndicationConfig-r11 ::= CHOICE{
@@ -7552,8 +8343,8 @@ PowerPrefIndicationConfig-r11 ::= CHOICE{
 }
 
 ReportProximityConfig-r9 ::= SEQUENCE {
-    proximityIndicationEUTRA-r9     ENUMERATED {enabled}            OPTIONAL,       -- Need OR
-    proximityIndicationUTRA-r9      ENUMERATED {enabled}            OPTIONAL        -- Need OR
+    proximityIndicationEUTRA-r9     ENUMERATED {enabled}            OPTIONAL,   -- Need OR
+    proximityIndicationUTRA-r9      ENUMERATED {enabled}            OPTIONAL    -- Need OR
 }
 
 
@@ -7830,14 +8621,44 @@ UE-EUTRA-Capability-v1330-IEs ::= SEQUENCE {
 
 UE-EUTRA-Capability-v1340-IEs ::= SEQUENCE {
     ue-CategoryUL-v1340             INTEGER (15)                            OPTIONAL,
-    nonCriticalExtension                UE-EUTRA-Capability-v14xy-IEs           OPTIONAL
-}
-
-UE-EUTRA-Capability-v14xy-IEs ::= SEQUENCE {
-    mac-Parameters-v14xy                MAC-Parameters-v14xy                    OPTIONAL,
-    rlc-Parameters-v14xy                RLC-Parameters-v14xy,
-    laa-Parameters-v14xy                LAA-Parameters-v14xy                    OPTIONAL,
-    lwip-Parameters-v14xy               LWIP-Parameters-v14xy                   OPTIONAL,
+    nonCriticalExtension                UE-EUTRA-Capability-v1350-IEs           OPTIONAL
+}
+
+UE-EUTRA-Capability-v1350-IEs ::= SEQUENCE {
+    ue-CategoryDL-v1350             ENUMERATED {oneBis}                     OPTIONAL,
+    ue-CategoryUL-v1350             ENUMERATED {oneBis}                     OPTIONAL,
+    ce-Parameters-v1350             CE-Parameters-v1350,
+    nonCriticalExtension            UE-EUTRA-Capability-v1360-IEs           OPTIONAL
+}
+
+UE-EUTRA-Capability-v1360-IEs ::= SEQUENCE {
+    other-Parameters-v1360      Other-Parameters-v1360                  OPTIONAL,
+    nonCriticalExtension        UE-EUTRA-Capability-v1430-IEs           OPTIONAL
+}
+
+UE-EUTRA-Capability-v1430-IEs ::= SEQUENCE {
+    phyLayerParameters-v1430            PhyLayerParameters-v1430,
+    ue-CategoryDL-v1430                 ENUMERATED {m2}                         OPTIONAL,
+    ue-CategoryUL-v1430                 ENUMERATED {n16, n17, n18, n19, n20, m2}    OPTIONAL,
+    ue-CategoryUL-v1430b                ENUMERATED {n21}                        OPTIONAL,
+    mac-Parameters-v1430                MAC-Parameters-v1430                    OPTIONAL,
+    measParameters-v1430                MeasParameters-v1430                    OPTIONAL,
+    pdcp-Parameters-v1430               PDCP-Parameters-v1430                   OPTIONAL,
+    rlc-Parameters-v1430                RLC-Parameters-v1430,
+    rf-Parameters-v1430                 RF-Parameters-v1430                     OPTIONAL,
+    laa-Parameters-v1430                LAA-Parameters-v1430                    OPTIONAL,
+    lwa-Parameters-v1430                LWA-Parameters-v1430                    OPTIONAL,
+    lwip-Parameters-v1430               LWIP-Parameters-v1430                   OPTIONAL,
+    otherParameters-v1430               Other-Parameters-v1430,
+    mmtel-Parameters-r14                MMTEL-Parameters-r14                    OPTIONAL,
+    mobilityParameters-r14              MobilityParameters-r14                  OPTIONAL,
+    ce-Parameters-v1430                 CE-Parameters-v1430,
+    fdd-Add-UE-EUTRA-Capabilities-v1430 UE-EUTRA-CapabilityAddXDD-Mode-v1430    OPTIONAL,
+    tdd-Add-UE-EUTRA-Capabilities-v1430 UE-EUTRA-CapabilityAddXDD-Mode-v1430    OPTIONAL,
+    mbms-Parameters-v1430               MBMS-Parameters-v1430                   OPTIONAL,
+    sl-Parameters-v1430                 SL-Parameters-v1430                     OPTIONAL,
+    ue-BasedNetwPerfMeasParameters-v1430    UE-BasedNetwPerfMeasParameters-v1430        OPTIONAL, 
+    highSpeedEnhParameters-r14          HighSpeedEnhParameters-r14              OPTIONAL,
     nonCriticalExtension                SEQUENCE {}                             OPTIONAL
 }
 
@@ -7887,9 +8708,19 @@ UE-EUTRA-CapabilityAddXDD-Mode-v1320 ::=    SEQUENCE {
     scptm-Parameters-r13                SCPTM-Parameters-r13                OPTIONAL
 }
 
+UE-EUTRA-CapabilityAddXDD-Mode-v1430 ::=    SEQUENCE {
+    phyLayerParameters-v1430            PhyLayerParameters-v1430            OPTIONAL,
+    mmtel-Parameters-r14                MMTEL-Parameters-r14                OPTIONAL
+}
+
 AccessStratumRelease ::=            ENUMERATED {
                                         rel8, rel9, rel10, rel11, rel12, rel13,
-                                        spare2, spare1, ...}
+                                        rel14, spare1, ...}
+
+MobilityParameters-r14 ::=          SEQUENCE {
+    makeBeforeBreak-r14                 ENUMERATED {supported}                  OPTIONAL,
+    rach-Less-r14                       ENUMERATED {supported}                  OPTIONAL
+}
 
 DC-Parameters-r12 ::=           SEQUENCE {
     drb-TypeSplit-r12                       ENUMERATED {supported}          OPTIONAL,
@@ -7911,11 +8742,13 @@ MAC-Parameters-v1310 ::=                SEQUENCE {
     extendedLongDRX-r13             ENUMERATED {supported}              OPTIONAL
 }
 
-MAC-Parameters-v14xy ::=                SEQUENCE {
+MAC-Parameters-v1430 ::=                SEQUENCE {
     shortSPS-IntervalFDD-r14            ENUMERATED {supported}              OPTIONAL,
     shortSPS-IntervalTDD-r14            ENUMERATED {supported}              OPTIONAL,
     skipUplinkDynamic-r14               ENUMERATED {supported}              OPTIONAL,
-    skipUplinkSPS-r14                   ENUMERATED {supported}              OPTIONAL
+    skipUplinkSPS-r14                   ENUMERATED {supported}              OPTIONAL,
+    multipleUplinkSPS-r14               ENUMERATED {supported}              OPTIONAL,
+    dataInactMon-r14                    ENUMERATED {supported}              OPTIONAL
 }
 
 RLC-Parameters-r12 ::=              SEQUENCE {
@@ -7926,7 +8759,7 @@ RLC-Parameters-v1310 ::=                SEQUENCE {
     extendedRLC-SN-SO-Field-r13             ENUMERATED {supported}          OPTIONAL
 }
 
-RLC-Parameters-v14xy ::=                SEQUENCE {
+RLC-Parameters-v1430 ::=                SEQUENCE {
     extendedPollByte-r14                        ENUMERATED {supported}          OPTIONAL
 }
 
@@ -7958,6 +8791,16 @@ PDCP-Parameters-v1310 ::=               SEQUENCE {
     pdcp-SN-Extension-18bits-r13            ENUMERATED {supported}  OPTIONAL
 }
 
+PDCP-Parameters-v1430 ::=               SEQUENCE {
+    supportedUplinkOnlyROHC-Profiles-r14        SEQUENCE {
+        profile0x0006-r14                       BOOLEAN
+    },
+    maxNumberROHC-ContextSessions-r14       ENUMERATED {
+                                            cs2, cs4, cs8, cs12, cs16, cs24, cs32,
+                                            cs48, cs64, cs128, cs256, cs512, cs1024,
+                                            cs16384, spare2, spare1}                DEFAULT cs16
+}
+
 PhyLayerParameters ::=              SEQUENCE {
     ue-TxAntennaSelectionSupported      BOOLEAN,
     ue-SpecificRefSigsSupported     BOOLEAN
@@ -8019,7 +8862,8 @@ PhyLayerParameters-v1310 ::=            SEQUENCE {
     aperiodicCSI-Reporting-r13              BIT STRING (SIZE (2))           OPTIONAL,
     codebook-HARQ-ACK-r13                   BIT STRING (SIZE (2))           OPTIONAL,
     crossCarrierScheduling-B5C-r13          ENUMERATED {supported}          OPTIONAL,
-    fdd-HARQ-TimingTDD-r13                  ENUMERATED {supported}          OPTIONAL,   maxNumberUpdatedCSI-Proc-r13            INTEGER(5..32)                  OPTIONAL,
+    fdd-HARQ-TimingTDD-r13                  ENUMERATED {supported}          OPTIONAL,
+    maxNumberUpdatedCSI-Proc-r13            INTEGER(5..32)                  OPTIONAL,
     pucch-Format4-r13                       ENUMERATED {supported}          OPTIONAL,
     pucch-Format5-r13                       ENUMERATED {supported}          OPTIONAL,
     pucch-SCell-r13                         ENUMERATED {supported}          OPTIONAL,
@@ -8045,6 +8889,25 @@ PhyLayerParameters-v1330 ::=            SEQUENCE {
     crs-InterfMitigationTM1toTM9-r13        INTEGER (1.. maxServCell-r13)   OPTIONAL
 }
 
+PhyLayerParameters-v1430 ::=            SEQUENCE {
+    ce-PUSCH-NB-MaxTBS-r14                  ENUMERATED {supported}          OPTIONAL,
+    ce-PDSCH-PUSCH-MaxBandwidth-r14         ENUMERATED {bw5, bw20}          OPTIONAL,
+    ce-HARQ-AckBundling-r14                 ENUMERATED {supported}          OPTIONAL,
+    ce-PDSCH-TenProcesses-r14               ENUMERATED {supported}          OPTIONAL,
+    ce-RetuningSymbols-r14                  ENUMERATED {n0, n1}             OPTIONAL,
+    ce-PDSCH-PUSCH-Enhancement-r14          ENUMERATED {supported}          OPTIONAL,
+    ce-SchedulingEnhancement-r14            ENUMERATED {supported}          OPTIONAL,
+    ce-SRS-Enhancement-r14                  ENUMERATED {supported}          OPTIONAL,
+    ce-PUCCH-Enhancement-r14                ENUMERATED {supported}          OPTIONAL,
+    ce-ClosedLoopTxAntennaSelection-r14     ENUMERATED {supported}          OPTIONAL,
+    tdd-SpecialSubframe-r14                 ENUMERATED {supported}          OPTIONAL,
+    tdd-TTI-Bundling-r14                    ENUMERATED {supported}          OPTIONAL,
+    dmrs-LessUpPTS-r14                      ENUMERATED {supported}          OPTIONAL,
+    mimo-UE-Parameters-v1430                MIMO-UE-Parameters-v1430        OPTIONAL,
+    alternativeTBS-Index-r14                ENUMERATED {supported}          OPTIONAL,
+    feMBMS-Unicast-Parameters-r14           FeMBMS-Unicast-Parameters-r14   OPTIONAL
+}
+
 MIMO-UE-Parameters-r13 ::=              SEQUENCE {
     parametersTM9-r13                       MIMO-UE-ParametersPerTM-r13     OPTIONAL,
     parametersTM10-r13                      MIMO-UE-ParametersPerTM-r13     OPTIONAL,
@@ -8053,25 +8916,58 @@ MIMO-UE-Parameters-r13 ::=              SEQUENCE {
     interferenceMeasRestriction-r13         ENUMERATED {supported}          OPTIONAL
 }
 
+MIMO-UE-Parameters-v1430 ::=            SEQUENCE {
+    parametersTM9-v1430                     MIMO-UE-ParametersPerTM-v1430   OPTIONAL,
+    parametersTM10-v1430                    MIMO-UE-ParametersPerTM-v1430   OPTIONAL
+}
+
 MIMO-UE-ParametersPerTM-r13 ::=         SEQUENCE {
     nonPrecoded-r13                         MIMO-NonPrecodedCapabilities-r13    OPTIONAL,
-    beamformed-r13                          MIMO-UE-BeamformedCapabilities-r13      OPTIONAL,
+    beamformed-r13                          MIMO-UE-BeamformedCapabilities-r13  OPTIONAL,
     channelMeasRestriction-r13              ENUMERATED {supported}              OPTIONAL,
     dmrs-Enhancements-r13                   ENUMERATED {supported}              OPTIONAL,
     csi-RS-EnhancementsTDD-r13              ENUMERATED {supported}              OPTIONAL
 }
 
+MIMO-UE-ParametersPerTM-v1430 ::=       SEQUENCE {
+    nzp-CSI-RS-AperiodicInfo-r14            SEQUENCE {
+        nMaxProc-r14                            INTEGER(5..32),
+        nMaxResource-r14                        ENUMERATED {ffs1, ffs2, ffs3, ffs4}
+    }                                                                           OPTIONAL,
+    nzp-CSI-RS-PeriodicInfo-r14             SEQUENCE {
+        nMaxResource-r14                        ENUMERATED {ffs1, ffs2, ffs3, ffs4}
+    }                                                                           OPTIONAL,
+    zp-CSI-RS-AperiodicInfo-r14                 ENUMERATED {supported}          OPTIONAL,
+    ul-dmrs-Enhancements-r14                ENUMERATED {supported}              OPTIONAL,
+    densityReductionNP-r14                  ENUMERATED {supported}              OPTIONAL,
+    densityReductionBF-r14                  ENUMERATED {supported}              OPTIONAL,
+    hybridCSI-r14                           ENUMERATED {supported}              OPTIONAL,
+    semiOL-r14                              ENUMERATED {supported}              OPTIONAL,
+    csi-ReportingNP-r14                     ENUMERATED {supported}              OPTIONAL,
+    csi-ReportingAdvanced-r14               ENUMERATED {supported}              OPTIONAL
+}
+
 MIMO-CA-ParametersPerBoBC-r13 ::=       SEQUENCE {
     parametersTM9-r13                       MIMO-CA-ParametersPerBoBCPerTM-r13      OPTIONAL,
     parametersTM10-r13                      MIMO-CA-ParametersPerBoBCPerTM-r13      OPTIONAL
 }
 
+MIMO-CA-ParametersPerBoBC-v1430 ::=     SEQUENCE {
+    parametersTM9-v1430                     MIMO-CA-ParametersPerBoBCPerTM-v1430    OPTIONAL,
+    parametersTM10-v1430                    MIMO-CA-ParametersPerBoBCPerTM-v1430    OPTIONAL
+}
+
 MIMO-CA-ParametersPerBoBCPerTM-r13 ::=  SEQUENCE {
     nonPrecoded-r13                         MIMO-NonPrecodedCapabilities-r13    OPTIONAL,
     beamformed-r13                          MIMO-BeamformedCapabilityList-r13   OPTIONAL,
     dmrs-Enhancements-r13                   ENUMERATED {different}              OPTIONAL
 }
 
+MIMO-CA-ParametersPerBoBCPerTM-v1430 ::=    SEQUENCE {
+    csi-ReportingNP-r14                     ENUMERATED {different}              OPTIONAL,
+    csi-ReportingAdvanced-r14               ENUMERATED {different}              OPTIONAL
+}
+
 MIMO-NonPrecodedCapabilities-r13 ::=    SEQUENCE {
     config1-r13                             ENUMERATED {supported}          OPTIONAL,
     config2-r13                             ENUMERATED {supported}          OPTIONAL,
@@ -8180,6 +9076,16 @@ RF-Parameters-v12b0 ::=             SEQUENCE {
     maxLayersMIMO-Indication-r12            ENUMERATED {supported}                  OPTIONAL
 }
 
+RF-Parameters-v1430 ::=             SEQUENCE {
+    supportedBandCombination-v1430          SupportedBandCombination-v1430          OPTIONAL,
+    supportedBandCombinationAdd-v1430       SupportedBandCombinationAdd-v1430       OPTIONAL,
+    supportedBandCombinationReduced-v1430   SupportedBandCombinationReduced-v1430   OPTIONAL,
+    eNB-RequestedParameters-v1430           SEQUENCE {
+        requestedDiffFallbackCombList-r14       BandCombinationList-r14
+    }                                                                               OPTIONAL,
+    diffFallbackCombReport-r14              ENUMERATED {supported}                  OPTIONAL
+}
+
 SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 
 
 SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10
@@ -8196,6 +9102,8 @@ SupportedBandCombination-v1270 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandC
 
 SupportedBandCombination-v1320 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1320
 
+SupportedBandCombination-v1430 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1430
+
 SupportedBandCombinationAdd-r11 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-r11
 
 SupportedBandCombinationAdd-v11d0 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v10i0
@@ -8206,10 +9114,14 @@ SupportedBandCombinationAdd-v1270 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF Ba
 
 SupportedBandCombinationAdd-v1320 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1320
 
+SupportedBandCombinationAdd-v1430 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1430
+
 SupportedBandCombinationReduced-r13 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-r13
 
 SupportedBandCombinationReduced-v1320 ::=   SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-v1320
 
+SupportedBandCombinationReduced-v1430 ::=   SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-v1430
+
 BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10
 
 BandCombinationParametersExt-r10 ::= SEQUENCE {
@@ -8284,6 +9196,12 @@ BandCombinationParameters-v1320 ::= SEQUENCE {
     additionalRx-Tx-PerformanceReq-r13      ENUMERATED {supported}                  OPTIONAL
 }
 
+BandCombinationParameters-v1430 ::= SEQUENCE {
+    bandParameterList-v1430         SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF 
+            BandParameters-v1430        OPTIONAL,
+    v2x-SupportedTxBandCombListPerBC-r14            BIT STRING (SIZE (1.. maxBandComb-r13))     OPTIONAL,
+    v2x-SupportedRxBandCombListPerBC-r14            BIT STRING (SIZE (1.. maxBandComb-r13))     OPTIONAL}
+
 SupportedBandwidthCombinationSet-r10 ::=    BIT STRING (SIZE (1..maxBandwidthCombSet-r10))
 
 BandParameters-r10 ::= SEQUENCE {
@@ -8327,6 +9245,37 @@ BandParameters-v1320 ::= SEQUENCE {
     bandParametersDL-v1320          MIMO-CA-ParametersPerBoBC-r13
 }
 
+BandParameters-v1430 ::= SEQUENCE {
+    bandParametersDL-v1430          MIMO-CA-ParametersPerBoBC-v1430 OPTIONAL,
+    ul-256QAM-r14                       ENUMERATED {supported}      OPTIONAL,
+    ul-256QAM-perCC-InfoList-r14        SEQUENCE (SIZE (2..maxServCell-r13)) OF UL-256QAM-perCC-Info-r14        OPTIONAL,
+    retuningTimeInfoBandList-r14        SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF 
+            RetuningTimeInfo-r14    OPTIONAL
+}
+
+V2X-BandParameters-r14 ::= SEQUENCE {
+    v2x-FreqBandEUTRA-r14           FreqBandIndicator-r11,
+    bandParametersTxSL-r14          BandParametersTxSL-r14              OPTIONAL,
+    bandParametersRxSL-r14          BandParametersRxSL-r14              OPTIONAL
+}
+
+BandParametersTxSL-r14 ::= SEQUENCE {
+    v2x-BandwidthClassTxSL-r14      V2X-BandwidthClassSL-r14,
+    v2x-eNB-Scheduled-r14           ENUMERATED {supported}              OPTIONAL,
+    v2x-HighPower-r14               ENUMERATED {supported}              OPTIONAL
+}
+
+BandParametersRxSL-r14 ::= SEQUENCE {
+    v2x-BandwidthClassRxSL-r14      V2X-BandwidthClassSL-r14,
+    v2x-HighReception-r14           ENUMERATED {supported}              OPTIONAL
+}
+
+V2X-BandwidthClassSL-r14 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF V2X-BandwidthClass-r14
+
+UL-256QAM-perCC-Info-r14 ::= SEQUENCE {
+    ul-256QAM-perCC-r14         ENUMERATED {supported}              OPTIONAL
+}
+
 BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10
 
 BandParametersUL-r13 ::= CA-MIMO-ParametersUL-r10
@@ -8369,6 +9318,8 @@ IntraBandContiguousCC-Info-r12 ::= SEQUENCE {
 
 CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...}
 
+V2X-BandwidthClass-r14 ::= ENUMERATED {a, b, c, d, e, f, ...}
+
 MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers}
 
 MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers}
@@ -8443,6 +9394,14 @@ MeasParameters-v1310 ::=            SEQUENCE {
     rssi-AndChannelOccupancyReporting-r13   ENUMERATED {supported}      OPTIONAL
 }
 
+MeasParameters-v1430 ::=            SEQUENCE {
+    ceMeasurements-r14                      ENUMERATED {supported}      OPTIONAL,
+    ncsg-r14                                ENUMERATED {supported}              OPTIONAL,
+    shortMeasurementGap-r14                 ENUMERATED {supported}              OPTIONAL,
+    perServingCellMeasurementGap-r14        ENUMERATED {supported}              OPTIONAL,
+    nonUniformGap-r14                       ENUMERATED {supported}              OPTIONAL
+}
+
 BandListEUTRA ::=                   SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA 
 
 BandCombinationListEUTRA-r10 ::=    SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA
@@ -8605,6 +9564,10 @@ UE-BasedNetwPerfMeasParameters-v1250 ::=    SEQUENCE {
     loggedMBSFNMeasurements-r12             ENUMERATED {supported}
 }
 
+UE-BasedNetwPerfMeasParameters-v1430 ::=    SEQUENCE {
+    locationReport-r14                      ENUMERATED {supported}      OPTIONAL
+}
+
 OTDOA-PositioningCapabilities-r10 ::=   SEQUENCE {
     otdoa-UE-Assisted-r10                   ENUMERATED {supported},
     interFreqRSTD-Measurement-r10           ENUMERATED {supported}      OPTIONAL
@@ -8620,6 +9583,15 @@ Other-Parameters-v11d0 ::=              SEQUENCE {
     inDeviceCoexInd-UL-CA-r11               ENUMERATED {supported}      OPTIONAL
 }
 
+Other-Parameters-v1360 ::=  SEQUENCE {
+    inDeviceCoexInd-HardwareSharingInd-r13      ENUMERATED {supported}      OPTIONAL
+}
+
+Other-Parameters-v1430 ::=          SEQUENCE {
+    bwPrefInd-r14                   ENUMERATED {supported}      OPTIONAL,
+    rlm-ReportSupport-r14           ENUMERATED {supported}      OPTIONAL
+}
+
 MBMS-Parameters-r11 ::=             SEQUENCE {
     mbms-SCell-r11                          ENUMERATED {supported}      OPTIONAL,
     mbms-NonServingCell-r11                 ENUMERATED {supported}      OPTIONAL
@@ -8629,6 +9601,18 @@ MBMS-Parameters-v1250 ::=               SEQUENCE {
     mbms-AsyncDC-r12                        ENUMERATED {supported}      OPTIONAL
 }
 
+MBMS-Parameters-v1430 ::=               SEQUENCE {
+    fembmsDedicatedCell-r14             ENUMERATED {supported}      OPTIONAL,
+    fembmsMixedCell-r14                 ENUMERATED {supported}      OPTIONAL,
+    subcarrierSpacingMBMS-khz7dot5-r14  ENUMERATED {supported}      OPTIONAL,
+    subcarrierSpacingMBMS-khz1dot25-r14 ENUMERATED {supported}      OPTIONAL
+}
+
+FeMBMS-Unicast-Parameters-r14 ::=       SEQUENCE {
+    unicast-fembmsMixedSCell-r14            ENUMERATED {supported}      OPTIONAL,
+    emptyUnicastRegion-r14                  ENUMERATED {supported}      OPTIONAL
+}
+
 SCPTM-Parameters-r13 ::=                SEQUENCE {
     scptm-ParallelReception-r13                 ENUMERATED {supported}      OPTIONAL,
     scptm-SCell-r13                             ENUMERATED {supported}      OPTIONAL,
@@ -8648,6 +9632,14 @@ CE-Parameters-v1320 ::=     SEQUENCE {
     intraFreqHO-CE-ModeB-r13                ENUMERATED {supported}              OPTIONAL
 }
 
+CE-Parameters-v1350 ::=     SEQUENCE {
+    unicastFrequencyHopping-r13             ENUMERATED {supported}              OPTIONAL
+}
+
+CE-Parameters-v1430 ::=     SEQUENCE {
+    ce-SwitchWithoutHO-r14                  ENUMERATED {supported}              OPTIONAL
+}
+
 LAA-Parameters-r13 ::=              SEQUENCE {
     crossCarrierSchedulingLAA-DL-r13            ENUMERATED {supported}      OPTIONAL,
     csi-RS-DRS-RRM-MeasurementsLAA-r13          ENUMERATED {supported}      OPTIONAL,
@@ -8658,10 +9650,13 @@ LAA-Parameters-r13 ::=              SEQUENCE {
     tm10-LAA-r13                                ENUMERATED {supported}      OPTIONAL
 }
 
-LAA-Parameters-v14xy ::=                SEQUENCE {
+LAA-Parameters-v1430 ::=                SEQUENCE {
     crossCarrierSchedulingLAA-UL-r14            ENUMERATED {supported}      OPTIONAL,
     uplinkLAA-r14                               ENUMERATED {supported}      OPTIONAL,
-    twoStepSchedulingTimingInfo-r14             ENUMERATED {nPlus1, nPlus2, nPlus3} OPTIONAL
+    twoStepSchedulingTimingInfo-r14             ENUMERATED {nPlus1, nPlus2, nPlus3} OPTIONAL,
+    uss-BlindDecodingAdjustment-r14             ENUMERATED {supported}      OPTIONAL,
+    uss-BlindDecodingReduction-r14              ENUMERATED {supported}      OPTIONAL,
+    outOfSequenceGrantHandling-r14              ENUMERATED {supported}      OPTIONAL
 }
 
 WLAN-IW-Parameters-r12 ::=  SEQUENCE {
@@ -8676,6 +9671,14 @@ LWA-Parameters-r13 ::=      SEQUENCE {
     lwa-BufferSize-r13          ENUMERATED {supported}      OPTIONAL
 }
 
+LWA-Parameters-v1430 ::=        SEQUENCE {
+    lwa-HO-WithoutWT-Change-r14         ENUMERATED {supported}      OPTIONAL,
+    lwa-UL-r14                          ENUMERATED {supported}      OPTIONAL,
+    wlan-PeriodicMeas-r14               ENUMERATED {supported}      OPTIONAL,
+    wlan-ReportAnyWLAN-r14              ENUMERATED {supported}      OPTIONAL,
+    wlan-SupportedDataRate-r14          INTEGER (1..2048)           OPTIONAL
+}
+
 WLAN-IW-Parameters-v1310 ::=    SEQUENCE {
     rclwi-r13                                       ENUMERATED {supported}      OPTIONAL
 }
@@ -8684,7 +9687,7 @@ LWIP-Parameters-r13 ::=     SEQUENCE {
     lwip-r13                    ENUMERATED {supported}              OPTIONAL
 }
 
-LWIP-Parameters-v14xy ::=       SEQUENCE {
+LWIP-Parameters-v1430 ::=       SEQUENCE {
     lwip-Aggregation-DL-r14                 ENUMERATED {supported}              OPTIONAL,
     lwip-Aggregation-UL-r14                 ENUMERATED {supported}              OPTIONAL
 }
@@ -8718,6 +9721,21 @@ SL-Parameters-v1310 ::=             SEQUENCE {
     discPeriodicSLSS-r13                        ENUMERATED {supported}      OPTIONAL
 }
 
+SL-Parameters-v1430 ::=             SEQUENCE {
+    zoneBasedPoolSelection-r14              ENUMERATED {supported}              OPTIONAL,
+    ue-AutonomousWithFullSensing-r14        ENUMERATED {supported}              OPTIONAL,
+    ue-AutonomousWithPartialSensing-r14     ENUMERATED {supported}              OPTIONAL,
+    sl-CongestionControl-r14                ENUMERATED {supported}              OPTIONAL,
+    v2x-TxWithShortResvInterval-r14         ENUMERATED {supported}              OPTIONAL,
+    v2x-numberTxRxTiming-r14                INTEGER(1..16)                      OPTIONAL,
+    v2x-nonAdjacentPSCCH-PSSCH-r14          ENUMERATED {supported}              OPTIONAL,
+    slss-TxRx-r14                           ENUMERATED {supported}              OPTIONAL,
+    v2x-SupportedBandCombinationList-r14    V2X-SupportedBandCombination-r14    OPTIONAL
+}
+
+V2X-SupportedBandCombination-r14 ::=        SEQUENCE (SIZE (1..maxBandComb-r13)) OF V2X-BandCombinationParameters-r14
+
+V2X-BandCombinationParameters-r14 ::=   SEQUENCE (SIZE (1.. maxSimultaneousBands-r10)) OF V2X-BandParameters-r14
 
 SupportedBandInfoList-r12 ::=       SEQUENCE (SIZE (1..maxBands)) OF SupportedBandInfo-r12 
 
@@ -8727,6 +9745,30 @@ SupportedBandInfo-r12 ::=           SEQUENCE {
 
 FreqBandIndicatorListEUTRA-r12 ::=      SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicator-r11
 
+MMTEL-Parameters-r14 ::=            SEQUENCE {
+    delayBudgetReporting-r14                    ENUMERATED {supported}      OPTIONAL,
+    pusch-Enhancements-r14                      ENUMERATED {supported}      OPTIONAL,
+    recommendedBitRate-r14                      ENUMERATED {supported}      OPTIONAL,
+    recommendedBitRateQuery-r14                 ENUMERATED {supported}      OPTIONAL
+}
+
+RetuningTimeInfo-r14 ::= SEQUENCE {
+    retuningInfo                SEQUENCE {
+        rf-RetuningTimeDL-r14           ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3,
+                                                    n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5,
+                                                    n7, spare1}     OPTIONAL,
+        rf-RetuningTimeUL-r14           ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3,
+                                                    n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5,
+                                                    n7, spare1}     OPTIONAL
+    }
+}
+
+HighSpeedEnhParameters-r14 ::= SEQUENCE {
+    measurementEnhancements-r14     ENUMERATED {supported}      OPTIONAL,
+    demodulationEnhancements-r14    ENUMERATED {supported}      OPTIONAL,
+    prach-Enhancements-r14          ENUMERATED {supported}      OPTIONAL
+}
+
 
 UE-RadioPagingInfo-r12 ::=              SEQUENCE {
     ue-Category-v1250                   INTEGER (0)         OPTIONAL,
@@ -8839,6 +9881,10 @@ MBMS-NotificationConfig-r9 ::=              SEQUENCE {
     notificationSF-Index-r9             INTEGER (1..6)
 }
 
+MBMS-NotificationConfig-v1430 ::=               SEQUENCE {
+    notificationSF-Index-v1430              INTEGER (7..10)
+}
+
 
 MBMS-ServiceList-r13 ::=            SEQUENCE (SIZE (0..maxMBMS-ServiceListPerUE-r13)) OF MBMS-ServiceInfo-r13
 
@@ -8855,15 +9901,23 @@ MBSFN-AreaInfoList-r9 ::=           SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-A
 MBSFN-AreaInfo-r9 ::=               SEQUENCE {
     mbsfn-AreaId-r9                     MBSFN-AreaId-r12,
     non-MBSFNregionLength               ENUMERATED {s1, s2},
-    notificationIndicator-r9                INTEGER (0..7),
+    notificationIndicator-r9            INTEGER (0..7),
     mcch-Config-r9                      SEQUENCE {
-        mcch-RepetitionPeriod-r9            ENUMERATED {rf32, rf64, rf128, rf256},
-        mcch-Offset-r9                      INTEGER (0..10),
-        mcch-ModificationPeriod-r9          ENUMERATED {rf512, rf1024},
-        sf-AllocInfo-r9                     BIT STRING (SIZE(6)),
-        signallingMCS-r9                    ENUMERATED {n2, n7, n13, n19}
+        mcch-RepetitionPeriod-r9        ENUMERATED {rf32, rf64, rf128, rf256},
+        mcch-Offset-r9                  INTEGER (0..10),
+        mcch-ModificationPeriod-r9      ENUMERATED {rf512, rf1024},
+        sf-AllocInfo-r9                 BIT STRING (SIZE(6)),
+        signallingMCS-r9                ENUMERATED {n2, n7, n13, n19}
     },
-    ...
+    ...,
+    [[  mcch-Config-r14             SEQUENCE {
+            mcch-RepetitionPeriod-v1430     ENUMERATED {rf1, rf2, rf4, rf8,
+                                        rf16 }      OPTIONAL,   -- Need OR
+            mcch-ModificationPeriod-v1430   ENUMERATED {rf1, rf2, rf4, rf8, rf16, rf32, rf64, rf128,
+                                            rf256, spare7}                  OPTIONAL    -- Need OR
+        }                                                                   OPTIONAL,   -- Need OR
+        subcarrierSpacingMBMS-r14       ENUMERATED {khz-7dot5, khz-1dot25}  OPTIONAL    -- Need OR
+    ]]
 }
 
 
@@ -8876,6 +9930,14 @@ MBSFN-SubframeConfig ::=            SEQUENCE {
     }
 }
 
+MBSFN-SubframeConfig-v1430 ::=      SEQUENCE {
+    subframeAllocation-v1430                CHOICE {
+        oneFrame-v1430                      BIT STRING (SIZE(2)),
+        fourFrames-v1430                    BIT STRING (SIZE(8))
+    }
+}
+
+
 PMCH-InfoList-r9 ::=                SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9
 
 PMCH-InfoListExt-r12 ::=            SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-InfoExt-r12
@@ -8917,7 +9979,9 @@ PMCH-Config-r12 ::=                 SEQUENCE {
     },
     mch-SchedulingPeriod-r12        ENUMERATED {
                                         rf4, rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024},
-    ...
+    ...,
+    [[  mch-SchedulingPeriod-v1430      ENUMERATED {rf1, rf2}           OPTIONAL    -- Need OR
+    ]]
 }
 
 TMGI-r9 ::=                     SEQUENCE {
@@ -8929,7 +9993,6 @@ TMGI-r9 ::=                     SEQUENCE {
 }
 
 
-
 SC-MTCH-InfoList-r13 ::=            SEQUENCE (SIZE (0..maxSC-MTCH-r13)) OF SC-MTCH-Info-r13
 
 SC-MTCH-Info-r13 ::=                SEQUENCE    {
@@ -8983,6 +10046,66 @@ SC-MTCH-SchedulingInfo-r13::=       SEQUENCE    {
 }
 
 
+SC-MTCH-InfoList-BR-r14 ::=     SEQUENCE (SIZE (0..maxSC-MTCH-BR-r14)) OF SC-MTCH-Info-BR-r14
+
+SC-MTCH-Info-BR-r14 ::=             SEQUENCE    {
+    sc-mtch-CarrierFreq-r14                 ARFCN-ValueEUTRA-r9,
+    mbmsSessionInfo-r14                     MBMSSessionInfo-r13,
+    g-RNTI-r14                              BIT STRING(SIZE(16)),
+    sc-mtch-schedulingInfo-r14          SC-MTCH-SchedulingInfo-BR-r14               OPTIONAL,   -- Need OP
+    sc-mtch-neighbourCell-r14               BIT STRING (SIZE(maxNeighCell-SCPTM-r13))   OPTIONAL,   -- Need OP
+    mpdcch-Narrowband-SC-MTCH-r14               INTEGER (1.. maxAvailNarrowBands-r13),
+    mpdcch-NumRepetition-SC-MTCH-r14            ENUMERATED {r1, r2, r4, r8, r16, 
+                                                            r32, r64, r128, r256},
+    mpdcch-StartSF-SC-MTCH-r14      CHOICE {
+            fdd-r14                             ENUMERATED {v1, v1dot5, v2, v2dot5, v4,
+                                                                v5, v8, v10},
+            tdd-r14                             ENUMERATED {v1, v2, v4, v5, v8, v10,
+                                                                v20}
+    },
+    mpdcch-PDSCH-HoppingConfig-SC-MTCH-r14      ENUMERATED {on, off},
+    mpdcch-PDSCH-CEmodeConfig-SC-MTCH-r14       ENUMERATED {ce-ModeA, ce-ModeB},
+    mpdcch-PDSCH-MaxBandwidth-SC-MTCH-r14       ENUMERATED {bw1dot4, bw5},
+    mpdcch-Offset-SC-MTCH-r14                   ENUMERATED {zero, oneEighth, oneQuarter,
+                                                            threeEighth, oneHalf, fiveEighth,
+                                                            threeQuarter, sevenEighth},
+
+    p-a-r14                                     ENUMERATED { dB-6, dB-4dot77, dB-3,
+                                                            dB-1dot77, dB0, dB1, dB2,
+                                                            dB3}                OPTIONAL,-- Need OR
+    ...
+}
+
+SC-MTCH-SchedulingInfo-BR-r14::=    SEQUENCE    {
+    onDurationTimerSCPTM-r14                ENUMERATED {
+                                                psf300, psf400, psf500, psf600,
+                                                psf800, psf1000, psf1200, psf1600},
+    drx-InactivityTimerSCPTM-r14            ENUMERATED {
+                                                psf0, psf1, psf2, psf4, psf8, psf16,
+                                                psf32, psf64, psf128, psf256, ps512, 
+                                                psf1024, psf2048, psf4096, psf8192, psf16384},
+    schedulingPeriodStartOffsetSCPTM-r14    CHOICE {
+        sf10                                    INTEGER(0..9),
+        sf20                                    INTEGER(0..19),
+        sf32                                    INTEGER(0..31),
+        sf40                                    INTEGER(0..39),
+        sf64                                    INTEGER(0..63),
+        sf80                                    INTEGER(0..79),
+        sf128                                   INTEGER(0..127),
+        sf160                                   INTEGER(0..159),
+        sf256                                   INTEGER(0..255),
+        sf320                                   INTEGER(0..319),
+        sf512                                   INTEGER(0..511),
+        sf640                                   INTEGER(0..639),
+        sf1024                                  INTEGER(0..1023),
+        sf2048                                  INTEGER(0..2047),
+        sf4096                                  INTEGER(0..4095),
+        sf8192                                  INTEGER(0..8191)
+    },
+    ...
+}
+
+
 SCPTM-NeighbourCellList-r13 ::=     SEQUENCE (SIZE (1..maxNeighCell-SCPTM-r13)) OF PCI-ARFCN-r13
 
 PCI-ARFCN-r13 ::=                   SEQUENCE {
@@ -8991,6 +10114,37 @@ PCI-ARFCN-r13 ::=                   SEQUENCE {
 }
 
 
+SL-AnchorCarrierFreqList-V2X-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF ARFCN-ValueEUTRA-r9
+
+
+SL-CBR-CommonTxConfigList-r14 ::=   SEQUENCE {
+    cbr-RangeCommonConfigList-r14   SEQUENCE (SIZE (1..maxSL-V2X-CBRConfig-r14)) OF SL-CBR-Levels-Config-r14,
+    sl-CBR-PSSCH-TxConfigList-r14   SEQUENCE (SIZE (1..maxSL-V2X-TxConfig-r14)) OF SL-CBR-PSSCH-TxConfig-r14
+}
+
+SL-CBR-Levels-Config-r14 ::=        SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF SL-CBR-r14
+
+
+SL-CBR-PSSCH-TxConfig-r14 ::=       SEQUENCE {
+    cr-Limit-r14                    INTEGER(0..10000),
+    tx-Parameters-r14               SL-PSSCH-TxParameters-r14
+}
+
+SL-CBR-r14 ::=                      INTEGER(0..100)
+
+
+SL-CBR-PPPP-TxConfigList-r14 ::=    SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxConfigIndex-r14
+
+SL-PPPP-TxConfigIndex-r14 ::=       SEQUENCE {
+    priorityThreshold-r14           SL-Priority-r13,
+    defaultTxConfigIndex-r14        INTEGER(0..maxCBR-Level-1-r14),
+    cbr-ConfigIndex-r14             INTEGER(0..maxSL-V2X-CBRConfig-1-r14),
+    tx-ConfigIndexList-r14          SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF Tx-ConfigIndex-r14
+}
+
+Tx-ConfigIndex-r14 ::=              INTEGER(0..maxSL-V2X-TxConfig-1-r14)
+
+
 SL-CommConfig-r12 ::=               SEQUENCE    {
     commTxResources-r12                 CHOICE {
         release                             NULL,
@@ -9095,7 +10249,7 @@ SL-CommResourcePoolV2X-r14 ::=      SEQUENCE {
                                         n48, n50, n72, n75, n96, n100, spare13, spare12, spare11,
                                         spare10, spare9, spare8, spare7, spare6, spare5, spare4, 
                                         spare3, spare2, spare1},
-    numSubchannel-r14                   ENUMERATED {n1, n3, n5, n10, n15, n20, spare2, spare1},
+    numSubchannel-r14                   ENUMERATED {n1, n3, n5, n8, n10, n15, n20, spare1},
     startRB-Subchannel-r14              INTEGER (0..99),
     startRB-PSCCH-Pool-r14              INTEGER (0..99)             OPTIONAL,   -- Need OR
     rxParametersNCell-r14               SEQUENCE {
@@ -9103,12 +10257,36 @@ SL-CommResourcePoolV2X-r14 ::=      SEQUENCE {
         syncConfigIndex-r14             INTEGER (0..15)
     }                                                               OPTIONAL,   -- Need OR
     dataTxParameters-r14                SL-TxParameters-r12         OPTIONAL,   -- Cond Tx
-    zoneID-r14                          INTEGER (0..7)              OPTIONAL,   -- Need OR,
+    zoneID-r14                          INTEGER (0..7)              OPTIONAL,   -- Need OR
+    threshS-RSSI-CBR-r14                    INTEGER (0..45)             OPTIONAL,   -- Need OR
+    poolReportId-r14                    SL-V2X-TxPoolReportIdentity-r14     OPTIONAL,   -- Need OR
+    cbr-pssch-TxConfigList-r14          SL-CBR-PPPP-TxConfigList-r14    OPTIONAL,   -- Need OR
+    resourceSelectionConfigP2X-r14      SL-P2X-ResourceSelectionConfig-r14  OPTIONAL,   -- Cond P2X
+    syncAllowed-r14                     SL-SyncAllowed-r14              OPTIONAL,   -- Need OR
+    restrictResourceReservationPeriod-r14   SL-RestrictResourceReservationPeriodList-r14    OPTIONAL,   -- Need OR
     ...
 }
 
 SL-TRPT-Subset-r12 ::=          BIT STRING (SIZE (3..5))
 
+SL-V2X-TxPoolReportIdentity-r14::=      INTEGER (1..maxSL-PoolToMeasure-r14)
+
+
+SL-CommTxPoolSensingConfig-r14 ::=      SEQUENCE {
+    pssch-TxConfigList-r14                  SL-PSSCH-TxConfigList-r14,
+    thresPSSCH-RSRP-List-r14                SL-ThresPSSCH-RSRP-List-r14,
+    restrictResourceReservationPeriod-r14   SL-RestrictResourceReservationPeriodList-r14    OPTIONAL,   -- Need OR
+    probResourceKeep-r14                ENUMERATED {v0, v0dot2, v0dot4, v0dot6, v0dot8,
+                                                    spare3,spare2, spare1},
+    p2x-SensingConfig-r14                   SEQUENCE {
+        minNumCandidateSF-r14               INTEGER (1..13),
+        gapCandidateSensing-r14             BIT STRING (SIZE (10))
+    }       OPTIONAL,   -- Need OR
+    sl-ReselectAfter-r14                ENUMERATED {n1, n2, n3, n4, n5, n6, n7, n8, n9,
+                                                spare7, spare6, spare5, spare4, spare3, spare2,
+                                                spare1}             OPTIONAL        -- Need OR
+}
+
 
 SL-CP-Len-r12 ::=               ENUMERATED {normal, extended}
 
@@ -9301,8 +10479,40 @@ SL-PoolSelectionConfig-r12 ::=      SEQUENCE {
 }
 
 
-SL-DiscTxPowerInfoList-r12 ::=  SEQUENCE (SIZE (maxSL-DiscPowerClass-r12)) OF SL-DiscTxPowerInfo-r12
-
+SL-DiscSysInfoReport-r13 ::=    SEQUENCE {
+    plmn-IdentityList-r13           PLMN-IdentityList           OPTIONAL,
+    cellIdentity-13                 CellIdentity                OPTIONAL,
+    carrierFreqInfo-13              ARFCN-ValueEUTRA-r9         OPTIONAL,
+    discRxResources-r13             SL-DiscRxPoolList-r12       OPTIONAL,
+    discTxPoolCommon-r13            SL-DiscTxPoolList-r12       OPTIONAL,
+    discTxPowerInfo-r13             SL-DiscTxPowerInfoList-r12  OPTIONAL,
+    discSyncConfig-r13              SL-SyncConfigNFreq-r13      OPTIONAL,
+    discCellSelectionInfo-r13       SEQUENCE {
+        q-RxLevMin-r13                  Q-RxLevMin,
+        q-RxLevMinOffset-r13            INTEGER (1..8)          OPTIONAL
+    }                                                           OPTIONAL,
+    cellReselectionInfo-r13         SEQUENCE {
+        q-Hyst-r13                      ENUMERATED {
+                                                dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10,
+                                                dB12, dB14, dB16, dB18, dB20, dB22, dB24},
+        q-RxLevMin-r13                  Q-RxLevMin,
+        t-ReselectionEUTRA-r13          T-Reselection
+    }                                                           OPTIONAL,
+    tdd-Config-r13                  TDD-Config                  OPTIONAL,
+    freqInfo-r13                    SEQUENCE {
+        ul-CarrierFreq-r13              ARFCN-ValueEUTRA                OPTIONAL,   
+        ul-Bandwidth-r13                ENUMERATED {n6, n15, n25, n50, n75, n100}
+                                                                        OPTIONAL,   
+        additionalSpectrumEmission-r13  AdditionalSpectrumEmission      OPTIONAL
+    }                                                               OPTIONAL,
+    p-Max-r13                       P-Max   OPTIONAL,
+    referenceSignalPower-r13        INTEGER (-60..50)   OPTIONAL,
+    ...
+}
+
+
+SL-DiscTxPowerInfoList-r12 ::=  SEQUENCE (SIZE (maxSL-DiscPowerClass-r12)) OF SL-DiscTxPowerInfo-r12
+
 SL-DiscTxPowerInfo-r12 ::=              SEQUENCE    {
     discMaxTxPower-r12                          P-Max,
     ...
@@ -9346,12 +10556,32 @@ SL-HoppingConfigDisc-r12 ::=    SEQUENCE    {
 }
 
 
-SL-InterFreqInfoListV2X-r14 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-InterFreqInfoV2X-r14
+SL-InterFreqInfoListV2X-r14 ::= SEQUENCE (SIZE (0..maxFreqV2X-1-r14)) OF SL-InterFreqInfoV2X-r14
 
-SL-InterFreqInfoV2X-r14::=      SEQUENCE {
+SL-InterFreqInfoV2X-r14 ::=         SEQUENCE {
+    plmn-IdentityList-r14               PLMN-IdentityList           OPTIONAL,       -- Need OP
     v2x-CommCarrierFreq-r14             ARFCN-ValueEUTRA-r9,
-    typeTxSync-r14                      ENUMERATED {gnss, enb}              OPTIONAL,   -- Need OR
+    sl-MaxTxPower-r14                   P-Max               OPTIONAL,       -- Need OR
+    sl-Bandwidth-r14                    ENUMERATED {n6, n15, n25, n50, n75, n100}   OPTIONAL,   -- Need OR
     v2x-SchedulingPool-r14              SL-CommResourcePoolV2X-r14              OPTIONAL,   -- Need OR
+    v2x-UE-ConfigList-r14       SL-V2X-UE-ConfigList-r14    OPTIONAL,   -- Need OR
+    ...
+}
+
+
+SL-V2X-UE-ConfigList-r14 ::=    SEQUENCE (SIZE (1.. maxCellIntra)) OF SL-V2X-InterFreqUE-Config-r14
+
+SL-V2X-InterFreqUE-Config-r14 ::=       SEQUENCE {
+    physCellIdList-r14                  PhysCellIdList-r13                  OPTIONAL,   -- Need OR
+    typeTxSync-r14                      SL-TypeTxSync-r14                   OPTIONAL,   -- Need OR
+    v2x-SyncConfig-r14                  SL-SyncConfigListNFreqV2X-r14       OPTIONAL,   -- Need OR
+    v2x-CommRxPool-r14                  SL-CommRxPoolListV2X-r14                OPTIONAL,   -- Need OR
+    v2x-CommTxPoolNormal-r14                SL-CommTxPoolListV2X-r14                OPTIONAL,   -- Need OR
+    p2x-CommTxPoolNormal-r14                SL-CommTxPoolListV2X-r14                OPTIONAL,   -- Need OR
+    v2x-CommTxPoolExceptional-r14       SL-CommResourcePoolV2X-r14          OPTIONAL,   -- Need OR
+    v2x-ResourceSelectionConfig-r14     SL-CommTxPoolSensingConfig-r14      OPTIONAL,   -- Need OR
+    zoneConfig-r14                      SL-ZoneConfig-r14                   OPTIONAL,   -- Need OR
+    offsetDFN-r14                       INTEGER (0..1000)                   OPTIONAL,   -- Need OR
     ...
 }
 
@@ -9363,7 +10593,15 @@ SL-OffsetIndicator-r12 ::=          CHOICE {
 
 SL-OffsetIndicatorSync-r12 ::=          INTEGER (0..39)
 
-SL-OffsetIndicatorSync-v14xy ::=        INTEGER (40..159)
+SL-OffsetIndicatorSync-v1430 ::=        INTEGER (40..159)
+
+SL-OffsetIndicatorSync-r14 ::=          INTEGER (0..159)
+
+
+SL-P2X-ResourceSelectionConfig-r14 ::=          SEQUENCE {
+    partialSensing-r14              ENUMERATED {true}               OPTIONAL,   -- Need OR
+    randomSelection-r14             ENUMERATED {true}               OPTIONAL    -- Need OR
+}
 
 
 SL-PeriodComm-r12 ::=                   ENUMERATED {sf40, sf60, sf70, sf80, sf120, sf140,
@@ -9379,7 +10617,7 @@ SL-Priority-r13 ::=         INTEGER (1..8)
 SL-PSSCH-TxConfigList-r14 ::=   SEQUENCE (SIZE (1..maxPSSCH-TxConfig-r14)) OF SL-PSSCH-TxConfig-r14
 
 SL-PSSCH-TxConfig-r14 ::=       SEQUENCE {
-    typeTxSync-r14              ENUMERATED {gnss, enb, ue, spare1}      OPTIONAL,   -- Need OR
+    typeTxSync-r14              SL-TypeTxSync-r14       OPTIONAL,   -- Need OR
     thresUE-Speed-r14           ENUMERATED {kmph60, kmph80, kmph100, kmph120, 
                                 kmph140, kmph160, kmph180, kmph200},
     parametersAboveThres-r14    SL-PSSCH-TxParameters-r14,
@@ -9390,9 +10628,10 @@ SL-PSSCH-TxConfig-r14 ::=       SEQUENCE {
 SL-PSSCH-TxParameters-r14 ::=       SEQUENCE {
     minMCS-PSSCH-r14            INTEGER (0..31),
     maxMCS-PSSCH-r14            INTEGER (0..31),
-    minRB-NumberPSSCH-r14       INTEGER (1..100),
-    maxRB-NumberPSSCH-r14       INTEGER (1..100),
-    allowedRetxNumberPSSCH-r14  ENUMERATED {n0, n1, both, spare1}
+    minSubChannel-NumberPSSCH-r14       INTEGER (1..20),
+    maxSubchannel-NumberPSSCH-r14       INTEGER (1..20),
+    allowedRetxNumberPSSCH-r14  ENUMERATED {n0, n1, both, spare1},
+    maxTxPower-r14              SL-TxPower-r14              OPTIONAL            -- Cond CBR
 }
 
 
@@ -9404,6 +10643,13 @@ SL-RestrictResourceReservationPeriod-r14 ::=        ENUMERATED {v0dot2, v0dot5,
 SLSSID-r12 ::=                  INTEGER (0..167)
 
 
+SL-SyncAllowed-r14 ::=      SEQUENCE {
+    gnss-Sync-r14                       ENUMERATED {true}               OPTIONAL,   -- Need OR
+    enb-Sync-r14                        ENUMERATED {true}               OPTIONAL,   -- Need OR
+    ue-Sync-r14                         ENUMERATED {true}               OPTIONAL    -- Need OR
+}
+
+
 SL-SyncConfigList-r12 ::=       SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfig-r12
 
 SL-SyncConfigListV2X-r14 ::=    SEQUENCE (SIZE (1.. maxSL-V2X-SyncConfig-r14)) OF SL-SyncConfig-r12
@@ -9424,12 +10670,15 @@ SL-SyncConfig-r12 ::=                   SEQUENCE {
     ...,
     [[  syncTxPeriodic-r13                  ENUMERATED {true}           OPTIONAL    -- Need OR
     ]],
-    [[  syncOffsetIndicator-v14xy       SL-OffsetIndicatorSync-v14xy    OPTIONAL    -- Need OR
+    [[  syncOffsetIndicator-v1430       SL-OffsetIndicatorSync-v1430    OPTIONAL,   -- Need OR
+        gnss-Sync-r14                   ENUMERATED {true}               OPTIONAL    -- Need OR
     ]]
 }
 
 SL-SyncConfigListNFreq-r13 ::=      SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfigNFreq-r13
 
+SL-SyncConfigListNFreqV2X-r14 ::=       SEQUENCE (SIZE (1..maxSL-V2X-SyncConfig-r14)) OF SL-SyncConfigNFreq-r13
+
 SL-SyncConfigNFreq-r13 ::=          SEQUENCE {
     asyncParameters-r13                 SEQUENCE {
         syncCP-Len-r13                      SL-CP-Len-r12,
@@ -9445,39 +10694,10 @@ SL-SyncConfigNFreq-r13 ::=          SEQUENCE {
     rxParameters-r13                    SEQUENCE {
         discSyncWindow-r13                  ENUMERATED {w1, w2}
     }                                                                   OPTIONAL,   -- Need OR
-    ...
-}
-
-
-SL-DiscSysInfoReport-r13 ::=    SEQUENCE {
-    plmn-IdentityList-r13           PLMN-IdentityList           OPTIONAL,
-    cellIdentity-13                 CellIdentity                OPTIONAL,
-    carrierFreqInfo-13              ARFCN-ValueEUTRA-r9         OPTIONAL,
-    discRxResources-r13             SL-DiscRxPoolList-r12       OPTIONAL,
-    discTxPoolCommon-r13            SL-DiscTxPoolList-r12       OPTIONAL,
-    discTxPowerInfo-r13             SL-DiscTxPowerInfoList-r12  OPTIONAL,
-    discSyncConfig-r13              SL-SyncConfigNFreq-r13      OPTIONAL,
-    discCellSelectionInfo-r13       SEQUENCE {
-        q-RxLevMin-r13                  Q-RxLevMin,
-        q-RxLevMinOffset-r13            INTEGER (1..8)          OPTIONAL
-    }                                                           OPTIONAL,
-    cellReselectionInfo-r13         SEQUENCE {
-        q-Hyst-r13                      ENUMERATED {
-                                                dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10,
-                                                dB12, dB14, dB16, dB18, dB20, dB22, dB24},
-        q-RxLevMin-r13                  Q-RxLevMin,
-        t-ReselectionEUTRA-r13          T-Reselection
-    }                                                           OPTIONAL,
-    tdd-Config-r13                  TDD-Config                  OPTIONAL,
-    freqInfo-r13                    SEQUENCE {
-        ul-CarrierFreq-r13              ARFCN-ValueEUTRA                OPTIONAL,   
-        ul-Bandwidth-r13                ENUMERATED {n6, n15, n25, n50, n75, n100}
-                                                                        OPTIONAL,   
-        additionalSpectrumEmission-r13  AdditionalSpectrumEmission      OPTIONAL
-    }                                                               OPTIONAL,
-    p-Max-r13                       P-Max   OPTIONAL,
-    referenceSignalPower-r13        INTEGER (-60..50)   OPTIONAL,
-    ...
+    ...,
+    [[  syncOffsetIndicator-v1430       SL-OffsetIndicatorSync-v1430    OPTIONAL,   -- Need OR
+        gnss-Sync-r14                   ENUMERATED {true}               OPTIONAL    -- Need OR
+    ]]
 }
 
 
@@ -9500,13 +10720,27 @@ SubframeBitmapSL-r12 ::=        CHOICE {
 }
 
 SubframeBitmapSL-r14 ::=        CHOICE {
+    bs10-r14                                BIT STRING (SIZE (10)),
     bs16-r14                                BIT STRING (SIZE (16)),
     bs20-r14                                BIT STRING (SIZE (20)),
+    bs30-r14                                BIT STRING (SIZE (30)),
+    bs40-r14                                BIT STRING (SIZE (40)),
+    bs50-r14                                BIT STRING (SIZE (50)),
+    bs60-r14                                BIT STRING (SIZE (60)),
     bs100-r14                               BIT STRING (SIZE (100))
 }
 
 
-SL-ThresPSSCH-RSRP-List-r14 ::= SEQUENCE (SIZE (1..64)) OF SL-ThresPSSCH-RSRP-r14
+SL-TxPower-r14 ::=      CHOICE {
+    minusinfinity-r14               NULL,
+    txPower-r14                     INTEGER (-41..31)
+}
+
+
+SL-TypeTxSync-r14 ::=       ENUMERATED {gnss, enb, ue}
+
+
+SL-ThresPSSCH-RSRP-List-r14 ::= SEQUENCE (SIZE (64)) OF SL-ThresPSSCH-RSRP-r14
 
 SL-ThresPSSCH-RSRP-r14 ::=      INTEGER (0..66)
 
@@ -9536,17 +10770,17 @@ SL-V2X-ConfigDedicated-r14 ::=              SEQUENCE    {
         release                             NULL,
         setup                               CHOICE {
             scheduled-r14                   SEQUENCE {
-                sl-D-RNTI-r14           C-RNTI,
-                mac-MainConfig-r14              MAC-MainConfigSL-r12        OPTIONAL,   -- Need OP
-                v2x-SchedulingPool-r14          SL-CommResourcePoolV2X-r14  OPTIONAL,   -- Need OP
-                mcs-r14                         INTEGER (0..31)             OPTIONAL,   -- Need OP
+                sl-V-RNTI-r14           C-RNTI,
+                mac-MainConfig-r14              MAC-MainConfigSL-r12,
+                v2x-SchedulingPool-r14          SL-CommResourcePoolV2X-r14  OPTIONAL,   -- Need ON
+                mcs-r14                         INTEGER (0..31)             OPTIONAL,   -- Need OR
                 logicalChGroupInfoList-r14      LogicalChGroupInfoList-r13
             },
             ue-Selected-r14                 SEQUENCE {
                 -- Pool for normal usage
                 v2x-CommTxPoolNormalDedicated-r14   SEQUENCE {
                     poolToReleaseList-r14   SL-TxPoolToReleaseListV2X-r14   OPTIONAL,   -- Need ON
-                    poolToAddModList-r14    SL-TxPoolToAddModListV2X-r14    OPTIONAL,   -- Need ON
+                    poolToAddModList-r14        SL-TxPoolToAddModListV2X-r14        OPTIONAL,   -- Need ON
                     v2x-CommTxPoolSensingConfig-r14     SL-CommTxPoolSensingConfig-r14
                                                                             OPTIONAL    -- Need ON
                 }
@@ -9554,10 +10788,15 @@ SL-V2X-ConfigDedicated-r14 ::=              SEQUENCE    {
         }
     }                                                                       OPTIONAL,   -- Need ON
     v2x-InterFreqInfoList-r14           SL-InterFreqInfoListV2X-r14         OPTIONAL,   -- Need ON
+    thresSL-TxPrioritization-r14            SL-Priority-r13                         OPTIONAL,   -- Need OR
+    typeTxSync-r14                      SL-TypeTxSync-r14                   OPTIONAL,   -- Need OR
+    cbr-DedicatedTxConfigList-r14       SL-CBR-CommonTxConfigList-r14   OPTIONAL,   -- Need OR
     ...
 }
 
-SL-TxPoolToAddModListV2X-r14 ::=        SEQUENCE    {
+SL-TxPoolToAddModListV2X-r14 ::=        SEQUENCE (SIZE (1.. maxSL-V2X-TxPool-r14)) OF SL-TxPoolToAddMod-r14
+
+SL-TxPoolToAddMod-r14 ::=   SEQUENCE    {
     poolIdentity-r14                    SL-V2X-TxPoolIdentity-r14,
     pool-r14                            SL-CommResourcePoolV2X-r14
 }
@@ -9566,10 +10805,10 @@ SL-TxPoolToReleaseListV2X-r14 ::=   SEQUENCE (SIZE (1.. maxSL-V2X-TxPool-r14)) O
 
 
 SL-ZoneConfig-r14 ::=       SEQUENCE {
-    zoneLength-r14  ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1}   OPTIONAL, -- Need OR
-    zoneWidth-r14   ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1}   OPTIONAL, -- Need OR
-    zoneIdLongiMod-r14  INTEGER (1..4)                                  OPTIONAL,   -- Need OR
-    zoneIdLatiMod-r14   INTEGER (1..4)                                  OPTIONAL    -- Need OR
+    zoneLength-r14  ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1},
+    zoneWidth-r14   ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1},
+    zoneIdLongiMod-r14  INTEGER (1..4),
+    zoneIdLatiMod-r14   INTEGER (1..4)
 }
 
 
@@ -9582,6 +10821,9 @@ maxBands                    INTEGER ::= 64  -- Maximum number of bands listed in
 maxBandwidthClass-r10       INTEGER ::= 16  -- Maximum number of supported CA BW classes per band
 maxBandwidthCombSet-r10     INTEGER ::= 32  -- Maximum number of bandwidth combination sets per
                                             -- supported band combination
+maxCBR-Level-r14            INTEGER ::= 16  -- Maximum number of CBR levels 
+maxCBR-Level-1-r14          INTEGER ::= 15
+maxCBR-Report-r14           INTEGER ::= 72  -- Maximum number of CBR results in a report
 maxCDMA-BandClass           INTEGER ::= 32  -- Maximum value of the CDMA band classes
 maxCE-Level-r13             INTEGER ::= 4   -- Maximum number of CE levels
 maxCellBlack                INTEGER ::= 16  -- Maximum number of blacklisted physical cell identity
@@ -9632,6 +10874,7 @@ maxCellListGERAN            INTEGER ::= 3   -- Maximum number of lists of GERAN
 maxCellMeas                 INTEGER ::= 32  -- Maximum number of entries in each of the
                                             -- cell lists in a measurement object
 maxCellReport               INTEGER ::= 8   -- Maximum number of reported cells/CSI-RS resources
+maxConfigSPS-r14            INTEGER ::= 8   -- Maximum number of simultaneous SPS configurations
 maxCSI-RS-Meas-r12          INTEGER ::= 96  -- Maximum number of entries in the CSI-RS list
                                             -- in a measurement object
 maxDRB                      INTEGER ::= 11  -- Maximum number of Data Radio Bearers
@@ -9651,6 +10894,9 @@ maxFreqIDC-r11              INTEGER ::= 32  -- Maximum number of carrier frequen
                                             -- affected by the IDC problems
 maxFreqMBMS-r11             INTEGER ::= 5   -- Maximum number of carrier frequencies for which an 
                                             -- MBMS capable UE may indicate an interest
+maxFreqV2X-r14              INTEGER ::= 8   -- Maximum number of carrier frequencies for which V2X 
+                                            -- sidelink communication can be configured
+maxFreqV2X-1-r14                INTEGER ::= 7   -- Highest index of frequencies
 maxGERAN-SI                 INTEGER ::= 10  -- Maximum number of GERAN SI blocks that can be
                                             -- provided as part of NACC information
 maxGNFG                     INTEGER ::= 16  -- Maximum number of GERAN neighbour freq groups
@@ -9681,6 +10927,7 @@ maxP-a-PerNeighCell-r12     INTEGER ::= 3   -- Maximum number of power offsets f
 maxPageRec                  INTEGER ::= 16  -- 
 maxPhysCellIdRange-r9       INTEGER ::= 4   -- Maximum number of physical cell identity ranges
 maxPLMN-r11                 INTEGER ::= 6   -- Maximum number of PLMNs
+maxPLMN-1-r14               INTEGER ::= 5   -- Maximum number of PLMNs minus one
 maxPNOffset                 INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets
 maxPMCH-PerMBSFN            INTEGER ::= 15
 maxPSSCH-TxConfig-r14       INTEGER ::= 16  -- Maximum number of PSSCH TX configurations
@@ -9690,7 +10937,7 @@ maxRE-MapQCL-r11            INTEGER ::= 4   -- Maximum number of PDSCH RE Mappin
                                             --  (per carrier frequency)
 maxReportConfigId           INTEGER ::= 32
 maxReservationPeriod-r14    INTEGER ::= 16  -- Maximum number of resource reservation periodicities
-                                            --  for sidelink V2X communications
+                                            --  for sidelink V2X communication
 maxRSTD-Freq-r10            INTEGER ::= 3   -- Maximum number of frequency layers for RSTD
                                             -- measurement
 maxSAI-MBMS-r11             INTEGER ::= 64  -- Maximum number of MBMS service area identities
@@ -9698,6 +10945,7 @@ maxSAI-MBMS-r11             INTEGER ::= 64  -- Maximum number of MBMS service ar
 maxSCell-r10                INTEGER ::= 4   -- Maximum number of SCells
 maxSCell-r13                INTEGER ::= 31  -- Highest value of extended number range of SCells
 maxSC-MTCH-r13              INTEGER ::= 1023    -- Maximum number of SC-MTCHs in one cell
+maxSC-MTCH-BR-r14           INTEGER ::= 128 -- Maximum number of SC-MTCHs in one cell for feMTC
 maxSL-CommRxPoolNFreq-r13   INTEGER ::= 32  -- Maximum number of individual sidelink communication
                                             -- Rx resource pools on neighbouring freq
 maxSL-CommRxPoolPreconf-v1310   INTEGER ::= 12  -- Maximum number of additional preconfigured
@@ -9722,22 +10970,40 @@ maxSL-DiscTxPoolPreconf-r13     INTEGER ::= 4   -- Maximum number of preconfigur
                                                 -- discovery Tx resource pool entries
 maxSL-GP-r13            INTEGER ::= 8   -- Maximum number of gap patterns that can be requested
                                         -- for a frequency or assigned
+maxSL-PoolToMeasure-r14     INTEGER ::= 72  -- Maximum number of TX resource pools for CBR
+                                                -- measurement and report
 maxSL-Prio-r13          INTEGER ::= 8   -- Maximum number of entries in sidelink priority list
 maxSL-RxPool-r12            INTEGER ::= 16  -- Maximum number of individual sidelink Rx resource pools
 maxSL-SyncConfig-r12        INTEGER ::= 16  -- Maximum number of sidelink Sync configurations
 maxSL-TF-IndexPair-r12  INTEGER ::= 64  -- Maximum number of sidelink Time Freq resource index
                                             --  pairs
 maxSL-TxPool-r12            INTEGER ::= 4   -- Maximum number of individual sidelink Tx resource pools
-maxSL-V2X-RxPool-r14        INTEGER ::= 16  -- Maximum number of RX resource pools for 
+maxSL-V2X-RxPool-r14        INTEGER ::= 16  -- Maximum number of RX resource pools for
                                                 -- V2X sidelink communication
-maxSL-V2X-RxPoolPreconf-r14 INTEGER ::= 16      -- Maximum number of RX resource pools for 
+maxSL-V2X-RxPoolPreconf-r14 INTEGER ::= 16      -- Maximum number of RX resource pools for
                                                 -- V2X sidelink communication
-maxSL-V2X-TxPool-r14        INTEGER ::= 8   -- Maximum number of TX resource pools for 
+maxSL-V2X-TxPool-r14        INTEGER ::= 8   -- Maximum number of TX resource pools for
                                                 -- V2X sidelink communication
-maxSL-V2X-TxPoolPreconf-r14 INTEGER ::= 8       -- Maximum number of TX resource pools for 
+maxSL-V2X-TxPoolPreconf-r14 INTEGER ::= 8       -- Maximum number of TX resource pools for
                                                 -- V2X sidelink communication
 maxSL-V2X-SyncConfig-r14    INTEGER ::= 16  -- Maximum number of sidelink Sync configurations
                                                 -- for V2X sidelink communication
+maxSL-V2X-CBRConfig-r14     INTEGER ::= 4   -- Maximum number of CBR range configurations 
+                                                -- for V2X sidelink communication congestion
+                                                -- control
+maxSL-V2X-CBRConfig-1-r14   INTEGER ::= 3
+maxSL-V2X-TxConfig-r14      INTEGER ::= 64  -- Maximum number of TX parameter configurations
+                                                -- for V2X sidelink communication congestion
+                                                -- control
+maxSL-V2X-TxConfig-1-r14    INTEGER ::= 63
+maxSL-V2X-CBRConfig2-r14        INTEGER ::= 8   -- Maximum number of CBR range configurations in
+                                                -- pre-configuration for V2X sidelink
+                                                -- communication congestion control
+maxSL-V2X-CBRConfig2-1-r14  INTEGER ::= 7
+maxSL-V2X-TxConfig2-r14     INTEGER ::= 128 -- Maximum number of TX parameter
+                                                -- configurations in pre-configuration for V2X
+                                                -- sidelink communication congestion control
+maxSL-V2X-TxConfig2-1-r14   INTEGER ::= 127
 maxSTAG-r11                 INTEGER ::= 3   -- Maximum number of STAGs
 maxServCell-r10             INTEGER ::= 5   -- Maximum number of Serving cells
 maxServCell-r13             INTEGER ::= 32  -- Highest value of extended number range of Serving cells
@@ -9753,6 +11019,9 @@ maxSimultaneousBands-r10    INTEGER ::= 64  -- Maximum number of simultaneously
 maxSubframePatternIDC-r11   INTEGER ::= 8   -- Maximum number of subframe reservation patterns
                                             -- that the UE can simultaneously recommend to the
                                             -- E-UTRAN for use.
+maxTrafficPattern-r14       INTEGER ::= 8   -- Maximum number of periodical traffic patterns
+                                            -- that the UE can simultaneously report to the
+                                            -- E-UTRAN.
 maxUTRA-FDD-Carrier         INTEGER ::= 16  -- Maximum number of UTRA FDD carrier frequencies
 maxUTRA-TDD-Carrier         INTEGER ::= 16  -- Maximum number of UTRA TDD carrier frequencies
 maxWLAN-Id-r12              INTEGER ::= 16  -- Maximum number of WLAN identifiers
@@ -9761,6 +11030,7 @@ maxWLAN-Id-r13              INTEGER ::= 32  -- Maximum number of WLAN identifier
 maxWLAN-Channels-r13        INTEGER ::= 16  -- maximum number of WLAN channels used in
                                             -- WLAN-CarrierInfo
 maxWLAN-CarrierInfo-r13     INTEGER ::= 8   -- Maximum number of WLAN Carrier Information
+maxWLAN-Id-Report-r14       INTEGER ::= 32  -- Maximum number of WLAN IDs to report
 
 
 END
@@ -9782,6 +11052,13 @@ SBCCH-SL-BCH-Message ::= SEQUENCE {
 SBCCH-SL-BCH-MessageType ::=                        MasterInformationBlock-SL
 
 
+SBCCH-SL-BCH-Message-V2X-r14 ::= SEQUENCE {
+    message                 SBCCH-SL-BCH-MessageType-V2X-r14
+}
+
+SBCCH-SL-BCH-MessageType-V2X-r14 ::=                MasterInformationBlock-SL-V2X-r14
+
+
 MasterInformationBlock-SL ::=       SEQUENCE {
     sl-Bandwidth-r12                    ENUMERATED {
                                             n6, n15, n25, n50, n75, n100},
@@ -9794,6 +11071,18 @@ MasterInformationBlock-SL ::=       SEQUENCE {
 
 
 
+MasterInformationBlock-SL-V2X-r14 ::=       SEQUENCE {
+    sl-Bandwidth-r14                    ENUMERATED {
+                                            n6, n15, n25, n50, n75, n100},
+    tdd-ConfigSL-r14                    TDD-ConfigSL-r12,
+    directFrameNumber-r14               BIT STRING (SIZE (10)),
+    directSubframeNumber-r14            INTEGER (0..9),
+    inCoverage-r14                      BOOLEAN,
+    reserved-r14                        BIT STRING (SIZE (27))
+}
+
+
+
 END
 
 
@@ -9822,8 +11111,12 @@ IMPORTS
     maxMultiBands,
     maxPageRec,
     maxPLMN-r11,
+    maxSAI-MBMS-r11,
     maxSIB,
     maxSIB-1,
+    MBMS-SAI-r11,
+    MBMS-SAI-List-r11,
+    MBMSSessionInfo-r13,
     NextHopChainingCount,
     PagingUE-Identity,
     PLMN-Identity,
@@ -9844,8 +11137,12 @@ IMPORTS
     S-TMSI,
     SystemInformationBlockType16-r11,
     SystemInfoValueTagSI-r13,
+    T-Reordering,
     TimeAlignmentTimer,
-    TrackingAreaCode
+    TMGI-r9,
+    TrackingAreaCode,
+    DataInactivityTimer-r14
+
 FROM EUTRA-RRC-Definitions;
 
 
@@ -9933,6 +11230,19 @@ UL-CCCH-MessageType-NB ::= CHOICE {
 }
 
 
+SC-MCCH-Message-NB ::= SEQUENCE {
+    message                 SC-MCCH-MessageType-NB
+}
+
+
+SC-MCCH-MessageType-NB ::= CHOICE {
+    c1                      CHOICE {
+        scptmConfiguration-r14                      SCPTMConfiguration-NB-r14
+    },
+    messageClassExtension   SEQUENCE {}
+}
+
+
 UL-DCCH-Message-NB ::= SEQUENCE {
     message                 UL-DCCH-MessageType-NB
 }
@@ -10076,7 +11386,12 @@ RRCConnectionReestablishment-NB-r13-IEs ::= SEQUENCE {
     radioResourceConfigDedicated-r13            RadioResourceConfigDedicated-NB-r13,
     nextHopChainingCount-r13                    NextHopChainingCount,
     lateNonCriticalExtension                    OCTET STRING                        OPTIONAL,
-    nonCriticalExtension                        SEQUENCE {}                         OPTIONAL
+    nonCriticalExtension                        RRCConnectionReestablishment-NB-v1430-IEs   OPTIONAL
+}
+
+RRCConnectionReestablishment-NB-v1430-IEs ::=   SEQUENCE {
+    dl-NAS-MAC                          BIT STRING (SIZE (16)), -- Cond Reestablish-CP 
+    nonCriticalExtension                SEQUENCE {}             OPTIONAL
 }
 
 
@@ -10098,21 +11413,36 @@ RRCConnectionReestablishmentRequest-NB ::= SEQUENCE {
     criticalExtensions                  CHOICE {
         rrcConnectionReestablishmentRequest-r13
                                             RRCConnectionReestablishmentRequest-NB-r13-IEs,
-        criticalExtensionsFuture            SEQUENCE {}
+        later   CHOICE {
+                    rrcConnectionReestablishmentRequest-r14
+                                            RRCConnectionReestablishmentRequest-NB-r14-IEs,
+                    criticalExtensionsFuture    SEQUENCE {}
+        }
     }
 }
 
 RRCConnectionReestablishmentRequest-NB-r13-IEs ::= SEQUENCE {
     ue-Identity-r13                     ReestabUE-Identity,
-    reestablishmentCause-r13            ReestablishmentCause-NB-r13,
+    reestablishmentCause-r13                ReestablishmentCause-NB-r13,
     spare                               BIT STRING (SIZE (25))
 }
 
+RRCConnectionReestablishmentRequest-NB-r14-IEs ::= SEQUENCE {
+    ue-Identity-r14                     ReestabUE-Identity-CP-NB-r14,
+    reestablishmentCause-r14                ReestablishmentCause-NB-r13,
+    spare                               BIT STRING (SIZE (4))
+}
 
 ReestablishmentCause-NB-r13 ::=         ENUMERATED {
                                             reconfigurationFailure, otherFailure, 
                                             spare2, spare1}
 
+ReestabUE-Identity-CP-NB-r14 ::=            SEQUENCE {
+    s-TMSI-r14                          S-TMSI,
+    ul-NAS-MAC-r14                      BIT STRING (SIZE (16)),
+    ul-NAS-Count-r14                        BIT STRING (SIZE (5))
+}
+
 
 RRCConnectionReject-NB ::=              SEQUENCE {
     criticalExtensions                  CHOICE {
@@ -10149,15 +11479,29 @@ RRCConnectionRelease-NB-r13-IEs ::= SEQUENCE {
     extendedWaitTime-r13                INTEGER (1..1800)               OPTIONAL,   -- Need ON
     redirectedCarrierInfo-r13           RedirectedCarrierInfo-NB-r13    OPTIONAL,   -- Need ON
     lateNonCriticalExtension            OCTET STRING                    OPTIONAL,
-    nonCriticalExtension                SEQUENCE {}                     OPTIONAL
+    nonCriticalExtension                RRCConnectionRelease-NB-v1430-IEs       OPTIONAL
 }
 
+RRCConnectionRelease-NB-v1430-IEs ::=   SEQUENCE {
+    redirectedCarrierInfo-v1430         RedirectedCarrierInfo-NB-v1430  OPTIONAL,   -- Cond Redirection 
+    extendedWaitTime-CPdata-r14             INTEGER (1..1800)   OPTIONAL,   -- Cond NoExtendedWaitTime
+    nonCriticalExtension                SEQUENCE {}                     OPTIONAL
+}
 
 ReleaseCause-NB-r13 ::=                 ENUMERATED {loadBalancingTAUrequired, other, 
                                                     rrc-Suspend, spare1}
-
 RedirectedCarrierInfo-NB-r13::=         CarrierFreq-NB-r13
 
+RedirectedCarrierInfo-NB-v1430  ::=     SEQUENCE {
+    redirectedCarrierOffsetDedicated-r14    ENUMERATED{
+                                                dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10,
+                                                dB12, dB14, dB16, dB18, dB20, dB22, dB24, dB26},
+    t322-r14                                ENUMERATED{
+                                                min5, min10, min20, min30, min60, min120, min180,
+                                                spare1}
+}
+
+
 RRCConnectionRequest-NB ::=     SEQUENCE {
     criticalExtensions                  CHOICE {
         rrcConnectionRequest-r13            RRCConnectionRequest-NB-r13-IEs,
@@ -10259,7 +11603,21 @@ RRCConnectionSetupComplete-NB-r13-IEs ::= SEQUENCE {
     attachWithoutPDN-Connectivity-r13       ENUMERATED {true}               OPTIONAL,
     up-CIoT-EPS-Optimisation-r13            ENUMERATED {true}               OPTIONAL,
     lateNonCriticalExtension                OCTET STRING                    OPTIONAL,
-    nonCriticalExtension                    SEQUENCE {}                     OPTIONAL
+    nonCriticalExtension                    RRCConnectionSetupComplete-NB-v1430-IEs OPTIONAL
+}
+
+RRCConnectionSetupComplete-NB-v1430-IEs ::= SEQUENCE {
+    gummei-Type-r14                         ENUMERATED { mapped}    OPTIONAL,
+    dcn-ID-r14                              INTEGER (0..65535)          OPTIONAL,
+    nonCriticalExtension                        SEQUENCE {}                 OPTIONAL
+}
+
+
+SCPTMConfiguration-NB-r14 ::=       SEQUENCE {
+    sc-mtch-InfoList-r14            SC-MTCH-InfoList-NB-r14,
+    scptm-NeighbourCellList-r14     SCPTM-NeighbourCellList-NB-r14      OPTIONAL,   -- Need OP
+    lateNonCriticalExtension        OCTET STRING                        OPTIONAL,
+    nonCriticalExtension            SEQUENCE {}                         OPTIONAL
 }
 
 
@@ -10277,7 +11635,10 @@ SystemInformation-NB-r13-IEs ::=    SEQUENCE {
         sib5-r13                            SystemInformationBlockType5-NB-r13,
         sib14-r13                           SystemInformationBlockType14-NB-r13,
         sib16-r13                           SystemInformationBlockType16-NB-r13,
-        ...
+        ...,
+        sib15-v1430                         SystemInformationBlockType15-NB-r14,
+        sib20-v1430                         SystemInformationBlockType20-NB-r14,
+        sib22-v1430                         SystemInformationBlockType22-NB-r14
     },
     lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
     nonCriticalExtension                SEQUENCE {}                         OPTIONAL
@@ -10315,6 +11676,16 @@ SystemInformationBlockType1-NB ::=  SEQUENCE {
     si-RadioFrameOffset-r13             INTEGER (1..15)     OPTIONAL,   -- Need OP 
     systemInfoValueTagList-r13          SystemInfoValueTagList-NB-r13   OPTIONAL,   -- Need OR
     lateNonCriticalExtension            OCTET STRING                    OPTIONAL,
+    nonCriticalExtension                SystemInformationBlockType1-NB-v1350    OPTIONAL
+}
+
+SystemInformationBlockType1-NB-v1350 ::=    SEQUENCE {
+    cellSelectionInfo-v1350             CellSelectionInfo-NB-v1350  OPTIONAL,   -- Cond Qrxlevmin
+    nonCriticalExtension                SystemInformationBlockType1-NB-v1430    OPTIONAL
+}
+
+SystemInformationBlockType1-NB-v1430 ::=    SEQUENCE {
+    cellSelectionInfo-v1430             CellSelectionInfo-NB-v1430      OPTIONAL,   -- Need OR
     nonCriticalExtension                SEQUENCE {}                     OPTIONAL
 }
 
@@ -10344,8 +11715,17 @@ SIB-MappingInfo-NB-r13 ::=          SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type-NB
 
 SIB-Type-NB-r13 ::=                 ENUMERATED {
                                         sibType3-NB-r13, sibType4-NB-r13, sibType5-NB-r13, 
-                                        sibType14-NB-r13, sibType16-NB-r13, spare3, spare2, spare1}
+                                        sibType14-NB-r13, sibType16-NB-r13, sibType15-NB-r14, sibType20-NB-r14, 
+                                        sibType22-NB-r14}
 
+CellSelectionInfo-NB-v1350 ::=      SEQUENCE {
+    delta-RxLevMin-v1350                INTEGER (-8..-1)
+}
+
+CellSelectionInfo-NB-v1430 ::=      SEQUENCE {
+    powerClass14dBm-Offset-r14          ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12}    OPTIONAL,   --  Need OP
+    ce-authorisationOffset-r14          ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35}    OPTIONAL    --  Need OP
+}
 
 
 UECapabilityEnquiry-NB ::=  SEQUENCE {
@@ -10399,13 +11779,15 @@ SystemInformationBlockType2-NB-r13 ::=  SEQUENCE {
     radioResourceConfigCommon-r13           RadioResourceConfigCommonSIB-NB-r13,
     ue-TimersAndConstants-r13               UE-TimersAndConstants-NB-r13,
     freqInfo-r13                            SEQUENCE {
-        ul-CarrierFreq-r13                      CarrierFreq-NB-r13              OPTIONAL,-- Need OP
+        ul-CarrierFreq-r13                      CarrierFreq-NB-r13          OPTIONAL,   -- Need OP
         additionalSpectrumEmission-r13          AdditionalSpectrumEmission
     },
     timeAlignmentTimerCommon-r13            TimeAlignmentTimer,
-    multiBandInfoList-r13   SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission        OPTIONAL,-- Need OR
+    multiBandInfoList-r13   SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission        OPTIONAL,   -- Need OR
     lateNonCriticalExtension                    OCTET STRING                    OPTIONAL,
-    ...
+    ...,
+    [[  cp-Reestablishment-r14              ENUMERATED {true}               OPTIONAL        -- Need OP
+    ]]
 }
 
 
@@ -10430,7 +11812,26 @@ SystemInformationBlockType3-NB-r13 ::=  SEQUENCE {
     multiBandInfoList-r13                   SEQUENCE (SIZE (1..maxMultiBands)) OF 
                                                 NS-PmaxList-NB-r13          OPTIONAL,   -- Need OR
     lateNonCriticalExtension                    OCTET STRING                OPTIONAL,
-    ...
+    ...,
+    [[  intraFreqCellReselectionInfo-v1350      IntraFreqCellReselectionInfo-NB-v1350 OPTIONAL  -- Cond Qrxlevmin
+    ]], 
+    [[  intraFreqCellReselectionInfo-v1360      IntraFreqCellReselectionInfo-NB-v1360 OPTIONAL  -- Need OR
+    ]],
+    [[  intraFreqCellReselectionInfo-v1430  IntraFreqCellReselectionInfo-NB-v1430 OPTIONAL  -- Need OR 
+    ]]
+}
+
+IntraFreqCellReselectionInfo-NB-v1350 ::=   SEQUENCE {
+    delta-RxLevMin-v1350                        INTEGER (-8..-1)
+}
+
+IntraFreqCellReselectionInfo-NB-v1360 ::=   SEQUENCE {
+    s-IntraSearchP-v1360                            ReselectionThreshold-NB-v1360
+}
+
+IntraFreqCellReselectionInfo-NB-v1430 ::=   SEQUENCE {
+    powerClass14dBm-Offset-r14      ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12}    OPTIONAL,   -- Need OP
+    ce-AuthorisationOffset-r14      ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35}    OPTIONAL    -- Need OP
 }
 
 
@@ -10447,7 +11848,9 @@ SystemInformationBlockType5-NB-r13 ::=  SEQUENCE {
     interFreqCarrierFreqList-r13            InterFreqCarrierFreqList-NB-r13,
     t-Reselection-r13                       T-Reselection-NB-r13,
     lateNonCriticalExtension                OCTET STRING                    OPTIONAL,
-    ...
+    ...,
+    [[  scptm-FreqOffset-r14                INTEGER (1..8)                  OPTIONAL    -- Need OP
+    ]]
 }
 
 
@@ -10463,7 +11866,13 @@ InterFreqCarrierFreqInfo-NB-r13 ::= SEQUENCE {
     interFreqNeighCellList-r13          InterFreqNeighCellList-NB-r13   OPTIONAL,       -- Need OR
     interFreqBlackCellList-r13          InterFreqBlackCellList-NB-r13   OPTIONAL,       -- Need OR
     multiBandInfoList-r13               MultiBandInfoList-NB-r13        OPTIONAL,       -- Need OR
-    ...
+    ...,
+    [[  delta-RxLevMin-v1350                    INTEGER (-8..-1)        OPTIONAL    -- Cond Qrxlevmin
+    ]],
+    [[  powerClass14dBm-Offset-r14      ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12}
+OPTIONAL,   --  Need OP
+        ce-AuthorisationOffset-r14      ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35}    OPTIONAL    -- Need OP
+    ]]
 }
 
 InterFreqNeighCellList-NB-r13 ::=       SEQUENCE (SIZE (1..maxCellInter)) OF PhysCellId
@@ -10489,14 +11898,176 @@ AB-ConfigPLMN-NB-r13 ::=    SEQUENCE {
 AB-Config-NB-r13 ::=        SEQUENCE {
     ab-Category-r13                 ENUMERATED {a, b, c},
     ab-BarringBitmap-r13            BIT STRING (SIZE(10)),
-    ab-BarringExceptionData-r13     ENUMERATED {true}           OPTIONAL,   -- Need OP
+    ab-BarringForExceptionData-r13  ENUMERATED {true}           OPTIONAL,   -- Need OP
     ab-BarringForSpecialAC-r13      BIT STRING (SIZE(5))
 }
 
 
+SystemInformationBlockType15-NB-r14 ::= SEQUENCE {
+    mbms-SAI-IntraFreq-r14                  MBMS-SAI-List-r11               OPTIONAL,   -- Need OR
+    mbms-SAI-InterFreqList-r14              MBMS-SAI-InterFreqList-NB-r14   OPTIONAL,   -- Need OR
+    lateNonCriticalExtension                OCTET STRING                    OPTIONAL,
+    ...
+}
+
+MBMS-SAI-InterFreqList-NB-r14 ::=       SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-NB-r14
+
+MBMS-SAI-InterFreq-NB-r14 ::=           SEQUENCE {
+    dl-CarrierFreq-r14                      CarrierFreq-NB-r13,
+    mbms-SAI-List-r14                       MBMS-SAI-List-r11,
+    multiBandInfoList-r14                   AdditionalBandInfoList-NB-r14   OPTIONAL    -- Need OR
+}
+
+
 SystemInformationBlockType16-NB-r13 ::= SystemInformationBlockType16-r11
 
 
+SystemInformationBlockType20-NB-r14 ::= SEQUENCE {
+    npdcch-SC-MCCH-Config-r14               NPDCCH-SC-MCCH-Config-NB-r14,
+    sc-mcch-CarrierConfig-r14               CHOICE {
+        dl-CarrierConfig-r14                        DL-CarrierConfigCommon-NB-r14,
+        dl-CarrierIndex-r14                     INTEGER (0.. maxNonAnchorCarriers-NB-r14)
+    },
+    sc-mcch-RepetitionPeriod-r14                ENUMERATED {rf32, rf128, rf512, rf1024, 
+                                                        rf2048, rf4096, rf8192, rf16384},
+    sc-mcch-Offset-r14                      INTEGER (0..10),
+    sc-mcch-ModificationPeriod-r14          ENUMERATED { rf32, rf128, rf256, rf512, rf1024, 
+                                                    rf2048, rf4096, rf8192, rf16384, rf32768, 
+                                                    rf65536, rf131072, rf262144, rf524288, 
+                                                    rf1048576, spare1},
+    sc-mcch-SchedulingInfo-r14              SC-MCCH-SchedulingInfo-NB-r14       OPTIONAL,   -- Need OP
+    lateNonCriticalExtension                    OCTET STRING                        OPTIONAL,
+    ...
+}
+
+NPDCCH-SC-MCCH-Config-NB-r14 ::=    SEQUENCE {
+    npdcch-NumRepetitions-SC-MCCH-r14       ENUMERATED {r1, r2, r4, r8, r16, 
+                                                        r32, r64, r128, r256, 
+                                                        r512, r1024, r2048},
+    npdcch-StartSF-SC-MCCH-r14              ENUMERATED {v1dot5, v2, v4, v8,
+                                                        v16, v32, v48, v64},
+    npdcch-Offset-SC-MCCH-r14               ENUMERATED {zero, oneEighth, oneQuarter,
+                                                        threeEighth, oneHalf, fiveEighth,
+                                                        threeQuarter, sevenEighth}
+}
+
+SC-MCCH-SchedulingInfo-NB-r14::=    SEQUENCE    {
+    onDurationTimerSCPTM-r14                    ENUMERATED {
+                                                    pp1, pp2, pp3, pp4,
+                                                    pp8, pp16, pp32, spare},
+    drx-InactivityTimerSCPTM-r14                ENUMERATED {
+                                                    pp0, pp1, pp2, pp3,
+                                                    pp4, pp8, pp16, pp32},
+    schedulingPeriodStartOffsetSCPTM-r14        CHOICE {
+        sf10                                        INTEGER(0..9),
+        sf20                                        INTEGER(0..19),
+        sf32                                        INTEGER(0..31),
+        sf40                                        INTEGER(0..39),
+        sf64                                        INTEGER(0..63),
+        sf80                                        INTEGER(0..79),
+        sf128                                   INTEGER(0..127),
+        sf160                                   INTEGER(0..159),
+        sf256                                   INTEGER(0..255),
+        sf320                                   INTEGER(0..319),
+        sf512                                   INTEGER(0..511),
+        sf640                                   INTEGER(0..639),
+        sf1024                                  INTEGER(0..1023),
+        sf2048                                  INTEGER(0..2047),
+        sf4096                                  INTEGER(0..4095),
+        sf8192                                  INTEGER(0..8191)
+    },
+    ...
+}
+
+
+SystemInformationBlockType22-NB-r14 ::= SEQUENCE {
+    dl-ConfigList-r14                   DL-ConfigCommonList-NB-r14   OPTIONAL,  -- Need OR
+    ul-ConfigList-r14                   UL-ConfigCommonList-NB-r14   OPTIONAL,  -- Need OR
+    pagingWeightAnchor-r14              PagingWeight-NB-r14         OPTIONAL,   -- Cond pcch-config
+    nprach-ProbabilityAnchorList-r14        NPRACH-ProbabilityAnchorList-NB-r14 OPTIONAL,   -- Cond nprach-config
+    lateNonCriticalExtension            OCTET STRING                    OPTIONAL,
+    ...
+}
+
+DL-ConfigCommonList-NB-r14 ::=      SEQUENCE (SIZE (1.. maxNonAnchorCarriers-NB-r14)) OF 
+                                            DL-ConfigCommon-NB-r14 
+
+UL-ConfigCommonList-NB-r14 ::=      SEQUENCE (SIZE (1.. maxNonAnchorCarriers-NB-r14)) OF
+                                            UL-ConfigCommon-NB-r14
+
+
+DL-ConfigCommon-NB-r14 ::=          SEQUENCE {
+    dl-CarrierConfig-r14                    DL-CarrierConfigCommon-NB-r14,
+    pcch-Config-r14                     PCCH-Config-NB-r14          OPTIONAL, -- Need OR
+    ...
+}
+
+PCCH-Config-NB-r14 ::=              SEQUENCE {
+    npdcch-NumRepetitionPaging-r14      ENUMERATED {
+                                            r1, r2, r4, r8, r16, r32, r64, r128, 
+                                            r256, r512, r1024, r2048, 
+                                            spare4, spare3, spare2, spare1} OPTIONAL, -- Need OP
+    pagingWeight-r14                        PagingWeight-NB-r14     DEFAULT w1,
+    ...
+}
+
+PagingWeight-NB-r14 ::=             ENUMERATED {w1, w2, w3, w4, w5, w6, w7, w8,
+                                                w9, w10, w11, w12, w13, w14, w15, w16}
+
+UL-ConfigCommon-NB-r14 ::=          SEQUENCE {
+    ul-CarrierFreq-r14                  CarrierFreq-NB-r13,
+    nprach-ParametersList-r14           NPRACH-ParametersList-NB-r14    OPTIONAL, -- Need OR
+    ...
+}
+
+NPRACH-ParametersList-NB-r14 ::=        SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF 
+                                            NPRACH-Parameters-NB-r14
+
+
+NPRACH-Parameters-NB-r14 ::=            SEQUENCE {
+    nprach-Parameters-r14               SEQUENCE {
+        nprach-Periodicity-r14                  ENUMERATED {ms40, ms80, ms160, ms240, 
+                                                            ms320, ms640, ms1280, ms2560} 
+                                                    OPTIONAL,   -- NEED OP 
+        nprach-StartTime-r14                        ENUMERATED {ms8, ms16, ms32, ms64, 
+                                                            ms128, ms256, ms512, ms1024}
+                                                    OPTIONAL,   -- NEED OP
+        nprach-SubcarrierOffset-r14             ENUMERATED {n0, n12, n24, n36, n2, n18, n34, spare1} 
+                                                    OPTIONAL,   -- NEED OP
+        nprach-NumSubcarriers-r14               ENUMERATED {n12, n24, n36, n48} 
+                                                     OPTIONAL,  -- NEED OP
+        nprach-SubcarrierMSG3-RangeStart-r14        ENUMERATED {zero, oneThird, twoThird, one}
+                                                    OPTIONAL,   -- NEED OP
+        npdcch-NumRepetitions-RA-r14                ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128,
+                                                            r256, r512, r1024, r2048, 
+                                                            spare4, spare3, spare2, spare1} 
+                                                    OPTIONAL,   -- NEED OP
+        npdcch-StartSF-CSS-RA-r14               ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64} 
+                                                        OPTIONAL,   -- NEED OP
+        npdcch-Offset-RA-r14                        ENUMERATED {zero, oneEighth, oneFourth, threeEighth}
+                                                    OPTIONAL,   -- NEED OP
+        nprach-NumCBRA-StartSubcarriers-r14     ENUMERATED {n8, n10, n11, n12, n20, n22, n23, n24,
+                                                            n32, n34, n35, n36, n40, n44, n46, n48}
+                                                    OPTIONAL,   -- NEED OP  
+        npdcch-CarrierIndex-r14                 INTEGER (1..maxNonAnchorCarriers-NB-r14) 
+                                                    OPTIONAL,   -- Need OP 
+        ...
+    }   OPTIONAL    -- Need OR
+}
+
+NPRACH-ProbabilityAnchorList-NB-r14 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF
+                                                NPRACH-ProbabilityAnchor-NB-r14
+
+NPRACH-ProbabilityAnchor-NB-r14 ::=     SEQUENCE {
+    nprach-ProbabilityAnchor-r14                ENUMERATED {
+                                                zero, oneSixteenth, oneFifteenth, oneFourteenth, 
+                                                oneThirteenth, oneTwelfth, oneEleventh, oneTenth,
+                                                oneNinth, oneEightth, oneSeventh, oneSixth,
+                                                oneFifth, oneFourth, oneThird, oneHalf} 
+                                                        OPTIONAL    -- Need OP 
+}
+
+
 CarrierConfigDedicated-NB-r13 ::=       SEQUENCE {
     dl-CarrierConfig-r13        DL-CarrierConfigDedicated-NB-r13,
     ul-CarrierConfig-r13        UL-CarrierConfigDedicated-NB-r13
@@ -10555,6 +12126,35 @@ DL-Bitmap-NB-r13 ::=            CHOICE {
 }
 
 
+DL-CarrierConfigCommon-NB-r14 ::=   SEQUENCE {
+    dl-CarrierFreq-r14                  CarrierFreq-NB-r13,
+    downlinkBitmapNonAnchor-r14         CHOICE {
+        useNoBitmap-r14                     NULL,
+        useAnchorBitmap-r14                 NULL,
+        explicitBitmapConfiguration-r14     DL-Bitmap-NB-r13
+    },
+    dl-GapNonAnchor-r14                 CHOICE {
+        useNoGap-r14                        NULL,
+        useAnchorGapConfig-r14              NULL,
+        explicitGapConfiguration-r14        DL-GapConfig-NB-r13
+    },  
+    inbandCarrierInfo-r14               SEQUENCE {
+        samePCI-Indicator-r14               CHOICE  {
+            samePCI-r14                         SEQUENCE {
+                indexToMidPRB-r14                   INTEGER (-55..54) 
+            },
+            differentPCI-r14                    SEQUENCE {
+                eutra-NumCRS-Ports-r14              ENUMERATED {same, four}
+            }
+        }   OPTIONAL,       -- Cond anchor-guardband
+        eutraControlRegionSize-r14      ENUMERATED {n1, n2, n3} 
+    }   OPTIONAL,       -- Cond non-anchor-inband
+    nrs-PowerOffsetNonAnchor-r14        ENUMERATED {dB-12, dB-10, dB-8, dB-6, 
+                                                    dB-4, dB-2, dB0, dB3}   DEFAULT dB0, 
+    ...
+}
+
+
 
 DL-GapConfig-NB-r13 ::=     SEQUENCE {
     dl-GapThreshold-r13         ENUMERATED {n32, n64, n128, n256},
@@ -10585,7 +12185,19 @@ MAC-MainConfig-NB-r13 ::=       SEQUENCE {
                                                     pp1024, pp2048, spare}
         }
     }                                                                   OPTIONAL,   -- Need ON 
-    ...
+    ...,
+    [[  rai-Activation-r14                  ENUMERATED {true}           OPTIONAL,   -- Need OR
+    dataInactivityTimerConfig-r14   CHOICE {
+            release                             NULL,
+            setup                               SEQUENCE {
+                dataInactivityTimer-r14             DataInactivityTimer-r14
+            }
+        }                                                               OPTIONAL    -- Need ON
+    ]],
+    [[  drx-Cycle-v1430         ENUMERATED {
+                                    sf1280, sf2560, sf5120, sf10240}    OPTIONAL    -- Need ON
+    ]]
+
 }
 
 PeriodicBSR-Timer-NB-r13 ::=        ENUMERATED {
@@ -10735,11 +12347,12 @@ PhysicalConfigDedicated-NB-r13 ::=  SEQUENCE {
     npdcch-ConfigDedicated-r13          NPDCCH-ConfigDedicated-NB-r13       OPTIONAL,   -- Need ON
     npusch-ConfigDedicated-r13          NPUSCH-ConfigDedicated-NB-r13       OPTIONAL,   -- Need ON
     uplinkPowerControlDedicated-r13     UplinkPowerControlDedicated-NB-r13  OPTIONAL,   -- Need ON
-    ...
+    ...,
+    [[  twoHARQ-ProcessesConfig-r14     ENUMERATED {true}   OPTIONAL    -- Need OR
+    ]]
 }
 
 
-
 RACH-ConfigCommon-NB-r13 ::=        SEQUENCE {
     preambleTransMax-CE-r13             PreambleTransMax,
     powerRampingParameters-r13          PowerRampingParameters,
@@ -10815,7 +12428,9 @@ SRB-ToAddMod-NB-r13 ::=             SEQUENCE {
         explicitValue                       LogicalChannelConfig-NB-r13,
         defaultValue                        NULL
     }       OPTIONAL,                                                           -- Cond Setup
-    ...
+    ...,
+    [[  rlc-Config-v1430                RLC-Config-NB-v1430         OPTIONAL    -- Need ON
+    ]]
 }
 
 DRB-ToAddModList-NB-r13 ::=         SEQUENCE (SIZE (1..maxDRB-NB-r13)) OF DRB-ToAddMod-NB-r13
@@ -10827,7 +12442,9 @@ DRB-ToAddMod-NB-r13 ::=             SEQUENCE {
     rlc-Config-r13                      RLC-Config-NB-r13           OPTIONAL,   -- Cond Setup
     logicalChannelIdentity-r13          INTEGER (3..10)             OPTIONAL,   -- Cond DRB-Setup
     logicalChannelConfig-r13            LogicalChannelConfig-NB-r13 OPTIONAL,   -- Cond Setup
-    ...
+    ...,
+    [[  rlc-Config-v1430                RLC-Config-NB-v1430         OPTIONAL    -- Need ON
+    ]]
 }
 
 DRB-ToReleaseList-NB-r13 ::=        SEQUENCE (SIZE (1..maxDRB-NB-r13)) OF DRB-Identity
@@ -10841,6 +12458,9 @@ RLC-Config-NB-r13 ::=   CHOICE  {
     ...
 }
 
+RLC-Config-NB-v1430 ::= SEQUENCE {
+    t-Reordering-r14            T-Reordering        OPTIONAL        -- Cond twoHARQ
+}
 
 UL-AM-RLC-NB-r13 ::=        SEQUENCE {
     t-PollRetransmit-r13        T-PollRetransmit-NB-r13,
@@ -10874,7 +12494,11 @@ RLF-TimersAndConstants-NB-r13 ::=   CHOICE {
                                                 ms20000, ms30000},
         n311-r13                            ENUMERATED {
                                                 n1, n2, n3, n4, n5, n6, n8, n10},
-        ...
+        ...,
+        [[ t311-v1350                       ENUMERATED {
+                                                ms40000, ms60000, ms90000, ms120000}
+                                                        OPTIONAL    -- Need OR
+        ]]
     }
 }
 
@@ -10891,6 +12515,9 @@ UplinkPowerControlDedicated-NB-r13 ::=  SEQUENCE {
 }
 
 
+AdditionalBandInfoList-NB-r14 ::=   SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-NB-r13
+
+
 FreqBandIndicator-NB-r13 ::=            INTEGER (1.. maxFBI2)
 
 
@@ -10910,6 +12537,9 @@ NS-PmaxValue-NB-r13 ::=         SEQUENCE {
 }
 
 
+ReselectionThreshold-NB-v1360 ::=           INTEGER (32..63)
+
+
 T-Reselection-NB-r13 ::=        ENUMERATED {s0, s3, s6, s9, s12, s15, s18, s21} 
 
 
@@ -10925,10 +12555,17 @@ UE-Capability-NB-r13 ::=        SEQUENCE {
     pdcp-Parameters-r13             PDCP-Parameters-NB-r13              OPTIONAL,
     phyLayerParameters-r13          PhyLayerParameters-NB-r13,
     rf-Parameters-r13               RF-Parameters-NB-r13,
-    nonCriticalExtension            SEQUENCE {}                         OPTIONAL
+    nonCriticalExtension            UE-Capability-NB-v1430-IEs          OPTIONAL
 }
 
-AccessStratumRelease-NB-r13 ::=     ENUMERATED {rel13, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ...}
+UE-Capability-NB-v1430-IEs ::=      SEQUENCE {
+    ue-Category-NB-r14                  ENUMERATED {nb2}                OPTIONAL,
+    mac-Parameters-r14                  MAC-Parameters-NB-r14           OPTIONAL,   phyLayerParameters-v1430            PhyLayerParameters-NB-v1430 OPTIONAL,
+    rf-Parameters-v1430                 RF-Parameters-NB-v1430,
+    nonCriticalExtension                SEQUENCE {}                     OPTIONAL
+}
+
+AccessStratumRelease-NB-r13 ::=     ENUMERATED {rel13, rel14, spare6, spare5, spare4, spare3, spare2, spare1, ...}
 
 PDCP-Parameters-NB-r13      ::= SEQUENCE {
     supportedROHC-Profiles-r13          SEQUENCE {
@@ -10944,16 +12581,30 @@ PDCP-Parameters-NB-r13      ::= SEQUENCE {
     ...
 }
 
+MAC-Parameters-NB-r14       ::=     SEQUENCE {
+    dataInactMon-r14                    ENUMERATED {supported}                  OPTIONAL,
+    rai-Support-r14                     ENUMERATED {supported}              OPTIONAL
+}
+
 PhyLayerParameters-NB-r13   ::=     SEQUENCE {
     multiTone-r13                       ENUMERATED {supported}          OPTIONAL,
     multiCarrier-r13                        ENUMERATED {supported}          OPTIONAL
     }
 
+PhyLayerParameters-NB-v1430 ::=     SEQUENCE {
+    multiCarrier-NPRACH-r14             ENUMERATED {supported}          OPTIONAL,
+    twoHARQ-Processes-r14               ENUMERATED {supported}          OPTIONAL
+}
+
 RF-Parameters-NB-r13    ::=         SEQUENCE {
     supportedBandList-r13               SupportedBandList-NB-r13,
     multiNS-Pmax-r13                    ENUMERATED {supported}      OPTIONAL
 }
 
+RF-Parameters-NB-v1430 ::=          SEQUENCE {
+    powerClassNB-14dBm-r14              ENUMERATED {supported}      OPTIONAL
+}
+
 SupportedBandList-NB-r13 ::=        SEQUENCE (SIZE (1..maxBands)) OF SupportedBand-NB-r13
 
 SupportedBand-NB-r13    ::=         SEQUENCE {
@@ -10962,10 +12613,11 @@ SupportedBand-NB-r13    ::=         SEQUENCE {
 }
 
 
-
 UE-RadioPagingInfo-NB-r13 ::=       SEQUENCE {
     ue-Category-NB-r13              ENUMERATED {nb1}            OPTIONAL,
-    ...
+    ...,
+    [[ multiCarrierPaging-r14       ENUMERATED {true}           OPTIONAL
+    ]]
 }
 
 
@@ -10985,13 +12637,81 @@ UE-TimersAndConstants-NB-r13 ::=    SEQUENCE {
                                             ms20000, ms30000},
     n311-r13                            ENUMERATED {
                                             n1, n2, n3, n4, n5, n6, n8, n10},
+    ...,
+    [[ t311-v1350                       ENUMERATED {
+                                            ms40000, ms60000, ms90000, ms120000}
+                                                        OPTIONAL    -- Need OR
+    ]]
+}
+
+
+SC-MTCH-InfoList-NB-r14 ::=         SEQUENCE (SIZE (0.. maxSC-MTCH-NB-r14)) OF SC-MTCH-Info-NB-r14
+
+SC-MTCH-Info-NB-r14 ::=                 SEQUENCE    {
+    sc-mtch-CarrierConfig-r14           CHOICE {
+        dl-CarrierConfig-r14                    DL-CarrierConfigCommon-NB-r14,
+        dl-CarrierIndex-r14                 INTEGER (0.. maxNonAnchorCarriers-NB-r14)
+    },
+    mbmsSessionInfo-r14                 MBMSSessionInfo-r13,
+    g-RNTI-r14                          BIT STRING(SIZE(16)),
+    sc-mtch-SchedulingInfo-r14          SC-MTCH-SchedulingInfo-NB-r14       OPTIONAL,   -- Need OP
+    sc-mtch-NeighbourCell-r14           BIT STRING (SIZE(maxNeighCell-SCPTM-NB-r14))    OPTIONAL,   -- Need OP
+    npdcch-NPDSCH-MaxTBS-SC-MTCH-r14        ENUMERATED {n680, n2536},
+    npdcch-NumRepetitions-SC-MTCH-r14   ENUMERATED {r1, r2, r4, r8, r16, 
+                                                    r32, r64, r128, r256, 
+                                                    r512, r1024, r2048, spare4, 
+                                                    spare3, spare2, spare1},
+    npdcch-StartSF-SC-MTCH-r14          ENUMERATED {v1dot5, v2, v4, v8,
+                                                    v16, v32, v48, v64},
+    npdcch-Offset-SC-MTCH-r14           ENUMERATED {zero, oneEight, oneQuarter,
+                                                    threeEight, oneHalf, fiveEight,
+                                                    threeQuarter, sevenEight},
+    ...
+}
+
+SC-MTCH-SchedulingInfo-NB-r14 ::=       SEQUENCE    {
+    onDurationTimerSCPTM-r14                ENUMERATED {
+                                                pp1, pp2, pp3, pp4,
+                                                pp8, pp16, pp32, spare},
+    drx-InactivityTimerSCPTM-r14            ENUMERATED {
+                                                pp0, pp1, pp2, pp3,
+                                                pp4, pp8, pp16, pp32},
+    schedulingPeriodStartOffsetSCPTM-r14    CHOICE {
+        sf10                                        INTEGER(0..9),
+        sf20                                        INTEGER(0..19),
+        sf32                                        INTEGER(0..31),
+        sf40                                        INTEGER(0..39),
+        sf64                                        INTEGER(0..63),
+        sf80                                        INTEGER(0..79),
+        sf128                                   INTEGER(0..127),
+        sf160                                   INTEGER(0..159),
+        sf256                                   INTEGER(0..255),
+        sf320                                   INTEGER(0..319),
+        sf512                                   INTEGER(0..511),
+        sf640                                   INTEGER(0..639),
+        sf1024                                  INTEGER(0..1023),
+        sf2048                                  INTEGER(0..2047),
+        sf4096                                  INTEGER(0..4095),
+        sf8192                                  INTEGER(0..8191)
+    },
     ...
 }
 
 
+SCPTM-NeighbourCellList-NB-r14 ::=      SEQUENCE (SIZE (1..maxNeighCell-SCPTM-NB-r14)) OF PCI-ARFCN-NB-r14
+
+PCI-ARFCN-NB-r14 ::=                    SEQUENCE {
+        physCellId-r14                      PhysCellId,
+        carrierFreq-r14                     CarrierFreq-NB-r13      OPTIONAL    -- Need OP
+}
+
+
 maxNPRACH-Resources-NB-r13  INTEGER ::= 3   -- Maximum number of NPRACH resources for NB-IoT
+maxNonAnchorCarriers-NB-r14 INTEGER ::= 15  -- Maximum number of non-anchor carriers for NB-IoT
 maxDRB-NB-r13               INTEGER ::= 2   -- Maximum number of Data Radio Bearers for NB-IoT
+maxNeighCell-SCPTM-NB-r14   INTEGER ::= 8   -- Maximum number of SCPTM neighbour cells
 maxNS-Pmax-NB-r13           INTEGER ::= 4   -- Maximum number of NS and P-Max values per band
+maxSC-MTCH-NB-r14           INTEGER ::= 64  -- Maximum number of SC-MTCHs in one cell for NB-IoT
 maxSI-Message-NB-r13        INTEGER ::= 8   -- Maximum number of SI messages for NB-IoT
 
 
@@ -11039,6 +12759,7 @@ IMPORTS
     RLF-Report-r9,
     TargetMBSFN-AreaList-r12,
     TraceReference-r10,
+    Tx-ResourcePoolMeasList-r14,
     VisitedCellInfoList-r12,
     maxCellMeas,
     maxCSI-RS-Meas-r12,
@@ -11048,8 +12769,9 @@ IMPORTS
     WLAN-CarrierInfo-r13,
     WLAN-Identifiers-r12,
     WLAN-Id-List-r13,
-    WLAN-Status-r13
-
+    WLAN-Status-r13,
+    WLAN-Status-v1430,
+    WLAN-SuspendConfig-r14
 
 FROM EUTRA-RRC-Definitions;
 
@@ -11139,6 +12861,7 @@ VarMeasReport ::=                   SEQUENCE {
     measId-v1250                        MeasId-v1250                    OPTIONAL,
     cellsTriggeredList                  CellsTriggeredList              OPTIONAL,
     csi-RS-TriggeredList-r12            CSI-RS-TriggeredList-r12        OPTIONAL,
+    poolsTriggeredList-r14              Tx-ResourcePoolMeasList-r14 OPTIONAL,
     numberOfReportsSent                 INTEGER
 }
 
@@ -11178,6 +12901,7 @@ VarShortMAC-Input ::=                   SEQUENCE {
     c-RNTI                                  C-RNTI
 }
 
+
 VarShortResumeMAC-Input-r13 ::=     SEQUENCE {
     cellIdentity-r13                        CellIdentity,
     physCellId-r13                          PhysCellId,
@@ -11188,12 +12912,14 @@ VarShortResumeMAC-Input-r13 ::=     SEQUENCE {
 
 VarWLAN-MobilityConfig ::=                  SEQUENCE {
     wlan-MobilitySet-r13                    WLAN-Id-List-r13            OPTIONAL,
-    successReportRequested                  ENUMERATED {true}           OPTIONAL
+    successReportRequested                  ENUMERATED {true}           OPTIONAL,
+    wlan-SuspendConfig-r14                  WLAN-SuspendConfig-r14      OPTIONAL
 }
 
 
 VarWLAN-Status-r13 ::=              SEQUENCE {
-    status-r13                              WLAN-Status-r13
+    status-r13                              WLAN-Status-r13,
+    status-r14                              WLAN-Status-v1430   OPTIONAL
 }
 
 
@@ -11219,7 +12945,6 @@ VarShortMAC-Input-NB-r13        ::=     VarShortMAC-Input
 VarShortResumeMAC-Input-NB-r13  ::=     VarShortResumeMAC-Input-r13
 
 
-
 END
 
 
@@ -11231,22 +12956,32 @@ IMPORTS
     AdditionalSpectrumEmission,
     ARFCN-ValueEUTRA-r9,
     FilterCoefficient,
+    maxCBR-Level-r14,
+    maxCBR-Level-1-r14,
     maxFreq,
+    maxFreqV2X-r14,
     maxSL-TxPool-r12,
     maxSL-CommRxPoolPreconf-v1310,
     maxSL-CommTxPoolPreconf-v1310,
     maxSL-DiscRxPoolPreconf-r13,
     maxSL-DiscTxPoolPreconf-r13,
+    maxSL-V2X-CBRConfig2-r14,
+    maxSL-V2X-CBRConfig2-1-r14,
     maxSL-V2X-RxPoolPreconf-r14,
+    maxSL-V2X-TxConfig2-r14,
+    maxSL-V2X-TxConfig2-1-r14,
     maxSL-V2X-TxPoolPreconf-r14,
     P-Max,
     ReselectionInfoRelay-r13,
+    SL-AnchorCarrierFreqList-V2X-r14,
+    SL-CBR-Levels-Config-r14,
+    SL-CBR-PSSCH-TxConfig-r14,
     SL-CommTxPoolSensingConfig-r14,
     SL-CP-Len-r12,
     SL-HoppingConfigComm-r12,
     SL-OffsetIndicator-r12,
     SL-OffsetIndicatorSync-r12,
-    SL-OffsetIndicatorSync-v14xy,
+    SL-OffsetIndicatorSync-v1430,
     SL-PeriodComm-r12,
     RSRP-RangeSL3-r12,
     SL-PriorityList-r13,
@@ -11256,7 +12991,12 @@ IMPORTS
     SL-ZoneConfig-r14,
     P0-SL-r12,
     TDD-ConfigSL-r12,
-    SubframeBitmapSL-r14
+    SubframeBitmapSL-r14,
+    SL-P2X-ResourceSelectionConfig-r14,
+    SL-RestrictResourceReservationPeriodList-r14,
+    SL-SyncAllowed-r14,
+    SL-OffsetIndicatorSync-r14,
+    SL-Priority-r13
 FROM EUTRA-RRC-Definitions;
 
 
@@ -11310,9 +13050,6 @@ SL-PreconfigSync-r12 ::=    SEQUENCE {
     syncRefDiffHyst-r12                 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf},
     ...,
     [[  syncTxPeriodic-r13                  ENUMERATED {true}           OPTIONAL
-    ]],
-    [[  syncOffsetIndicator1-v14xy      SL-OffsetIndicatorSync-v14xy    OPTIONAL,
-        syncOffsetIndicator2-v14xy      SL-OffsetIndicatorSync-v14xy    OPTIONAL
     ]]
 }
 
@@ -11362,15 +13099,31 @@ SL-PreconfigRelay-r13 ::=   SEQUENCE {
 }
 
 
-SL-V2X-Preconfiguration-r14 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-V2X-PreconfigFreqInfo-r14
+SL-V2X-Preconfiguration-r14 ::= SEQUENCE {
+    v2x-PreconfigFreqList-r14       SL-V2X-PreconfigFreqList-r14,
+    anchorCarrierFreqList-r14       SL-AnchorCarrierFreqList-V2X-r14                OPTIONAL,
+    cbr-PreconfigList-r14           SL-CBR-PreconfigTxConfigList-r14                OPTIONAL,
+    ...
+}
+
+SL-CBR-PreconfigTxConfigList-r14 ::=    SEQUENCE {
+    cbr-RangeCommonConfigList-r14   SEQUENCE (SIZE (1..maxSL-V2X-CBRConfig2-r14)) OF SL-CBR-Levels-Config-r14,
+    sl-CBR-PSSCH-TxConfigList-r14   SEQUENCE (SIZE (1..maxSL-V2X-TxConfig2-r14)) OF SL-CBR-PSSCH-TxConfig-r14
+}
+
+SL-V2X-PreconfigFreqList-r14 ::=    SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF SL-V2X-PreconfigFreqInfo-r14
 
 SL-V2X-PreconfigFreqInfo-r14 ::=        SEQUENCE {
     v2x-CommPreconfigGeneral-r14        SL-PreconfigGeneral-r12,
-    v2x-CommPreconfigSync-r14           SL-PreconfigSync-r12,
+    v2x-CommPreconfigSync-r14           SL-PreconfigV2X-Sync-r14                OPTIONAL,
     v2x-CommRxPoolList-r14              SL-PreconfigV2X-RxPoolList-r14,
     v2x-CommTxPoolList-r14              SL-PreconfigV2X-TxPoolList-r14,
+    p2x-CommTxPoolList-r14              SL-PreconfigV2X-TxPoolList-r14,
     v2x-ResourceSelectionConfig-r14         SL-CommTxPoolSensingConfig-r14          OPTIONAL,
-    zoneConfig-r14                      SL-ZoneConfig-r14                       OPTIONAL,
+    zoneConfig-r14                      SL-ZoneConfig-r14                       OPTIONAL, 
+    syncPriority-r14                    ENUMERATED {gnss, enb},
+    thresSL-TxPrioritization-r14        SL-Priority-r13                         OPTIONAL,
+    offsetDFN-r14                       INTEGER (0..1000)                   OPTIONAL,
     ...
 }
 
@@ -11379,7 +13132,7 @@ SL-PreconfigV2X-RxPoolList-r14 ::=  SEQUENCE (SIZE (1..maxSL-V2X-RxPoolPreconf-r
 SL-PreconfigV2X-TxPoolList-r14 ::=  SEQUENCE (SIZE (1..maxSL-V2X-TxPoolPreconf-r14)) OF SL-V2X-PreconfigCommPool-r14
 
 SL-V2X-PreconfigCommPool-r14 ::=        SEQUENCE {
--- This IE is same as SL-V2X-CommResourcePool with rxParametersNCell absent
+-- This IE is same as SL-CommResourcePoolV2X with rxParametersNCell absent
     sl-OffsetIndicator-r14              SL-OffsetIndicator-r12      OPTIONAL,
     sl-Subframe-r14                     SubframeBitmapSL-r14,
     adjacencyPSCCH-PSSCH-r14            BOOLEAN,
@@ -11388,14 +13141,46 @@ SL-V2X-PreconfigCommPool-r14 ::=        SEQUENCE {
                                         n48, n50, n72, n75, n96, n100, spare13, spare12, spare11,
                                         spare10, spare9, spare8, spare7, spare6, spare5, spare4, 
                                         spare3, spare2, spare1},
-    numSubchannel-r14                   ENUMERATED {n1, n3, n5, n10, n15, n20, spare2, spare1},
+    numSubchannel-r14                   ENUMERATED {n1, n3, n5, n8, n10, n15, n20, spare1},
     startRB-Subchannel-r14              INTEGER (0..99),
     startRB-PSCCH-Pool-r14              INTEGER (0..99)             OPTIONAL,
-    dataTxParameters-r14                SL-TxParameters-r12         OPTIONAL,
+    dataTxParameters-r14                P0-SL-r12,
     zoneID-r14                          INTEGER (0..7)              OPTIONAL,
+    threshS-RSSI-CBR-r14                    INTEGER (0..45)             OPTIONAL,
+    cbr-pssch-TxConfigList-r14          SL-CBR-PPPP-TxPreconfigList-r14 OPTIONAL,
+    resourceSelectionConfigP2X-r14      SL-P2X-ResourceSelectionConfig-r14  OPTIONAL,
+    syncAllowed-r14                     SL-SyncAllowed-r14              OPTIONAL,
+    restrictResourceReservationPeriod-r14   SL-RestrictResourceReservationPeriodList-r14    OPTIONAL,   -- Need OR
+    ...
+}
+
+SL-PreconfigV2X-Sync-r14 ::=    SEQUENCE {
+    syncOffsetIndicators-r14            SL-V2X-SyncOffsetIndicators-r14,
+    syncTxParameters-r14                P0-SL-r12,
+    syncTxThreshOoC-r14                 RSRP-RangeSL3-r12,
+    filterCoefficient-r14               FilterCoefficient,
+    syncRefMinHyst-r14                  ENUMERATED {dB0, dB3, dB6, dB9, dB12},
+    syncRefDiffHyst-r14                 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf},
     ...
 }
 
+SL-V2X-SyncOffsetIndicators-r14 ::= SEQUENCE {
+    syncOffsetIndicator1-r14            SL-OffsetIndicatorSync-r14,
+    syncOffsetIndicator2-r14            SL-OffsetIndicatorSync-r14,
+    syncOffsetIndicator3-r14            SL-OffsetIndicatorSync-r14          OPTIONAL
+}
+
+SL-CBR-PPPP-TxPreconfigList-r14 ::= SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxPreconfigIndex-r14
+
+SL-PPPP-TxPreconfigIndex-r14 ::=    SEQUENCE {
+    priorityThreshold-r14           SL-Priority-r13,
+    defaultTxConfigIndex-r14        INTEGER(0..maxCBR-Level-1-r14),
+    cbr-ConfigIndex-r14             INTEGER(0..maxSL-V2X-CBRConfig2-1-r14),
+    tx-ConfigIndexList-r14          SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF Tx-PreconfigIndex-r14
+}
+
+Tx-PreconfigIndex-r14 ::=           INTEGER(0..maxSL-V2X-TxConfig2-1-r14)
+
 END
 
 
@@ -11416,6 +13201,7 @@ IMPORTS
     DRB-ToReleaseList,
     FreqBandIndicator-r11,
     InDeviceCoexIndication-r11,
+    LWA-Config-r13,
     MasterInformationBlock,
     maxBands,
     maxFreq,
@@ -11427,7 +13213,9 @@ IMPORTS
     MBMSInterestIndication-r11,
     MeasConfig,
     MeasGapConfig,
+    MeasGapConfigPerCC-List-r14,
     MeasResultForRSSI-r13,
+    MeasResultListWLAN-r13,
     OtherConfig-r9,
     PhysCellId,
     P-Max,
@@ -11507,7 +13295,7 @@ HandoverPreparationInformation-r8-IEs ::= SEQUENCE {
 HandoverPreparationInformation-v920-IEs ::= SEQUENCE {
     ue-ConfigRelease-r9                 ENUMERATED {
                                         rel9, rel10, rel11, rel12, v10j0, v11e0,
-                                        v1280, rel13, ...}          OPTIONAL,   -- Cond HO2
+                                        v1280, rel13, ..., rel14}           OPTIONAL,   -- Cond HO2
     nonCriticalExtension                HandoverPreparationInformation-v9d0-IEs     OPTIONAL
 }
 
@@ -11549,11 +13337,12 @@ HandoverPreparationInformation-v1250-IEs ::= SEQUENCE {
 HandoverPreparationInformation-v1320-IEs ::= SEQUENCE {
     as-Config-v1320                     AS-Config-v1320                 OPTIONAL,   -- Cond HO2 
     as-Context-v1320                    AS-Context-v1320                OPTIONAL,   -- Cond HO2
-    nonCriticalExtension                HandoverPreparationInformation-v14x0-IEs                        OPTIONAL
+    nonCriticalExtension                HandoverPreparationInformation-v1430-IEs                        OPTIONAL
 }
 
-HandoverPreparationInformation-v14x0-IEs ::= SEQUENCE {
-    as-Config-v14x0                 AS-Config-v14x0                     OPTIONAL,   -- Cond HO2 
+HandoverPreparationInformation-v1430-IEs ::= SEQUENCE {
+    as-Config-v1430                 AS-Config-v1430                     OPTIONAL,   -- Cond HO2
+    makeBeforeBreakReq-r14          ENUMERATED {true}               OPTIONAL,   -- Cond HO2
     nonCriticalExtension            SEQUENCE {}                         OPTIONAL
 }
 
@@ -11617,6 +13406,12 @@ SCG-ConfigInfo-v1310-IEs ::=        SEQUENCE {
 
 SCG-ConfigInfo-v1330-IEs ::=        SEQUENCE {
     measResultListRSSI-SCG-r13      MeasResultListRSSI-SCG-r13          OPTIONAL,
+    nonCriticalExtension            SCG-ConfigInfo-v1430-IEs                            OPTIONAL
+}
+
+SCG-ConfigInfo-v1430-IEs ::=        SEQUENCE {
+    makeBeforeBreakSCG-Req-r14      ENUMERATED {true}                   OPTIONAL,
+    measGapConfigPerCC-List         MeasGapConfigPerCC-List-r14         OPTIONAL,
     nonCriticalExtension            SEQUENCE {}                         OPTIONAL
 }
 
@@ -11787,8 +13582,10 @@ AS-Config-v1320 ::=             SEQUENCE {
     sourceRCLWI-Configuration-r13       RCLWI-Configuration-r13             OPTIONAL
 }
 
-AS-Config-v14x0 ::=             SEQUENCE {
-    sourceSL-V2X-CommConfig-r14         SL-V2X-ConfigDedicated-r14                  OPTIONAL
+AS-Config-v1430 ::=             SEQUENCE {
+    sourceSL-V2X-CommConfig-r14         SL-V2X-ConfigDedicated-r14                  OPTIONAL,
+    sourceLWA-Config-r14                LWA-Config-r13                      OPTIONAL,
+    sourceWLAN-MeasResult-r14           MeasResultListWLAN-r13              OPTIONAL
 }
 
 
diff --git a/openair2/RRC/LITE/MESSAGES/rtai_mem.c b/openair2/RRC/LITE/MESSAGES/rtai_mem.c
index 0319baafc35b722260261e5b1630e57aec56e571..c522a1f0bfdc566b008d38abaf876e8d5f8786af 100644
--- a/openair2/RRC/LITE/MESSAGES/rtai_mem.c
+++ b/openair2/RRC/LITE/MESSAGES/rtai_mem.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/MESSAGES/rtai_mem.h b/openair2/RRC/LITE/MESSAGES/rtai_mem.h
index 19ed4c1a69fa742ea639ede3143173b54ef331f5..9efc24851f0d57b92c7a43c78330e13e6586962b 100644
--- a/openair2/RRC/LITE/MESSAGES/rtai_mem.h
+++ b/openair2/RRC/LITE/MESSAGES/rtai_mem.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h
index 02c42f67149d158e5f8e981fb8102928e673c24e..5952a03d31da347a5d285b0d4646d82d06b941bb 100644
--- a/openair2/RRC/LITE/defs.h
+++ b/openair2/RRC/LITE/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/extern.h b/openair2/RRC/LITE/extern.h
index 2791efcd138f94a0be820d0b3773a43597c7f7aa..77dcaac5e69492b9895d87434850adb42c923aec 100644
--- a/openair2/RRC/LITE/extern.h
+++ b/openair2/RRC/LITE/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/mesh_top.c b/openair2/RRC/LITE/mesh_top.c
index 448d15bfae1e4c69b50b48a41acacde5da2af665..16395e99c64294ca1179e25a14071dfc359d1a45 100644
--- a/openair2/RRC/LITE/mesh_top.c
+++ b/openair2/RRC/LITE/mesh_top.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/plmn_data.h b/openair2/RRC/LITE/plmn_data.h
index 3994a851fb72a4baa6e3f6419b95b38e4bb58edb..97dc94343b613365709d2840c614ec03f3f73388 100644
--- a/openair2/RRC/LITE/plmn_data.h
+++ b/openair2/RRC/LITE/plmn_data.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index f31ca5a0bf0101b3e6ea282ff777ea76f9479be2..99d42b133b0b56eb8d74068d0570ec1c6110ac9d 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -524,4 +524,12 @@ long binary_search_int(int elements[], long numElem, int value);
 long binary_search_float(float elements[], long numElem, float value);
 
 void openair_rrc_top_init_eNB(int eMBMS_active,uint8_t HO_active);
+
+void openair_rrc_top_init_ue(
+                        int eMBMS_active,
+                        char* uecap_xer,
+                        uint8_t cba_group_active,
+                        uint8_t HO_active
+);
+
 /** @}*/
diff --git a/openair2/RRC/LITE/rrc_2_rrm_msg.c b/openair2/RRC/LITE/rrc_2_rrm_msg.c
index 9a5c14f91eca5fd69e8e85c13f5440898b5f0834..87a0a3557b57a7ce4f636024e7d031f9352423f7 100644
--- a/openair2/RRC/LITE/rrc_2_rrm_msg.c
+++ b/openair2/RRC/LITE/rrc_2_rrm_msg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c
index 3f7893fba64492b45ed8c76aa8c96256b5df5825..47cae8887a2a7a8e3909db2d76d8e030360d6d8b 100644
--- a/openair2/RRC/LITE/rrc_UE.c
+++ b/openair2/RRC/LITE/rrc_UE.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -2629,7 +2629,7 @@ static const char* SIB2mac_ContentionResolutionTimer( long value )
 }
 static const char* SIB2modificationPeriodCoeff( long value )
 {
-  static char temp[4] = {0};
+  static char temp[32] = {0};
 
   if (value < 0 || value > 3)
     return "ERR";
@@ -2639,7 +2639,7 @@ static const char* SIB2modificationPeriodCoeff( long value )
 }
 static const char* SIB2defaultPagingCycle( long value )
 {
-  static char temp[6] = {0};
+  static char temp[32] = {0};
 
   if (value < 0 || value > 3)
     return "ERR";
diff --git a/openair2/RRC/LITE/rrc_UE_ral.c b/openair2/RRC/LITE/rrc_UE_ral.c
index be327551db492816c36c63c762135433807637ad..0cb0943fcb67122d1e09fe45845c52aed9e7fd54 100644
--- a/openair2/RRC/LITE/rrc_UE_ral.c
+++ b/openair2/RRC/LITE/rrc_UE_ral.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_UE_ral.h b/openair2/RRC/LITE/rrc_UE_ral.h
index d403ba112b0f679a624d9b93ccea2afa3bee061d..e2b4a3dadb5debaaaf005ec143bb04ee505bd37d 100644
--- a/openair2/RRC/LITE/rrc_UE_ral.h
+++ b/openair2/RRC/LITE/rrc_UE_ral.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c
index 5c9d06f98630effb5175fd414decdd1c5953d20f..65e1a25b1708e404cd07508c2754ffe3a2669085 100644
--- a/openair2/RRC/LITE/rrc_common.c
+++ b/openair2/RRC/LITE/rrc_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -65,7 +65,7 @@ openair_rrc_on(
   int            CC_id;
 
   if (ctxt_pP->enb_flag == ENB_FLAG_YES) {
-    LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" OPENAIR RRC IN....\n",
+    LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" ENB:OPENAIR RRC IN....\n",
           PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
     for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
       rrc_config_buffer (&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1);
@@ -74,7 +74,7 @@ openair_rrc_on(
       RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Active = 1;
     }
   } else {
-    LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" OPENAIR RRC IN....\n",
+    LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" UE?:OPENAIR RRC IN....\n",
           PROTOCOL_RRC_CTXT_ARGS(ctxt_pP));
 
     for (i = 0; i < NB_eNB_INST; i++) {
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index ff3134b7df1511cef3c89440e3d8fc099458a7f7..d5c926ed904b3b38633b1db1730b09dfc6f2f8da 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -138,6 +138,8 @@ init_SI(
   SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext=(SystemInformationBlockType1_v1310_IEs_t *)NULL;
 #endif
 
+  LOG_E(RRC,"%s()\n\n\n\n",__FUNCTION__);
+
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MIB = (uint8_t*) malloc16(4);
   // copy basic parameters
   RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId      = configuration->Nid_cell[CC_id];
@@ -355,6 +357,8 @@ init_SI(
   }
 #endif
 
+  LOG_E(RRC, "About to call rrc_mac_config_req_eNB\n");
+
   rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id,
 			 RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId,
 			 RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB,
@@ -4879,6 +4883,7 @@ rrc_eNB_decode_dcch(
       T(T_ENB_RRC_UL_INFORMATION_TRANSFER, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
         T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
 
+      LOG_D(RRC,"[MSG] RRC UL Information Transfer \n");
 #ifdef RRC_MSG_PRINT
       LOG_F(RRC,"[MSG] RRC UL Information Transfer \n");
 
diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c
index 568af04fc70d7fae3c2fd27134d7ed5f85ca3a73..9aca0491669e8b12899a738c6b8364ed4d853488 100644
--- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.c
+++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h
index b0c713d6ef21a4b7d8fa36935db2cb1814517f6e..981c3f8d3ba8b1379c0f997c5a89f09513036226 100644
--- a/openair2/RRC/LITE/rrc_eNB_GTPV1U.h
+++ b/openair2/RRC/LITE/rrc_eNB_GTPV1U.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c
index 301d4443c38f491213898e60c918db077857a09d..55adb217facd8ecaacde5e83e08fccd6bb5091ec 100644
--- a/openair2/RRC/LITE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.h b/openair2/RRC/LITE/rrc_eNB_S1AP.h
index a57002010c646f23b5b6d8b35735c29af5342c47..6b2de919bd44403e4e3ae99229c41e4d47668fed 100644
--- a/openair2/RRC/LITE/rrc_eNB_S1AP.h
+++ b/openair2/RRC/LITE/rrc_eNB_S1AP.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_UE_context.c b/openair2/RRC/LITE/rrc_eNB_UE_context.c
index 3672d23b7cd7bbf3ecc39987a4604bfe81203ce9..78f85a6da2cffeac00853e13964abcf3ae6bff20 100644
--- a/openair2/RRC/LITE/rrc_eNB_UE_context.c
+++ b/openair2/RRC/LITE/rrc_eNB_UE_context.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_UE_context.h b/openair2/RRC/LITE/rrc_eNB_UE_context.h
index 808628f67c569c0a608387afcfbb413ed4616e1e..0e813cdee526819145296ff477ee620f39b00b1d 100644
--- a/openair2/RRC/LITE/rrc_eNB_UE_context.h
+++ b/openair2/RRC/LITE/rrc_eNB_UE_context.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_ral.c b/openair2/RRC/LITE/rrc_eNB_ral.c
index 32160d8c42b414ce208e3d6364e9558f7d848d9f..94e25a6eebcb140a47e8032c2c7e4d22d8603949 100644
--- a/openair2/RRC/LITE/rrc_eNB_ral.c
+++ b/openair2/RRC/LITE/rrc_eNB_ral.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_eNB_ral.h b/openair2/RRC/LITE/rrc_eNB_ral.h
index 8501758ba3309f99224cbf441483ec736301704c..143537e45cb1bb8b32af540f675dc93d55851694 100644
--- a/openair2/RRC/LITE/rrc_eNB_ral.h
+++ b/openair2/RRC/LITE/rrc_eNB_ral.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_rrm_interface.c b/openair2/RRC/LITE/rrc_rrm_interface.c
index 79d0c5eee8e4618ceb926d2330e8324b433865af..822ce554af389f51022e353738c7f5a4b40eaafb 100644
--- a/openair2/RRC/LITE/rrc_rrm_interface.c
+++ b/openair2/RRC/LITE/rrc_rrm_interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_rrm_interface.h b/openair2/RRC/LITE/rrc_rrm_interface.h
index 6a566f150d7766f1a46a41fcf7c8fbde42d49dbe..d204ab2db60b8749bfbf3d951a92d32380989edf 100644
--- a/openair2/RRC/LITE/rrc_rrm_interface.h
+++ b/openair2/RRC/LITE/rrc_rrm_interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrc_types.h b/openair2/RRC/LITE/rrc_types.h
index 64d143a2784fd4793c43ccf98a74f6783ba2d971..9c1e37494f1eda3b3546709d458fced10d5b6de3 100644
--- a/openair2/RRC/LITE/rrc_types.h
+++ b/openair2/RRC/LITE/rrc_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/rrm_2_rrc_msg.c b/openair2/RRC/LITE/rrm_2_rrc_msg.c
index 738f2a70f6ea92d912b9f274691f9c060742c3c1..3ef0bc2e0a7ecec6ce4692bbbfa52d08094d774f 100644
--- a/openair2/RRC/LITE/rrm_2_rrc_msg.c
+++ b/openair2/RRC/LITE/rrm_2_rrc_msg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/utils.c b/openair2/RRC/LITE/utils.c
index 832a61979a8d2d7ffdd2a65f9e25525573d9ff9c..fd37fdf65cfb0e9985022aeeaba4ed0c1f9c4518 100644
--- a/openair2/RRC/LITE/utils.c
+++ b/openair2/RRC/LITE/utils.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/LITE/vars.h b/openair2/RRC/LITE/vars.h
index 906cb63ac427ea12adbe4d2baedefb0948da07c5..fbf3ae1dff944696e7e1ef745e23315aaec83971 100644
--- a/openair2/RRC/LITE/vars.h
+++ b/openair2/RRC/LITE/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/NAS/nas_config.c b/openair2/RRC/NAS/nas_config.c
index 07d65312e5e7460bf5dcc16d79d77a156ec1b434..3f825760dae1c329591c9a4936e72ba36e0a1876 100644
--- a/openair2/RRC/NAS/nas_config.c
+++ b/openair2/RRC/NAS/nas_config.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/NAS/nas_config.h b/openair2/RRC/NAS/nas_config.h
index 227663858187b6e5d8eb86464f2eafaa214ece27..4426ca9a1aabfd2eb9be65ffb2bb9886f72534fe 100644
--- a/openair2/RRC/NAS/nas_config.h
+++ b/openair2/RRC/NAS/nas_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/NAS/rb_config.c b/openair2/RRC/NAS/rb_config.c
index da80ea108d674ae9963cba13ff4f1b0980ab2c3e..3431137f7419c36cab0166da47c654195894897b 100644
--- a/openair2/RRC/NAS/rb_config.c
+++ b/openair2/RRC/NAS/rb_config.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/RRC/NAS/rb_config.h b/openair2/RRC/NAS/rb_config.h
index a4525b2d65e81265bdc793448f9b16928f856b56..6af42bac455a1d74f3a1f128754a2df4ab0b7247 100644
--- a/openair2/RRC/NAS/rb_config.h
+++ b/openair2/RRC/NAS/rb_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/link_manager.c b/openair2/UTIL/ASYNC_IF/link_manager.c
index 235acef2471eb52c7c2bd6c30f25f79f8b1d93ff..52a4f90ce008b3996aeb1bb1e4ec8642f39a9b69 100644
--- a/openair2/UTIL/ASYNC_IF/link_manager.c
+++ b/openair2/UTIL/ASYNC_IF/link_manager.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/link_manager.h b/openair2/UTIL/ASYNC_IF/link_manager.h
index a25c072b41245d17915b044dfde7e01c669452fd..90ede6c3db61865692c72c4d2721da720cd9350c 100644
--- a/openair2/UTIL/ASYNC_IF/link_manager.h
+++ b/openair2/UTIL/ASYNC_IF/link_manager.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/message_queue.c b/openair2/UTIL/ASYNC_IF/message_queue.c
index ee6c92d852a670d276720e7038f043a06eee8d94..55b7a104cd1c271b9cd4925789d5b88ca7e897e3 100644
--- a/openair2/UTIL/ASYNC_IF/message_queue.c
+++ b/openair2/UTIL/ASYNC_IF/message_queue.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/message_queue.h b/openair2/UTIL/ASYNC_IF/message_queue.h
index 4e46ec08d673064702f025edd879405526b6fbe0..8fedddcc7751fa0233dcd5fbf133df88d6581062 100644
--- a/openair2/UTIL/ASYNC_IF/message_queue.h
+++ b/openair2/UTIL/ASYNC_IF/message_queue.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c
index 047e3f716c67cba5558948356fdaa76518acf9db..1a3701ed5cc043ccb69b4c6c8a7b899158cb6409 100644
--- a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c
+++ b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h
index 7dc4637404773c67457b8ec7680e5aedcbce167f..185d23daf59d136e69c9293f9ffac722fb210047 100644
--- a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h
+++ b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/socket_link.c b/openair2/UTIL/ASYNC_IF/socket_link.c
index 720a55398c5b719510c0a1dea304cecf416afbd8..60b03d7d4366c03f602457ca2776f88891cb4d91 100644
--- a/openair2/UTIL/ASYNC_IF/socket_link.c
+++ b/openair2/UTIL/ASYNC_IF/socket_link.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/ASYNC_IF/socket_link.h b/openair2/UTIL/ASYNC_IF/socket_link.h
index 5b9f438c8aa0747eecd759fb02939e701ddc004d..dbe0a6937055e53c16e7a3bedcfecc8772c0cc79 100644
--- a/openair2/UTIL/ASYNC_IF/socket_link.h
+++ b/openair2/UTIL/ASYNC_IF/socket_link.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/BIGPHYS/bigphys.c b/openair2/UTIL/BIGPHYS/bigphys.c
index 92a0a8bef8896e1cb4a3a4ab9b5c3c0565515190..219a0c8d1b42eb99fb54abcefbc1bd65d73e45fb 100644
--- a/openair2/UTIL/BIGPHYS/bigphys.c
+++ b/openair2/UTIL/BIGPHYS/bigphys.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/BIGPHYS/defs.h b/openair2/UTIL/BIGPHYS/defs.h
index 01387cb0019ed0616ba091e79bad39827ee6fd41..69368a6d727f94fb9dfe16a90e6433bf6cd79382 100644
--- a/openair2/UTIL/BIGPHYS/defs.h
+++ b/openair2/UTIL/BIGPHYS/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/CLI/cli.c b/openair2/UTIL/CLI/cli.c
index bb193728c9939f2eb6f0f26307ebda90e522fba9..c6aa0ab0de16ef2d8b3e20aba79cd5e94786646d 100644
--- a/openair2/UTIL/CLI/cli.c
+++ b/openair2/UTIL/CLI/cli.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -215,7 +215,7 @@ int cli_login(const char *username, int maxnodes, int maxcmds)
 
 char *cli_prompt(void)
 {
-  static char promptstr[200];
+  static char promptstr[256];
   promptstr[0]='\0';
   snprintf(promptstr, 200,"%s@%s",username, cli_cfg->prompt);
   return promptstr;
diff --git a/openair2/UTIL/CLI/cli.h b/openair2/UTIL/CLI/cli.h
index 70aab5c4da87c5d393babcaada245c950b403bc5..c9052ead6f466eac771b93de0454a718c44fa166 100644
--- a/openair2/UTIL/CLI/cli.h
+++ b/openair2/UTIL/CLI/cli.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/CLI/cli_cmd.c b/openair2/UTIL/CLI/cli_cmd.c
index 366295bf1a063e70c77b6bbd37935b915cdc828d..a4902555743aac8c98bf576fbbc0457169b33a05 100644
--- a/openair2/UTIL/CLI/cli_cmd.c
+++ b/openair2/UTIL/CLI/cli_cmd.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -103,7 +103,7 @@ int prompt (char *arg)
     return 0;
 
   if (!arg || !*arg) { // no arg is provided, run get func
-    snprintf(buffer,200,"%s\n", cli_cfg->prompt);
+    snprintf(buffer,256,"%s\n", cli_cfg->prompt);
     send(cli_cfg->cfd, buffer, strlen(buffer), 0);
     // send(cli_cfg->cfd, cli_cfg->prompt, strlen(cli_cfg->prompt), 0);
   } else {// set func
diff --git a/openair2/UTIL/CLI/cli_if.h b/openair2/UTIL/CLI/cli_if.h
index 129176cd2c3af5e8d1873ae5020a4d06e858043b..539ecd465ab7ecac6227a0dd611ac8a48863a6a7 100644
--- a/openair2/UTIL/CLI/cli_if.h
+++ b/openair2/UTIL/CLI/cli_if.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/CLI/cli_server.c b/openair2/UTIL/CLI/cli_server.c
index 43ffac0a53f0bd23a3ecc828a5539d31aadc5dda..d4f97f15ba0f6e10ba18fdddda7d8783024c3b6a 100644
--- a/openair2/UTIL/CLI/cli_server.c
+++ b/openair2/UTIL/CLI/cli_server.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/FIFO/pad_list.c b/openair2/UTIL/FIFO/pad_list.c
index f60505f8ce20cd5f8331da4c8f2f5363c4980ccb..32a9f3519640a020df52ebc60add66f9a0fb3bac 100644
--- a/openair2/UTIL/FIFO/pad_list.c
+++ b/openair2/UTIL/FIFO/pad_list.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/FIFO/pad_list.h b/openair2/UTIL/FIFO/pad_list.h
index 4f755f9940e100e934f7e15ef3aa8074b650c4e7..ecafed7cc44afc06773781013c1a86952aa7ae05 100644
--- a/openair2/UTIL/FIFO/pad_list.h
+++ b/openair2/UTIL/FIFO/pad_list.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/FIFO/types.h b/openair2/UTIL/FIFO/types.h
index 23d69ff3a6782d3298c20d0d1a9cf5a7d86c1ee3..f949b2b72b97407ebee9e563ce216aa4d322aff5 100644
--- a/openair2/UTIL/FIFO/types.h
+++ b/openair2/UTIL/FIFO/types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LISTS/list.c b/openair2/UTIL/LISTS/list.c
index 7040aeeef7fa6221f21ecf85e2976b09bf0628fa..65f70c0786a97d96395d79c705871ba0f0c3ccd4 100644
--- a/openair2/UTIL/LISTS/list.c
+++ b/openair2/UTIL/LISTS/list.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LISTS/list.h b/openair2/UTIL/LISTS/list.h
index 189de84aeb68dfff13d811692ae9a414b0e59b22..864804c5913e750dbcb744b5bb38b8352d3f4d0d 100644
--- a/openair2/UTIL/LISTS/list.h
+++ b/openair2/UTIL/LISTS/list.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LISTS/list2.c b/openair2/UTIL/LISTS/list2.c
index 8daa19bfa4515c3b00adb7deddfa90966655c9bd..875f5e2d2fcbf4a69c6876e11efc521d89845940 100644
--- a/openair2/UTIL/LISTS/list2.c
+++ b/openair2/UTIL/LISTS/list2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c
index 7ce85f6d8a48c10034eb0b4d93409610bef5806a..f94d530b0cfa6a326552d6f839e64bfad8b95a6d 100644
--- a/openair2/UTIL/LOG/log.c
+++ b/openair2/UTIL/LOG/log.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -528,8 +528,50 @@ int logInit (void)
   return 0;
 }
 
+void nfapi_log(char *file, char *func, int line, int comp, int level, const char* format, va_list args)
+{
+  LOG_params log_params;
+  int        len;
+
+  len = vsnprintf(log_params.l_buff_info, MAX_LOG_INFO-1, format, args);
+
+  //2 first parameters must be passed as 'const' to the thread function
+  log_params.file = strdup(file);
+  log_params.func = strdup(func);
+  log_params.line = line;
+  log_params.comp = comp;
+  log_params.level = level;
+  log_params.format = format;
+  log_params.len = len;
+
+  if (pthread_mutex_lock(&log_lock) != 0) {
+    return;
+  }
+
+  log_list_tail++;
+  log_list[log_list_tail - 1] = log_params;
+
+  if (log_list_tail >= 1000) {
+    log_list_tail = 0;
+  }
+
+  if (log_list_nb_elements < 1000) {
+    log_list_nb_elements++;
+  }
+
+  if(pthread_cond_signal(&log_notify) != 0) {
+    pthread_mutex_unlock(&log_lock);
+    return;
+  }
+
+  if(pthread_mutex_unlock(&log_lock) != 0) {
+    return;
+  }
+
+}
+
 //log record: add to a list
-void logRecord(const char *file, const char *func, int line,  int comp,
+void logRecord(const char *file, const char *func, int line, pthread_t thread_id, int comp,
                int level, const char *format, ...)
 {
   va_list    args;
@@ -544,6 +586,7 @@ void logRecord(const char *file, const char *func, int line,  int comp,
   log_params.file = strdup(file);
   log_params.func = strdup(func);
   log_params.line = line;
+  log_params.thread_id = thread_id;
   log_params.comp = comp;
   log_params.level = level;
   log_params.format = format;
@@ -582,7 +625,7 @@ void logRecord(const char *file, const char *func, int line,  int comp,
 }
 
 void logRecord_thread_safe(const char *file, const char *func,
-                           int line,  int comp, int level,
+                           int line, pthread_t thread_id, int comp, int level, 
                            int len, const char *params_string)
 {
   log_component_t *c;
@@ -634,6 +677,8 @@ void logRecord_thread_safe(const char *file, const char *func,
                             func);
     }
 
+    //total_len += snprintf(&log_buffer[total_len], MAX_LOG_TOTAL - total_len, "[%08lx] ", thread_id);
+
     if ((g_log->flag & FLAG_FILE_LINE) || (c->flag & FLAG_FILE_LINE) )  {
       total_len += snprintf(&log_buffer[total_len], MAX_LOG_TOTAL - total_len, "[%s:%d]",
                             file, line);
@@ -733,6 +778,7 @@ void *log_thread_function(void *list)
     logRecord_thread_safe(log_params.file,
                           log_params.func,
                           log_params.line,
+                          log_params.thread_id,
                           log_params.comp,
                           log_params.level,
                           log_params.len,
@@ -1021,8 +1067,8 @@ void logRecord_mt(const char *file, const char *func, int line, int comp,
 #endif /* #if 0 */
 
 //log record, format, and print:  executed in the main thread (mt)
-void logRecord_mt(const char *file, const char *func, int line, int comp,
-                  int level, const char *format, ...)
+void logRecord_mt(const char *file, const char *func, int line, 
+    pthread_t thread_id, int comp, int level, const char *format, ...)
 {
   int len = 0;
   va_list args;
@@ -1117,13 +1163,16 @@ void logRecord_mt(const char *file, const char *func, int line, int comp,
       if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL;
     }
 
+    //len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "[%08lx]", thread_id);
+    //if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL;
+
     len += vsnprintf(&log_buffer[len], MAX_LOG_TOTAL - len, format, args);
     if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL;
     log_end = log_buffer + len;
 
     if ( (g_log->flag & FLAG_COLOR) || (c->flag & FLAG_COLOR) ) {
       len += snprintf(&log_buffer[len], MAX_LOG_TOTAL - len, "%s",
-                      log_level_highlight_end[level]);
+          log_level_highlight_end[level]);
       if (len > MAX_LOG_TOTAL) len = MAX_LOG_TOTAL;
     }
   }
@@ -1142,7 +1191,7 @@ void logRecord_mt(const char *file, const char *func, int line, int comp,
   }
 
 #else
-    fwrite(log_buffer, len, 1, stdout);
+  fwrite(log_buffer, len, 1, stdout);
 #endif
 
 #ifndef RTAI
diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h
index f1f4eb35c534e8a2ba218b01339596fd96da21b8..cea32ee7a6386e664eca78beb3ac263376178f86 100644
--- a/openair2/UTIL/LOG/log.h
+++ b/openair2/UTIL/LOG/log.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -240,6 +240,7 @@ typedef struct LOG_params {
     const char *file;
     const char *func;
     int line;
+    pthread_t thread_id;
     int comp;
     int level;
     const char *format;
@@ -262,8 +263,8 @@ void log_set_instance_type (log_instance_type_t instance);
 #    include "log_if.h"
 /*----------------------------------------------------------------------------*/
 int  logInit (void);
-void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
-void logRecord(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
+void logRecord_mt(const char *file, const char *func, int line,pthread_t thread_id, int comp, int level, const char *format, ...) __attribute__ ((format (printf, 7, 8)));
+void logRecord(const char *file, const char *func, int line, pthread_t thread_id, int comp, int level, const char *format, ...) __attribute__ ((format (printf, 7, 8)));
 int  set_comp_log(int component, int level, int verbosity, int interval);
 int  set_log(int component, int level, int interval);
 void set_glog(int level, int verbosity);
@@ -285,15 +286,15 @@ void *log_thread_function(void * list);
 #ifdef USER_MODE
 //#define logIt(component, level, format, args...) do {logRecord(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args);} while(0);
 #ifdef LOG_NO_THREAD
-#define logIt(component, level, format, args...) logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args)
+#define logIt(component, level, format, args...) logRecord_mt(__FILE__, __FUNCTION__, __LINE__, pthread_self(), component, level, format, ##args)
 #else //default
-#define logIt(component, level, format, args...) logRecord(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args)
+#define logIt(component, level, format, args...) logRecord(__FILE__, __FUNCTION__, __LINE__, pthread_self(), component, level, format, ##args)
 #endif
 #else
 #ifdef LOG_NO_THREAD
-#define logIt(component, level, format, args...) logRecord_mt(NULL, __FUNCTION__, __LINE__, component, level, format, ##args)
+#define logIt(component, level, format, args...) logRecord_mt(NULL, __FUNCTION__, __LINE__, pthread_self(), component, level, format, ##args)
 #else // default
-#define logIt(component, level, format, args...) logRecord(NULL, __FUNCTION__, __LINE__, component, level, format, ##args)
+#define logIt(component, level, format, args...) logRecord(NULL, __FUNCTION__, __LINE__, pthread_self(), component, level, format, ##args)
 #endif
 #endif
 /* @}*/
@@ -352,6 +353,19 @@ void *log_thread_function(void * list);
 #        define LOG_N(c, x...) /* */
 #        define LOG_F(c, x...) /* */
 #    else  /*DISABLE_LOG_X*/
+#if      0
+         extern log_t *g_log;
+#        define LOG_G(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_EMERG   > g_log->log_component[c].level || LOG_EMERG   > g_log->level) logIt(c, LOG_EMERG, x); } while(0)
+#        define LOG_A(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_ALERT   > g_log->log_component[c].level || LOG_ALERT   > g_log->level) logIt(c, LOG_ALERT, x); } while(0)
+#        define LOG_C(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_CRIT    > g_log->log_component[c].level || LOG_CRIT    > g_log->level) logIt(c, LOG_CRIT, x); } while(0)
+#        define LOG_E(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_ERR     > g_log->log_component[c].level || LOG_ERR     > g_log->level) logIt(c, LOG_ERR, x); } while(0)
+#        define LOG_W(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_WARNING > g_log->log_component[c].level || LOG_WARNING > g_log->level) logIt(c, LOG_WARNING, x); } while(0)
+#        define LOG_N(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_NOTICE  > g_log->log_component[c].level || LOG_NOTICE  > g_log->level) logIt(c, LOG_NOTICE, x); } while(0)
+#        define LOG_I(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_INFO    > g_log->log_component[c].level || LOG_INFO    > g_log->level) logIt(c, LOG_INFO, x); } while(0)
+#        define LOG_D(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_DEBUG   > g_log->log_component[c].level || LOG_DEBUG   > g_log->level) logIt(c, LOG_DEBUG, x); } while(0)
+#        define LOG_F(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_FILE    > g_log->log_component[c].level || LOG_FILE    > g_log->level) logIt(c, LOG_FILE, x); } while(0)
+#        define LOG_T(c, x...) do { if (g_log->log_component[c].level > g_log->level || LOG_TRACE   > g_log->log_component[c].level || LOG_TRACE   > g_log->level) logIt(c, LOG_TRACE, x); } while(0)
+#else
 #        define LOG_G(c, x...) logIt(c, LOG_EMERG, x)
 #        define LOG_A(c, x...) logIt(c, LOG_ALERT, x)
 #        define LOG_C(c, x...) logIt(c, LOG_CRIT,  x)
@@ -362,6 +376,7 @@ void *log_thread_function(void * list);
 #        define LOG_D(c, x...) logIt(c, LOG_DEBUG, x)
 #        define LOG_F(c, x...) logIt(c, LOG_FILE, x)  // log to a file, useful for the MSC chart generation
 #        define LOG_T(c, x...) logIt(c, LOG_TRACE, x)
+#        endif /* 0 */
 #    endif /*DISABLE_LOG_X*/
 #  endif /* T_TRACER */
 #else /* USER_MODE */
diff --git a/openair2/UTIL/LOG/log_extern.h b/openair2/UTIL/LOG/log_extern.h
index 39324de4e218d5cb075c6c9ba58324723509bc4c..611487ffea2b3e4796726986e48a54c349cac7db 100644
--- a/openair2/UTIL/LOG/log_extern.h
+++ b/openair2/UTIL/LOG/log_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LOG/log_if.h b/openair2/UTIL/LOG/log_if.h
index 6338fab829cad69385f9471cc331594b65a05cc4..531b9df62e066ca609f5a779ea3984157f1c8dd7 100644
--- a/openair2/UTIL/LOG/log_if.h
+++ b/openair2/UTIL/LOG/log_if.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 665e5b4384b30364e8df83f40e875e0bc874b2ab..08d4e61497618543ff0e6d1fbf680b3f3f4f43da 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -399,6 +399,17 @@ const char* eurecomFunctionsNames[] = {
 
   "compress_if",
   "decompress_if",
+
+  "nfapi_subframe",
+  "generate_pcfich",
+  "generate_dci0",
+  "generate_dlsch",
+  "generate_phich",
+  "pdcch_scrambling",
+  "pdcch_modulation",
+  "pdcch_interleaving",
+  "pdcch_tx",
+
 };
 
 struct vcd_module_s vcd_modules[] = {
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index d777236b34d6585fbb9f40ef6d60206f5df5e478..a4c8cd2476e08f0b234e47540b54b89b1d6b52fd 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -376,6 +376,16 @@ typedef enum {
   VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_COMPR_IF,
   VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_DECOMPR_IF,
 
+  VCD_SIGNAL_DUMPER_FUNCTIONS_NFAPI,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PCFICH,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DCI0,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_PHICH,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_SCRAMBLING,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_MODULATION,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_INTERLEAVING,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_PDCCH_TX,
+
   VCD_SIGNAL_DUMPER_FUNCTIONS_END
 } vcd_signal_dump_functions;
 
diff --git a/openair2/UTIL/MATH/crc_byte.c b/openair2/UTIL/MATH/crc_byte.c
index b7e537163cb6958c5482cbc60a5e80a74639fffa..a3ff00fec19725498bc461270f3d20f6e03a2fff 100644
--- a/openair2/UTIL/MATH/crc_byte.c
+++ b/openair2/UTIL/MATH/crc_byte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MATH/oml.c b/openair2/UTIL/MATH/oml.c
index 5794b7876a0542522c96f40122dc17cf237bb001..70e1a87cdc356d703567cdb492cb54646f7b08a2 100644
--- a/openair2/UTIL/MATH/oml.c
+++ b/openair2/UTIL/MATH/oml.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MATH/oml.h b/openair2/UTIL/MATH/oml.h
index 2a057a93fccc5e6bdfbae865ab36803d3938b671..70f677a559cfa0787641630a670d39f3d2bd0d3e 100644
--- a/openair2/UTIL/MATH/oml.h
+++ b/openair2/UTIL/MATH/oml.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MATH/random.c b/openair2/UTIL/MATH/random.c
index c2db2876795ed2c23e4589c144ca6ca56b50b5e9..06caa3bc3ce6fc9e93c60a80a30a23e4625c0daa 100644
--- a/openair2/UTIL/MATH/random.c
+++ b/openair2/UTIL/MATH/random.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MATH/random_proto_extern.h b/openair2/UTIL/MATH/random_proto_extern.h
index 17ea22e461d15e74238123c91b44b69f79739a43..45db5652172af569ec6838651c653e4aabca9720 100644
--- a/openair2/UTIL/MATH/random_proto_extern.h
+++ b/openair2/UTIL/MATH/random_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MATH/taus.c b/openair2/UTIL/MATH/taus.c
index 1f3a64aa841362302fb2d9127179dd1265f2108a..6e0fd84e66c16e39b71b1ce11a272ca4a0c3fc5a 100644
--- a/openair2/UTIL/MATH/taus.c
+++ b/openair2/UTIL/MATH/taus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c
index 81db9c28ddff0de614875d62683fa3942ac3f3dd..09f10547cb05df8334658b4cfb37a8291f618841 100644
--- a/openair2/UTIL/MEM/mem_block.c
+++ b/openair2/UTIL/MEM/mem_block.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MEM/mem_block.h b/openair2/UTIL/MEM/mem_block.h
index c3a2f5dff21735e286c2cbb9f85bfcb174ab7b67..b7e36bf5b374fc73f6f88d5207c0f6dcabc441f3 100644
--- a/openair2/UTIL/MEM/mem_block.h
+++ b/openair2/UTIL/MEM/mem_block.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MEM/mem_mngt.c b/openair2/UTIL/MEM/mem_mngt.c
index 9f4f57cdd2c77332e5fc9f24b98e6a0d5f37b586..49cd310ac907fda38c1213ee411661f6ea0c1df2 100644
--- a/openair2/UTIL/MEM/mem_mngt.c
+++ b/openair2/UTIL/MEM/mem_mngt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MEM/mem_mngt_proto_extern.h b/openair2/UTIL/MEM/mem_mngt_proto_extern.h
index f4f8a2eaae5457619ab5f96625abeddaac5c8f52..4690bba42e5b91f4721d727b38d41da928e0c55a 100644
--- a/openair2/UTIL/MEM/mem_mngt_proto_extern.h
+++ b/openair2/UTIL/MEM/mem_mngt_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/MEM/mem_pool.h b/openair2/UTIL/MEM/mem_pool.h
index 0e943081b0d257ea86c0cdc71f6e668f3bfd7e4b..cc0face78c673afa37a2b78367fe4d2193956732 100644
--- a/openair2/UTIL/MEM/mem_pool.h
+++ b/openair2/UTIL/MEM/mem_pool.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG.c b/openair2/UTIL/OCG/OCG.c
index a78b49dd847cd3f82124088265256870f7904bc1..c3665c93f5529c6cfd1f21a4a2f954af922fbbeb 100644
--- a/openair2/UTIL/OCG/OCG.c
+++ b/openair2/UTIL/OCG/OCG.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG.h b/openair2/UTIL/OCG/OCG.h
index 241148b0ab3c79f2f8303557ad5044a7d7c8f58c..855b7a99fdde30ef25bfb70c7c78c8a523104a2b 100644
--- a/openair2/UTIL/OCG/OCG.h
+++ b/openair2/UTIL/OCG/OCG.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_call_emu.c b/openair2/UTIL/OCG/OCG_call_emu.c
index 2ce1818b12be632e5123b69d1e3afcf11235026b..b6a2c924bf58b9ce692f2204d8f70eeab4706c2a 100644
--- a/openair2/UTIL/OCG/OCG_call_emu.c
+++ b/openair2/UTIL/OCG/OCG_call_emu.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_call_emu.h b/openair2/UTIL/OCG/OCG_call_emu.h
index c27f3c1b069969173b6caca969abccc17380735b..c7b2bb4327b1f58cb079bb13e20347dad91c16ff 100644
--- a/openair2/UTIL/OCG/OCG_call_emu.h
+++ b/openair2/UTIL/OCG/OCG_call_emu.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_config_mobi.c b/openair2/UTIL/OCG/OCG_config_mobi.c
index ae53b6195562591235e73a6628546c4a4390a842..cef4c5543b0705f90c9122c0ec6e69dd8d208417 100644
--- a/openair2/UTIL/OCG/OCG_config_mobi.c
+++ b/openair2/UTIL/OCG/OCG_config_mobi.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_config_mobi.h b/openair2/UTIL/OCG/OCG_config_mobi.h
index ab7048b2b0ff5532451c12693ff91c8bbdf99342..fbaeb4b281990c93cad4ceef9b35cc9464128a36 100644
--- a/openair2/UTIL/OCG/OCG_config_mobi.h
+++ b/openair2/UTIL/OCG/OCG_config_mobi.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_create_dir.c b/openair2/UTIL/OCG/OCG_create_dir.c
index cfbf26a21dd2ea512872d18550b28dc2ff92d12a..364887163b978b1b15f05d6588b2edef48101cb8 100644
--- a/openair2/UTIL/OCG/OCG_create_dir.c
+++ b/openair2/UTIL/OCG/OCG_create_dir.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_create_dir.h b/openair2/UTIL/OCG/OCG_create_dir.h
index c8f3729c47eff9a61e19b18bf200f0454a0b841c..692f4b095e73b165242ff68795e2fd32c597f29b 100644
--- a/openair2/UTIL/OCG/OCG_create_dir.h
+++ b/openair2/UTIL/OCG/OCG_create_dir.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_detect_file.c b/openair2/UTIL/OCG/OCG_detect_file.c
index a7226a67db1daaeb09075875a079b4c6a02879f5..034f173b77f8cb777a341025dcf6cce605f1ac7c 100644
--- a/openair2/UTIL/OCG/OCG_detect_file.c
+++ b/openair2/UTIL/OCG/OCG_detect_file.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_detect_file.h b/openair2/UTIL/OCG/OCG_detect_file.h
index 43aa22040ec667b31b4ccb840822d7ce76837907..3a43b505525f30769e95fb17e66a430fd0f10d06 100644
--- a/openair2/UTIL/OCG/OCG_detect_file.h
+++ b/openair2/UTIL/OCG/OCG_detect_file.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_extern.h b/openair2/UTIL/OCG/OCG_extern.h
index 58eac66263efd2555c33a8923b209022b794e0ad..25fea4e90e37ee23a3730803d28cc5fd4f0ba2aa 100644
--- a/openair2/UTIL/OCG/OCG_extern.h
+++ b/openair2/UTIL/OCG/OCG_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_generate_report.c b/openair2/UTIL/OCG/OCG_generate_report.c
index 320fa0c5df38cbe62190705b699d1140467c1724..fa1ed191e62afa1cc9fa7cb1d9b8a5f38ac9dcc6 100644
--- a/openair2/UTIL/OCG/OCG_generate_report.c
+++ b/openair2/UTIL/OCG/OCG_generate_report.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_generate_report.h b/openair2/UTIL/OCG/OCG_generate_report.h
index c3fd5f9540c6bfbe67c01cef100ffc5124e9fc0e..a67adf70c7619bd295ff44e8c47af157ba7b06d4 100644
--- a/openair2/UTIL/OCG/OCG_generate_report.h
+++ b/openair2/UTIL/OCG/OCG_generate_report.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_get_opt.c b/openair2/UTIL/OCG/OCG_get_opt.c
index 79bce055c6519c9146172f75344f5513e25f9f0c..0d52197d13273fd56af2a7d2150c8cdbdcc29c04 100644
--- a/openair2/UTIL/OCG/OCG_get_opt.c
+++ b/openair2/UTIL/OCG/OCG_get_opt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_get_opt.h b/openair2/UTIL/OCG/OCG_get_opt.h
index 5ae9d5162780dc43d245ab511cf9c1513969d0cc..7fdab0c574f86f87d5ce2283eeee806e471273f8 100644
--- a/openair2/UTIL/OCG/OCG_get_opt.h
+++ b/openair2/UTIL/OCG/OCG_get_opt.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_if.h b/openair2/UTIL/OCG/OCG_if.h
index 0635356a4d2c4eadd373bc72e401d5703c6a8a71..c515d9746dfbbf11d0769a597869f0d07dc091e1 100644
--- a/openair2/UTIL/OCG/OCG_if.h
+++ b/openair2/UTIL/OCG/OCG_if.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_parse_XML.c b/openair2/UTIL/OCG/OCG_parse_XML.c
index ea35db7c8db4f437866a91e93684b2991eedc931..e52bf402db7775454856baec6e3229f7289d00c6 100644
--- a/openair2/UTIL/OCG/OCG_parse_XML.c
+++ b/openair2/UTIL/OCG/OCG_parse_XML.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_parse_XML.h b/openair2/UTIL/OCG/OCG_parse_XML.h
index 3133f98a29fec684b541a7ac96171a5421680804..cb74a9fe1ea64945f521a8aaacfe0d6adce944e0 100644
--- a/openair2/UTIL/OCG/OCG_parse_XML.h
+++ b/openair2/UTIL/OCG/OCG_parse_XML.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_parse_filename.c b/openair2/UTIL/OCG/OCG_parse_filename.c
index 1ee3c1823339d4991b9e9d6da6f5b053146affaf..1ecad56e20aa0ac2ad779c2df07441576036ec5a 100644
--- a/openair2/UTIL/OCG/OCG_parse_filename.c
+++ b/openair2/UTIL/OCG/OCG_parse_filename.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_parse_filename.h b/openair2/UTIL/OCG/OCG_parse_filename.h
index 09ca9088b9884662ea1ad8238af0acd09126b9d5..bcc8cd11edca1b8aecc2670466f5a9b9d5de2b9c 100644
--- a/openair2/UTIL/OCG/OCG_parse_filename.h
+++ b/openair2/UTIL/OCG/OCG_parse_filename.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_save_XML.c b/openair2/UTIL/OCG/OCG_save_XML.c
index a7f88d364abcc4a3e93d9165084b7b2c55ae6d79..2b0d907cdfd017ca5a2fc3c9d45ce5ff2a669af9 100644
--- a/openair2/UTIL/OCG/OCG_save_XML.c
+++ b/openair2/UTIL/OCG/OCG_save_XML.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_save_XML.h b/openair2/UTIL/OCG/OCG_save_XML.h
index b90b2b30f72d68b336fcbe9592b59c0a0a9380cd..ba2d9240caba1f1a19caa16cf47b52f51a83572b 100644
--- a/openair2/UTIL/OCG/OCG_save_XML.h
+++ b/openair2/UTIL/OCG/OCG_save_XML.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/OCG_vars.h b/openair2/UTIL/OCG/OCG_vars.h
index 383e4e2551426ab8b426665982889437e8a3f925..947a90715c9785783bfa7c0b515c4b9b69c2f35b 100644
--- a/openair2/UTIL/OCG/OCG_vars.h
+++ b/openair2/UTIL/OCG/OCG_vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OCG/readme.txt b/openair2/UTIL/OCG/readme.txt
index 88743539f846cc0ab9851b4938ac0e198ff9ba67..35300aa39f3b2c69d421d4876d008bc2676781da 100644
--- a/openair2/UTIL/OCG/readme.txt
+++ b/openair2/UTIL/OCG/readme.txt
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/common.c b/openair2/UTIL/OMG/common.c
index f1c850e689a82c1a276cbc190ddaa943227470a4..fa6e70df56dc30cc5aef23ae5420bb60d807be4f 100644
--- a/openair2/UTIL/OMG/common.c
+++ b/openair2/UTIL/OMG/common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/defs.h b/openair2/UTIL/OMG/defs.h
index 2a76d7dd6e7f069b010eb555853ee3f35b1fddd9..96700e6e9ce380ed07245df0a2914aba79c0da47 100644
--- a/openair2/UTIL/OMG/defs.h
+++ b/openair2/UTIL/OMG/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/grid.c b/openair2/UTIL/OMG/grid.c
index 4f2dbf24efab7f59d9570696509f3b260aa9c6c4..6cfcde663ba512df1270e41424bcd4108e00e1a6 100644
--- a/openair2/UTIL/OMG/grid.c
+++ b/openair2/UTIL/OMG/grid.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/grid.h b/openair2/UTIL/OMG/grid.h
index d7352491fe94619eb4200d8152d456aec809f8df..55c4857801f70f1542a78538242c1b7428f361e1 100644
--- a/openair2/UTIL/OMG/grid.h
+++ b/openair2/UTIL/OMG/grid.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/job.c b/openair2/UTIL/OMG/job.c
index 82a3096c035c196c0386fe1353e1c2f27030b7b7..1df44cb2c0e467c5cd4bbb636876170257c1239b 100644
--- a/openair2/UTIL/OMG/job.c
+++ b/openair2/UTIL/OMG/job.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/mobility_parser.c b/openair2/UTIL/OMG/mobility_parser.c
index 1013d6302ad31e77780fbe38fc5e283ad17e1183..31496af956cb9e0990664727e59b720ef5b0781a 100644
--- a/openair2/UTIL/OMG/mobility_parser.c
+++ b/openair2/UTIL/OMG/mobility_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/mobility_parser.h b/openair2/UTIL/OMG/mobility_parser.h
index 84d40264f482d7cf22def5e9d023fe27992a763e..403d7886ceed78a7391cf61790e88abde208b988 100644
--- a/openair2/UTIL/OMG/mobility_parser.h
+++ b/openair2/UTIL/OMG/mobility_parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg.c b/openair2/UTIL/OMG/omg.c
index a6d4b74d17b9c6f723c69445c8e875a6868ed9f7..83f38f13d52d52d6dff87577b388feed9624a0a0 100644
--- a/openair2/UTIL/OMG/omg.c
+++ b/openair2/UTIL/OMG/omg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg.h b/openair2/UTIL/OMG/omg.h
index 9ff69730f08f6da9a14ef1e098c3652bf80cbcd4..07dbf1f750e98e039ce8deb65e2e1dff8868c727 100644
--- a/openair2/UTIL/OMG/omg.h
+++ b/openair2/UTIL/OMG/omg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg_constants.h b/openair2/UTIL/OMG/omg_constants.h
index 0bee58db7a3b08cdb9925d81895afc5c15a930b0..1d70551b0320040a3b7bd59a0c89a1d4e207163d 100644
--- a/openair2/UTIL/OMG/omg_constants.h
+++ b/openair2/UTIL/OMG/omg_constants.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg_hashtable.c b/openair2/UTIL/OMG/omg_hashtable.c
index b237676e7159bbf6b4f7d6e921dfdd2da4474fa8..32b3840af3966e51dc32469e1dce68e04a51beaa 100644
--- a/openair2/UTIL/OMG/omg_hashtable.c
+++ b/openair2/UTIL/OMG/omg_hashtable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg_hashtable.h b/openair2/UTIL/OMG/omg_hashtable.h
index 894a245efd8fd05297b8eab5149083b23ee0148d..238be879fde4ed2a735cb07503d41418c43ac379 100644
--- a/openair2/UTIL/OMG/omg_hashtable.h
+++ b/openair2/UTIL/OMG/omg_hashtable.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/omg_vars.h b/openair2/UTIL/OMG/omg_vars.h
index 861395771f33731d1e0a53c62ef65ef0e6bf7dcb..bf0a13e5b5e32ad164db1bc363ecd7cc310d998f 100644
--- a/openair2/UTIL/OMG/omg_vars.h
+++ b/openair2/UTIL/OMG/omg_vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/rwalk.c b/openair2/UTIL/OMG/rwalk.c
index 6e758dbfa79293c4e341d003400d185668a3e038..8c8840a91fdd0853f4a094433ee8866ed1a6666b 100644
--- a/openair2/UTIL/OMG/rwalk.c
+++ b/openair2/UTIL/OMG/rwalk.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/rwalk.h b/openair2/UTIL/OMG/rwalk.h
index 482cecd0c97b54a3448faa7f47b8503f91dc46ea..114f8a48f9a100d3f37d16f12ad92f3ba21c01bf 100644
--- a/openair2/UTIL/OMG/rwalk.h
+++ b/openair2/UTIL/OMG/rwalk.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/rwp.c b/openair2/UTIL/OMG/rwp.c
index 4a03dabc7891b27461e6d26ef3648cd63913775e..8e5ab43081b6d2b4bf6a0b9611c3defb7ee189a2 100644
--- a/openair2/UTIL/OMG/rwp.c
+++ b/openair2/UTIL/OMG/rwp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/rwp.h b/openair2/UTIL/OMG/rwp.h
index 4d5695cc805cfec0b6916852b8fa257e35d78773..4a6c32cd5603281b4ce145a73d9ffc6b83b3d3af 100644
--- a/openair2/UTIL/OMG/rwp.h
+++ b/openair2/UTIL/OMG/rwp.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/static.c b/openair2/UTIL/OMG/static.c
index 8a94a74294b1d3ffc11d130354d11a9be691ad45..361fa969e94b6631636a519ebcba822bd98ec756 100644
--- a/openair2/UTIL/OMG/static.c
+++ b/openair2/UTIL/OMG/static.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/static.h b/openair2/UTIL/OMG/static.h
index b2c8904e8ade8198a04c4329d254743b0325d08d..b7fa800968db778cc986d0244a6dcb2e0e9b984a 100644
--- a/openair2/UTIL/OMG/static.h
+++ b/openair2/UTIL/OMG/static.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/steadystaterwp.c b/openair2/UTIL/OMG/steadystaterwp.c
index 428ad7dce7074a9ce9d0d968311a716eab5cd0a2..d4d2fde4e47f2273d8f0ab0cf7fd238cfbe7d4ed 100644
--- a/openair2/UTIL/OMG/steadystaterwp.c
+++ b/openair2/UTIL/OMG/steadystaterwp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/steadystaterwp.h b/openair2/UTIL/OMG/steadystaterwp.h
index b73c7b1593c196f619574d5476ac5f81aa0227d0..08bca4d28e25ff559892c2b7648dc96271435740 100644
--- a/openair2/UTIL/OMG/steadystaterwp.h
+++ b/openair2/UTIL/OMG/steadystaterwp.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/trace.c b/openair2/UTIL/OMG/trace.c
index 4a71999fb90da0272ac931c9f127b8ca7b5c6e85..e86d8102e5e9f8f0b2a56e0379f85501e0928f16 100644
--- a/openair2/UTIL/OMG/trace.c
+++ b/openair2/UTIL/OMG/trace.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/trace.h b/openair2/UTIL/OMG/trace.h
index c7d0528d9412ed11adae9268c06d0512b08ffd5e..f1a4a4a274ba285a42e07e41f705e08579cb2cab 100644
--- a/openair2/UTIL/OMG/trace.h
+++ b/openair2/UTIL/OMG/trace.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/trace_hashtable.c b/openair2/UTIL/OMG/trace_hashtable.c
index 0595a1d432f60ad85502fe74dd6e13731ed4559c..9a7a67feef00a48c08d09d674ed16e62ab856498 100644
--- a/openair2/UTIL/OMG/trace_hashtable.c
+++ b/openair2/UTIL/OMG/trace_hashtable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMG/trace_hashtable.h b/openair2/UTIL/OMG/trace_hashtable.h
index d57e65956fd542e59f148a27e7af86324bda25b4..b842880e2913f8cc8f611921b690a81a21ebdd59 100644
--- a/openair2/UTIL/OMG/trace_hashtable.h
+++ b/openair2/UTIL/OMG/trace_hashtable.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/communicationthread.cpp b/openair2/UTIL/OMV/communicationthread.cpp
index 4b30e32b718adbb5607e1d90f6e9108090a64168..17bc932a55c029d52d0cb26fa2e398211aad0384 100644
--- a/openair2/UTIL/OMV/communicationthread.cpp
+++ b/openair2/UTIL/OMV/communicationthread.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/communicationthread.h b/openair2/UTIL/OMV/communicationthread.h
index 19c1a242e59d7d7f3222a612b2d2b879c6fc6e45..b27f4024352708753b9800f26ce6b4d5186b18f9 100644
--- a/openair2/UTIL/OMV/communicationthread.h
+++ b/openair2/UTIL/OMV/communicationthread.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/mywindow.cpp b/openair2/UTIL/OMV/mywindow.cpp
index 4cbfbbacb1f87e9a6f4ea3c524a160e8758867e7..5a1c082975063d7efe7009d06cb0bb2de41bc8be 100644
--- a/openair2/UTIL/OMV/mywindow.cpp
+++ b/openair2/UTIL/OMV/mywindow.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/mywindow.h b/openair2/UTIL/OMV/mywindow.h
index a36beaf8c279a4370fe89a4dd0442246d67e3ac6..21cd001004a8e0c64b311becd6cadbaafec3a2f5 100644
--- a/openair2/UTIL/OMV/mywindow.h
+++ b/openair2/UTIL/OMV/mywindow.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/omv.cpp b/openair2/UTIL/OMV/omv.cpp
index c4fc5867831207ea0b1945fb91ade3d606dde97f..6d65d2a154a17aff345178e0d3600e8ac6cb843a 100644
--- a/openair2/UTIL/OMV/omv.cpp
+++ b/openair2/UTIL/OMV/omv.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/openglwidget.cpp b/openair2/UTIL/OMV/openglwidget.cpp
index d86767486db774a5362686fbf10b605f18b8bff1..ad0ce2b8355a0c821091b704a30af69e0bf93465 100644
--- a/openair2/UTIL/OMV/openglwidget.cpp
+++ b/openair2/UTIL/OMV/openglwidget.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/openglwidget.h b/openair2/UTIL/OMV/openglwidget.h
index b7069c63eaabf5afb392043b2dde423e13b5c9ae..a0e14b4db3060ad5912f023131f9a6ab74b4be3b 100644
--- a/openair2/UTIL/OMV/openglwidget.h
+++ b/openair2/UTIL/OMV/openglwidget.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OMV/structures.h b/openair2/UTIL/OMV/structures.h
index 434fa4c3836e888697328ae182b422b78fb1d1b0..ee3363205966b72c5ef5e69d7f00aafa95082c15 100644
--- a/openair2/UTIL/OMV/structures.h
+++ b/openair2/UTIL/OMV/structures.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h
index 0d2ab89e2a71e3c1d5797e9fd2dc94f813195a9a..b131d8053959f530d22dbb6d8d22d570490e89f4 100644
--- a/openair2/UTIL/OPT/opt.h
+++ b/openair2/UTIL/OPT/opt.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OPT/vars.h b/openair2/UTIL/OPT/vars.h
index e8ca8c5fc6adc514c3305bf7ad629367a53580de..0da315aa8b06b50fd96eded1f5bc4549c466d0c1 100644
--- a/openair2/UTIL/OPT/vars.h
+++ b/openair2/UTIL/OPT/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_defs.h b/openair2/UTIL/OSA/osa_defs.h
index ef714cdc0f0da3e4b60cc583aea4106dc4a812f6..4812d82d9166a12b2bc14e242b05071e7e910754 100644
--- a/openair2/UTIL/OSA/osa_defs.h
+++ b/openair2/UTIL/OSA/osa_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_internal.h b/openair2/UTIL/OSA/osa_internal.h
index 867b537826f790d1cade40618ea2cbb08c5b8d51..1f5aab5df8b88f3a0a283b49706f262198e9af46 100644
--- a/openair2/UTIL/OSA/osa_internal.h
+++ b/openair2/UTIL/OSA/osa_internal.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_key_deriver.c b/openair2/UTIL/OSA/osa_key_deriver.c
index 5bbaf5f17d08560ddf46115b55ec36f8ac9b9070..cf181b7a99a50e1709f15efa64a45f4e01a35219 100644
--- a/openair2/UTIL/OSA/osa_key_deriver.c
+++ b/openair2/UTIL/OSA/osa_key_deriver.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_rijndael.c b/openair2/UTIL/OSA/osa_rijndael.c
index a460ac35687356fb6c2121cd2075f20244b5779d..cbcbdab5be2653d7a4e840b73f7d1bd67d13736c 100644
--- a/openair2/UTIL/OSA/osa_rijndael.c
+++ b/openair2/UTIL/OSA/osa_rijndael.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_rijndael.h b/openair2/UTIL/OSA/osa_rijndael.h
index f8fcb1342755ff46ea56df5ef8f28d401607aa24..8c802b124774ff436aa2541208b4cda40ad53e79 100644
--- a/openair2/UTIL/OSA/osa_rijndael.h
+++ b/openair2/UTIL/OSA/osa_rijndael.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_snow3g.c b/openair2/UTIL/OSA/osa_snow3g.c
index 7d25c069fc656bcf92cc49824a4f21f45323c292..c69e80a1fb8794875953c80a30ec7d890f6159de 100644
--- a/openair2/UTIL/OSA/osa_snow3g.c
+++ b/openair2/UTIL/OSA/osa_snow3g.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_snow3g.h b/openair2/UTIL/OSA/osa_snow3g.h
index 7107317084904aa2d4ac54940426e286239b8e2d..5da81d23f3f49dc2445fad6133e0b8ed4752800c 100644
--- a/openair2/UTIL/OSA/osa_snow3g.h
+++ b/openair2/UTIL/OSA/osa_snow3g.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_stream_eea.c b/openair2/UTIL/OSA/osa_stream_eea.c
index 6aef6d2588ad26d22d15f44da7dbe7ab29dd7935..e922ed3c867b02a7b3cb443b5c3098076dd95b21 100644
--- a/openair2/UTIL/OSA/osa_stream_eea.c
+++ b/openair2/UTIL/OSA/osa_stream_eea.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSA/osa_stream_eia.c b/openair2/UTIL/OSA/osa_stream_eia.c
index 98305410061b2f1bb1e116866879daa8917a15e8..e58e280ef7568fc80c16f453d252669bde3a26e4 100644
--- a/openair2/UTIL/OSA/osa_stream_eia.c
+++ b/openair2/UTIL/OSA/osa_stream_eia.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OSD/recep.php b/openair2/UTIL/OSD/recep.php
index f824a327cf5acc67afdaf85f1b419dbfa60079b8..eb1036acad1ac8ba4c82698ca741a4250af28c45 100644
--- a/openair2/UTIL/OSD/recep.php
+++ b/openair2/UTIL/OSD/recep.php
@@ -4,7 +4,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/main.c b/openair2/UTIL/OTG/main.c
index 529755300a6e57666bf007985a8bd929d730e53a..1ee9b0edd7600df62ccd4acb8d9c1a2cc6194ecc 100644
--- a/openair2/UTIL/OTG/main.c
+++ b/openair2/UTIL/OTG/main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg.c b/openair2/UTIL/OTG/otg.c
index 2043eb1048870fff87b075befc99a3a99662aab0..04e046397184feaa66dba338ccca19006292f2ee 100644
--- a/openair2/UTIL/OTG/otg.c
+++ b/openair2/UTIL/OTG/otg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg.h b/openair2/UTIL/OTG/otg.h
index 0cd64aeef2658838050c32d75da6eb904a39b270..7938a2a0d79091e52849e4dc7a42ce9b1ea44e86 100644
--- a/openair2/UTIL/OTG/otg.h
+++ b/openair2/UTIL/OTG/otg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_config.h b/openair2/UTIL/OTG/otg_config.h
index 880f69bf164ceb93a800d55b412aa2c98c7f7956..2302c71f006a2cf83ef76d94e3d254e538516043 100644
--- a/openair2/UTIL/OTG/otg_config.h
+++ b/openair2/UTIL/OTG/otg_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_defs.h b/openair2/UTIL/OTG/otg_defs.h
index ebb3f299897031f17ae140f61091d177121aae60..fad0d9510ece3fc190b76889f819cb71aab4d080 100644
--- a/openair2/UTIL/OTG/otg_defs.h
+++ b/openair2/UTIL/OTG/otg_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_externs.h b/openair2/UTIL/OTG/otg_externs.h
index 053b8f55a10b82bb8132b71233139f2b92e59739..ea5943888f2aafea4d06f974652178ad7a19d102 100644
--- a/openair2/UTIL/OTG/otg_externs.h
+++ b/openair2/UTIL/OTG/otg_externs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_form.c b/openair2/UTIL/OTG/otg_form.c
index 7eb83b8ce403905d9ea40f8ce991c37e2d0bc244..6994e658961b9ec76795320b24c66f8b908ea631 100644
--- a/openair2/UTIL/OTG/otg_form.c
+++ b/openair2/UTIL/OTG/otg_form.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_form.h b/openair2/UTIL/OTG/otg_form.h
index e073f41457bb58db11e95fa4dc9c789f03f9c36e..1292184bdebb9cd64c1c7094428c5e4cc0f28208 100644
--- a/openair2/UTIL/OTG/otg_form.h
+++ b/openair2/UTIL/OTG/otg_form.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_kpi.c b/openair2/UTIL/OTG/otg_kpi.c
index 3f24d01ce6642b2ac656992e2ff9522e6c961166..94a0a53d5c54025b6e7c340cfa2a3dbe8af69010 100644
--- a/openair2/UTIL/OTG/otg_kpi.c
+++ b/openair2/UTIL/OTG/otg_kpi.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_kpi.h b/openair2/UTIL/OTG/otg_kpi.h
index d3e830fe12f98263fe208e9e8b041fb66c63f8de..2273d10c724efb82e4de897d3c7be2e77b0b2d48 100644
--- a/openair2/UTIL/OTG/otg_kpi.h
+++ b/openair2/UTIL/OTG/otg_kpi.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_models.c b/openair2/UTIL/OTG/otg_models.c
index f60cf926fe95dd3eb4100172fb82d1eb79fcc05d..d866713ecb1333d78e4c4193e78319708c6b3f43 100644
--- a/openair2/UTIL/OTG/otg_models.c
+++ b/openair2/UTIL/OTG/otg_models.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_models.h b/openair2/UTIL/OTG/otg_models.h
index 2e7351f400a854c26842ba3e19867316a198edb6..03b139d6586926374da06993dd1f1173dce62f28 100644
--- a/openair2/UTIL/OTG/otg_models.h
+++ b/openair2/UTIL/OTG/otg_models.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_rx.c b/openair2/UTIL/OTG/otg_rx.c
index 824439e8737284345a53ba14ae92267f0bae3bde..bcdcc5e35c6d6d6a807e376fccb74c07453bf39f 100644
--- a/openair2/UTIL/OTG/otg_rx.c
+++ b/openair2/UTIL/OTG/otg_rx.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -48,10 +48,11 @@ extern unsigned char NB_UE_INST;
 
 //#include "LAYER2/MAC/extern.h"
 
+#undef MAX
 #define MAX(x,y) ((x)>(y)?(x):(y))
+#undef MIN
 #define MIN(x,y) ((x)<(y)?(x):(y))
 
-
 // Check if the packet is well received or not and extract data
 int otg_rx_pkt(const int dst_instanceP, const int ctime, const char * const buffer_tx, const unsigned int size)
 {
diff --git a/openair2/UTIL/OTG/otg_rx.h b/openair2/UTIL/OTG/otg_rx.h
index 2f92ab82ce300bb35000bbe227386a5cdb3490f2..770d053ada0df618bbd577fc89f123484954de85 100644
--- a/openair2/UTIL/OTG/otg_rx.h
+++ b/openair2/UTIL/OTG/otg_rx.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_rx_socket.c b/openair2/UTIL/OTG/otg_rx_socket.c
index 98e03532a15403982f9c1560d46cd3ab1beae798..88ecd3e9044909246483c97344e6e4c298a513ab 100644
--- a/openair2/UTIL/OTG/otg_rx_socket.c
+++ b/openair2/UTIL/OTG/otg_rx_socket.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_rx_socket.h b/openair2/UTIL/OTG/otg_rx_socket.h
index 5c64a79008e29d4a0adaf30391b6e95f44d5dacb..e7062aaf58c2cb62bc4dd1f978526782c9f199ec 100644
--- a/openair2/UTIL/OTG/otg_rx_socket.h
+++ b/openair2/UTIL/OTG/otg_rx_socket.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_tx.c b/openair2/UTIL/OTG/otg_tx.c
index d1ad2b2ed30e088ae687c3cef03812a21d3b2c56..ac3ffd0fb29b0bfdf7666c13e7122b9d7b76d6b8 100644
--- a/openair2/UTIL/OTG/otg_tx.c
+++ b/openair2/UTIL/OTG/otg_tx.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_tx.h b/openair2/UTIL/OTG/otg_tx.h
index 51bcfdd41a4472f78377db5bc2deaa9c751fc121..c5b0c01dfca48a6556aba7e2bf3fc9ec546fb35c 100644
--- a/openair2/UTIL/OTG/otg_tx.h
+++ b/openair2/UTIL/OTG/otg_tx.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_tx_socket.c b/openair2/UTIL/OTG/otg_tx_socket.c
index ae833395092ed3fa7c791001539c0888be33bd9a..026dc3e8b836344ea81099aa7b59a4df829acf3b 100644
--- a/openair2/UTIL/OTG/otg_tx_socket.c
+++ b/openair2/UTIL/OTG/otg_tx_socket.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_tx_socket.h b/openair2/UTIL/OTG/otg_tx_socket.h
index 4d9981b802c05d7b110f380a22f9ec9632ad61f2..17568244fa73cf33ffea5f79cf9bead75c39223f 100644
--- a/openair2/UTIL/OTG/otg_tx_socket.h
+++ b/openair2/UTIL/OTG/otg_tx_socket.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/otg_vars.h b/openair2/UTIL/OTG/otg_vars.h
index 1d50084c859e866c82626c0a64f0e60a246b2d36..a6bb48af5431c604a9857b7e848d08a906ae52a1 100644
--- a/openair2/UTIL/OTG/otg_vars.h
+++ b/openair2/UTIL/OTG/otg_vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/OTG/traffic_config.h b/openair2/UTIL/OTG/traffic_config.h
index 6f7df69e55b78edfdf2f80a5bba3c70da33adb5c..2f47682706bed8aa258e1c637dcbb12e03218d1b 100644
--- a/openair2/UTIL/OTG/traffic_config.h
+++ b/openair2/UTIL/OTG/traffic_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TIMER/umts_timer.c b/openair2/UTIL/TIMER/umts_timer.c
index 9978419fb8f99761c59da05277eb659634ea3ab3..9bbb6c2df9198d030ca0d8e24c6a3374e5761862 100644
--- a/openair2/UTIL/TIMER/umts_timer.c
+++ b/openair2/UTIL/TIMER/umts_timer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TIMER/umts_timer.h b/openair2/UTIL/TIMER/umts_timer.h
index d179a471e5e382ef98250e791b08b4f29ed31a26..077b55cf0c6bf3b5b249e861a7bfaa5046352993 100644
--- a/openair2/UTIL/TIMER/umts_timer.h
+++ b/openair2/UTIL/TIMER/umts_timer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TIMER/umts_timer_proto_extern.h b/openair2/UTIL/TIMER/umts_timer_proto_extern.h
index 807bba8a5510f6b8f119ff94c535b76b3011591f..b43b347e465360e1ded7332c41d1e9372e6e2533 100644
--- a/openair2/UTIL/TIMER/umts_timer_proto_extern.h
+++ b/openair2/UTIL/TIMER/umts_timer_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TIMER/umts_timer_struct.h b/openair2/UTIL/TIMER/umts_timer_struct.h
index 490a80c4e096fd923bbaca4a389c0d2dc1ce8a69..c4886c7f80241eac6e83cad74db6b98939f8f52f 100644
--- a/openair2/UTIL/TIMER/umts_timer_struct.h
+++ b/openair2/UTIL/TIMER/umts_timer_struct.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TRACE/fifo_printf.c b/openair2/UTIL/TRACE/fifo_printf.c
index 4548eedd90c54762150b5cd181b1685c469fca68..2dc4da06371f923efca0d445e36a79558af4f9ee 100644
--- a/openair2/UTIL/TRACE/fifo_printf.c
+++ b/openair2/UTIL/TRACE/fifo_printf.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TRACE/fifo_printf.h b/openair2/UTIL/TRACE/fifo_printf.h
index 92b5ab42cec31c713606ca7f0807a17e5a3ba18e..ce2702b19a9c74fc59d5c031a64b891137781c19 100644
--- a/openair2/UTIL/TRACE/fifo_printf.h
+++ b/openair2/UTIL/TRACE/fifo_printf.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TRACE/fifo_printf_proto_extern.h b/openair2/UTIL/TRACE/fifo_printf_proto_extern.h
index 641af7f2241890a2a9ecafaae4eda48957e7c882..0855a8da93fae86ab950db4df8722a9f3f72ea29 100644
--- a/openair2/UTIL/TRACE/fifo_printf_proto_extern.h
+++ b/openair2/UTIL/TRACE/fifo_printf_proto_extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/UTIL/TRACE/print.h b/openair2/UTIL/TRACE/print.h
index cd177111fb085083daa1d16cedd5a38971f99c7c..5982d249fa8497c43c9a2af82fdebf3a50ea63cd 100644
--- a/openair2/UTIL/TRACE/print.h
+++ b/openair2/UTIL/TRACE/print.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py b/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py
index e8ebb03d6d2c7dd87b9655278fd9c98460ec02f1..8c0f7e8a16a52ca7588a40cefb73428156a14f7d 100644
--- a/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py
+++ b/openair2/X2AP/MESSAGES/ASN1/asn1tostruct.py
@@ -38,7 +38,7 @@ def outputHeaderToFile(f, filename):
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/X2AP/x2ap.c b/openair2/X2AP/x2ap.c
index 699ad5ddbf31b0c92d95aedc110732b4297d3a7e..bde21c0dbe1e57cc0d5abeac07d3f5a9b2e8fc8d 100644
--- a/openair2/X2AP/x2ap.c
+++ b/openair2/X2AP/x2ap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/X2AP/x2ap.h b/openair2/X2AP/x2ap.h
index 6ef98b9909bb133d35357ae7c2537f38191da640..65529c7119c186d2d6ec802473b64e57999ca5ab 100644
--- a/openair2/X2AP/x2ap.h
+++ b/openair2/X2AP/x2ap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c
index 2a59414ed94791a7ae75efcb7e508a70137ba2d5..d92f2c69bb31021f59bae16f4d73412a2bfa771a 100644
--- a/openair2/X2AP/x2ap_common.c
+++ b/openair2/X2AP/x2ap_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h
index d2a2ca71371f2d2f7290dab003952059303593ac..b7c93614768daa5b8f7235f802299fb198807da6 100644
--- a/openair2/X2AP/x2ap_common.h
+++ b/openair2/X2AP/x2ap_common.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/common_types.h b/openair3/COMMON/common_types.h
index 9036ee8c13c087bbaa1ebc7fc106874faaee746b..80cc20df63f62343dddf031a63cb1f46853897e9 100644
--- a/openair3/COMMON/common_types.h
+++ b/openair3/COMMON/common_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/gtpv1_u_messages_def.h b/openair3/COMMON/gtpv1_u_messages_def.h
index eddf95c62b55bc4600bb344cb59e1d2548417e7f..4308853515aac828a59e3fec050507d80a48adde 100644
--- a/openair3/COMMON/gtpv1_u_messages_def.h
+++ b/openair3/COMMON/gtpv1_u_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/gtpv1_u_messages_types.h b/openair3/COMMON/gtpv1_u_messages_types.h
index f5358941e42eef46898c7b2ad165776103369a58..594325647b255092af0274c2d41bdbffc9a7d3b6 100644
--- a/openair3/COMMON/gtpv1_u_messages_types.h
+++ b/openair3/COMMON/gtpv1_u_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/intertask_interface_conf.h b/openair3/COMMON/intertask_interface_conf.h
index eca0c5d501335ef1b682291756172d9011316de3..6bb8a1edd5965ea448e8aacc38a6755c68672bfc 100644
--- a/openair3/COMMON/intertask_interface_conf.h
+++ b/openair3/COMMON/intertask_interface_conf.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/messages_def.h b/openair3/COMMON/messages_def.h
index 9e87b2632254e2a21abc30b1cf8453a7d77ac4c4..1c1cdbaf0f0dc32476c35e3e51f416de52899bdc 100644
--- a/openair3/COMMON/messages_def.h
+++ b/openair3/COMMON/messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/messages_types.h b/openair3/COMMON/messages_types.h
index 8717f2ad4e16e19a06334efecc1185502f465291..47d9d32f2b689a99aea9c0dc8d6de983a4061af1 100644
--- a/openair3/COMMON/messages_types.h
+++ b/openair3/COMMON/messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/nas_messages_def.h b/openair3/COMMON/nas_messages_def.h
index 679b997d6045accc67e1b7544ccf7242a41e4bcb..5214a1517153f81023403ad37fd0c3ca970e96e7 100644
--- a/openair3/COMMON/nas_messages_def.h
+++ b/openair3/COMMON/nas_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/nas_messages_types.h b/openair3/COMMON/nas_messages_types.h
index 7b93e9c617a6c87ba9f2f8c5820c52149392db4d..45de68840e804f63ec73b4767099d5e9a2a37833 100644
--- a/openair3/COMMON/nas_messages_types.h
+++ b/openair3/COMMON/nas_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/s1ap_messages_def.h b/openair3/COMMON/s1ap_messages_def.h
index e129ecf9505ee216b82fd70be6c61cbbd19e8068..f0d7ba086fea128509e94209e783629d9420228d 100644
--- a/openair3/COMMON/s1ap_messages_def.h
+++ b/openair3/COMMON/s1ap_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/s1ap_messages_types.h b/openair3/COMMON/s1ap_messages_types.h
index 0558c1711d941f6cc8d87d147d88d8453d84b9cb..e6c3bba504ae2c8f679b34710732561db7c79d52 100644
--- a/openair3/COMMON/s1ap_messages_types.h
+++ b/openair3/COMMON/s1ap_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/sctp_messages_def.h b/openair3/COMMON/sctp_messages_def.h
index 937bf09dd37495d4ecd52e5d6d6e23681048b44c..c2d51c91eb8d85fed748615a0fcfd3382263b6af 100644
--- a/openair3/COMMON/sctp_messages_def.h
+++ b/openair3/COMMON/sctp_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/sctp_messages_types.h b/openair3/COMMON/sctp_messages_types.h
index 459cff5d4083df29f0da3a819c03f214641a6ef6..98a92c66b64b9c82cdd6b50b095dd1e7058152df 100644
--- a/openair3/COMMON/sctp_messages_types.h
+++ b/openair3/COMMON/sctp_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/security_types.h b/openair3/COMMON/security_types.h
index bc64e32dedede43f048e8c5d235a728d9afd90dc..0eedc6201fa0cd01709a3b84abcb9e84796e4006 100644
--- a/openair3/COMMON/security_types.h
+++ b/openair3/COMMON/security_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/tasks_def.h b/openair3/COMMON/tasks_def.h
index 9124e0193c6b404573b6aa20ff9a88d271ccb75c..d1b7b8d75608667beafcaff1bbfdcf5c67ab167e 100644
--- a/openair3/COMMON/tasks_def.h
+++ b/openair3/COMMON/tasks_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/udp_messages_def.h b/openair3/COMMON/udp_messages_def.h
index 41b5e8aa52b551c52f3bfdd8d97e1c82922e4001..35322f2450cd270f417a66de1c170427dad75ea7 100644
--- a/openair3/COMMON/udp_messages_def.h
+++ b/openair3/COMMON/udp_messages_def.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/COMMON/udp_messages_types.h b/openair3/COMMON/udp_messages_types.h
index 1ec878782a23fb292fd6ef524253d49b61e75d8b..7825a924d1cb5e1fc2600aecbbcd97a8d7a46e80 100644
--- a/openair3/COMMON/udp_messages_types.h
+++ b/openair3/COMMON/udp_messages_types.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/DOCS/DOXYGEN/Makefile.am b/openair3/DOCS/DOXYGEN/Makefile.am
index b35915324fb71962acb5ea3e2e2f88a79d11cec4..a291a8817e68d7cab690c0df702b8d8eb57ecde2 100644
--- a/openair3/DOCS/DOXYGEN/Makefile.am
+++ b/openair3/DOCS/DOXYGEN/Makefile.am
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/DOCS/Latex/EPC/Makefile b/openair3/DOCS/Latex/EPC/Makefile
index 517bbe11f6ff13e93f0d73d16879498f8c44d380..0f0e799384356090b6176333f4ae703ece086b86 100644
--- a/openair3/DOCS/Latex/EPC/Makefile
+++ b/openair3/DOCS/Latex/EPC/Makefile
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/DOCS/Makefile.am b/openair3/DOCS/Makefile.am
index 28a422061111f486ea2626a6e4a01e80f8c038de..de8e4c619a5efadd00a17ce00e52b6dac247057d 100644
--- a/openair3/DOCS/Makefile.am
+++ b/openair3/DOCS/Makefile.am
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/GTPV1-U/Makefile.am b/openair3/GTPV1-U/Makefile.am
index 25d5658148c5ff42bc94a6be957717be0372e54c..30ea61d6c17508e90f0fa7d9f49acc4988ef1c6f 100644
--- a/openair3/GTPV1-U/Makefile.am
+++ b/openair3/GTPV1-U/Makefile.am
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/GTPV1-U/Makefile.eNB b/openair3/GTPV1-U/Makefile.eNB
index 6941959e81f3f02e1c6ba6e1c4c35e3edf8994dc..b469dc756d0d453c71fd13ebcfa59fdb5f6d3a81 100644
--- a/openair3/GTPV1-U/Makefile.eNB
+++ b/openair3/GTPV1-U/Makefile.eNB
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/GTPV1-U/gtpv1u.h b/openair3/GTPV1-U/gtpv1u.h
index 9f2f65db9a81123946ea3696ad94e87b935fea5f..9466f024bc0ce1c2131de57ae4a2e2282136d7bd 100644
--- a/openair3/GTPV1-U/gtpv1u.h
+++ b/openair3/GTPV1-U/gtpv1u.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/GTPV1-U/gtpv1u_eNB.c b/openair3/GTPV1-U/gtpv1u_eNB.c
index bafc8d2e86e71d47f156a034ba19104d79e1e38c..aacfa561fd62190031d5ea2d0ca9603ea390f109 100644
--- a/openair3/GTPV1-U/gtpv1u_eNB.c
+++ b/openair3/GTPV1-U/gtpv1u_eNB.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -49,6 +49,7 @@
 #include "COMMON/platform_constants.h"
 #include "UTIL/LOG/vcd_signal_dumper.h"
 #include "common/ran_context.h"
+#include "gtpv1u_eNB_defs.h"
 
 #undef GTP_DUMP_SOCKET
 
diff --git a/openair3/GTPV1-U/gtpv1u_eNB_defs.h b/openair3/GTPV1-U/gtpv1u_eNB_defs.h
index 91f045ace2ea3ef11c523cb53d98061e0f1c67ba..8f8cff2e87f242e11cf368aa91b22f80fa68b737 100644
--- a/openair3/GTPV1-U/gtpv1u_eNB_defs.h
+++ b/openair3/GTPV1-U/gtpv1u_eNB_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -33,6 +33,8 @@
 #ifndef GTPV1U_ENB_DEFS_H_
 #define GTPV1U_ENB_DEFS_H_
 
+#include "NwGtpv1u.h"
+
 #define GTPV1U_UDP_PORT (2152)
 #define GTPV1U_BEARER_OFFSET 3
 
diff --git a/openair3/GTPV1-U/gtpv1u_eNB_task.h b/openair3/GTPV1-U/gtpv1u_eNB_task.h
index 880719a0ad51fb0e7dd297a060e120a4b1c52cc7..6f74c73a2926d0074cfca368845f7a797e1d28b3 100644
--- a/openair3/GTPV1-U/gtpv1u_eNB_task.h
+++ b/openair3/GTPV1-U/gtpv1u_eNB_task.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/GTPV1-U/gtpv1u_sgw_defs.h b/openair3/GTPV1-U/gtpv1u_sgw_defs.h
index 218d0df96fc430be830771eae6849cf8c0bb7987..1d62c18bf62b1c2cdd140f1aac73cf0d7e30dec2 100644
--- a/openair3/GTPV1-U/gtpv1u_sgw_defs.h
+++ b/openair3/GTPV1-U/gtpv1u_sgw_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/GTPV1-U/gtpv1u_task.c b/openair3/GTPV1-U/gtpv1u_task.c
index f9397f21ca1b3e0dce873c1e9112a4344b2ab899..a6dd6fa06151ae08e6373e5d78d9005bbd37db6d 100644
--- a/openair3/GTPV1-U/gtpv1u_task.c
+++ b/openair3/GTPV1-U/gtpv1u_task.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/GTPV1-U/gtpv1u_teid_pool.c b/openair3/GTPV1-U/gtpv1u_teid_pool.c
index 6596a2b9a9c6ab9f4452e36f73102e67083ff7f7..ff0ac6f1839040f582ddbeaff7f91153b2a9a9e7 100644
--- a/openair3/GTPV1-U/gtpv1u_teid_pool.c
+++ b/openair3/GTPV1-U/gtpv1u_teid_pool.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/as_message.c b/openair3/NAS/COMMON/API/NETWORK/as_message.c
index 201ed441f302af3209f9cfb3729e28faa88a4b5f..fd3f15cb4ca840dd44a38359779d662a55cba9ea 100644
--- a/openair3/NAS/COMMON/API/NETWORK/as_message.c
+++ b/openair3/NAS/COMMON/API/NETWORK/as_message.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/l2_message.h b/openair3/NAS/COMMON/API/NETWORK/l2_message.h
index 39a2d18905358ddf5300b531f15a3dda8b1c3bf4..9cf65b7736db6c01c89ac0f8442e84114ab81916 100644
--- a/openair3/NAS/COMMON/API/NETWORK/l2_message.h
+++ b/openair3/NAS/COMMON/API/NETWORK/l2_message.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/nas_message.c b/openair3/NAS/COMMON/API/NETWORK/nas_message.c
index c61ad6532f94f34fb55a5242249220df6b95a12e..4eea2c4d6bd7d2e45f5815098420099d997eb6e1 100644
--- a/openair3/NAS/COMMON/API/NETWORK/nas_message.c
+++ b/openair3/NAS/COMMON/API/NETWORK/nas_message.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/nas_message.h b/openair3/NAS/COMMON/API/NETWORK/nas_message.h
index 8094d31298001373747a38c0836ea183dbe44d86..8fde6eb97df57f3c17615e7912ad082d12ff1e9c 100644
--- a/openair3/NAS/COMMON/API/NETWORK/nas_message.h
+++ b/openair3/NAS/COMMON/API/NETWORK/nas_message.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/network_api.c b/openair3/NAS/COMMON/API/NETWORK/network_api.c
index a9d5c48547b9e1684069ec70954e14f91d527a7a..160eb78e17c553bae71137928558943511c09f8d 100644
--- a/openair3/NAS/COMMON/API/NETWORK/network_api.c
+++ b/openair3/NAS/COMMON/API/NETWORK/network_api.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/API/NETWORK/network_api.h b/openair3/NAS/COMMON/API/NETWORK/network_api.h
index 22bf0f426e623b86f1ea51696cfa5f98d0dd306d..57abb2c4f6e82d22f8ee1860c1455e06892939c0 100644
--- a/openair3/NAS/COMMON/API/NETWORK/network_api.h
+++ b/openair3/NAS/COMMON/API/NETWORK/network_api.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
index 727bacfa2dcbf316ad5a93b8e6beb6dfe4715609..8ac43cf7b13fd1c3e4c09a9c39db6e4649699c3d 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.h b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.h
index ced696afdb8d0ee3c9ca7df4edcc8926f6745d2d..3d944e8bfb05dfba5c4ee686867f864954668c4d 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachComplete.c b/openair3/NAS/COMMON/EMM/MSG/AttachComplete.c
index 80479b58c3e408f833d0855a9ccc6708631a28a5..26d4b6ddd7e8122cc955b641d1c566995f738596 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachComplete.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachComplete.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachComplete.h b/openair3/NAS/COMMON/EMM/MSG/AttachComplete.h
index 309726b925432a5cc666c07cd8bdcb951f7b16a7..e11ad97156ce196af2fe11f3cde159f384139b35 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachComplete.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachComplete.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachReject.c b/openair3/NAS/COMMON/EMM/MSG/AttachReject.c
index a15c6b624ccddd5636a39f35e61723f92e2bb2ec..c0b3208ff9cd9e9bd7031388c2be3ff3423faa60 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachReject.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachReject.h b/openair3/NAS/COMMON/EMM/MSG/AttachReject.h
index d5803baec278247c14a6494db4f4be5a656b3350..5ab3b573086d81e0c58dbd8da52eec83db83e7aa 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachReject.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachRequest.c b/openair3/NAS/COMMON/EMM/MSG/AttachRequest.c
index 7c50d2fcdd6bafa62fa95b9a7689d828fcd085f7..7448a334191e135d3dad90dd62eab23a50e88a48 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachRequest.h b/openair3/NAS/COMMON/EMM/MSG/AttachRequest.h
index caa19922ae57d24791eff0fe686036e91c39a575..a7e4c1f17c5e889d14eaeeba68b77ab32ef798d0 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AttachRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AttachRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c b/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c
index 7b01d0f5abdc318855f50406649ea17e5a6a1ecf..89368d75235f55eeb7b4f6ae57b87f21006455ad 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h b/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h
index 384f51471c641e732f57671d23abef7c4350bf18..5670b0a5c1dfb8a23856b6ab9e163a005ce61b7d 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c b/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c
index dd848aef2eb92277803fc1fe857b7030314380aa..5ca9b1a503f774eae1fc072c9a9c4c7d5ccc13ca 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h b/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h
index 5b468dcf2550c7fed4afabb8599621e3c1af2b99..2a2ca7b7d2822428b2b9d325a9e854ff00749e31 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c b/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c
index 3e0bffde2d1afd718288a1bcee40058096549220..0914353478a060535544801f11edaa77c5d81322 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h b/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h
index e7cdc040175c928f24ad937a25391966ec8912fa..306c8bb4048dbd89f8ce00c10e939c0181f27800 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c b/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c
index 4b870c620016645647d11f1a565fb7778117f925..4834348595288d3e82629c40ae3e1e0bd136cf66 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h b/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h
index 710a43f043ed82231931b7cda2ac595813aa13fa..4d49518ba0e0f5cb0708fa03f8f67e4f03af2e9a 100644
--- a/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h
+++ b/openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c
index 0d5a336eef004f52ee7e6fb24717298231d57116..20193ef0b6b5fc331a7142d2ced871b05a8ba01e 100644
--- a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c
+++ b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
index 48e6aaec752ff151053490497e1d710fae099cf7..c173d3b729319e275ac0e9779b7899ebd5a072c0 100644
--- a/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
+++ b/openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DetachAccept.c b/openair3/NAS/COMMON/EMM/MSG/DetachAccept.c
index c31550fdca418d838fb36b912c439105e8b9b805..0ad1066c4caf86a2ba6fd0a00565db78a00aaa72 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DetachAccept.c
+++ b/openair3/NAS/COMMON/EMM/MSG/DetachAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DetachAccept.h b/openair3/NAS/COMMON/EMM/MSG/DetachAccept.h
index 48e8e674e9282f90d45723b69c2f96c066a29596..73c4e8dcb6ba59183aec3a3f95c80b6600fbcf6b 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DetachAccept.h
+++ b/openair3/NAS/COMMON/EMM/MSG/DetachAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DetachRequest.c b/openair3/NAS/COMMON/EMM/MSG/DetachRequest.c
index 6c84e7d4d3011653c2f85ba68b8c52006066cbbe..1697ea17e25e15ecb41d211f45c671d7ac1dcf02 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DetachRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/DetachRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DetachRequest.h b/openair3/NAS/COMMON/EMM/MSG/DetachRequest.h
index 557d5117eb41a3a0563947b572c72994fba33914..93cdcab1ac82d8cefc963acbe0a580db687d61eb 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DetachRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/DetachRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c b/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c
index b020f77af3be8a5f2eedf41420741aaca2331468..5dbce599029cd949a9188ee5f16676bde6f114c5 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c
+++ b/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h b/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h
index a9d926bb056b63d94a416dc0e4c1cb623043fe52..f41ce23b0ec7efc4a5708cb66a6d590f07164dec 100644
--- a/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h
+++ b/openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/EmmInformation.c b/openair3/NAS/COMMON/EMM/MSG/EmmInformation.c
index e9d4400d5f19a3974101336ec3b5c9a2d3c75220..d18e115db9c29562e960c9e117a92039545e8924 100644
--- a/openair3/NAS/COMMON/EMM/MSG/EmmInformation.c
+++ b/openair3/NAS/COMMON/EMM/MSG/EmmInformation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/EmmInformation.h b/openair3/NAS/COMMON/EMM/MSG/EmmInformation.h
index cdbc22f201b8101c5bad620efec8244915a97ab9..79eec4ddce195b4fcef76cb711f94c999f87ab7b 100644
--- a/openair3/NAS/COMMON/EMM/MSG/EmmInformation.h
+++ b/openair3/NAS/COMMON/EMM/MSG/EmmInformation.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/EmmStatus.c b/openair3/NAS/COMMON/EMM/MSG/EmmStatus.c
index a46467e099671a47ec7bab3988ea30b8c1352f99..f283d64bc98800d588fa42a5931890ef5d44cadb 100644
--- a/openair3/NAS/COMMON/EMM/MSG/EmmStatus.c
+++ b/openair3/NAS/COMMON/EMM/MSG/EmmStatus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/EmmStatus.h b/openair3/NAS/COMMON/EMM/MSG/EmmStatus.h
index 0fcd912218164ef4802a2cd2c9c88cb6418630b7..dc860acec74ee8497efe7713e83897c04e811d6e 100644
--- a/openair3/NAS/COMMON/EMM/MSG/EmmStatus.h
+++ b/openair3/NAS/COMMON/EMM/MSG/EmmStatus.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c b/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c
index 33e05d2b3b5b00adc7c7d02caea2697afebaaa45..a7ff89245b28975fcdb4fb29d581a500b3a99573 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h b/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h
index 291d757996168a68c8f594bb8ac37d79c19820b6..defe200c0f39d7133aa5b0f7e076ac26c125e98e 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c
index 624829b8aa2a5cccc830fd42de0fceb8b18c53ff..fac3ddbca997d9b7306834f79aa7875203fbece5 100644
--- a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c
+++ b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h
index 3ab7bd9ceaa6a72840bbcacb2cbd5937c6554a2c..11338ddc21d1668d963206a4b1941812f454fa45 100644
--- a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h
+++ b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c
index 6c7db3a4371891b18929f2f59b4344ae55bc4191..16083176ae033fab585946568bd45898159b5613 100644
--- a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c
+++ b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h
index 7c8393e2f58109433fbebbe652270883f2e80ef4..f0c41a3ac981037bae1b1608be580c9a9ae6b672 100644
--- a/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h
+++ b/openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c b/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c
index 1397dcaee7cd44f16d1c79048a14ee56fdee73ab..17e1d26722ef11ffc9bc448950dd4781ec1107e6 100644
--- a/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h b/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h
index 81c01b24c951df8c280359af5489db3f3d5923d9..ddd339e88db63964b124a6c481f8f4790ca43441 100644
--- a/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c b/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c
index 25b5933927140d9dc9b690a550d7d7daf5a60e9e..1743a29d208f65831fc7de3a31f782a006882694 100644
--- a/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c
+++ b/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h b/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h
index aeee34fe725459cd315ff2bd1d6599ffd0ddae21..61842cc6c255399ba274330b3aea0282a3652263 100644
--- a/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h
+++ b/openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h b/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h
index b1b7fd81de6d2ee346544b080a87b849bcdb6e87..9016024af6d7b42100a9db0a1a59840ba5733ff2 100644
--- a/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h
+++ b/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h b/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h
index a014e4d3bcc5b1418fbf7b5048cebe92f784ab01..938bb9e37188caaefcc73db2c39c32dd18312f31 100644
--- a/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h
+++ b/openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c b/openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c
index a1a34f94954ccfed88d36be7b5007e2eff9f972d..25181d8e798c000500067a34fb7cca0dc0512cfb 100644
--- a/openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c
+++ b/openair3/NAS/COMMON/EMM/MSG/SecurityModeCommand.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c b/openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c
index 3258134febff5c6ae8cefb871fa0eb4b9cc88218..8dd8b2e1b7df36cfd93588ab1d598340ed703a3d 100644
--- a/openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c
+++ b/openair3/NAS/COMMON/EMM/MSG/SecurityModeComplete.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c b/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c
index 76fad512d0fbfa2cd11cd7914bd22997a23ed373..5e49f4414d7adc965eaf5fdb1ab47817778abfa5 100644
--- a/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c
+++ b/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h b/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h
index cef69ef61aed7cbf064d82dbdf4ddfbb0113194e..5f9cf5bcd278eeea67d88192774caec19eb0fb33 100644
--- a/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h
+++ b/openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ServiceReject.c b/openair3/NAS/COMMON/EMM/MSG/ServiceReject.c
index 0008a237200f9a566ed3f9635ac113d4c2128eac..0f703871ca77b2ef9722125e0b5fed0e8603cf1b 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ServiceReject.c
+++ b/openair3/NAS/COMMON/EMM/MSG/ServiceReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ServiceReject.h b/openair3/NAS/COMMON/EMM/MSG/ServiceReject.h
index 42929ac868e0c833ca4c18e4c597426d7414476d..67a0317afd57a7e8b5f3716570232eba25dec3a5 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ServiceReject.h
+++ b/openair3/NAS/COMMON/EMM/MSG/ServiceReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c b/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c
index 944cffdb4c12e665ce3619667951be86ef86b691..9a2faf2178e72d31d4a90ec57cb99982141c8787 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h b/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h
index 5ad605fa83d986b79daccecff04a4c7963f430f5..548eb933e3968e39e0b6ddbdfe78a066b13be0ea 100644
--- a/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c
index 36894d100698060cb09beeed99a94ed9ab2260bd..159175da1b196ab7440a952503080fa8467ffc26 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h
index 5a3dae34b3cd0270d58a7331e4bcdbf66cb91445..8ce780aab19e3e402f4f37ef71b61989e8369ab5 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c
index 5f504a503de794855bbfbdfcda6658070f0a19c0..bf8b80d5f2ae156788f28e69338b1686a3ccdb93 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h
index c26f0508b6c1f04b0645c6521580596f36bac32e..1b5de76e2fd866d4a824b0b4445d1b1e810a1742 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c
index 354262452b70d148617c4d75f182e9d36c0bf525..c0fbdf711a30715e7f072c8dbb5ab92a37bfca02 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h
index 9b23b6fc1c602070251fc84193ab6cf17354a765..9066eb586a279942e9df95f0dd1e498fb72a64ce 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c
index bc5bb351d83c46b8168a632f9cd1b858dd8316b2..49632057c09409322d530a5a771ea6da0e5e82bb 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h
index 2a5a36fc0aad69b1507492fa265f36eb3a55ec26..6fe27261304dd61490d4c17a4e7c10c915fb7c02 100644
--- a/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h
+++ b/openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c b/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c
index fe6244b9424688bfa30d017da1ddccafd34b8a41..0aaadc9316713400f7b169b120e776cd0f5a73a7 100644
--- a/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c
+++ b/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h b/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h
index 3c2522f623cc00c2710b8adf6ba33a188f6af968..f2e7cd392af0f084e632e39f70997724fd68fe61 100644
--- a/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h
+++ b/openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/emm_cause.h b/openair3/NAS/COMMON/EMM/MSG/emm_cause.h
index 2f65e2b11b97f795f7598f7cb55b00dff39ae102..4b7796c95c4983d41de9eafd643fcb6176cd6d2c 100644
--- a/openair3/NAS/COMMON/EMM/MSG/emm_cause.h
+++ b/openair3/NAS/COMMON/EMM/MSG/emm_cause.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/emm_msg.c b/openair3/NAS/COMMON/EMM/MSG/emm_msg.c
index c357e8784f803827e9e83041033472d1b571bb86..b9c9b93a9caf3625076d3351b7d0e35ba2261980 100644
--- a/openair3/NAS/COMMON/EMM/MSG/emm_msg.c
+++ b/openair3/NAS/COMMON/EMM/MSG/emm_msg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/emm_msg.h b/openair3/NAS/COMMON/EMM/MSG/emm_msg.h
index 29f9975716dde44b14044bf32d968750c87c32d1..56985227ad8ab6af6490f8495de7866892e5dda1 100644
--- a/openair3/NAS/COMMON/EMM/MSG/emm_msg.h
+++ b/openair3/NAS/COMMON/EMM/MSG/emm_msg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h b/openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h
index a5f114184bf22348c99d59580408ce7eafa2aaed..b95e140595588c04d39b3c4ca1a2bc263d8f2941 100644
--- a/openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h
+++ b/openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c
index af2da7d1ba18406ed7df7fa452890de7f8602029..e77e1d774909fc74a18dd7bf0a33f9e367d3f7f3 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h
index b248f2b9bd308b7fef80ecb8002ac393f241ced8..2bb3e7e4230cb2acadebe325d028fad7d77d6e52 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c
index 63552adcae99447e22f3e91e8a94198dc9a40f15..1a1d6ffbdb6093dd94d4afd560e34fd7ac65bedb 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h
index 7ff7b761cc09447967afa35240a8eb75ffd63238..4b69cbc454d472bf2ba6db2426069e85671a7875 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c
index 0797001e8a5ef72fe1dabaa613623891cfe196e4..f4f0a3343cd011472c1de56d690ffd7e10752b91 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h
index 574a72a7c9a7147e492db646cb1ddc44d0a51c0a..3bf2794e1dad2c96d8a68a717c7209f124c23481 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c
index 8b58c38b5f9292c68d10daa070366b2eb218d9c6..d94c6f4652bd4b6807f3afef06b3c7d023d81454 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h
index 574b258feb36ac92712a41ee18b0b687ed4ffbf2..045ef495af8671216b0570ed060effc81f747853 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c
index e9a902ca947e91170cd64fa2d136f0ddf29adfd7..f5828ac87a28699803072c805510be07721c51c2 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h
index 9c74a869ed6d6172112baf3a26d7ece05e8677c0..abfda25f632247afc70c3cf823f7fadf54ccb056 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c
index 02f293e9f0e7ccd440b69372fe8cd86743729827..068ee5db6ac4ca47186df04c8b685e46703d0697 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h
index 56e305fb7480e0826591142c0fff143d90e22439..6931038bd86007baa3c6bf27cb277d9289d9419c 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c
index a81a6325cebb7e9916930066c5868d03639ff69d..c7b42cc9b40e3e6d3ad0162db2c86f783ef5a79c 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h
index d7cec7bfbe0fe27cc5e4368eb99a50416751217d..321b0e4ff59f817e78210a77f601236b3836ed37 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c
index 3696012d7f38256bd86b709257f2d9377d749509..3fddc04983dd386b4b62221a3962fb429d7ed517 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h
index 5428b03d513fbdc337c78be81543651a35b53be1..17283167f64adeb419188aca8567566c1158ca0d 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c
index b0b143857bd6663d122b058dd7d34373e0311f8f..8b1ace65b852295bc01486c44df4bbc64540e6d7 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h
index 26daab2c119d2328230f24012a3f9bf55525bb49..f437c709485a4262b7ed7bfac3e50ec77823dea9 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c
index 2357006ef5fb3093313d6851929a962235d6120d..ff0a5294d9bf03b81abecac00e707ee8f6d826a5 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h
index fda843206fd8a92285628e6599dddac2c3bd01bf..90a3ec59288dde15edbdb2cfe0f271acc1a171ae 100644
--- a/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c
index 6f958d14987e88283f2f62db88a5f1f81a366872..07ea8f7f688845a89edbb8c285900d02bf7a77b5 100644
--- a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c
+++ b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h
index c2aac073ebe104502b36410c50b1e2c905010f73..446a59a0853fa9852ece6c5786f3496230bf0be2 100644
--- a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h
+++ b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c
index 4854d2bd9896e006e340477d92ff5ef6cfd98c13..7a4647c57bbde54f3df8410df87678850810e3a8 100644
--- a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h
index 4f86c50a6c502c334e0841f36eaa8976d6d68c80..72b39113f952afa884a68475644fbbc26b165243 100644
--- a/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c b/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c
index 862046dc0e66bde00ac028b9b5a6ad9464f4e3fc..622135c312fc1a4b204783ef90487ece749752b9 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h b/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h
index 20c668449b6d6d60026e22285e9f0d13d62d0d93..8d2b6511fdbf912cdbd84465fc16efe8e0cc883f 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c b/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c
index 287e3efcb204451fc4d2377bbe8feeadbfcfbc82..e562d2a8143ce048326b3d4e9d1f73844dc07184 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h b/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h
index fbb49542901c384d1e5d1641efaf47458fbf15d4..58751b54d384b62b846e769beb8a1743ed1b9945 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmStatus.c b/openair3/NAS/COMMON/ESM/MSG/EsmStatus.c
index 0538722291f3fc4fd674f6d672f4d345e298d245..8c8bd62bd04048a91fea0ac6c9d0906274d0f8c3 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmStatus.c
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmStatus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/EsmStatus.h b/openair3/NAS/COMMON/ESM/MSG/EsmStatus.h
index 125a50305f56a7c4009c0bf509df7d56c6050ae9..4f6e213ec86bdeaccfd16ddbcb9e11d090f710ed 100644
--- a/openair3/NAS/COMMON/ESM/MSG/EsmStatus.h
+++ b/openair3/NAS/COMMON/ESM/MSG/EsmStatus.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c
index 2fe1444d51190d95047594c819ddb4562a78206a..23a6ce5230e5ef0a944ded801a191fdf4902a30c 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h
index 8891de5954cff828efb8b9bfac773c89afb9e251..218c3cf8743be7565f6df7c32e4bb2043a31355b 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c
index 6c76f6c52d050dfc7c409393ad2cd692c962f894..71e05c06e6c36b1d97f1fabade10df1c2b79b571 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h
index 959fd2185d8a956eb4e3683f148c47018e069bac..b2d7cc56b7ca121034af89042b3783a9ae723fa1 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c
index b9cbdefbb2ca2d490d89a598396ada7b32a3481d..02b978b82276aeea26331c1778204813eca59bfb 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h
index 456d70d90f2ccd08cbe198cb5312a8cf6c58fcb5..2eb1ae8945005b73e164661ca1e99f1fced5513a 100644
--- a/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c
index 8658a850388466ecda707305da8fea813cf5fcfd..f7b1256f9d97f56bd0c07eb123757e586b9e5cd9 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h
index b595e14f217c786aedcac8f21c28edf278df87b8..fb2fe9fa19aa28526ded0bdd6b3ea36d55466ee6 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c
index f5b84430640b736f56c2da6d5125e8f851851fde..957d813cf1f3dbf2eab8fc64d3295d9aa72633b6 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h
index ca28ea78b502dfeda08eec8fc543face7a9c8854..3cd791a5f8d143b0cd8be635a4eea4ccfad2b171 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c
index 668c34d87285b4877204f31865e3a91e48177bc9..9081ee885e767245f0945230e7f8b4399004adb5 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h
index c183e8ebe80769334c2ef3a8bcbd5eda8bf2b991..0c064617eeca6a88b749cbd6ecc9c4ca8342e5aa 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c
index ee53ed7baadd8022555ab907384821e6c8bb1166..506cb2959eb0c7c3d63f1675e2ffa8e25dc637b2 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h
index c8913e1db0d620db858cabae91811997b639232d..94c2c2c3bfba37ef1a2de0a14e26a41a38dbc9b1 100644
--- a/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h
+++ b/openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/esm_cause.h b/openair3/NAS/COMMON/ESM/MSG/esm_cause.h
index 04ff141d2c8d9e7564b96f669e9d658bc19f0d29..124663e05b40ca7fae58c45196c69f2529160eec 100644
--- a/openair3/NAS/COMMON/ESM/MSG/esm_cause.h
+++ b/openair3/NAS/COMMON/ESM/MSG/esm_cause.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/esm_msg.c b/openair3/NAS/COMMON/ESM/MSG/esm_msg.c
index e5bf6035917050b7e9abbb70dd16bf20e8533e45..f4d3dd94ddca5ac0a1a44b5eeb903d159814d1ee 100644
--- a/openair3/NAS/COMMON/ESM/MSG/esm_msg.c
+++ b/openair3/NAS/COMMON/ESM/MSG/esm_msg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/esm_msg.h b/openair3/NAS/COMMON/ESM/MSG/esm_msg.h
index 410460ca1c8bc327076c5e24632a4f0d434c92a2..ef8c05dd95a110d8fa7fd131d70ee0903f4c8bc6 100644
--- a/openair3/NAS/COMMON/ESM/MSG/esm_msg.h
+++ b/openair3/NAS/COMMON/ESM/MSG/esm_msg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h b/openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h
index 2dddfbfadd76919797e6e31741e401c6f841105f..48e6a18a90dc3c2cab814693cca11a907fbbcd58 100644
--- a/openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h
+++ b/openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AccessPointName.c b/openair3/NAS/COMMON/IES/AccessPointName.c
index 43446270c9d87d31d1844e3cfe572d251ba90491..c63bb91222d0969c3a784c4e1eca2c19a5ed6864 100644
--- a/openair3/NAS/COMMON/IES/AccessPointName.c
+++ b/openair3/NAS/COMMON/IES/AccessPointName.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AccessPointName.h b/openair3/NAS/COMMON/IES/AccessPointName.h
index f0d20d199bec1a98641c22d2c4507b7a69aaab36..6c10a942b5b2fd361bc4aa67d1d4f0314be02a34 100644
--- a/openair3/NAS/COMMON/IES/AccessPointName.h
+++ b/openair3/NAS/COMMON/IES/AccessPointName.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AdditionalUpdateResult.c b/openair3/NAS/COMMON/IES/AdditionalUpdateResult.c
index f5208d3ff6f3de4c313eb60cfc9b914c685c5a05..1869155aba4088fab947d36c982e1d00b23bc95b 100644
--- a/openair3/NAS/COMMON/IES/AdditionalUpdateResult.c
+++ b/openair3/NAS/COMMON/IES/AdditionalUpdateResult.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AdditionalUpdateResult.h b/openair3/NAS/COMMON/IES/AdditionalUpdateResult.h
index 448e7c3fe2b3dcac6b49be00ebd7d0327d4f2e26..4f6cf5a4a0461f40279d3e3e72d4b60b6420ece4 100644
--- a/openair3/NAS/COMMON/IES/AdditionalUpdateResult.h
+++ b/openair3/NAS/COMMON/IES/AdditionalUpdateResult.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AdditionalUpdateType.c b/openair3/NAS/COMMON/IES/AdditionalUpdateType.c
index 48e7fb56762a3a885ec6efaab995e9872e000889..5bed4fdbb89a3fd56ed4850975826dbb11ab84f0 100644
--- a/openair3/NAS/COMMON/IES/AdditionalUpdateType.c
+++ b/openair3/NAS/COMMON/IES/AdditionalUpdateType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AdditionalUpdateType.h b/openair3/NAS/COMMON/IES/AdditionalUpdateType.h
index b5729f0c9d1696d0224dd7de20a7f96d2f1590a0..57a2f0e07517a69bdf6fcc549c12f1a49d70000f 100644
--- a/openair3/NAS/COMMON/IES/AdditionalUpdateType.h
+++ b/openair3/NAS/COMMON/IES/AdditionalUpdateType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c b/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c
index cedc75b82cb60c220df7a7b9daf523bcc254d479..4d01fc5b46a455de8356c123d1129e1ccc5a28e0 100644
--- a/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c
+++ b/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h b/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h
index 24823b4006d444873183419b253559b9372e997e..82d3da4094ef005497a7996d6352cbcdd2811e25 100644
--- a/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h
+++ b/openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c b/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c
index e0f016ba6adb6f98a7f1709b9803d0de1dd44b51..4989ae27fee3e3dff36376f505f0f4b096745991 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c
+++ b/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h b/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h
index 24624d3c8c87beb31abcd3f70f37a9a4265aab81..81b943afe4a3cc0b2072704a4b48e535d9e0e26c 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h
+++ b/openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c b/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c
index 1cb31c940678a3c3b32fb35bf67656338765e19f..7de70359f7aa42a019e88cf6b0a086211452115a 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c
+++ b/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h b/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h
index 2e5e51461b11316a2d1731fafc79874c26a178a9..63866642ebd97c4aef56908e7ddc20b984ab4a10 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h
+++ b/openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationParameterRand.c b/openair3/NAS/COMMON/IES/AuthenticationParameterRand.c
index c355eb54697374364102ced855873b693aa5c9d2..a63a03bec19df032eac46b8279b7ad5e43bc3ea6 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationParameterRand.c
+++ b/openair3/NAS/COMMON/IES/AuthenticationParameterRand.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationParameterRand.h b/openair3/NAS/COMMON/IES/AuthenticationParameterRand.h
index 45aea0affc87102a19491896529cfd00672bcb3d..bdea4e9eed953b4ffae2c1fc8ebbbd4e4c1f431f 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationParameterRand.h
+++ b/openair3/NAS/COMMON/IES/AuthenticationParameterRand.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c b/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c
index 46cda8adbc18050583e748b7703ca6d910e1ff3e..3ac3e60a3db61663db0c383a1ca56e7339da9b2f 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c
+++ b/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h b/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h
index 0ed254119b14fce55466aac0c4aeea6ea957d79f..4e3dd33d5bfebcf8eff6e2b129f6f83dedd3802a 100644
--- a/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h
+++ b/openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c b/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c
index dd59717b06e38eea533c1cf72757c39d0e144e48..e10fe42a77a98d2899874b478664bbd73e5f4fe8 100644
--- a/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c
+++ b/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h b/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h
index cbcde08fb54e3afee9bf141abffcb0bad5274ebb..18955204c5989d710fcc9ca427157fa16e7513d6 100644
--- a/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h
+++ b/openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/Cli.c b/openair3/NAS/COMMON/IES/Cli.c
index 92ed87c020314b12822d4d24aac12062577f3242..e8878a26427fc3a1b9cb55dfe8eb98d15eef7972 100644
--- a/openair3/NAS/COMMON/IES/Cli.c
+++ b/openair3/NAS/COMMON/IES/Cli.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/Cli.h b/openair3/NAS/COMMON/IES/Cli.h
index f1c8809c3c6a81e3bcf95c41764a09198a03deb8..47b9c35838f54afa6f73f49b853f6a4eb24a06b6 100644
--- a/openair3/NAS/COMMON/IES/Cli.h
+++ b/openair3/NAS/COMMON/IES/Cli.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/CsfbResponse.c b/openair3/NAS/COMMON/IES/CsfbResponse.c
index 3cb05e0e8adcf5659fe20181113dbe528ffe8635..b5ab64ce8d9f7aa2c870a2056b051088160a6554 100644
--- a/openair3/NAS/COMMON/IES/CsfbResponse.c
+++ b/openair3/NAS/COMMON/IES/CsfbResponse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/CsfbResponse.h b/openair3/NAS/COMMON/IES/CsfbResponse.h
index 78d984bf5a53c1ac6de8af55ba798ecf3389418f..05aba3bf8fdabd809e110d8fa8eed2149c83e837 100644
--- a/openair3/NAS/COMMON/IES/CsfbResponse.h
+++ b/openair3/NAS/COMMON/IES/CsfbResponse.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DaylightSavingTime.c b/openair3/NAS/COMMON/IES/DaylightSavingTime.c
index 70fc1d199d34f6199386e1ca743389fdebc80c8c..b5c242414d5c352aea3a0ceb3600b411ab09b369 100644
--- a/openair3/NAS/COMMON/IES/DaylightSavingTime.c
+++ b/openair3/NAS/COMMON/IES/DaylightSavingTime.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DaylightSavingTime.h b/openair3/NAS/COMMON/IES/DaylightSavingTime.h
index 3830fdce3a26e3fb3e72e1aa9b9f10e15f4ae8ad..993065c958b95ad95f626623eb57ad008030661f 100644
--- a/openair3/NAS/COMMON/IES/DaylightSavingTime.h
+++ b/openair3/NAS/COMMON/IES/DaylightSavingTime.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DetachType.c b/openair3/NAS/COMMON/IES/DetachType.c
index 7ff9320008c8e69f0a07e81134bd6ea3af2c6a23..8a925eb7b47dd4a1f49c9b46144ed643ceaa0dfe 100644
--- a/openair3/NAS/COMMON/IES/DetachType.c
+++ b/openair3/NAS/COMMON/IES/DetachType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DetachType.h b/openair3/NAS/COMMON/IES/DetachType.h
index e84a57d19d436e3ad13beb1d921b687c52d539c5..c1b1b2a37f4decb4e305306b5a748f86900ca48e 100644
--- a/openair3/NAS/COMMON/IES/DetachType.h
+++ b/openair3/NAS/COMMON/IES/DetachType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DrxParameter.c b/openair3/NAS/COMMON/IES/DrxParameter.c
index 9b607f0e79019236158da3ddedad7aba3dd194b1..3734f8697672e7cea10c816fdac16d3ca64bdea5 100644
--- a/openair3/NAS/COMMON/IES/DrxParameter.c
+++ b/openair3/NAS/COMMON/IES/DrxParameter.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/DrxParameter.h b/openair3/NAS/COMMON/IES/DrxParameter.h
index e6d4aa284d4f20d3d6a45939480baba5bf8050ab..43af09f018d80edc501177382f9dba8624d3c79f 100644
--- a/openair3/NAS/COMMON/IES/DrxParameter.h
+++ b/openair3/NAS/COMMON/IES/DrxParameter.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EmergencyNumberList.c b/openair3/NAS/COMMON/IES/EmergencyNumberList.c
index 9330fdc312ef0107e29298554021bd03d1ae19db..ccf030b58398c0706a4d08524e945c72f50ce68f 100644
--- a/openair3/NAS/COMMON/IES/EmergencyNumberList.c
+++ b/openair3/NAS/COMMON/IES/EmergencyNumberList.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EmergencyNumberList.h b/openair3/NAS/COMMON/IES/EmergencyNumberList.h
index ab47c1ff06766208d0ff18153a05dc7fa6efb599..d8147eccde647b5f8e757c2852b7cd28a8145580 100644
--- a/openair3/NAS/COMMON/IES/EmergencyNumberList.h
+++ b/openair3/NAS/COMMON/IES/EmergencyNumberList.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EmmCause.c b/openair3/NAS/COMMON/IES/EmmCause.c
index 21e52fe2cf0667f46f59ea52042d8a6050619087..965f1e0f135d9b268de8785a98a4c62af8a7b361 100644
--- a/openair3/NAS/COMMON/IES/EmmCause.c
+++ b/openair3/NAS/COMMON/IES/EmmCause.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EmmCause.h b/openair3/NAS/COMMON/IES/EmmCause.h
index 584c23d930762b86e1f6e0e60295127e79acc857..11ac2489b98ffa434695272acc0fe0354eb9fd76 100644
--- a/openair3/NAS/COMMON/IES/EmmCause.h
+++ b/openair3/NAS/COMMON/IES/EmmCause.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsAttachResult.c b/openair3/NAS/COMMON/IES/EpsAttachResult.c
index b4d51663c996f459a77f56dd4f8d10e2e6eec356..b48b043ad3990645220c91b97bec29a14244fc3b 100644
--- a/openair3/NAS/COMMON/IES/EpsAttachResult.c
+++ b/openair3/NAS/COMMON/IES/EpsAttachResult.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsAttachResult.h b/openair3/NAS/COMMON/IES/EpsAttachResult.h
index 78e04ccf65ef64c645dd95b21ee7f675ea97cfc3..500ce053992aec47ab5d458c850509261082d02c 100644
--- a/openair3/NAS/COMMON/IES/EpsAttachResult.h
+++ b/openair3/NAS/COMMON/IES/EpsAttachResult.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsAttachType.c b/openair3/NAS/COMMON/IES/EpsAttachType.c
index 8c9635ea6b17be248afaec73e4105dd7aa079f15..aa07d0ba89548cef3b2ddd50a2884e36c03cfbfb 100644
--- a/openair3/NAS/COMMON/IES/EpsAttachType.c
+++ b/openair3/NAS/COMMON/IES/EpsAttachType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsAttachType.h b/openair3/NAS/COMMON/IES/EpsAttachType.h
index c6c9ffc23679865b59e79010afbc661460debd87..7f57077a4d83661fd4dc66f1475aacc9e8c80d11 100644
--- a/openair3/NAS/COMMON/IES/EpsAttachType.h
+++ b/openair3/NAS/COMMON/IES/EpsAttachType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsBearerContextStatus.c b/openair3/NAS/COMMON/IES/EpsBearerContextStatus.c
index ff21a2dc4b590cedf619948e3fee9e99fdb0e901..9984375dff9980f973d341da5fca6e6abe289007 100644
--- a/openair3/NAS/COMMON/IES/EpsBearerContextStatus.c
+++ b/openair3/NAS/COMMON/IES/EpsBearerContextStatus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsBearerContextStatus.h b/openair3/NAS/COMMON/IES/EpsBearerContextStatus.h
index 8c0b475559e1f09f52e18d1f95a4a4a51afe35c1..fd29285cce956a784ce74ae98818c36b1ebd60b2 100644
--- a/openair3/NAS/COMMON/IES/EpsBearerContextStatus.h
+++ b/openair3/NAS/COMMON/IES/EpsBearerContextStatus.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsBearerIdentity.c b/openair3/NAS/COMMON/IES/EpsBearerIdentity.c
index 84d83ea09b97c7375ae0f15ec681526b01e6d843..3ad83c1eaf9ce3f5865f643652425ba99c2307d9 100644
--- a/openair3/NAS/COMMON/IES/EpsBearerIdentity.c
+++ b/openair3/NAS/COMMON/IES/EpsBearerIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsBearerIdentity.h b/openair3/NAS/COMMON/IES/EpsBearerIdentity.h
index 24f0c106083297ab1ce46006b87398c5defb1402..d8f89751e0c0a8b5f47960eb6cc8dfc7b8d77f1e 100644
--- a/openair3/NAS/COMMON/IES/EpsBearerIdentity.h
+++ b/openair3/NAS/COMMON/IES/EpsBearerIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsMobileIdentity.c b/openair3/NAS/COMMON/IES/EpsMobileIdentity.c
index 3d40801fec76a0786af4ff5ad13dbb90aeaf9abe..4437412b86136c3d20451f27f5857c7365a32eac 100644
--- a/openair3/NAS/COMMON/IES/EpsMobileIdentity.c
+++ b/openair3/NAS/COMMON/IES/EpsMobileIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsMobileIdentity.h b/openair3/NAS/COMMON/IES/EpsMobileIdentity.h
index 7a1ff393c5531ec2c9ec99c34c4dd748d69b78b6..d9b13f250cb68118386edc188935a1ecbd256778 100644
--- a/openair3/NAS/COMMON/IES/EpsMobileIdentity.h
+++ b/openair3/NAS/COMMON/IES/EpsMobileIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c b/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c
index 5f018143b5ee5a834ef0a919d73bf6fedc0e0d05..3a842406f0d66d36d4bde92340a358eba49c5484 100644
--- a/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c
+++ b/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h b/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h
index 59e84a323b2366d664de3d443add72ddaf234c24..f367af6ac87c08ad8a4dbfcd3664d2d2113b1255 100644
--- a/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h
+++ b/openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsQualityOfService.c b/openair3/NAS/COMMON/IES/EpsQualityOfService.c
index b24e43e99c75d24f05571fe756d1d03c191923eb..ac45a9c0f55f6fbed172b3b7975abcfc26200047 100644
--- a/openair3/NAS/COMMON/IES/EpsQualityOfService.c
+++ b/openair3/NAS/COMMON/IES/EpsQualityOfService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsQualityOfService.h b/openair3/NAS/COMMON/IES/EpsQualityOfService.h
index f4c5c5986e9ced4013af26c9aeb20fa6765b85b0..ab8f752838f44f98ded5c5e8aff8dd73aebe033b 100644
--- a/openair3/NAS/COMMON/IES/EpsQualityOfService.h
+++ b/openair3/NAS/COMMON/IES/EpsQualityOfService.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsUpdateResult.c b/openair3/NAS/COMMON/IES/EpsUpdateResult.c
index feecb5e37d166ba0bc5b30b4672922b9a269cf49..a91da63985bf209355b2463166685771e91adabd 100644
--- a/openair3/NAS/COMMON/IES/EpsUpdateResult.c
+++ b/openair3/NAS/COMMON/IES/EpsUpdateResult.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsUpdateResult.h b/openair3/NAS/COMMON/IES/EpsUpdateResult.h
index 019ac7a069988a0344c998931cba66d9a5023336..9f8b289248d6c66cb75d408aafc01b9b3b74ddca 100644
--- a/openair3/NAS/COMMON/IES/EpsUpdateResult.h
+++ b/openair3/NAS/COMMON/IES/EpsUpdateResult.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsUpdateType.c b/openair3/NAS/COMMON/IES/EpsUpdateType.c
index 7319cb5fe63fac7fe09bd3e68366c57de89bf76c..309031dcee2dce466af8a7a3bdeec0f6e0b444dc 100644
--- a/openair3/NAS/COMMON/IES/EpsUpdateType.c
+++ b/openair3/NAS/COMMON/IES/EpsUpdateType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EpsUpdateType.h b/openair3/NAS/COMMON/IES/EpsUpdateType.h
index 6bad9e064b7f6d48e2ed127a92754341748d2f83..fff1171dbc594ac041d7814dacc80e6d40fe8390 100644
--- a/openair3/NAS/COMMON/IES/EpsUpdateType.h
+++ b/openair3/NAS/COMMON/IES/EpsUpdateType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmCause.c b/openair3/NAS/COMMON/IES/EsmCause.c
index ba75d7b564d5310dcddc92ecf8d59816955a96c5..e703438c17869e01351109122209a71dc38024ba 100644
--- a/openair3/NAS/COMMON/IES/EsmCause.c
+++ b/openair3/NAS/COMMON/IES/EsmCause.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmCause.h b/openair3/NAS/COMMON/IES/EsmCause.h
index b405f6cd6208f0410b7afca60d367311e2391bdf..3590aaffecb397854cca96336a4c5f2af6722ac0 100644
--- a/openair3/NAS/COMMON/IES/EsmCause.h
+++ b/openair3/NAS/COMMON/IES/EsmCause.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c b/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c
index 4ec00315fe96d83c46cf785a03cd37920b07fb28..5b4358499b99a109c03d742da8bc6b7d98fd83c6 100644
--- a/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c
+++ b/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h b/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h
index c8ec26041f2d8dec8dcb288800a2c4f53a2b3a2c..1b932b1a9939b6af5e5ba4a9157aac6029c0f247 100644
--- a/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h
+++ b/openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmMessageContainer.c b/openair3/NAS/COMMON/IES/EsmMessageContainer.c
index a223f36820ee1cd31689fcb7c358801a8afcecc2..2268b657f065f5d725920a7b3ae19f403ae67513 100644
--- a/openair3/NAS/COMMON/IES/EsmMessageContainer.c
+++ b/openair3/NAS/COMMON/IES/EsmMessageContainer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/EsmMessageContainer.h b/openair3/NAS/COMMON/IES/EsmMessageContainer.h
index c57f60a92bcc42558721d6c11f788541f189bc9e..c6fb827e132f4d0ee004052f7a490bfe2992b742 100644
--- a/openair3/NAS/COMMON/IES/EsmMessageContainer.h
+++ b/openair3/NAS/COMMON/IES/EsmMessageContainer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/GprsTimer.c b/openair3/NAS/COMMON/IES/GprsTimer.c
index e2bc6ca3693fa0fb09817988e2d79cce26c0f7a1..52c1df17ee2d35eaa4ba2cacb65098603eb7a402 100644
--- a/openair3/NAS/COMMON/IES/GprsTimer.c
+++ b/openair3/NAS/COMMON/IES/GprsTimer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/GprsTimer.h b/openair3/NAS/COMMON/IES/GprsTimer.h
index 104af63a16834100185edad26d3954bb828f64c7..c8bb686fa3580c8052f4b6e00995603198624582 100644
--- a/openair3/NAS/COMMON/IES/GprsTimer.h
+++ b/openair3/NAS/COMMON/IES/GprsTimer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/GutiType.c b/openair3/NAS/COMMON/IES/GutiType.c
index e5ecbdabcc448c27f8a4114e392e6e07f35b4162..a9921eedd8850ed4a01f0216a656076942c87f87 100644
--- a/openair3/NAS/COMMON/IES/GutiType.c
+++ b/openair3/NAS/COMMON/IES/GutiType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/GutiType.h b/openair3/NAS/COMMON/IES/GutiType.h
index b4230ead529db92f5220034f9b34057c51671f37..ad434f5ca57e3bdde2a4dd36cfd2cc95b32a9e03 100644
--- a/openair3/NAS/COMMON/IES/GutiType.h
+++ b/openair3/NAS/COMMON/IES/GutiType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/IdentityType2.c b/openair3/NAS/COMMON/IES/IdentityType2.c
index 96d1e5a8a036e709ee00ded0b9eeb6816a1ebae1..9623b5e58630bba9f1362f18d402ed920e40d498 100644
--- a/openair3/NAS/COMMON/IES/IdentityType2.c
+++ b/openair3/NAS/COMMON/IES/IdentityType2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/IdentityType2.h b/openair3/NAS/COMMON/IES/IdentityType2.h
index e7b8c80cc7bac4ed0290629e89f97bcf2f569840..5e3a01b061dd9515edfd111e0e5ddd4adbc57c0e 100644
--- a/openair3/NAS/COMMON/IES/IdentityType2.h
+++ b/openair3/NAS/COMMON/IES/IdentityType2.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ImeisvRequest.c b/openair3/NAS/COMMON/IES/ImeisvRequest.c
index 208d417e8fc9e5b24ba4ec2704ebc300a589e2d1..5c46b56f646b92e87e1d88c7929883f6267a42b6 100644
--- a/openair3/NAS/COMMON/IES/ImeisvRequest.c
+++ b/openair3/NAS/COMMON/IES/ImeisvRequest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ImeisvRequest.h b/openair3/NAS/COMMON/IES/ImeisvRequest.h
index 2819844ea831f6446485adff99d43cfe6449b6e9..e41beeb994232c8f2a8c395c95c941c5b4dbafa7 100644
--- a/openair3/NAS/COMMON/IES/ImeisvRequest.h
+++ b/openair3/NAS/COMMON/IES/ImeisvRequest.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c b/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c
index 640c24fc1d026d015dadbdf721424300eb497e80..4a9ed5c247a4307fb5acb60ce611836eb7d78678 100644
--- a/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c
+++ b/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h b/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h
index 7890e3f8f37bbcdf6c26ee60551349e1d32a2b3e..c739ca61e930a6c4d25bf965f849a0b65e9d7fcd 100644
--- a/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h
+++ b/openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LcsClientIdentity.c b/openair3/NAS/COMMON/IES/LcsClientIdentity.c
index 62a7a82feb9a598229e031c9c08a1d34e5835f47..89014ce46c8b647afbe77b50b6174fbfb921232d 100644
--- a/openair3/NAS/COMMON/IES/LcsClientIdentity.c
+++ b/openair3/NAS/COMMON/IES/LcsClientIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LcsClientIdentity.h b/openair3/NAS/COMMON/IES/LcsClientIdentity.h
index 72089b6b91dbc737c15d3275f0fbaaf04970b376..7a8348c806e4a592b32325491620f772f4cb4505 100644
--- a/openair3/NAS/COMMON/IES/LcsClientIdentity.h
+++ b/openair3/NAS/COMMON/IES/LcsClientIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LcsIndicator.c b/openair3/NAS/COMMON/IES/LcsIndicator.c
index 4d17629bff16caa0946d186369c6a5ee16990ef5..ee9a75d8bb5956589aef372710f214b2fabad825 100644
--- a/openair3/NAS/COMMON/IES/LcsIndicator.c
+++ b/openair3/NAS/COMMON/IES/LcsIndicator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LcsIndicator.h b/openair3/NAS/COMMON/IES/LcsIndicator.h
index b8c018127f1aa8e76ce15d72404ebff2371f56bd..976d42eb1343d3940a9c7c9f094e0173b7496c97 100644
--- a/openair3/NAS/COMMON/IES/LcsIndicator.h
+++ b/openair3/NAS/COMMON/IES/LcsIndicator.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c b/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c
index d2acc5dffe8fbb6c7ed6edbfba8b283b2344486b..88b8ee4f7e1b7e25cf76ac5bb2fd8e533c96183d 100644
--- a/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c
+++ b/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h b/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h
index 4d8cb883e21f1e22db2ce471407545f19c4b856a..58bbf11d3c634647806a00e08a154bb04232adf9 100644
--- a/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h
+++ b/openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c b/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c
index 53b0e91cc39f4380cc9c8a33c52100cd822e1c46..51869784d97a9d945d465a601cbe00a775a032f8 100644
--- a/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c
+++ b/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h b/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h
index 46cd6a4e2458d7f54f34ddc4426bfe9eafb89ebd..35f1df710f485af6f2eb2828804cac0e6e62c77e 100644
--- a/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h
+++ b/openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LocationAreaIdentification.c b/openair3/NAS/COMMON/IES/LocationAreaIdentification.c
index 17c1053559d677e4316815be2505948445e1f9f6..27e31c3733394f4d7b3c5852441c778d9020fe7f 100644
--- a/openair3/NAS/COMMON/IES/LocationAreaIdentification.c
+++ b/openair3/NAS/COMMON/IES/LocationAreaIdentification.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/LocationAreaIdentification.h b/openair3/NAS/COMMON/IES/LocationAreaIdentification.h
index b3027d0d92a57db95ada02f6a239edff06e26e68..c09de9c9875c5c6e7dcd37695869d2a456739bc4 100644
--- a/openair3/NAS/COMMON/IES/LocationAreaIdentification.h
+++ b/openair3/NAS/COMMON/IES/LocationAreaIdentification.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MessageType.c b/openair3/NAS/COMMON/IES/MessageType.c
index 7874187dc3fb50dbc0871b419d5c693764b9ad75..83d134cdf56c770c714be4ed67fa05867d9d58dd 100644
--- a/openair3/NAS/COMMON/IES/MessageType.c
+++ b/openair3/NAS/COMMON/IES/MessageType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MessageType.h b/openair3/NAS/COMMON/IES/MessageType.h
index 2af029093c73e09e26647384723b7b25d120f0f1..d926f09cdc964a7e81ceeb69dea0a7ddec8ba7a4 100644
--- a/openair3/NAS/COMMON/IES/MessageType.h
+++ b/openair3/NAS/COMMON/IES/MessageType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileIdentity.c b/openair3/NAS/COMMON/IES/MobileIdentity.c
index 4651fa0047dffd5b757a1b16d9d50aef3c067403..fbe6d93e47a9e188eb761fa6cbed92076b5b4b64 100644
--- a/openair3/NAS/COMMON/IES/MobileIdentity.c
+++ b/openair3/NAS/COMMON/IES/MobileIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileIdentity.h b/openair3/NAS/COMMON/IES/MobileIdentity.h
index 72abcb9ed47774178e509301717ffde8d5680a2f..37f4d4ac3018504964419786edf6f197ad11f6f0 100644
--- a/openair3/NAS/COMMON/IES/MobileIdentity.h
+++ b/openair3/NAS/COMMON/IES/MobileIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileStationClassmark2.c b/openair3/NAS/COMMON/IES/MobileStationClassmark2.c
index 3707bbd636bb3a350c0041ba17ea7644c0010aca..e3a165bf3a783c6427013c39cf8908b56156e236 100644
--- a/openair3/NAS/COMMON/IES/MobileStationClassmark2.c
+++ b/openair3/NAS/COMMON/IES/MobileStationClassmark2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileStationClassmark2.h b/openair3/NAS/COMMON/IES/MobileStationClassmark2.h
index 55c40474d1dca32050436a17c82ac20c85354d3a..5cf7b9c46ed7b73297d280f6abde05d836c75594 100644
--- a/openair3/NAS/COMMON/IES/MobileStationClassmark2.h
+++ b/openair3/NAS/COMMON/IES/MobileStationClassmark2.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileStationClassmark3.c b/openair3/NAS/COMMON/IES/MobileStationClassmark3.c
index c9d6e37d844939461af957173a824085865adae6..9bd439fdfd48a4d07b1dcc4adee31eddbb12d9e2 100644
--- a/openair3/NAS/COMMON/IES/MobileStationClassmark3.c
+++ b/openair3/NAS/COMMON/IES/MobileStationClassmark3.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MobileStationClassmark3.h b/openair3/NAS/COMMON/IES/MobileStationClassmark3.h
index c3f199b2911a4401a874a6fd338421c3f62245bc..80c4d4e8e2f053bfaa0ecff7d89147f1c6b3bc5e 100644
--- a/openair3/NAS/COMMON/IES/MobileStationClassmark3.h
+++ b/openair3/NAS/COMMON/IES/MobileStationClassmark3.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MsNetworkCapability.c b/openair3/NAS/COMMON/IES/MsNetworkCapability.c
index 770270934fedc00c8b62aa55bdff90fc1f9d7be3..8c2955177ec13f518f2a392fabdff733c7ac51b9 100644
--- a/openair3/NAS/COMMON/IES/MsNetworkCapability.c
+++ b/openair3/NAS/COMMON/IES/MsNetworkCapability.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MsNetworkCapability.h b/openair3/NAS/COMMON/IES/MsNetworkCapability.h
index 8572cc6d47e9f05664f214845c75607156940510..f3799892419ccf8686e2da152d97fb7d7e62922e 100644
--- a/openair3/NAS/COMMON/IES/MsNetworkCapability.h
+++ b/openair3/NAS/COMMON/IES/MsNetworkCapability.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c b/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c
index e96537ab166d8cb36b9410bff9f8b516c1182a12..6de2a05474512ed20e794b7f2e92eba4835d6370 100644
--- a/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c
+++ b/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h b/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h
index 84f20ed65d7ad872bbf1248867f0706cdefe0874..147c166beb5782d39326a50e45ff45749627f170 100644
--- a/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h
+++ b/openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasKeySetIdentifier.c b/openair3/NAS/COMMON/IES/NasKeySetIdentifier.c
index 276953e34380cd8bbafa4722b2997e3d8a808a26..a547675675df956e4be12619dbc49482208a4697 100644
--- a/openair3/NAS/COMMON/IES/NasKeySetIdentifier.c
+++ b/openair3/NAS/COMMON/IES/NasKeySetIdentifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasKeySetIdentifier.h b/openair3/NAS/COMMON/IES/NasKeySetIdentifier.h
index 3206ef1e9baf66b0c89596bdd21be43dd71ea089..09daf13a56333ccffc33dce682160d2dcb09c320 100644
--- a/openair3/NAS/COMMON/IES/NasKeySetIdentifier.h
+++ b/openair3/NAS/COMMON/IES/NasKeySetIdentifier.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasMessageContainer.c b/openair3/NAS/COMMON/IES/NasMessageContainer.c
index 8847023c421f70ee608fb34ee020b1e65060fb4a..cccb8f7543bd96dc4e509fb0ae5c0c124a369417 100644
--- a/openair3/NAS/COMMON/IES/NasMessageContainer.c
+++ b/openair3/NAS/COMMON/IES/NasMessageContainer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasMessageContainer.h b/openair3/NAS/COMMON/IES/NasMessageContainer.h
index 8f53a0a7e56a0f8e5a7814692b7fec38a75bd2a8..4e1ad971be8c73709670ed4128a406067eb72818 100644
--- a/openair3/NAS/COMMON/IES/NasMessageContainer.h
+++ b/openair3/NAS/COMMON/IES/NasMessageContainer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasRequestType.c b/openair3/NAS/COMMON/IES/NasRequestType.c
index 0bbe9ff3a8a411f525da6514afa15a68ac1efed9..cb85a38851e3809a6b4eba4ed9df63fd30efe2e2 100644
--- a/openair3/NAS/COMMON/IES/NasRequestType.c
+++ b/openair3/NAS/COMMON/IES/NasRequestType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasRequestType.h b/openair3/NAS/COMMON/IES/NasRequestType.h
index 3f98a8ffd31dccb6a971d46ce4b14703d59c84a4..7eb98ff42baef14380e85a5e67199972a87eb8d1 100644
--- a/openair3/NAS/COMMON/IES/NasRequestType.h
+++ b/openair3/NAS/COMMON/IES/NasRequestType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c b/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c
index 24e0d21f683f798db26d3f037e893b6cb4d3cf3c..7b57aab6a805aefafd9d290b3a9adc86497961b4 100644
--- a/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c
+++ b/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h b/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h
index 9008c023b15baf1788ae3fef1084863817186d42..69e5b3080ae6286e2932ce500959c9147b71e884 100644
--- a/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h
+++ b/openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NetworkName.c b/openair3/NAS/COMMON/IES/NetworkName.c
index 3516e5b7395035b3f0e9dab38787826093a4f961..d0d92dccbece59a49bdf685d4f18dca7a0dad5e9 100644
--- a/openair3/NAS/COMMON/IES/NetworkName.c
+++ b/openair3/NAS/COMMON/IES/NetworkName.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/NetworkName.h b/openair3/NAS/COMMON/IES/NetworkName.h
index b403edc337cfa1381a53b90f1d2142b77efdce54..7acae1b728fbd31467e5f9e5918154312764f2c7 100644
--- a/openair3/NAS/COMMON/IES/NetworkName.h
+++ b/openair3/NAS/COMMON/IES/NetworkName.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/Nonce.c b/openair3/NAS/COMMON/IES/Nonce.c
index 97b5c400109e2814745293146a5872a31022e417..d584346c56ce85a614adfe339dc6d7d428109fbd 100644
--- a/openair3/NAS/COMMON/IES/Nonce.c
+++ b/openair3/NAS/COMMON/IES/Nonce.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/Nonce.h b/openair3/NAS/COMMON/IES/Nonce.h
index d4df86b98bfcaf982a37bd08efd03e759c06b6e8..5bf3047a2435fe9dd28458752d15137b7c7dd121 100644
--- a/openair3/NAS/COMMON/IES/Nonce.h
+++ b/openair3/NAS/COMMON/IES/Nonce.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PTmsiSignature.c b/openair3/NAS/COMMON/IES/PTmsiSignature.c
index be37f869d7150ef7698584e452436a008206aaf1..2781cb77f2a87ba3c608083d53cd4abba893f223 100644
--- a/openair3/NAS/COMMON/IES/PTmsiSignature.c
+++ b/openair3/NAS/COMMON/IES/PTmsiSignature.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PTmsiSignature.h b/openair3/NAS/COMMON/IES/PTmsiSignature.h
index 70023fa92d69f55bb6c9d876146cb4a28723f55d..75abf9e4875f86d67483aa4252d38a045d5edcbb 100644
--- a/openair3/NAS/COMMON/IES/PTmsiSignature.h
+++ b/openair3/NAS/COMMON/IES/PTmsiSignature.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PacketFlowIdentifier.c b/openair3/NAS/COMMON/IES/PacketFlowIdentifier.c
index f19ba0547b8fd5b2c0cfd19f2bebe5e1eea8e7e2..fef2edd10d3e0bdf5d4ef4c24428da6a839d2530 100644
--- a/openair3/NAS/COMMON/IES/PacketFlowIdentifier.c
+++ b/openair3/NAS/COMMON/IES/PacketFlowIdentifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PacketFlowIdentifier.h b/openair3/NAS/COMMON/IES/PacketFlowIdentifier.h
index ffdb70b321568db9997dec2ced0733559d5b508b..7dff70c49c09283646363e5b96adeb4dcf5a2660 100644
--- a/openair3/NAS/COMMON/IES/PacketFlowIdentifier.h
+++ b/openair3/NAS/COMMON/IES/PacketFlowIdentifier.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PagingIdentity.c b/openair3/NAS/COMMON/IES/PagingIdentity.c
index e970f51d20a1bc9a0f0e1bb9764c247a85f3a302..e485fdc18a9008d965bf17275027f51284368705 100644
--- a/openair3/NAS/COMMON/IES/PagingIdentity.c
+++ b/openair3/NAS/COMMON/IES/PagingIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PagingIdentity.h b/openair3/NAS/COMMON/IES/PagingIdentity.h
index 4f104400d310c58546390556a49d90c20abdc7db..e94a6a803a6caa21e97cc1c3675fc4918f9cc608 100644
--- a/openair3/NAS/COMMON/IES/PagingIdentity.h
+++ b/openair3/NAS/COMMON/IES/PagingIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PdnAddress.c b/openair3/NAS/COMMON/IES/PdnAddress.c
index 797b9472d8ff66599892f200ebdc1055c72271c4..de64d410c5e21816910c2e9f275b331a6c10b1c8 100644
--- a/openair3/NAS/COMMON/IES/PdnAddress.c
+++ b/openair3/NAS/COMMON/IES/PdnAddress.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PdnAddress.h b/openair3/NAS/COMMON/IES/PdnAddress.h
index ee4fcd7e9806fca49530ba983a9623bd779a2582..20b6f1d690912f9a14fe0409ae48f6b1dc67d427 100644
--- a/openair3/NAS/COMMON/IES/PdnAddress.h
+++ b/openair3/NAS/COMMON/IES/PdnAddress.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PdnType.c b/openair3/NAS/COMMON/IES/PdnType.c
index c01baa1dd3f2f63cd54fd9d385899151f486d394..e9bbfb3b87bc6ee9a2cf9f113afc4e45821bffbe 100644
--- a/openair3/NAS/COMMON/IES/PdnType.c
+++ b/openair3/NAS/COMMON/IES/PdnType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PdnType.h b/openair3/NAS/COMMON/IES/PdnType.h
index 30d82f4a6a7b5709baadd60174805b8487a2e3fb..844b35f3c429383cb201db0e8c0ef12a1c03976c 100644
--- a/openair3/NAS/COMMON/IES/PdnType.h
+++ b/openair3/NAS/COMMON/IES/PdnType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PlmnList.c b/openair3/NAS/COMMON/IES/PlmnList.c
index ebaf5465ac85f68479d1e7a5fe4b14d32fb765dc..e6a3cecf4ddb90043623a65a67a9bbc78965e237 100644
--- a/openair3/NAS/COMMON/IES/PlmnList.c
+++ b/openair3/NAS/COMMON/IES/PlmnList.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/PlmnList.h b/openair3/NAS/COMMON/IES/PlmnList.h
index aa95673f674c58d779a0a3121d3b9335aa53ce46..6e6ac850c2cebf5cbeb52ccf3ae9d3b8f56b8558 100644
--- a/openair3/NAS/COMMON/IES/PlmnList.h
+++ b/openair3/NAS/COMMON/IES/PlmnList.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c b/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c
index 09d4cbe3105cafc2018163d90429bed4108d579b..802c13a9070286f931cfbf581167de0ec23e0629 100644
--- a/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c
+++ b/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h b/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h
index 7aea7adae10a428d3d223d266c14ae3b2bacdac9..0f56e764d47e13a008aa28de87975cadd16bda16 100644
--- a/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h
+++ b/openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c b/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c
index 006aa61e8e63f3db46824a7d7fc189e2e533b6e3..f4bd3e5e2c7d07036dbfc7a14567098074fd8ae6 100644
--- a/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c
+++ b/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h b/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h
index 71f989992c34d29a4db6d1bb5d1f3085ee382075..cbdeaaed0e398ff01ef444360146665b4fb1f7f2 100644
--- a/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h
+++ b/openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProtocolDiscriminator.c b/openair3/NAS/COMMON/IES/ProtocolDiscriminator.c
index 6e1d6bd875308dc5c2ea718c4ead815d5f8f879d..41d2ada7ae92583a42f21b1019e9efd6f58d9b21 100644
--- a/openair3/NAS/COMMON/IES/ProtocolDiscriminator.c
+++ b/openair3/NAS/COMMON/IES/ProtocolDiscriminator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ProtocolDiscriminator.h b/openair3/NAS/COMMON/IES/ProtocolDiscriminator.h
index 32cf11a28a3fdd246a63c9ef2ce6347325fadbe6..465baf21f4bef0442da7af7bc3f4bd66413caff0 100644
--- a/openair3/NAS/COMMON/IES/ProtocolDiscriminator.h
+++ b/openair3/NAS/COMMON/IES/ProtocolDiscriminator.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/QualityOfService.c b/openair3/NAS/COMMON/IES/QualityOfService.c
index fff81300822da1fd5cc7a302b4588cf8f1af82e1..02c4ceca299d2330b8ab368d01b2b8f4e483befa 100644
--- a/openair3/NAS/COMMON/IES/QualityOfService.c
+++ b/openair3/NAS/COMMON/IES/QualityOfService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/QualityOfService.h b/openair3/NAS/COMMON/IES/QualityOfService.h
index 53f0e9e763191885792f04735eb96f79f68f8c1d..a7f455b23776a8f8b5d01e92c780b5c730a11839 100644
--- a/openair3/NAS/COMMON/IES/QualityOfService.h
+++ b/openair3/NAS/COMMON/IES/QualityOfService.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/RadioPriority.c b/openair3/NAS/COMMON/IES/RadioPriority.c
index c41b05cec95d151eb79fedb5f50acb050a6ea218..31780b8e8962a49bb321aea06217c85b4d542cb3 100644
--- a/openair3/NAS/COMMON/IES/RadioPriority.c
+++ b/openair3/NAS/COMMON/IES/RadioPriority.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/RadioPriority.h b/openair3/NAS/COMMON/IES/RadioPriority.h
index bbf3ac44504c944e904867763875f7a4a2f381e3..0f53fdaa778b17f480ec169fb29740c280720550 100644
--- a/openair3/NAS/COMMON/IES/RadioPriority.h
+++ b/openair3/NAS/COMMON/IES/RadioPriority.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SecurityHeaderType.c b/openair3/NAS/COMMON/IES/SecurityHeaderType.c
index 75ae311db247616923bc523b7e8df6b37f63967e..0137e8cb9bfeedb54f532830309eb71c620e1f7a 100644
--- a/openair3/NAS/COMMON/IES/SecurityHeaderType.c
+++ b/openair3/NAS/COMMON/IES/SecurityHeaderType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SecurityHeaderType.h b/openair3/NAS/COMMON/IES/SecurityHeaderType.h
index ee7635b3911ad8673a38cf9b5710f59eb3bf6b47..dcfaea6f8ac9d6dd37d22ae4690f73a00d3b0620 100644
--- a/openair3/NAS/COMMON/IES/SecurityHeaderType.h
+++ b/openair3/NAS/COMMON/IES/SecurityHeaderType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ServiceType.c b/openair3/NAS/COMMON/IES/ServiceType.c
index 6ced7364c8e268535fd3b9f6670b7b2cfc9893fb..23079a09ebc505f5c59d8059b91872ffe6fb5640 100644
--- a/openair3/NAS/COMMON/IES/ServiceType.c
+++ b/openair3/NAS/COMMON/IES/ServiceType.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ServiceType.h b/openair3/NAS/COMMON/IES/ServiceType.h
index 40778f82a600b17b605ce93453d816a3dda23b04..f6dab7733b3afda21ea4e4212b4ab4f46ef68211 100644
--- a/openair3/NAS/COMMON/IES/ServiceType.h
+++ b/openair3/NAS/COMMON/IES/ServiceType.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ShortMac.c b/openair3/NAS/COMMON/IES/ShortMac.c
index 4b7aff1a7670dcc52c111d17b2a6a342a28819c8..74bcd772c6ca344167e71988c3d832d37013e97c 100644
--- a/openair3/NAS/COMMON/IES/ShortMac.c
+++ b/openair3/NAS/COMMON/IES/ShortMac.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/ShortMac.h b/openair3/NAS/COMMON/IES/ShortMac.h
index 67ff8adf60086a0fa1c851c93431a4950ad8d2a5..f2b1c7032df27d71d43c2089a506bf9a499e2260 100644
--- a/openair3/NAS/COMMON/IES/ShortMac.h
+++ b/openair3/NAS/COMMON/IES/ShortMac.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SsCode.c b/openair3/NAS/COMMON/IES/SsCode.c
index ab6d34a159626cbf4dbd8c31a9451d86fbde5f2b..255af689e3c906d070262346da1e8932473f9e1d 100644
--- a/openair3/NAS/COMMON/IES/SsCode.c
+++ b/openair3/NAS/COMMON/IES/SsCode.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SsCode.h b/openair3/NAS/COMMON/IES/SsCode.h
index 6ba6fe377c1a8582e77bbab4427806fab1e423e5..8e6ae3b411a26ef58e8d76e52006121f49112429 100644
--- a/openair3/NAS/COMMON/IES/SsCode.h
+++ b/openair3/NAS/COMMON/IES/SsCode.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SupportedCodecList.c b/openair3/NAS/COMMON/IES/SupportedCodecList.c
index 17a9284f5eae1971e1ceedd3c1db706ec91f73c8..3a69eee366a82822fa5edb2da8c3e48db92ea54c 100644
--- a/openair3/NAS/COMMON/IES/SupportedCodecList.c
+++ b/openair3/NAS/COMMON/IES/SupportedCodecList.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/SupportedCodecList.h b/openair3/NAS/COMMON/IES/SupportedCodecList.h
index 04445fdd10e744b36ff6e5883450704042fe17bc..c4b727cb94296a006db992a9b1d960a4a1ee8107 100644
--- a/openair3/NAS/COMMON/IES/SupportedCodecList.h
+++ b/openair3/NAS/COMMON/IES/SupportedCodecList.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TimeZone.c b/openair3/NAS/COMMON/IES/TimeZone.c
index 7b0bb54e218c1fcacdd84701ce3f3c32122a9edb..eb65ec929504c24290f46d7b93eb309500a5b63d 100644
--- a/openair3/NAS/COMMON/IES/TimeZone.c
+++ b/openair3/NAS/COMMON/IES/TimeZone.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TimeZone.h b/openair3/NAS/COMMON/IES/TimeZone.h
index 585e05bb1c4a14e3d8747ca76eca3f23a0dbdc2a..5da012b14efd401ff0997ad26d8fbeb136f32ba4 100644
--- a/openair3/NAS/COMMON/IES/TimeZone.h
+++ b/openair3/NAS/COMMON/IES/TimeZone.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TimeZoneAndTime.c b/openair3/NAS/COMMON/IES/TimeZoneAndTime.c
index c986ecfc7c8c153406a39ee3141457af34afc2a3..6a26eeac78578dfa4ccc523f888348793980cd71 100644
--- a/openair3/NAS/COMMON/IES/TimeZoneAndTime.c
+++ b/openair3/NAS/COMMON/IES/TimeZoneAndTime.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TimeZoneAndTime.h b/openair3/NAS/COMMON/IES/TimeZoneAndTime.h
index 6ddbf94ab80b0e99d99327ee662f37028d25104e..71cce4e881322e7e574ffd670c1b0867cc618f3b 100644
--- a/openair3/NAS/COMMON/IES/TimeZoneAndTime.h
+++ b/openair3/NAS/COMMON/IES/TimeZoneAndTime.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TmsiStatus.c b/openair3/NAS/COMMON/IES/TmsiStatus.c
index c4c328316f1984b8bc35f2f5c5249e63ee9b84c9..726e096c7869e0963b576241fd91bbf6b0c7837b 100644
--- a/openair3/NAS/COMMON/IES/TmsiStatus.c
+++ b/openair3/NAS/COMMON/IES/TmsiStatus.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TmsiStatus.h b/openair3/NAS/COMMON/IES/TmsiStatus.h
index dc7c3eaafd0aac859de3af663725a24bc76420c0..48611f9a0c8e91d603909daa723db35590f8acc6 100644
--- a/openair3/NAS/COMMON/IES/TmsiStatus.h
+++ b/openair3/NAS/COMMON/IES/TmsiStatus.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrackingAreaIdentity.c b/openair3/NAS/COMMON/IES/TrackingAreaIdentity.c
index 20ade47268999ab5f018f2a4d16903a4e5b33dc0..a77419c80ca18b34b4ab24bfdafc7df7cb47f679 100644
--- a/openair3/NAS/COMMON/IES/TrackingAreaIdentity.c
+++ b/openair3/NAS/COMMON/IES/TrackingAreaIdentity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrackingAreaIdentity.h b/openair3/NAS/COMMON/IES/TrackingAreaIdentity.h
index 72d5d44f0d4e37358c5f945c840416a9ec34005b..bc5810c895b3fbd3d3504d1a4c5033dad54d737d 100644
--- a/openair3/NAS/COMMON/IES/TrackingAreaIdentity.h
+++ b/openair3/NAS/COMMON/IES/TrackingAreaIdentity.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c b/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c
index 47269add106e0500c804c432fa7aad3bf78cddd7..2e700abbee24fe3cc7de36cffd9cfe521acc1d19 100644
--- a/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c
+++ b/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h b/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h
index 1c58afbcb59d42ad83ff51fc74a5ceef1fe19cb3..d085e8436f54e5c1d45b60819322ffbbf5e9288b 100644
--- a/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h
+++ b/openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c b/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c
index 296ecbe6f128b207e4cbead70483e45a98c25c11..ad7af4c6c161da2443165767870803b6c759a0f6 100644
--- a/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c
+++ b/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h b/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h
index 09e9450d8deadc1dd1fe91d20442fc57cfba4784..ae013cf3049fade0a41d430a1da849ee0e16cb8e 100644
--- a/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h
+++ b/openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrafficFlowTemplate.c b/openair3/NAS/COMMON/IES/TrafficFlowTemplate.c
index 57f8d3ba0035499f4edcbfe074ec622201cf82af..d5ab249573291d6c4abc2cfaec4867eee44332c1 100644
--- a/openair3/NAS/COMMON/IES/TrafficFlowTemplate.c
+++ b/openair3/NAS/COMMON/IES/TrafficFlowTemplate.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TrafficFlowTemplate.h b/openair3/NAS/COMMON/IES/TrafficFlowTemplate.h
index 920caea056e24167d70409bf75b5c9d046384d86..651ec7ef5c8242b37b4e3c5538c4d5804abfb48e 100644
--- a/openair3/NAS/COMMON/IES/TrafficFlowTemplate.h
+++ b/openair3/NAS/COMMON/IES/TrafficFlowTemplate.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TransactionIdentifier.c b/openair3/NAS/COMMON/IES/TransactionIdentifier.c
index dbc2c68cabe756ef7a679a57830c2241483e8056..ce77d6ba34903131efd7b0ee26e69622719fc442 100644
--- a/openair3/NAS/COMMON/IES/TransactionIdentifier.c
+++ b/openair3/NAS/COMMON/IES/TransactionIdentifier.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/TransactionIdentifier.h b/openair3/NAS/COMMON/IES/TransactionIdentifier.h
index aaa0836f389b94d286d3b607c327e7a304eda65a..cf19a2f6f561b25aebf5d49b6ecc01bffca6da36 100644
--- a/openair3/NAS/COMMON/IES/TransactionIdentifier.h
+++ b/openair3/NAS/COMMON/IES/TransactionIdentifier.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeNetworkCapability.c b/openair3/NAS/COMMON/IES/UeNetworkCapability.c
index 46d07a0fdfa972301d6b4a9a3ff02b0baf78696f..65890751736f806a0a9e2659814aac015f027d4c 100644
--- a/openair3/NAS/COMMON/IES/UeNetworkCapability.c
+++ b/openair3/NAS/COMMON/IES/UeNetworkCapability.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeNetworkCapability.h b/openair3/NAS/COMMON/IES/UeNetworkCapability.h
index 5bf603532395057a30556393d880f33e670421cb..a93587c33c74d63e8cd51f1817b26f65ad531208 100644
--- a/openair3/NAS/COMMON/IES/UeNetworkCapability.h
+++ b/openair3/NAS/COMMON/IES/UeNetworkCapability.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c b/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c
index 7d506881ee54b93f912341d876c3937a65d92a6a..a56400c54dee270864bca7abfa75669cb46b2715 100644
--- a/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c
+++ b/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h b/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h
index fb25c0808a6666382c69a081d7644936ff412402..7ae83bd5ea734e4285d6677ae47a4e8ef16a41c2 100644
--- a/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h
+++ b/openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeSecurityCapability.c b/openair3/NAS/COMMON/IES/UeSecurityCapability.c
index ee462594fd011adb8d75d332be00cd5837f193a0..9b40b1b85c43167922aca07d6e237b1a3c6f76dd 100644
--- a/openair3/NAS/COMMON/IES/UeSecurityCapability.c
+++ b/openair3/NAS/COMMON/IES/UeSecurityCapability.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/UeSecurityCapability.h b/openair3/NAS/COMMON/IES/UeSecurityCapability.h
index a15f74570dcef846f60d7dd201709f2d236475a2..d9726d76e0f40a942ea611455a24cf0da6396108 100644
--- a/openair3/NAS/COMMON/IES/UeSecurityCapability.h
+++ b/openair3/NAS/COMMON/IES/UeSecurityCapability.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c b/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c
index 6c644dedf3faf71508baef8eb99c47179c1c6661..156c68d80febcaf5deaca9ee3cfc300de0a0c509 100644
--- a/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c
+++ b/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h b/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h
index fd1353833d52a92153de4630c4fc8f6bdcb869c4..b7dbe35de499eb518427e4dc0f7a36ac34493b89 100644
--- a/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h
+++ b/openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/OctetString.c b/openair3/NAS/COMMON/UTIL/OctetString.c
index 2763006126ce05a1f58aff0f7d8a3e1ec4690ddb..30830685851bea158e4b822e6b377eeae22e953e 100644
--- a/openair3/NAS/COMMON/UTIL/OctetString.c
+++ b/openair3/NAS/COMMON/UTIL/OctetString.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/OctetString.h b/openair3/NAS/COMMON/UTIL/OctetString.h
index c0c54fcb096adb9563a4f8e72a78fe59121739f9..2223b67ececdefd7295bbca851fac14932cc1afc 100644
--- a/openair3/NAS/COMMON/UTIL/OctetString.h
+++ b/openair3/NAS/COMMON/UTIL/OctetString.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/TLVDecoder.c b/openair3/NAS/COMMON/UTIL/TLVDecoder.c
index 9c27452bec75cd2c1d825f06b63d8356b618ca1a..353e16554d6ea93034d8eaccab02c3e1cb7a4bc3 100644
--- a/openair3/NAS/COMMON/UTIL/TLVDecoder.c
+++ b/openair3/NAS/COMMON/UTIL/TLVDecoder.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/TLVDecoder.h b/openair3/NAS/COMMON/UTIL/TLVDecoder.h
index 37834c5660253a8378bb080dffd6e6634fa12c06..e8dce87d8ddfb8ea3087a8968ccff4bcc197f565 100644
--- a/openair3/NAS/COMMON/UTIL/TLVDecoder.h
+++ b/openair3/NAS/COMMON/UTIL/TLVDecoder.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/TLVEncoder.c b/openair3/NAS/COMMON/UTIL/TLVEncoder.c
index 0facb0d5f781d8d73532957ea6478a46fb25f985..9d3a144989119e76f88ac9508bedf6e0d1c285b4 100644
--- a/openair3/NAS/COMMON/UTIL/TLVEncoder.c
+++ b/openair3/NAS/COMMON/UTIL/TLVEncoder.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/TLVEncoder.h b/openair3/NAS/COMMON/UTIL/TLVEncoder.h
index 976289f25b4fc09371c555bb9ad1989075960241..df5b58a07ff0928261c66e51ae7b32a0c38bfe64 100644
--- a/openair3/NAS/COMMON/UTIL/TLVEncoder.h
+++ b/openair3/NAS/COMMON/UTIL/TLVEncoder.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/device.c b/openair3/NAS/COMMON/UTIL/device.c
index 6643c6dfd982c081e862344e446236f96846f9db..7ad2879b9015d465b427c3e370d6f2cf06eddcbf 100644
--- a/openair3/NAS/COMMON/UTIL/device.c
+++ b/openair3/NAS/COMMON/UTIL/device.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/device.h b/openair3/NAS/COMMON/UTIL/device.h
index fb0a9add1361576b504dbc86f77c772f1cbf029d..975d7b1c8a74783580b9bfbc5b7f2e686d60020e 100644
--- a/openair3/NAS/COMMON/UTIL/device.h
+++ b/openair3/NAS/COMMON/UTIL/device.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/memory.c b/openair3/NAS/COMMON/UTIL/memory.c
index 3b3b6e7f9e1d47caf3e5a2f4736a38eb9f8a1e4b..334cdc5eb628221e5a8ef49106d44b654a8104e1 100644
--- a/openair3/NAS/COMMON/UTIL/memory.c
+++ b/openair3/NAS/COMMON/UTIL/memory.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/memory.h b/openair3/NAS/COMMON/UTIL/memory.h
index f7f0733044b50163c262036e5cc0abd9cc85fdc6..ec8406c93288555f276623b07013617c290af932 100644
--- a/openair3/NAS/COMMON/UTIL/memory.h
+++ b/openair3/NAS/COMMON/UTIL/memory.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/nas_log.c b/openair3/NAS/COMMON/UTIL/nas_log.c
index a1568c49d85f814ea2fab4fbc2c2654a1b6d7973..6af90c4be871ab88e0a698c0926efd43f9f87b09 100644
--- a/openair3/NAS/COMMON/UTIL/nas_log.c
+++ b/openair3/NAS/COMMON/UTIL/nas_log.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/nas_log.h b/openair3/NAS/COMMON/UTIL/nas_log.h
index c6e0fbcd80b494d458a7ed420e9d0e2ccf862901..47664c52d09ec056cb3747b3e67b6c8279e1c0d1 100644
--- a/openair3/NAS/COMMON/UTIL/nas_log.h
+++ b/openair3/NAS/COMMON/UTIL/nas_log.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/nas_timer.c b/openair3/NAS/COMMON/UTIL/nas_timer.c
index aa67c72b422f6c7a0f5081de43f4608dd927edd6..0b92ac4d9d55c6b376558f99efbc028ae3effaa5 100644
--- a/openair3/NAS/COMMON/UTIL/nas_timer.c
+++ b/openair3/NAS/COMMON/UTIL/nas_timer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/nas_timer.h b/openair3/NAS/COMMON/UTIL/nas_timer.h
index 007ea236b78aceb45e2f7bd24418943d54609e12..b1149f21c0035e7a00635c5c2e38859dee8180cb 100644
--- a/openair3/NAS/COMMON/UTIL/nas_timer.h
+++ b/openair3/NAS/COMMON/UTIL/nas_timer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/parser.c b/openair3/NAS/COMMON/UTIL/parser.c
index e60e7eca88a5cb892473317bcd11ad4cfc0b9388..e27fb3819987e3dbfcfcfa4e737e98eb28b4e3e7 100644
--- a/openair3/NAS/COMMON/UTIL/parser.c
+++ b/openair3/NAS/COMMON/UTIL/parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/parser.h b/openair3/NAS/COMMON/UTIL/parser.h
index 2061c7201dcc1314f3f5bf3da0bfd50ef113f7d5..ae454ce36799fe9cb66fdba0307bb89bcba693a6 100644
--- a/openair3/NAS/COMMON/UTIL/parser.h
+++ b/openair3/NAS/COMMON/UTIL/parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/socket.c b/openair3/NAS/COMMON/UTIL/socket.c
index 6d272284154683cf3eb430cbcb3c3bb7a278239e..8ec3227e20a45831a9dc2404460014ef19efffe4 100644
--- a/openair3/NAS/COMMON/UTIL/socket.c
+++ b/openair3/NAS/COMMON/UTIL/socket.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/socket.h b/openair3/NAS/COMMON/UTIL/socket.h
index ae198a489c1d3fa64fe2de56d953c0437ef01bde..033046d98c08d04e39607740794f4b8cd2446737 100644
--- a/openair3/NAS/COMMON/UTIL/socket.h
+++ b/openair3/NAS/COMMON/UTIL/socket.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/stty.c b/openair3/NAS/COMMON/UTIL/stty.c
index 88b66eb09b3fd1dc16114a8d646f5886bfb06d0d..eceb0b06b139294326ef911f81de8e1aec8b68c0 100644
--- a/openair3/NAS/COMMON/UTIL/stty.c
+++ b/openair3/NAS/COMMON/UTIL/stty.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/UTIL/tst/timer.c b/openair3/NAS/COMMON/UTIL/tst/timer.c
index 449c4d749bb7617b4c956dad38dd6c9cf6637e3f..701c878f4de3f5cd728109d20c9d928de44e31c7 100644
--- a/openair3/NAS/COMMON/UTIL/tst/timer.c
+++ b/openair3/NAS/COMMON/UTIL/tst/timer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/securityDef.h b/openair3/NAS/COMMON/securityDef.h
index ef39d5533c5a9ec600e3469b8170dde0dde8fb37..30732f26f5b5a0bd8d968786bebc2c3d35038f03 100644
--- a/openair3/NAS/COMMON/securityDef.h
+++ b/openair3/NAS/COMMON/securityDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/COMMON/userDef.h b/openair3/NAS/COMMON/userDef.h
index c5989c8e45d2c698252d4ad98b1de041e4e81558..fdb8287b3b0ce7497b72710c3ea30ea49ba584dc 100644
--- a/openair3/NAS/COMMON/userDef.h
+++ b/openair3/NAS/COMMON/userDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/Makefile b/openair3/NAS/TEST/AS_SIMULATOR/Makefile
index 17710368e9391d65dd58b9047675621b2dc868d2..3d379c6d069e855e6c76e8def648ced946bb4c27 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/Makefile
+++ b/openair3/NAS/TEST/AS_SIMULATOR/Makefile
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_data.c b/openair3/NAS/TEST/AS_SIMULATOR/as_data.c
index 9316546bd473ead09a68e34139f4888d923a7324..56b00125a448135d442431ea84483e12ddacdb42 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_data.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_data.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_data.h b/openair3/NAS/TEST/AS_SIMULATOR/as_data.h
index c52ed83465719b68f7ce8286dd26c7468cd479a6..24c64737302d4c843c1c202181f1f8026a4c6d96 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_data.h
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_data.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_process.c b/openair3/NAS/TEST/AS_SIMULATOR/as_process.c
index e0f031c45ac89757061079c43e29f40338a2aada..21e484e40adbe7c1db70429f678f1f734107c56d 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_process.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_process.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_process.h b/openair3/NAS/TEST/AS_SIMULATOR/as_process.h
index 94053bdf9efdccbe6896a55da4a8e12629cfd113..75df1f0d88e7b662a99f426a7b0e5f6ce6bb29e6 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_process.h
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_process.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator.c b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator.c
index 370213bccdda607cdbe63942f23cbaf50fdb9fdd..efe2c1af72b567b0e84508f13711fe8065c71126 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c
index 5f8743598bbbeaa56daf21a09005f419a85cb0c6..ff6720da5f6d5b24aec4aade0a49fea09e849e7a 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h
index c08021723fd54bae8cf78934601df8f695998177..b15bf8f29ba1c5d95d8df2958716220c9c4a5b09 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h
+++ b/openair3/NAS/TEST/AS_SIMULATOR/as_simulator_parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/nas_data.c b/openair3/NAS/TEST/AS_SIMULATOR/nas_data.c
index 0aa6a57126fa0218dfb3e058e169b4204a71d42c..990a856a9d751c2b8ed8a98547dfd7289b30e87f 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/nas_data.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/nas_data.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/nas_data.h b/openair3/NAS/TEST/AS_SIMULATOR/nas_data.h
index 471cd199576f871bb3d34a7ff2435adcada54db1..ff5500701465a6bcca2ed16902694be7e66f050b 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/nas_data.h
+++ b/openair3/NAS/TEST/AS_SIMULATOR/nas_data.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c
index 55c6c2494eea36f1249fbb54ec28738e41307883..17ad99715b9c17bd567fe497dbb4b15e8704adaf 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c
+++ b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.h b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.h
index 901e6ce45bac02b68289b4b96ca7c92b7a06d8eb..ae5baebafc746f34d0e3415c0863fcebdd38d717 100644
--- a/openair3/NAS/TEST/AS_SIMULATOR/nas_process.h
+++ b/openair3/NAS/TEST/AS_SIMULATOR/nas_process.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/NETWORK/Makefile b/openair3/NAS/TEST/NETWORK/Makefile
index 00a74ec5618d31620415a9eb0dfca5abf35895cd..b0b5516801fafd65f87ea118a9119900b48e3908 100644
--- a/openair3/NAS/TEST/NETWORK/Makefile
+++ b/openair3/NAS/TEST/NETWORK/Makefile
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/NAS/TEST/NETWORK/network_parser.c b/openair3/NAS/TEST/NETWORK/network_parser.c
index 0e001e0aeeb01edfd3da525698a624d17eeb3216..f540a8a99caab9c8160d5e79769df1b47b648c18 100644
--- a/openair3/NAS/TEST/NETWORK/network_parser.c
+++ b/openair3/NAS/TEST/NETWORK/network_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/NETWORK/network_parser.h b/openair3/NAS/TEST/NETWORK/network_parser.h
index daaec64ffddda01024cd74b24813162e3c3cf39e..a20c313be30fa7e312f51241a5152364a458c89d 100644
--- a/openair3/NAS/TEST/NETWORK/network_parser.h
+++ b/openair3/NAS/TEST/NETWORK/network_parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/NETWORK/network_simulator.c b/openair3/NAS/TEST/NETWORK/network_simulator.c
index ef335af2ec4f75c388fbaa5b2e563e7d06758f13..294241a3845fbf6d663daad85365a16d707d6c34 100644
--- a/openair3/NAS/TEST/NETWORK/network_simulator.c
+++ b/openair3/NAS/TEST/NETWORK/network_simulator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/USER/Makefile b/openair3/NAS/TEST/USER/Makefile
index 69a2a673879eca861813cd757b59acb8595fe724..6f613b3cc98fd3a3de0ceb7edd9a1c927220af51 100644
--- a/openair3/NAS/TEST/USER/Makefile
+++ b/openair3/NAS/TEST/USER/Makefile
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/NAS/TEST/USER/user_parser.c b/openair3/NAS/TEST/USER/user_parser.c
index ffa47a919cf98dcdd05395f68124afa532a67185..2b7afd5d040e6cbe981eba165344a361060f42b2 100644
--- a/openair3/NAS/TEST/USER/user_parser.c
+++ b/openair3/NAS/TEST/USER/user_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/USER/user_parser.h b/openair3/NAS/TEST/USER/user_parser.h
index 40fa6182709c8099802a7c929cf89f08fa7ae5af..d1972de02894dbf80ec04f9c5d5d60d80501ca5c 100644
--- a/openair3/NAS/TEST/USER/user_parser.h
+++ b/openair3/NAS/TEST/USER/user_parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TEST/USER/user_simulator.c b/openair3/NAS/TEST/USER/user_simulator.c
index 2f0819f5971824fa89f28a3981c1954aa74ee213..ec16b3453f25dd10cd8ff15a0f72902aa31e9674 100644
--- a/openair3/NAS/TEST/USER/user_simulator.c
+++ b/openair3/NAS/TEST/USER/user_simulator.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TOOLS/network.h b/openair3/NAS/TOOLS/network.h
index d7044c8e51436792605078a8d79d04154e921107..cde82f4560cc6039f90ea85068e5d3f321af082a 100644
--- a/openair3/NAS/TOOLS/network.h
+++ b/openair3/NAS/TOOLS/network.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TOOLS/nvram.c b/openair3/NAS/TOOLS/nvram.c
index b10511f2fc94ca8f6acc92d2f08e235e54e61638..80d8b34893e7236638b89c2ff4941f3a437390d0 100644
--- a/openair3/NAS/TOOLS/nvram.c
+++ b/openair3/NAS/TOOLS/nvram.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/TOOLS/usim.c b/openair3/NAS/TOOLS/usim.c
index 242b30d65558e3a1c4f31aa89f61267bcac533a0..84b4cfbdf883186908bf4dbbeee665613f2cfb0a 100644
--- a/openair3/NAS/TOOLS/usim.c
+++ b/openair3/NAS/TOOLS/usim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_command.c b/openair3/NAS/UE/API/USER/at_command.c
index 8f40ba93c434f7f06e7765ff09774318db28f13e..ab85b2d2fa6fe994ffe6956e79d431c9e00a4e5c 100644
--- a/openair3/NAS/UE/API/USER/at_command.c
+++ b/openair3/NAS/UE/API/USER/at_command.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_command.h b/openair3/NAS/UE/API/USER/at_command.h
index 97cdeeb3a132097e9e0197a1ea60742e2439265a..b7bdb11b7543b34334a8a708b6fb991a9d48af20 100644
--- a/openair3/NAS/UE/API/USER/at_command.h
+++ b/openair3/NAS/UE/API/USER/at_command.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_error.c b/openair3/NAS/UE/API/USER/at_error.c
index 7548fb513effb3d502cac4ce593b1f55e7be55f1..d004c897368bc4d467954c02ac125ea0ef856985 100644
--- a/openair3/NAS/UE/API/USER/at_error.c
+++ b/openair3/NAS/UE/API/USER/at_error.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_error.h b/openair3/NAS/UE/API/USER/at_error.h
index de9284e94c34c9f007a280a365a5425f27ce04d5..a84875a43c39c208b28017a3de63407fa6057a80 100644
--- a/openair3/NAS/UE/API/USER/at_error.h
+++ b/openair3/NAS/UE/API/USER/at_error.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_response.c b/openair3/NAS/UE/API/USER/at_response.c
index 5c1dcc1a965109224e7db508475c0d4211cd4aa1..a488aa78d9f7c949564c3553150e040b36981fa8 100644
--- a/openair3/NAS/UE/API/USER/at_response.c
+++ b/openair3/NAS/UE/API/USER/at_response.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/at_response.h b/openair3/NAS/UE/API/USER/at_response.h
index 794af050902efb70e25025eb0ae6b448147afdb4..b0303c587584c469f73b3fbb6e1bed0a5dff4de4 100644
--- a/openair3/NAS/UE/API/USER/at_response.h
+++ b/openair3/NAS/UE/API/USER/at_response.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/tst/at_parser.c b/openair3/NAS/UE/API/USER/tst/at_parser.c
index e580c99ec5ccb0ff8864a6a0f7153653823a9c56..2039d81a630b9349cf42150de4855f290e71cb3c 100644
--- a/openair3/NAS/UE/API/USER/tst/at_parser.c
+++ b/openair3/NAS/UE/API/USER/tst/at_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/user_api.c b/openair3/NAS/UE/API/USER/user_api.c
index a1300ea059d9dac26cfe107c3c6d9c0e02fc4f38..83839a90f30febe758c4d7b842a1bf0a8767cb7d 100644
--- a/openair3/NAS/UE/API/USER/user_api.c
+++ b/openair3/NAS/UE/API/USER/user_api.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/user_api.h b/openair3/NAS/UE/API/USER/user_api.h
index 6536144165b540bd9bf186d888aaf14c41eeb00b..e554b4ef0b7c6d3ab7dd6c3910da6e4a6a7c8dd7 100644
--- a/openair3/NAS/UE/API/USER/user_api.h
+++ b/openair3/NAS/UE/API/USER/user_api.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/user_indication.c b/openair3/NAS/UE/API/USER/user_indication.c
index 620596005df5d3fdd1513a85d947486d242d7ac8..2c102c1d462b95b4cc9e66bea6b94e447af68b0b 100644
--- a/openair3/NAS/UE/API/USER/user_indication.c
+++ b/openair3/NAS/UE/API/USER/user_indication.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USER/user_indication.h b/openair3/NAS/UE/API/USER/user_indication.h
index 39aba424e7a755f88ce91b3980d405dd5f819cba..d86ab43dcaad3a688dcc3b1b49c43d105c4ec69b 100644
--- a/openair3/NAS/UE/API/USER/user_indication.h
+++ b/openair3/NAS/UE/API/USER/user_indication.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USIM/aka_functions.c b/openair3/NAS/UE/API/USIM/aka_functions.c
index 4d8f4cd1d31b33370056cea6e4b9556319e5a369..88a9415e08d324233462cf2d28ad765746b79429 100644
--- a/openair3/NAS/UE/API/USIM/aka_functions.c
+++ b/openair3/NAS/UE/API/USIM/aka_functions.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USIM/aka_functions.h b/openair3/NAS/UE/API/USIM/aka_functions.h
index 8c370bb76c8df239839cf6ab7f810495418301a7..4e28ead86af845308ce9775f789b1448d7a0d7e6 100644
--- a/openair3/NAS/UE/API/USIM/aka_functions.h
+++ b/openair3/NAS/UE/API/USIM/aka_functions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USIM/usim_api.c b/openair3/NAS/UE/API/USIM/usim_api.c
index efb0383596dfc885bf20137c2673c25aa48909ea..d8a3807ab3dfa5c944bc89f883790ef106fad173 100644
--- a/openair3/NAS/UE/API/USIM/usim_api.c
+++ b/openair3/NAS/UE/API/USIM/usim_api.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/API/USIM/usim_api.h b/openair3/NAS/UE/API/USIM/usim_api.h
index f2f80d610c5d0601be4baa837125f2d2bff6a8d5..f332b5ffc87170d2622f6bea0ef78c47bba57657 100644
--- a/openair3/NAS/UE/API/USIM/usim_api.h
+++ b/openair3/NAS/UE/API/USIM/usim_api.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/Attach.c b/openair3/NAS/UE/EMM/Attach.c
index c0c82b9b4ccf258567f414882fa368e513b1bcb9..4029c8f70217054f85416ed605e4fe97eb6ac24c 100644
--- a/openair3/NAS/UE/EMM/Attach.c
+++ b/openair3/NAS/UE/EMM/Attach.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/Authentication.c b/openair3/NAS/UE/EMM/Authentication.c
index e49bdd2db7e5e36aa52835dd58b8f477bd3317a9..5b10e608935da20a2e83710ae75f82cdf8376637 100644
--- a/openair3/NAS/UE/EMM/Authentication.c
+++ b/openair3/NAS/UE/EMM/Authentication.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/Detach.c b/openair3/NAS/UE/EMM/Detach.c
index fd2db1b6174ae7a9624f875531eaf8b68a2d07b4..c18dc0ad28a7d1ef3b472692d032e5bee53502b0 100644
--- a/openair3/NAS/UE/EMM/Detach.c
+++ b/openair3/NAS/UE/EMM/Detach.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/EmmStatusHdl.c b/openair3/NAS/UE/EMM/EmmStatusHdl.c
index 89dd50207f05b80d454de9899d54434f255d6499..367d0327f4f1c6d6984adf44651c416da839b262 100644
--- a/openair3/NAS/UE/EMM/EmmStatusHdl.c
+++ b/openair3/NAS/UE/EMM/EmmStatusHdl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/Identification.c b/openair3/NAS/UE/EMM/Identification.c
index 7cf2e765c61322a185618566632227270f083e6f..0d2d6644a130d7bce22767be29b68ec470718560 100644
--- a/openair3/NAS/UE/EMM/Identification.c
+++ b/openair3/NAS/UE/EMM/Identification.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/IdleMode.c b/openair3/NAS/UE/EMM/IdleMode.c
index 159a3b2a2ceba18bd0e76c2d32d1494f72b36a29..362d5e5b4af56ec9c677d7844ce51da9c0d7e007 100644
--- a/openair3/NAS/UE/EMM/IdleMode.c
+++ b/openair3/NAS/UE/EMM/IdleMode.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/IdleMode.h b/openair3/NAS/UE/EMM/IdleMode.h
index e80b4f91344931edd7117917a33ed5d38150f068..4584877974188f0b30d1171812fbf120b64b49d1 100644
--- a/openair3/NAS/UE/EMM/IdleMode.h
+++ b/openair3/NAS/UE/EMM/IdleMode.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/LowerLayer.c b/openair3/NAS/UE/EMM/LowerLayer.c
index b5555b2c2fa13b68a0180b3ede87474666662869..01b07fc35606b7662c6f7d545fb6c681fd1bcb9e 100644
--- a/openair3/NAS/UE/EMM/LowerLayer.c
+++ b/openair3/NAS/UE/EMM/LowerLayer.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/LowerLayer.h b/openair3/NAS/UE/EMM/LowerLayer.h
index 00e271feaa7e9c0dd3e3426401b6dd75c589f5e7..0d8eefc7f3830170be3625e420df6526e39e1db2 100644
--- a/openair3/NAS/UE/EMM/LowerLayer.h
+++ b/openair3/NAS/UE/EMM/LowerLayer.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregistered.c b/openair3/NAS/UE/EMM/SAP/EmmDeregistered.c
index a2a93c4d780a68e36c6b97ee3a7c3eb0ee64d8b5..71e2c4a49ca6f0ed570e0c414bcf5cf310977b1a 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregistered.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregistered.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c
index cbdc470a0b844d996fcef9c23626a5543734ec87..834311be749ee3c2549fdbc7f508558fedce5872 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttachNeeded.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c
index 7ddfac03db225bfc34cb83c093dcff0f121f911d..f58cf4b9e0928a01ab2abfe425ebad06985fc0db 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c
index d18b66a3162bc876043d649d78804973400aab6b..a44438a3a89a1b02f98c4c4393812d15b43b78d8 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredInitiated.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c
index 394325441597f64991cedf81764e4408caaae0c9..4310f963cd41b87cffa509c059ef3f617e595df9 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredLimitedService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
index af9ab5e5be773ccd0090a9986d506139bfe365be..84820568cc28c56c31209d675feadab5d29b44ca 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c
index 0f883c8109d3990939b755bdec22698dbe1013d5..6dc1d3304abefb9bc0322acec220f6d6b1279859 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoImsi.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c
index 3ec7a96ba8ab416ff73ba3f2ac2bfa332a369a70..fe18a98d38fa4d2d96625055acca0e9844c4d4ed 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredNormalService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
index ed41362f2f900563e5776fe2847408cab369b93b..8560b2a4bba3aef6b8077cab0e873e78b4adef40 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmNull.c b/openair3/NAS/UE/EMM/SAP/EmmNull.c
index 7b553f0a765474bc97e405d6c5d591874cdf0a2e..e2e45c99cc4587913c89c5ee606128109bb88dd8 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmNull.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmNull.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegistered.c b/openair3/NAS/UE/EMM/SAP/EmmRegistered.c
index dbc51e51554382af949dee6bd1c6116e334d5186..fbd3e1ce63e18fe14bd96b42102553111c323ea6 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegistered.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegistered.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c
index 21654123d1462e3deeba854f5790acc9398e68a4..cf95cd3f56ecdca0925e984970b9a1e3713db7f8 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c
index 6855843a25bbe01ba70e58913ada26d0d12983d1..26de1cd377b4899b8fd2c52f066f2b8bb190e8a8 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
index d10f0d1053c0c939408600b85fc8c5a2424ce0dc..36929fc4d7feb47b125b90d7ac92891812416327 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c
index b4ea68f689573330e45d844b076f180e2c92f0e8..af60b566b80b4a038092ac7d9e0a438117997a15 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredLimitedService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c
index 0328ae81920f9eece5dddc709d377351222b09a9..5aa408a8f9fa851def676aabb0a916e848cc5f54 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredNoCellAvailable.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c
index 8b1c8721f2d6f091645c0db14a19d22611e5b0f9..4ee503ab9f8da4d880f68745640ce687b681cd04 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredNormalService.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c
index 8ee92c4454cce5d18301cb6dbced9b0d8a7aab32..e300ac58db3975ea45cf86d3c6497ea91c39a339 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredPlmnSearch.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c b/openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c
index 2a81b488dce0dd9ce5d71ff3609d392a0b2ae413..dceb0a87d1f4f0773e119738ed87c3ca24c7f051 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmRegisteredUpdateNeeded.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c b/openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c
index b556efb7f44fa02ef98c75eeb0b13b8620b6ada7..fa1944458e5a780b7fc23f5f353d437dc5ca872e 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmServiceRequestInitiated.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c b/openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c
index 91bb660ee121f4b328a3d38a04d2590910e13244..610eb13b36f04c15808f6860331f716742ca8c8b 100644
--- a/openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c
+++ b/openair3/NAS/UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_as.c b/openair3/NAS/UE/EMM/SAP/emm_as.c
index d833b5bba08178921e45151d3e2114c096d1bb06..fbb54d548be367ceb8743e885fc3753c7054cb24 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_as.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_as.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_as.h b/openair3/NAS/UE/EMM/SAP/emm_as.h
index 726a363d75c859d4ae8381a44e00c29b951f23e3..24ecef6926a6ef98b3b34fdc7c209e3d7a052a6e 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_as.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_as.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_asDef.h b/openair3/NAS/UE/EMM/SAP/emm_asDef.h
index 69ea979b6361328530af8557330a47ad33d55e67..7bd464ec04d377841818163f6636d724c7d626d4 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_asDef.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_asDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_esm.c b/openair3/NAS/UE/EMM/SAP/emm_esm.c
index 798e682b112c09f7d54ccebcb4b7dc6fec0492a9..5d45da8591bfa32aa0ca9ecf4454d8beabc3646c 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_esm.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_esm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_esm.h b/openair3/NAS/UE/EMM/SAP/emm_esm.h
index 11aa42213f8f7681e9399104db26980741339149..e74e1f7dc00ec749de8cf0f1e2121c62fd6d946c 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_esm.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_esm.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_esmDef.h b/openair3/NAS/UE/EMM/SAP/emm_esmDef.h
index 811580ab2a65fa429baeda9bfcad57e92a7cbc37..aac37b46bfb6680df0dc907fd41a5eab0a150a58 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_esmDef.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_esmDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_fsm.c b/openair3/NAS/UE/EMM/SAP/emm_fsm.c
index be1517a7ccd21d4c051394ef0be29adac95658fa..a2ede7ae17cd691a7db76a124b98471e9db1c651 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_fsm.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_fsm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_fsm.h b/openair3/NAS/UE/EMM/SAP/emm_fsm.h
index aba1ef327ca2e8f5f010ece712a501c2600dc625..bc1faf2f85db8b80ae57b6f0db7c632585c5994f 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_fsm.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_fsm.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_recv.c b/openair3/NAS/UE/EMM/SAP/emm_recv.c
index 5b7c6d7dda34fe0c057da04071522ceeefffa69f..2c901eb49b5287d36de2f22fbb9ec3b898796fe0 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_recv.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_recv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_recv.h b/openair3/NAS/UE/EMM/SAP/emm_recv.h
index ead59e3851bcfb44cf5224ac8942f218da24fc82..ccfc8fd2a259a31c7a882c0278083d5960e1b09b 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_recv.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_recv.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_reg.c b/openair3/NAS/UE/EMM/SAP/emm_reg.c
index 6cda066b584d89098421139fcf9f6f60d4dd7256..87c1f1bbd182e295ec15f47136dfb539bea67eb7 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_reg.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_reg.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_reg.h b/openair3/NAS/UE/EMM/SAP/emm_reg.h
index 9cd1132c7a333f148625db8049d6847289b8da97..96a68f1fce494d6d6dc90e3246e585eca0f0e4b3 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_reg.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_reg.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_regDef.h b/openair3/NAS/UE/EMM/SAP/emm_regDef.h
index de1b05b6a6aae95dbfeb691821d56ba16ed5262c..b66c0565ea6dfd0af0be73db21ae5c9c803bf82c 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_regDef.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_regDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_sap.c b/openair3/NAS/UE/EMM/SAP/emm_sap.c
index 429518d475c2c47e20ee86f215d38985de6fd6de..3f48cf3d8fccceb99175c42f76d978f37867c941 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_sap.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_sap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_sap.h b/openair3/NAS/UE/EMM/SAP/emm_sap.h
index b84fd7808b4bf8ae217107041522dd22b2eabf95..98088a66f366a735e9e5dd981c611998ac826ef0 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_sap.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_send.c b/openair3/NAS/UE/EMM/SAP/emm_send.c
index e3fc4fa7f990622aa6a78f922d863e6ca2074669..56708eded3e66ced87169b83e1e9b71eb74647bd 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_send.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_send.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SAP/emm_send.h b/openair3/NAS/UE/EMM/SAP/emm_send.h
index 1c04cd8dad76f0b12b7159ee0984b7f8575fbedf..7cd4fb132fe8e2e8d0586afceb90f288029c074e 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_send.h
+++ b/openair3/NAS/UE/EMM/SAP/emm_send.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/SecurityModeControl.c b/openair3/NAS/UE/EMM/SecurityModeControl.c
index 0991fb22bb4ff6a8a68aa7aa25e28141c3448229..7bdd21572e209f7d9001c6bd8dab771d0f69366f 100644
--- a/openair3/NAS/UE/EMM/SecurityModeControl.c
+++ b/openair3/NAS/UE/EMM/SecurityModeControl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/ServiceRequestHdl.c b/openair3/NAS/UE/EMM/ServiceRequestHdl.c
index 93e66efdbdb2ae7ad387403fa58f60f08d745204..b305ee169090e4a23911ab3ab640f5003fc195c4 100644
--- a/openair3/NAS/UE/EMM/ServiceRequestHdl.c
+++ b/openair3/NAS/UE/EMM/ServiceRequestHdl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/TrackingAreaUpdate.c b/openair3/NAS/UE/EMM/TrackingAreaUpdate.c
index bafddaf31739edf8f07cab807fb92215f91e73e6..b8632ef2573266c2619477ca0b56475eed96e6c9 100644
--- a/openair3/NAS/UE/EMM/TrackingAreaUpdate.c
+++ b/openair3/NAS/UE/EMM/TrackingAreaUpdate.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/emmData.h b/openair3/NAS/UE/EMM/emmData.h
index 84e58bb963023f393b3d6333eb743d4753b04455..dfdfb34e77ecd90f9d36f2a6c382d56b4f636bbe 100644
--- a/openair3/NAS/UE/EMM/emmData.h
+++ b/openair3/NAS/UE/EMM/emmData.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/emm_main.c b/openair3/NAS/UE/EMM/emm_main.c
index 8f3ed17e4cae7e03f61d9d4246ed1398ca9f358c..329b59fae6746c312b3692b53393278952876369 100644
--- a/openair3/NAS/UE/EMM/emm_main.c
+++ b/openair3/NAS/UE/EMM/emm_main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/emm_main.h b/openair3/NAS/UE/EMM/emm_main.h
index aa98965b041245bb818efa4a1a5a3be93f972fd4..055127b15d41fd6d4a10b1c2ac487a35dd9f9357 100644
--- a/openair3/NAS/UE/EMM/emm_main.h
+++ b/openair3/NAS/UE/EMM/emm_main.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/EMM/emm_proc.h b/openair3/NAS/UE/EMM/emm_proc.h
index 45052573352c3402fb8f2dcb2e0e9a162f75fa6b..7d4024d9d63fd7a8ca228fe038db6f74e7311249 100644
--- a/openair3/NAS/UE/EMM/emm_proc.h
+++ b/openair3/NAS/UE/EMM/emm_proc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c b/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c
index e2133563324f60c61df629acfeb0304d7211e6f1..21c3da3f195138e6dacbd6cba39c29b56b3c1a3c 100644
--- a/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c
+++ b/openair3/NAS/UE/ESM/DedicatedEpsBearerContextActivation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c b/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c
index a438d65ddb28cac1c76f1240a236f5e163b36e46..7c528d75691bc7527513074ba2c03db974834a64 100644
--- a/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c
+++ b/openair3/NAS/UE/ESM/DefaultEpsBearerContextActivation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c b/openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c
index 6ba5e6e1cc2233f16faba458817d6d7ef477ac05..1a7328a81fd36e0cf6cf2791fedafaffac772a18 100644
--- a/openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c
+++ b/openair3/NAS/UE/ESM/EpsBearerContextDeactivation.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/EsmStatusHdl.c b/openair3/NAS/UE/ESM/EsmStatusHdl.c
index 4c8e0aafc1386f089e1a9a0c0f02ebc0df5401aa..def498a89b91ccc7d50cc6b4f6aa3d5cf7f5cebd 100644
--- a/openair3/NAS/UE/ESM/EsmStatusHdl.c
+++ b/openair3/NAS/UE/ESM/EsmStatusHdl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/PdnConnectivity.c b/openair3/NAS/UE/ESM/PdnConnectivity.c
index f0a245e83e4036e5e8269fd2550c546e58ce7c57..2efed604f02afb05eb3b9427c0d02b4cb7a6c9bb 100644
--- a/openair3/NAS/UE/ESM/PdnConnectivity.c
+++ b/openair3/NAS/UE/ESM/PdnConnectivity.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/PdnDisconnect.c b/openair3/NAS/UE/ESM/PdnDisconnect.c
index 4b5c0f06e5b0bfe14d7cae3613c3393ea7350e5e..6665126e40a007983969db1277173129929cd37d 100644
--- a/openair3/NAS/UE/ESM/PdnDisconnect.c
+++ b/openair3/NAS/UE/ESM/PdnDisconnect.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_recv.c b/openair3/NAS/UE/ESM/SAP/esm_recv.c
index 03a421558113c48500f8d5893fcfb21e842970ec..ca859f75f24ecdbcbdc8d0565c5426d5664fb43e 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_recv.c
+++ b/openair3/NAS/UE/ESM/SAP/esm_recv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_recv.h b/openair3/NAS/UE/ESM/SAP/esm_recv.h
index ae36d650e3c37310e90b517934011e0f07e46dc7..29fcb47092d8902199b772da84c0b38ad463b5ac 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_recv.h
+++ b/openair3/NAS/UE/ESM/SAP/esm_recv.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_sap.c b/openair3/NAS/UE/ESM/SAP/esm_sap.c
index 7ff1e57380bbb20b1dfb8b444593edd202809e87..42deac629eed73ca6e32d637abbbdd0027a41d98 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_sap.c
+++ b/openair3/NAS/UE/ESM/SAP/esm_sap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_sap.h b/openair3/NAS/UE/ESM/SAP/esm_sap.h
index b464e18900a330bdaf05bb6b6998da2d69e164b9..28d6cda1db894aa075a21a39068837b91b8fbec5 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_sap.h
+++ b/openair3/NAS/UE/ESM/SAP/esm_sap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_sapDef.h b/openair3/NAS/UE/ESM/SAP/esm_sapDef.h
index 4e1bed8bb5f891e75ec6b71ed8ebea19be20bad9..4ff7c7e9ddccd0b5b776e356e86e8d4c90ba2b5d 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_sapDef.h
+++ b/openair3/NAS/UE/ESM/SAP/esm_sapDef.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_send.c b/openair3/NAS/UE/ESM/SAP/esm_send.c
index eff200dc4e135ce65d968fc0c7588c513064990f..020d9d89e3c9c0188be205e4d6a30c9ad481f005 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_send.c
+++ b/openair3/NAS/UE/ESM/SAP/esm_send.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/SAP/esm_send.h b/openair3/NAS/UE/ESM/SAP/esm_send.h
index 1a5abc869559dcf621ba1bbd48943195475f59f8..f97454027ae05dde8f7ec725949c0db26a3999a0 100644
--- a/openair3/NAS/UE/ESM/SAP/esm_send.h
+++ b/openair3/NAS/UE/ESM/SAP/esm_send.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esmData.h b/openair3/NAS/UE/ESM/esmData.h
index 7da659e801b2e9fec174c689f5817b1682299b6b..16f4707a3775b73b6c619078f654c6b2125098fd 100644
--- a/openair3/NAS/UE/ESM/esmData.h
+++ b/openair3/NAS/UE/ESM/esmData.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_ebr.c b/openair3/NAS/UE/ESM/esm_ebr.c
index 330da2fb23660d2182b70a4faf7a103b1c2fe961..a1d78bc62c0d8a47fc352c52c46357d3e91e7100 100644
--- a/openair3/NAS/UE/ESM/esm_ebr.c
+++ b/openair3/NAS/UE/ESM/esm_ebr.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_ebr.h b/openair3/NAS/UE/ESM/esm_ebr.h
index 8e1eaee1a4291dd76fcf66c37d4201efd419e9e9..dece5c3645bfe0d4218a65e0eb99ee3fc709bf0e 100644
--- a/openair3/NAS/UE/ESM/esm_ebr.h
+++ b/openair3/NAS/UE/ESM/esm_ebr.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_ebr_context.c b/openair3/NAS/UE/ESM/esm_ebr_context.c
index 4700187da179a45ffef1388623a12539881b8673..e2a327f4886c1fd4cf84c78d7901a1bb5bfcc307 100644
--- a/openair3/NAS/UE/ESM/esm_ebr_context.c
+++ b/openair3/NAS/UE/ESM/esm_ebr_context.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_ebr_context.h b/openair3/NAS/UE/ESM/esm_ebr_context.h
index a0016555a30233a9d5a3718dacae227b6e369692..d7dfb1da70f2c1a4f8861dadd1cf71e205eaa5b4 100644
--- a/openair3/NAS/UE/ESM/esm_ebr_context.h
+++ b/openair3/NAS/UE/ESM/esm_ebr_context.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_ip.c b/openair3/NAS/UE/ESM/esm_ip.c
index 0743307f6e65d99f24146836019e33403501d079..55be45d182f9a9d9cde15a71d5c8f60026ef294e 100644
--- a/openair3/NAS/UE/ESM/esm_ip.c
+++ b/openair3/NAS/UE/ESM/esm_ip.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_main.c b/openair3/NAS/UE/ESM/esm_main.c
index 6c110abb52ea34f708e278198a6e37a5b577f118..288e7486796f68a4efa0ce3b5af16ba34cf9555f 100644
--- a/openair3/NAS/UE/ESM/esm_main.c
+++ b/openair3/NAS/UE/ESM/esm_main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_main.h b/openair3/NAS/UE/ESM/esm_main.h
index 42381c8d5b15b89d97ab2d008289dd40f5768a9b..6e6ecc0db4668b806449ecab5f2c90171adb9c48 100644
--- a/openair3/NAS/UE/ESM/esm_main.h
+++ b/openair3/NAS/UE/ESM/esm_main.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_proc.h b/openair3/NAS/UE/ESM/esm_proc.h
index 3d7260b83b7400c8a8d140dc648c7937fa9c6194..941cfa620db3f35fc87a2787a65238f8a29f34b1 100644
--- a/openair3/NAS/UE/ESM/esm_proc.h
+++ b/openair3/NAS/UE/ESM/esm_proc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_pt.c b/openair3/NAS/UE/ESM/esm_pt.c
index 9f8e948954ba7537e2abf6ada2303ef8e046ebc3..c372ad25f4554db093ccfc16b8f2d8938d6bb251 100644
--- a/openair3/NAS/UE/ESM/esm_pt.c
+++ b/openair3/NAS/UE/ESM/esm_pt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/ESM/esm_pt.h b/openair3/NAS/UE/ESM/esm_pt.h
index 8b8693efdaf6bb6d78130e8b4c817a383af27640..3179e0f47b7f044e105e2730cebf96859ccf7fa6 100644
--- a/openair3/NAS/UE/ESM/esm_pt.h
+++ b/openair3/NAS/UE/ESM/esm_pt.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/UEprocess.c b/openair3/NAS/UE/UEprocess.c
index 35d1b864898638bf469c29344e210952faa7bdba..6a70911e21d830616ec37303eb7ce981a72149b2 100644
--- a/openair3/NAS/UE/UEprocess.c
+++ b/openair3/NAS/UE/UEprocess.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_itti_messaging.c b/openair3/NAS/UE/nas_itti_messaging.c
index b6b2126dfb4800863a44473ac6dddb157416cd2b..0389106ec35e5a705a27352c4de8838efb74557a 100644
--- a/openair3/NAS/UE/nas_itti_messaging.c
+++ b/openair3/NAS/UE/nas_itti_messaging.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_itti_messaging.h b/openair3/NAS/UE/nas_itti_messaging.h
index f4f1f184143cc7e64f54293f04e9bb731da07b12..d958317e5a1301a87a30fc85e891738926b7ae2c 100644
--- a/openair3/NAS/UE/nas_itti_messaging.h
+++ b/openair3/NAS/UE/nas_itti_messaging.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_network.c b/openair3/NAS/UE/nas_network.c
index 6ca4a34c7ffaa13b85d9cabe8dd4f160f84fa72c..f7a292df3f8c6f3882529c7cc477355c83ef3bc2 100644
--- a/openair3/NAS/UE/nas_network.c
+++ b/openair3/NAS/UE/nas_network.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_network.h b/openair3/NAS/UE/nas_network.h
index fb05c8dd2a044b1c84a1ceb6c3891aa789960d60..1c13d67b633a22fc78f4b4de8d8f9cf66406328e 100644
--- a/openair3/NAS/UE/nas_network.h
+++ b/openair3/NAS/UE/nas_network.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_parser.c b/openair3/NAS/UE/nas_parser.c
index 148315eaa261a4bc6b81630f28740ae628853242..d62ebc352934786457e8837a3abe56e2f799ff75 100644
--- a/openair3/NAS/UE/nas_parser.c
+++ b/openair3/NAS/UE/nas_parser.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_parser.h b/openair3/NAS/UE/nas_parser.h
index b799f3a3f495a5d8e4efa9c64c7b460fbba7f5ec..0924654e3fb84f9d7d82f9ef192f364e2d6333fc 100644
--- a/openair3/NAS/UE/nas_parser.h
+++ b/openair3/NAS/UE/nas_parser.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_proc.c b/openair3/NAS/UE/nas_proc.c
index 97ecea8e5a7b4ca09b8eeb9653e7797ce021d73f..6312a7dc97225278ca01cd809f16b6186959b74e 100644
--- a/openair3/NAS/UE/nas_proc.c
+++ b/openair3/NAS/UE/nas_proc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_proc.h b/openair3/NAS/UE/nas_proc.h
index bf8dec9e58a19e81986a3d0eb4f598ea9ae5ea47..4e653549ae0698826f0fb69d41052a5fbbdc2429 100644
--- a/openair3/NAS/UE/nas_proc.h
+++ b/openair3/NAS/UE/nas_proc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_ue_task.c b/openair3/NAS/UE/nas_ue_task.c
index da9ae8879d90723902ad50d559f27a3e21aa022c..e41156d113113dba84c1e5012e8ce045c7858e79 100644
--- a/openair3/NAS/UE/nas_ue_task.c
+++ b/openair3/NAS/UE/nas_ue_task.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_ue_task.h b/openair3/NAS/UE/nas_ue_task.h
index 90ef26bd80ffbab5fdd6eac4d00938a8e4fcf706..c9890719cbcf51793c092a3c9d1a88eb2d5adc9f 100644
--- a/openair3/NAS/UE/nas_ue_task.h
+++ b/openair3/NAS/UE/nas_ue_task.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_user.c b/openair3/NAS/UE/nas_user.c
index b698e4d682dc4923a26e3793d7f111aedc0cda49..d3467eddd518349d3f8fc527bd6c27574870daeb 100644
--- a/openair3/NAS/UE/nas_user.c
+++ b/openair3/NAS/UE/nas_user.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/nas_user.h b/openair3/NAS/UE/nas_user.h
index eb7f94a671a0569b988d149fb2ff01fa6fa98235..1ded438ddd1c5982f42c10d3eb3121f2f1eb915a 100644
--- a/openair3/NAS/UE/nas_user.h
+++ b/openair3/NAS/UE/nas_user.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/NAS/UE/user_defs.h b/openair3/NAS/UE/user_defs.h
index c27cf1320ee1708e0f9d9e03760f6030e2e18728..5143a939b09b2986f996d8b9a68bf80c0cb01bf4 100644
--- a/openair3/NAS/UE/user_defs.h
+++ b/openair3/NAS/UE/user_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py b/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
index 021e3f3cdb81c6016c2edf8571b7493efb672cdf..4603e869a658e1f9e83ecfdd768aea47c81c4d41 100644
--- a/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
+++ b/openair3/S1AP/MESSAGES/ASN1/asn1tostruct.py
@@ -38,7 +38,7 @@ def outputHeaderToFile(f, filename):
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_common.c b/openair3/S1AP/s1ap_common.c
index 2e4c31533de0e570e67a05d7df0d9564a1540f76..0bd132a228625f4371d97bd3ef9b2ffc1779ec85 100644
--- a/openair3/S1AP/s1ap_common.c
+++ b/openair3/S1AP/s1ap_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_common.h b/openair3/S1AP/s1ap_common.h
index 8e5e5c033342f3f36704c37e522f94df49a8986e..003bdd2d62345371bf57fb520bf4ce545330bafb 100644
--- a/openair3/S1AP/s1ap_common.h
+++ b/openair3/S1AP/s1ap_common.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB.c b/openair3/S1AP/s1ap_eNB.c
index 65b82055a34a2bfb45b027cd2002d2f939436647..08a18b629e0f58ccd075247f83c8832885a78230 100644
--- a/openair3/S1AP/s1ap_eNB.c
+++ b/openair3/S1AP/s1ap_eNB.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB.h b/openair3/S1AP/s1ap_eNB.h
index eca28a41016a54dbed37eda17d95b5c4111234e0..85bf00a4faaa9a3b11139fb2e38f2aab7d5aa3a9 100644
--- a/openair3/S1AP/s1ap_eNB.h
+++ b/openair3/S1AP/s1ap_eNB.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_context_management_procedures.c b/openair3/S1AP/s1ap_eNB_context_management_procedures.c
index 19aa8516b78366d71fd0b7b173d0f688acbf9e1e..49c5ed28acdbc8b1fdf82edcc05f52a6d2cbbb39 100644
--- a/openair3/S1AP/s1ap_eNB_context_management_procedures.c
+++ b/openair3/S1AP/s1ap_eNB_context_management_procedures.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_context_management_procedures.h b/openair3/S1AP/s1ap_eNB_context_management_procedures.h
index 3e045a71ed05469513f925a8b8340b23394c3c25..c8f7532023867e558b3b7b81fc3110e712a43b6f 100644
--- a/openair3/S1AP/s1ap_eNB_context_management_procedures.h
+++ b/openair3/S1AP/s1ap_eNB_context_management_procedures.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_decoder.c b/openair3/S1AP/s1ap_eNB_decoder.c
index 12a494106ebd2cdbadb7a8cf1ab3687a725d82da..f8daf6c67a7582983e26505a3a63699c5e9ef000 100644
--- a/openair3/S1AP/s1ap_eNB_decoder.c
+++ b/openair3/S1AP/s1ap_eNB_decoder.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_decoder.h b/openair3/S1AP/s1ap_eNB_decoder.h
index 1585dc26303797c5c2f85eb96ff4235af5c23f63..f321f8227f14fc550ee944c7ef2871770252ec88 100644
--- a/openair3/S1AP/s1ap_eNB_decoder.h
+++ b/openair3/S1AP/s1ap_eNB_decoder.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_default_values.h b/openair3/S1AP/s1ap_eNB_default_values.h
index 827f3a80831a50ea7097b17464fae40e234f56e0..44521e8dbf2905c7e5fa418e28b31e0d632b9c13 100644
--- a/openair3/S1AP/s1ap_eNB_default_values.h
+++ b/openair3/S1AP/s1ap_eNB_default_values.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_defs.h b/openair3/S1AP/s1ap_eNB_defs.h
index 27a0209cc59f10383b77c267345c0f05da15580c..11e64703ec1625538daf17f375265e7380c63e85 100644
--- a/openair3/S1AP/s1ap_eNB_defs.h
+++ b/openair3/S1AP/s1ap_eNB_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_encoder.c b/openair3/S1AP/s1ap_eNB_encoder.c
index 17a5be7dc6a658d468a729223c53249c8ebafee5..4ab2f1f317f2cbee3f55404c53ed705cce10f158 100644
--- a/openair3/S1AP/s1ap_eNB_encoder.c
+++ b/openair3/S1AP/s1ap_eNB_encoder.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_encoder.h b/openair3/S1AP/s1ap_eNB_encoder.h
index 6231958101558017301f741b16b0317f3dc22d6d..5b135a3f76c2c996811d338f1c53f8aac34cedd1 100644
--- a/openair3/S1AP/s1ap_eNB_encoder.h
+++ b/openair3/S1AP/s1ap_eNB_encoder.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_handlers.c b/openair3/S1AP/s1ap_eNB_handlers.c
index 3896cf37aecd19e01efde832bc4f981c6461ea72..186f034644eda4802ee90aa58fc124827b444a0e 100644
--- a/openair3/S1AP/s1ap_eNB_handlers.c
+++ b/openair3/S1AP/s1ap_eNB_handlers.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_handlers.h b/openair3/S1AP/s1ap_eNB_handlers.h
index ef36b908cc0eeb08e2744e205dc4cdfb3c71750b..d0e93faa4d23b56d06be7aca06116fd2b93b5098 100644
--- a/openair3/S1AP/s1ap_eNB_handlers.h
+++ b/openair3/S1AP/s1ap_eNB_handlers.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_itti_messaging.c b/openair3/S1AP/s1ap_eNB_itti_messaging.c
index 352cb48d61995d608aa8bf381416f20cd805252b..a0cdfd2dbc7b9b321d06f385567809870a9f1504 100644
--- a/openair3/S1AP/s1ap_eNB_itti_messaging.c
+++ b/openair3/S1AP/s1ap_eNB_itti_messaging.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_itti_messaging.h b/openair3/S1AP/s1ap_eNB_itti_messaging.h
index d8572eef898513ca5db7deb83802055b8963e794..cd6b3cebcc0bc07cdbe3537310d9f4fe395d3168 100644
--- a/openair3/S1AP/s1ap_eNB_itti_messaging.h
+++ b/openair3/S1AP/s1ap_eNB_itti_messaging.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_management_procedures.c b/openair3/S1AP/s1ap_eNB_management_procedures.c
index d5f321770d01ec12b6de19f634c2228bb405330e..fc7ae70e4902073e3a5ceb70ccd9b4b93b4be2a8 100644
--- a/openair3/S1AP/s1ap_eNB_management_procedures.c
+++ b/openair3/S1AP/s1ap_eNB_management_procedures.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_management_procedures.h b/openair3/S1AP/s1ap_eNB_management_procedures.h
index 73d8698c164b6f114050e37387b2f7ea6247dfee..83df7f8919e179d0c43154fb88b2bcd01758b126 100644
--- a/openair3/S1AP/s1ap_eNB_management_procedures.h
+++ b/openair3/S1AP/s1ap_eNB_management_procedures.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c
index 426f38004a845942a24378bbd9106cbc2264f0ba..ea0dbcb70af653217564fec618977d56de8fb686 100644
--- a/openair3/S1AP/s1ap_eNB_nas_procedures.c
+++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.h b/openair3/S1AP/s1ap_eNB_nas_procedures.h
index 6ac4b06111b17c25099154d7d3576b32b817243e..269387257653e30efef12d630f58fd9b48bcde44 100644
--- a/openair3/S1AP/s1ap_eNB_nas_procedures.h
+++ b/openair3/S1AP/s1ap_eNB_nas_procedures.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_nnsf.c b/openair3/S1AP/s1ap_eNB_nnsf.c
index 3d4c96648d34b3411502e2adf807af15208a602f..8b7d65cb011194b3846dea521bf0e6bcd0c4bd89 100644
--- a/openair3/S1AP/s1ap_eNB_nnsf.c
+++ b/openair3/S1AP/s1ap_eNB_nnsf.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_nnsf.h b/openair3/S1AP/s1ap_eNB_nnsf.h
index 38d93febd8a685f721ada68fa1880bbdc956ad63..78405f34d1b17e0995cfa70e91c57b98cf087786 100644
--- a/openair3/S1AP/s1ap_eNB_nnsf.h
+++ b/openair3/S1AP/s1ap_eNB_nnsf.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_overload.c b/openair3/S1AP/s1ap_eNB_overload.c
index a56242d36387a722deb6f668b1f649ee4b54d7d2..82167bfeeb5112f9ac0712a24679f89f56358124 100644
--- a/openair3/S1AP/s1ap_eNB_overload.c
+++ b/openair3/S1AP/s1ap_eNB_overload.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_overload.h b/openair3/S1AP/s1ap_eNB_overload.h
index e15b241b9db49d1c66ff335cc4c09dc0bf3b1cb3..1b0ee443de3a23b07c8f6db71310501bc3c0f52d 100644
--- a/openair3/S1AP/s1ap_eNB_overload.h
+++ b/openair3/S1AP/s1ap_eNB_overload.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_trace.c b/openair3/S1AP/s1ap_eNB_trace.c
index 55ec5750f19eb687609a131695c091f823394b40..e640c9292a856e1cac8d99a38fc2a33cb7ecc8fb 100644
--- a/openair3/S1AP/s1ap_eNB_trace.c
+++ b/openair3/S1AP/s1ap_eNB_trace.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_trace.h b/openair3/S1AP/s1ap_eNB_trace.h
index fc321ce59464b4d10b0f40088cf4993a9ad1dfea..922197afb42d9cd120494365d4de17b4275f5dfb 100644
--- a/openair3/S1AP/s1ap_eNB_trace.h
+++ b/openair3/S1AP/s1ap_eNB_trace.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_ue_context.c b/openair3/S1AP/s1ap_eNB_ue_context.c
index 8dc050ec8b4c8d005be7ff7f7171f0a1cc66ca4a..9cc8910ac5a648115cef1b0823be654cb127ec19 100644
--- a/openair3/S1AP/s1ap_eNB_ue_context.c
+++ b/openair3/S1AP/s1ap_eNB_ue_context.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/S1AP/s1ap_eNB_ue_context.h b/openair3/S1AP/s1ap_eNB_ue_context.h
index 8c9ce6dea60314ae7c738e9c278aef07d0895245..d78c6f7f1a97d42e2654de02b5fb921439c98f21 100644
--- a/openair3/S1AP/s1ap_eNB_ue_context.h
+++ b/openair3/S1AP/s1ap_eNB_ue_context.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_common.c b/openair3/SCTP/sctp_common.c
index f384d832ffaf0637187b4a2718c0db5b2127ee16..c467290b3698b9687fb858b9df7e745262c74034 100644
--- a/openair3/SCTP/sctp_common.c
+++ b/openair3/SCTP/sctp_common.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_common.h b/openair3/SCTP/sctp_common.h
index dc0757d30fe7c9de9c8604e3b2ccd63f5c8e9f08..f88c07730ce4ab614097d795f959b36673bbb88c 100644
--- a/openair3/SCTP/sctp_common.h
+++ b/openair3/SCTP/sctp_common.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_default_values.h b/openair3/SCTP/sctp_default_values.h
index d22d50605a2949a8374f6f332eca93205c6259ed..5008ea0b72bf6d9202bc633f44595e3b415eccce 100644
--- a/openair3/SCTP/sctp_default_values.h
+++ b/openair3/SCTP/sctp_default_values.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_eNB_defs.h b/openair3/SCTP/sctp_eNB_defs.h
index 8e2347f80d7674dbb52074bafdbe66de807a5f15..9d3b4119b5a60c381b9d4a14c469b1aeb7b38fb7 100644
--- a/openair3/SCTP/sctp_eNB_defs.h
+++ b/openair3/SCTP/sctp_eNB_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_eNB_itti_messaging.c b/openair3/SCTP/sctp_eNB_itti_messaging.c
index 1725bb5fa7b3fce3627f0c8c6cdf755261868440..3517c0597bb54bcba72bdcbdb680ebf21ef03d0d 100644
--- a/openair3/SCTP/sctp_eNB_itti_messaging.c
+++ b/openair3/SCTP/sctp_eNB_itti_messaging.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_eNB_itti_messaging.h b/openair3/SCTP/sctp_eNB_itti_messaging.h
index 01c3b209e284166bf436a968e198024b8fb8e5e3..665c5f0e663ed111f1ea9abcfedc89353e872f9a 100644
--- a/openair3/SCTP/sctp_eNB_itti_messaging.h
+++ b/openair3/SCTP/sctp_eNB_itti_messaging.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_eNB_task.c b/openair3/SCTP/sctp_eNB_task.c
index 1f166af74ccbe25d786e0189cec67f2fbb58ee94..7771cab712f22b747f7dbc451e98c01495250004 100644
--- a/openair3/SCTP/sctp_eNB_task.c
+++ b/openair3/SCTP/sctp_eNB_task.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_eNB_task.h b/openair3/SCTP/sctp_eNB_task.h
index 333aa20f5852770ee9515f95554cf776833048c2..31cb6831025e5eea879ebee904f24cc5dbf14276 100644
--- a/openair3/SCTP/sctp_eNB_task.h
+++ b/openair3/SCTP/sctp_eNB_task.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_primitives_client.c b/openair3/SCTP/sctp_primitives_client.c
index 43ca200c5a3c568ea7a468bf94c99ca90b8eb9f3..bb71a854e168d6782935bde1f92df2bd84c58076 100644
--- a/openair3/SCTP/sctp_primitives_client.c
+++ b/openair3/SCTP/sctp_primitives_client.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SCTP/sctp_primitives_client.h b/openair3/SCTP/sctp_primitives_client.h
index a50a8f1de6bedbb3401421ec5c2a7dc2b0e23bab..bec4d3ed95ac2e0d22702f03fe0f25a528a1b495 100644
--- a/openair3/SCTP/sctp_primitives_client.h
+++ b/openair3/SCTP/sctp_primitives_client.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/kdf.c b/openair3/SECU/kdf.c
index 98dfc55ae8acd922e9c71f1714e49145da952e89..0717d17c59dbcac17a4e553eaa1c50902998bbc1 100644
--- a/openair3/SECU/kdf.c
+++ b/openair3/SECU/kdf.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/key_nas_deriver.c b/openair3/SECU/key_nas_deriver.c
index 6268c41d4bb2c0098e77002338ff7b519cbcaedc..59546be0813c46f472dbc485173c5d72357770f7 100644
--- a/openair3/SECU/key_nas_deriver.c
+++ b/openair3/SECU/key_nas_deriver.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/key_nas_encryption.c b/openair3/SECU/key_nas_encryption.c
index 799aa020c1efe880c84bc0fdc64a5c08a8306f94..aa641137efbf987111fceb5cf016319209c83679 100644
--- a/openair3/SECU/key_nas_encryption.c
+++ b/openair3/SECU/key_nas_encryption.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/nas_stream_eea1.c b/openair3/SECU/nas_stream_eea1.c
index 095838da3759e0c24f49b4d451b598407055b674..efe924851f53a095330e40775a728c01f2ccbe96 100644
--- a/openair3/SECU/nas_stream_eea1.c
+++ b/openair3/SECU/nas_stream_eea1.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/nas_stream_eea2.c b/openair3/SECU/nas_stream_eea2.c
index 37f2e298fb2ff710ea515af1df434b8c45db6de0..0cd3d9176169fa21d3cd669e16de87b667e2c8e9 100644
--- a/openair3/SECU/nas_stream_eea2.c
+++ b/openair3/SECU/nas_stream_eea2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/nas_stream_eia1.c b/openair3/SECU/nas_stream_eia1.c
index 6f4991d63d4a406ee750e672c8597435ce393b30..629d40d612fc5323cd8756fc185d2240e17c9a91 100644
--- a/openair3/SECU/nas_stream_eia1.c
+++ b/openair3/SECU/nas_stream_eia1.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/nas_stream_eia2.c b/openair3/SECU/nas_stream_eia2.c
index 0c31767022dd797fc6e6ea8eeec9a71be69da479..a2ec6a6dd43a39c11c0677090eb854cf36bdc1a1 100644
--- a/openair3/SECU/nas_stream_eia2.c
+++ b/openair3/SECU/nas_stream_eia2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/rijndael.c b/openair3/SECU/rijndael.c
index facdced45a60d6c6baaa236daec67a8f53166db5..c245af80f19fdc233f795b4ce6cd432cf772ee0c 100644
--- a/openair3/SECU/rijndael.c
+++ b/openair3/SECU/rijndael.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/rijndael.h b/openair3/SECU/rijndael.h
index c2146c85ff5d3f21a61e5852c8da6fec8003548b..f0c090cc3f92c24bc12510ea85a4dbc85b582403 100644
--- a/openair3/SECU/rijndael.h
+++ b/openair3/SECU/rijndael.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/secu_defs.h b/openair3/SECU/secu_defs.h
index 7f8aa20e1798a0c62e7925a701cce02e632b4c35..4130098c991199bc2ef916bb4680ac9c54f62a11 100644
--- a/openair3/SECU/secu_defs.h
+++ b/openair3/SECU/secu_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/snow3g.c b/openair3/SECU/snow3g.c
index 89304b4aab4f3250fbbe9482040a658c4089405b..faab0135413a953956aea033ab00acfaea722691 100644
--- a/openair3/SECU/snow3g.c
+++ b/openair3/SECU/snow3g.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/SECU/snow3g.h b/openair3/SECU/snow3g.h
index 26b70e23859b4683e4feae01e12167c4b1b67fc8..fcad5e9f8d358ee374b9225ced9904b5ca7a96d8 100644
--- a/openair3/SECU/snow3g.h
+++ b/openair3/SECU/snow3g.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.c b/openair3/TEST/EPC_TEST/generate_scenario.c
index 097cf37563bf3748d73f5d13425333a2855d753f..b8d9d9c5885d2a0c19eea56c0d1413db046e778e 100644
--- a/openair3/TEST/EPC_TEST/generate_scenario.c
+++ b/openair3/TEST/EPC_TEST/generate_scenario.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/generate_scenario.h b/openair3/TEST/EPC_TEST/generate_scenario.h
index 96b2adc7a304fbdcfec230e68add3b07dc80fd01..09fa5318ef06dc9f9d17ba8898ea85b990bc80e9 100644
--- a/openair3/TEST/EPC_TEST/generate_scenario.h
+++ b/openair3/TEST/EPC_TEST/generate_scenario.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario.c b/openair3/TEST/EPC_TEST/play_scenario.c
index 05c99d96ee6af91eab662294fb6aaf53147211fe..edb4323d5f732bcb8d78fd2cbc873ba214a1cef4 100644
--- a/openair3/TEST/EPC_TEST/play_scenario.c
+++ b/openair3/TEST/EPC_TEST/play_scenario.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario.h b/openair3/TEST/EPC_TEST/play_scenario.h
index a3a900cf7e35ce2326f8618e37ad6000840996e6..f9601fe9044aca63d522b3e4085220bec52b8d18 100644
--- a/openair3/TEST/EPC_TEST/play_scenario.h
+++ b/openair3/TEST/EPC_TEST/play_scenario.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_decode.c b/openair3/TEST/EPC_TEST/play_scenario_decode.c
index ec5408e7696405e7dfffbe19212947955a985ac7..be63a171c5374ddeb6fa8457b9465a1a9b632155 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_decode.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_decode.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_display.c b/openair3/TEST/EPC_TEST/play_scenario_display.c
index 294f277e7d5a194d22e2f1120b8a1f9d090ef822..e10cbdf9bf1b285d6965dcb77c3f4db80b284c84 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_display.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_display.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_fsm.c b/openair3/TEST/EPC_TEST/play_scenario_fsm.c
index ba8edc185fb04f984f74969c704b96a9dfc584e1..1589b83cae6b58bc651f4b0debaed2e59b5a3505 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_fsm.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_fsm.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_parse.c b/openair3/TEST/EPC_TEST/play_scenario_parse.c
index 8fb05cc9125f50d06d87e8d31c4d1cd8eb226f6f..040db30398495f51f3faf25b5bf6fb2a18604806 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_parse.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_parse.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c
index f1bbe393be8896fd2a6066b78a6073e1a677ee37..f10126d5b55928aaba1641fc24c606e1e4fabf32 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_s1ap.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
index f99f0b07763e96a77dae85987a7df9e033aefc91..08f79ef206dc245cc9ad20cbd2c4da6456d0f0cd 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_compare_ie.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h b/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
index d7c1899c517eb7856ed222fc5f0503e8a112ddd5..532e14bb1d382c00b23cc6557c64453c59be1672 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
+++ b/openair3/TEST/EPC_TEST/play_scenario_s1ap_eNB_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/EPC_TEST/play_scenario_sctp.c b/openair3/TEST/EPC_TEST/play_scenario_sctp.c
index 5bc4f918beb3378988ad181b51c7cff19108277c..8a9bc491c8d443a77ca03c2dbbb8b40f12429336 100644
--- a/openair3/TEST/EPC_TEST/play_scenario_sctp.c
+++ b/openair3/TEST/EPC_TEST/play_scenario_sctp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/Makefile.am b/openair3/TEST/Makefile.am
index 55f7607585530498b5d7e8d307513be3739ca0b6..211c7e62f2f9c05c66474a7dd4f7046b7ad74af8 100644
--- a/openair3/TEST/Makefile.am
+++ b/openair3/TEST/Makefile.am
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/openair3/TEST/oaisim_mme_client_test.c b/openair3/TEST/oaisim_mme_client_test.c
index 75d163de210fc18871b6ca0a160a9b197e0d46de..0e89511865c71e89341cc4d27dfe144e2896ac25 100644
--- a/openair3/TEST/oaisim_mme_client_test.c
+++ b/openair3/TEST/oaisim_mme_client_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_itti_test.c b/openair3/TEST/oaisim_mme_itti_test.c
index e8de70f8e6ad1a09d257a410d811afce10b9a94c..243023e6103caeaaa18b352dc215bf9a2bffd74b 100644
--- a/openair3/TEST/oaisim_mme_itti_test.c
+++ b/openair3/TEST/oaisim_mme_itti_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_list_benchmark.c b/openair3/TEST/oaisim_mme_list_benchmark.c
index 0d5b8305b4335bba06eb265a44400c53c7e2cd1a..bfd9274b8a83bf937fa66595af1d194b329c5531 100644
--- a/openair3/TEST/oaisim_mme_list_benchmark.c
+++ b/openair3/TEST/oaisim_mme_list_benchmark.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_s1ap_test.c b/openair3/TEST/oaisim_mme_s1ap_test.c
index 968029191885ef5037717de854ca9fe7cc40b9ff..1f7c1d3bbf803f406feb710f4bed60b33e4271ed 100644
--- a/openair3/TEST/oaisim_mme_s1ap_test.c
+++ b/openair3/TEST/oaisim_mme_s1ap_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_sctp_test.c b/openair3/TEST/oaisim_mme_sctp_test.c
index 7fb56940c46d0160326b3498125739fca2c79c77..d810f9ee8f8f19936d14cb58f8c911ead3f5e1ca 100644
--- a/openair3/TEST/oaisim_mme_sctp_test.c
+++ b/openair3/TEST/oaisim_mme_sctp_test.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c.c b/openair3/TEST/oaisim_mme_test_s1c.c
index 93275ea9feeec524716b69966b649edc508e5b2e..1f130af0d3631c052da335f450e2e3922b69a867 100644
--- a/openair3/TEST/oaisim_mme_test_s1c.c
+++ b/openair3/TEST/oaisim_mme_test_s1c.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c.h b/openair3/TEST/oaisim_mme_test_s1c.h
index 7075f75515911c0362ad262db86840401e9fce2a..91e4472caf0ed2dccb4bf80f942072ebde9a3e6f 100644
--- a/openair3/TEST/oaisim_mme_test_s1c.h
+++ b/openair3/TEST/oaisim_mme_test_s1c.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c_s1ap.c b/openair3/TEST/oaisim_mme_test_s1c_s1ap.c
index 16a22d3cb10dae4a48be565a16ea14231153338c..993fad2f89df6ab11e49dacfd8f82abcccded082 100644
--- a/openair3/TEST/oaisim_mme_test_s1c_s1ap.c
+++ b/openair3/TEST/oaisim_mme_test_s1c_s1ap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c_s1ap.h b/openair3/TEST/oaisim_mme_test_s1c_s1ap.h
index 72d808be9cd3fcfbc3acd8348ac2b465300e6d65..3633f11e867424c2d4dc904076f99d43aff9f10e 100644
--- a/openair3/TEST/oaisim_mme_test_s1c_s1ap.h
+++ b/openair3/TEST/oaisim_mme_test_s1c_s1ap.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c_scenario.c b/openair3/TEST/oaisim_mme_test_s1c_scenario.c
index 25698edd1f89c46e6734a1745aafcdccb68fb8d4..60d74866c8cfa3b4bb8fb26127b9c6a7bb8fdb8c 100644
--- a/openair3/TEST/oaisim_mme_test_s1c_scenario.c
+++ b/openair3/TEST/oaisim_mme_test_s1c_scenario.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c_scenario.h b/openair3/TEST/oaisim_mme_test_s1c_scenario.h
index 82950a93551170ba95729e18c1e612f7d06f2ae7..8c33f457418e8fa67ba0a84cc940a66634206d7d 100644
--- a/openair3/TEST/oaisim_mme_test_s1c_scenario.h
+++ b/openair3/TEST/oaisim_mme_test_s1c_scenario.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/oaisim_mme_test_s1c_scenario1.c b/openair3/TEST/oaisim_mme_test_s1c_scenario1.c
index 4589b2619180ec133132c259cdaeff5bd80bb555..87a63b876a3d2e774b6418b88dfc09f3f6c9e312 100644
--- a/openair3/TEST/oaisim_mme_test_s1c_scenario1.c
+++ b/openair3/TEST/oaisim_mme_test_s1c_scenario1.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_aes128_cmac_encrypt.c b/openair3/TEST/test_aes128_cmac_encrypt.c
index 085e00064782a44fa9e88af9e14a06a1da251666..666271d4e02706013ed95ff8732abad5bab9272c 100644
--- a/openair3/TEST/test_aes128_cmac_encrypt.c
+++ b/openair3/TEST/test_aes128_cmac_encrypt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_aes128_ctr_decrypt.c b/openair3/TEST/test_aes128_ctr_decrypt.c
index a30dc6c2f21c0d775cdf23775d4df44002265e01..928853c9ba67c3e2b5745c31d508fd747d321344 100644
--- a/openair3/TEST/test_aes128_ctr_decrypt.c
+++ b/openair3/TEST/test_aes128_ctr_decrypt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_aes128_ctr_encrypt.c b/openair3/TEST/test_aes128_ctr_encrypt.c
index 6c264a98a62653ff84a41482491d60469b766fff..071aa603a9aad4d5478a8ae3587a839db7dff177 100644
--- a/openair3/TEST/test_aes128_ctr_encrypt.c
+++ b/openair3/TEST/test_aes128_ctr_encrypt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_kdf.c b/openair3/TEST/test_kdf.c
index 42d91f48a588718c2a2dd214bb763d60ad8368f9..50a2ad347ab70d957778d86497cb953cf9e269ca 100644
--- a/openair3/TEST/test_kdf.c
+++ b/openair3/TEST/test_kdf.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_s1ap.c b/openair3/TEST/test_s1ap.c
index dec21ee1b6f59218efba56ad8db488b37505109a..a366796f77da1e201e73782be16e69da225f19f1 100644
--- a/openair3/TEST/test_s1ap.c
+++ b/openair3/TEST/test_s1ap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu.c b/openair3/TEST/test_secu.c
index 2b1b101ae0ea47fd200a8857cdde2a092a25c624..244999e9be230ea47ecc58f98b5a0088758aef02 100644
--- a/openair3/TEST/test_secu.c
+++ b/openair3/TEST/test_secu.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_kenb.c b/openair3/TEST/test_secu_kenb.c
index edab024549681c85370831818a4956621d4af834..9323062a1df5aea2b84c800f51549f63dd4c44ac 100644
--- a/openair3/TEST/test_secu_kenb.c
+++ b/openair3/TEST/test_secu_kenb.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas.c b/openair3/TEST/test_secu_knas.c
index bcfac758ecdb6bfc7092c676864d6ba3e99f95e4..bc48eaaad191c9f3dacaffb69bfb8f76b0349a1b 100644
--- a/openair3/TEST/test_secu_knas.c
+++ b/openair3/TEST/test_secu_knas.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas_encrypt_eea1.c b/openair3/TEST/test_secu_knas_encrypt_eea1.c
index 3335decb6e89f54e4e108eb3e51570f793d85203..aa1b57a6bab129a1b2cb840c50476bba6675d82d 100644
--- a/openair3/TEST/test_secu_knas_encrypt_eea1.c
+++ b/openair3/TEST/test_secu_knas_encrypt_eea1.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas_encrypt_eea2.c b/openair3/TEST/test_secu_knas_encrypt_eea2.c
index e300b3b0eac4b9b7d688a9ba03bf445162dda24e..78a2b6fecc9edfee3d9d2ca6b395084ebf0e3055 100644
--- a/openair3/TEST/test_secu_knas_encrypt_eea2.c
+++ b/openair3/TEST/test_secu_knas_encrypt_eea2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas_encrypt_eia1.c b/openair3/TEST/test_secu_knas_encrypt_eia1.c
index fbfbc35b71b1c62e69e586bdda331d468105e93a..b28d4f9888a0d17b3312157213fb3f90210e5927 100644
--- a/openair3/TEST/test_secu_knas_encrypt_eia1.c
+++ b/openair3/TEST/test_secu_knas_encrypt_eia1.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas_encrypt_eia2.c b/openair3/TEST/test_secu_knas_encrypt_eia2.c
index 7e7517be77808a301c66ea6fca21150e2a4f39c4..9a9b7e102ee69f4f0f1ba4c237c8226c524de49d 100644
--- a/openair3/TEST/test_secu_knas_encrypt_eia2.c
+++ b/openair3/TEST/test_secu_knas_encrypt_eia2.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/TEST/test_secu_knas_stream_int.c b/openair3/TEST/test_secu_knas_stream_int.c
index 6773397085056034d28c7021a8a2e5fc75dbf86e..2fdf5fc791b2f2e7a0229438bf2f952c7ccc15f9 100644
--- a/openair3/TEST/test_secu_knas_stream_int.c
+++ b/openair3/TEST/test_secu_knas_stream_int.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UDP/udp_eNB_task.c b/openair3/UDP/udp_eNB_task.c
index de8a632111a446970db0a3a5559511a97013c46c..868d86ad9cec84dcb97a55749ce8131256b296ca 100644
--- a/openair3/UDP/udp_eNB_task.c
+++ b/openair3/UDP/udp_eNB_task.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -427,7 +427,7 @@ on_error:
   return NULL;
 }
 
-int udp_enb_init()
+int udp_enb_init(void)
 {
   LOG_I(UDP_, "Initializing UDP task interface\n");
   STAILQ_INIT(&udp_socket_list);
diff --git a/openair3/UDP/udp_eNB_task.h b/openair3/UDP/udp_eNB_task.h
index 2265a7a8b83bca6a71c549d8970ae7765c3aefa1..658516212574efbfb5115444d350c47e0c42828d 100644
--- a/openair3/UDP/udp_eNB_task.h
+++ b/openair3/UDP/udp_eNB_task.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/conversions.c b/openair3/UTILS/conversions.c
index 3b926de25905394b0bb9e98271f67922024cd6e9..2def84abb026a4d52780098602816d40cfa50660 100644
--- a/openair3/UTILS/conversions.c
+++ b/openair3/UTILS/conversions.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/conversions.h b/openair3/UTILS/conversions.h
index da8461b390312bf2a8b5ab33ea23e00af9e4f90c..00287341b2a19f06af32ae4a136d329b73d694b2 100644
--- a/openair3/UTILS/conversions.h
+++ b/openair3/UTILS/conversions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/enum_string.c b/openair3/UTILS/enum_string.c
index c4af7f9e0d3a0dbf685ba8fd4656d2b62c7c134c..c2eccc7a9e96fc5b099e83cd9b738ef1083aef71 100644
--- a/openair3/UTILS/enum_string.c
+++ b/openair3/UTILS/enum_string.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/enum_string.h b/openair3/UTILS/enum_string.h
index a16c33b71b936e98b7262bc63df0893540f9786f..7b53ab31e34e146addec1640416212e9aed679ac 100644
--- a/openair3/UTILS/enum_string.h
+++ b/openair3/UTILS/enum_string.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/log.c b/openair3/UTILS/log.c
index 9c7fe79ef8eeced4739579fb9775680b677cad65..5ddebd415c7e83f79248c7cbae5023641b5b84fe 100644
--- a/openair3/UTILS/log.c
+++ b/openair3/UTILS/log.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/log.h b/openair3/UTILS/log.h
index 729c12687a4908ae11aeddd49c8c810e6d8707fb..7b712df755437a9048c7204618ae5d4832c49f29 100644
--- a/openair3/UTILS/log.h
+++ b/openair3/UTILS/log.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/mcc_mnc_itu.c b/openair3/UTILS/mcc_mnc_itu.c
index 69ac1d90246c3d1ae6681011af93c34efca213ee..6b999c36df2b01e0abf8d4ab936e28fee5757aa2 100644
--- a/openair3/UTILS/mcc_mnc_itu.c
+++ b/openair3/UTILS/mcc_mnc_itu.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/mcc_mnc_itu.h b/openair3/UTILS/mcc_mnc_itu.h
index 22531aef4894e265498667d48dc0df8d4095a3f9..a6b7343b9938159e09041f2326c7921169add681 100644
--- a/openair3/UTILS/mcc_mnc_itu.h
+++ b/openair3/UTILS/mcc_mnc_itu.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/mme_config.c b/openair3/UTILS/mme_config.c
index 6b97cc674e7de02c9a209ae512aacf75d8752636..d2c25af10a25e5230cb69ac46e1ed9e3a5c0ea4d 100644
--- a/openair3/UTILS/mme_config.c
+++ b/openair3/UTILS/mme_config.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/mme_config.h b/openair3/UTILS/mme_config.h
index 448de959202df6ff06f9c2eb8ddeeb93d320a665..37b7dff8651359e6415351f3deee6bf30f1c70ab 100644
--- a/openair3/UTILS/mme_config.h
+++ b/openair3/UTILS/mme_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/openair3/UTILS/mme_default_values.h b/openair3/UTILS/mme_default_values.h
index 5c9ad7d3ecca1f74cbcd5eb1517f206b6acb9f01..6965c7c57c7f71fc9263aea610ed1163da478a15 100644
--- a/openair3/UTILS/mme_default_values.h
+++ b/openair3/UTILS/mme_default_values.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index ccc559231c2557d259a3b1482cca9e983bf202fe..5ded228f6bd91428a472344c79bfde84894201d8 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
index 11a4a98e57d266abce5390e02c1e3d0093c28d65..31a7173630801357386e9a478967ca68a20a8d4c 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c
index 1fb8b4f98133de5475712704b45aff651cca1758..eb9f80872e0093ec237ff34a3064cc8c332e8d95 100644
--- a/targets/ARCH/COMMON/common_lib.c
+++ b/targets/ARCH/COMMON/common_lib.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h
index 2603aa9b511e8bc5c81b69fbb43e09e4ca416a81..6214c81cc693b86c3de7235d4681c11bb22f2be7 100644
--- a/targets/ARCH/COMMON/common_lib.h
+++ b/targets/ARCH/COMMON/common_lib.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
index 604b260dde87bf6c6e9404fa5b365f480786ea9f..acb4c2ec9bfb7a8a7d6708c283356842f181ecf6 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
index 82abda4d8a544555e63421607f8ebbdc606f91f1..e323a9d5bca71f6c57fd7716b44d9233a7d8c484 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index f5bc5ea767818fcba6fb48b31db26cd7a606b20d..108c4ca069e07ee71c7b3625cb5b5b8f5c9740ad 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -116,8 +116,8 @@ int trx_eth_start(openair0_device *device) {
     */
 
     /* adjust MTU wrt number of samples per packet */
-    /*if(ethernet_tune (device,MTU_SIZE,UDP_IF4p5_PRACH_SIZE_BYTES)!=0)  return -1;
-     */
+    if(ethernet_tune (device,MTU_SIZE,UDP_IF4p5_PRACH_SIZE_BYTES)!=0)  return -1;
+     
 
 
     
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
index 27e32aff115eed85ac348e89d80c5ef60736b781..8eb0e1651fb9b3dbcf5551df05d545941891404e 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h b/targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
index 6d0a7c02ee77c7f4afb532a3c565e2246b1eaffc..95d00290271218aa2ed72d41f03baedcd1e1b679 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h
index b22cf1879b6736c1452cd23aa14c19846e95ed84..f2f20d38ff051ccab5e1d3953bbc96ea39547ccb 100644
--- a/targets/ARCH/EXMIMO/DEFS/openair_device.h
+++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h
index 0485c154f96f9e495f2f128f4c958326c719c31c..cfc393466859cebd853abd15edfb5dfbfc1f4b71 100644
--- a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h
+++ b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h
index 1665a76b081d90b1f6cf2900ee03cc1c3aa0e61c..c4adf28b82f79b006af744a7b1701a95a47e278e 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c
index 766bb6eb74993c023111574f70f9099421a2dbe1..7cf5c95ecb3e8c3abe92aba71054e45dfa15a37a 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/exmimo_fw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h
index 07e094b9664f81b689d02e6fe221e4ad23849b9e..5fc557e400629d9082c54a9c0f46269d3dcd0a22 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
index 5002cccc9836730bd89e03e0387a03f716b01b4e..b5ef864b3064df8b7260428b3b13ca8eb8be7cc0 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c
index 513adfaf96ba9ee8d64929559a70dadfd19570cb..cd21d94cb14fb223a87b3dcdee5fcbcc82031436 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/irq.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
index 706246b96e229eaae621bdb972aea6be998fd474..18dc9d846e438ea06f779fa40d6b37ffd7243e0f 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/module_main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h b/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h
index 3cbaacfdcadc67421ada0de3bc73d0edd019c178..7c21bc25fcc879b70aae9b6b29e733f32bf39d54 100644
--- a/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h
+++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h
index 1665a76b081d90b1f6cf2900ee03cc1c3aa0e61c..c4adf28b82f79b006af744a7b1701a95a47e278e 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/defs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c
index 6ce753cba65f02e90e47aa16a69690d6c43802b1..c6ffcb859b6f8cc6fc8f753761a3c2567cfb899b 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/exmimo_fw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h
index 07e094b9664f81b689d02e6fe221e4ad23849b9e..5fc557e400629d9082c54a9c0f46269d3dcd0a22 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/extern.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c
index 7e36b138e99410a70e3a14d27e46dab075d7ca8c..84bb83809784fb5c450bf7e5f24ed721c442c40e 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/fileops.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c
index 513adfaf96ba9ee8d64929559a70dadfd19570cb..cd21d94cb14fb223a87b3dcdee5fcbcc82031436 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/irq.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c b/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c
index afea3f707c2de2b29d9ea6dd19256de12b897871..3bc6f7376691cac550b22374894cf33ba94c2eef 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/module_main.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h b/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h
index 3cbaacfdcadc67421ada0de3bc73d0edd019c178..7c21bc25fcc879b70aae9b6b29e733f32bf39d54 100644
--- a/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h
+++ b/targets/ARCH/EXMIMO/DRIVER/exmimo3/vars.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c
index 93fe053ed1b2dbab89cb89ebda077aab83e196f2..e41b9bf6e937874133d7035a47769c867a30fbd0 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_dev.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c
index 0187959fab60600be306d1d84972dec13287e8b4..1abd44b019e577c24d666d29f1e08f56baec3195 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h
index 6cf700400ae94ebf91ffc9c13dd96b73d4c67d42..82cb69babaf0b200a914764e4e9c1f5d58ab13b4 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_drv.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c
index 69103db99b57f76300f82fe837c7cdd97e07864b..6d5fa38ce4c79a941cf8c3eaffcaf23bb48aeccf 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_fifos.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c
index 3f50766fccb151a1000c58bbdcbd7eebe384b62b..a2d4dccfb23d369dd9e4e394e5b9981a2fcddefa 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_ioctl.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c
index 065d8c9595f11323718a8cf58e442c70745d480e..48b17bbf2f7f4575f9c8561b50db2098d61b50a3 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_mmap.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c
index d46ff92a70c28d316721be804f84bfdd90551df2..bf1be1a68f0b1cf022890426b3bfe0e68e68ea56 100644
--- a/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c
+++ b/targets/ARCH/EXMIMO/DRIVER/telecomparistech/em1_rw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c
index 1e081ae2bb665618bc4bfa897ec94d7e1baeb449..46ad06f67e59dc374b9efafb98a8fc96d30c9be3 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/example.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
index 0b2c6afaa55c4f8ba347c7836ceaca4062b6c64f..449ac0a8e088a69565cd28752f20ebefc4dd03df 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
index 9524c912d70ca7633442c144a410fcc3452b220c..78f6173f3bc9b7301ded8b60bb6380940bd61e1a 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/gain_control.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
index 8e07f7ac9ed66ef5c2c1db78a06ca870d27431e0..7d23cdeb8929391659e668f60c4edf118cd01891 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h
index 7c0e63290b1735fec313664645fc302640cbccd9..9211e67ec53d0e1c93b70573cb2b4dbecfde991c 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h
+++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c
index 04c0ffebbc6fd1680d5bf1b8075d6e08d043340c..1b2445fa72e512cb290a12ab3ebf80c97c3ab138 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c
+++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h
index 1bcd2f99bed80956420bf12e517f2a983768d625..a167263969b3a9da864ddc22e40089195ecd7576 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h
+++ b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc
index 64e795acc153fb07860637af5bf5e74ccf1aa86f..21bab68d951d297cea78a19bf7f5bf5a9566d6cd 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/gpib_send.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf.h b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf.h
index 204fca6afd6a84e56e89987204dab134037f4695..7b95444163def96613e6e4605502a0269ad30599 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf.h
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc
index 73a655075ceedecb1812c49922962f077d1350bc..ccfe306ef6bd5da0af16037d56fa66045eca41b8 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_config_exmimo.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc
index b8ed0e92e5dc48619bffbdfddd053164798acad9..79facd431fc9dd550e3e70474252e2e040e8024f 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc
index 1a92096249dde4714ed6ed1685eb073cdc121f9d..2fa90ab6f2da8957a813bbf952459f1c0fb774e4 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_num_detected_cards.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc
index 5a425c9253bd7d3af72e83ef7c76596c1bf7f66c..1ebe3aeb4e306784f25d5d5f9430f2a495d9628c 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_send_frame.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc
index 608b5d1b9b3ece54884b3c0b38420e601b76581c..b2d73c8329b3f09e7b1deec972946824dde5f5b6 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc
index 02ee33c84076ac96bcc90a49d312e75e1ac59ee3..05188405e6712461bac2644ad0762c32fd3f7104 100644
--- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc
+++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_stop_without_reset.cc
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
index 5cbc210586d37bbf7ff00409b4ad0dbb31b8b84e..e1a1b768b27cb1413a67cbe6fb54fdea4753d098 100644
--- a/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/lms_lib.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp b/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp
index f8401dc391d5f73223b20dd0c8918c9c42e8b667..6f1afe47c0da98cda5b3bcea704d48d66fbd3f36 100644
--- a/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp
+++ b/targets/ARCH/LMSSDR/USERSPACE/LIB/sodera_lib.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index ec7aa1a549da240afad72b034a7a16cab6e11e23..a8c1c9b3f56e0bfe5c8683587f40cbc0abebeaec 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -331,10 +331,10 @@ static void trx_usrp_end(openair0_device *device) {
 
 /*! \brief Called to send samples to the USRP RF target
       @param device pointer to the device structure specific to the RF hardware target
-      @param timestamp The timestamp at whicch the first sample MUST be sent
+      @param timestamp The timestamp at which the first sample MUST be sent
       @param buff Buffer which holds the samples
       @param nsamps number of samples to be sent
-      @param antenna_id index of the antenna if the device has multiple anteannas
+      @param antenna_id index of the antenna if the device has multiple antennas
       @param flags flags must be set to TRUE if timestamp parameter needs to be applied
 */
 static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) {
@@ -743,6 +743,8 @@ extern "C" {
 
             openair0_cfg[0].rx_gain_calib_table = calib_table_x310;
 
+            LOG_I(PHY,"%s() sample_rate:%u\n", __FUNCTION__, (int)openair0_cfg[0].sample_rate);
+
             switch ((int)openair0_cfg[0].sample_rate) {
             case 30720000:
                 // from usrp_time_offset
@@ -879,6 +881,8 @@ extern "C" {
                 s->usrp->set_tx_rate(openair0_cfg[0].sample_rate,i);
                 s->usrp->set_tx_freq(openair0_cfg[0].tx_freq[i],i);
                 s->usrp->set_tx_gain(gain_range_tx.stop()-openair0_cfg[0].tx_gain[i],i);
+
+                LOG_I(PHY,"USRP TX_GAIN:%3.2lf gain_range:%3.2lf tx_gain:%3.2lf\n", gain_range_tx.stop()-openair0_cfg[0].tx_gain[i], gain_range_tx.stop(), openair0_cfg[0].tx_gain[i]);
             }
         }
 
diff --git a/targets/ARCH/mobipass/interface.c b/targets/ARCH/mobipass/interface.c
index 780dd4fbc3445fe7da5f5037699618055d64c065..db186a404cbe26a709eb8006dedf555bb0ede111 100644
--- a/targets/ARCH/mobipass/interface.c
+++ b/targets/ARCH/mobipass/interface.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/mobipass/mobipass.c b/targets/ARCH/mobipass/mobipass.c
index b0a9d345223898ee5fa619536576b29564b4a479..2a91068788f9cf6dbc8fce424df74b897d3046d8 100644
--- a/targets/ARCH/mobipass/mobipass.c
+++ b/targets/ARCH/mobipass/mobipass.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/mobipass/mobipass.h b/targets/ARCH/mobipass/mobipass.h
index aeaa94838ba520a3691bfabd558110a84c47107d..2210824c13226d08e8bf91d05823876d33e418d8 100644
--- a/targets/ARCH/mobipass/mobipass.h
+++ b/targets/ARCH/mobipass/mobipass.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/mobipass/queues.c b/targets/ARCH/mobipass/queues.c
index d38969616f991b2103883ab98020fb5a69cf6f46..27c9917084c8b5e6623d9e1cf2904a58e8d87749 100644
--- a/targets/ARCH/mobipass/queues.c
+++ b/targets/ARCH/mobipass/queues.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/ARCH/mobipass/queues.h b/targets/ARCH/mobipass/queues.h
index 714cf506e5fa8ff90f8bff757127ff5dde65bdcd..e47a62273087a60010d2b40fa44a4ee635056a4c 100644
--- a/targets/ARCH/mobipass/queues.h
+++ b/targets/ARCH/mobipass/queues.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index ef3124ff248b3878886b2111179691cf2268fd2f..35b29e31b44bcd08f30e686bf44f36d188204177 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -42,6 +42,8 @@
 
 int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
 {
+  LOG_E(ENB_APP, "%s(enb_nb:%d ue_nb:%d)\n", __FUNCTION__, enb_nb, ue_nb);
+
   itti_wait_ready(1);
   if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) {
     LOG_E(PDCP, "Create task for L2L1 failed\n");
diff --git a/targets/COMMON/create_tasks.h b/targets/COMMON/create_tasks.h
index 6545f4b9d91a10023b0cd181f929b11498270455..493c441f59adbd6bfe2d544e835abb066f58e8f6 100644
--- a/targets/COMMON/create_tasks.h
+++ b/targets/COMMON/create_tasks.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/PROJECTS/E-MBMS/build_all.bash b/targets/PROJECTS/E-MBMS/build_all.bash
index a4f00d49af345d04919e0d90321034697f27c7fa..0cbece916eae4351990afb2dbc8e40468586cc16 100755
--- a/targets/PROJECTS/E-MBMS/build_all.bash
+++ b/targets/PROJECTS/E-MBMS/build_all.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/E-MBMS/start_enb.bash b/targets/PROJECTS/E-MBMS/start_enb.bash
index 5e8d8e4b4578b67f3258a2d6f0912257c161621f..8e62c8e09c3086253dcddd66d758e16a4d88fa1d 100755
--- a/targets/PROJECTS/E-MBMS/start_enb.bash
+++ b/targets/PROJECTS/E-MBMS/start_enb.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/E-MBMS/start_ue.bash b/targets/PROJECTS/E-MBMS/start_ue.bash
index 25e2816fcc3bebbf262c6a81df16d02705053d73..7e856a8ef453c0b556192ab52256ce915b21f857 100755
--- a/targets/PROJECTS/E-MBMS/start_ue.bash
+++ b/targets/PROJECTS/E-MBMS/start_ue.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/E-MBMS/utils.bash b/targets/PROJECTS/E-MBMS/utils.bash
index 0da6363a1952b00d6258c5e336515d551fa584a3..a2fe556c2964d8be36313e89493542fd2dc3adf9 100755
--- a/targets/PROJECTS/E-MBMS/utils.bash
+++ b/targets/PROJECTS/E-MBMS/utils.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index ff302811e9d7eb89baab3b2648e7d8766f966090..9218cf876f4917f63d50f4feb8e28211c373632e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -17,7 +17,8 @@ eNBs =
 
     mobile_country_code =  "208";
 
-    mobile_network_code =  "93";
+    #mobile_network_code =  "93";
+    mobile_network_code =  "92";
 
     tr_s_preference     = "local_mac"
 
@@ -36,13 +37,14 @@ eNBs =
       downlink_frequency      			      = 2685000000L;
       uplink_frequency_offset 			      = -120000000;
       Nid_cell					      = 0;
-      N_RB_DL                 			      = 50;
+# N_RB_DL                 			      = 50;
+      N_RB_DL                 			      = 25;
       Nid_cell_mbsfn          			      = 0;
       nb_antenna_ports                                = 1;
       nb_antennas_tx          			      = 1;
       nb_antennas_rx          			      = 1;
       tx_gain                                            = 90;
-      rx_gain                                            = 125;
+      rx_gain                                            = 115;
       pbch_repetition                                 = "FALSE";
       prach_root              			      = 0;
       prach_config_index      			      = 0;
@@ -140,7 +142,7 @@ eNBs =
 
 
     ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+    mme_ip_address      = ( { ipv4       = "192.168.1.78";
                               ipv6       = "192:168:30::17";
                               active     = "yes";
                               preference = "ipv4";
@@ -150,10 +152,10 @@ eNBs =
     NETWORK_INTERFACES :
     {
 
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.19/24";
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.19/24";
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.1.74/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.1.74/24";
         ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
     };
   }
@@ -176,34 +178,33 @@ L1s = (
 
 RUs = (
     {		  
-       local_rf       = "yes"
-         nb_tx          = 1
-         nb_rx          = 1
-         att_tx         = 0
-         att_rx         = 0;
-         bands          = [7];
-         max_pdschReferenceSignalPower = -27;
-         max_rxgain                    = 125;
-         eNB_instances  = [0];
-
+	local_rf       = "yes"
+	nb_tx          = 1
+	nb_rx          = 1
+	att_tx         = 0
+	att_rx         = 0;
+	bands          = [7];
+       max_pdschReferenceSignalPower = -27;
+       max_rxgain                    = 125;
+	eNB_instances  = [0];
     }
 );  
 
      log_config :
      {
-       global_log_level                      ="info";
+       global_log_level                      ="debug";
        global_log_verbosity                  ="medium";
        hw_log_level                          ="info";
        hw_log_verbosity                      ="medium";
        phy_log_level                         ="info";
-       phy_log_verbosity                     ="medium";
+       phy_log_verbosity                     ="low";
        mac_log_level                         ="info";
-       mac_log_verbosity                     ="high";
+       mac_log_verbosity                     ="medium";
        rlc_log_level                         ="info";
-       rlc_log_verbosity                     ="medium";
+       rlc_log_verbosity                     ="high";
        pdcp_log_level                        ="info";
        pdcp_log_verbosity                    ="medium";
-       rrc_log_level                         ="info";
-       rrc_log_verbosity                     ="medium";
+       rrc_log_level                         ="debug";
+       rrc_log_verbosity                     ="high";
     };
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpb210.conf
index f97cd0ad8ba0c0e4a82d1c11520dfea2a71634cc..88d653b7b2e48d2bf834f4df85b863a0606e8f89 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/oaiL1.nfapi.usrpb210.conf
@@ -1,14 +1,31 @@
+log_config = {
+  global_log_level                      ="debug";
+  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                     ="medium";
+  rlc_log_level                         ="info";
+  rlc_log_verbosity                     ="medium";
+  pdcp_log_level                        ="info";
+  pdcp_log_verbosity                    ="medium";
+  rrc_log_level                         ="info";
+  rrc_log_verbosity                     ="medium";
+};
+
 L1s = (
     	{
 	num_cc = 1;
 	tr_n_preference = "nfapi";
-      	local_n_if_name  = "lo";			  
-      	remote_n_address = "127.0.0.2";
-    	local_n_address  = "127.0.0.1"; 
-    	local_n_portc    = 50000;	
-    	remote_n_portc   = 50000;
-    	local_n_portd    = 50001;	
-    	remote_n_portd   = 50001;
+      	local_n_if_name  = "eno1";
+      	remote_n_address = "192.168.1.28";
+    	local_n_address  = "192.168.1.74";
+    	local_n_portc    = 50000;
+    	remote_n_portc   = 50001;
+    	local_n_portd    = 50010;
+    	remote_n_portd   = 50011;
         }  
 );
 
@@ -17,11 +34,10 @@ RUs = (
        local_rf       = "yes"
        nb_tx          = 1
        nb_rx          = 1
-       att_tx         = 0
+       att_tx         = 90
        att_rx         = 0;
        bands          = [7,38,42,43];
        max_pdschReferenceSignalPower = -27;
        max_rxgain                    = 125;
-       eNB_instances  = [0];
     }		      
-);  
+);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
index c9102b9b08546c383d0324fbb20c1a1d1c571ef0..5818933c48f0aa4fe2f9072f0b1c81697168c212 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
@@ -17,7 +17,8 @@ eNBs =
 
     mobile_country_code =  "208";
 
-    mobile_network_code =  "93";
+    #mobile_network_code =  "93";
+    mobile_network_code =  "92";
 
     tr_s_preference     = "local_mac"
 
@@ -36,13 +37,14 @@ eNBs =
       downlink_frequency      			      = 2685000000L;
       uplink_frequency_offset 			      = -120000000;
       Nid_cell					      = 0;
-      N_RB_DL                 			      = 50;
+      #N_RB_DL                 			      = 50;
+      N_RB_DL                 			      = 25;
       Nid_cell_mbsfn          			      = 0;
       nb_antenna_ports                                = 1;
       nb_antennas_tx          			      = 1;
       nb_antennas_rx          			      = 1;
       tx_gain                                            = 90;
-      rx_gain                                            = 125;
+      rx_gain                                            = 115;
       pbch_repetition                                 = "FALSE";
       prach_root              			      = 0;
       prach_config_index      			      = 0;
@@ -53,7 +55,8 @@ eNBs =
       pucch_nRB_CQI           			      = 0;
       pucch_nCS_AN            			      = 0;
       pucch_n1_AN             			      = 32;
-      pdsch_referenceSignalPower 			      = -27;
+      #pdsch_referenceSignalPower 			      = -27;
+      pdsch_referenceSignalPower 			      = -30;
       pdsch_p_b                  			      = 0;
       pusch_n_SB                 			      = 1;
       pusch_enable64QAM          			      = "DISABLE";
@@ -89,7 +92,8 @@ eNBs =
       rach_messagePowerOffsetGroupB                      = ;
       */
       rach_powerRampingStep                              = 4;
-      rach_preambleInitialReceivedTargetPower            = -108;
+      #rach_preambleInitialReceivedTargetPower            = -108;
+      rach_preambleInitialReceivedTargetPower            = -104;
       rach_preambleTransMax                              = 10;
       rach_raResponseWindowSize                          = 10;
       rach_macContentionResolutionTimer                  = 48;
@@ -140,7 +144,7 @@ eNBs =
 
 
     ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "127.0.0.3";
+    mme_ip_address      = ( { ipv4       = "192.168.1.78";
                               ipv6       = "192:168:30::17";
                               active     = "yes";
                               preference = "ipv4";
@@ -150,45 +154,47 @@ eNBs =
     NETWORK_INTERFACES :
     {
 
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "lo";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "127.0.0.2/24";
-        ENB_INTERFACE_NAME_FOR_S1U               = "lo";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "127.0.0.5/24";
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.1.28/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eno1";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.1.28/24";
         ENB_PORT_FOR_S1U                         = 2152; # 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";
-   };
   }
 );
 
 MACRLCs = (
 	{
 	num_cc = 1;
-      	local_s_if_name  = "lo";			  
-      	remote_s_address = "127.0.0.1";
-    	local_s_address  = "127.0.0.2"; 
-    	local_s_portc    = 50000;	
+      	local_s_if_name  = "eno1";			  
+      	remote_s_address = "192.168.1.74";
+    	#local_s_address  = "192.168.1.78"; 
+    	local_s_address  = "192.168.1.28"; 
+    	local_s_portc    = 50001;	
     	remote_s_portc   = 50000;
-    	local_s_portd    = 50001;	
-    	remote_s_portd   = 50001;
+    	local_s_portd    = 50011;	
+    	remote_s_portd   = 50010;
 	tr_s_preference = "nfapi";
 	tr_n_preference = "local_RRC";
         }  
 );
 
+     log_config :
+     {
+       global_log_level                      ="debug";
+       global_log_verbosity                  ="medium";
+       hw_log_level                          ="info";
+       hw_log_verbosity                      ="medium";
+       phy_log_level                         ="info";
+       phy_log_verbosity                     ="medium";
+       mac_log_level                         ="debug";
+       mac_log_verbosity                     ="high";
+       rlc_log_level                         ="debug";
+       rlc_log_verbosity                     ="high";
+       pdcp_log_level                        ="info";
+       pdcp_log_verbosity                    ="medium";
+       rrc_log_level                         ="info";
+       rrc_log_verbosity                     ="high";
+    };
+
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash
index 4c753dc3728a8be6c769ef9513a89781a8f8a43c..bfcae67e4a9c4077c9275313020b2b2d76337029 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash
index 8e1538599f0571a61c319c994be27b7f27adead9..6db4c9f58039b988ea61472e88ff54aa6c3a73fd 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash
index 6ea2d5bb0afe0efc6d64bc08b06b5e1c503b45bc..1c6d87bc8fe1db5b216a8f0e4482399bdc7d8096 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_enb_and_ue_virt.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash
index ff16e27982a0e42954149bab6d3dbbf938bbf1f2..8b76dc9cc0fea4f0a7d53d3d0b8c136c25d3d737 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_ue.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
index 23231f2fe6ca3067e738a353f65409e1f2ed7754..93441ec9e9aaeca3fe1ae7b460eedff6ae3f6aae 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash
index 7813f4edea048dc8364720edd3eb0f47f05ad7bf..72fcea2281b19194e1067b15260a8668c668421b 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/RT/USER/TOOLS/thread_ipc.c b/targets/RT/USER/TOOLS/thread_ipc.c
index 5e9adb0bcc0df545c18ec6dc39cf8e75730c2255..7eda3e843175e816fac2eed8987556e616e3b4b8 100644
--- a/targets/RT/USER/TOOLS/thread_ipc.c
+++ b/targets/RT/USER/TOOLS/thread_ipc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/TOOLS/thread_ipc.h b/targets/RT/USER/TOOLS/thread_ipc.h
index a39f8d22fbd80d7465f3dff3e65fd565a4859c85..ec008c30df21efb6f633d30ed9359c25c000232e 100644
--- a/targets/RT/USER/TOOLS/thread_ipc.h
+++ b/targets/RT/USER/TOOLS/thread_ipc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/UE_transport_IQ.c b/targets/RT/USER/UE_transport_IQ.c
index 05dd2bbf798e64c276856d7313cc29911075f5d9..16f491263d6ea604955cb63651f04bb76c518c39 100644
--- a/targets/RT/USER/UE_transport_IQ.c
+++ b/targets/RT/USER/UE_transport_IQ.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/condtest.c b/targets/RT/USER/condtest.c
index 23b5d23a5b7a276ea945777241a3fed8498ed859..b6f00e80b3ac9a68e2ddc2ad32cb90e10fe7b246 100644
--- a/targets/RT/USER/condtest.c
+++ b/targets/RT/USER/condtest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/eNB_transport_IQ.c b/targets/RT/USER/eNB_transport_IQ.c
index b57a201fb5f901417d919bbed85bdf919f6b51ff..b822a5ea75bd81faed46b3097b380adeeeaad9d8 100644
--- a/targets/RT/USER/eNB_transport_IQ.c
+++ b/targets/RT/USER/eNB_transport_IQ.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/emos-raw.c b/targets/RT/USER/emos-raw.c
index 16709da7cf52841a73df4385a0b86235d2b3c6d7..2cf0e18c7171f51cde0cacbbba2a79bfc5e6b40a 100644
--- a/targets/RT/USER/emos-raw.c
+++ b/targets/RT/USER/emos-raw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 3bb282756ffa75198cc82ba509595f2ea9b75e41..070a768ec5307b1a6ee07242b00ea167d7436551 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -121,11 +121,14 @@ extern int transmission_mode;
 
 extern int oaisim_flag;
 
+uint16_t sf_ahead=4;
+
 //pthread_t                       main_eNB_thread;
 
 time_stats_t softmodem_stats_mt; // main thread
 time_stats_t softmodem_stats_hw; //  hw acquisition
 time_stats_t softmodem_stats_rxtx_sf; // total tx time
+time_stats_t nfapi_meas; // total tx time
 time_stats_t softmodem_stats_rx_sf; // total rx time
 
 /* mutex, cond and variable to serialize phy proc TX calls
@@ -151,51 +154,150 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe);
 void wakeup_prach_eNB_br(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe);
 #endif
 
+extern uint8_t nfapi_mode;
+extern void oai_subframe_ind(uint16_t sfn, uint16_t sf);
+extern void add_subframe(uint16_t *frameP, uint16_t *subframeP, int offset);
+
+//#define TICK_TO_US(ts) (ts.diff)
+#define TICK_TO_US(ts) (ts.trials==0?0:ts.diff/ts.trials)
+
+
 static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_name) {
 
+  static double cpu_freq_GHz = 0.0;
+
+  if (cpu_freq_GHz == 0.0)
+    cpu_freq_GHz = get_cpu_freq_GHz();
+
+
   start_meas(&softmodem_stats_rxtx_sf);
 
+  // *******************************************************************
+
+  if (nfapi_mode == 1)
+  {
+    // I am a PNF and I need to let nFAPI know that we have a (sub)frame tick
+    uint16_t frame = proc->frame_rx;
+    uint16_t subframe = proc->subframe_rx;
+
+    //add_subframe(&frame, &subframe, 4);
+
+    //oai_subframe_ind(proc->frame_tx, proc->subframe_tx);
+    //LOG_D(PHY, "oai_subframe_ind(frame:%u, subframe:%d) - NOT CALLED ********\n", frame, subframe);
+  start_meas(&nfapi_meas);
+    oai_subframe_ind(frame, subframe);
+  stop_meas(&nfapi_meas);
+
+    LOG_D(PHY, "UL_info[rx_ind:%d:%d harqs:%d:%d crcs:%d:%d preambles:%d:%d cqis:%d] RX:%d%d TX:%d%d num_pdcch_symbols:%d\n", 
+      NFAPI_SFNSF2DEC(eNB->UL_INFO.rx_ind.sfn_sf),   eNB->UL_INFO.rx_ind.rx_indication_body.number_of_pdus, 
+      NFAPI_SFNSF2DEC(eNB->UL_INFO.harq_ind.sfn_sf), eNB->UL_INFO.harq_ind.harq_indication_body.number_of_harqs, 
+      NFAPI_SFNSF2DEC(eNB->UL_INFO.crc_ind.sfn_sf),  eNB->UL_INFO.crc_ind.crc_indication_body.number_of_crcs, 
+      NFAPI_SFNSF2DEC(eNB->UL_INFO.rach_ind.sfn_sf), eNB->UL_INFO.rach_ind.rach_indication_body.number_of_preambles,
+      eNB->UL_INFO.cqi_ind.number_of_cqis, 
+      proc->frame_rx, proc->subframe_rx, 
+      proc->frame_tx, proc->subframe_tx, eNB->pdcch_vars[proc->subframe_tx&1].num_pdcch_symbols);
+  }
+
+  if (nfapi_mode == 1 && eNB->pdcch_vars[proc->subframe_tx&1].num_pdcch_symbols == 0)
+  {
+    LOG_E(PHY, "eNB->pdcch_vars[proc->subframe_tx&1].num_pdcch_symbols == 0");
+    return 0;
+  }
+
   // ****************************************
   // Common RX procedures subframe n
 
   T(T_ENB_PHY_DL_TICK, T_INT(eNB->Mod_id), T_INT(proc->frame_tx), T_INT(proc->subframe_tx));
 
   // if this is IF5 or 3GPP_eNB
-  if (eNB->RU_list[0]->function < NGFI_RAU_IF4p5) {
+  if (eNB && eNB->RU_list && eNB->RU_list[0] && eNB->RU_list[0]->function < NGFI_RAU_IF4p5) {
+    //LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB() proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
     wakeup_prach_eNB(eNB,NULL,proc->frame_rx,proc->subframe_rx);
+    //LOG_D(PHY,"%s:%s() %u/%u Before wakeup_prach_eNB_br() proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
 #ifdef Rel14
     wakeup_prach_eNB_br(eNB,NULL,proc->frame_rx,proc->subframe_rx);
+    //LOG_D(PHY,"%s:%s() %u/%u proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
 #endif
   }
+
   // UE-specific RX processing for subframe n
+
+
   // Panos: Substitute with call to get_nfapi_indications() from the socket.
-  phy_procedures_eNB_uespec_RX(eNB, proc, no_relay );
+  if (nfapi_mode == 0 || nfapi_mode == 1) {
+    phy_procedures_eNB_uespec_RX(eNB, proc, no_relay );
+  }
 
   pthread_mutex_lock(&eNB->UL_INFO_mutex);
+
   eNB->UL_INFO.frame     = proc->frame_rx;
   eNB->UL_INFO.subframe  = proc->subframe_rx;
   eNB->UL_INFO.module_id = eNB->Mod_id;
   eNB->UL_INFO.CC_id     = eNB->CC_id;
+
   eNB->if_inst->UL_indication(&eNB->UL_INFO);
+
   pthread_mutex_unlock(&eNB->UL_INFO_mutex);
+
   // *****************************************
-  // TX processing for subframe n+4
+  // TX processing for subframe n+sf_ahead
   // run PHY TX procedures the one after the other for all CCs to avoid race conditions
   // (may be relaxed in the future for performance reasons)
   // *****************************************
   //if (wait_CCs(proc)<0) return(-1);
   
-
-  
   if (oai_exit) return(-1);
   
   // Panos: Substitute with call to send_nfapi_sched_response() to the UE through the socket.
   phy_procedures_eNB_TX(eNB, proc, no_relay, NULL, 1);
-  
-  if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) return(-1);
 
   stop_meas( &softmodem_stats_rxtx_sf );
+
+  LOG_D(PHY,"%s() Exit proc[rx:%d%d tx:%d%d] rxtx:%lld nfapi:%lld",
+      __FUNCTION__, proc->frame_rx, proc->subframe_rx, proc->frame_tx, proc->subframe_tx,
+      softmodem_stats_rxtx_sf.diff_now, nfapi_meas.diff_now);
+
+  LOG_D(PHY, "phy:%lld tx:%lld rx:%lld prach:%lld ofdm:%lld ",
+      TICK_TO_US(eNB->phy_proc),
+      TICK_TO_US(eNB->phy_proc_tx),
+      TICK_TO_US(eNB->phy_proc_rx),
+      TICK_TO_US(eNB->rx_prach),
+      TICK_TO_US(eNB->ofdm_mod_stats));
+
+  LOG_D(PHY,
+    "dlsch[enc:%lld mod:%lld scr:%lld rm:%lld t:%lld i:%lld] rx_dft:%lld ",
+      TICK_TO_US(eNB->dlsch_encoding_stats),
+      TICK_TO_US(eNB->dlsch_modulation_stats),
+      TICK_TO_US(eNB->dlsch_scrambling_stats),
+      TICK_TO_US(eNB->dlsch_rate_matching_stats),
+      TICK_TO_US(eNB->dlsch_turbo_encoding_stats),
+      TICK_TO_US(eNB->dlsch_interleaving_stats),
+      TICK_TO_US(eNB->rx_dft_stats));
+
+  LOG_D(PHY," ulsch[ch:%lld freq:%lld dec:%lld demod:%lld ru:%lld ",
+      TICK_TO_US(eNB->ulsch_channel_estimation_stats),
+      TICK_TO_US(eNB->ulsch_freq_offset_estimation_stats),
+      TICK_TO_US(eNB->ulsch_decoding_stats),
+      TICK_TO_US(eNB->ulsch_demodulation_stats),
+      TICK_TO_US(eNB->ulsch_rate_unmatching_stats));
+
+  LOG_D(PHY, "td:%lld dei:%lld dem:%lld llr:%lld tci:%lld ",
+      TICK_TO_US(eNB->ulsch_turbo_decoding_stats),
+      TICK_TO_US(eNB->ulsch_deinterleaving_stats),
+      TICK_TO_US(eNB->ulsch_demultiplexing_stats),
+      TICK_TO_US(eNB->ulsch_llr_stats),
+      TICK_TO_US(eNB->ulsch_tc_init_stats));
+  LOG_D(PHY, "tca:%lld tcb:%lld tcg:%lld tce:%lld l1:%lld l2:%lld]\n\n", 
+      TICK_TO_US(eNB->ulsch_tc_alpha_stats),
+      TICK_TO_US(eNB->ulsch_tc_beta_stats),
+      TICK_TO_US(eNB->ulsch_tc_gamma_stats),
+      TICK_TO_US(eNB->ulsch_tc_ext_stats),
+      TICK_TO_US(eNB->ulsch_tc_intl1_stats),
+      TICK_TO_US(eNB->ulsch_tc_intl2_stats)
+      );
   
+      //softmodem_stats_rxtx_sf.in, softmodem_stats_rxtx_sf.diff_now, softmodem_stats_rxtx_sf.max,
+
   return(0);
 }
 
@@ -215,28 +317,40 @@ static void* eNB_thread_rxtx( void* param ) {
 
   char thread_name[100];
 
+  //LOG_D(PHY,"%s()\n", __FUNCTION__);
 
   // set default return value
   eNB_thread_rxtx_status = 0;
 
 
-  sprintf(thread_name,"RXn_TXnp4_%d\n",&eNB->proc.proc_rxtx[0] == proc ? 0 : 1);
+  sprintf(thread_name,"RXn_TXnp4_%d",&eNB->proc.proc_rxtx[0] == proc ? 0 : 1);
   thread_top_init(thread_name,1,850000L,1000000L,2000000L);
 
+  //LOG_D(PHY,"%s() thread_name:%s\n", __FUNCTION__, thread_name);
+
   while (!oai_exit) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 );
 
+    //LOG_D(PHY,"%s:%s() TX:%u/%u About to wait on proc->instance_cnt_rxtx:%d\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
     if (wait_on_condition(&proc->mutex_rxtx,&proc->cond_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break;
 
+    //LOG_D(PHY,"%s:%s() TX:%u/%u - WOKEN on proc->instance_cnt_rxtx proc->instance_cnt_rxtx:%d \n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->instance_cnt_rxtx);
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 1 );
 
-    
-  
     if (oai_exit) break;
 
+    //LOG_D(PHY,"%s:%s() TX:%u/%u About to rxtx()\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx);
     if (eNB->CC_id==0)
+    {
       if (rxtx(eNB,proc,thread_name) < 0) break;
 
+    }
+
+    //LOG_D(PHY,"%s:%s() TX:%u/%u DONE rxtx()\n", thread_name, __FUNCTION__, proc->frame_tx, proc->subframe_tx);
+
+    if (release_thread(&proc->mutex_rxtx,&proc->instance_cnt_rxtx,thread_name)<0) break;
+
   } // while !oai_exit
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RXTX0+(proc->subframe_rx&1), 0 );
@@ -280,21 +394,20 @@ void eNB_top(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, char *string)
   proc->subframe_rx = subframe_rx;
 
   if (!oai_exit) {
-    LOG_D(PHY,"eNB_top in %p (proc %p, CC_id %d), frame %d, subframe %d, instance_cnt_prach %d\n",
-	  (void*)pthread_self(), proc, eNB->CC_id, proc->frame_rx,proc->subframe_rx,proc->instance_cnt_prach);
+    //LOG_D(PHY,"eNB_top in %p (proc %p, CC_id %d), frame %d, subframe %d, instance_cnt_prach %d\n",
+	  //(void*)pthread_self(), proc, eNB->CC_id, proc->frame_rx,proc->subframe_rx,proc->instance_cnt_prach);
 
     T(T_ENB_MASTER_TICK, T_INT(0), T_INT(proc->frame_rx), T_INT(proc->subframe_rx));
 
     proc_rxtx->subframe_rx = proc->subframe_rx;
     proc_rxtx->frame_rx    = proc->frame_rx;
-    proc_rxtx->subframe_tx = (proc->subframe_rx+4)%10;
-    proc_rxtx->frame_tx    = (proc->subframe_rx>5) ? (1+proc->frame_rx)&1023 : proc->frame_rx;
+    proc_rxtx->subframe_tx = (proc->subframe_rx+sf_ahead)%10;
+    proc_rxtx->frame_tx    = (proc->subframe_rx>(9-sf_ahead)) ? (1+proc->frame_rx)&1023 : proc->frame_rx;
     proc->frame_tx         = proc_rxtx->frame_tx;
     proc_rxtx->timestamp_tx = proc->timestamp_tx;
 
     if (rxtx(eNB,proc_rxtx,string) < 0) LOG_E(PHY,"eNB %d CC_id %d failed during execution\n",eNB->Mod_id,eNB->CC_id);
-    LOG_D(PHY,"eNB_top out %p (proc %p, CC_id %d), frame %d, subframe %d, instance_cnt_prach %d\n",
-	  (void*)pthread_self(), proc, eNB->CC_id, proc->frame_rx,proc->subframe_rx,proc->instance_cnt_prach);
+    //LOG_D(PHY,"eNB_top out %p (proc %p, CC_id %d), frame %d, subframe %d, instance_cnt_prach %d\n", (void*)pthread_self(), proc, eNB->CC_id, proc->frame_rx,proc->subframe_rx,proc->instance_cnt_prach);
   }
 }
 
@@ -310,9 +423,14 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
   int i;
   struct timespec wait;
   
+  LOG_D(PHY,"About to wake RUs\n");
+
   pthread_mutex_lock(&proc->mutex_RU);
+  LOG_D(PHY,"eNB->num_RU:%d\n", eNB->num_RU);
   for (i=0;i<eNB->num_RU;i++) {
+    LOG_D(PHY,"eNB->RU_list[%d]:%p\n",i,eNB->RU_list[i]);
     if (ru == eNB->RU_list[i]) {
+      LOG_D(PHY,"proc->RU_mask:%02x\n", proc->RU_mask);
       if ((proc->RU_mask&(1<<i)) > 0)
 	LOG_E(PHY,"eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",
 	      eNB->Mod_id,proc->frame_rx,proc->subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
@@ -320,6 +438,7 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
     }
   }
   if (proc->RU_mask != (1<<eNB->num_RU)-1) {  // not all RUs have provided their information so return
+    LOG_E(PHY,"Not all RUs have provided their info\n");
     pthread_mutex_unlock(&proc->mutex_RU);
     return(0);
   }
@@ -334,17 +453,19 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
   wait.tv_sec=0;
   wait.tv_nsec=5000000L;
 
+#if 0
   /* accept some delay in processing - up to 5ms */
   for (i = 0; i < 10 && proc_rxtx->instance_cnt_rxtx == 0; i++) {
-    LOG_W( PHY,"[eNB] Frame %d, eNB RXn-TXnp4 thread busy!! (cnt_rxtx %i)\n", proc_rxtx->frame_tx, proc_rxtx->instance_cnt_rxtx);
+    LOG_W( PHY,"[eNB] Frame %d Subframe %d, eNB RXn-TXnp4 thread busy!! (cnt_rxtx %i)\n", proc_rxtx->frame_tx, proc_rxtx->subframe_tx, proc_rxtx->instance_cnt_rxtx);
     usleep(500);
   }
   if (proc_rxtx->instance_cnt_rxtx == 0) {
-    exit_fun( "TX thread busy" );
+    //exit_fun( "TX thread busy" ); - DJP - this is commented out just whilst I work out what has gone wrong
     return(-1);
   }
+#endif
 
-  // wake up TX for subframe n+4
+  // wake up TX for subframe n+2
   // lock the TX mutex and make sure the thread is ready
   if (pthread_mutex_timedlock(&proc_rxtx->mutex_rxtx,&wait) != 0) {
     LOG_E( PHY, "[eNB] ERROR pthread_mutex_lock for eNB RXTX thread %d (IC %d)\n", proc_rxtx->subframe_rx&1,proc_rxtx->instance_cnt_rxtx );
@@ -353,19 +474,22 @@ int wakeup_rxtx(PHY_VARS_eNB *eNB,RU_t *ru) {
   }
   
   ++proc_rxtx->instance_cnt_rxtx;
+  LOG_D(PHY,"%s() %u/%u Just incremented proc->instance_cnt_rxtx:%d\n", __FUNCTION__, proc_rxtx->frame_tx, proc_rxtx->subframe_tx, proc_rxtx->instance_cnt_rxtx);
   
   // We have just received and processed the common part of a subframe, say n. 
   // TS_rx is the last received timestamp (start of 1st slot), TS_tx is the desired 
   // transmitted timestamp of the next TX slot (first).
   // The last (TS_rx mod samples_per_frame) was n*samples_per_tti, 
-  // we want to generate subframe (n+4), so TS_tx = TX_rx+4*samples_per_tti,
-  // and proc->subframe_tx = proc->subframe_rx+4
-  proc_rxtx->timestamp_tx = proc->timestamp_rx + (4*fp->samples_per_tti);
+  // we want to generate subframe (n+sf_ahead), so TS_tx = TX_rx+sf_ahead*samples_per_tti,
+  // and proc->subframe_tx = proc->subframe_rx+sf_ahead
+  proc_rxtx->timestamp_tx = proc->timestamp_rx + (sf_ahead*fp->samples_per_tti);
   proc_rxtx->frame_rx     = proc->frame_rx;
   proc_rxtx->subframe_rx  = proc->subframe_rx;
-  proc_rxtx->frame_tx     = (proc_rxtx->subframe_rx > 5) ? (proc_rxtx->frame_rx+1)&1023 : proc_rxtx->frame_rx;
-  proc_rxtx->subframe_tx  = (proc_rxtx->subframe_rx + 4)%10;
+  proc_rxtx->frame_tx     = (proc_rxtx->subframe_rx > (9-sf_ahead)) ? (proc_rxtx->frame_rx+1)&1023 : proc_rxtx->frame_rx;
+  proc_rxtx->subframe_tx  = (proc_rxtx->subframe_rx + sf_ahead)%10;
   
+  LOG_D(PHY,"Signal &proc_rxtx->cond_rxtx\n");
+
   // the thread can now be woken up
   if (pthread_cond_signal(&proc_rxtx->cond_rxtx) != 0) {
     LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB RXn-TXnp4 thread\n");
@@ -407,7 +531,7 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe) {
     
   // check if we have to detect PRACH first
   if (is_prach_subframe(fp,frame,subframe)>0) { 
-    LOG_D(PHY,"Triggering prach processing, frame %d, subframe %d\n",frame,subframe);
+    //LOG_D(PHY,"Triggering prach processing, frame %d, subframe %d\n",frame,subframe);
     if (proc->instance_cnt_prach == 0) {
       LOG_W(PHY,"[eNB] Frame %d Subframe %d, dropping PRACH\n", frame,subframe);
       return;
@@ -523,7 +647,7 @@ static void* eNB_thread_prach( void* param ) {
     
     if (wait_on_condition(&proc->mutex_prach,&proc->cond_prach,&proc->instance_cnt_prach,"eNB_prach_thread") < 0) break;
 
-    LOG_D(PHY,"Running eNB prach procedures\n");
+    //LOG_D(PHY,"Running eNB prach procedures\n");
     prach_procedures(eNB
 #ifdef Rel14
 		     ,0
@@ -564,7 +688,7 @@ static void* eNB_thread_prach_br( void* param ) {
 
     if (wait_on_condition(&proc->mutex_prach_br,&proc->cond_prach_br,&proc->instance_cnt_prach_br,"eNB_prach_thread_br") < 0) break;
 
-    LOG_D(PHY,"Running eNB prach procedures for BL/CE UEs\n");
+    //LOG_D(PHY,"Running eNB prach procedures for BL/CE UEs\n");
     prach_procedures(eNB,1);
     
     if (release_thread(&proc->mutex_prach_br,&proc->instance_cnt_prach_br,"eNB_prach_thread_br") < 0) break;
@@ -595,10 +719,12 @@ void init_eNB_proc(int inst) {
   pthread_attr_t *attr_prach_br=NULL;
 #endif
 
+  LOG_I(PHY,"%s(inst:%d) RC.nb_CC[inst]:%d \n",__FUNCTION__,inst,RC.nb_CC[inst]);
+
   for (CC_id=0; CC_id<RC.nb_CC[inst]; CC_id++) {
     eNB = RC.eNB[inst][CC_id];
 #ifndef OCP_FRAMEWORK
-    LOG_I(PHY,"Initializing eNB processes %d CC_id %d \n",inst,CC_id);
+    LOG_I(PHY,"Initializing eNB processes instance:%d CC_id %d \n",inst,CC_id);
 #endif
     proc = &eNB->proc;
 
@@ -654,6 +780,8 @@ void init_eNB_proc(int inst) {
     //    attr_te     = &proc->attr_te; 
 #endif
 
+    LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag);
+
     if (eNB->single_thread_flag==0) {
       pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, &proc_rxtx[0] );
       pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, eNB_thread_rxtx, &proc_rxtx[1] );
@@ -789,6 +917,8 @@ void init_transport(PHY_VARS_eNB *eNB) {
   int j;
   LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
 
+  LOG_E(PHY, "Initialise transport\n");
+
   for (i=0; i<NUMBER_OF_UE_MAX; i++) {
     LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH, UE %d\n",i);
     for (j=0; j<2; j++) {
@@ -797,8 +927,8 @@ void init_transport(PHY_VARS_eNB *eNB) {
 	LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i);
 	exit(-1);
       } else {
-	LOG_D(PHY,"dlsch[%d][%d] => %p\n",i,j,eNB->dlsch[i][j]);
 	eNB->dlsch[i][j]->rnti=0;
+	LOG_D(PHY,"dlsch[%d][%d] => %p rnti:%d\n",i,j,eNB->dlsch[i][j], eNB->dlsch[i][j]->rnti);
       }
     }
     
@@ -851,20 +981,33 @@ void init_eNB_afterRU(void) {
   int inst,CC_id,ru_id,i,aa;
   PHY_VARS_eNB *eNB;
 
+  LOG_I(PHY,"%s() RC.nb_inst:%d\n", __FUNCTION__, RC.nb_inst);
 
   for (inst=0;inst<RC.nb_inst;inst++) {
+    LOG_I(PHY,"RC.nb_CC[inst]:%d\n", RC.nb_CC[inst]);
     for (CC_id=0;CC_id<RC.nb_CC[inst];CC_id++) {
+
+      LOG_I(PHY,"RC.nb_CC[inst:%d][CC_id:%d]:%p\n", inst, CC_id, RC.eNB[inst][CC_id]);
+
       eNB                                  =  RC.eNB[inst][CC_id];
       phy_init_lte_eNB(eNB,0,0);
       // map antennas and PRACH signals to eNB RX
-      AssertFatal(eNB->num_RU>0,"Number of RU attached to eNB %d is zero\n",eNB->Mod_id);
+      if (0) AssertFatal(eNB->num_RU>0,"Number of RU attached to eNB %d is zero\n",eNB->Mod_id);
       LOG_I(PHY,"Mapping RX ports from %d RUs to eNB %d\n",eNB->num_RU,eNB->Mod_id);
       eNB->frame_parms.nb_antennas_rx       = 0;
+
+      LOG_E(PHY,"Overwriting eNB->prach_vars.rxsigF[0]:%p\n", eNB->prach_vars.rxsigF[0]);
+
       eNB->prach_vars.rxsigF[0] = (int16_t**)malloc16(64*sizeof(int16_t*));
 #ifdef Rel14
-      for (int ce_level=0;ce_level<4;ce_level++)
-	eNB->prach_vars_br.rxsigF[ce_level] = (int16_t**)malloc16(64*sizeof(int16_t*));
+      for (int ce_level=0;ce_level<4;ce_level++) {
+        LOG_E(PHY,"Overwriting eNB->prach_vars_br.rxsigF.rxsigF[0]:%p\n", eNB->prach_vars_br.rxsigF[ce_level]);
+        eNB->prach_vars_br.rxsigF[ce_level] = (int16_t**)malloc16(64*sizeof(int16_t*));
+      }
 #endif
+
+      LOG_I(PHY,"eNB->num_RU:%d\n", eNB->num_RU);
+
       for (ru_id=0,aa=0;ru_id<eNB->num_RU;ru_id++) {
 	eNB->frame_parms.nb_antennas_rx    += eNB->RU_list[ru_id]->nb_rx;
 
@@ -886,6 +1029,33 @@ void init_eNB_afterRU(void) {
 	  eNB->common_vars.rxdataF[aa]     =  eNB->RU_list[ru_id]->common.rxdataF[i];
 	}
       }
+
+
+
+
+      if (eNB->frame_parms.nb_antennas_rx < 1)
+      {
+        LOG_I(PHY, "%s() ************* DJP ***** eNB->frame_parms.nb_antennas_rx:%d - GOING TO HARD CODE TO 1", __FUNCTION__, eNB->frame_parms.nb_antennas_rx);
+        eNB->frame_parms.nb_antennas_rx = 1;
+      }
+      else
+      {
+        LOG_I(PHY," Delete code\n");
+      }
+
+      if (eNB->frame_parms.nb_antennas_tx < 1)
+      {
+        LOG_I(PHY, "%s() ************* DJP ***** eNB->frame_parms.nb_antennas_tx:%d - GOING TO HARD CODE TO 1", __FUNCTION__, eNB->frame_parms.nb_antennas_tx);
+        eNB->frame_parms.nb_antennas_tx = 1;
+      }
+      else
+      {
+        LOG_I(PHY," Delete code\n");
+      }
+
+
+
+
       AssertFatal(eNB->frame_parms.nb_antennas_rx >0,
 		  "inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,eNB->frame_parms.nb_antennas_rx);
       LOG_I(PHY,"inst %d, CC_id %d : nb_antennas_rx %d\n",inst,CC_id,eNB->frame_parms.nb_antennas_rx);
@@ -893,9 +1063,12 @@ void init_eNB_afterRU(void) {
       init_transport(eNB);
       //init_precoding_weights(RC.eNB[inst][CC_id]);
     }
+    printf("RC.nb_CC[inst:%d]:%d CC_id:%d AFTER LOOP - About to init_eNB_proc\n", inst, RC.nb_CC[inst], CC_id);
     init_eNB_proc(inst);
   }
+  printf("%s() RC.nb_inst:%d AFTER LOOP\n", __FUNCTION__, RC.nb_inst);
 
+  printf("%s:%d RC.nb_RU:%d\n", __FILE__, __LINE__, RC.nb_RU);
   for (ru_id=0;ru_id<RC.nb_RU;ru_id++) {
 
     AssertFatal(RC.ru[ru_id]!=NULL,"ru_id %d is null\n",ru_id);
@@ -905,6 +1078,8 @@ void init_eNB_afterRU(void) {
     RC.ru[ru_id]->wakeup_prach_eNB_br = wakeup_prach_eNB_br;
     RC.ru[ru_id]->eNB_top             = eNB_top;
   }
+
+  LOG_I(PHY,"%s() Exitting\n", __FUNCTION__);
 }
 
 void init_eNB(int single_thread_flag,int wait_for_sync) {
@@ -913,7 +1088,10 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
   int inst;
   PHY_VARS_eNB *eNB;
 
+  LOG_I(PHY,"[lte-softmodem.c] eNB structure about to allocated RC.nb_L1_inst:%d RC.nb_L1_CC[0]:%d\n",RC.nb_L1_inst,RC.nb_L1_CC[0]);
+
   if (RC.eNB == NULL) RC.eNB = (PHY_VARS_eNB***) malloc(RC.nb_L1_inst*sizeof(PHY_VARS_eNB **));
+  LOG_I(PHY,"[lte-softmodem.c] eNB structure RC.eNB allocated\n");
   for (inst=0;inst<RC.nb_L1_inst;inst++) {
     if (RC.eNB[inst] == NULL) RC.eNB[inst] = (PHY_VARS_eNB**) malloc(RC.nb_CC[inst]*sizeof(PHY_VARS_eNB *));
     for (CC_id=0;CC_id<RC.nb_L1_CC[inst];CC_id++) {
@@ -923,6 +1101,7 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
       eNB->single_thread_flag = single_thread_flag;
 
 
+      LOG_I(PHY,"Initializing eNB %d CC_id %d single_thread_flag:%d\n",inst,CC_id,single_thread_flag);
 #ifndef OCP_FRAMEWORK
       LOG_I(PHY,"Initializing eNB %d CC_id %d\n",inst,CC_id);
 #endif
@@ -939,21 +1118,18 @@ void init_eNB(int single_thread_flag,int wait_for_sync) {
       memset((void*)&eNB->UL_INFO,0,sizeof(eNB->UL_INFO));
       memset((void*)&eNB->Sched_INFO,0,sizeof(eNB->Sched_INFO));
       LOG_I(PHY,"Setting indication lists\n");
-      eNB->UL_INFO.rx_ind.rx_pdu_list   = eNB->rx_pdu_list;
-      eNB->UL_INFO.crc_ind.crc_pdu_list = eNB->crc_pdu_list;
-      eNB->UL_INFO.sr_ind.sr_pdu_list = eNB->sr_pdu_list;
-      eNB->UL_INFO.harq_ind.harq_pdu_list = eNB->harq_pdu_list;
+      eNB->UL_INFO.rx_ind.rx_indication_body.rx_pdu_list   = eNB->rx_pdu_list;
+      eNB->UL_INFO.crc_ind.crc_indication_body.crc_pdu_list = eNB->crc_pdu_list;
+      eNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = eNB->sr_pdu_list;
+      eNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = eNB->harq_pdu_list;
       eNB->UL_INFO.cqi_ind.cqi_pdu_list = eNB->cqi_pdu_list;
       eNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = eNB->cqi_raw_pdu_list;
+      eNB->prach_energy_counter = 0;
     }
 
   }
 
-
   LOG_I(PHY,"[lte-softmodem.c] eNB structure allocated\n");
-  
-
-
 }
 
 
diff --git a/targets/RT/USER/lte-ran.c b/targets/RT/USER/lte-ran.c
index 597ceb0654c6a621df341e84637990efb1aa1b74..4f9f45df8672fd33548297dcf5c3adaa67460dce 100644
--- a/targets/RT/USER/lte-ran.c
+++ b/targets/RT/USER/lte-ran.c
@@ -1278,6 +1278,8 @@ void init_eNB_proc(int inst) {
   eNB_rxtx_proc_t *proc_rxtx;
   pthread_attr_t *attr0=NULL,*attr1=NULL,*attr_prach=NULL,*attr_asynch=NULL,*attr_single=NULL,*attr_fep=NULL,*attr_td=NULL,*attr_te;
 
+  printf("%s()\n", __FUNCTION__);
+
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
     eNB = PHY_vars_eNB_g[inst][CC_id];
     LOG_I(PHY,"Initializing eNB %d CC_id %d (%s,%s),\n",inst,CC_id,eNB_functions[eNB->node_function],eNB_timing[eNB->node_timing]);
@@ -1673,10 +1675,15 @@ void init_RAN(RAN_CONTEXT *rc,eNB_func_t node_function[], eNB_timing_t node_timi
   PHY_VARS_eNB *eNB;
   int ret;
 
+  printf("%s() rc->nb_inst:%d\n", __FUNCTION__, rc->nb_inst);
+
   for (inst=0;inst<rc->nb_inst;inst++) {
+    printf("%s() rc->nb_inst:%d rc->nb_CC:%d\n", __FUNCTION__, rc->nb_inst, rc->nb_CC);
     for (CC_id=0;CC_id<rc->nb_CC;CC_id++) {
       eNB = rc->eNB[inst][CC_id]; 
+      printf("%s() rc->nb_inst:%d rc->nb_CC:%d eNB:%p rc->eNB[%d][%d]:%p\n", __FUNCTION__, rc->nb_inst, rc->nb_CC, eNB, inst, CC_id, rc->eNB[inst][CC_id]);
       if (eNB) {
+
 	eNB->node_function      = node_function[CC_id];
 	eNB->node_timing        = node_timing[CC_id];
 	eNB->abstraction_flag   = 0;
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index 21804817d6601ef6e338bf3911ac80f06e642e87..c0dd7033ba647387be2323efb5426f316b14b7e2 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -129,6 +129,8 @@ int attach_rru(RU_t *ru);
 
 int connect_rau(RU_t *ru);
 
+extern uint8_t nfapi_mode;
+extern uint16_t sf_ahead;
 
 /*************************************************************/
 /* Functions to attach and configure RRU                     */
@@ -312,7 +314,8 @@ static inline void fh_if5_mobipass_south_out(RU_t *ru) {
 static inline void fh_if4p5_south_out(RU_t *ru) {
   if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
   LOG_D(PHY,"Sending IF4p5 for frame %d subframe %d\n",ru->proc.frame_tx,ru->proc.subframe_tx);
-  send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT);
+  if (subframe_select(&ru->frame_parms,ru->proc.subframe_tx)!=SF_UL) 
+    send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT);
 }
 
 /*************************************************************/
@@ -387,8 +390,8 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   proc->frame_rx     = f;
   proc->timestamp_rx = ((proc->frame_rx * 10)  + proc->subframe_rx ) * fp->samples_per_tti ;
   //  proc->timestamp_tx = proc->timestamp_rx +  (4*fp->samples_per_tti);
-  proc->subframe_tx  = (sf+4)%10;
-  proc->frame_tx     = (sf>5) ? (f+1)&1023 : f;
+  proc->subframe_tx  = (sf+sf_ahead)%10;
+  proc->frame_tx     = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
  
   if (proc->first_rx == 0) {
     if (proc->subframe_rx != *subframe){
@@ -574,14 +577,10 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     proc->first_tx = 0;
   }
   else {
-    if (subframe_tx != *subframe) {
-      LOG_E(PHY,"subframe_tx %d is not what we expect %d\n",subframe_tx,*subframe);
-      exit_fun("Exiting");
-    }
-    if (frame_tx != *frame) { 
-      LOG_E(PHY,"frame_tx %d is not what we expect %d\n",frame_tx,*frame);
-      exit_fun("Exiting");
-    }
+    AssertFatal(subframe_tx == *subframe,
+                "subframe_tx %d is not what we expect %d\n",subframe_tx,*subframe);
+    AssertFatal(frame_tx == *frame, 
+                "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
   }
 }
 
@@ -594,36 +593,34 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_number,symbol_mask,symbol_mask_full;
   int subframe_tx,frame_tx;
 
+LOG_E(PHY, "%s(ru:%p frame, subframe)\n", __FUNCTION__, ru);
   symbol_number = 0;
   symbol_mask = 0;
-  symbol_mask_full = (1<<fp->symbols_per_tti)-1;
-
+  symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
   do {   
     recv_IF4p5(ru, &frame_tx, &subframe_tx, &packet_type, &symbol_number);
+    if ((subframe_select(fp,*subframe) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
+    LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n",
+         *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number);
     if (proc->first_tx != 0) {
       *frame    = frame_tx;
       *subframe = subframe_tx;
       proc->first_tx = 0;
     }
     else {
-      if (frame_tx != *frame) {
-	LOG_E(PHY,"frame_tx %d is not what we expect %d\n",frame_tx,*frame);
-	exit_fun("Exiting");
-      }
-      if (subframe_tx != *subframe) {
-	LOG_E(PHY,"subframe_tx %d is not what we expect %d\n",subframe_tx,*subframe);
-	exit_fun("Exiting");
-      }
+      AssertFatal(frame_tx == *frame,
+	          "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
+      AssertFatal(subframe_tx == *subframe,
+		  "subframe_tx %d is not what we expect %d\n",subframe_tx,*subframe);
     }
     if (packet_type == IF4p5_PDLFFT) {
       symbol_mask = symbol_mask | (1<<symbol_number);
     }
-    else {
-      LOG_E(PHY,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type);
-      exit_fun("Exiting");
-    }
+    else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type);
   } while (symbol_mask != symbol_mask_full);    
 
+  if (subframe_select(fp,*subframe) == SF_DL) stop_meas(&ru->rx_fhaul);
+
   proc->subframe_tx  = subframe_tx;
   proc->frame_tx     = frame_tx;
 
@@ -666,17 +663,13 @@ void fh_if4p5_north_out(RU_t *ru) {
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK);
     return;
   }
-  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); 
 
-  AssertFatal(ru->feprx!=NULL,"No northbound FEP function, exiting\n");
-  if (ru->feprx) { 
-    LOG_D(PHY,"Doing FEP/IF4p5 for frame %d, subframe %d\n",proc->frame_rx,proc->subframe_rx);
-    ru->feprx(ru);
-    send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULFFT);
-  }
+  start_meas(&ru->tx_fhaul);
+  send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULFFT);
+  stop_meas(&ru->tx_fhaul);
 
-  if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 0 );
 }
+
 void rx_rf(RU_t *ru,int *frame,int *subframe) {
 
   RU_proc_t *proc = &ru->proc;
@@ -688,7 +681,7 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
     
   for (i=0; i<ru->nb_rx; i++)
     rxp[i] = (void*)&ru->common.rxdata[i][*subframe*fp->samples_per_tti];
-  
+
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 );
 
   old_ts = proc->timestamp_rx;
@@ -703,8 +696,9 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
  
   proc->timestamp_rx = ts-ru->ts_offset;
 
-  if (rxs != fp->samples_per_tti)
-    LOG_E(PHY,"rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs);
+  //AssertFatal(rxs == fp->samples_per_tti,
+	      //"rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs);
+  if (rxs != fp->samples_per_tti) LOG_E(PHY, "rx_rf: Asked for %d samples, got %d from USRP\n",fp->samples_per_tti,rxs);
 
   if (proc->first_rx == 1) {
     ru->ts_offset = proc->timestamp_rx;
@@ -722,15 +716,17 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   proc->subframe_rx  = (proc->timestamp_rx / fp->samples_per_tti)%10;
   // synchronize first reception to frame 0 subframe 0
 
-  proc->timestamp_tx = proc->timestamp_rx+(4*fp->samples_per_tti);
-  proc->subframe_tx  = (proc->subframe_rx+4)%10;
-  proc->frame_tx     = (proc->subframe_rx>5) ? (proc->frame_rx+1)&1023 : proc->frame_rx;
+  proc->timestamp_tx = proc->timestamp_rx+(sf_ahead*fp->samples_per_tti);
+  proc->subframe_tx  = (proc->subframe_rx+sf_ahead)%10;
+  proc->frame_tx     = (proc->subframe_rx>(9-sf_ahead)) ? (proc->frame_rx+1)&1023 : proc->frame_rx;
   
+#if 0
   LOG_D(PHY,"RU %d/%d TS %llu (off %d), frame %d, subframe %d\n",
 	ru->idx, 
 	0, 
 	(unsigned long long int)proc->timestamp_rx,
 	(int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
+#endif
 
     // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
@@ -761,10 +757,9 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );
   
   if (rxs != fp->samples_per_tti)
-    exit_fun( "problem receiving samples" );
-  
-
-  
+  {
+    //exit_fun( "problem receiving samples" );
+  }
 }
 
 
@@ -782,12 +777,11 @@ void tx_rf(RU_t *ru) {
   lte_subframe_t SF_type     = subframe_select(fp,proc->subframe_tx%10);
   lte_subframe_t prevSF_type = subframe_select(fp,(proc->subframe_tx+9)%10);
   lte_subframe_t nextSF_type = subframe_select(fp,(proc->subframe_tx+1)%10);
+  int sf_extension = 0;
+
   if ((SF_type == SF_DL) ||
       (SF_type == SF_S)) {
     
-    for (i=0; i<ru->nb_tx; i++)
-      txp[i] = (void*)&ru->common.txdata[i][proc->subframe_tx*fp->samples_per_tti]; 
-    
     int siglen=fp->samples_per_tti,flags=1;
     
     if (SF_type == SF_S) {
@@ -797,37 +791,41 @@ void tx_rf(RU_t *ru) {
     if ((fp->frame_type == TDD) &&
 	(SF_type == SF_DL)&&
 	(prevSF_type == SF_UL) &&
-	(nextSF_type == SF_DL))
+	(nextSF_type == SF_DL)) { 
       flags = 2; // start of burst
+      sf_extension = ru->N_TA_offset<<1;
+    }
     
     if ((fp->frame_type == TDD) &&
 	(SF_type == SF_DL)&&
 	(prevSF_type == SF_UL) &&
-	(nextSF_type == SF_UL))
+	(nextSF_type == SF_UL)) {
       flags = 4; // start of burst and end of burst (only one DL SF between two UL)
-  
+      sf_extension = ru->N_TA_offset<<1;
+    } 
+
+    for (i=0; i<ru->nb_tx; i++)
+      txp[i] = (void*)&ru->common.txdata[i][(proc->subframe_tx*fp->samples_per_tti)-sf_extension];
+
     
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_tx-ru->openair0_cfg.tx_sample_advance)&0xffffffff );
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
     // prepare tx buffer pointers
     
     txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
-				      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance,
+				      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
 				      txp,
-				      siglen,
+				      siglen+sf_extension,
 				      ru->nb_tx,
 				      flags);
     
-    LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx,
-	  (long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
+    //LOG_D(PHY,"[TXPATH] RU %d tx_rf, writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx,
+	  //(long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
     
     
-    
-    if (txs !=  fp->samples_per_tti) {
-      LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, fp->samples_per_tti);
-      exit_fun( "problem transmitting samples" );
-    }	
+    AssertFatal(txs ==  siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
+
   }
 }
 
@@ -947,22 +945,26 @@ static void* ru_thread_prach( void* param ) {
 
   thread_top_init("ru_thread_prach",1,500000L,1000000L,20000000L);
 
+LOG_E(PHY,"In rach thread\n");
+
+  while (RC.ru_mask>0) {
+    usleep(1e6);
+    LOG_I(PHY,"%s() RACH waiting for RU to be configured\n", __FUNCTION__);
+  }
+  LOG_I(PHY,"%s() RU configured - RACH processing thread running\n", __FUNCTION__);
+
   while (!oai_exit) {
     
     if (oai_exit) break;
     if (wait_on_condition(&proc->mutex_prach,&proc->cond_prach,&proc->instance_cnt_prach,"ru_prach_thread") < 0) break;
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 1 );      
-    rx_prach(NULL,
-	     ru,
-	     NULL,
-             NULL,
-             NULL,
-             proc->frame_prach,
-             0
+    prach_procedures(
+        ru->eNB_list[0]
 #ifdef Rel14
-	     ,0
+        ,0
 #endif
-	     );
+        );
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 0 );      
     if (release_thread(&proc->mutex_prach,&proc->instance_cnt_prach,"ru_prach_thread") < 0) break;
   }
@@ -1112,21 +1114,29 @@ void wakeup_eNBs(RU_t *ru) {
   int i;
   PHY_VARS_eNB **eNB_list = ru->eNB_list;
 
-  LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d\n",ru->num_eNB,ru->idx);
+  //LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top);
 
-  if (ru->num_eNB==1) {
+  if (ru->num_eNB==1 && ru->eNB_top!=0) {
     // call eNB function directly
 
     char string[20];
     sprintf(string,"Incoming RU %d",ru->idx);
-    LOG_D(PHY,"RU %d Waking up eNB\n",ru->idx);
+    //LOG_D(PHY,"RU %d Call eNB_top\n",ru->idx);
     ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
   }
   else {
 
+    LOG_D(PHY,"ru->num_eNB:%d\n", ru->num_eNB);
+
     for (i=0;i<ru->num_eNB;i++)
-      if (ru->wakeup_rxtx(eNB_list[i],ru) < 0)
+    {
+      LOG_D(PHY,"ru->wakeup_rxtx:%p\n", ru->wakeup_rxtx);
+
+      if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0)
+      {
 	LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
+      }
+    }
   }
 }
 
@@ -1147,7 +1157,11 @@ static inline int wakeup_prach_ru(RU_t *ru) {
     ru->proc.frame_prach    = ru->proc.frame_rx;
     ru->proc.subframe_prach = ru->proc.subframe_rx;
 
-    LOG_D(PHY,"RU %d: waking up PRACH thread\n",ru->idx);
+    // DJP - think prach_procedures() is looking at eNB frame_prach
+    ru->eNB_list[0]->proc.frame_prach = ru->proc.frame_rx;
+    ru->eNB_list[0]->proc.subframe_prach = ru->proc.subframe_rx;
+
+    //LOG_D(PHY,"RU %d: waking up PRACH thread\n",ru->idx);
     // the thread can now be woken up
     AssertFatal(pthread_cond_signal(&ru->proc.cond_prach) == 0, "ERROR pthread_cond_signal for RU prach thread\n");
   }
@@ -1186,6 +1200,40 @@ static inline int wakeup_prach_ru_br(RU_t *ru) {
 }
 #endif
 
+#if 0
+static inline int wakeup_nfapi_subframe_thread(RU_t *ru) {
+
+  int i;
+  PHY_VARS_eNB **eNB_list = ru->eNB_list;
+
+  LOG_D(PHY,"wakeup_nfapi_subframe_thread (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top);
+
+  if (ru->num_eNB==1 && ru->eNB_top!=0) {
+    // call eNB function directly
+
+    char string[20];
+    sprintf(string,"Incoming RU %d",ru->idx);
+    //LOG_D(PHY,"RU %d Call eNB_top\n",ru->idx);
+    ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
+  }
+  else {
+
+    LOG_D(PHY,"ru->num_eNB:%d\n", ru->num_eNB);
+
+    for (i=0;i<ru->num_eNB;i++)
+    {
+      LOG_D(PHY,"ru->wakeup_rxtx:%p\n", ru->wakeup_rxtx);
+
+      if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0)
+      {
+	LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
+      }
+    }
+  }
+}
+#endif
+
+
 // this is for RU with local RF unit
 void fill_rf_config(RU_t *ru, char *rf_config_file) {
 
@@ -1273,18 +1321,12 @@ int setup_RU_buffers(RU_t *ru) {
     return(-1);
   }
   
-  /*
-    if (frame_parms->frame_type == TDD) {
-    if (frame_parms->N_RB_DL == 100)
-    N_TA_offset = 624;
-    else if (frame_parms->N_RB_DL == 50)
-    N_TA_offset = 624/2;
-    else if (frame_parms->N_RB_DL == 25)
-    N_TA_offset = 624/4;
-    }
-  */
-  
   
+  if (frame_parms->frame_type == TDD) {
+    if      (frame_parms->N_RB_DL == 100) ru->N_TA_offset = 624;
+    else if (frame_parms->N_RB_DL == 50)  ru->N_TA_offset = 624/2;
+    else if (frame_parms->N_RB_DL == 25)  ru->N_TA_offset = 624/4;
+  } 
   if (ru->openair0_cfg.mmapped_dma == 1) {
     // replace RX signal buffers with mmaped HW versions
     
@@ -1334,6 +1376,9 @@ static void* ru_stats_thread(void* param) {
      if (opp_enabled == 1) {
        if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL);
        if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL);
+       if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL);
+       if (ru->fh_north_out) print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
+
      }
   }
   return(NULL);
@@ -1373,7 +1418,6 @@ static void* ru_thread( void* param ) {
         init_frame_parms(&ru->frame_parms,1);
         phy_init_RU(ru);
  
-
         ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
   }
   if (setup_RU_buffers(ru)!=0) {
@@ -1429,23 +1473,36 @@ static void* ru_thread( void* param ) {
       subframe++;
     }      
 
-    LOG_D(PHY,"RU thread (proc %p), frame %d (%p), subframe %d (%p)\n",
-	  proc, frame,&frame,subframe,&subframe);
-
-
     // synchronization on input FH interface, acquire signals/data and block
     if (ru->fh_south_in) ru->fh_south_in(ru,&frame,&subframe);
     else AssertFatal(1==0, "No fronthaul interface at south port");
 
+    LOG_D(PHY,"AFTER fh_south_in - SFN/SF:%d%d RU->proc[RX:%d%d TX:%d%d] RC.eNB[0][0]:[RX:%d%d TX(SFN):%d]\n",
+        frame,subframe,
+        proc->frame_rx,proc->subframe_rx,
+        proc->frame_tx,proc->subframe_tx,
+        RC.eNB[0][0]->proc.frame_rx,RC.eNB[0][0]->proc.subframe_rx,
+        RC.eNB[0][0]->proc.frame_tx);
+
+    if (nfapi_mode == 1) // PNF
+    {
+      // This is the earliest I think we can do this
+      //wakeup_nfapi_subframe_thread();
+    }
 
-    LOG_D(PHY,"RU thread (do_prach %d, is_prach_subframe %d), received frame %d, subframe %d\n",
-	  ru->do_prach,
-	  is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx),
-	  proc->frame_rx,proc->subframe_rx);
+    if (0 && is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx))
+      LOG_D(PHY,"RU thread (do_prach %d, is_prach_subframe %d), received frame %d, subframe %d\n",
+          ru->do_prach,
+          is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx),
+          proc->frame_rx,proc->subframe_rx);
  
-    if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) wakeup_prach_ru(ru);
+    if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) { 
+      wakeup_prach_ru(ru);
+    }
 #ifdef Rel14
-    else if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>1)) wakeup_prach_ru_br(ru);
+    else if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>1)) {
+      wakeup_prach_ru_br(ru);
+    }
 #endif
 
     // adjust for timing offset between RU
@@ -1453,21 +1510,21 @@ static void* ru_thread( void* param ) {
 
 
     // do RX front-end processing (frequency-shift, dft) if needed
-    if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); 
     if (ru->feprx) ru->feprx(ru);
-    if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 0 ); 
 
     // At this point, all information for subframe has been received on FH interface
     // If this proc is to provide synchronization, do so
     wakeup_slaves(proc);
 
-    LOG_D(PHY,"RU %d/%d frame_tx %d, subframe_tx %d\n",0,ru->idx,proc->frame_tx,proc->subframe_tx);
+    //LOG_E(PHY,"RU %d/%d frame_tx %d, subframe_tx %d - wakeup_eNBs...\n",0,ru->idx,proc->frame_tx,proc->subframe_tx);
     // wakeup all eNB processes waiting for this RU
     if (ru->num_eNB>0) wakeup_eNBs(ru);
 
-    // wait until eNBs are finished subframe RX n and TX n+4
+    //LOG_E(PHY,"%s() Before wait_on_condition()\n", __FUNCTION__);
+    // wait until eNBs are finished subframe RX n and TX n+sf_ahead
     wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread");
 
+    //LOG_E(PHY,"%s() AFTER wait_on_condition() ru->feptx_prec:%p ru->fh_north_asynch_in:%p ru->feptx_ofdm:%p ru->fh_south_out:%p ru->fh_north_out:%p\n", __FUNCTION__, ru->feptx_prec, ru->fh_north_asynch_in, ru->feptx_ofdm, ru->fh_south_out, ru->fh_north_out);
 
     // do TX front-end processing if needed (precoding and/or IDFTs)
     if (ru->feptx_prec) ru->feptx_prec(ru);
@@ -1478,7 +1535,6 @@ static void* ru_thread( void* param ) {
     if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
  
     if (ru->fh_north_out) ru->fh_north_out(ru);
-
   }
   
 
@@ -1598,6 +1654,7 @@ void init_RU_proc(RU_t *ru) {
 #endif
   char name[100];
 
+  LOG_E(PHY,"Initializing RU proc %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
 #ifndef OCP_FRAMEWORK
   LOG_I(PHY,"Initializing RU proc %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
 #endif
@@ -1652,6 +1709,8 @@ void init_RU_proc(RU_t *ru) {
   
   pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void*)ru );
 
+  LOG_E(PHY,"%s() DJP - ru->function:%d\n", __FUNCTION__, ru->function);
+
   if (ru->function == NGFI_RRU_IF4p5) {
     pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru );
 #ifdef Rel14  
@@ -1668,6 +1727,10 @@ void init_RU_proc(RU_t *ru) {
     pthread_setname_np( proc->pthread_FH, name );
     
   }
+  else if (ru->function == eNodeB_3GPP && ru->if_south == LOCAL_RF) { // DJP - need something else to distinguish between monolithic and PNF
+    LOG_E(PHY,"%s() DJP - added creation of pthread_prach\n", __FUNCTION__);
+    pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru );
+  }
 
   if (get_nprocs()>=2) { 
     if (ru->feprx) init_fep_thread(ru,NULL); 
@@ -1677,10 +1740,6 @@ void init_RU_proc(RU_t *ru) {
   
 }
 
-
-
-
-
 int check_capabilities(RU_t *ru,RRU_capabilities_t *cap) {
 
   FH_fmt_options_t fmt = cap->FH_fmt;
@@ -1746,6 +1805,10 @@ void configure_ru(int idx,
 
   AssertFatal((ret=check_capabilities(ru,capabilities)) == 0,
 	      "Cannot configure RRU %d, check_capabilities returned %d\n", idx,ret);
+  // take antenna capabilities of RRU
+  ru->nb_tx                      = capabilities->nb_tx[0];
+  ru->nb_rx                      = capabilities->nb_rx[0];
+
   // Pass configuration to RRU
   LOG_I(PHY, "Using %s fronthaul (%d), band %d \n",ru_if_formats[ru->if_south],ru->if_south,ru->frame_parms.eutra_band);
   // wait for configuration 
@@ -1754,6 +1817,8 @@ void configure_ru(int idx,
   config->band_list[0]           = ru->frame_parms.eutra_band;
   config->tx_freq[0]             = ru->frame_parms.dl_CarrierFreq;      
   config->rx_freq[0]             = ru->frame_parms.ul_CarrierFreq;      
+  config->tdd_config[0]          = ru->frame_parms.tdd_config;
+  config->tdd_config_S[0]        = ru->frame_parms.tdd_config_S;
   config->att_tx[0]              = ru->att_tx;
   config->att_rx[0]              = ru->att_rx;
   config->N_RB_DL[0]             = ru->frame_parms.N_RB_DL;
@@ -1773,10 +1838,6 @@ void configure_ru(int idx,
     }
 #endif
   }
-  // take antenna capabilities of RRU
-  ru->nb_tx                      = capabilities->nb_tx[0];
-  ru->nb_rx                      = capabilities->nb_rx[0];
-
 
   init_frame_parms(&ru->frame_parms,1);
   phy_init_RU(ru);
@@ -1791,6 +1852,13 @@ void configure_rru(int idx,
   ru->frame_parms.eutra_band                                               = config->band_list[0];
   ru->frame_parms.dl_CarrierFreq                                           = config->tx_freq[0];
   ru->frame_parms.ul_CarrierFreq                                           = config->rx_freq[0];
+  if (ru->frame_parms.dl_CarrierFreq == ru->frame_parms.ul_CarrierFreq) {
+     ru->frame_parms.frame_type                                            = TDD;
+     ru->frame_parms.tdd_config                                            = config->tdd_config[0];
+     ru->frame_parms.tdd_config_S                                          = config->tdd_config_S[0]; 
+  }
+  else
+     ru->frame_parms.frame_type                                            = FDD;
   ru->att_tx                                                               = config->att_tx[0];
   ru->att_rx                                                               = config->att_rx[0];
   ru->frame_parms.N_RB_DL                                                  = config->N_RB_DL[0];
@@ -1867,12 +1935,15 @@ void init_RU(char *rf_config_file) {
   // read in configuration file)
   printf("configuring RU from file\n");
   RCconfig_RU();
-  printf("number of L1 instances %d, number of RU %d\n",RC.nb_L1_inst,RC.nb_RU);
+  LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_nprocs());
 
-  for (i=0;i<RC.nb_L1_inst;i++) 
-    for (CC_id=0;CC_id<RC.nb_CC[i];CC_id++) RC.eNB[i][CC_id]->num_RU=0;
+  if (RC.nb_CC != 0)
+    for (i=0;i<RC.nb_L1_inst;i++) 
+      for (CC_id=0;CC_id<RC.nb_CC[i];CC_id++) RC.eNB[i][CC_id]->num_RU=0;
 
+LOG_E(PHY,"Process RUs RC.nb_RU:%d\n",RC.nb_RU);
   for (ru_id=0;ru_id<RC.nb_RU;ru_id++) {
+LOG_E(PHY,"Process RC.ru[%d]\n",ru_id);
     ru               = RC.ru[ru_id];
     ru->rf_config_file = rf_config_file;
     ru->idx          = ru_id;              
@@ -1880,24 +1951,47 @@ void init_RU(char *rf_config_file) {
     // use eNB_list[0] as a reference for RU frame parameters
     // NOTE: multiple CC_id are not handled here yet!
 
-    
-    eNB0             = ru->eNB_list[0];
-    if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
-      AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
+    printf("%s() RC.ru[%d].num_eNB:%d ru->eNB_list[0]:%p RC.eNB[0][0]:%p rf_config_file:%s\n", __FUNCTION__, ru_id, ru->num_eNB, ru->eNB_list[0], RC.eNB[0][0], ru->rf_config_file);
 
-    if (eNB0) {
-      LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
-      memcpy((void*)&ru->frame_parms,(void*)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+    if (ru->eNB_list[0] == 0)
+    {
+      LOG_E(PHY,"%s() DJP - ru->eNB_list ru->num_eNB are not initialized - so do it manually\n", __FUNCTION__);
+      ru->eNB_list[0] = RC.eNB[0][0];
+      ru->num_eNB=1;
+      //
+      // DJP - feptx_prec() / feptx_ofdm() parses the eNB_list (based on num_eNB) and copies the txdata_F to txdata in RU
+      //
+    }
+    else
+    {
+    LOG_E(PHY,"DJP - delete code above this %s:%d\n", __FILE__, __LINE__);
+    }
 
-      // attach all RU to all eNBs in its list/
-      for (i=0;i<ru->num_eNB;i++) {
-	eNB0 = ru->eNB_list[i];
-	eNB0->RU_list[eNB0->num_RU++] = ru;
+    eNB0             = ru->eNB_list[0];
+    printf("RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south);
+    printf("eNB0:%p\n", eNB0);
+    if (eNB0)
+    {
+      if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
+        AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
+
+      if (eNB0) {
+        LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
+        memcpy((void*)&ru->frame_parms,(void*)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+
+        // attach all RU to all eNBs in its list/
+        LOG_E(PHY,"ru->num_eNB:%d eNB0->num_RU:%d\n", ru->num_eNB, eNB0->num_RU);
+        for (i=0;i<ru->num_eNB;i++) {
+          eNB0 = ru->eNB_list[i];
+          eNB0->RU_list[eNB0->num_RU++] = ru;
+        }
       }
     }
     //    LOG_I(PHY,"Initializing RRU descriptor %d : (%s,%s,%d)\n",ru_id,ru_if_types[ru->if_south],eNB_timing[ru->if_timing],ru->function);
 
-    
+
+LOG_E(PHY,"ru->if_south:%d\n", ru->if_south);
+
     switch (ru->if_south) {
     case LOCAL_RF:   // this is an RU with integrated RF (RRU, eNB)
       if (ru->function ==  NGFI_RRU_IF5) {                 // IF5 RRU
@@ -1913,6 +2007,8 @@ void init_RU(char *rf_config_file) {
 	ru->ifdevice.host_type    = RRU_HOST;
 	ru->rfdevice.host_type    = RRU_HOST;
 	ru->ifdevice.eth_params   = &ru->eth_params;
+    reset_meas(&ru->rx_fhaul);
+    reset_meas(&ru->tx_fhaul);
 
 	ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
 	printf("openair0_transport_init returns %d for ru_id %d\n",ret,ru_id);
@@ -1927,13 +2023,15 @@ void init_RU(char *rf_config_file) {
 	ru->fh_north_out          = fh_if4p5_north_out;       // send_IF4p5 on reception
 	ru->fh_south_out          = tx_rf;                    // send output to RF
 	ru->fh_north_asynch_in    = fh_if4p5_north_asynch_in; // TX packets come asynchronously
-	ru->feprx                 = (get_nprocs()<=4) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
-	ru->feptx_ofdm            = (get_nprocs()<=4) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
+	ru->feprx                 = (get_nprocs()<=2) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
+	ru->feptx_ofdm            = (get_nprocs()<=2) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
 	ru->feptx_prec            = NULL;
 	ru->start_if              = start_if;                 // need to start the if interface for if4p5
 	ru->ifdevice.host_type    = RRU_HOST;
 	ru->rfdevice.host_type    = RRU_HOST;
 	ru->ifdevice.eth_params   = &ru->eth_params;
+    reset_meas(&ru->rx_fhaul);
+    reset_meas(&ru->tx_fhaul);
 
 	ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
 	printf("openair0_transport_init returns %d for ru_id %d\n",ret,ru_id);
@@ -1968,7 +2066,8 @@ void init_RU(char *rf_config_file) {
       if (setup_RU_buffers(ru)!=0) {
 	printf("Exiting, cannot initialize RU Buffers\n");
 	exit(-1);
-      }*/
+      }
+      */
       break;
 
     case REMOTE_IF5: // the remote unit is IF5 RRU
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 5f98f2a5197c7a8ad402359697494b4c13df0b8c..0dec98e137ae4583ceadfa2392b65d2b1a28ce17 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -101,7 +101,6 @@ unsigned short config_frames[4] = {2,9,11,13};
 #endif
 #include "lte-softmodem.h"
 
-
 #ifdef XFORMS
 // current status is that every UE has a DL scope for a SINGLE eNB (eNB_id=0)
 // at eNB 0, an UL scope for every UE
@@ -113,10 +112,16 @@ unsigned char                   scope_enb_num_ue = 2;
 static pthread_t                forms_thread; //xforms
 #endif //XFORMS
 
+pthread_cond_t nfapi_sync_cond;
+pthread_mutex_t nfapi_sync_mutex;
+int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
+
+uint8_t nfapi_mode = 0;
+
 pthread_cond_t sync_cond;
 pthread_mutex_t sync_mutex;
 int sync_var=-1; //!< protected by mutex \ref sync_mutex.
-uint8_t nfapi_mode = 0;
+int config_sync_var=-1;
 
 uint16_t runtime_phy_rx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
 uint16_t runtime_phy_tx[29][6]; // SISO [MCS 0-28][RBs 0-5 : 6, 15, 25, 50, 75, 100]
@@ -206,6 +211,12 @@ uint64_t num_missed_slots=0; // counter for the number of missed slots
 extern void reset_opp_meas(void);
 extern void print_opp_meas(void);
 
+extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
+			  uint8_t UE_id,
+			  uint8_t abstraction_flag);
+
+extern void init_eNB_afterRU(void);
+
 int transmission_mode=1;
 
 
@@ -835,7 +846,7 @@ void init_openair0() {
 
 void wait_RUs(void) {
 
-  LOG_I(PHY,"Waiting for RUs to be configured ...\n");
+  LOG_I(PHY,"Waiting for RUs to be configured ... RC.ru_mask:%02lx\n", RC.ru_mask);
 
   // wait for all RUs to be configured over fronthaul
   pthread_mutex_lock(&RC.ru_mutex);
@@ -844,6 +855,7 @@ void wait_RUs(void) {
 
   while (RC.ru_mask>0) {
     pthread_cond_wait(&RC.ru_cond,&RC.ru_mutex);
+    printf("RC.ru_mask:%02lx\n", RC.ru_mask);
   }
 
   LOG_I(PHY,"RUs configured\n");
@@ -857,18 +869,36 @@ void wait_eNBs(void) {
 
   while (waiting==1) {
     printf("Waiting for eNB L1 instances to all get configured ... sleeping 500ms (nb_L1_inst %d)\n",RC.nb_L1_inst);
-    usleep(500000);
+    usleep(5000000);
     waiting=0;
-    for (i=0;i<RC.nb_L1_inst;i++)
-      for (j=0;j<RC.nb_L1_CC[i];j++)
+    for (i=0;i<RC.nb_L1_inst;i++) {
+
+      printf("RC.nb_L1_CC[%d]:%d\n", i, RC.nb_L1_CC[i]);
+
+      for (j=0;j<RC.nb_L1_CC[i];j++) {
 	if (RC.eNB[i][j]->configured==0) {
 	  waiting=1;
 	  break;
-	}
+        } 
+      }
+    }
   }
   printf("eNB L1 are configured\n");
 }
 
+static inline void wait_nfapi_init(char *thread_name) {
+
+  printf( "waiting for NFAPI PNF connection and population of global structure (%s)\n",thread_name);
+  pthread_mutex_lock( &nfapi_sync_mutex );
+  
+  while (nfapi_sync_var<0)
+    pthread_cond_wait( &nfapi_sync_cond, &nfapi_sync_mutex );
+  
+  pthread_mutex_unlock(&nfapi_sync_mutex);
+  
+  printf( "NFAPI: got sync (%s)\n", thread_name);
+}
+
 int main( int argc, char **argv )
 {
   int i;
@@ -970,6 +1000,7 @@ int main( int argc, char **argv )
     log_set_instance_type (LOG_INSTANCE_ENB);
   }
 
+  printf("ITTI init\n");
   itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file);
 
   // initialize mscgen log after ITTI
@@ -989,6 +1020,7 @@ int main( int argc, char **argv )
   }
 
 #ifdef PDCP_USE_NETLINK
+  printf("PDCP netlink\n");
   netlink_init();
 #if defined(PDCP_USE_NETLINK_QUEUES)
   pdcp_netlink_init();
@@ -1022,6 +1054,7 @@ int main( int argc, char **argv )
 
 
 
+  printf("Before CC \n");
 
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
 
@@ -1085,6 +1118,7 @@ int main( int argc, char **argv )
     }
   }
 
+  printf("Runtime table\n");
   fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
   cpuf=get_cpu_freq_GHz();
   
@@ -1092,6 +1126,7 @@ int main( int argc, char **argv )
   
 #ifndef DEADLINE_SCHEDULER
   
+  printf("NO deadline scheduler\n");
   /* Currently we set affinity for UHD to CPU 0 for eNB/UE and only if number of CPUS >2 */
   
   cpu_set_t cpuset;
@@ -1132,7 +1167,10 @@ int main( int argc, char **argv )
   
 #if defined(ENABLE_ITTI)
   
+  printf("ITTI enabled\n");
   
+  printf("UE_flag:%d\n", UE_flag);
+  printf("RC.nb_inst:%d\n", RC.nb_inst);
   if ((UE_flag == 1)||
       (RC.nb_inst > 0))  {
     
@@ -1158,9 +1196,6 @@ int main( int argc, char **argv )
     } 
   }
   
-  
-  
-  
   mlockall(MCL_CURRENT | MCL_FUTURE);
   
   pthread_cond_init(&sync_cond,NULL);
@@ -1169,6 +1204,8 @@ int main( int argc, char **argv )
 #ifdef XFORMS
   int UE_id;
   
+  printf("XFORMS\n");
+
   if (do_forms==1) {
     fl_initialize (&argc, argv, NULL, 0, 0);
     
@@ -1225,8 +1262,36 @@ int main( int argc, char **argv )
   
   rt_sleep_ns(10*100000000ULL);
   
+  if (nfapi_mode)
+  {
+    printf("NFAPI*** - mutex and cond created - will block shortly for completion of PNF connection\n");
+    pthread_cond_init(&sync_cond,NULL);
+    pthread_mutex_init(&sync_mutex, NULL);
+  }
   
-  
+  const char *nfapi_mode_str = "<UNKNOWN>";
+
+  switch(nfapi_mode)
+  {
+    case 0:
+      nfapi_mode_str = "MONOLITHIC";
+      break;
+    case 1:
+      nfapi_mode_str = "PNF";
+      break;
+    case 2:
+      nfapi_mode_str = "VNF";
+      break;
+    default:
+      nfapi_mode_str = "<UNKNOWN NFAPI MODE>";
+      break;
+  }
+  printf("NFAPI MODE:%s\n", nfapi_mode_str);
+
+  if (nfapi_mode==2) // VNF
+    wait_nfapi_init("main?");
+
+  printf("START MAIN THREADS\n");
   
   // start the main threads
   if (UE_flag == 1) {
@@ -1241,15 +1306,18 @@ int main( int argc, char **argv )
   }
   else { 
     number_of_cards = 1;    
+    printf("RC.nb_L1_inst:%d\n", RC.nb_L1_inst);
     if (RC.nb_L1_inst > 0) {
-      printf("Initializing eNB threads\n");
+      printf("Initializing eNB threads single_thread_flag:%d wait_for_sync:%d\n", single_thread_flag,wait_for_sync);
       init_eNB(single_thread_flag,wait_for_sync);
       //      for (inst=0;inst<RC.nb_L1_inst;inst++)
       //	for (CC_id=0;CC_id<RC.nb_L1_CC[inst];CC_id++) phy_init_lte_eNB(RC.eNB[inst][CC_id],0,0);
     }
 
+    printf("wait_eNBs()\n");
     wait_eNBs();
 
+    printf("About to Init RU threads RC.nb_RU:%d\n", RC.nb_RU);
     if (RC.nb_RU >0) {
       printf("Initializing RU threads\n");
       init_RU(rf_config_file);
@@ -1259,10 +1327,31 @@ int main( int argc, char **argv )
       }
     }
 
+    config_sync_var=0;
+
+    if (nfapi_mode==1) // PNF
+    {
+      wait_nfapi_init("main?");
+    }
+
+    printf("wait RUs\n");
     wait_RUs();
+    printf("ALL RUs READY!\n");
+    printf("RC.nb_RU:%d\n", RC.nb_RU);
     // once all RUs are ready intiailize the rest of the eNBs ((dependence on final RU parameters after configuration)
-    init_eNB_afterRU();
+    printf("ALL RUs ready - init eNBs\n");
+
+    if (nfapi_mode != 1 && nfapi_mode != 2)
+    {
+      printf("Not NFAPI mode - call init_eNB_afterRU()\n");
+      init_eNB_afterRU();
+    }
+    else
+    {
+      printf("NFAPI mode - DO NOT call init_eNB_afterRU()\n");
+    }
     
+    printf("ALL RUs ready - ALL eNBs ready\n");
   }
   
   
@@ -1296,38 +1385,35 @@ int main( int argc, char **argv )
     //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
   } else {
     
-    
-    
-    
+    printf("eNB mode\n");
     
   }
   
-  
-  
-  
   printf("Sending sync to all threads\n");
   
-  
-  
   pthread_mutex_lock(&sync_mutex);
   sync_var=0;
   pthread_cond_broadcast(&sync_cond);
   pthread_mutex_unlock(&sync_mutex);
+  printf("About to call end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
   end_configmodule();
+  printf("Called end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
 
   // wait for end of program
   printf("TYPE <CTRL-C> TO TERMINATE\n");
   //getchar();
 
-
 #if defined(ENABLE_ITTI)
   printf("Entering ITTI signals handler\n");
   itti_wait_tasks_end();
+  printf("Returned from ITTI signal handler\n");
   oai_exit=1;
+  printf("oai_exit=%d\n",oai_exit);
 #else
 
   while (oai_exit==0)
     rt_sleep_ns(100000000ULL);
+  printf("Terminating application - oai_exit=%d\n",oai_exit);
 
 #endif
 
@@ -1370,6 +1456,9 @@ int main( int argc, char **argv )
   pthread_cond_destroy(&sync_cond);
   pthread_mutex_destroy(&sync_mutex);
 
+  pthread_cond_destroy(&nfapi_sync_cond);
+  pthread_mutex_destroy(&nfapi_sync_mutex);
+
 
 
   // *** Handle per CC_id openair0
diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h
index 28003f75db4b56c31c4a5ae035a9b57c47eca74f..c0cc6ba77ca3b815c7193226bc367ac4a94a6789 100644
--- a/targets/RT/USER/lte-softmodem.h
+++ b/targets/RT/USER/lte-softmodem.h
@@ -198,9 +198,9 @@ extern int T_dont_fork;
 /*   optname                     helpstr                paramflags           XXXptr           defXXXval         type       numelt           */
 /*------------------------------------------------------------------------------------------------------------------------------------------*/
 #define CMDLINE_TTRACEPARAMS_DESC {  \
-{"T_port",                     CONFIG_HLP_TPORT,      0,		uptr:&T_port,	     defuintval:0,	TYPE_UINT,   0},	   \
-{"T_nowait",                   CONFIG_HLP_NOTWAIT,    PARAMFLAG_BOOL,	uptr:&T_nowait,      defuintval:0,	TYPE_UINT,   0},	   \
-{"T_dont_fork",                CONFIG_HLP_TNOFORK,    PARAMFLAG_BOOL,	uptr:&T_dont_fork,   defuintval:1,	TYPE_UINT,   0},	   \
+{"T_port",                     CONFIG_HLP_TPORT,      0,		iptr:&T_port,	     defintval:0,	TYPE_INT,   0},	   \
+{"T_nowait",                   CONFIG_HLP_NOTWAIT,    PARAMFLAG_BOOL,	iptr:&T_nowait,      defintval:0,	TYPE_INT,   0},	   \
+{"T_dont_fork",                CONFIG_HLP_TNOFORK,    PARAMFLAG_BOOL,	iptr:&T_dont_fork,   defintval:1,	TYPE_INT,   0},	   \
 } 
 
 
@@ -259,4 +259,9 @@ extern void init_fep_thread(PHY_VARS_eNB *, pthread_attr_t *);
 extern void init_td_thread(PHY_VARS_eNB *, pthread_attr_t *);
 extern void init_te_thread(PHY_VARS_eNB *, pthread_attr_t *);
 
+PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
+                          uint8_t UE_id,
+                          uint8_t abstraction_flag);
+void init_eNB_afterRU(void);
+
 #endif
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 9da164d41ece4e0b36982a576b21f6b3c680f080..09e59b4d3eef32f2451912bbd9cc99f4a881d815 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/msg_helper.c b/targets/RT/USER/msg_helper.c
index 32a0da6cd4aec30a2647a54c208c6997f77c4e06..ac99e48ff747f6edef813c4ff29f9a28902bb42c 100644
--- a/targets/RT/USER/msg_helper.c
+++ b/targets/RT/USER/msg_helper.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/msg_many.c b/targets/RT/USER/msg_many.c
index ec582558a4bf09939fb1eb484edf96b09f633173..17e03c6c5a023bd3135a404d31f2958f18c48d34 100644
--- a/targets/RT/USER/msg_many.c
+++ b/targets/RT/USER/msg_many.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/msg_many.h b/targets/RT/USER/msg_many.h
index ca5fd85b51da12c8a52df339e83a633d25ad584b..5b9d465e33658b9f8b992d3058cae13b99a93619 100644
--- a/targets/RT/USER/msg_many.h
+++ b/targets/RT/USER/msg_many.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/pnf.gtkw b/targets/RT/USER/pnf.gtkw
new file mode 100644
index 0000000000000000000000000000000000000000..979d6321383e625d12369a7dfd8dcdfc0d482b6a
--- /dev/null
+++ b/targets/RT/USER/pnf.gtkw
@@ -0,0 +1,54 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Tue Jul 25 20:26:12 2017
+[*]
+[dumpfile] "/tmp/openair_dump_eNB.vcd"
+[dumpfile_mtime] "Tue Jul 25 20:11:55 2017"
+[dumpfile_size] 19201475
+[savefile] "/home/papillon/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
+[timestart] 29023604000
+[size] 1236 578
+[pos] 309 0
+*-20.793451 29026062100 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[sst_width] 386
+[signals_width] 262
+[sst_expanded] 1
+[sst_vpaned_height] 146
+@28
+functions.trx_read
+functions.trx_write
+@24
+variables.trx_ts[63:0]
+variables.trx_tst[63:0]
+@25
+variables.frame_number_RX0_RU[63:0]
+variables.subframe_number_RX0_RU[63:0]
+@25
+variables.frame_number_TX0_RU[63:0]
+variables.subframe_number_TX0_RU[63:0]
+@24
+functions.phy_procedures_ru_feprx0
+functions.phy_procedures_ru_feprx1
+functions.phy_procedures_eNb_rx_uespec0
+functions.phy_procedures_eNb_tx0
+functions.eNB_thread_rxtx1
+functions.phy_enb_prach_rx
+functions.phy_enb_rs_tx
+functions.phy_enb_pdcch_tx
+functions.nfapi_subframe
+functions.generate_pcfich
+functions.generate_dci0
+functions.pdcch_scrambling
+functions.pdcch_modulation
+functions.pdcch_interleaving
+functions.pdcch_tx
+functions.generate_dlsch
+functions.generate_phich
+functions.udp_enb_task
+functions.phy_procedures_ru_feptx_ofdm0
+functions.phy_procedures_ru_feptx_ofdm1
+functions.phy_procedures_ru_feptx_prec0
+functions.phy_procedures_ru_feptx_prec1
+functions.phy_enb_prach_rx
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/targets/RT/USER/rrh.c b/targets/RT/USER/rrh.c
index f658e6b40163aa9636ddc4a336f1158c4b1df071..88bd3f644dde90213cbffa24a287a7df9681a454 100644
--- a/targets/RT/USER/rrh.c
+++ b/targets/RT/USER/rrh.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/rrh_gw.c b/targets/RT/USER/rrh_gw.c
index e73c9ef4ebe0455db9a51b4c74dd908994df0cdf..7aea0484be466aacab2783c4078e1552622970cc 100644
--- a/targets/RT/USER/rrh_gw.c
+++ b/targets/RT/USER/rrh_gw.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/rrh_gw.h b/targets/RT/USER/rrh_gw.h
index 075cbf3c2b149695b3566cf3634e09d61ddc7cce..97ffa5a893fb25cbda241a57c4fa677b39032129 100644
--- a/targets/RT/USER/rrh_gw.h
+++ b/targets/RT/USER/rrh_gw.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/rrh_gw_externs.h b/targets/RT/USER/rrh_gw_externs.h
index b85f0ae7a2254b43d0a38d6ecceaadb46ce33fa8..0786743399630eda5240be1c44ab89365ad2be10 100644
--- a/targets/RT/USER/rrh_gw_externs.h
+++ b/targets/RT/USER/rrh_gw_externs.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/rt_wrapper.c b/targets/RT/USER/rt_wrapper.c
index e50b0ae34f4d79d8be4892f3f9a964512a32369c..8751e3c81646ed0c80be34785a9a20efd7c9219c 100644
--- a/targets/RT/USER/rt_wrapper.c
+++ b/targets/RT/USER/rt_wrapper.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -44,6 +44,8 @@
 #include <sys/sysinfo.h>
 #include "rt_wrapper.h"
 
+#include "openair1/PHY/defs.h"
+
 static int latency_target_fd = -1;
 static int32_t latency_target_value = 0;
 /* Latency trick - taken from cyclictest.c
diff --git a/targets/RT/USER/rt_wrapper.h b/targets/RT/USER/rt_wrapper.h
index ec623e913b0fe94654a4665bb8c6617bc73ab71e..f9828d0db97e10dba1d20d73b31adba9cb32cc51 100644
--- a/targets/RT/USER/rt_wrapper.h
+++ b/targets/RT/USER/rt_wrapper.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/sleeptest.c b/targets/RT/USER/sleeptest.c
index 593e62dfac55991976360bfcdf15476cecfe8884..ba5cb0ce1551dfb56f3a8dc717b87ecadaa31412 100644
--- a/targets/RT/USER/sleeptest.c
+++ b/targets/RT/USER/sleeptest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/stats.c b/targets/RT/USER/stats.c
index 4d9343f4bc66e42420671902ca11e619611a9508..fa8ab38cb28222ed1b0e7765c98126e8274abe31 100644
--- a/targets/RT/USER/stats.c
+++ b/targets/RT/USER/stats.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/stats.h b/targets/RT/USER/stats.h
index 7be9380852e250e2226742acaed0feee1891fc6b..264c8f7af028556a4aa5f3bbf293e45082e68db6 100644
--- a/targets/RT/USER/stats.h
+++ b/targets/RT/USER/stats.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/RT/USER/synctest.c b/targets/RT/USER/synctest.c
index 6122f67cd06c05ddbfe2d1049857afda6059896f..ff65231df1d05622c4fbb559b1002ecdbfbb82fb 100644
--- a/targets/RT/USER/synctest.c
+++ b/targets/RT/USER/synctest.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash b/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash
index bb45a82e131f29afad0ab97c9b528866ec7a6e9d..9c4947d479b8830d27e14d498a4841108684f1e1 100755
--- a/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash
+++ b/targets/SCRIPTS/install_asn1c_0.9.24.modified.bash
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/SIMU/PROC/Process.c b/targets/SIMU/PROC/Process.c
index 9d80c74d99bd70faf341d1f62e3c38672de3b062..9b529fd593633c39734e508fc942b735d3a1d33f 100644
--- a/targets/SIMU/PROC/Process.c
+++ b/targets/SIMU/PROC/Process.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/PROC/Process.h b/targets/SIMU/PROC/Process.h
index 1ab2f3be15bbfa8d57f1e65e6d71361d8a93712b..71383f945f47fde35e0d0578933d6ccb0b83fd40 100644
--- a/targets/SIMU/PROC/Process.h
+++ b/targets/SIMU/PROC/Process.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/PROC/Tsync.h b/targets/SIMU/PROC/Tsync.h
index a60501c13ef1efcaa49e4b6be8b40c540c1b23c8..a6ffe11defc3e273139bb793bf3b0e963620063d 100644
--- a/targets/SIMU/PROC/Tsync.h
+++ b/targets/SIMU/PROC/Tsync.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/PROC/channel_sim_proc.c b/targets/SIMU/PROC/channel_sim_proc.c
index b54fe36460cbe2831747d9984278d31716d3c920..dd0adec0d2a05750b33d27f8e8c1955f7920d733 100644
--- a/targets/SIMU/PROC/channel_sim_proc.c
+++ b/targets/SIMU/PROC/channel_sim_proc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/PROC/channel_sim_proc.h b/targets/SIMU/PROC/channel_sim_proc.h
index d95f3e7aabc15513d7a0c62aaf436be1e61db41d..1d5b53a1899d5b97ab524db9535c6d642106164d 100644
--- a/targets/SIMU/PROC/channel_sim_proc.h
+++ b/targets/SIMU/PROC/channel_sim_proc.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/PROC/interface.h b/targets/SIMU/PROC/interface.h
index 52b100f5944b520541eb07ec07462fb2215075e1..4c00d9d6f3259219e9f6ea7accdbe93b8f554fef 100644
--- a/targets/SIMU/PROC/interface.h
+++ b/targets/SIMU/PROC/interface.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/channel_sim.c b/targets/SIMU/USER/channel_sim.c
index 8efcca81e073f5056366cfd54297f437fa9f8b5a..91fc1cd0591934c539fc99ae893b41987beb2ff2 100644
--- a/targets/SIMU/USER/channel_sim.c
+++ b/targets/SIMU/USER/channel_sim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/cor_SF_sim.c b/targets/SIMU/USER/cor_SF_sim.c
index ea464a60dcb58e04fc276357c197d1b8b6f21b46..63f3be153e713a87e3f3d77704e8ebb6ede65aef 100644
--- a/targets/SIMU/USER/cor_SF_sim.c
+++ b/targets/SIMU/USER/cor_SF_sim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/cor_SF_sim.h b/targets/SIMU/USER/cor_SF_sim.h
index 3e2933cc98b74a37d28ecd0d2933cafeea7d3893..35b75564e8e2a61ccfe599f9d0d4792df64a5169 100644
--- a/targets/SIMU/USER/cor_SF_sim.h
+++ b/targets/SIMU/USER/cor_SF_sim.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/event_handler.c b/targets/SIMU/USER/event_handler.c
index f0239b621d0830b0b90f6ff5416207c01610285e..7c9f6b73fc8186c29b1d0be642df36857a240289 100644
--- a/targets/SIMU/USER/event_handler.c
+++ b/targets/SIMU/USER/event_handler.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/event_handler.h b/targets/SIMU/USER/event_handler.h
index c315af4b8913d77abb226094c718111de742ac4f..d6579fd411eb7f7afad679d93c37da36ec5e9c5f 100644
--- a/targets/SIMU/USER/event_handler.h
+++ b/targets/SIMU/USER/event_handler.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c
index 9f59a116a0f31f027807a710e4a41c099460414d..0818629727c7e4e2fc6b2c74e7dd0971c4bb4de9 100644
--- a/targets/SIMU/USER/init_lte.c
+++ b/targets/SIMU/USER/init_lte.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/init_lte.h b/targets/SIMU/USER/init_lte.h
index 87974b33bdd9e42870bfefaba2404d74a5350eaf..6f0aa0a6eb5ea8840a6b587bd7f18d6563d251b3 100644
--- a/targets/SIMU/USER/init_lte.h
+++ b/targets/SIMU/USER/init_lte.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c
index 6490448927c85188f28de7c4762b82ce6065e96b..94e05dd754b1b11afdfbc3015925aad04f1dac14 100644
--- a/targets/SIMU/USER/oaisim.c
+++ b/targets/SIMU/USER/oaisim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim.h b/targets/SIMU/USER/oaisim.h
index adf4b3c1b72469af8c6cbbda80d18183ea4ead9f..ce21470ed4918e57310472946a20f930e6b305f2 100644
--- a/targets/SIMU/USER/oaisim.h
+++ b/targets/SIMU/USER/oaisim.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c
index 2933350d9170273e17a80fe5d15409109d5484ce..17ed9ff571bb5b43cdac34ffb6b734d9279427e2 100644
--- a/targets/SIMU/USER/oaisim_config.c
+++ b/targets/SIMU/USER/oaisim_config.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim_config.h b/targets/SIMU/USER/oaisim_config.h
index 3d504a93eb27f7c69c4f9e9f723d84bbe7fd34bb..fe1309b7a48531033474e6bf7413bd54a9b0642c 100644
--- a/targets/SIMU/USER/oaisim_config.h
+++ b/targets/SIMU/USER/oaisim_config.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c
index f916faed6ea0500caba2a151c6a612fdda882d3c..dce104dc0afba2b16288141c66e996f1877684f5 100644
--- a/targets/SIMU/USER/oaisim_functions.c
+++ b/targets/SIMU/USER/oaisim_functions.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -785,7 +785,7 @@ void get_simulation_options(int argc, char *argv[])
   
   if (RC.config_file_name != NULL) {
     /* Read eNB configuration file */
-    RCConfig(RC.config_file_name);
+    RCConfig();
     printf("returned with %d eNBs, %d rus\n",RC.nb_inst,RC.nb_RU);
     oai_emulation.info.nb_enb_local = RC.nb_inst;
     oai_emulation.info.nb_ru_local = RC.nb_RU;
diff --git a/targets/SIMU/USER/oaisim_functions.h b/targets/SIMU/USER/oaisim_functions.h
index 14e449921dfa79898bf7e0e55d4807a581ab7ad1..8bbf90df36231582cf511cb93d910e5ded7d6219 100644
--- a/targets/SIMU/USER/oaisim_functions.h
+++ b/targets/SIMU/USER/oaisim_functions.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/oaisim_pad.c b/targets/SIMU/USER/oaisim_pad.c
index 58589ef8f7e80e5c00748335bb71df9be754ef02..1f251de581cd666e5a00877a47bbc8e93696793d 100644
--- a/targets/SIMU/USER/oaisim_pad.c
+++ b/targets/SIMU/USER/oaisim_pad.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/phy_procedures_sim_form.c b/targets/SIMU/USER/phy_procedures_sim_form.c
index f6a4451a1c5c5521dfeb046e65a3e45f8b951ad1..bfc769413a890f833926ad723878a56db4b2e606 100644
--- a/targets/SIMU/USER/phy_procedures_sim_form.c
+++ b/targets/SIMU/USER/phy_procedures_sim_form.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/phy_procedures_sim_form.h b/targets/SIMU/USER/phy_procedures_sim_form.h
index 80e78ce2b187f8017d83b4eb2e3ecc2fe2d89906..df8f846f962cb0c61afd1ac766b9c182a3c8d98e 100644
--- a/targets/SIMU/USER/phy_procedures_sim_form.h
+++ b/targets/SIMU/USER/phy_procedures_sim_form.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/SIMU/USER/sinr_sim.c b/targets/SIMU/USER/sinr_sim.c
index 6d26d2fa5dae9d918a3bbfb382c0cd251fe0ca61..522f4147cebd44392442afe16ed24a6fde2606e5 100644
--- a/targets/SIMU/USER/sinr_sim.c
+++ b/targets/SIMU/USER/sinr_sim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/AT_COMMANDS/oaisim.c b/targets/TEST/AT_COMMANDS/oaisim.c
index 2f478929cc6075b183dbb1830ed1479f50a2c7b5..4420d583e3c809a50ab1a372e1399a5206b8f8ff 100644
--- a/targets/TEST/AT_COMMANDS/oaisim.c
+++ b/targets/TEST/AT_COMMANDS/oaisim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/OAI/case01.py b/targets/TEST/OAI/case01.py
index 2d704a7d1f9fa778961d12ee4f6e744062191841..cdc3bd9eb48d1c90459118eadb206f0ddfbe0227 100644
--- a/targets/TEST/OAI/case01.py
+++ b/targets/TEST/OAI/case01.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case02.py b/targets/TEST/OAI/case02.py
index dc7fcb7a4fbf12964c9c5cb8a00f4641c6955001..741c96cd76ae9adfa468fca81eda911af5055d64 100644
--- a/targets/TEST/OAI/case02.py
+++ b/targets/TEST/OAI/case02.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case03.py b/targets/TEST/OAI/case03.py
index bfd0eda45b7a5f01100e2ce4872a0113eb163221..e2a783e3eab8900049995758f0ff3714b1bbb046 100644
--- a/targets/TEST/OAI/case03.py
+++ b/targets/TEST/OAI/case03.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case04.py b/targets/TEST/OAI/case04.py
index 09bc88d68836a7c79546c00fed322017e280828a..eb77f7229740894d86202d604192792e4781fce3 100644
--- a/targets/TEST/OAI/case04.py
+++ b/targets/TEST/OAI/case04.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case05.py b/targets/TEST/OAI/case05.py
index c7186f466a8fe5f9f0d6576e5278119c8aa079f9..4f03368721d2ff49d5197152a68cf6fc5f4b5253 100644
--- a/targets/TEST/OAI/case05.py
+++ b/targets/TEST/OAI/case05.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case11.py b/targets/TEST/OAI/case11.py
index 5d24bc3c026a57763f0e327944af8415135417db..9a74a1637e8ad9aeccf9c8749691a31664733b75 100644
--- a/targets/TEST/OAI/case11.py
+++ b/targets/TEST/OAI/case11.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case12.py b/targets/TEST/OAI/case12.py
index d9970eebc39853721e87b26815a4fe33858eb7ac..baa6a733678c6e03f10de8d13ece2c2129d5925a 100644
--- a/targets/TEST/OAI/case12.py
+++ b/targets/TEST/OAI/case12.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/case13.py b/targets/TEST/OAI/case13.py
index ea8f3ad15d15b5b7a720b9d273f478769ad2c105..d6fcca1bc50b375cc6506091280dd99f807d219d 100644
--- a/targets/TEST/OAI/case13.py
+++ b/targets/TEST/OAI/case13.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/core.py b/targets/TEST/OAI/core.py
index d5275d29ca749bbc1064d4ad9783e54bbed650a1..acdd6c830ccef05f87069943e219007904520d7b 100644
--- a/targets/TEST/OAI/core.py
+++ b/targets/TEST/OAI/core.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/log.py b/targets/TEST/OAI/log.py
index 25eb2b5ffb0254c1e5bfcd9c7019b1f64119225a..5a97b19cf23429b5a430a465d31e2dfcda8728a1 100644
--- a/targets/TEST/OAI/log.py
+++ b/targets/TEST/OAI/log.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/openair.py b/targets/TEST/OAI/openair.py
index 0e393ddbd722a50a332f5ee379231e938514ebd6..e03188c11d9818e96c42af1c6d9f53c096f20287 100644
--- a/targets/TEST/OAI/openair.py
+++ b/targets/TEST/OAI/openair.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/test01.py b/targets/TEST/OAI/test01.py
index b499c1381b39a1733030a10cc4494d8222b7d99f..d923a8e27eddd81e32a047fa0cccbddebd255d77 100644
--- a/targets/TEST/OAI/test01.py
+++ b/targets/TEST/OAI/test01.py
@@ -4,7 +4,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/OAI/test02.py b/targets/TEST/OAI/test02.py
index 8175f3128ce69b08e36ba77c340c1eab8520e3ce..c0c94b7d23480b70351dab5eb98e9f15b96b4084 100644
--- a/targets/TEST/OAI/test02.py
+++ b/targets/TEST/OAI/test02.py
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/TEST/PACKET_TRACER/pt.c b/targets/TEST/PACKET_TRACER/pt.c
index 928c69f588dd208abecd72572ca621b868debac2..9e4077e2748c761688123ffd6a3629a6fa903f1a 100644
--- a/targets/TEST/PACKET_TRACER/pt.c
+++ b/targets/TEST/PACKET_TRACER/pt.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/PDCP/readme.txt b/targets/TEST/PDCP/readme.txt
index 1693d92d81aed0fe8555a46c1d4731504136cd0f..6e4f3eb0542648b633ffc9cd8f34f985ba3e3bf8 100644
--- a/targets/TEST/PDCP/readme.txt
+++ b/targets/TEST/PDCP/readme.txt
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/PDCP/test_pdcp.c b/targets/TEST/PDCP/test_pdcp.c
index 952415f1aeeadb05304891cc4272984235b01982..b07add73a6573048f13704601d039932f087fc19 100644
--- a/targets/TEST/PDCP/test_pdcp.c
+++ b/targets/TEST/PDCP/test_pdcp.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/PDCP/test_pdcp.h b/targets/TEST/PDCP/test_pdcp.h
index 5bbb73bdbffef66ad5d481b1ab0dbd5a1ccec5b1..0da174cc8caad238452240d5bc70bcf435901a1d 100644
--- a/targets/TEST/PDCP/test_pdcp.h
+++ b/targets/TEST/PDCP/test_pdcp.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/PDCP/test_util.h b/targets/TEST/PDCP/test_util.h
index 3fa71b586ab9eb6295bb2dd9c405291412c5ccbf..834a955abfb450f3c31b301f3ea1fd3fab761c42 100644
--- a/targets/TEST/PDCP/test_util.h
+++ b/targets/TEST/PDCP/test_util.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
index d64315fc250d70716b530de22a778e4b4d93c142..1cadea371519748a748ced15b74876e55b19e0dc 100644
--- a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
+++ b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/RLC_AM_V9.3.0/oaisim.c b/targets/TEST/RLC_AM_V9.3.0/oaisim.c
index 5b7a911d83c9e574e961075be40000a66bfb6790..dda91f0b1f23ac39b24da7e94860209f76cceb1e 100644
--- a/targets/TEST/RLC_AM_V9.3.0/oaisim.c
+++ b/targets/TEST/RLC_AM_V9.3.0/oaisim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/RLC_UM_V9.3.0/oaisim.c b/targets/TEST/RLC_UM_V9.3.0/oaisim.c
index 1fb8f595d481bd664b2348710865aa0cbeeb1ff1..e1fce26a6f4eef0a3b065c1495c33c89090af646 100644
--- a/targets/TEST/RLC_UM_V9.3.0/oaisim.c
+++ b/targets/TEST/RLC_UM_V9.3.0/oaisim.c
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/ROHDE_SCHWARZ/EthernetRawCommand.cpp b/targets/TEST/ROHDE_SCHWARZ/EthernetRawCommand.cpp
index b5f5e2a961ec920de082ef56e811adb439741f98..110d499e06fe8840877a9efd4c117e2738eb8e90 100644
--- a/targets/TEST/ROHDE_SCHWARZ/EthernetRawCommand.cpp
+++ b/targets/TEST/ROHDE_SCHWARZ/EthernetRawCommand.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/ROHDE_SCHWARZ/TcpClient.cpp b/targets/TEST/ROHDE_SCHWARZ/TcpClient.cpp
index 67804c1e3ee002069a9c8bf600300bff7f64774d..70b4ad1f98a435850167748f4cd3c5fa23ce1e9f 100644
--- a/targets/TEST/ROHDE_SCHWARZ/TcpClient.cpp
+++ b/targets/TEST/ROHDE_SCHWARZ/TcpClient.cpp
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/TEST/ROHDE_SCHWARZ/TcpClient.h b/targets/TEST/ROHDE_SCHWARZ/TcpClient.h
index b1cda37275fbb5e729ce622d3c136409e5cc3791..c53ff446c190272e58150564c637352f6ce92be3 100644
--- a/targets/TEST/ROHDE_SCHWARZ/TcpClient.h
+++ b/targets/TEST/ROHDE_SCHWARZ/TcpClient.h
@@ -3,7 +3,7 @@
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The OpenAirInterface Software Alliance licenses this file to You under
- * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
  * except in compliance with the License.
  * You may obtain a copy of the License at
  *
diff --git a/targets/build_helper.bash b/targets/build_helper.bash
index f161275c65d09c1d9a7a5585ceed4326ead50460..a3c57b8dce53bbce85d15422aae272874ec22f4d 100755
--- a/targets/build_helper.bash
+++ b/targets/build_helper.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/build_oai.bash b/targets/build_oai.bash
index 7a6a179bebc431acb4158b218cee4bcbd8d724ec..cfe5e35d2662b72c2e0d3dda473c121fee589c33 100755
--- a/targets/build_oai.bash
+++ b/targets/build_oai.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/targets/perf_oai.bash b/targets/perf_oai.bash
index 4a9cb3951d38e78d8c95e89699e311367c768714..a5209ec7cbf5bf9e23709a7b3ff50d468ae4bc55 100755
--- a/targets/perf_oai.bash
+++ b/targets/perf_oai.bash
@@ -3,7 +3,7 @@
 # * contributor license agreements.  See the NOTICE file distributed with
 # * this work for additional information regarding copyright ownership.
 # * The OpenAirInterface Software Alliance licenses this file to You under
-# * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 # * except in compliance with the License.
 # * You may obtain a copy of the License at
 # *
diff --git a/wireshark_binary_and_script.tgz b/wireshark_binary_and_script.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..208f82cece47e88b477ba7951895d498a36edb31
Binary files /dev/null and b/wireshark_binary_and_script.tgz differ