1 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
2 ' Copyright 2023 O-RAN-SC Projects NONRTRIC, SIM, OAM
3 ' This work is licensed under a Creative Commons Attribution 4.0 International License.
4 ' SPDX-License-Identifier: CC-BY-4.0
5 ' https://creativecommons.org/licenses/by/4.0/deed.en
7 @startuml o-ran-sc-i-pm-streaming-sequence
9 Performance Measurement Data flows
10 stream based and 3GPP xml file based
14 autonumber 1 1 "<b>[00]"
17 skinparam backgroundColor #fefefe
18 skinparam roundcorner 15
20 skinparam participant {
21 BackgroundColor<< NONRTRIC >> green
22 FontColor<< NONRTRIC >> #eeeeee
26 BackgroundColor<< NONRTRIC >> green
27 FontColor<< NONRTRIC >> green
31 ' the sequence diagram
32 box "User Space" #LightBlue
36 box "App layer" #LightBlue
37 participant "rApp" as rApp
40 box "NONRTRIC" #GoldenRod
41 participant "Information Coordinator Service (DME)" as dmeICS << NONRTRIC >>
44 box "NONRTRIC RAN PM" #gold
45 participant "PM (File) Collector" as pmDFC << NONRTRIC >>
46 participant "PM Data Converter" as pmConvert << NONRTRIC >>
47 participant "PM Data Producer (Streamed)" as pmProducer << NONRTRIC >>
48 participant "PM Data Influx Producer/Consumer" as pmInflux << NONRTRIC >>
51 box "SMO Common" #gold
52 participant "Topology Service" as topo
53 participant "Message Router / Kafka" as mr
54 database "PM Datastore (S3)" as pmDb << NONRTRIC >>
55 database "PM Datastore (InfluxDB)" as pmDbInflux << NONRTRIC >>
59 participant "PM Coordination" as pmCoord
60 participant "PM Collector" as pmCollectStream
61 participant "VES Collector" as ves
62 participant "OAM Controller" as sdnr
65 box "SMO O-Cloud" #gold
66 participant "Deployment Management Service" as dms
69 box "Network" #LightPink
70 participant "NetworkFunction\nNTSims" as nf
71 participant "PM File\nCreator Sim" as pmFileCreator << NONRTRIC >>
74 box "Simulation" #LightPink
75 database "Network PM" as netPm
76 participant "Data Generation" as simData
77 participant "UE Location Generation" as trigger
82 user -> topo : provide (RAN) topology
83 dms -> topo : RESTCONF GET ietf-network-topology
84 dms <- topo : ietf-network-topology
85 loop for all nodes in the topology
86 dms -> nf : Create simulated network function <O2>
88 simData -> topo : RESTCONF GET ietf-network-topology
89 simData <- topo : ietf-network-topology
93 nf -> ves : <<HTTP/TLS>> VES pnfRegistration <O1>
94 ves -> mr : forward VES pnfRegistration
95 mr -> sdnr : grep VES pnfRegistration
96 sdnr -> sdnr : create Mount Point
97 sdnr -> nf : <<NETCONF/TLS>> establish connection <O1-CM>
98 sdnr -> mr : Connected!
99 mr -> pmCoord : Connection to NF established
101 == PM Data Generation ==
103 loop at least every second
104 trigger -> simData : send geo location for each UE
105 simData -> simData : UE perform cell selection
106 simData -> simData : Generator throughput data \nand RSRQ (PM values)
107 simData -> netPm : Store PM values per UE \nand timestamp
108 simData -> simData : aggregate data per nrDuCell
109 simData -> netPm : Store PM values per nrDuCell \nand timestamp
110 simData -> simData : aggregate data per O-RAN RU
111 simData -> netPm : Store PM values per O-RAN RU \nand timestamp
112 simData -> simData : aggregate data per O-RAN DU
113 simData -> netPm : Store PM values per O-RAN DU \nand timestamp
116 == Stream-based PM JOB Configuration ==
117 alt Unmanaged PM jobs on NFs
118 rApp -> sdnr : configure PM data streaming subscription <R1-OAM(tbc)>
119 sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
120 else Managed PM jobs on NFs
121 rApp -> pmCoord : configure PM data streaming subscription <R1-OAM(tbc)>
122 pmCoord -> pmCoord : analyze subscription
123 pmCoord -> sdnr : PM Job Creation
124 sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
126 nf -> sdnr : PM Job Created\nincludes http target for stream establishment <O1-CM>
127 sdnr -> pmCoord : PM Job Created
129 == PM Data Streaming ==
131 nf -> pmCollectStream : <<HTTP/TLS>> establish Streaming Connection \nincludes mapping from streamId to jobId <O1-PM>
132 pmCollectStream -> nf : <<HTTP/TLS>> Connection Established returns ConnectionId (wss:url) <O1-PM>
134 loop while performance job is active
135 nf -> netPm : request data based on PM-Job
136 netPm -> nf : send data
137 nf -> nf : convert simulated PM Data into GPB
138 nf -> pmCollectStream : <<WebSocket>> report PM data via stream unit (wss:url) <O1-PM>
139 pmCollectStream -> pmCollectStream : convert GPB into 3GPP-xml format
140 pmCollectStream -> pmDb : store PM Data (3GPP-XMLformat)
141 pmCollectStream -> mr : PM Data (raw) available\n{jobId,sender,pm-database-query-command}
144 == File-based PM Job Configuration ==
146 alt Unmanaged PM jobs on NFs
147 rApp -> sdnr : configure file-based PM data subscription <R1-OAM(tbc)>
148 sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
149 else Managed PM jobs on NFs
150 rApp -> pmCoord : configure file-based PM data subscription <R1-OAM(tbc)>
151 pmCoord -> pmCoord : analyze subscription
152 pmCoord -> sdnr : PM Job Creation
153 sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
154 nf -> sdnr : PM Job Created <O1-CM>
155 sdnr -> pmCoord : PM Job Created
158 == PM Data File Collection ==
160 loop while PM job is active in NF
161 nf -> netPm : request data based on PM-Job
162 netPm -> nf : send data
163 nf -> nf : store simulated PM Data as 3GPP-XML file
164 nf -> ves : File-Ready <O1-PM>
165 ves -> mr : File-Ready
166 mr -> pmDFC : File-Ready
167 pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File <O1-PM>
168 pmDFC -> pmDb : store PM Data (3GPP-XML format)
169 pmDFC -> mr : PM Data (raw) available
172 == PM Data Conversion (Common) ==
174 loop while PM Job is active in NF
175 mr -> pmConvert : PM Data (raw) available
176 pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data
177 pmConvert -> pmConvert : Covert PM data to JSON
178 pmConvert -> pmDb : Store PM Data (json)
179 pmConvert -> mr : PM Data (json) available
182 ' == DME Data Producers & Consumers (Common) ==
184 ' loop while PM Job is active in NF
185 ' mr -> pmConvert : PM Data (raw) available
186 ' pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data
187 ' pmConvert -> pmConvert : Covert PM data to JSON
188 ' pmConvert -> pmDb : Store PM Data (json)
189 ' pmConvert -> mr : PM Data (json) available
193 == DME Data Producers & Consumers <<R1 DME>>==
194 loop while PM Job is active in NF
196 opt RAN PM Data (R1-PM 'streamed ranpm' datatype) is streamed to rApp
197 note over pmProducer, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer)
198 pmProducer -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
199 pmProducer -> dmeICS : Register as 'streamed ranpm' producer
200 note over rApp, dmeICS : rApp creates 'streamed ranpm' subscription (DME Consumer)
201 rApp -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
202 rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data
204 note over rApp, pmProducer : DME coordinates between DME Producer/Consumer
205 dmeICS -> pmProducer : Job/subscription created - includes job parameters
206 loop while data available / continuous
207 pmProducer -> pmDb : retrieve appropriate PM Data (json)
208 pmProducer -[#Blue]> mr : data: (type : 'streamed ranpm')
209 mr -[#Blue]> rApp: data : (type : 'streamed ranpm')
210 opt wait for new data
211 mr -> pmProducer : PM Data (json) available
217 opt RAN PM Data (R1-PM 'stored ranpm' datatype) is produced by influxDB producer
218 note over pmInflux, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer)
219 pmInflux -> dmeICS : Register data 'stored ranpm' type (if not already registered)
220 group #a0a0a090 <color #red>TBC</color>
221 pmInflux -> dmeICS : Register as 'stored ranpm' producer
222 note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
223 rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
224 rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data
227 note over rApp, pmProducer : DME coordinates between DME Producer/Consumer
228 dmeICS -> pmProducer : Job/subscription created - includes job parameters
230 loop while data available / continuous
231 pmInflux -> pmDb : retrieve appropriate PM Data (json)
232 pmInflux -> pmDbInflux : store appropriate PM Data (json)
233 pmInflux -> mr : data available: (type : 'stored ranpm')
234 opt wait for new data
235 mr -> pmProducer : PM Data (json) available
238 deactivate pmProducer
242 group #a0a0a090 <color #red>TBC</color>
243 ' Currently AIMLFW does not act as a DME consumer to read the InfluxDB. It reads it direct
244 ' According to the 'current' specs that is fine - AIMLFW is not an 'rApp'
245 ' However, as the Disaggregated SMo work progressed it will need to use DME.
246 opt RAN PM Data (R1-PM 'stored ranpm' datatype) is consumed by rApp from influxDB producer
247 group #a0a0a090 <color #red>TBC</color>
248 note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
249 rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
250 rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data
253 loop while data available / continuous
254 rApp -> pmDbInflux : retrieve appropriate PM Data (json)
255 opt wait for new data
256 mr -> rApp : data available: (type : 'stored ranpm')
265 ' What happens when PM job on NF is removed? (And How?)
266 ' draft: The SMO wont be informed about new measurements – no ves file ready or no pm-stream based on the PM job.
267 ' The PM Job can be deactivated (admin-state to locked) or removed via NETCONF operation defined in 3GPP yang modules -> O1.
269 ' Should DME job be automatically removed?
270 ' draft: Here we should start developing an answer 😊
271 ' The DME job – does it depend on the PM job or does it control the PM job?
274 right footer Copyright 2023 O-RAN-SC Projects NONRTRIC, SIM, OAM\lThis work is licensed under a Creative Commons Attribution 4.0\l International License.\lSPDX-License-Identifier: CC-BY-4.0\n2023-09-21 | o-ran-sc.org oam project | Thanks to PlantUML!