diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index fb757a9f47cab8e3ff6965276a1392e0ee0124b3..f9505307302d774825b4f9ec069b6707f5626fbd 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -419,7 +419,7 @@ int create_gNB_tasks(uint32_t gnb_nb) {
   }
 
 
-  if (AMF_MODE_ENABLED && (get_softmodem_params()->phy_test==0 && get_softmodem_params()->do_ra==0)) {
+ // if (AMF_MODE_ENABLED && (get_softmodem_params()->phy_test==0 && get_softmodem_params()->do_ra==0)) {
     if (gnb_nb > 0) {
       /*
       if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
@@ -449,7 +449,7 @@ int create_gNB_tasks(uint32_t gnb_nb) {
         return -1;
       }
     }
-  }
+  //}
 
 
   if (gnb_nb > 0) {
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 12ad6bf6a23a79e1899a008456a36940c592aee5..25b12f0814ab91dd50131951b7712986098ad586 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -112,6 +112,7 @@ boolean_t pdcp_data_req(
 )
 //-----------------------------------------------------------------------------
 {
+  printf("---------liuyu----welcome to pdcp_data_req");
   pdcp_t            *pdcp_p          = NULL;
   uint8_t            i               = 0;
   uint8_t            pdcp_header_len = 0;
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index 749044186eedea46c791c579057eafcfd3f0caa3..6cc1593835541541fad88513334ff993cdffc79b 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -481,7 +481,37 @@ static void deliver_sdu_drb(protocol_ctxt_t *ctxt_pP,void *_ue, nr_pdcp_entity_t
       if(liuyu==0)
           nr_rrc_data_ind_ccch( ctxt_pP, 1, size, buf);
       if(liuyu==1)
-          nr_rrc_data_ind( ctxt_pP, 1, size, buf);
+      {
+        for (i = 0; i < 5; i++) {
+           if (entity == ue->drb[i]) {
+              rb_id = i+1;
+              goto rb_found;
+           }
+        }
+
+      LOG_I(PDCP, "%s:%d:%s: fatal, no RB found for ue %d\n",
+            __FILE__, __LINE__, __FUNCTION__, ue->rnti);
+      exit(1);
+
+    rb_found:
+      gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U,
+                                  size + GTPU_HEADER_OVERHEAD_MAX);
+      AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
+      memcpy(&gtpu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], buf, size);
+      message_p = itti_alloc_new_message(TASK_PDCP_ENB, GTPV1U_ENB_TUNNEL_DATA_REQ);
+      AssertFatal(message_p != NULL, "OUT OF MEMORY");
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer       = gtpu_buffer_p;
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).length       = size;
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).offset       = GTPU_HEADER_OVERHEAD_MAX;
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rnti         = ue->rnti;
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rnti         = 0x1234;
+      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rab_id       = rb_id + 4;
+      LOG_I(PDCP, "%s() (drb %d) sending message to gtp size %d\n", __func__, rb_id, size);
+      //for (i = 0; i < size; i++) printf(" %2.2x", (unsigned char)buf[i]);
+      //printf("\n");
+      itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); 
+      }
+          //nr_rrc_data_ind( ctxt_pP, 1, size, buf);
       
       liuyu++;
       
@@ -506,22 +536,22 @@ static void deliver_sdu_drb(protocol_ctxt_t *ctxt_pP,void *_ue, nr_pdcp_entity_t
             __FILE__, __LINE__, __FUNCTION__, ue->rnti);
       exit(1);
 
-    rb_found:
-      gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U,
-                                  size + GTPU_HEADER_OVERHEAD_MAX);
-      AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
-      memcpy(&gtpu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], buf, size);
-      message_p = itti_alloc_new_message(TASK_PDCP_ENB, GTPV1U_ENB_TUNNEL_DATA_REQ);
-      AssertFatal(message_p != NULL, "OUT OF MEMORY");
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer       = gtpu_buffer_p;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).length       = size;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).offset       = GTPU_HEADER_OVERHEAD_MAX;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rnti         = ue->rnti;
-      GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rab_id       = rb_id + 4;
-      LOG_D(PDCP, "%s() (drb %d) sending message to gtp size %d\n", __func__, rb_id, size);
-      //for (i = 0; i < size; i++) printf(" %2.2x", (unsigned char)buf[i]);
-      //printf("\n");
-      itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p);
+    // rb_found:
+    //   gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U,
+    //                               size + GTPU_HEADER_OVERHEAD_MAX);
+    //   AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
+    //   memcpy(&gtpu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], buf, size);
+    //   message_p = itti_alloc_new_message(TASK_PDCP_ENB, GTPV1U_ENB_TUNNEL_DATA_REQ);
+    //   AssertFatal(message_p != NULL, "OUT OF MEMORY");
+    //   GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).buffer       = gtpu_buffer_p;
+    //   GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).length       = size;
+    //   GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).offset       = GTPU_HEADER_OVERHEAD_MAX;
+    //   GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rnti         = ue->rnti;
+    //   GTPV1U_ENB_TUNNEL_DATA_REQ(message_p).rab_id       = rb_id + 4;
+    //   LOG_D(PDCP, "%s() (drb %d) sending message to gtp size %d\n", __func__, rb_id, size);
+    //   //for (i = 0; i < size; i++) printf(" %2.2x", (unsigned char)buf[i]);
+    //   //printf("\n");
+    //   itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p);
 
   }
 }
diff --git a/openair3/GTPV1-U/gtpv1u_eNB.c b/openair3/GTPV1-U/gtpv1u_eNB.c
index 1e2954ba954746bcd9a9dbd7848cbf73aed63506..cc83455bd8e88a3270a41b305c7c5f13dcb38d16 100644
--- a/openair3/GTPV1-U/gtpv1u_eNB.c
+++ b/openair3/GTPV1-U/gtpv1u_eNB.c
@@ -1316,6 +1316,7 @@ void *gtpv1u_eNB_process_itti_msg(void *notUsed) {
 
     // DATA TO BE SENT TO UDP
     case GTPV1U_ENB_TUNNEL_DATA_REQ: {
+      printf("-------------liuyu--welcome to GTPV1U_ENB_TUNNEL_DATA_REQ----------");
       gtpv1u_enb_tunnel_data_req_t *data_req_p           = NULL;
       NwGtpv1uUlpApiT               stack_req;
       NwGtpv1uRcT                   rc                   = NW_GTPV1U_FAILURE;
@@ -1332,15 +1333,19 @@ void *gtpv1u_eNB_process_itti_msg(void *notUsed) {
       memset(&stack_req, 0, sizeof(NwGtpv1uUlpApiT));
       hash_rc = hashtable_get(RC.gtpv1u_data_g->ue_mapping, (uint64_t)data_req_p->rnti, (void **)&gtpv1u_ue_data_p);
 
-      if (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) {
-        LOG_E(GTPU, "nwGtpv1uProcessUlpReq failed: while getting ue rnti %x in hashtable ue_mapping\n", data_req_p->rnti);
+      if(0){// (hash_rc == HASH_TABLE_KEY_NOT_EXISTS) {
+     //  LOG_E(GTPU, "nwGtpv1uProcessUlpReq failed: while getting ue rnti %x in hashtable ue_mapping\n", data_req_p->rnti);
       } else {
         if ((data_req_p->rab_id >= GTPV1U_BEARER_OFFSET) && (data_req_p->rab_id < max_val_LTE_DRB_Identity)) {
-          enb_s1u_teid                        = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].teid_eNB;
-          sgw_s1u_teid                        = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].teid_sgw;
+          //enb_s1u_teid                        = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].teid_eNB;
+          enb_s1u_teid                        = 0x01;
+         // sgw_s1u_teid                        = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].teid_sgw;
+          sgw_s1u_teid                        = 0x01;
           stack_req.apiType                   = NW_GTPV1U_ULP_API_SEND_TPDU;
           stack_req.apiInfo.sendtoInfo.teid   = sgw_s1u_teid;
-          stack_req.apiInfo.sendtoInfo.ipAddr = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr;
+          in_addr_t upf_addr=0xc0a8c7DF;
+          //stack_req.apiInfo.sendtoInfo.ipAddr = gtpv1u_ue_data_p->bearers[data_req_p->rab_id - GTPV1U_BEARER_OFFSET].sgw_ip_addr;
+          stack_req.apiInfo.sendtoInfo.ipAddr = upf_addr; 
           rc = nwGtpv1uGpduMsgNew(
                  RC.gtpv1u_data_g->gtpv1u_stack,
                  sgw_s1u_teid,
diff --git a/openair3/GTPV1-U/gtpv1u_gNB.c b/openair3/GTPV1-U/gtpv1u_gNB.c
index f13bf13794771324bf32123f84c25c06f5cf370d..0ed920c89bcd974d006662244c76f2d850862164 100644
--- a/openair3/GTPV1-U/gtpv1u_gNB.c
+++ b/openair3/GTPV1-U/gtpv1u_gNB.c
@@ -127,6 +127,7 @@ NwGtpv1uRcT gtpv1u_gNB_process_stack_req(
      * - END-MARKER
      */
     case NW_GTPV1U_ULP_API_RECV_TPDU: {
+      printf("-----liuyu---welcome  NW_GTPV1U_ULP_API_RECV_TPDU-----------\n");
       uint8_t              buffer[4096];
       uint32_t             buffer_len;
       //uint16_t             msgType = NW_GTP_GPDU;
@@ -143,19 +144,23 @@ NwGtpv1uRcT gtpv1u_gNB_process_stack_req(
         LOG_E(GTPU, "Error while retrieving T-PDU");
       }
 
-      itti_free(TASK_UDP, ((NwGtpv1uMsgT *)pUlpApi->apiInfo.recvMsgInfo.hMsg)->msgBuf);
+     // itti_free(TASK_UDP, ((NwGtpv1uMsgT *)pUlpApi->apiInfo.recvMsgInfo.hMsg)->msgBuf);
 #if defined(GTP_DUMP_SOCKET) && GTP_DUMP_SOCKET > 0
       gtpv1u_eNB_write_dump_socket(buffer,buffer_len);
 #endif
-      rc = nwGtpv1uMsgDelete(RC.gtpv1u_data_g->gtpv1u_stack,
-                             pUlpApi->apiInfo.recvMsgInfo.hMsg);
-
-      if (rc != NW_GTPV1U_OK) {
-        LOG_E(GTPU, "nwGtpv1uMsgDelete failed: 0x%x\n", rc);
-      }
-
-      hash_rc = hashtable_get(RC.gtpv1u_data_g->teid_mapping, teid, (void **)&gtpv1u_teid_data_p);
-
+      //rc = nwGtpv1uMsgDelete(RC.gtpv1u_data_g->gtpv1u_stack,
+        //                     pUlpApi->apiInfo.recvMsgInfo.hMsg);
+
+      //if (rc != NW_GTPV1U_OK) {
+      //  LOG_E(GTPU, "nwGtpv1uMsgDelete failed: 0x%x\n", rc);
+      //}
+
+      //hash_rc = hashtable_get(RC.gtpv1u_data_g->teid_mapping, teid, (void **)&gtpv1u_teid_data_p);
+      hash_rc = HASH_TABLE_OK;
+      gtpv1u_teid_data_p=(char *)malloc(1024);
+      gtpv1u_teid_data_p->enb_id=0xe00,
+      gtpv1u_teid_data_p->ue_id=0,
+      gtpv1u_teid_data_p->eps_bearer_id=5;
       if (hash_rc == HASH_TABLE_OK) {
 #if defined(LOG_GTPU) && LOG_GTPU > 0
         LOG_D(GTPU, "Received T-PDU from gtpv1u stack teid  %u size %d -> enb module id %u ue module id %u rab id %u\n",
@@ -175,11 +180,16 @@ NwGtpv1uRcT gtpv1u_gNB_process_stack_req(
           0,0,
           (gtpv1u_teid_data_p->eps_bearer_id) ? gtpv1u_teid_data_p->eps_bearer_id - 4: 5-4,
           buffer_len);
-
+        ctxt.instance=0;
+        ctxt.module_id=0;
+        ctxt.rnti=0x1234;
+        ctxt.eNB_index=0;
+        
         result = pdcp_data_req(
                    &ctxt,
                    SRB_FLAG_NO,
-                   (gtpv1u_teid_data_p->eps_bearer_id) ? gtpv1u_teid_data_p->eps_bearer_id - 4: 5-4,
+                   //(gtpv1u_teid_data_p->eps_bearer_id) ? gtpv1u_teid_data_p->eps_bearer_id - 4: 5-4,
+                   1,
                    0, // mui
                    SDU_CONFIRM_NO, // confirm
                    buffer_len,
diff --git a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
index 0c7663921b71dbd85c74323715c30ab19b316995..b2750fb360b192f8e4c0fa91afc0e1831b71fee9 100644
--- a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
+++ b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1u.c
@@ -540,9 +540,13 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz,
 
   tunnelEndPointKey.teid = ntohl(msgHdr->teid);
 
-  pTunnelEndPoint = RB_FIND(NwGtpv1uTunnelEndPointIdentifierMap,
-                            &(thiz->teidMap), &tunnelEndPointKey);
-
+  //pTunnelEndPoint = RB_FIND(NwGtpv1uTunnelEndPointIdentifierMap,
+  //                          &(thiz->teidMap), &tunnelEndPointKey);
+  pTunnelEndPoint=(char*)malloc(1024);
+  pTunnelEndPoint->teid=0x01;
+  pTunnelEndPoint->peerAddr=peerIp; 
+  pTunnelEndPoint->hUlpSession = 0x12;
+  //pTunnelEndPoint->pStack->ulp.hUlp = 0x34;
   if(pTunnelEndPoint) {
     NwGtpv1uMsgHandleT hMsg;
 
@@ -550,7 +554,7 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz,
                                    (uint8_t *)gpdu,
                                    gpduLen,
                                    &hMsg);
-
+    rc=NW_GTPV1U_OK;
     /*
       uint8_t*        msgBuf;
       uint32_t        msgBufLen;
@@ -558,10 +562,13 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz,
      */
     if(NW_GTPV1U_OK == rc) {
       NwGtpv1uMsgT *pMsg = (NwGtpv1uMsgT *) hMsg;
-#if defined(LOG_GTPU) && LOG_GTPU > 0
+//#if defined(LOG_GTPU) && LOG_GTPU > 0
       GTPU_DEBUG("Received T-PDU over tunnel end-point '%x' of size %u (%u) (decapsulated %u)from "NW_IPV4_ADDR"\n",
                  ntohl(msgHdr->teid), gpduLen, pMsg->msgLen, pMsg->msgBufLen, NW_IPV4_ADDR_FORMAT((peerIp)));
-#endif
+      printf("Received T-PDU over tunnel end-point '%x' of size %u (%u) (decapsulated %u)from "NW_IPV4_ADDR"\n",
+                 ntohl(msgHdr->teid), gpduLen, pMsg->msgLen, pMsg->msgBufLen, NW_IPV4_ADDR_FORMAT((peerIp)));
+
+//#endif
       MSC_LOG_RX_MESSAGE(
         (thiz->stackType == GTPU_STACK_ENB) ? MSC_GTPU_ENB:MSC_GTPU_SGW,
         (thiz->stackType == GTPU_STACK_ENB) ? MSC_GTPU_SGW:MSC_GTPU_ENB,
@@ -570,7 +577,7 @@ nwGtpv1uProcessGpdu( NwGtpv1uStackT *thiz,
         " G-PDU ltid %u size %u",
         tunnelEndPointKey.teid,
         gpduLen);
-
+      //pTunnelEndPoint->pStack->ulp.ulpReqCallback = gtpv1u_gNB_process_stack_req;
       rc = nwGtpSessionSendMsgApiToUlpEntity(pTunnelEndPoint, pMsg);
     }
   } else {
@@ -861,8 +868,8 @@ nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
 #endif
   thiz = (NwGtpv1uStackT *) hGtpuStackHandle;
 
-  NW_ASSERT(thiz);
 
+  NW_ASSERT(thiz);
   msgType = *((uint8_t *)(udpData + 1));
 
   switch(msgType) {
@@ -891,10 +898,15 @@ nwGtpv1uProcessUdpReq( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
     break;
 
   case NW_GTP_GPDU:
-#if defined(LOG_GTPU) && LOG_GTPU > 0
+//#if defined(LOG_GTPU) && LOG_GTPU > 0
+    for(int i =1; i<= udpDataLen; i++){
+      printf("%02x ", udpData[i-1]);
+      if(i % 20 == 0)printf("\n");
+    }
     GTPU_DEBUG("NW_GTP_GPDU: DATA COMING FROM UDP\n");
-#endif
+    printf("NW_GTP_GPDU: DATA COMING FROM UDP len%d\n,port=%u,address%x",udpDataLen,peerPort,peerIp);
     ret = nwGtpv1uProcessGpdu(thiz, udpData, udpDataLen, peerIp);
+//#endif
     break;
 
   case NW_GTP_END_MARKER:
diff --git a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c
index 365d6d23a5ff124b2ade204f940534c82aa7eb34..d3560cc7ea2cc3e810aeca1d3004ab2839ae1926 100644
--- a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c
+++ b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uMsg.c
@@ -280,10 +280,12 @@ nwGtpv1uMsgFromBufferNew( NW_IN NwGtpv1uStackHandleT hGtpuStackHandle,
     pMsg->msgBufOffset = (uint32_t)(pBuf - pMsg->msgBuf);
     pMsg->msgBufLen = bufLen - pMsg->msgBufOffset;
     pMsg->msgLen    = bufLen;
-#if defined(LOG_GTPU) && LOG_GTPU > 0
+//#if defined(LOG_GTPU) && LOG_GTPU > 0
     GTPU_DEBUG("nwGtpv1uMsgFromBufferNew() msgLen %u msgBufLen %u msgBufOffset %u ",
                pMsg->msgLen, pMsg->msgBufLen, pMsg->msgBufOffset);
-#endif
+    printf("nwGtpv1uMsgFromBufferNew() msgLen %u msgBufLen %u msgBufOffset %u ",
+               pMsg->msgLen, pMsg->msgBufLen, pMsg->msgBufOffset);
+//#endif
     *phMsg = (NwGtpv1uMsgHandleT) pMsg;
     return NW_GTPV1U_OK;
   }
diff --git a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
index c62f60edc29725de705589767f4027d617b5fe03..c7050119bdc6587918464024b4cf86e9e4b002fb 100644
--- a/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
+++ b/openair3/GTPV1-U/nw-gtpv1u/src/NwGtpv1uTunnelEndPoint.c
@@ -106,7 +106,9 @@ nwGtpTunnelEndPointDestroy(struct NwGtpv1uStack *pStack,
   @param[in,out] pTrxn: Pointer to the trxn.
   @return NW_GTPV1U_OK on success.
  */
-
+extern NwGtpv1uRcT gtpv1u_gNB_process_stack_req(
+  NwGtpv1uUlpHandleT hUlp,
+  NwGtpv1uUlpApiT   *pUlpApi);
 NwGtpv1uRcT
 nwGtpSessionSendMsgApiToUlpEntity(NwGtpv1uTunnelEndPointT *thiz,
                                   NwGtpv1uMsgT *pMsg)
@@ -116,13 +118,16 @@ nwGtpSessionSendMsgApiToUlpEntity(NwGtpv1uTunnelEndPointT *thiz,
 
   api.apiType                         = NW_GTPV1U_ULP_API_RECV_TPDU;
   api.apiInfo.recvMsgInfo.hUlpSession = thiz->hUlpSession;
-  api.apiInfo.recvMsgInfo.teid        = thiz->teid;
+  api.apiInfo.recvMsgInfo.teid        = 0x01;
+  //api.apiInfo.recvMsgInfo.teid        = thiz->teid;
   api.apiInfo.recvMsgInfo.hMsg        = (NwGtpv1uMsgHandleT)pMsg;
+  
+  //NW_ASSERT(thiz->pStack->ulp.ulpReqCallback != NULL);
 
-  NW_ASSERT(thiz->pStack->ulp.ulpReqCallback != NULL);
-
-  thiz->pStack->ulp.ulpReqCallback(thiz->pStack->ulp.hUlp, &api);
-
+  //thiz->pStack->ulp.ulpReqCallback(thiz->pStack->ulp.hUlp, &api);
+  thiz->pStack = (char *)malloc(100);
+  thiz->pStack->ulp.hUlp=(char *)malloc(1024);
+  gtpv1u_gNB_process_stack_req(thiz->pStack->ulp.hUlp, &api);
   return rc;
 }
 
diff --git a/openair3/UDP/udp_eNB_task.c b/openair3/UDP/udp_eNB_task.c
index 90ee87900df1136baf30eb536cf53d8225a07c57..7c3b667c52a864aa1861a9875e3e61c3e072ef6d 100644
--- a/openair3/UDP/udp_eNB_task.c
+++ b/openair3/UDP/udp_eNB_task.c
@@ -265,10 +265,10 @@ void udp_eNB_receiver(struct udp_socket_desc_s *udp_sock_pP)
       udp_data_ind_p->peer_port     = htons(addr.sin_port);
       udp_data_ind_p->peer_address  = addr.sin_addr.s_addr;
 
-#if defined(LOG_UDP) && LOG_UDP > 0
+//#if defined(LOG_UDP) && LOG_UDP > 0
       LOG_I(UDP_, "Msg of length %d received from %s:%u\n",
             n, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
-#endif
+//#endif
 
       /* TODO: this is a hack. Let's accept failures and do nothing when
        * it happens. Since itti_send_msg_to_task crashes when the message
@@ -336,6 +336,7 @@ void *udp_eNB_task(void *args_p)
 #if defined(LOG_UDP) && LOG_UDP > 0
         LOG_D(UDP_, "Received UDP_DATA_REQ\n");
 #endif
+        printf("Received UDP_DATA_REQ\n");
         int     udp_sd = -1;
         ssize_t bytes_written;
 
@@ -349,8 +350,8 @@ void *udp_eNB_task(void *args_p)
 
         peer_addr.sin_family       = AF_INET;
         peer_addr.sin_port         = htons(udp_data_req_p->peer_port);
-        peer_addr.sin_addr.s_addr  = udp_data_req_p->peer_address;
-
+        //peer_addr.sin_addr.s_addr  = udp_data_req_p->peer_address;
+        peer_addr.sin_addr.s_addr  = htonl(udp_data_req_p->peer_address);
         pthread_mutex_lock(&udp_socket_list_mutex);
         udp_sock_p = udp_eNB_get_socket_desc(ITTI_MSG_ORIGIN_ID(received_message_p));
 
@@ -372,7 +373,12 @@ void *udp_eNB_task(void *args_p)
         pthread_mutex_unlock(&udp_socket_list_mutex);
 
 //#if defined(LOG_UDP) && LOG_UDP > 0
-        LOG_D(UDP_, "[%d] Sending message of size %u to "IPV4_ADDR" and port %u\n",
+        LOG_I(UDP_, "[%d] Sending message of size %u to "IPV4_ADDR" and port %u\n",
+              udp_sd,
+              udp_data_req_p->buffer_length,
+              IPV4_ADDR_FORMAT(udp_data_req_p->peer_address),
+              udp_data_req_p->peer_port);
+        printf("[%d] Sending message of size %u to "IPV4_ADDR" and port %u\n",
               udp_sd,
               udp_data_req_p->buffer_length,
               IPV4_ADDR_FORMAT(udp_data_req_p->peer_address),
@@ -387,7 +393,7 @@ void *udp_eNB_task(void *args_p)
                           sizeof(struct sockaddr_in));
 
         if (bytes_written != udp_data_req_p->buffer_length) {
-          LOG_E(UDP_, "There was an error while writing to socket %d rc %zd"
+          LOG_I(UDP_, "There was an error while writing to socket %d rc %zd"
                 "(%d:%s) May be normal if GTPU kernel module loaded on same host (may NF_DROP IP packet)\n",
                 udp_sd, bytes_written, errno, strerror(errno));
         }
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp.conf
new file mode 100644
index 0000000000000000000000000000000000000000..10eb06f3f2b6fae183107d35ca6788f202aaa6c9
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp.conf
@@ -0,0 +1,285 @@
+Active_gNBs = ( "gNB-Eurecom-5GNRBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+    ////////// Identification parameters:
+    gNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_GNB";
+
+    gNB_name  =  "gNB-Eurecom-5GNRBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  1;
+
+    plmn_list = ({mcc = 208; mnc = 93; mnc_length = 2;});	 
+
+    tr_s_preference     = "local_mac"
+
+    ////////// Physical parameters:
+
+    ssb_SubcarrierOffset                                      = 0;
+    pdsch_AntennaPorts                                        = 1;
+	
+    servingCellConfigCommon = (
+    {
+ #spCellConfigCommon
+
+      physCellId                                                    = 0;
+
+#  downlinkConfigCommon
+    #frequencyInfoDL
+      # this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
+      absoluteFrequencySSB                                          = 641032;
+      dl_frequencyBand                                                 = 78;
+      # this is 3600 MHz
+      dl_absoluteFrequencyPointA                                       = 640000;
+      #scs-SpecificCarrierList
+        dl_offstToCarrier                                              = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+        dl_subcarrierSpacing                                           = 1;
+        dl_carrierBandwidth                                            = 106;
+     #initialDownlinkBWP
+      #genericParameters
+        # this is RBstart=0,L=50 (275*(L-1))+RBstart
+        initialDLBWPlocationAndBandwidth                                        = 6366;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+        initialDLBWPsubcarrierSpacing                                           = 1;
+      #pdcch-ConfigCommon
+        initialDLBWPcontrolResourceSetZero                                      = 12;
+        initialDLBWPsearchSpaceZero                                             = 0;
+      #pdsch-ConfigCommon
+        #pdschTimeDomainAllocationList (up to 16 entries)
+             initialDLBWPk0_0                    = 0;
+             #initialULBWPmappingType
+	     #0=typeA,1=typeB
+             initialDLBWPmappingType_0           = 0;
+             #this is SS=1,L=13
+             initialDLBWPstartSymbolAndLength_0  = 40;
+
+             initialDLBWPk0_1                    = 0;
+             initialDLBWPmappingType_1           = 0;
+             #this is SS=2,L=12 
+             initialDLBWPstartSymbolAndLength_1  = 53;
+
+             initialDLBWPk0_2                    = 0;
+             initialDLBWPmappingType_2           = 0;
+             #this is SS=1,L=12 
+             initialDLBWPstartSymbolAndLength_2  = 54;
+
+             initialDLBWPk0_3                    = 0;
+             initialDLBWPmappingType_3           = 0;
+             #this is SS=1,L=4
+             initialDLBWPstartSymbolAndLength_3  = 57;
+
+  #uplinkConfigCommon 
+     #frequencyInfoUL
+      ul_frequencyBand                                                 = 78;
+      #scs-SpecificCarrierList
+      ul_offstToCarrier                                              = 0;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+      ul_subcarrierSpacing                                           = 1;
+      ul_carrierBandwidth                                            = 106;
+      pMax                                                          = 20;
+     #initialUplinkBWP
+      #genericParameters
+        initialULBWPlocationAndBandwidth                                        = 6366;
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+        initialULBWPsubcarrierSpacing                                           = 1;
+      #rach-ConfigCommon
+        #rach-ConfigGeneric
+          prach_ConfigurationIndex                                  = 98;
+#prach_msg1_FDM
+#0 = one, 1=two, 2=four, 3=eight
+          prach_msg1_FDM                                            = 0;
+          prach_msg1_FrequencyStart                                 = 0;
+          zeroCorrelationZoneConfig                                 = 13;
+          preambleReceivedTargetPower                               = -118;
+#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
+          preambleTransMax                                          = 6;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+        powerRampingStep                                            = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+        ra_ResponseWindow                                           = 4;
+#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
+#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
+        ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR                = 4;
+#oneHalf (0..15) 4,8,12,16,...60,64
+        ssb_perRACH_OccasionAndCB_PreamblesPerSSB                   = 15;
+#ra_ContentionResolutionTimer
+#(0..7) 8,16,24,32,40,48,56,64
+        ra_ContentionResolutionTimer                                = 7;
+        rsrp_ThresholdSSB                                           = 19;
+#prach-RootSequenceIndex_PR
+#1 = 839, 2 = 139
+        prach_RootSequenceIndex_PR                                  = 2;
+        prach_RootSequenceIndex                                     = 1;
+        # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
+        #  
+        msg1_SubcarrierSpacing                                      = 1,
+# restrictedSetConfig
+# 0=unrestricted, 1=restricted type A, 2=restricted type B
+        restrictedSetConfig                                         = 0,
+
+      # pusch-ConfigCommon (up to 16 elements)
+        initialULBWPk2_0                      = 6;
+        initialULBWPmappingType_0             = 1
+        # this is SS=0 L=11
+        initialULBWPstartSymbolAndLength_0    = 55;
+ 	
+	initialULBWPk2_1                      = 6;
+        initialULBWPmappingType_1             = 1;
+        # this is SS=0 L=12
+        initialULBWPstartSymbolAndLength_1    = 69;
+
+	initialULBWPk2_2                      = 7;
+        initialULBWPmappingType_2             = 1;
+        # this is SS=10 L=4
+        initialULBWPstartSymbolAndLength_2    = 52;
+
+
+        msg3_DeltaPreamble                                          = 1;
+        p0_NominalWithGrant                                         =-90;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+        pucchGroupHopping                                           = 0;
+        hoppingId                                                   = 40;
+        p0_nominal                                                  = -90;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+      ssb_PositionsInBurst_PR                                       = 2;
+      ssb_PositionsInBurst_Bitmap                                   = 1;
+
+# ssb_periodicityServingCell
+# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 
+      ssb_periodicityServingCell                                    = 2;
+
+# dmrs_TypeA_position
+# 0 = pos2, 1 = pos3
+      dmrs_TypeA_Position                                           = 0;
+
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+      subcarrierSpacing                                             = 1;
+
+
+  #tdd-UL-DL-ConfigurationCommon
+# subcarrierSpacing
+# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120  
+      referenceSubcarrierSpacing                                    = 1;
+      # pattern1 
+      # dl_UL_TransmissionPeriodicity
+      # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
+      dl_UL_TransmissionPeriodicity                                 = 6;
+      nrofDownlinkSlots                                             = 7;
+      nrofDownlinkSymbols                                           = 6;
+      nrofUplinkSlots                                               = 2;
+      nrofUplinkSymbols                                             = 4;
+
+  ssPBCH_BlockPower                                             = 10;
+  }
+
+  );
+
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+	GNB_INTERFACE_NAME_FOR_NG_AMF            = "eno1";
+        GNB_IPV4_ADDRESS_FOR_NG_AMF              = "192.168.199.222/24";
+        GNB_INTERFACE_NAME_FOR_NGU               = "eno1";
+        GNB_IPV4_ADDRESS_FOR_NGU                 = "192.168.199.222/24";
+        GNB_PORT_FOR_NGU                         = 2152; # Spec 2152                                                                                            
+        GNB_IPV4_ADDRESS_FOR_X2C                 = "192.168.20.20/24";
+        GNB_PORT_FOR_X2C                         = 36422; # Spec 36422 
+    };
+  }
+);
+
+MACRLCs = (
+	{
+	num_cc = 1;
+	tr_s_preference = "local_L1";
+	tr_n_preference = "local_RRC";
+        }  
+);
+
+L1s = (
+    	{
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+        }  
+);
+
+RUs = (
+    {		  
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [7];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 75;
+         eNB_instances  = [0];
+         #beamforming 1x4 matrix:
+         bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
+         sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
+         clock_src = "external";
+    }
+);  
+
+THREAD_STRUCT = (
+  {
+    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+    parallel_config    = "PARALLEL_RU_L1_TRX_SPLIT";
+    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+    worker_config      = "WORKER_ENABLE";
+  }
+);
+
+     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";
+    };
+