From 0eb834e581b25c0ac0a657b1b7d8bb70fe4d2aa9 Mon Sep 17 00:00:00 2001 From: vlad shkapenyuk Date: Thu, 20 Feb 2020 19:34:50 -0500 Subject: [PATCH] Adding MC-NIB support Signed-off-by: vlad shkapenyuk Change-Id: Iedee46f11b7995f2c04abd5e077238184af9c7ee --- mc-core/Dockerfile | 28 +- mc-core/README.md | 7 +- mc-core/container-tag.yaml | 2 +- mc-core/container_start.sh | 1 + mc-core/mc/cfg/ifres.xml | 103 +- mc-core/mc/cfg/packet_schema.txt | 94 +- mc-core/mc/local/SgNB_release_rqd.h | 36 +- mc-core/mc/local_datasource/rts_proto.c | 102 +- mc-core/mc/mc_deployment.json | 4 +- mc-core/mc/mcnib/Makefile | 132 ++ mc-core/mc/mcnib/gsmcnib.cc | 544 ++++++++ mc-core/mc/mcnib/mc_clear.cc | 35 + mc-core/mc/mcnib/mc_store_schema.cc | 58 + mc-core/mc/queries/addn_req_time.gsql | 5 +- mc-core/mc/queries/addreq_pdf.gsql | 6 +- mc-core/mc/queries/addreq_stats.gsql | 6 +- mc-core/mc/queries/admitted_erabs.gsql | 5 +- mc-core/mc/queries/dc_conn_stats.gsql | 9 +- mc-core/mc/queries/debug.gsql | 8 +- mc-core/mc/queries/generate_runall.py | 153 +++ mc-core/mc/queries/mod_req_failure.gsql | 3 +- mc-core/mc/queries/nib.json | 2098 ++++++++++++++++++++++++++++++ mc-core/mc/queries/reconfig_status.gsql | 21 +- mc-core/mc/queries/release_req_time.gsql | 6 +- mc-core/mc/queries/rrcx_pdf_cell.gsql | 23 +- mc-core/mc/queries/rrcx_stats.gsql | 24 +- mc-core/mc/queries/rrcx_stats_cell.gsql | 3 + mc-core/mc/queries/runall | 6 +- mc-core/mc/queries/throughput.gsql | 9 +- 29 files changed, 3342 insertions(+), 189 deletions(-) create mode 100644 mc-core/mc/mcnib/Makefile create mode 100644 mc-core/mc/mcnib/gsmcnib.cc create mode 100644 mc-core/mc/mcnib/mc_clear.cc create mode 100644 mc-core/mc/mcnib/mc_store_schema.cc create mode 100644 mc-core/mc/queries/generate_runall.py create mode 100644 mc-core/mc/queries/nib.json diff --git a/mc-core/Dockerfile b/mc-core/Dockerfile index eebfffd..8073475 100644 --- a/mc-core/Dockerfile +++ b/mc-core/Dockerfile @@ -16,8 +16,7 @@ ARG STAGE_DIR=/mc -FROM nexus3.o-ran-sc.org:10004/bldr-ubuntu16-c-go:3-u16.04-nng AS project-build - +FROM nexus3.o-ran-sc.org:10004/bldr-ubuntu18-c-go:4-u18.04-nng AS project-build # Update & installation of linux packages RUN apt-get update -y && \ apt-get install -y curl && \ @@ -28,6 +27,15 @@ ARG STAGE_DIR COPY mc ${STAGE_DIR} WORKDIR ${STAGE_DIR} +RUN apt-get install -y libboost-all-dev +RUN apt-get install -y libhiredis-dev +RUN git clone https://gerrit.o-ran-sc.org/r/ric-plt/sdl +WORKDIR ${STAGE_DIR}/sdl +RUN ./autogen.sh +RUN ./configure +RUN make all +RUN make install +WORKDIR ${STAGE_DIR} RUN git clone https://github.com/protocolbuffers/protobuf.git WORKDIR ${STAGE_DIR}/protobuf RUN ./autogen.sh @@ -47,27 +55,21 @@ RUN make install RUN ldconfig RUN pip install protobuf WORKDIR ${STAGE_DIR} -RUN git clone -b Amber https://gerrit.o-ran-sc.org/r/com/gs-lite +RUN git clone -b release/0.1.0 https://gerrit.o-ran-sc.org/r/com/gs-lite WORKDIR ${STAGE_DIR}/gs-lite COPY mc/cfg ${STAGE_DIR}/gs-lite/cfg COPY mc/local_datasource ${STAGE_DIR}/gs-lite/src/lib/gscprts/local_datasource COPY mc/local ${STAGE_DIR}/gs-lite/include/lfta/local COPY mc/queries ${STAGE_DIR}/gs-lite/demo/queries +COPY mc/mcnib/* ${STAGE_DIR}/gs-lite/src/tools/ RUN ./build_and_install.sh WORKDIR ${STAGE_DIR}/gs-lite/demo/queries ENV GSLITE_ROOT ${STAGE_DIR}/gs-lite RUN bash ${STAGE_DIR}/gs-lite/bin/buildit +RUN python generate_runall.py -# Update & installation of linux packages -RUN apt-get update -y && \ - apt-get install -y curl && \ - apt-get install -y procps && \ - apt-get install -y python-pip # now install the binaries and libraries into smaller docker image -# use the mc_listener container as the base; all of it's stuff is in /playpen and can -# stay where it is -# FROM nexus3.o-ran-sc.org:10004/o-ran-sc/ric-app-mc-listener:1.3.2 ARG STAGE_DIR @@ -78,11 +80,13 @@ COPY --from=project-build ${STAGE_DIR}/data_gen /mc/data_gen COPY --from=project-build ${STAGE_DIR}/mc_deployment.json /mc/ COPY --from=project-build ${STAGE_DIR}/extract_params.py /mc/ COPY --from=project-build /usr/local/lib/libproto* /usr/local/lib/ +COPY --from=project-build /usr/local/lib/libsdl* /usr/local/lib/ COPY container_start.sh /playpen/bin/ RUN apt-get update && \ - apt-get install -y curl python python-pip && \ + apt-get install -y curl python python-pip libboost-all-dev libhiredis-dev && \ +# redis-tools && \ apt-get clean RUN ldconfig diff --git a/mc-core/README.md b/mc-core/README.md index 24ba629..1da21bc 100644 --- a/mc-core/README.md +++ b/mc-core/README.md @@ -1,6 +1 @@ -GS-Lite based Measurement Campaign (MC) xApp - - - - - +GS-Lite based Measurement Campaign xApp diff --git a/mc-core/container-tag.yaml b/mc-core/container-tag.yaml index bd28b38..1add03f 100644 --- a/mc-core/container-tag.yaml +++ b/mc-core/container-tag.yaml @@ -1,4 +1,4 @@ --- -tag: '2.0.1' +tag: '3.0.1' # this is used by the CI jobs to tag the image it builds diff --git a/mc-core/container_start.sh b/mc-core/container_start.sh index 1af09d4..cc322e0 100755 --- a/mc-core/container_start.sh +++ b/mc-core/container_start.sh @@ -61,6 +61,7 @@ echo "listener was started" >&2 fi + # ---- finally, start the core MC application ----------------------------- cd ${GSLITE_ROOT:-/mc/gs-lite}/demo/queries ./runall diff --git a/mc-core/mc/cfg/ifres.xml b/mc-core/mc/cfg/ifres.xml index c559415..edef128 100644 --- a/mc-core/mc/cfg/ifres.xml +++ b/mc-core/mc/cfg/ifres.xml @@ -1,102 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + diff --git a/mc-core/mc/cfg/packet_schema.txt b/mc-core/mc/cfg/packet_schema.txt index f3cde05..4ed16af 100644 --- a/mc-core/mc/cfg/packet_schema.txt +++ b/mc-core/mc/cfg/packet_schema.txt @@ -7,7 +7,7 @@ PROTOCOL base{ // indicates release of dual connectivity for the UE // Defined in context_release.json on ue_context_release.proto // schemaId = 201, interface CONRELEASE -PROTOCOL dc_release (base){ +PROTOCOL dc_release (base, schema_id 201){ // timestamp in milliseconds ullong timestamp_ms get_dc_release__timestamp_ms (required,increasing); // gNB ID @@ -27,7 +27,7 @@ PROTOCOL dc_release (base){ // transfer per UE and bearere between given time intervals // Defined in rat_data_usage.json on secondary_rat_data_usage_report.proto // schemaId = 1501, interface RATDATAUSAGE -PROTOCOL rat_data_usage (base){ +PROTOCOL rat_data_usage (base, schema_id 1501){ // timestamp in milliseconds ullong timestamp_ms get_rat_data_usage__timestamp_ms (required,increasing); // gNB ID @@ -50,7 +50,7 @@ PROTOCOL rat_data_usage (base){ // indicates successful configuration of Dual Connectivity // Defined in recon_complete.json on sgnb_reconfiguration_complete.proto // schemaId = 103, interface RECONCOMPLETE -PROTOCOL reconfig_all (base){ +PROTOCOL reconfig_all (base, schema_id 103){ // timestamp in milliseconds ullong timestamp_ms get_reconfig_all__timestamp_ms (required,increasing); // gNB ID @@ -66,7 +66,7 @@ PROTOCOL reconfig_all (base){ // indicates unsuccessful configuration of Dual Connectivity` // Defined in recon_complete.json on sgnb_reconfiguration_complete.proto // schemaId = 101, interface RECONCOMPLETE -PROTOCOL reconfig_success (base){ +PROTOCOL reconfig_success (base, schema_id 101){ // timestamp in milliseconds ullong timestamp_ms get_reconfig_success__timestamp_ms (required,increasing); // gNB ID @@ -82,7 +82,7 @@ PROTOCOL reconfig_success (base){ // indicates unsuccessful configuration of Dual Connectivity` // Defined in recon_complete.json on sgnb_reconfiguration_complete.proto // schemaId = 102, interface RECONCOMPLETE -PROTOCOL reconfig_reject (base){ +PROTOCOL reconfig_reject (base, schema_id 102){ // timestamp in milliseconds ullong timestamp_ms get_reconfig_reject__timestamp_ms (required,increasing); // gNB ID @@ -106,7 +106,7 @@ PROTOCOL reconfig_reject (base){ // Confirmation of release of SgNB and SCG resources by the MeNB, list the eRABs if any (default is ALL in which case no eRABs are listed). // Defined in release_confirm.json on sgnb_release_confirm.proto // schemaId = 1101, interface RELCONF -PROTOCOL sgnb_release_confirm_from_menb_erabs (base){ +PROTOCOL sgnb_release_confirm_from_menb_erabs (base, schema_id 1101){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_release_confirm_from_menb_erabs__timestamp_ms (required,increasing); // gNB ID @@ -134,7 +134,7 @@ PROTOCOL sgnb_release_confirm_from_menb_erabs (base){ // Confirmation of release of SgNB and SCG resources by the MeNB. // Defined in release_confirm.json on sgnb_release_confirm.proto // schemaId = 1102, interface RELCONF -PROTOCOL sgnb_release_confirm_from_menb (base){ +PROTOCOL sgnb_release_confirm_from_menb (base, schema_id 1102){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_release_confirm_from_menb__timestamp_ms (required,increasing); // gNB ID @@ -150,7 +150,7 @@ PROTOCOL sgnb_release_confirm_from_menb (base){ // initiated by the MeNB to request SgNB to release its SCG resources for the UE // Defined in release_req.json on sgnb_release_request.proto // schemaId = 801, interface RELREQ -PROTOCOL release_req (base){ +PROTOCOL release_req (base, schema_id 801){ // timestamp in milliseconds ullong timestamp_ms get_release_req__timestamp_ms (required,increasing); // gNB ID @@ -174,7 +174,7 @@ PROTOCOL release_req (base){ // response by the SgNB back to the MeNB acknowledging release of SCG resources for the UE. // Defined in release_req_ack.json on sgnb_release_request_acknowledge.proto // schemaId = 901, interface RELREQACK -PROTOCOL release_req_ack (base){ +PROTOCOL release_req_ack (base, schema_id 901){ // timestamp in milliseconds ullong timestamp_ms get_release_req_ack__timestamp_ms (required,increasing); // gNB ID @@ -190,7 +190,7 @@ PROTOCOL release_req_ack (base){ // Initiated by the SgNB indicating to MeNB that SCG resources need to be released for the given underlying cause. // Defined in release_rqd.json on sgnb_release_required.proto // schemaId = 1001, interface SGNBRELEASERQD -PROTOCOL SgNB_release_rqd (base){ +PROTOCOL SgNB_release_rqd (base, schema_id 1001){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_release_rqd__timestamp_ms (required,increasing); // gNB ID @@ -201,12 +201,6 @@ PROTOCOL SgNB_release_rqd (base){ llong id_MeNB_UE_X2AP_ID get_SgNB_release_rqd__id_MeNB_UE_X2AP_ID (required); // default=-1 llong cause_transport get_SgNB_release_rqd__cause_transport (required); -// default=-1 - llong cause_radio_network get_SgNB_release_rqd__cause_radio_network (required); -// UE_ID assigned by gNB for the UE over an X2. primary key for referring to the UE within SgNB. - llong id_SgNB_UE_X2AP_ID get_SgNB_release_rqd__id_SgNB_UE_X2AP_ID (required); -// default=-1 - llong cause_misc get_SgNB_release_rqd__cause_misc (required); // max is 8, for piz trial 4. Optional. If not present, release ALL bearers. llong e_RAB_ID0 get_SgNB_release_rqd__e_RAB_ID0; // max is 8, for piz trial 4. Optional. If not present, release ALL bearers. @@ -223,12 +217,18 @@ PROTOCOL SgNB_release_rqd (base){ llong e_RAB_ID6 get_SgNB_release_rqd__e_RAB_ID6; // max is 8, for piz trial 4. Optional. If not present, release ALL bearers. llong e_RAB_ID7 get_SgNB_release_rqd__e_RAB_ID7; +// default=-1 + llong cause_radio_network get_SgNB_release_rqd__cause_radio_network (required); +// UE_ID assigned by gNB for the UE over an X2. primary key for referring to the UE within SgNB. + llong id_SgNB_UE_X2AP_ID get_SgNB_release_rqd__id_SgNB_UE_X2AP_ID (required); +// default=-1 + llong cause_misc get_SgNB_release_rqd__cause_misc (required); } // Cell-wide CSI-RS measurement tuple and SSB measurement (on serving cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 1, interface RRCXFER -PROTOCOL serv_nr_cell (base){ +PROTOCOL serv_nr_cell (base, schema_id 1){ // timestamp in milliseconds ullong timestamp_ms get_serv_nr_cell__timestamp_ms (required,increasing); // gNB ID @@ -249,7 +249,7 @@ PROTOCOL serv_nr_cell (base){ // Cell-wide SSB measurement (from neighbor cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 4, interface RRCXFER -PROTOCOL nr_neighbor (base){ +PROTOCOL nr_neighbor (base, schema_id 4){ // timestamp in milliseconds ullong timestamp_ms get_nr_neighbor__timestamp_ms (required,increasing); // gNB ID @@ -268,7 +268,7 @@ PROTOCOL nr_neighbor (base){ // Cell-wide beam-specific CSI-RS measurements (on serving cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 2, interface RRCXFER -PROTOCOL serv_cell_beam_csi (base){ +PROTOCOL serv_cell_beam_csi (base, schema_id 2){ // timestamp in milliseconds ullong timestamp_ms get_serv_cell_beam_csi__timestamp_ms (required,increasing); // gNB ID @@ -291,7 +291,7 @@ PROTOCOL serv_cell_beam_csi (base){ // Cell-wide beam-specific CSI-RS measurements (from neighbor cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 5, interface RRCXFER -PROTOCOL neighbor_beam_csi (base){ +PROTOCOL neighbor_beam_csi (base, schema_id 5){ // timestamp in milliseconds ullong timestamp_ms get_neighbor_beam_csi__timestamp_ms (required,increasing); // gNB ID @@ -312,7 +312,7 @@ PROTOCOL neighbor_beam_csi (base){ // Cell-wide beam-specific LIST of SS/PBCH reference signal measurement (on serving cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 3, interface RRCXFER -PROTOCOL serv_cell_beam_ssb (base){ +PROTOCOL serv_cell_beam_ssb (base, schema_id 3){ // timestamp in milliseconds ullong timestamp_ms get_serv_cell_beam_ssb__timestamp_ms (required,increasing); // gNB ID @@ -335,7 +335,7 @@ PROTOCOL serv_cell_beam_ssb (base){ // Cell-wide beam-specific LIST of SS/PBCH reference signal measurement (from neighbor cell) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 6, interface RRCXFER -PROTOCOL neighbor_beam_ssb (base){ +PROTOCOL neighbor_beam_ssb (base, schema_id 6){ // timestamp in milliseconds ullong timestamp_ms get_neighbor_beam_ssb__timestamp_ms (required,increasing); // gNB ID @@ -356,7 +356,7 @@ PROTOCOL neighbor_beam_ssb (base){ // Rejection by the gNMB of an incoming request from the MeNB to the gNB for getting added as a secondary node. // Defined in sgnb_add_req_reject.json on sgnb_addition_request_reject.proto // schemaId = 701, interface ADDREQREJECT -PROTOCOL sgnb_add_req_reject (base){ +PROTOCOL sgnb_add_req_reject (base, schema_id 701){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_add_req_reject__timestamp_ms (required,increasing); // gNB ID @@ -378,7 +378,7 @@ PROTOCOL sgnb_add_req_reject (base){ // Indicates positive response for adding secondary node to the UE. This record has indicated bearers not admitted by the secondary node. // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 501, interface SGNB_ADDITION_REQ_ACK -PROTOCOL eRABs_notadmitted_for_ue (base){ +PROTOCOL eRABs_notadmitted_for_ue (base, schema_id 501){ // timestamp in milliseconds ullong timestamp_ms get_eRABs_notadmitted_for_ue__timestamp_ms (required,increasing); // gNB ID @@ -404,7 +404,7 @@ PROTOCOL eRABs_notadmitted_for_ue (base){ // Indicates positive response for adding secondary node to the UE. This record indicates eRABs acknowledged for admission for the UE. // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 502, interface SGNB_ADDITION_REQ_ACK -PROTOCOL eRABs_acked_for_admit_for_ue (base){ +PROTOCOL eRABs_acked_for_admit_for_ue (base, schema_id 502){ // timestamp in milliseconds ullong timestamp_ms get_eRABs_acked_for_admit_for_ue__timestamp_ms (required,increasing); // gNB ID @@ -429,7 +429,7 @@ PROTOCOL eRABs_acked_for_admit_for_ue (base){ // Extracts the frequencies of the NR cells serving the eRAB. // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 503, interface SGNB_ADDITION_REQ_ACK -PROTOCOL SgNB_ack_for_ue_NRfreqs (base){ +PROTOCOL SgNB_ack_for_ue_NRfreqs (base, schema_id 503){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_ack_for_ue_NRfreqs__timestamp_ms (required,increasing); // gNB ID @@ -479,7 +479,7 @@ PROTOCOL SgNB_ack_for_ue_NRfreqs (base){ // list of eRABs with sgNB radio bearer config info for addition or modification. // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 504, interface SGNB_ADDITION_REQ_ACK -PROTOCOL SgNB_ack_for_add_mod_for_ue (base){ +PROTOCOL SgNB_ack_for_add_mod_for_ue (base, schema_id 504){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_ack_for_add_mod_for_ue__timestamp_ms (required,increasing); // gNB ID @@ -507,7 +507,7 @@ PROTOCOL SgNB_ack_for_add_mod_for_ue (base){ // signaling measurements of the user while serving the eRABs // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 505, interface SGNB_ADDITION_REQ_ACK -PROTOCOL SgNB_ack_for_ue_measurements (base){ +PROTOCOL SgNB_ack_for_ue_measurements (base, schema_id 505){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_ack_for_ue_measurements__timestamp_ms (required,increasing); // gNB ID @@ -532,7 +532,7 @@ PROTOCOL SgNB_ack_for_ue_measurements (base){ // CSI beam measurements of the user while serving the eRABs // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 506, interface SGNB_ADDITION_REQ_ACK -PROTOCOL SgNB_ack_for_ue_beam_csi (base){ +PROTOCOL SgNB_ack_for_ue_beam_csi (base, schema_id 506){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_ack_for_ue_beam_csi__timestamp_ms (required,increasing); // gNB ID @@ -559,7 +559,7 @@ PROTOCOL SgNB_ack_for_ue_beam_csi (base){ // SSB beam measurements of the user while serving the eRABs // Defined in sgnb_addition_ack.json on sgnb_addition_request_acknowledge.proto // schemaId = 507, interface SGNB_ADDITION_REQ_ACK -PROTOCOL SgNB_ack_for_ue_beam_ssb (base){ +PROTOCOL SgNB_ack_for_ue_beam_ssb (base, schema_id 507){ // timestamp in milliseconds ullong timestamp_ms get_SgNB_ack_for_ue_beam_ssb__timestamp_ms (required,increasing); // gNB ID @@ -586,7 +586,7 @@ PROTOCOL SgNB_ack_for_ue_beam_ssb (base){ // Indicates request for adding secondary node to the UE // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 401, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue (base){ +PROTOCOL sgnb_addreq_for_ue (base, schema_id 401){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue__timestamp_ms (required,increasing); // gNB ID @@ -606,7 +606,7 @@ PROTOCOL sgnb_addreq_for_ue (base){ // Indicates request for adding secondary node to the UE, with bearer details // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 402, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_bearers (base){ +PROTOCOL sgnb_addreq_for_ue_bearers (base, schema_id 402){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_bearers__timestamp_ms (required,increasing); // gNB ID @@ -656,7 +656,7 @@ PROTOCOL sgnb_addreq_for_ue_bearers (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 403, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_sn_serv_ssb (base){ +PROTOCOL sgnb_addreq_for_ue_sn_serv_ssb (base, schema_id 403){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_sn_serv_ssb__timestamp_ms (required,increasing); // gNB ID @@ -678,7 +678,7 @@ PROTOCOL sgnb_addreq_for_ue_sn_serv_ssb (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 404, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_sn_serv_csi_rs (base){ +PROTOCOL sgnb_addreq_for_ue_sn_serv_csi_rs (base, schema_id 404){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_sn_serv_csi_rs__timestamp_ms (required,increasing); // gNB ID @@ -700,7 +700,7 @@ PROTOCOL sgnb_addreq_for_ue_sn_serv_csi_rs (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 405, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_mn_serv_ssb (base){ +PROTOCOL sgnb_addreq_for_ue_mn_serv_ssb (base, schema_id 405){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_mn_serv_ssb__timestamp_ms (required,increasing); // gNB ID @@ -722,7 +722,7 @@ PROTOCOL sgnb_addreq_for_ue_mn_serv_ssb (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 406, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_mn_serv_csi_rs (base){ +PROTOCOL sgnb_addreq_for_ue_mn_serv_csi_rs (base, schema_id 406){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_mn_serv_csi_rs__timestamp_ms (required,increasing); // gNB ID @@ -744,7 +744,7 @@ PROTOCOL sgnb_addreq_for_ue_mn_serv_csi_rs (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 408, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_sn_neigh_ssb (base){ +PROTOCOL sgnb_addreq_for_ue_sn_neigh_ssb (base, schema_id 408){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_sn_neigh_ssb__timestamp_ms (required,increasing); // gNB ID @@ -766,7 +766,7 @@ PROTOCOL sgnb_addreq_for_ue_sn_neigh_ssb (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 409, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_sn_neigh_csi_rs (base){ +PROTOCOL sgnb_addreq_for_ue_sn_neigh_csi_rs (base, schema_id 409){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_sn_neigh_csi_rs__timestamp_ms (required,increasing); // gNB ID @@ -788,7 +788,7 @@ PROTOCOL sgnb_addreq_for_ue_sn_neigh_csi_rs (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 410, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_mn_neigh_ssb (base){ +PROTOCOL sgnb_addreq_for_ue_mn_neigh_ssb (base, schema_id 410){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_mn_neigh_ssb__timestamp_ms (required,increasing); // gNB ID @@ -810,7 +810,7 @@ PROTOCOL sgnb_addreq_for_ue_mn_neigh_ssb (base){ // Indicates request for adding secondary node to the UE. Extract the SN / serving cell / ssb measurements. // Defined in sgnb_addition_req.json on sgnb_addition_request.proto // schemaId = 411, interface SGNB_ADDITION_REQ -PROTOCOL sgnb_addreq_for_ue_mn_neigh_csi_rs (base){ +PROTOCOL sgnb_addreq_for_ue_mn_neigh_csi_rs (base, schema_id 411){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_addreq_for_ue_mn_neigh_csi_rs__timestamp_ms (required,increasing); // gNB ID @@ -832,7 +832,7 @@ PROTOCOL sgnb_addreq_for_ue_mn_neigh_csi_rs (base){ // ??? // Defined in sgnb_mod_confirm.json on sgnb_modification_confirm.proto // schemaId = 1301, interface SGNBMODCONF -PROTOCOL sgnb_mod_conf (base){ +PROTOCOL sgnb_mod_conf (base, schema_id 1301){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_conf__timestamp_ms (required,increasing); // gNB ID @@ -846,7 +846,7 @@ PROTOCOL sgnb_mod_conf (base){ // ??? // Defined in sgnb_mod_req.json on sgnb_modification_request.proto // schemaId = 1201, interface SGNBMODREQ -PROTOCOL sgnb_mod_req (base){ +PROTOCOL sgnb_mod_req (base, schema_id 1201){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_req__timestamp_ms (required,increasing); // gNB ID @@ -870,7 +870,7 @@ PROTOCOL sgnb_mod_req (base){ // ??? // Defined in sgnb_mod_req_ack.json on sgnb_modification_request_acknowledge.proto // schemaId = 1701, interface SGNBMODREQACK -PROTOCOL sgnb_mod_req_ack (base){ +PROTOCOL sgnb_mod_req_ack (base, schema_id 1701){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_req_ack__timestamp_ms (required,increasing); // gNB ID @@ -884,7 +884,7 @@ PROTOCOL sgnb_mod_req_ack (base){ // ??? // Defined in sgnb_mod_req_reject.json on sgnb_modification_request_reject.proto // schemaId = 1801, interface SGNBMODREQREJECT -PROTOCOL sgnb_mod_req_reject (base){ +PROTOCOL sgnb_mod_req_reject (base, schema_id 1801){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_req_reject__timestamp_ms (required,increasing); // gNB ID @@ -906,7 +906,7 @@ PROTOCOL sgnb_mod_req_reject (base){ // ??? // Defined in sgnb_mod_rqd.json on sgnb_modification_required.proto // schemaId = 1901, interface SGNBMODREQUIRED -PROTOCOL sgnb_mod_required (base){ +PROTOCOL sgnb_mod_required (base, schema_id 1901){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_required__timestamp_ms (required,increasing); // gNB ID @@ -928,7 +928,7 @@ PROTOCOL sgnb_mod_required (base){ // ??? // Defined in sgnb_modification_refuse.json on sgnb_modification_refuse.proto // schemaId = 1401, interface SGNBMODREFUSE -PROTOCOL sgnb_mod_refuse (base){ +PROTOCOL sgnb_mod_refuse (base, schema_id 1401){ // timestamp in milliseconds ullong timestamp_ms get_sgnb_mod_refuse__timestamp_ms (required,increasing); // gNB ID @@ -950,7 +950,7 @@ PROTOCOL sgnb_mod_refuse (base){ // // Defined in snstatusxfer.json on sn_status_transfer.proto // schemaId = 1601, interface SNSTATUSXFER -PROTOCOL sn_status_transfer (base){ +PROTOCOL sn_status_transfer (base, schema_id 1601){ // timestamp in milliseconds ullong timestamp_ms get_sn_status_transfer__timestamp_ms (required,increasing); // gNB ID diff --git a/mc-core/mc/local/SgNB_release_rqd.h b/mc-core/mc/local/SgNB_release_rqd.h index 25e8f96..7215cd4 100644 --- a/mc-core/mc/local/SgNB_release_rqd.h +++ b/mc-core/mc/local/SgNB_release_rqd.h @@ -29,9 +29,6 @@ struct _SgNB_release_rqd { gs_int64_t cause_protocol; gs_int64_t id_MeNB_UE_X2AP_ID; gs_int64_t cause_transport; - gs_int64_t cause_radio_network; - gs_int64_t id_SgNB_UE_X2AP_ID; - gs_int64_t cause_misc; gs_int64_t e_RAB_ID0; gs_int8_t e_RAB_ID0_exists; gs_int64_t e_RAB_ID1; @@ -48,6 +45,9 @@ struct _SgNB_release_rqd { gs_int8_t e_RAB_ID6_exists; gs_int64_t e_RAB_ID7; gs_int8_t e_RAB_ID7_exists; + gs_int64_t cause_radio_network; + gs_int64_t id_SgNB_UE_X2AP_ID; + gs_int64_t cause_misc; }; static inline void init__SgNB_release_rqd(struct _SgNB_release_rqd *m){ @@ -88,21 +88,6 @@ static inline gs_retval_t get_SgNB_release_rqd__cause_transport(struct packet *p return 0; } -static inline gs_retval_t get_SgNB_release_rqd__cause_radio_network(struct packet *p, gs_int64_t *t){ - *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->cause_radio_network; - return 0; -} - -static inline gs_retval_t get_SgNB_release_rqd__id_SgNB_UE_X2AP_ID(struct packet *p, gs_int64_t *t){ - *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->id_SgNB_UE_X2AP_ID; - return 0; -} - -static inline gs_retval_t get_SgNB_release_rqd__cause_misc(struct packet *p, gs_int64_t *t){ - *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->cause_misc; - return 0; -} - static inline gs_retval_t get_SgNB_release_rqd__e_RAB_ID0(struct packet *p, gs_int64_t *t){ *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->e_RAB_ID0; return (((struct _SgNB_release_rqd *)(p->record.packed.values))->e_RAB_ID0==0); @@ -143,4 +128,19 @@ static inline gs_retval_t get_SgNB_release_rqd__e_RAB_ID7(struct packet *p, gs_i return (((struct _SgNB_release_rqd *)(p->record.packed.values))->e_RAB_ID7==0); } +static inline gs_retval_t get_SgNB_release_rqd__cause_radio_network(struct packet *p, gs_int64_t *t){ + *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->cause_radio_network; + return 0; +} + +static inline gs_retval_t get_SgNB_release_rqd__id_SgNB_UE_X2AP_ID(struct packet *p, gs_int64_t *t){ + *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->id_SgNB_UE_X2AP_ID; + return 0; +} + +static inline gs_retval_t get_SgNB_release_rqd__cause_misc(struct packet *p, gs_int64_t *t){ + *t = ((struct _SgNB_release_rqd *)(p->record.packed.values))->cause_misc; + return 0; +} + #endif diff --git a/mc-core/mc/local_datasource/rts_proto.c b/mc-core/mc/local_datasource/rts_proto.c index 7f763b7..42ac898 100644 --- a/mc-core/mc/local_datasource/rts_proto.c +++ b/mc-core/mc/local_datasource/rts_proto.c @@ -600,7 +600,6 @@ gs_uint32_t process_buffer_SGNBRELEASERQD(gs_uint8_t * buffer, gs_uint32_t bufle struct _SgNB_release_rqd *SgNB_release_rqd = NULL; Uenibstreamprotobuf__SgNBReleaseRequired *node_0_0 = NULL; Uenibstreamprotobuf__SgNBReleaseRequiredIEs *node_0_1 = NULL; - Uenibstreamprotobuf__ERABsToBeReleasedSgNBRelReqdList *node_0_2 = NULL; // -------------------------------------------------- // --- Specialized processing for .proto sgnb_release_required.json, path release_rqd.json @@ -634,6 +633,54 @@ gs_uint32_t process_buffer_SGNBRELEASERQD(gs_uint8_t * buffer, gs_uint32_t bufle }else{ SgNB_release_rqd->cause_transport = -1; } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 0){ + SgNB_release_rqd->e_RAB_ID0 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[0]->e_rab_id; + SgNB_release_rqd->e_RAB_ID0_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID0_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 1){ + SgNB_release_rqd->e_RAB_ID1 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[1]->e_rab_id; + SgNB_release_rqd->e_RAB_ID1_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID1_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 2){ + SgNB_release_rqd->e_RAB_ID2 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[2]->e_rab_id; + SgNB_release_rqd->e_RAB_ID2_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID2_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 3){ + SgNB_release_rqd->e_RAB_ID3 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[3]->e_rab_id; + SgNB_release_rqd->e_RAB_ID3_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID3_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 4){ + SgNB_release_rqd->e_RAB_ID4 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[4]->e_rab_id; + SgNB_release_rqd->e_RAB_ID4_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID4_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 5){ + SgNB_release_rqd->e_RAB_ID5 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[5]->e_rab_id; + SgNB_release_rqd->e_RAB_ID5_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID5_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 6){ + SgNB_release_rqd->e_RAB_ID6 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[6]->e_rab_id; + SgNB_release_rqd->e_RAB_ID6_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID6_exists = 0; + } + if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 7){ + SgNB_release_rqd->e_RAB_ID7 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist->id_e_rabs_tobereleased_sgnbrelreqd_item[7]->e_rab_id; + SgNB_release_rqd->e_RAB_ID7_exists = 1; + }else{ + SgNB_release_rqd->e_RAB_ID7_exists = 0; + } if(node_0_1->id_cause && node_0_1->id_cause->radionetwork){ SgNB_release_rqd->cause_radio_network = node_0_1->id_cause->radionetwork->value; }else{ @@ -645,58 +692,7 @@ gs_uint32_t process_buffer_SGNBRELEASERQD(gs_uint8_t * buffer, gs_uint32_t bufle }else{ SgNB_release_rqd->cause_misc = -1; } - node_0_2 = node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist; - if(node_0_1->id_e_rabs_tobereleased_sgnbrelreqdlist){ - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 0){ - SgNB_release_rqd->e_RAB_ID0 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[0]->e_rab_id; - SgNB_release_rqd->e_RAB_ID0_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID0_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 1){ - SgNB_release_rqd->e_RAB_ID1 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[1]->e_rab_id; - SgNB_release_rqd->e_RAB_ID1_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID1_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 2){ - SgNB_release_rqd->e_RAB_ID2 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[2]->e_rab_id; - SgNB_release_rqd->e_RAB_ID2_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID2_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 3){ - SgNB_release_rqd->e_RAB_ID3 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[3]->e_rab_id; - SgNB_release_rqd->e_RAB_ID3_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID3_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 4){ - SgNB_release_rqd->e_RAB_ID4 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[4]->e_rab_id; - SgNB_release_rqd->e_RAB_ID4_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID4_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 5){ - SgNB_release_rqd->e_RAB_ID5 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[5]->e_rab_id; - SgNB_release_rqd->e_RAB_ID5_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID5_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 6){ - SgNB_release_rqd->e_RAB_ID6 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[6]->e_rab_id; - SgNB_release_rqd->e_RAB_ID6_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID6_exists = 0; - } - if(node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item && node_0_2->n_id_e_rabs_tobereleased_sgnbrelreqd_item > 7){ - SgNB_release_rqd->e_RAB_ID7 = node_0_2->id_e_rabs_tobereleased_sgnbrelreqd_item[7]->e_rab_id; - SgNB_release_rqd->e_RAB_ID7_exists = 1; - }else{ - SgNB_release_rqd->e_RAB_ID7_exists = 0; - } - rts_fta_process_packet(&cur_packet); - } + rts_fta_process_packet(&cur_packet); } uenibstreamprotobuf__sg_nbrelease_required__free_unpacked(node_0_0,NULL); return 0; diff --git a/mc-core/mc/mc_deployment.json b/mc-core/mc/mc_deployment.json index 643f115..2ea02f1 100644 --- a/mc-core/mc/mc_deployment.json +++ b/mc-core/mc/mc_deployment.json @@ -33,6 +33,8 @@ "ves_collector_address":"envy15:8888", "measurement_interval": 10000, "simulator_mode": "true", - "debug_mode": "true" + "debug_mode": "true", + "__DBAAS_SERVICE_HOST__": "tuska", + "__DBAAS_SERVICE_PORT__": 6379 } } diff --git a/mc-core/mc/mcnib/Makefile b/mc-core/mc/mcnib/Makefile new file mode 100644 index 0000000..2e36b36 --- /dev/null +++ b/mc-core/mc/mcnib/Makefile @@ -0,0 +1,132 @@ +# ------------------------------------------------ +# Copyright 2014 AT&T Intellectual Property +# 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. +# ------------------------------------------- + +CC= gcc -O4 -g -I ../../include -D_FILE_OFFSET_BITS=64 +CXX=g++ +C++OPTS = -ggdb -D_BSD_SIGNALS $(INCLUDES) -std=c++11 -I ../../include +C++LDOPTS = -ggdb + +INCDIR=../../include + +# we need to suppress writable strings warnings on Mac for flex/bison generated C++ code +OS= $(shell uname -s) +ifeq ($(OS),Darwin) + WARN=-Wno-deprecated-writable-strings +endif +ifeq ($(OS),Linux) + WARN=-Wno-write-strings +endif + +all: gdatcat gsprintconsole gsprintconsole_ves gsgdatprint gdat2ascii gsexit gssinksim process_logs ascii2gdat gsmcnib mc_clear mc_store_schema + +install: all + cp gsprintconsole gsprintconsole_ves gsgdatprint gdat2ascii process_logs gsexit ascii2gdat gsmcnib mc_clear mc_store_schema ../../bin/ + +gsgdatprint: gsgdatprint.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gsgdatprint gsgdatprint.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux + +gsgdatprint.o: gsgdatprint.c + + + +gsexit: gsexit.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gsexit gsexit.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux + +gsexit.o: gsexit.c + + +gsgdatprint.c: $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +gdat2ascii: gdat2ascii.o ../../lib/libgscphostaux.a ../../lib/libgscpinterface.a + g++ -g -o gdat2ascii gdat2ascii.o -L../../lib -lgscphostaux -lgscpinterface -lgscpaux + +gdat2ascii.o: gdat2ascii.c + +gdat2ascii.c : $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +gsprintconsole: gsprintconsole.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gsprintconsole gsprintconsole.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux + +gsprintconsole_ves: gsprintconsole_ves.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gsprintconsole_ves gsprintconsole_ves.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux + +gsmcnib: gsmcnib.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gsmcnib gsmcnib.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux -lsdl + +mc_clear: mc_clear.o + g++ -g -o mc_clear mc_clear.o -lsdl + +mc_store_schema: mc_store_schema.o + g++ -g -o mc_store_schema mc_store_schema.o -lsdl + +gsprintconsole.o: gsprintconsole.c + +gsprintconsole.c : $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +gsprintconsole_ves.o: gsprintconsole_ves.c + +gsprintconsole_ves.c : $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +gsmcnib.o : + g++ $(C++OPTS) -c gsmcnib.cc + +mc_clear.o : + g++ $(C++OPTS) -c mc_clear.cc + +mc_store_schema.o : + g++ $(C++OPTS) -c mc_store_schema.cc + +gssinksim: gssinksim.o ../../lib/libgscphostaux.a ../../lib/libgscphost.a ../../lib/libgscpinterface.a ../../lib/libgscpapp.a + g++ -g -o gssinksim gssinksim.o -L../../lib -lgscpapp -lgscphostaux -lgscphost -lgscpinterface -lgscplftaaux -lclearinghouse -lgscpaux + +gssinksim.o: gssinksim.c + +gssource: gssource.o + g++ -g -o gssource gssource.o -L../../lib -lgscpaux + +gssource.o: gssource.c + +gdatcat: gdatcat.o + $(CC) -o gdatcat gdatcat.o + +process_logs: process_logs.o xml.tab.o xmllexer.o xml_t.o + g++ -g -o process_logs process_logs.o xml.tab.o xmllexer.o xml_t.o + +xml.tab.o: xml.tab.cc + g++ $(WARN) -g -o xml.tab.o -c xml.tab.cc + +xmllexer.o: xmllexer.cc + g++ $(WARN) -g -o xmllexer.o -c xmllexer.cc + +xml_t.o: xml_t.cc + g++ -g -o xml_t.o -c xml_t.cc + +process_logs.o: process_logs.cc + g++ -g -o process_logs.o -c process_logs.cc + +ascii2gdat: ascii2gdat.o ../../lib/libgscpinterface.a + g++ -g -o ascii2gdat ascii2gdat.o -L../../lib -lgscphostaux -lgscpinterface -lgscpaux + +ascii2gdat.o: ascii2gdat.c + +ascii2gdat.c : $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +gdatcat.o: gdatcat.c + +gdatcat.c : $(INCDIR/gsconfig.h) $(INCDIR/gstypes.h) + +clean: + rm -ff ../../bin/gsprintconsole ../../bin/gsprintconsole_ves ../../bin/gsgdatprint ../../bin/gdat2ascii ../../bin/process_logs ../../bin/gsexit ../../bin/ascii2gdat gsprintconsole gsprintconsole_ves gsgdatprint gdat2ascii gdat2hex process_logs gsexit gssinksim gdatcat ascii2gdat gsmcnib mc_clear mc_store_schema *.o + diff --git a/mc-core/mc/mcnib/gsmcnib.cc b/mc-core/mc/mcnib/gsmcnib.cc new file mode 100644 index 0000000..e6b1816 --- /dev/null +++ b/mc-core/mc/mcnib/gsmcnib.cc @@ -0,0 +1,544 @@ +/* ------------------------------------------------ + Copyright 2014 AT&T Intellectual Property + 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. + ------------------------------------------- */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "gsconfig.h" +#include "gstypes.h" +#include "gshub.h" + +#include + +#include + +using namespace std; + +// data type definitions from sdl +using Namespace = std::string; +using Key = std::string; +using Data = std::vector; +using DataMap = std::map; +using Keys = std::set; + + + +#define MAXLINE 100000 +static unsigned tcpport=0; +static char linebuf[MAXLINE]; +int listensockfd=0; +int fd=0; + +FILE* outf; + +// Not all systems have timersub defined so make sure its ther +#ifndef timersub + +#define timersub(tvp, uvp, vvp) \ +do { \ +(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ +(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ +if ((vvp)->tv_usec < 0) { \ +(vvp)->tv_sec--; \ +(vvp)->tv_usec += 1000000; \ +} \ +} while (0) + +#endif + +void hand(int iv) { + ftaapp_exit(); + fprintf(stderr, "exiting via signal handler %d...\n", iv); + exit(1); +} + +static void wait_for_client() { + struct sockaddr_in serv_addr,cli_addr; + socklen_t clilen; + if (listensockfd==0) { + gs_int32_t on = 1; + listensockfd=socket(AF_INET, SOCK_STREAM, 0); + if (listensockfd < 0) { + gslog(LOG_EMERG,"Error:Could not create socket for tcp data stream"); + exit(1); + } + bzero((char *) &serv_addr, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_port = htons(tcpport); +#ifndef __linux__ + /* make sure we can reuse the common port rapidly */ + if (setsockopt(listensockfd, SOL_SOCKET, SO_REUSEPORT, + (gs_sp_t )&on, sizeof(on)) != 0) { + gslog(LOG_EMERG,"Error::could not set socket option\n"); + exit(1); + } +#endif + if (setsockopt(listensockfd, SOL_SOCKET, SO_REUSEADDR, + (gs_sp_t )&on, sizeof(on)) != 0) { + gslog(LOG_EMERG,"Error::could not set socket option\n"); + exit(1); + } + + if (bind(listensockfd, (struct sockaddr *) &serv_addr, + sizeof(serv_addr)) < 0) { + gslog(LOG_EMERG,"Error:Could not bind socket for tcp data stream"); + exit(1); + } + } + + do { + listen(listensockfd,5); + clilen = sizeof(cli_addr); + fd=accept(listensockfd, (struct sockaddr *) &cli_addr, &clilen); + if (fd<0) { + gslog(LOG_EMERG,"Error:Could not accept connection on tcp socket"); + } + } while (fd==0); +} + + +static void emit_socket() { + unsigned o,w,l; + o=0; + w=0; + l=strlen(linebuf); + do { + if((w=write(fd,&linebuf[o],l))==0) { + close(fd); + wait_for_client(); + } + o=o+w; + } while (o= max_words){ + fprintf(stderr,"Error in split_string, too many words discovered (max is %d)\n",max_words); + nwords = max_words-1; + } + words[nwords++] = str; + } + + return(nwords); +} + +std::vector split_string(const string &str, char sep){ + char *instr = strdup(str.c_str()); + char *words[1000]; + int nwords = split_string(instr, sep, words, 1000); + vector ret; + for(int i=0;i packData(const char *d, int len){ + const uint8_t *d8 = (const uint8_t *)d; + return Data(d8, d8+len+1); +} + + + +int main(int argc, char* argv[]) { + gs_sp_t me = argv[0]; + FTAID fta_id; + gs_int32_t schema, ch; + + FTAID rfta_id; + gs_uint32_t rsize; + gs_uint32_t bufsz=8*1024*1024; + gs_int8_t rbuf[2*MAXTUPLESZ]; + + gs_int32_t numberoffields; + gs_int32_t verbose=0; + gs_int32_t y, lcv; + + void *pblk; + gs_int32_t pblklen; + gs_int32_t n_actual_param; + gs_int32_t n_expected_param; + gs_int32_t xit = 0; + gs_int32_t dump = 0; + struct timeval tvs, tve, tvd; + gs_retval_t code; + endpoint gshub; + endpoint dummyep; + gs_uint32_t tip1,tip2,tip3,tip4; + gs_sp_t instance_name; + + string keys_s; + vector keys_v; + vector keys_i; + + gs_uint32_t tlimit = 0; // time limit in seconds + time_t start_time, curr_time; + + gsopenlog(argv[0]); + + // by default the output will go to stdout + outf = stdout; + + while ((ch = getopt(argc, argv, "l:p:r:veXDK:")) != -1) { + switch (ch) { + case 'r': + bufsz=atoi(optarg); + break; + case 'p': + tcpport=atoi(optarg); + break; + case 'v': + verbose++; + break; + case 'e': + outf = stderr; + break; + case 'X': + xit++; + break; + case 'D': + dump++; + break; + case 'l': + tlimit = atoi(optarg); + break; + case 'K': + keys_s = optarg; + keys_v = split_string(keys_s, ','); + break; + default: + usage: + fprintf(stderr, "usage: %s [-r ] [-e] [-p ] [-l ] [-v] [-X] [-D] [-K comma_separated_key_fields] : query param1 param2...\n", *argv); + exit(1); + } + } + argc -= optind; + argv += optind; + if (argc<3) goto usage; + + if (sscanf(argv[0],"%u.%u.%u.%u:%hu",&tip1,&tip2,&tip3,&tip4,&(gshub.port))!= 5 ) { + gslog(LOG_EMERG,"HUB IP NOT DEFINED"); + exit(1); + } + gshub.ip=htonl(tip1<<24|tip2<<16|tip3<<8|tip4); + gshub.port=htons(gshub.port); + instance_name=strdup(argv[1]); + if (set_hub(gshub)!=0) { + gslog(LOG_EMERG,"Could not set hub"); + exit(1); + } + if (set_instance_name(instance_name)!=0) { + gslog(LOG_EMERG,"Could not set instance name"); + exit(1); + } + + if (get_initinstance(gshub,instance_name,&dummyep,1)!=0) { + gslog(LOG_EMERG,"Did not receive signal that GS is initiated\n"); + } + + gettimeofday(&tvs, 0); + argc -=2; + argv +=2; + if (argc < 1) + goto usage; + + /* initialize host library and the sgroup */ + + if (verbose>=2) fprintf(stderr,"Inializin gscp\n"); + + if (ftaapp_init(bufsz)!=0) { + fprintf(stderr,"%s::error:could not initialize gscp\n", me); + exit(1); + } + + signal(SIGTERM, hand); + signal(SIGINT, hand); + + Namespace ns("mcnib"); + string key_base = argv[0]; + + schema = ftaapp_get_fta_schema_by_name(argv[0]); + if (schema < 0) { + fprintf(stderr,"%s::error:could not get fta '%s' schema\n", + me ,argv[0]); + exit(1); + } + n_expected_param = ftaschema_parameter_len(schema); + if (n_expected_param == 0) { + pblk = 0; + pblklen = 0; + } else { + /* parse the params */ + n_actual_param = argc-1; + if(n_actual_param < n_expected_param){ + fprintf(stderr,"Error, %d query parameters expected, %d provided.\n",n_expected_param, n_actual_param); + exit(1); + } + for (lcv = 1 ; lcv < argc ; lcv++) { + char *k, *e; + int rv; + k = argv[lcv]; + e = k; + while (*e && *e != '=') e++; + if (*e == 0) { + fprintf(stderr,"param parse error '%s' (fmt 'key=val')\n", + argv[lcv]); + exit(1); + } + *e = 0; + rv = ftaschema_setparam_by_name(schema, k, e+1, strlen(e+1)); + *e = '='; + if (rv < 0) { + fprintf(stderr,"param setparam error '%s' (fmt 'key=val')\n", + argv[lcv]); + exit(1); + } + } + if (ftaschema_create_param_block(schema, &pblk, &pblklen) < 0) { + fprintf(stderr, "ftaschema_create_param_block failed!\n"); + exit(1); + } + } + ftaschema_free(schema); /* XXXCDC */ + + + if (verbose>=2) fprintf(stderr,"Initalize FTA\n"); + + fta_id=ftaapp_add_fta(argv[0],0,0,0,pblklen,pblk); + if (fta_id.streamid==0) { + fprintf(stderr,"%s::error:could not initialize fta %s\n", + me, argv[0]); + exit(1); + } + /* XXXCDC: pblk is malloc'd, should we free it? */ + + if (verbose>=2) fprintf(stderr,"Get schema handle\n"); + + if ((schema=ftaapp_get_fta_schema(fta_id))<0) { + fprintf(stderr,"%s::error:could not get schema\n", me); + exit(1); + } + + if ((numberoffields=ftaschema_tuple_len(schema))<0) { + fprintf(stderr,"%s::error:could not get number of fields in schema\n", + me); + exit(1); + } + + if (verbose>=1) { + for(y=0; y=numberoffields){ + fprintf(stderr,"ERROR key field %s is not in the schema.\n",keys_v[ki].c_str()); + exit(1); + } + } + +// Get SDL handle + std::unique_ptr sdl(shareddatalayer::SyncStorage::create()); + + start_time = time(NULL); + + while((code=ftaapp_get_tuple(&rfta_id,&rsize,rbuf,2*MAXTUPLESZ,0))>=0) { + if (dump) + continue; + if (ftaschema_is_eof_tuple(schema, rbuf)) { + /* initiate shutdown or something of that nature */ + printf("#All data proccessed\n"); + exit(0); + } + if (!rsize) + continue; + if (verbose >=2) { + snprintf(linebuf,MAXLINE,"RESULT CODE => %u\n",code); + emit_line(); + } + + if ((code==0)&&(rfta_id.streamid == fta_id.streamid)) { + string key = key_base; + for(int fi=0;fi>24&0xff, + ar.r.ui>>16&0xff, + ar.r.ui>>8&0xff, + ar.r.ui&0xff); + key += ":"+string(linebuf); + break; + case IPV6_TYPE: + { + unsigned x; + unsigned zc=0; + for(x=0;x<4;x++) { if (ar.r.ip6.v[x]==0) zc++;} + if (zc!=4) { + for(x=0;x<8;x++) { + unsigned char * a = (unsigned char *) &(ar.r.ip6.v[0]); + unsigned y; + y=((unsigned)a[2*x])<<8|((unsigned) a[2*x+1]); + snprintf(&linebuf[strlen(linebuf)],MAXLINE,"%04x",y); + if (x<7) snprintf(&linebuf[strlen(linebuf)],MAXLINE,":"); + } + } else { + snprintf(linebuf,MAXLINE,"::"); + } + key += ":"+string(linebuf); + } + break; + case USHORT_TYPE: + key += ":"+to_string(ar.r.ui); + break; + case BOOL_TYPE: + if (ar.r.ui==0) { + key += ":FALSE"; + } else { + key += ":TRUE"; + } + break; + case ULLONG_TYPE: + key += ":"+to_string(ar.r.ul); + break; + case LLONG_TYPE: + key += ":"+to_string(ar.r.l); + break; + case FLOAT_TYPE: + key += ":"+to_string(ar.r.f); + break; + case TIMEVAL_TYPE: + { + gs_float_t t; + t= ar.r.t.tv_usec; + t=t/1000000; + t=t+ar.r.t.tv_sec; + snprintf(linebuf,MAXLINE,"%f sec",t); + key += ":"+string(linebuf); + } + break; + case VSTR_TYPE: + { + int x; + int c; + int d=0; + char * src; + src=(char*)ar.r.vs.offset; + if(d=' ')) { + if (dset(ns, D); + + } else { + if (rfta_id.streamid != fta_id.streamid) + fprintf(stderr,"Got unkown streamid %llu \n",rfta_id.streamid); + } + + // whenever we receive a temp tuple check if we reached time limit + if ((code==2) && tlimit && (time(NULL)-start_time)>=tlimit) { + fprintf(stderr,"Reached time limit of %d seconds\n",tlimit); + ftaapp_exit(); + exit(0); + } + } +} + diff --git a/mc-core/mc/mcnib/mc_clear.cc b/mc-core/mc/mcnib/mc_clear.cc new file mode 100644 index 0000000..d20a05e --- /dev/null +++ b/mc-core/mc/mcnib/mc_clear.cc @@ -0,0 +1,35 @@ +#include +#include +#include + +#include + + +// data type definitions from sdl +using Namespace = std::string; +using Key = std::string; +using Data = std::vector; +using DataMap = std::map; +using Keys = std::set; + +int main(int argc, char **argv){ + + Namespace ns("mcnib"); + std::string prefix = ""; + if(argc>1){ + prefix = argv[1]; + } + + std::unique_ptr sdl(shareddatalayer::SyncStorage::create()); + + Keys K = sdl->findKeys(ns, prefix); // just the prefix + + DataMap Dk = sdl->get(ns, K); + printf("Deleting:\n"); + for(auto si=K.begin();si!=K.end();++si){ + printf("\t%s\n",(*si).c_str()); + } + + sdl->remove(ns, K); + +} diff --git a/mc-core/mc/mcnib/mc_store_schema.cc b/mc-core/mc/mcnib/mc_store_schema.cc new file mode 100644 index 0000000..4815df1 --- /dev/null +++ b/mc-core/mc/mcnib/mc_store_schema.cc @@ -0,0 +1,58 @@ +#include +#include +#include + +#include +#include +#include + +#include + +// data type definitions from sdl +using Namespace = std::string; +using Key = std::string; +using Data = std::vector; +using DataMap = std::map; +using Keys = std::set; + + +using namespace std; + +vector packData(const char *d, int len){ + const uint8_t *d8 = (const uint8_t *)d; + return Data(d8, d8+len+1); +} + +int main(int argc, char **argv){ + Namespace ns("mcnib"); + + string directory = "."; + if(argc>1){ + directory = argv[1]; + } + string inflnm = directory + "/" + string("nib.json"); + + ifstream infl(inflnm); + if(!infl){ + cerr << "Error, can't open " << inflnm << endl; + exit(1); + } + string line; + string nib_str; + while(getline(infl, line)){ + nib_str += line; + } + infl.close(); + + +// --------------------------------------------- + std::unique_ptr sdl(shareddatalayer::SyncStorage::create()); + DataMap D; + +// -------------------------------------------- + + vector schema_buf = packData(nib_str.c_str(), nib_str.size()); + D["_schema"] = schema_buf; + + sdl->set(ns, D); +} diff --git a/mc-core/mc/queries/addn_req_time.gsql b/mc-core/mc/queries/addn_req_time.gsql index 764642d..9098949 100644 --- a/mc-core/mc/queries/addn_req_time.gsql +++ b/mc-core/mc/queries/addn_req_time.gsql @@ -7,7 +7,7 @@ select timestamp_ms as timestamp, gnb_id, 0 as event_type from SGNB_ADDITION_REQ.sgnb_addreq_for_ue -where schemaId=401 +//where schemaId=401 ; DEFINE{query_name 'add_req_success';} @@ -19,7 +19,7 @@ select timestamp_ms as timestamp, gnb_id, 1 as event_type from RECONCOMPLETE.reconfig_success -where schemaId=101 +//where schemaId=101 ; DEFINE{query_name 'addreq_events';} @@ -42,6 +42,7 @@ having max(end_time)>0 and max(start_time)>0 and max(end_time)>max(start_time) DEFINE{query_name 'addreq_success_stats'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the time to successfully make a DC connection'; } PARAM{ window uint; } select gnb_id as GNB_ID, diff --git a/mc-core/mc/queries/addreq_pdf.gsql b/mc-core/mc/queries/addreq_pdf.gsql index a06d137..400d313 100644 --- a/mc-core/mc/queries/addreq_pdf.gsql +++ b/mc-core/mc/queries/addreq_pdf.gsql @@ -1,5 +1,6 @@ DEFINE{ query_name 'addreq_pdf_nr_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'histogram of neighboring cell RSRP, aggregated by cell id'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -14,12 +15,13 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from SGNB_ADDITION_REQ.sgnb_addreq_for_ue_mn_neigh_ssb -where schemaId = 410 +//where schemaId = 410 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'addreq_pdf_nr_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'histogram of neighboring cell RSRP, aggregated by GNB, as computed from addition request events.'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -34,6 +36,6 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from SGNB_ADDITION_REQ.sgnb_addreq_for_ue_mn_neigh_ssb -where schemaId = 410 +//where schemaId = 410 group by timestamp_ms/$window as tb, gnb_id diff --git a/mc-core/mc/queries/addreq_stats.gsql b/mc-core/mc/queries/addreq_stats.gsql index 84bfd8e..8e0cf03 100644 --- a/mc-core/mc/queries/addreq_stats.gsql +++ b/mc-core/mc/queries/addreq_stats.gsql @@ -1,5 +1,6 @@ DEFINE{ query_name 'addreq_stats_nr_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics about neighboring cell RSRP aggregated by cell id'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -18,12 +19,13 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from SGNB_ADDITION_REQ.sgnb_addreq_for_ue_mn_neigh_ssb -where schemaId = 410 +//where schemaId = 410 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'addreq_stats_nr_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics about neighboring cell RSRP aggregated by GNB, as computed from addition request events.'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -42,5 +44,5 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from SGNB_ADDITION_REQ.sgnb_addreq_for_ue_mn_neigh_ssb -where schemaId = 410 +//where schemaId = 410 group by timestamp_ms/$window as tb, gnb_id diff --git a/mc-core/mc/queries/admitted_erabs.gsql b/mc-core/mc/queries/admitted_erabs.gsql index 1e15232..21b971e 100644 --- a/mc-core/mc/queries/admitted_erabs.gsql +++ b/mc-core/mc/queries/admitted_erabs.gsql @@ -10,13 +10,14 @@ PARAM{ window uint; } select e.timestamp_ms/10000 as TB10, e.id_SgNB_UE_X2AP_ID, e.e_RAB_ID, e.qCI INNER_JOIN from SGNB_ADDITION_REQ_ACK.eRABs_acked_for_admit_for_ue e, RECONCOMPLETE.reconfig_success r -where r.schemaId = 101 and e.schemaId = 502 -and r.id_SgNB_UE_X2AP_ID = e.id_SgNB_UE_X2AP_ID +where // r.schemaId = 101 and e.schemaId = 502 and + r.id_SgNB_UE_X2AP_ID = e.id_SgNB_UE_X2AP_ID and r.timestamp_ms/10000 = e.timestamp_ms/10000 ; DEFINE{query_name 'erab_stats'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'number of admitted bearers and the distribution of their qCI'; } PARAM{ window uint; } Select (TB*$window)/1000 as TS, diff --git a/mc-core/mc/queries/dc_conn_stats.gsql b/mc-core/mc/queries/dc_conn_stats.gsql index 1551869..eec71a2 100644 --- a/mc-core/mc/queries/dc_conn_stats.gsql +++ b/mc-core/mc/queries/dc_conn_stats.gsql @@ -7,7 +7,7 @@ select timestamp_ms as timestamp, UINT(id_SgNB_UE_X2AP_ID) as gUE_ID, 1 as event_type from RECONCOMPLETE.reconfig_success -where schemaId=101 +// where schemaId=101 ; DEFINE{query_name 'dc_terminate'; @@ -19,7 +19,7 @@ select timestamp_ms as timestamp, id_SgNB_UE_X2AP_ID as gUE_ID, 0 as event_type from CONRELEASE.dc_release -where schemaId=201 +// where schemaId=201 ; DEFINE{query_name 'dc_events';} @@ -43,6 +43,7 @@ CLOSING_WHEN LAST(event_type) = 0 DEFINE{ query_name 'mc_connected_cnt'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'Number of dual connected users'; } PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, @@ -67,6 +68,7 @@ CLOSING_WHEN LAST(event_type) = 0 DEFINE{ query_name 'mc_connection_stats'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics about the length of dual connected sessions'; } PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, @@ -86,6 +88,7 @@ GROUP BY (TB_1000 * 1000) / $window as TB DEFINE{ query_name 'mc_connects_cnt'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'number of DC connection requests'; } PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, @@ -98,6 +101,7 @@ GROUP BY timestamp / $window as TB DEFINE{ query_name 'mc_disconnects_cnt'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'number of DC connection releases'; } PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, @@ -119,6 +123,7 @@ GROUP BY timestamp / $window as TB, gUE_ID as UE_ID DEFINE{ query_name 'mc_unique_ue_cnt'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'Number of distinct UEs making a DC request or release'; } PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, diff --git a/mc-core/mc/queries/debug.gsql b/mc-core/mc/queries/debug.gsql index 69661b6..cd2ac92 100644 --- a/mc-core/mc/queries/debug.gsql +++ b/mc-core/mc/queries/debug.gsql @@ -6,7 +6,7 @@ select 'reconfig_all_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval from RECONCOMPLETE.reconfig_all -where schemaId=103 +// where schemaId=103 group by timestamp_ms / $window as TB ; @@ -18,7 +18,7 @@ select 'reconfig_success_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval from RECONCOMPLETE.reconfig_success -where schemaId=101 +// where schemaId=101 group by timestamp_ms / $window as TB ; @@ -30,7 +30,7 @@ select 'reconfig_reject_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval from RECONCOMPLETE.reconfig_reject -where schemaId=102 +// where schemaId=102 group by timestamp_ms / $window as TB ; @@ -42,7 +42,7 @@ select 'dc_release_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval from CONRELEASE.dc_release -where schemaId=201 +// where schemaId=201 group by timestamp_ms / $window as TB diff --git a/mc-core/mc/queries/generate_runall.py b/mc-core/mc/queries/generate_runall.py new file mode 100644 index 0000000..51e13d2 --- /dev/null +++ b/mc-core/mc/queries/generate_runall.py @@ -0,0 +1,153 @@ +# ------------------------------------------------ +#Copyright 2020 AT&T Intellectual Property +# 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. +# ------------------------------------------- + +import xml.etree.ElementTree as ET +import json +from optparse import OptionParser +import sys +import os + + + +optparser = OptionParser(usage="usage: %prog [options] path_file [path_file*]") +optparser.add_option("-Q", "--querydir", dest="querydir", + default=".",help="directory with qtree.xml and output_spec.cfg" ) +(options, args) = optparser.parse_args() + +odoc = "" + +nibflnm = options.querydir+"/nib.json" +nibfl = open(nibflnm, "r") +nib = json.load(nibfl) +nibfl.close() + +osflnm = options.querydir+"/output_spec.cfg" +osfl = open(osflnm, "r") +oqy = {} +for line in osfl: + flds = line.split(",") + oqy[flds[0]]=1 + +runall = """ +#!/bin/bash + +# ------------------------------------------------------------------------------- +# Copyright (c) 2018-2019 AT&T Intellectual Property. +# +# 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. +# ------------------------------------------------------------------------------- + +set -m + +FIFO_DIR="/tmp/mcl/fifos" + +SIMULATOR_MODE=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH simulator_mode` + +DEBUG_MODE=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH debug_mode` + +WINDOW=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH measurement_interval` + +export DBAAS_SERVICE_HOST=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH __DBAAS_SERVICE_HOST__` +export DBAAS_SERVICE_PORT=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH __DBAAS_SERVICE_PORT__` + +if [ "$SIMULATOR_MODE" = "true" ] +then + mkdir -p $FIFO_DIR + python /mc/data_gen/dc_gen.py & + python /mc/data_gen/rrcx_gen.py & +fi + +if [ "$WINDOW" = "" ] +then + WINDOW="10000" +fi + +VES_COLLECTOR=`python /mc/extract_params.py $XAPP_DESCRIPTOR_PATH ves_collector_address` + +VES_NAME=`echo $VES_COLLECTOR | awk 'BEGIN{FS=":"} {print $1}'` +VES_PORT=`echo $VES_COLLECTOR | awk 'BEGIN{FS=":"} {print $2}'` +VES_IP=`getent ahosts $VES_NAME | awk '{ print $1; exit }'` + +echo "Clearing MC NIB namespace" +/mc/gs-lite/bin/mc_clear + +echo "Storing MC NIB schemas" >&2 +/mc/gs-lite/bin/mc_store_schema >&2 + +./runit +sleep 1 + +""" + +debug_q = "" +for q in oqy: + if "debug" in q: + debug_q += "\t/mc/gs-lite/bin/gsprintconsole -e `cat gshub.log` default "+q+" window=$WINDOW &\n" + +if len(debug_q)>0: + runall += """ +if [ "$DEBUG_MODE" = "true" ] +then + # invoke gsprintconsole for all the queries with debug in their name +""" + runall += debug_q + runall += """ +fi +""" + +runall += """ + +# invoke gsprintconsole_ves gsmcnib for all non-debug queries +""" + +for q in oqy: + if "debug" not in q: + runall += " /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default "+q+" window=$WINDOW &\n" + keys = nib[q]["keys"] + if len(keys)>0: + keys_str = ",".join(keys) + runall += " /mc/gs-lite/bin/gsmcnib -K "+keys_str+" `cat gshub.log` default "+q+" window=$WINDOW &\n" + else: + runall += " /mc/gs-lite/bin/gsmcnib `cat gshub.log` default "+q+" window=$WINDOW &\n" + +runall += """ + +sleep 1 +bash /mc/gs-lite/bin/start_processing +fg %1 +""" + +rflnm = options.querydir+"/runall" +rfl = open(rflnm, "w") +rfl.write(runall) +rfl.close() + +cmd = "chmod +x "+rflnm +sys.stderr.write("Executing "+cmd+"\n") +ret = os.system(cmd) +if ret != 0: + sys.stderr.write("Error executing "+cmd+"\n") + exit(1) +exit(0) diff --git a/mc-core/mc/queries/mod_req_failure.gsql b/mc-core/mc/queries/mod_req_failure.gsql index 96a274e..887f1cb 100644 --- a/mc-core/mc/queries/mod_req_failure.gsql +++ b/mc-core/mc/queries/mod_req_failure.gsql @@ -1,5 +1,6 @@ DEFINE{ query_name 'mod_req_failure_distribution'; max_lfta_disorder '1'; max_hfta_disorder '1'; + commetn 'distribution of causes of a modification requet failure'; } PARAM{ window uint;} @@ -14,6 +15,6 @@ select ($window*(tb+1))/1000 as TS, sum(EQ(UINT(failureType),5)) as count_scg_reconfigFailure, sum(EQ(UINT(failureType),6)) as count_srb3_IntegrityFailure From SGNBMODREQ.sgnb_mod_req -where schemaId=1201 +// where schemaId=1201 group by timestamp_ms/$window as tb diff --git a/mc-core/mc/queries/nib.json b/mc-core/mc/queries/nib.json new file mode 100644 index 0000000..e867313 --- /dev/null +++ b/mc-core/mc/queries/nib.json @@ -0,0 +1,2098 @@ +{ + "rrcx_stats_neigh_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "reconfig_status_reject_cause": { + "keys": [ + "gnb_id" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "gnb_id", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TB", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "total_reconfig_reject", + "pos": "2" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_radio_network", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_transport", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_protocol", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_misc", + "pos": "6" + } + ] + }, + "rrcx_stats_neighbor_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "mc_disconnects_cnt": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "count_ue_disconnects", + "pos": "2" + } + ] + }, + "rrcx_stats_neighbor_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "mc_connects_cnt": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "count_ue_connects", + "pos": "2" + } + ] + }, + "erab_stats": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "total_erabs", + "pos": "2" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_1", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_2", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_3", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_4", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_5", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_6", + "pos": "8" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_7", + "pos": "9" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_8", + "pos": "10" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_9", + "pos": "11" + }, + { + "is_ts": false, + "type": "UINT", + "name": "qCI_other", + "pos": "12" + } + ] + }, + "reconfig_status_success_rate": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "total_reconfiguration_requests", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "successful_reconfiguration_requests", + "pos": "4" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "success_rate", + "pos": "5" + } + ] + }, + "rrcx_pdf_neigh_cell_csi": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "rrcx_pdf_neigh_gnb_ssb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "throughput_rollup": { + "keys": [ + "GNB_ID", + "e_RAB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "e_RAB_ID", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "count_ues", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "average_throughput_percentile_05", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "average_throughput_percentile_50", + "pos": "6" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "average_average_throughput", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "average_throughput_percentile_95", + "pos": "8" + }, + { + "is_ts": false, + "type": "UINT", + "name": "active_throughput_percentile_05", + "pos": "9" + }, + { + "is_ts": false, + "type": "UINT", + "name": "active_throughput_percentile_50", + "pos": "10" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "average_active_throughput", + "pos": "11" + }, + { + "is_ts": false, + "type": "UINT", + "name": "active_throughput_percentile_95", + "pos": "12" + } + ] + }, + "rrcx_pdf_neigh_cell_ssb": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "rrcx_pdf_neighbor_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "addreq_success_stats": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "min_success_time", + "pos": "3" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "max_success_time", + "pos": "4" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "avg_success_time", + "pos": "5" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_05_success_time", + "pos": "6" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_95_success_time", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_success_time", + "pos": "8" + } + ] + }, + "mc_connection_stats": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "min_connected_time", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "max_connected_time", + "pos": "3" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "avg_connected_time", + "pos": "4" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_05_connected_time", + "pos": "5" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_95_connected_time", + "pos": "6" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_connected_time", + "pos": "7" + } + ] + }, + "addreq_stats_nr_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "addreq_pdf_nr_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "rrcx_stats_neigh_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "reconfig_reject_debug": { + "keys": [], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "name", + "pos": "0" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "1" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + } + ] + }, + "release_req_success_stats": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "min_success_time", + "pos": "3" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "max_success_time", + "pos": "4" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "avg_success_time", + "pos": "5" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_05_success_time", + "pos": "6" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "pctl_95_success_time", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_success_time", + "pos": "8" + } + ] + }, + "rrcx_pdf_serv_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "mod_req_failure_distribution": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "2" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_protobuf_unspecified", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_t310_Expiry", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_randomAccessProblem", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_rlc_MaxNumRetx", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_synchReconfigFailure_SCG", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_scg_reconfigFailure", + "pos": "8" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_srb3_IntegrityFailure", + "pos": "9" + } + ] + }, + "rrcx_stats_serv_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "release_cause": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "total_reconfig_refuse", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_radio_network", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_transport", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_protocol", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_misc", + "pos": "7" + } + ] + }, + "reconfig_success_debug": { + "keys": [], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "name", + "pos": "0" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "1" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + } + ] + }, + "reconfig_all_debug": { + "keys": [], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "name", + "pos": "0" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "1" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + } + ] + }, + "mc_unique_ue_cnt": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "count_unique_ue", + "pos": "2" + } + ] + }, + "rrcx_pdf_neigh_gnb_csi": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "dc_release_debug": { + "keys": [], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "name", + "pos": "0" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "1" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + } + ] + }, + "throughput_gnb": { + "keys": [ + "GNB_ID", + "e_RAB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "e_RAB_ID", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "3" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "active_throughput", + "pos": "4" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "average_throughput", + "pos": "5" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "min_throughput", + "pos": "6" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "max_throughput", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "extr_quant_hfta0_fcn_quant_udaf_hfta0", + "pos": "8" + }, + { + "is_ts": false, + "type": "UINT", + "name": "extr_quant_hfta0_fcn_quant_udaf_hfta01", + "pos": "9" + } + ] + }, + "addreq_stats_nr_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "rrcx_pdf_serv_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "rrcx_pdf_neighbor_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + }, + "rrcx_stats_serv_gnb": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "INT", + "name": "min_rsrp", + "pos": "4" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_05_rsrp", + "pos": "5" + }, + { + "is_ts": false, + "type": "INT", + "name": "median_rsrp", + "pos": "6" + }, + { + "is_ts": false, + "type": "INT", + "name": "pctl_95_rsrp", + "pos": "7" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "stddev_rsrp", + "pos": "8" + }, + { + "is_ts": false, + "type": "INT", + "name": "max_rsrp", + "pos": "9" + } + ] + }, + "throughput_ue": { + "keys": [ + "UE_ID", + "GNB_ID", + "e_RAB_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "e_RAB_ID", + "pos": "1" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "UE_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "3" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "4" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "active_throughput", + "pos": "5" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "average_throughput", + "pos": "6" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "min_throughput", + "pos": "7" + }, + { + "is_ts": false, + "type": "LLONG", + "name": "max_throughput", + "pos": "8" + } + ] + }, + "mc_connected_cnt": { + "keys": [], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "INT", + "name": "count_connected_ue", + "pos": "2" + } + ] + }, + "mod_status_refuse_cause": { + "keys": [ + "GNB_ID" + ], + "fields": [ + { + "is_ts": false, + "type": "V_STR", + "name": "GNB_ID", + "pos": "0" + }, + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "1" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "total_reconfig_refuse", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_radio_network", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_transport", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_protocol", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "count_misc", + "pos": "7" + } + ] + }, + "addreq_pdf_nr_cell": { + "keys": [ + "CELL_ID" + ], + "fields": [ + { + "is_ts": true, + "type": "ULLONG", + "name": "TS", + "pos": "0" + }, + { + "is_ts": false, + "type": "FLOAT", + "name": "measurementInterval", + "pos": "1" + }, + { + "is_ts": false, + "type": "UINT", + "name": "CELL_ID", + "pos": "2" + }, + { + "is_ts": false, + "type": "INT", + "name": "cnt", + "pos": "3" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vbad", + "pos": "4" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_bad", + "pos": "5" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_medium", + "pos": "6" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_good", + "pos": "7" + }, + { + "is_ts": false, + "type": "UINT", + "name": "rsrp_vgood", + "pos": "8" + } + ] + } +} \ No newline at end of file diff --git a/mc-core/mc/queries/reconfig_status.gsql b/mc-core/mc/queries/reconfig_status.gsql index d7ff5c1..c3d9b7a 100644 --- a/mc-core/mc/queries/reconfig_status.gsql +++ b/mc-core/mc/queries/reconfig_status.gsql @@ -7,10 +7,11 @@ select timestamp_ms as timestamp, gnb_id, 0 as event_type from SGNB_ADDITION_REQ.sgnb_addreq_for_ue -where schemaId=401 +// where schemaId=401 ; -DEFINE{query_name 'reconfig_status_success';} +DEFINE{query_name 'reconfig_status_success'; +} PARAM{ window uint; } select timestamp_ms as timestamp, 0ULL as start_time, @@ -19,7 +20,7 @@ select timestamp_ms as timestamp, gnb_id, 1 as event_type from RECONCOMPLETE.reconfig_success -where schemaId=101 +// where schemaId=101 ; DEFINE{query_name 'reconfig_status_events';} @@ -42,6 +43,7 @@ group by eUE_ID, gnb_id, timestamp / $window as TB DEFINE{query_name 'reconfig_status_success_rate'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'fraction of DC connect requests which are successful'; } PARAM{ window uint; } select gnb_id as GNB_ID, @@ -58,6 +60,7 @@ group by gnb_id, TB // Merge in reconfig_reject causes and aggregate with this. DEFINE{query_name 'reconfig_status_reject_cause'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of causes for DC rejection'; } PARAM{ window uint; } Select gnb_id, TB, @@ -67,7 +70,7 @@ Select gnb_id, TB, sum(GEQ(UINT(cause_protocol),0)) as count_protocol, sum(GEQ(UINT(cause_misc),0)) as count_misc from ADDREQREJECT.sgnb_add_req_reject -where schemaId=701 +// where schemaId=701 group by gnb_id, timestamp_ms / $window as TB ; @@ -82,7 +85,7 @@ Select gnb_id, TB, sum(GEQ(UINT(cause_protocol),0)) as count_protocol, sum(GEQ(UINT(cause_misc),0)) as count_misc from RECONCOMPLETE.reconfig_reject -where schemaId=102 +// where schemaId=102 group by gnb_id, timestamp_ms / $window as TB ; @@ -111,6 +114,7 @@ group by gnb_id, TB DEFINE{query_name 'mod_status_refuse_cause'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of causes for a sgnb modification refusal'; } PARAM{ window uint; } Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, @@ -121,7 +125,7 @@ Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, sum(GEQ(UINT(cause_protocol),0)) as count_protocol, sum(GEQ(UINT(cause_misc),0)) as count_misc from SGNBMODREFUSE.sgnb_mod_refuse -where schemaId=1401 +// where schemaId=1401 group by gnb_id, timestamp_ms / $window as TB ; @@ -137,7 +141,7 @@ Select gnb_id, TB, sum(GEQ(UINT(cause_protocol),0)) as count_protocol, sum(GEQ(UINT(cause_misc),0)) as count_misc from SGNBRELEASERQD.SgNB_release_rqd -where schemaId=1001 +// where schemaId=1001 group by gnb_id, timestamp_ms / $window as TB ; @@ -152,7 +156,7 @@ Select gnb_id, TB, sum(GEQ(UINT(cause_protocol),0)) as count_protocol, sum(GEQ(UINT(cause_misc),0)) as count_misc from RELREQ.release_req -where schemaId=801 +// where schemaId=801 group by gnb_id, timestamp_ms / $window as TB ; @@ -164,6 +168,7 @@ from release_rqd_cause p1, release_request_cause p2 DEFINE{query_name 'release_cause'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the causes of a DC release'; } PARAM{ window uint; } Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, diff --git a/mc-core/mc/queries/release_req_time.gsql b/mc-core/mc/queries/release_req_time.gsql index 9b4c64d..e1d0dee 100644 --- a/mc-core/mc/queries/release_req_time.gsql +++ b/mc-core/mc/queries/release_req_time.gsql @@ -10,11 +10,12 @@ select timestamp_ms as timestamp, gnb_id, 0 as event_type from RELREQ.release_req -where schemaId=801 +// where schemaId=801 ; DEFINE{query_name 'release_req_success'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the time to delease a DC connection'; } PARAM{ window uint; } select timestamp_ms as timestamp, @@ -25,7 +26,7 @@ select timestamp_ms as timestamp, gnb_id, 1 as event_type from CONRELEASE.dc_release -where schemaId=201 +// where schemaId=201 ; DEFINE{query_name 'release_req_events'; @@ -50,6 +51,7 @@ having max(end_time)>0 and max(start_time)>0 and max(end_time)>max(start_time) DEFINE{query_name 'release_req_success_stats'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the time to delease a DC connection'; } PARAM{ window uint; } select gnb_id as GNB_ID, diff --git a/mc-core/mc/queries/rrcx_pdf_cell.gsql b/mc-core/mc/queries/rrcx_pdf_cell.gsql index 4ecb20b..64eaa24 100644 --- a/mc-core/mc/queries/rrcx_pdf_cell.gsql +++ b/mc-core/mc/queries/rrcx_pdf_cell.gsql @@ -1,6 +1,7 @@ DEFINE{ query_name 'rrcx_pdf_neigh_cell_csi'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the beam csi rsrp of neighboring cells, aggregated by cell id, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -15,12 +16,13 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.neighbor_beam_csi -where schemaId = 5 +// where schemaId = 5 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_pdf_neigh_gnb_csi'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the beam csi rsrp of neighboring cells, aggregated by gNB, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -35,13 +37,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.neighbor_beam_csi -where schemaId = 5 +// where schemaId = 5 group by timestamp_ms/$window as tb, gnb_id ; DEFINE{ query_name 'rrcx_pdf_neigh_cell_ssb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the beam ssb rsrp of neighboring cells, aggregated by cell id, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -56,12 +59,13 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.neighbor_beam_ssb -where schemaId = 5 +// where schemaId = 6 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_pdf_neigh_gnb_ssb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the beam ssb rsrp of neighboring cells, aggregated by gNB, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -76,7 +80,7 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,68)*LEQ(rsrp,82)) as rsrp_good, sum(GEQ(rsrp,83)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.neighbor_beam_ssb -where schemaId = 5 +// where schemaId = 6 group by timestamp_ms/$window as tb, gnb_id ; @@ -84,6 +88,7 @@ group by timestamp_ms/$window as tb, gnb_id DEFINE{ query_name 'rrcx_pdf_serv_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the ssb rsrp of serving cell aggregated by cell id, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -98,7 +103,7 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.serv_nr_cell -where schemaId = 1 +// where schemaId = 1 group by timestamp_ms/$window as tb, physCellId ; @@ -118,13 +123,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.nr_neighbor -where schemaId = 4 +// where schemaId = 4 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_pdf_serv_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the ssb rsrp of neighbor cells aggregated by cell id, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -139,12 +145,13 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.serv_nr_cell -where schemaId = 1 +// where schemaId = 1 group by timestamp_ms/$window as tb, gnb_id ; DEFINE{ query_name 'rrcx_pdf_neighbor_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'distribution of the ssb rsrp of neighbor cells aggregated by gNB, computed from rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -159,7 +166,7 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood from RRCXFER.nr_neighbor -where schemaId = 4 +// where schemaId = 4 group by timestamp_ms/$window as tb, gnb_id diff --git a/mc-core/mc/queries/rrcx_stats.gsql b/mc-core/mc/queries/rrcx_stats.gsql index edb7215..f8b1958 100644 --- a/mc-core/mc/queries/rrcx_stats.gsql +++ b/mc-core/mc/queries/rrcx_stats.gsql @@ -1,5 +1,6 @@ DEFINE{ query_name 'rrcx_stats_neigh_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on ssb RSRP on the beams of nrighboring cells, aggregated by cell ID, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -18,12 +19,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.neighbor_beam_ssb -where schemaId = 6 and rsrp<128 +//where schemaId = 6 and rsrp<128 +where rsrp<128 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_stats_neigh_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on ssb RSRP on the beams of nrighboring cells, aggregated by gNB, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -42,13 +45,15 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.neighbor_beam_ssb -where schemaId = 6 and rsrp<128 +where rsrp<128 +//where schemaId = 6 and rsrp<128 group by timestamp_ms/$window as tb, gnb_id ; DEFINE{ query_name 'rrcx_stats_serv_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the ssb rsrp of the serving cell, aggregated by cell id, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -67,12 +72,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.serv_nr_cell -where schemaId = 1 and rsrp<128 +where rsrp<128 +//where schemaId = 1 and rsrp<128 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_stats_neighbor_cell'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the ssb rsrp of the neighbor cells, aggregated by cell id, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -91,13 +98,15 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.nr_neighbor -where schemaId = 4 and rsrp<128 +//where schemaId = 4 and rsrp<128 +where rsrp<128 group by timestamp_ms/$window as tb, physCellId ; DEFINE{ query_name 'rrcx_stats_serv_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the ssb srp of the serving cell, aggregated by gNB, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -116,12 +125,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.serv_nr_cell -where schemaId = 1 and rsrp<128 +//where schemaId = 1 and rsrp<128 +where rsrp<128 group by timestamp_ms/$window as tb, gnb_id ; DEFINE{ query_name 'rrcx_stats_neighbor_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the ssb rsrp of the neighbor cells, aggregated by gNB, computed using rrc transfer'; } PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 @@ -140,6 +151,7 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp from RRCXFER.nr_neighbor -where schemaId = 4 and rsrp<128 +//where schemaId = 4 and rsrp<128 +where rsrp<128 group by timestamp_ms/$window as tb, gnb_id diff --git a/mc-core/mc/queries/rrcx_stats_cell.gsql b/mc-core/mc/queries/rrcx_stats_cell.gsql index affb1f9..8e1d9c4 100644 --- a/mc-core/mc/queries/rrcx_stats_cell.gsql +++ b/mc-core/mc/queries/rrcx_stats_cell.gsql @@ -1,3 +1,6 @@ +DEFINE{ + max_lfta_disorder '1'; max_hfta_disorder '1'; real_time 'true'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 diff --git a/mc-core/mc/queries/runall b/mc-core/mc/queries/runall index fa2207e..f4f7727 100755 --- a/mc-core/mc/queries/runall +++ b/mc-core/mc/queries/runall @@ -98,9 +98,9 @@ else /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default release_cause window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default erab_stats window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_ue window=$WINDOW & - /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_rollup window=$WINDOW & - /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_gnb window=$WINDOW & - /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mod_req_failure_distribution window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_rollup window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_gnb window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mod_req_failure_distribution window=$WINDOW & fi sleep 1 diff --git a/mc-core/mc/queries/throughput.gsql b/mc-core/mc/queries/throughput.gsql index 0e5c9eb..6e61502 100644 --- a/mc-core/mc/queries/throughput.gsql +++ b/mc-core/mc/queries/throughput.gsql @@ -1,5 +1,7 @@ DEFINE{query_name 'throughput_ue'; + extra_keys 'TS'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'throughput experienced by UE over a measurement interval. *Active* throughput is throughput while actively downloading, *average* averages bytes transfered over the measurement interval'; } PARAM{ window uint; } select ($window*(TB+1))/1000 as TS, e_RAB_ID, UE_ID, GNB_ID, @@ -26,7 +28,7 @@ select ($window*(TB+1))/1000 as TS, e_RAB_ID, UE_ID, GNB_ID, , 1) ) as max_throughput from RATDATAUSAGE.rat_data_usage -where schemaId=1501 +//where schemaId=1501 group by e_RAB_ID, id_SgNB_UE_X2AP_ID as UE_ID, gnb_id as GNB_ID, timestamp_ms/$window as TB ; @@ -36,7 +38,9 @@ group by e_RAB_ID, id_SgNB_UE_X2AP_ID as UE_ID, gnb_id as GNB_ID, timestamp_ms/$ DEFINE{query_name 'throughput_rollup'; + extra_keys 'TS'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'statistics on the per-UE throughput'; } PARAM{ window uint; } select TS, e_RAB_ID, GNB_ID, @@ -56,6 +60,7 @@ group by TS, e_RAB_ID, GNB_ID DEFINE{query_name 'throughput_gnb'; max_lfta_disorder '1'; max_hfta_disorder '1'; + comment 'throughput experienced by a GNB over a measurement interval. *Active* throughput is throughput while actively downloading, *average* averages bytes transfered over the measurement interval'; } PARAM{ window uint; } select ($window*(TB+1))/1000 as TS, e_RAB_ID, GNB_ID, @@ -92,7 +97,7 @@ select ($window*(TB+1))/1000 as TS, e_RAB_ID, GNB_ID, , 1) ), .95) from RATDATAUSAGE.rat_data_usage -where schemaId=1501 +//where schemaId=1501 group by e_RAB_ID, gnb_id as GNB_ID, timestamp_ms/$window as TB -- 2.16.6