Add FIFO pre-create to the replay startup script
[ric-app/mc.git] / mc-core / mc / data_gen / rrcx_gen.py
1 # -------------------------------------------------------------------------------
2 #    Copyright (c) 2018-2019 AT&T Intellectual Property.
3 #
4 #   Licensed under the Apache License, Version 2.0 (the "License");
5 #   you may not use this file except in compliance with the License.
6 #   You may obtain a copy of the License at
7 #
8 #       http://www.apache.org/licenses/LICENSE-2.0
9 #
10 #   Unless required by applicable law or agreed to in writing, software
11 #   distributed under the License is distributed on an "AS IS" BASIS,
12 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #   See the License for the specific language governing permissions and
14 #   limitations under the License.
15 # -------------------------------------------------------------------------------
16
17 import sys
18 import time
19 from binascii import unhexlify
20
21 # from https://stackoverflow.com/questions/8730927/convert-python-long-int-to-fixed-size-byte-array
22 def long_to_bytes(val, endianness='big'):
23
24         width = 64
25         fmt = '%%0%dx' % (width // 4)
26         s = unhexlify(fmt % val)
27         if endianness == 'little':
28                 s = s[::-1]
29         return s
30
31
32
33 # ------------------------------------
34 #       START generated code
35 import rrctransfer_pb2
36 import x2ap_streaming_pb2
37
38 #dataset = {
39 #"id_MeNB_UE_X2AP_ID": 1,
40 #"id_SgNB_UE_X2AP_ID": 2,
41 #"MeasResultServMO_data": [
42 #       {"servCellID": 3, "physCellId": 4, "rsrq": 5, "rsrp": 6, "sinr": 7},
43 #]
44 #}
45
46 def create_record(dataset, ofl, ts):
47         X2APStreaming = x2ap_streaming_pb2.X2APStreaming() # header message
48         X2APStreaming.header.gNbID.value = dataset["sgnb_id"]
49
50         # print "sgnb_id="+X2APStreaming.header.gNbID.value+", ts="+str(ts)
51
52         RRCTransfer = X2APStreaming.rrcTransfer # message RRCTransfer
53         
54         RRCTransferIEs = RRCTransfer.rrcTransfer_IEs # field rrcTransfer_IEs
55         RRCTransferIEs.id_MeNB_UE_X2AP_ID = dataset["id_MeNB_UE_X2AP_ID"]       # field id_MeNB_UE_X2AP_ID
56         RRCTransferIEs.id_SgNB_UE_X2AP_ID = dataset["id_SgNB_UE_X2AP_ID"]
57         NRUeReport = RRCTransferIEs.id_UENRMeasurement
58         RRCContainer = NRUeReport.uENRMeasurements
59         ULDCCHMessageType = RRCContainer.UL_DCCH_message
60         MeasurementReport = ULDCCHMessageType.measurementReport
61         MeasurementReportIEs = MeasurementReport.measurementReport
62         MeasResults = MeasurementReportIEs.measResults
63         MeasResultServMOList = MeasResults.measResultServingMOList
64         for d in dataset["MeasResultServMO_data"]:
65                 MeasResultServMO = MeasResultServMOList.items.add()
66                 MeasResultServMO.servCellID = d["servCellID"]
67                 MeasResultNR = MeasResultServMO.measResultServingCell
68                 MeasResultNR.physCellId.value = d["physCellId"]
69                 MeasResult = MeasResultNR.measResult
70                 CellResults = MeasResult.cellResults
71                 MeasQuantityResults = CellResults.resultsCSI_RS_Cell
72                 MeasQuantityResults.rsrq.value = d["rsrq"]
73                 MeasQuantityResults.rsrp.value = d["rsrp"]
74                 MeasQuantityResults.sinr.value = d["sinr"]
75         
76         v = X2APStreaming.SerializeToString()
77         vlen = len(v)
78         ofl.write("@MCL")
79         ofl.write("{0:7}".format(vlen))
80         ofl.write('\0')
81         ofl.write(str(ts))
82         ofl.write('\0')
83         ofl.write('\0')
84         ofl.write('\0')
85         ofl.write(v)
86
87 #       END generated code
88 # ------------------------------------
89
90 import os
91 import time
92 import random
93
94 def triangle_measurements(d):
95         for dd in d["MeasResultServMO_data"]:
96                 dd["rsrp"] = int(random.triangular(0,100,50))
97                 dd["rsrq"] = int(random.triangular(0,100,50))
98                 dd["sinr"] = int(random.triangular(0,100,50))
99
100
101 sleep_interval = 1;
102 fifo_dir = "/tmp/mcl/fifos"
103 dst_flnm = "MT_000010350"
104
105
106 dataset1 = {
107 "sgnb_id": "g1",
108 "id_MeNB_UE_X2AP_ID": 1,
109 "id_SgNB_UE_X2AP_ID": 11,
110 "MeasResultServMO_data": [
111         {"servCellID": 0, "physCellId": 10, "rsrq": 20, "rsrp": 40, "sinr": 60},
112         {"servCellID": 1, "physCellId": 20, "rsrq": 60, "rsrp": 40, "sinr": 20}
113 ]
114 }
115 dataset2 = {
116 "sgnb_id": "g1",
117 "id_MeNB_UE_X2AP_ID": 2,
118 "id_SgNB_UE_X2AP_ID": 12,
119 "MeasResultServMO_data": [
120         {"servCellID": 0, "physCellId": 10, "rsrq": 25, "rsrp": 45, "sinr": 65},
121         {"servCellID": 1, "physCellId": 20, "rsrq": 65, "rsrp": 45, "sinr": 25}
122 ]
123 }
124 dataset3 = {
125 "sgnb_id": "g1",
126 "id_MeNB_UE_X2AP_ID": 3,
127 "id_SgNB_UE_X2AP_ID": 13,
128 "MeasResultServMO_data": [
129         {"servCellID": 0, "physCellId": 10, "rsrq": 25, "rsrp": 45, "sinr": 65},
130         {"servCellID": 1, "physCellId": 20, "rsrq": 65, "rsrp": 45, "sinr": 25}
131 ]
132 }
133 dataset4 = {
134 "sgnb_id": "g2",
135 "id_MeNB_UE_X2AP_ID": 4,
136 "id_SgNB_UE_X2AP_ID": 14,
137 "MeasResultServMO_data": [
138         {"servCellID": 0, "physCellId": 15, "rsrq": 25, "rsrp": 45, "sinr": 65},
139         {"servCellID": 1, "physCellId": 25, "rsrq": 65, "rsrp": 45, "sinr": 25}
140 ]
141 }
142 dataset5 = {
143 "sgnb_id": "g2",
144 "id_MeNB_UE_X2AP_ID": 5,
145 "id_SgNB_UE_X2AP_ID": 15,
146 "MeasResultServMO_data": [
147         {"servCellID": 0, "physCellId": 15, "rsrq": 25, "rsrp": 45, "sinr": 65},
148         {"servCellID": 1, "physCellId": 25, "rsrq": 65, "rsrp": 45, "sinr": 25}
149 ]
150 }
151 dataset6 = {
152 "sgnb_id": "g2",
153 "id_MeNB_UE_X2AP_ID": 6,
154 "id_SgNB_UE_X2AP_ID": 16,
155 "MeasResultServMO_data": [
156         {"servCellID": 0, "physCellId": 15, "rsrq": 25, "rsrp": 45, "sinr": 65},
157         {"servCellID": 1, "physCellId": 25, "rsrq": 65, "rsrp": 45, "sinr": 25}
158 ]
159 }
160
161 if not os.path.exists(fifo_dir +"/" + dst_flnm):
162         os.mkfifo(fifo_dir +"/" + dst_flnm)
163 ofl = open(fifo_dir +"/" + dst_flnm,"w", 0)
164
165 while(True):
166         curr_time = int(time.time())
167         triangle_measurements(dataset1)
168         create_record(dataset1, ofl, 1000*curr_time + 100)
169         triangle_measurements(dataset2)
170         create_record(dataset2, ofl, 1000*curr_time + 200)
171         triangle_measurements(dataset3)
172         create_record(dataset3, ofl, 1000*curr_time + 300)
173         triangle_measurements(dataset4)
174         create_record(dataset4, ofl, 1000*curr_time + 400)
175         triangle_measurements(dataset5)
176         create_record(dataset5, ofl, 1000*curr_time + 500)
177         triangle_measurements(dataset6)
178         create_record(dataset6, ofl, 1000*curr_time + 600)
179         time.sleep(sleep_interval)
180