With contributions from * Sakthivel Velumani <velumani@eurecom.fr> * Robert Schmidt <robert.schmidt@openairinterface.org> Squashed commit of the following: commit e8488acbcdaef6ee1688dc233c9e48e85b0fbfc8 Merge: f09468eb135d58645a85Author: laurent <laurent Thomas> Date: Sat Jan 21 15:03:40 2023 +0100 merge develop commit f09468eb13f729c49830786150918b03ae2d7524 Author: laurent <laurent Thomas> Date: Fri Jan 20 10:43:51 2023 +0100 continue e1AP development commit 76545cfbfc7ec5031633b1b0ec599c3560c1e5a7 Author: laurent <laurent Thomas> Date: Wed Jan 18 14:18:47 2023 +0100 fix regressions after merge develop commit 7071c480a6c433eb94501c49f4a7694ba77f4f6d Merge: 569b9fc5f3214aa50595Author: laurent <laurent Thomas> Date: Mon Jan 16 15:51:50 2023 +0100 merge develop commit 569b9fc5f37b9947b722885e423572a211d658da Author: laurent <laurent Thomas> Date: Wed Jan 4 17:07:01 2023 +0100 fix srb2 addition, simplify and remove dead code, fix one race commit 9fa89151c0f9b4a16a79d0685cc04d8cf2adfa44 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Jan 4 20:02:05 2023 +0530 Bearer context release decoder and encoder commit 7011cb518ed6df015ace536e9a08b2d1865188d9 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Jan 4 13:43:58 2023 +0530 Update documentation commit 3e8899fc962cb16fc1ded49590ca5dddede54978 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Jan 4 10:14:11 2023 +0530 Fix function arguments and warnings commit 989ad183a8d66961facaa6719fa7793b9d40d5b4 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jan 3 20:18:31 2023 +0530 Moved E1-design.md to doc/ commit 04a8633dd509d9525755c5f3abfad976a1ba704e Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jan 3 20:13:46 2023 +0530 Make libraries lower case in CMakeLists commit 033ec174c1f48a0e745a2a2e1c367aa361f5ae76 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jan 3 17:55:25 2023 +0530 Renamed and updated cucp cuup config files commit f76a6913352bd8b2bb73ac25f225140cf05f93f2 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jan 3 13:31:19 2023 +0530 Removed CU-UP checks from nr-softmodem commit ae70afe44c84ac16b977b388c63e80e24803c43c Author: laurent <laurent Thomas> Date: Mon Jan 2 13:01:45 2023 +0100 fix for gcc version hat doesnt accept declarations in switch commit 6a7a01043bf1e6e0ee9ac40b4d85ced7cdf6dcf4 Author: laurent <laurent Thomas> Date: Tue Dec 27 15:59:28 2022 +0100 first functional commit standalone cu-up commit 0caa4690f9e1acbe578d4de5a82ba62f45444a12 Merge: 3619f9550e1a0c0cd1c9Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Dec 23 14:21:00 2022 +0530 Merge remote-tracking branch 'origin/develop' into e1-implementation-wip commit 3619f9550e4d3e78815334150ff8443db914f738 Merge: 1bcf8d5e00cfe698eb70Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Dec 21 15:47:40 2022 +0530 Merge remote-tracking branch 'origin/develop' into e1-implementation-wip commit 1bcf8d5e00a9b9ce440d825f83ddc1b48086daa8 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Sep 13 02:10:34 2022 -0400 Fix GTP rnti to ue_id after rebase commit 23075ff8b7ef5d56df844c05e0a7100fe7bd35de Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Sep 6 00:32:12 2022 -0400 Added documentation commit 28f6e507f74d3fb069441e05da523378dee0f6ed Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Mon Sep 5 15:02:02 2022 -0400 Header cleaups and unitary simulators build fixes commit e665dbab28c49327066cff72aed22e1de7797b59 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Sep 1 17:52:07 2022 -0400 Common interface between CUCP & CUUP for E1 and non E1 modes commit 5dcc1bf59a37ed87d7d32a617cfcd663d6415757 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Sep 1 13:53:49 2022 -0400 Allocate stack where ever possible Free memory after ASN encode commit 793a5379539a3a2b6c42cd327d8cef79fe21fb55 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Sep 1 10:41:50 2022 -0400 Fixes for build issues commit 0d3564f25a0d8746b0fc550ed371ce21e08cd05a Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 31 20:57:14 2022 -0400 Fixed uesoftmodem linkage error commit 34adf865820f09900a5efed693ada1ccf6f0f1ad Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 31 19:31:50 2022 -0400 Removed RRC thread from CUUP commit 536741910aff90a86ba3a60612f943b412c5ab40 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 31 14:21:31 2022 -0400 Add header guard in one of E1AP header commit 22e9d9b6dea5d84d259ee2dc1aaa7cb943e55b08 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 31 14:00:47 2022 -0400 Fix bug in PDCP ue_id commit 4c65339b07d347003ed89d5e00f49a62e9b21483 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 30 18:04:59 2022 -0400 Linked E1AP lib to L2_NR target E1AP builds for nr-softmodem commit 014fe30ac93c84d810e0209bc7f0d3b7a1bbaee3 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 30 15:49:27 2022 -0400 Remove xer prints from e1ap and gcc warning fixes commit 71f0c9126bbb91bc595b66d57e1e91db676d3b9d Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 30 15:42:30 2022 -0400 Fixed bug in integrity protection config commit 4e393ef9528c2b14d670a341b52fc63262abf894 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 30 14:34:37 2022 -0400 GTP init with only local address IP traffic works both directions in Mono, F1 and E1 commit ec3bde2c5deb99f554afc2053e351b9f79525e96 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 30 00:16:03 2022 -0400 Fix bug in pdcp config and GTP instance UL iperf still not works. Can see packets in wireshark. commit be8df4435eeae0a0755e2ac658f33caa2a3e3c94 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sat Aug 27 20:15:04 2022 -0400 Fixes in node config after rebase commit 6f42ff88de7f1615f87c46771fd6617a5fdfc48f Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sat Aug 27 01:38:21 2022 -0400 Added N3 tunnel address in config params fixed bug in address length feild commit b5e132041994344ebb5c2c59ca392612a32658fd Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Aug 26 20:38:47 2022 -0400 Send UL UP address via F1 UE cxt mod msg commit ecfd0fe260aee6aad78c291368c246f88b6bffcf Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Aug 26 15:08:53 2022 -0400 Update GTP remote address from response message Modified GTP tunnel update function accordingly Put GTP tunnel update out of F1AP F1 split works commit 14a37e414de3d653f25ccef1a790bc5b08fc7dc2 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sat Aug 20 01:17:36 2022 -0400 Moved GTP tunnel creation out of F1AP message sending commit cdd58ab96e84f48cc8ab8f0fe6b3133081ff02f7 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Aug 19 17:40:43 2022 -0400 Moved DRB config out of RRCReconfig complete Monolithic and F1 split works commit 61d66e490a1b61aa2b6ce18d993bb90d112d6374 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Aug 11 01:30:10 2022 -0400 Allow CUUP to have RRC inst without error commit dd7ae889372bb9fdf9e96be87c28eed0d9461d7f Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Aug 11 01:29:21 2022 -0400 Added missing IEs in bearer cxt response handler commit a6f1fe5fd254ccb36a54ede5b652161cb5e542e8 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 10 21:02:30 2022 -0400 Unified bearer context message transfer for E1 and non-E1 mode compiles, to be tested commit f245ace285632edcc28d669123746b9bf458bc38 Author: laurent <laurent Thomas> Date: Tue Aug 9 17:46:52 2022 +0200 remove log_i() of fatal errors commit d2a0f3c8620981f3b65a136f0169e3be9c549742 Author: laurent <laurent Thomas> Date: Fri Aug 5 15:01:39 2022 +0200 fix rnti/ue_id for ue commit 7b52c6cd9e675c28cb9d6347d122f77234ec6542 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Aug 4 19:14:46 2022 -0400 Created separate functions in PDCP for E1 mode commit 46680d2b3d221e675c3aeb675137f45318e31acb Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Aug 4 19:13:10 2022 -0400 Bug fixes in bearer context setup response commit 3d091bfd31b7aba625e4ba4b4f0f337cf2c1f6db Author: laurent <laurent Thomas> Date: Thu Aug 4 15:42:11 2022 +0200 add missing file from previous commit commit 21838572196dec947da99f350f20c4d9408c3c17 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed Aug 3 16:59:16 2022 -0400 Minor bug fixes commit 34eb73fbc6f9d33098850d62b4808e54c80bb4ca Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 2 23:16:47 2022 -0400 Added config files for testing To be renamed or removed later commit a7e9c6fb9332295ad42585eb4338a6f9ff0ae7c0 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 2 23:15:21 2022 -0400 Made rrc_gNB_get_ue_context_from_ngap_ids() non static commit 028f0407571466ff24cf72b5c3814e42c346ae81 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 2 23:12:16 2022 -0400 Completed bearer context setup cycle To be tested: Handling of bearer context setup response and subsequent UE context modifition msg to F1AP task commit 4481d11324b13efa73ab0b5f4f156012485661ae Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Aug 2 23:01:50 2022 -0400 Fixed E1AP PPID (wireshark fixed) commit 7a22573f3e7e16960e3310609dea2783ddf404a2 Author: laurent <laurent Thomas> Date: Fri Jul 29 13:03:31 2022 +0200 fix compile issues, simplify gtp send function commit 0209011aa75a16e4c9c1eb36ebcf4fe0ff93aba2 Author: laurent <laurent Thomas> Date: Thu Jul 28 11:51:18 2022 +0200 restore compilation capability, gtp replacement of rnti by ueid commit ce3b886fd7f11322a8d37b924d1752e6a6adf777 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Jul 22 08:35:31 2022 -0400 Included missing IEs in bearer cxt setup message commit 1208ae0d6fe4b25341c9036dde111fd4d00fd6e9 Author: Cedric Roux <cedric.roux@eurecom.fr> Date: Tue Jul 19 10:53:35 2022 +0200 replace rnti by ue_id in pdcp some sdap and gtp files had to be touched, the work is not finished in there some changes in nr_pdcp_oai_api.c simply assume ue_id is indeed rnti (will functions in this file be used by cu-up?) commit e67d1c88c786267458194e4de516919d0b5d1002 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jul 19 10:08:39 2022 +0200 Replace RNTI with UE ID in GTP files (half done. Laurent to change ctxt_t) commit 7a141e8e941e5c2624a47da7c764531c03b8f617 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jul 19 10:04:15 2022 +0200 Added RRC handler for bearer cxt setup in CUUP commit fe2106676bf9144347f30969a1bfd351136f536a Author: laurent <laurent Thomas> Date: Mon Jul 11 13:30:30 2022 +0200 fix race in startup procedure (config before starting threads that use the config) commit 3197baab60e53459928da30cea7a4e0514a074e3 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sun Jul 10 11:30:31 2022 +0200 Fixed bugs in bearer creation commit 26be61167dec9068e572e08a21ddc96a0f2a7731 Author: laurent <laurent Thomas> Date: Sun Jul 10 10:50:57 2022 +0200 fix a race, add asn1c debug method commit 26750d1818aa206c4c56ada6dbed9bb66dfe3811 Author: laurent <laurent Thomas> Date: Wed Jul 6 22:34:10 2022 +0200 e1ap bearer setup encoding invalid commit d092788aa3f8229eb5c938a41534dfb318955135 Author: laurent <laurent Thomas> Date: Wed Jul 6 14:18:39 2022 +0200 fix regression with F1, some basic cleaning in NGAP commit 41a135734a33b284808d4c5049c431dbc0ff1c46 Author: laurent <laurent Thomas> Date: Wed Jul 6 11:24:52 2022 +0200 fix some ngap regressions commit 460acd840dd58fd46a995219cb9da8fda103668e Author: laurent <laurent Thomas> Date: Tue Jul 5 21:19:13 2022 +0200 build, run in F1 mode until UE connect but pdu session still fails commit 7c067095df287cc7a542be53e9a1471c11ec5af8 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sat Jun 25 22:45:46 2022 +0530 Populate PDU and DRB paramenters from NGAP commit c4ada56a8c31b4c07fc1498e15b0954d9b1ad2f6 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue Jun 7 22:16:58 2022 +0530 setup resp decoding success commit a2f41597c7438934a203ccf3cced35b6b65e8cee Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Sat Jun 4 13:50:55 2022 +0530 Fixed bugs in E1 setup procedure E1 setup request decoding successful commit 6106207ba74c74579b5f375d572930a609abe3a9 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu May 26 20:13:14 2022 +0530 Fixing build issues commit 67235fac01aaca4c17da13bf658144ffe6bd12df Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Mon May 23 12:04:22 2022 +0200 Make nr-softmodem depend on E1AP module commit 391cee938e8250c355b6b914e747f2004c795817 Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Mon May 23 11:57:15 2022 +0200 Fix ITTI errors in E1AP target commit db4146e4a0432b7e3759d71efbeb450754c1f0d3 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Wed May 18 06:59:03 2022 +0530 CP UP task created commit 3058d2fc445acf5681a09f70409023718294d093 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue May 10 08:12:19 2022 +0530 Bearer context setup response message commit b911e9db2a4d0a35eb9a449ef02acefff30b558f Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Tue May 3 16:52:49 2022 +0530 Bearer context setup c structs commit d0f4d5f3539803253b9a995a90a47b3d825ea0ca Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Apr 28 02:21:50 2022 +0530 Bearer context setup message commit 489a5358fa0e199314254561a2d52c1a93f7803e Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Thu Apr 21 10:11:03 2022 +0530 Started with CUUP task commit b416061f5a237cbabbe09c6d81fe92df9e33fd72 Author: Sakthivel Velumani <velumani@eurecom.fr> Date: Fri Apr 15 18:46:27 2022 +0530 Setup request and response messages commit faca4b97dba92be857bd8442193365fc2c8ed122 Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Mon Apr 11 15:01:48 2022 +0200 Fixup for cmake execution commit ecfd9f7608a5820ae85278939e9bbaf7f1245dd6 Author: Robert Schmidt <robert.schmidt@eurecom.fr> Date: Tue Nov 24 21:39:20 2020 +0100 Move CMakeLists.txt into root commit 9f41f7c52b3c7a185e5e34bb1591b0eb66459837 Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Tue Apr 12 12:07:18 2022 +0200 Remove hwlat refs in build_oai: targets don't exist anymore commit e666cf5eedc67695febd33de1397331d6b7b2320 Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Mon Apr 11 14:37:32 2022 +0200 Create CMake E1AP_RELEASE variable from E1AP_VERSION commit 1f8413361c1b99ea46ee613da035803a1387f65c Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Sun Apr 10 14:25:38 2022 +0200 Add E1AP lib commit 7465cea49243fd6eb9869035b18860dface57098 Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Sun Apr 10 14:48:40 2022 +0200 Add E1AP Grammar and build ASN.1 lib at build time commit cde22f83032a199387ae1eae6b702f44ed154f3e Author: Robert Schmidt <robert.schmidt@openairinterface.org> Date: Fri Apr 22 13:42:51 2022 +0200 Accept higher vers. nums in make_version/MAKE_VERSION commit d5127b23608240374a439d1d9c2ff6d53c4b527c Author: Robert Schmidt <robert.schmidt@eurecom.fr> Date: Tue Nov 24 21:39:20 2020 +0100 Move CMakeLists.txt into root
592 lines
24 KiB
C
592 lines
24 KiB
C
/*
|
|
* 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
|
|
*
|
|
* Author and copyright: Laurent Thomas, open-cells.com
|
|
*
|
|
* 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
|
|
*/
|
|
|
|
#ifndef INTERTASK_INTERFACE_H_
|
|
#define INTERTASK_INTERFACE_H_
|
|
#include <stdint.h>
|
|
#include <sys/epoll.h>
|
|
|
|
#include <mem_block.h>
|
|
#include <assertions.h>
|
|
|
|
|
|
typedef enum timer_type_s {
|
|
TIMER_PERIODIC,
|
|
TIMER_ONE_SHOT,
|
|
TIMER_TYPE_MAX,
|
|
} timer_type_t;
|
|
|
|
typedef struct {
|
|
void *arg;
|
|
long timer_id;
|
|
} timer_has_expired_t;
|
|
|
|
typedef struct {
|
|
uint32_t interval_sec;
|
|
uint32_t interval_us;
|
|
long task_id;
|
|
instance_t instance;
|
|
timer_type_t type;
|
|
void *timer_arg;
|
|
long timer_id;
|
|
} timer_create_t;
|
|
|
|
typedef struct {
|
|
long task_id;
|
|
long timer_id;
|
|
} timer_delete_t;
|
|
|
|
|
|
typedef struct itti_lte_time_s {
|
|
uint32_t frame;
|
|
uint8_t slot;
|
|
} itti_lte_time_t;
|
|
|
|
|
|
typedef struct IttiMsgEmpty_s {
|
|
} IttiMsgEmpty;
|
|
|
|
typedef struct IttiMsgText_s {
|
|
uint32_t size;
|
|
char text[];
|
|
} IttiMsgText;
|
|
|
|
#include <openair2/COMMON/phy_messages_types.h>
|
|
#include <openair2/COMMON/mac_messages_types.h>
|
|
#include <openair2/COMMON/rlc_messages_types.h>
|
|
#include <openair2/COMMON/pdcp_messages_types.h>
|
|
#include <openair2/COMMON/networkDef.h>
|
|
#include <openair2/COMMON/as_message.h>
|
|
#include <openair2/RRC/LTE/rrc_types.h>
|
|
#include <openair2/COMMON/rrc_messages_types.h>
|
|
#include <openair2/COMMON/e1ap_messages_types.h>
|
|
|
|
#include <openair3/NAS/COMMON/UTIL/OctetString.h>
|
|
#include <openair3/NAS/COMMON/IES/AccessPointName.h>
|
|
#include <openair3/NAS/COMMON/IES/AdditionalUpdateResult.h>
|
|
#include <openair3/NAS/COMMON/IES/AdditionalUpdateType.h>
|
|
#include <openair3/NAS/COMMON/IES/ApnAggregateMaximumBitRate.h>
|
|
#include <openair3/NAS/COMMON/IES/AuthenticationFailureParameter.h>
|
|
#include <openair3/NAS/COMMON/IES/AuthenticationParameterAutn.h>
|
|
#include <openair3/NAS/COMMON/IES/AuthenticationParameterRand.h>
|
|
#include <openair3/NAS/COMMON/IES/AuthenticationResponseParameter.h>
|
|
#include <openair3/NAS/COMMON/IES/CipheringKeySequenceNumber.h>
|
|
#include <openair3/NAS/COMMON/IES/Cli.h>
|
|
#include <openair3/NAS/COMMON/IES/CsfbResponse.h>
|
|
#include <openair3/NAS/COMMON/IES/DaylightSavingTime.h>
|
|
#include <openair3/NAS/COMMON/IES/DetachType.h>
|
|
#include <openair3/NAS/COMMON/IES/DrxParameter.h>
|
|
#include <openair3/NAS/COMMON/IES/EmergencyNumberList.h>
|
|
#include <openair3/NAS/COMMON/IES/EmmCause.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsAttachResult.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsAttachType.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsBearerContextStatus.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsBearerIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsMobileIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsNetworkFeatureSupport.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsQualityOfService.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsUpdateResult.h>
|
|
#include <openair3/NAS/COMMON/IES/EpsUpdateType.h>
|
|
#include <openair3/NAS/COMMON/IES/EsmCause.h>
|
|
#include <openair3/NAS/COMMON/IES/EsmInformationTransferFlag.h>
|
|
#include <openair3/NAS/COMMON/IES/EsmMessageContainer.h>
|
|
#include <openair3/NAS/COMMON/IES/GprsTimer.h>
|
|
#include <openair3/NAS/COMMON/IES/GutiType.h>
|
|
#include <openair3/NAS/COMMON/IES/IdentityType2.h>
|
|
#include <openair3/NAS/COMMON/IES/ImeisvRequest.h>
|
|
#include <openair3/NAS/COMMON/IES/KsiAndSequenceNumber.h>
|
|
#include <openair3/NAS/COMMON/IES/LcsClientIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/LcsIndicator.h>
|
|
#include <openair3/NAS/COMMON/IES/LinkedEpsBearerIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/LlcServiceAccessPointIdentifier.h>
|
|
#include <openair3/NAS/COMMON/IES/LocationAreaIdentification.h>
|
|
#include <openair3/NAS/COMMON/IES/MessageType.h>
|
|
#include <openair3/NAS/COMMON/IES/MobileIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/MobileStationClassmark2.h>
|
|
#include <openair3/NAS/COMMON/IES/MobileStationClassmark3.h>
|
|
#include <openair3/NAS/COMMON/IES/MsNetworkCapability.h>
|
|
#include <openair3/NAS/COMMON/IES/MsNetworkFeatureSupport.h>
|
|
#include <openair3/NAS/COMMON/IES/NasKeySetIdentifier.h>
|
|
#include <openair3/NAS/COMMON/IES/NasMessageContainer.h>
|
|
#include <openair3/NAS/COMMON/IES/NasRequestType.h>
|
|
#include <openair3/NAS/COMMON/IES/NasSecurityAlgorithms.h>
|
|
#include <openair3/NAS/COMMON/IES/NetworkName.h>
|
|
#include <openair3/NAS/COMMON/IES/Nonce.h>
|
|
#include <openair3/NAS/COMMON/IES/PacketFlowIdentifier.h>
|
|
#include <openair3/NAS/COMMON/IES/PagingIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/PdnAddress.h>
|
|
#include <openair3/NAS/COMMON/IES/PdnType.h>
|
|
#include <openair3/NAS/COMMON/IES/PlmnList.h>
|
|
#include <openair3/NAS/COMMON/IES/ProcedureTransactionIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/ProtocolConfigurationOptions.h>
|
|
#include <openair3/NAS/COMMON/IES/ProtocolDiscriminator.h>
|
|
#include <openair3/NAS/COMMON/IES/PTmsiSignature.h>
|
|
#include <openair3/NAS/COMMON/IES/QualityOfService.h>
|
|
#include <openair3/NAS/COMMON/IES/RadioPriority.h>
|
|
#include <openair3/NAS/COMMON/IES/SecurityHeaderType.h>
|
|
#include <openair3/NAS/COMMON/IES/ServiceType.h>
|
|
#include <openair3/NAS/COMMON/IES/ShortMac.h>
|
|
#include <openair3/NAS/COMMON/IES/SsCode.h>
|
|
#include <openair3/NAS/COMMON/IES/SupportedCodecList.h>
|
|
#include <openair3/NAS/COMMON/IES/TimeZoneAndTime.h>
|
|
#include <openair3/NAS/COMMON/IES/TimeZone.h>
|
|
#include <openair3/NAS/COMMON/IES/TmsiStatus.h>
|
|
#include <openair3/NAS/COMMON/IES/TrackingAreaIdentity.h>
|
|
#include <openair3/NAS/COMMON/IES/TrackingAreaIdentityList.h>
|
|
#include <openair3/NAS/COMMON/IES/TrafficFlowAggregateDescription.h>
|
|
#include <openair3/NAS/COMMON/IES/TrafficFlowTemplate.h>
|
|
#include <openair3/NAS/COMMON/IES/TransactionIdentifier.h>
|
|
#include <openair3/NAS/COMMON/IES/UeNetworkCapability.h>
|
|
#include <openair3/NAS/COMMON/IES/UeRadioCapabilityInformationUpdateNeeded.h>
|
|
#include <openair3/NAS/COMMON/IES/UeSecurityCapability.h>
|
|
#include <openair3/NAS/COMMON/IES/VoiceDomainPreferenceAndUeUsageSetting.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextAccept.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDedicatedEpsBearerContextRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextAccept.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ActivateDefaultEpsBearerContextRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/BearerResourceAllocationRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/BearerResourceModificationRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextAccept.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/DeactivateEpsBearerContextRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/esm_cause.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/EsmInformationRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/EsmInformationResponse.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/EsmStatus.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextAccept.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/ModifyEpsBearerContextRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/PdnConnectivityReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/PdnConnectivityRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/PdnDisconnectReject.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/PdnDisconnectRequest.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/esm_msgDef.h>
|
|
#include <openair3/NAS/COMMON/ESM/MSG/esm_msg.h>
|
|
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AttachAccept.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AttachComplete.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AttachReject.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AttachRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AuthenticationFailure.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AuthenticationReject.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AuthenticationRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/AuthenticationResponse.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/CsServiceNotification.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/DetachAccept.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/DetachRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/DownlinkNasTransport.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/emm_cause.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/EmmInformation.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/EmmStatus.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/ExtendedServiceRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/GutiReallocationCommand.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/GutiReallocationComplete.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/IdentityRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/IdentityResponse.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/NASSecurityModeCommand.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/NASSecurityModeComplete.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/SecurityModeReject.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/ServiceReject.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/ServiceRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateAccept.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateComplete.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateReject.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/TrackingAreaUpdateRequest.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/UplinkNasTransport.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/emm_msgDef.h>
|
|
#include <openair3/NAS/COMMON/EMM/MSG/emm_msg.h>
|
|
|
|
#include <openair3/NAS/COMMON/API/NETWORK/nas_message.h>
|
|
#include <openair2/COMMON/nas_messages_types.h>
|
|
#if ENABLE_RAL
|
|
#include <ral_messages_types.h>
|
|
#endif
|
|
#include <openair2/COMMON/s1ap_messages_types.h>
|
|
#include <openair2/COMMON/x2ap_messages_types.h>
|
|
#include <openair2/COMMON/m2ap_messages_types.h>
|
|
#include <openair2/COMMON/m3ap_messages_types.h>
|
|
#include <openair2/COMMON/sctp_messages_types.h>
|
|
#include <openair2/COMMON/udp_messages_types.h>
|
|
#include <openair2/COMMON/gtpv1_u_messages_types.h>
|
|
#include <openair2/COMMON/ngap_messages_types.h>
|
|
#include <openair3/SCTP/sctp_eNB_task.h>
|
|
#include <openair3/NAS/UE/nas_proc_defs.h>
|
|
#include <openair3/NAS/UE/ESM/esmData.h>
|
|
#include <openair3/NAS/COMMON/UTIL/nas_timer.h>
|
|
#include <openair3/NAS/UE/ESM/esm_pt_defs.h>
|
|
#include <openair3/NAS/UE/EMM/emm_proc_defs.h>
|
|
#include <openair3/NAS/UE/EMM/emmData.h>
|
|
#include <openair3/NAS/UE/EMM/IdleMode_defs.h>
|
|
#include <openair3/NAS/UE/EMM/emm_fsm_defs.h>
|
|
#include <openair3/NAS/UE/EMM/emmData.h>
|
|
#include <openair3/NAS/COMMON/securityDef.h>
|
|
#include <openair3/NAS/UE/EMM/Authentication.h>
|
|
#include <openair3/NAS/UE/EMM/SecurityModeControl.h>
|
|
#include <openair3/NAS/UE/API/USIM/usim_api.h>
|
|
#include <openair3/NAS/COMMON/userDef.h>
|
|
#include <openair3/NAS/UE/API/USER/at_command.h>
|
|
#include <openair3/NAS/UE/API/USER/at_response.h>
|
|
#include <openair3/NAS/UE/API/USER/user_api_defs.h>
|
|
#include <openair3/NAS/UE/EMM/LowerLayer_defs.h>
|
|
#include <openair3/NAS/UE/user_defs.h>
|
|
#include <openair3/NAS/UE/nas_ue_task.h>
|
|
#include <openair3/S1AP/s1ap_eNB.h>
|
|
#include <openair3/MME_APP/mme_app.h>
|
|
//#include <proto.h>
|
|
|
|
void *rrc_enb_process_itti_msg(void *);
|
|
#include <openair3/SCTP/sctp_eNB_task.h>
|
|
#include <openair3/NGAP/ngap_gNB.h>
|
|
|
|
/*
|
|
static const char *const messages_definition_xml = {
|
|
#include <messages_xml.h>
|
|
};
|
|
*/
|
|
|
|
typedef uint32_t MessageHeaderSize;
|
|
typedef uint32_t itti_message_types_t;
|
|
typedef unsigned long message_number_t;
|
|
#define MESSAGE_NUMBER_SIZE (sizeof(unsigned long))
|
|
|
|
typedef enum task_priorities_e {
|
|
TASK_PRIORITY_MAX = 100,
|
|
TASK_PRIORITY_MAX_LEAST = 85,
|
|
TASK_PRIORITY_MED_PLUS = 70,
|
|
TASK_PRIORITY_MED = 55,
|
|
TASK_PRIORITY_MED_LEAST = 40,
|
|
TASK_PRIORITY_MIN_PLUS = 25,
|
|
TASK_PRIORITY_MIN = 10,
|
|
} task_priorities_t;
|
|
|
|
typedef struct {
|
|
task_priorities_t priority;
|
|
unsigned int queue_size;
|
|
/* Printable name */
|
|
char name[256];
|
|
void *(*func)(void *) ;
|
|
void *(*threadFunc)(void *) ;
|
|
} task_info_t;
|
|
//
|
|
//TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)
|
|
//TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL)
|
|
//TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)
|
|
//TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL)
|
|
void *rrc_enb_process_msg(void *);
|
|
#define FOREACH_TASK(TASK_DEF) \
|
|
TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \
|
|
TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \
|
|
TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MAC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)\
|
|
TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL,NULL)\
|
|
TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\
|
|
TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
|
|
TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL)
|
|
|
|
#define TASK_DEF(TaskID, pRIO, qUEUEsIZE, FuNc, ThreadFunc) { pRIO, qUEUEsIZE, #TaskID, FuNc, ThreadFunc },
|
|
|
|
/* Map task id to printable name. */
|
|
static const task_info_t tasks_info[] = {
|
|
FOREACH_TASK(TASK_DEF)
|
|
};
|
|
|
|
#define TASK_ENUM(TaskID, pRIO, qUEUEsIZE, FuNc,ThreadFunc ) TaskID,
|
|
//! Tasks id of each task
|
|
typedef enum {
|
|
FOREACH_TASK(TASK_ENUM)
|
|
} task_id_t;
|
|
|
|
extern uint16_t ue_idx_standalone;
|
|
extern uint16_t node_number;
|
|
|
|
typedef task_id_t thread_id_t;
|
|
|
|
typedef enum message_priorities_e {
|
|
MESSAGE_PRIORITY_MAX = 100,
|
|
MESSAGE_PRIORITY_MAX_LEAST = 85,
|
|
MESSAGE_PRIORITY_MED_PLUS = 70,
|
|
MESSAGE_PRIORITY_MED = 55,
|
|
MESSAGE_PRIORITY_MED_LEAST = 40,
|
|
MESSAGE_PRIORITY_MIN_PLUS = 25,
|
|
MESSAGE_PRIORITY_MIN = 10,
|
|
} message_priorities_t;
|
|
|
|
|
|
#define FOREACH_MSG(INTERNAL_MSG) \
|
|
INTERNAL_MSG(TIMER_HAS_EXPIRED, MESSAGE_PRIORITY_MED, timer_has_expired_t, timer_has_expired) \
|
|
INTERNAL_MSG(INITIALIZE_MESSAGE, MESSAGE_PRIORITY_MED, IttiMsgEmpty, initialize_message) \
|
|
INTERNAL_MSG(ACTIVATE_MESSAGE, MESSAGE_PRIORITY_MED, IttiMsgEmpty, activate_message) \
|
|
INTERNAL_MSG(DEACTIVATE_MESSAGE, MESSAGE_PRIORITY_MED, IttiMsgEmpty, deactivate_message) \
|
|
INTERNAL_MSG(TERMINATE_MESSAGE, MESSAGE_PRIORITY_MAX, IttiMsgEmpty, terminate_message) \
|
|
INTERNAL_MSG(MESSAGE_TEST, MESSAGE_PRIORITY_MED, IttiMsgEmpty, message_test)
|
|
|
|
/* This enum defines messages ids. Each one is unique. */
|
|
typedef enum {
|
|
#define MESSAGE_DEF(iD, pRIO, sTRUCT, fIELDnAME) iD,
|
|
FOREACH_MSG(MESSAGE_DEF)
|
|
#include <all_msg.h>
|
|
#undef MESSAGE_DEF
|
|
MESSAGES_ID_MAX,
|
|
} MessagesIds;
|
|
|
|
typedef union msg_s {
|
|
#define MESSAGE_DEF(iD, pRIO, sTRUCT, fIELDnAME) sTRUCT fIELDnAME;
|
|
FOREACH_MSG(MESSAGE_DEF)
|
|
#include <all_msg.h>
|
|
#undef MESSAGE_DEF
|
|
} msg_t;
|
|
|
|
typedef struct MessageHeader_s {
|
|
MessagesIds messageId; /**< Unique message id as referenced in enum MessagesIds */
|
|
task_id_t originTaskId; /**< ID of the sender task */
|
|
task_id_t destinationTaskId; /**< ID of the destination task */
|
|
instance_t originInstance;
|
|
instance_t destinationInstance;
|
|
itti_lte_time_t lte_time;
|
|
MessageHeaderSize ittiMsgSize; /**< Message size (not including header size) */
|
|
} MessageHeader;
|
|
|
|
typedef struct message_info_s {
|
|
MessagesIds id;
|
|
message_priorities_t priority;
|
|
/* Message payload size */
|
|
MessageHeaderSize size;
|
|
/* Printable name */
|
|
const char name[256];
|
|
} message_info_t;
|
|
|
|
/* Map message id to message information */
|
|
static const message_info_t messages_info[] = {
|
|
#define MESSAGE_DEF(iD, pRIO, sTRUCT, fIELDnAME) { iD, pRIO, sizeof(sTRUCT), #iD },
|
|
FOREACH_MSG(MESSAGE_DEF)
|
|
#include <all_msg.h>
|
|
#undef MESSAGE_DEF
|
|
};
|
|
|
|
typedef struct MessageDef_s {
|
|
MessageHeader ittiMsgHeader; /**< Message header */
|
|
msg_t ittiMsg;
|
|
} MessageDef;
|
|
|
|
|
|
|
|
/* Extract the instance from a message */
|
|
#define ITTI_MSG_ID(mSGpTR) ((mSGpTR)->ittiMsgHeader.messageId)
|
|
#define ITTI_MSG_ORIGIN_ID(mSGpTR) ((mSGpTR)->ittiMsgHeader.originTaskId)
|
|
#define ITTI_MSG_DESTINATION_ID(mSGpTR) ((mSGpTR)->ittiMsgHeader.destinationTaskId)
|
|
#define ITTI_MSG_ORIGIN_INSTANCE(mSGpTR) ((mSGpTR)->ittiMsgHeader.originInstance)
|
|
#define ITTI_MSG_DESTINATION_INSTANCE(mSGpTR) ((mSGpTR)->ittiMsgHeader.destinationInstance)
|
|
#define ITTI_MSG_NAME(mSGpTR) itti_get_message_name(ITTI_MSG_ID(mSGpTR))
|
|
#define ITTI_MSG_ORIGIN_NAME(mSGpTR) itti_get_task_name(ITTI_MSG_ORIGIN_ID(mSGpTR))
|
|
#define ITTI_MSG_DESTINATION_NAME(mSGpTR) itti_get_task_name(ITTI_MSG_DESTINATION_ID(mSGpTR))
|
|
#define TIMER_HAS_EXPIRED(mSGpTR) (mSGpTR)->ittiMsg.timer_has_expired
|
|
|
|
#define INSTANCE_DEFAULT (UINT16_MAX - 1)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \brief Send a message to a task (could be itself)
|
|
\param task_id Task ID
|
|
\param instance Instance of the task used for virtualization
|
|
\param message Pointer to the message to send
|
|
@returns -1 on failure, 0 otherwise
|
|
**/
|
|
int itti_send_msg_to_task(task_id_t task_id, instance_t instance, MessageDef *message);
|
|
|
|
/** \brief Add a new fd to monitor.
|
|
NOTE: it is up to the user to read data associated with the fd
|
|
\param task_id Task ID of the receiving task
|
|
\param fd The file descriptor to monitor
|
|
**/
|
|
void itti_subscribe_event_fd(task_id_t task_id, int fd);
|
|
|
|
/** \brief Remove a fd from the list of fd to monitor
|
|
\param task_id Task ID of the task
|
|
\param fd The file descriptor to remove
|
|
**/
|
|
void itti_unsubscribe_event_fd(task_id_t task_id, int fd);
|
|
|
|
/** \brief Return the list of events excluding the fd associated with itti
|
|
\the fd associated with itti can return, but it is marked events[i].events &= ~EPOLLIN
|
|
\as it is not EPOLLIN, the reader should ignore this fd
|
|
\or it can manage the list of fd's in his interest, so ignore the other ones
|
|
\param task_id Task ID of the task
|
|
\param events events list
|
|
@returns number of events to handle
|
|
**/
|
|
int itti_get_events(task_id_t task_id, struct epoll_event *events, int nb_max_evts);
|
|
|
|
/** \brief Retrieves a message in the queue associated to task_id.
|
|
If the queue is empty, the thread is blocked till a new message arrives.
|
|
\param task_id Task ID of the receiving task
|
|
\param received_msg Pointer to the allocated message
|
|
**/
|
|
void itti_receive_msg(task_id_t task_id, MessageDef **received_msg);
|
|
|
|
/** \brief Try to retrieves a message in the queue associated to task_id.
|
|
\param task_id Task ID of the receiving task
|
|
\param received_msg Pointer to the allocated message
|
|
**/
|
|
void itti_poll_msg(task_id_t task_id, MessageDef **received_msg);
|
|
|
|
/** \brief Start thread associated to the task
|
|
\param task_id task to start
|
|
\param start_routine entry point for the task
|
|
\param args_p Optional argument to pass to the start routine
|
|
@returns -1 on failure, 0 otherwise
|
|
**/
|
|
int itti_create_task(task_id_t task_id,
|
|
void *(*start_routine) (void *),
|
|
void *args_p);
|
|
|
|
int itti_create_queue(const task_info_t *task_info);
|
|
|
|
/** \brief Exit the current task.
|
|
**/
|
|
void itti_exit_task(void);
|
|
|
|
/** \brief Initiate termination of all tasks.
|
|
\param task_id task that is completed
|
|
**/
|
|
void itti_terminate_tasks(task_id_t task_id);
|
|
|
|
// Void for legacy compatibility
|
|
void itti_wait_ready(int wait_tasks);
|
|
void itti_mark_task_ready(task_id_t task_id);
|
|
|
|
/** \brief Return the printable string associated with the message
|
|
\param message_id Id of the message
|
|
**/
|
|
const char *itti_get_message_name(MessagesIds message_id);
|
|
|
|
/** \brief Return the printable string associated with a task id
|
|
\param thread_id Id of the task
|
|
**/
|
|
const char *itti_get_task_name(task_id_t task_id);
|
|
|
|
/** \brief Alloc and memset(0) a new itti message.
|
|
\param origin_task_id Task ID of the sending task
|
|
\param message_id Message ID
|
|
@returns NULL in case of failure or newly allocated mesage ref
|
|
**/
|
|
MessageDef *itti_alloc_new_message(
|
|
task_id_t origin_task_id,
|
|
instance_t originInstance,
|
|
MessagesIds message_id);
|
|
|
|
/** \brief Alloc and memset(0) a new itti message.
|
|
\param origin_task_id Task ID of the sending task
|
|
\param message_id Message ID
|
|
\param size size of the payload to send
|
|
@returns NULL in case of failure or newly allocated mesage ref
|
|
**/
|
|
MessageDef *itti_alloc_new_message_sized(
|
|
task_id_t origin_task_id,
|
|
instance_t originInstance,
|
|
MessagesIds message_id,
|
|
MessageHeaderSize size);
|
|
|
|
/** \brief handle signals and wait for all threads to join when the process complete.
|
|
This function should be called from the main thread after having created all ITTI tasks.
|
|
**/
|
|
void itti_wait_tasks_end(void);
|
|
void itti_set_task_real_time(task_id_t task_id);
|
|
|
|
/** \brief Send a termination message to all tasks.
|
|
\param task_id task that is broadcasting the message.
|
|
**/
|
|
void itti_send_terminate_message(task_id_t task_id);
|
|
|
|
void *itti_malloc(task_id_t origin_task_id, task_id_t destination_task_id, ssize_t size);
|
|
void *calloc_or_fail(size_t size);
|
|
void *malloc_or_fail(size_t size);
|
|
int memory_read(const char *datafile, void *data, size_t size);
|
|
int itti_free(task_id_t task_id, void *ptr);
|
|
|
|
int itti_init(task_id_t task_max, const task_info_t *tasks_info);
|
|
int timer_setup(
|
|
uint32_t interval_sec,
|
|
uint32_t interval_us,
|
|
task_id_t task_id,
|
|
instance_t instance,
|
|
timer_type_t type,
|
|
void *timer_arg,
|
|
long *timer_id);
|
|
|
|
|
|
int timer_remove(long timer_id);
|
|
#define timer_stop timer_remove
|
|
int signal_handle(int *end);
|
|
int signal_mask(void);
|
|
|
|
void log_scheduler(const char *label);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* INTERTASK_INTERFACE_H_ */
|