blob: 8505aecf765bc6d329f2fa915ba7c3ec56eff36c [file] [log] [blame]
Dimitrios Mavrommatis96b255a2017-12-06 13:09:25 -08001/*
2 * Copyright 2017-present Open Networking Foundation
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
17package org.onosproject.xran.impl.entities;
18
19import com.fasterxml.jackson.annotation.JsonCreator;
20import com.fasterxml.jackson.annotation.JsonIgnore;
21import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
22import com.fasterxml.jackson.annotation.JsonProperty;
23import com.fasterxml.jackson.annotation.JsonPropertyOrder;
24import com.fasterxml.jackson.databind.JsonNode;
25import com.google.common.collect.Lists;
26import org.onosproject.store.service.WallClockTimestamp;
27import org.onosproject.xran.asn1lib.api.ERABParams;
28import org.onosproject.xran.asn1lib.api.PRBUsage;
29import org.onosproject.xran.asn1lib.api.RadioRepPerServCell;
30import org.onosproject.xran.asn1lib.api.SchedMeasRepPerServCell;
31import org.onosproject.xran.asn1lib.api.TrafficSplitPercentage;
32import org.onosproject.xran.asn1lib.api.XICICPA;
33import org.onosproject.xran.asn1lib.ber.types.BerBitString;
34import org.onosproject.xran.asn1lib.ber.types.BerInteger;
35import org.onosproject.xran.asn1lib.pdu.PDCPMeasReportPerUe;
36import org.onosproject.xran.asn1lib.pdu.RRMConfig;
37import org.onosproject.xran.asn1lib.pdu.RXSigMeasReport;
38import org.onosproject.xran.impl.identifiers.LinkId;
39import org.slf4j.Logger;
40import org.slf4j.LoggerFactory;
41
42import javax.xml.bind.DatatypeConverter;
43import java.util.Arrays;
44import java.util.List;
45import java.util.Optional;
46import java.util.concurrent.Executors;
47import java.util.concurrent.ScheduledExecutorService;
48
49/**
50 * R-NIB Link and its properties.
51 */
52@JsonPropertyOrder({
53 "Link-ID",
54 "Type",
55 "RRMConfiguration",
56 "TrafficPercent",
57 "BearerParameters",
58 "Measurements"
59})
60@JsonIgnoreProperties(ignoreUnknown = true)
61public class RnibLink {
62 @JsonIgnore
63 private static final Logger log =
64 LoggerFactory.getLogger(RnibLink.class);
65 @JsonProperty("Measurements")
66 private Measurements measurements = new Measurements();
67 @JsonProperty("Link-ID")
68 private LinkId linkId;
69 @JsonProperty("RRMConfiguration")
70 private RRMConfig rrmParameters;
71 @JsonProperty("TrafficPercent")
72 private TrafficSplitPercentage trafficPercent;
73 @JsonProperty("BearerParameters")
74 private ERABParams bearerParameters;
75 @JsonProperty("Type")
76 private Type type;
77 @JsonIgnore
78 private ScheduledExecutorService executor;
79
80 public RnibLink(RnibCell cell, RnibUe ue) {
81 trafficPercent = new TrafficSplitPercentage();
82 trafficPercent.setEcgi(cell.getEcgi());
83 trafficPercent.setTrafficPercentDl(new BerInteger(100));
84 trafficPercent.setTrafficPercentUl(new BerInteger(100));
85
86 executor = Executors.newSingleThreadScheduledExecutor();
87
88 type = Type.NON_SERVING;
89
90 linkId = LinkId.valueOf(cell, ue);
91
92 rrmParameters = new RRMConfig();
93 RRMConfig.Crnti crnti = new RRMConfig.Crnti();
94 crnti.getCRNTI().add(linkId.getUe().getCrnti());
95 rrmParameters.setCrnti(crnti);
96 rrmParameters.setEcgi(linkId.getEcgi());
97 }
98
99 /**
100 * Get executor.
101 *
102 * @return Timer
103 */
104 public ScheduledExecutorService getExecutor() {
105 return executor;
106 }
107
108 public void setExecutor(ScheduledExecutorService executor) {
109 this.executor.shutdown();
110 this.executor = executor;
111 }
112
113 /**
114 * Get Link ID.
115 *
116 * @return LinkID
117 */
118 @JsonProperty("Link-ID")
119 public LinkId getLinkId() {
120 return linkId;
121 }
122
123 /**
124 * Set the Link ID.
125 *
126 * @param linkId Link ID
127 */
128 @JsonProperty("Link-ID")
129 public void setLinkId(LinkId linkId) {
130 this.linkId = linkId;
131 }
132
133 /**
134 * Set the LINK ID with cell and ue.
135 *
136 * @param cell Rnib CELL
137 * @param ue Rnib UE
138 */
139 public void setLinkId(RnibCell cell, RnibUe ue) {
140 this.linkId = LinkId.valueOf(cell, ue);
141 trafficPercent.setEcgi(cell.getEcgi());
142 }
143
144 /**
145 * Get the link type.
146 *
147 * @return Link-type
148 */
149 @JsonProperty("Type")
150 public Type getType() {
151 return type;
152 }
153
154 /**
155 * Set the link type.
156 *
157 * @param type Link-type
158 */
159 @JsonProperty("Type")
160 public void setType(Type type) {
161 this.type = type;
162 }
163
164 /**
165 * Get traffic percent.
166 *
167 * @return TrafficSplitPercentage
168 */
169 @JsonProperty("TrafficPercent")
170 public TrafficSplitPercentage getTrafficPercent() {
171 return trafficPercent;
172 }
173
174 /**
175 * Set traffic percent.
176 *
177 * @param trafficPercent TrafficSplitPercentage
178 */
179 @JsonProperty("TrafficPercent")
180 public void setTrafficPercent(TrafficSplitPercentage trafficPercent) {
181 this.trafficPercent = trafficPercent;
182 }
183
184 /**
185 * Get the Bearer Parameters.
186 *
187 * @return ERABParams
188 */
189 @JsonProperty("BearerParameters")
190 public ERABParams getBearerParameters() {
191 return bearerParameters;
192 }
193
194 /**
195 * Set the Bearer Parameters.
196 *
197 * @param bearerParameters ERABParams
198 */
199 @JsonProperty("BearerParameters")
200 public void setBearerParameters(ERABParams bearerParameters) {
201 this.bearerParameters = bearerParameters;
202 }
203
204 /**
205 * Get RRM Configuration.
206 *
207 * @return RRMConfig
208 */
209 @JsonProperty("RRMConfiguration")
210 public RRMConfig getRrmParameters() {
211 return rrmParameters;
212 }
213
214 /**
215 * Set RRM Configuration.
216 *
217 * @param rrmParameters RRMConfig
218 */
219 @JsonProperty("RRMConfiguration")
220 public void setRrmParameters(RRMConfig rrmParameters) {
221 this.rrmParameters = rrmParameters;
222 }
223
224 public Measurements getMeasurements() {
225 return measurements;
226 }
227
228 public void setMeasurements(Measurements measurements) {
229 this.measurements = measurements;
230 }
231
232 /**
233 * Modify the RRM Config parameters of link.
234 *
235 * @param rrmConfigNode RRMConfig parameters to modify obtained from REST call
236 */
237 public void modifyRrmParameters(JsonNode rrmConfigNode) {
238
239 JsonNode pA = rrmConfigNode.path("p_a");
240 if (!pA.isMissingNode()) {
241 RRMConfig.Pa pa = new RRMConfig.Pa();
242
243 List<XICICPA> collect = Lists.newArrayList();
244 collect.add(new XICICPA(pA.asInt()));
245 pa.getXICICPA().clear();
246 pa.getXICICPA().addAll(collect);
247
248 rrmParameters.setPa(pa);
249 }
250
251 JsonNode startPrbDl1 = rrmConfigNode.path("start_prb_dl");
252 if (!startPrbDl1.isMissingNode()) {
253 RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
254
255 List<BerInteger> collect = Lists.newArrayList();
256 collect.add(new BerInteger(startPrbDl1.asInt()));
257 startPrbDl.getBerInteger().clear();
258 startPrbDl.getBerInteger().addAll(collect);
259
260 rrmParameters.setStartPrbDl(startPrbDl);
261 }
262
263 JsonNode endPrbDl1 = rrmConfigNode.path("end_prb_dl");
264 if (!endPrbDl1.isMissingNode()) {
265 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
266
267 List<BerInteger> collect = Lists.newArrayList();
268 collect.add(new BerInteger(endPrbDl1.asInt()));
269 endPrbDl.getBerInteger().clear();
270 endPrbDl.getBerInteger().addAll(collect);
271
272 rrmParameters.setEndPrbDl(endPrbDl);
273 }
274
275 JsonNode subFrameBitmaskDl = rrmConfigNode.path("sub_frame_bitmask_dl");
276 if (!subFrameBitmaskDl.isMissingNode()) {
277 RRMConfig.SubframeBitmaskDl subframeBitmaskDl = new RRMConfig.SubframeBitmaskDl();
278 List<BerBitString> collect = Lists.newArrayList();
279
280 byte[] hexString = DatatypeConverter.parseHexBinary(subFrameBitmaskDl.asText());
281 collect.add(new BerBitString(hexString, 10));
282 subframeBitmaskDl.getBerBitString().clear();
283 subframeBitmaskDl.getBerBitString().addAll(collect);
284
285 rrmParameters.setSubframeBitmaskDl(subframeBitmaskDl);
286 }
287
288 JsonNode startPrbUl1 = rrmConfigNode.path("start_prb_ul");
289 if (!startPrbUl1.isMissingNode()) {
290 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
291
292 List<BerInteger> collect = Lists.newArrayList();
293 collect.add(new BerInteger(startPrbUl1.asInt()));
294 startPrbUl.getBerInteger().clear();
295 startPrbUl.getBerInteger().addAll(collect);
296
297 rrmParameters.setStartPrbUl(startPrbUl);
298 }
299
300 JsonNode endPrbUl1 = rrmConfigNode.path("end_prb_ul");
301 if (!endPrbUl1.isMissingNode()) {
302 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
303
304 List<BerInteger> collect = Lists.newArrayList();
305 collect.add(new BerInteger(endPrbUl1.asInt()));
306 endPrbUl.getBerInteger().clear();
307 endPrbUl.getBerInteger().addAll(collect);
308
309 rrmParameters.setEndPrbUl(endPrbUl);
310 }
311
312
313 JsonNode p0UePusch1 = rrmConfigNode.path("p0_ue_pusch");
314 if (!p0UePusch1.isMissingNode()) {
315 RRMConfig.P0UePusch p0UePusch = new RRMConfig.P0UePusch();
316
317 List<BerInteger> collect = Lists.newArrayList();
318 collect.add(new BerInteger(p0UePusch1.asInt()));
319 p0UePusch.getBerInteger().clear();
320 p0UePusch.getBerInteger().addAll(collect);
321
322 rrmParameters.setP0UePusch(p0UePusch);
323 }
324
325 JsonNode subFrameBitmaskUl = rrmConfigNode.path("sub_frame_bitmask_ul");
326 if (!subFrameBitmaskUl.isMissingNode()) {
327 RRMConfig.SubframeBitmaskUl subframeBitmaskUl = new RRMConfig.SubframeBitmaskUl();
328 List<BerBitString> collect = Lists.newArrayList();
329
330 byte[] hexString = DatatypeConverter.parseHexBinary(subFrameBitmaskUl.asText());
331 collect.add(new BerBitString(hexString, 10));
332 subframeBitmaskUl.getBerBitString().clear();
333 subframeBitmaskUl.getBerBitString().addAll(collect);
334
335 rrmParameters.setSubframeBitmaskUl(subframeBitmaskUl);
336 }
337 }
338
339 @Override
340 public String toString() {
341 return "RnibLink{" +
342 "measurements=" + measurements +
343 ", linkId=" + linkId +
344 ", rrmParameters=" + rrmParameters +
345 ", trafficPercent=" + trafficPercent +
346 ", bearerParameters=" + bearerParameters +
347 ", type=" + type +
348 '}';
349 }
350
351 @Override
352 public boolean equals(Object o) {
353 if (this == o) {
354 return true;
355 }
356 if (o == null || getClass() != o.getClass()) {
357 return false;
358 }
359
360 RnibLink link = (RnibLink) o;
361
362 return linkId.equals(link.linkId);
363 }
364
365 @Override
366 public int hashCode() {
367 return linkId.hashCode();
368 }
369
370 /**
371 * Enum of Link-Type.
372 */
373 public enum Type {
374 SERVING_PRIMARY("serving/primary") {
375 @Override
376 public String toString() {
377 return "serving/primary";
378 }
379 },
380 SERVING_SECONDARY_CA("serving/secondary/ca") {
381 @Override
382 public String toString() {
383 return "serving/secondary/ca";
384 }
385 },
386 SERVING_SECONDARY_DC("serving/secondary/dc") {
387 @Override
388 public String toString() {
389 return "serving/secondary/dc";
390 }
391 },
392 NON_SERVING("non-serving") {
393 @Override
394 public String toString() {
395 return "non-serving";
396 }
397 };
398
399 private String name;
400
401 Type(String name) {
402 this.name = name;
403 }
404
405 /**
406 * Get enum value of link-type.
407 *
408 * @param name String representation of Enum Type
409 * @return Type
410 */
411 public static Type getEnum(String name) {
412 Optional<Type> any = Arrays.stream(Type.values()).filter(typeStr -> typeStr.name.equals(name)).findAny();
413 if (any.isPresent()) {
414 return any.get();
415 }
416 throw new IllegalArgumentException("No enum defined for string: " + name);
417 }
418 }
419
420 @JsonPropertyOrder({
421 "RXSigReport",
422 "RadioReport",
423 "SchedMeasReport",
424 "PDCPMeasReport",
425
426 })
427 @JsonIgnoreProperties(ignoreUnknown = true)
428 public static class Measurements {
429 @JsonProperty("RXSigReport")
430 RXSigReport rxSigReport = new RXSigReport();
431 @JsonProperty("RadioReport")
432 RadioReport radioReport = new RadioReport();
433 @JsonProperty("SchedMeasReport")
434 SchedMeasReport schedMeasReport = new SchedMeasReport();
435 @JsonProperty("PDCPMeasReport")
436 PdcpMeasReport pdcpMeasReport = new PdcpMeasReport();
437
438 public Measurements() {
439 }
440
441 @JsonCreator
442 public Measurements(@JsonProperty("RXSigReport") RXSigReport rxSigReport,
443 @JsonProperty("RadioReport") RadioReport radioReport,
444 @JsonProperty("SchedMeasReport") SchedMeasReport schedMeasReport,
445 @JsonProperty("PDCPMeasReport") PdcpMeasReport pdcpMeasReport) {
446 this.rxSigReport = rxSigReport;
447 this.radioReport = radioReport;
448 this.schedMeasReport = schedMeasReport;
449 this.pdcpMeasReport = pdcpMeasReport;
450 }
451
452 public RXSigReport getRxSigReport() {
453 return rxSigReport;
454 }
455
456 public void setRxSigReport(RXSigReport rxSigReport) {
457 this.rxSigReport = rxSigReport;
458 }
459
460 public RadioReport getRadioReport() {
461 return radioReport;
462 }
463
464 public void setRadioReport(RadioReport radioReport) {
465 this.radioReport = radioReport;
466 }
467
468 public SchedMeasReport getSchedMeasReport() {
469 return schedMeasReport;
470 }
471
472 public void setSchedMeasReport(SchedMeasReport schedMeasReport) {
473 this.schedMeasReport = schedMeasReport;
474 }
475
476 public PdcpMeasReport getPdcpMeasReport() {
477 return pdcpMeasReport;
478 }
479
480 public void setPdcpMeasReport(PdcpMeasReport pdcpMeasReport) {
481 this.pdcpMeasReport = pdcpMeasReport;
482 }
483
484 @Override
485 public String toString() {
486 return "Measurements{" +
487 "rxSigReport=" + rxSigReport +
488 ", radioReport=" + radioReport +
489 ", schedMeasReport=" + schedMeasReport +
490 ", pdcpMeasReport=" + pdcpMeasReport +
491 '}';
492 }
493
494 @JsonPropertyOrder({
495 "RSRP",
496 "RSRQ",
497 "meas-id",
498 "timestamp"
499 })
500 public static class RXSigReport {
501 @JsonProperty("RSRP")
502 double rsrp;
503 @JsonProperty("RSRQ")
504 double rsrq;
505 @JsonProperty("meas-id")
506 RXSigMeasReport.CellMeasReports measReports;
507 @JsonProperty("timestamp")
508 WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
509
510 public RXSigReport() {
511 }
512
513 @JsonCreator
514 public RXSigReport(@JsonProperty("RSRP") double rsrp,
515 @JsonProperty("RSRQ") double rsrq,
516 @JsonProperty("meas-id") RXSigMeasReport.CellMeasReports measReports
517 ) {
518 this.rsrp = rsrp;
519 this.rsrq = rsrq;
520 this.measReports = measReports;
521 }
522
523 /**
524 * Get rsrp.
525 *
526 * @return double rsrp
527 */
528 public double getRsrp() {
529 return rsrp;
530 }
531
532 /**
533 * Set rsrp.
534 *
535 * @param rsrp rsrp
536 */
537 public void setRsrp(double rsrp) {
538 this.rsrp = rsrp;
539 }
540
541 /**
542 * Get rsrq.
543 *
544 * @return double rsrq
545 */
546 public double getRsrq() {
547 return rsrq;
548 }
549
550 /**
551 * Set rsrq.
552 *
553 * @param rsrq rsrq
554 */
555 public void setRsrq(double rsrq) {
556 this.rsrq = rsrq;
557 }
558
559 /**
560 * Get time since last update.
561 *
562 * @return long Time
563 */
564 public long getTimesincelastupdate() {
565 return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
566 }
567
568 /**
569 * Set time since last update.
570 *
571 * @param timesincelastupdate time since last update
572 */
573 public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
574 this.timesincelastupdate = timesincelastupdate;
575 }
576
577 public RXSigMeasReport.CellMeasReports getMeasReports() {
578 return measReports;
579 }
580
581 public void setMeasReports(RXSigMeasReport.CellMeasReports measReports) {
582 this.measReports = measReports;
583 }
584
585 @Override
586 public String toString() {
587 return "RXSigReport{" +
588 "rsrp=" + rsrp +
589 ", rsrq=" + rsrq +
590 ", measReports=" + measReports +
591 ", timestamp=" + getTimesincelastupdate() +
592 '}';
593 }
594 }
595
596 @JsonPropertyOrder({
597 "CQI",
598 "Rank_hist",
599 "Pusch_sinr_hist",
600 "Pucch_sinr_hist",
601 "timestamp"
602 })
603 @JsonIgnoreProperties(ignoreUnknown = true)
604 public static class RadioReport {
605 @JsonProperty("CQI")
606 Cqi cqi = new Cqi();
607 @JsonProperty("Rank_hist")
608 RadioRepPerServCell.RiHist riHist;
609 @JsonProperty("Pucch_sinr_hist")
610 RadioRepPerServCell.PucchSinrHist pucchSinrHist;
611 @JsonProperty("Pusch_sinr_hist")
612 RadioRepPerServCell.PuschSinrHist puschSinrHist;
613 @JsonProperty("timestamp")
614 WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
615
616 public RadioReport() {
617 }
618
619 @JsonCreator
620 public RadioReport(@JsonProperty("CQI") Cqi cqi,
621 @JsonProperty("Rank_hist") RadioRepPerServCell.RiHist riHist,
622 @JsonProperty("Pucch_sinr_hist") RadioRepPerServCell.PucchSinrHist pucchSinrHist,
623 @JsonProperty("Pusch_sinr_hist") RadioRepPerServCell.PuschSinrHist puschSinrHist) {
624 this.cqi = cqi;
625 this.riHist = riHist;
626 this.pucchSinrHist = pucchSinrHist;
627 this.puschSinrHist = puschSinrHist;
628 }
629
630 public Cqi getCqi() {
631 return cqi;
632 }
633
634 public void setCqi(Cqi cqi) {
635 this.cqi = cqi;
636 }
637
638 public RadioRepPerServCell.RiHist getRiHist() {
639 return riHist;
640 }
641
642 public void setRiHist(RadioRepPerServCell.RiHist riHist) {
643 this.riHist = riHist;
644 }
645
646 public RadioRepPerServCell.PucchSinrHist getPucchSinrHist() {
647 return pucchSinrHist;
648 }
649
650 public void setPucchSinrHist(RadioRepPerServCell.PucchSinrHist pucchSinrHist) {
651 this.pucchSinrHist = pucchSinrHist;
652 }
653
654 public RadioRepPerServCell.PuschSinrHist getPuschSinrHist() {
655 return puschSinrHist;
656 }
657
658 public void setPuschSinrHist(RadioRepPerServCell.PuschSinrHist puschSinrHist) {
659 this.puschSinrHist = puschSinrHist;
660 }
661
662 /**
663 * Get time since last update.
664 *
665 * @return long Time
666 */
667 public long getTimesincelastupdate() {
668 return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
669 }
670
671 public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
672 this.timesincelastupdate = timesincelastupdate;
673 }
674
675 @Override
676 public String toString() {
677 return "RadioReport{" +
678 "cqi=" + cqi +
679 ", riHist=" + riHist +
680 ", pucchSinrHist=" + pucchSinrHist +
681 ", puschSinrHist=" + puschSinrHist +
682 ", timestamp=" + getTimesincelastupdate() +
683 '}';
684 }
685
686 @JsonPropertyOrder({
687 "Hist",
688 "Mode",
689 "Mean",
690 "timestamp"
691 })
692 @JsonIgnoreProperties(ignoreUnknown = true)
693 public static class Cqi {
694 @JsonProperty("Hist")
695 RadioRepPerServCell.CqiHist hist;
696 @JsonProperty("Mode")
697 double mode;
698 @JsonProperty("Mean")
699 double mean;
700
701 public Cqi() {
702 }
703
704 @JsonCreator
705 public Cqi(@JsonProperty("Hist") RadioRepPerServCell.CqiHist hist,
706 @JsonProperty("Mode") double mode,
707 @JsonProperty("Mean") double mean) {
708 this.hist = hist;
709 this.mode = mode;
710 this.mean = mean;
711 }
712
713 /**
714 * Get CQIHist.
715 *
716 * @return CqiHist
717 */
718 public RadioRepPerServCell.CqiHist getHist() {
719 return hist;
720 }
721
722 /**
723 * Get CQIHist.
724 *
725 * @param hist CqiHist
726 */
727 public void setHist(RadioRepPerServCell.CqiHist hist) {
728 this.hist = hist;
729 }
730
731 /**
732 * Get mode.
733 *
734 * @return double mode
735 */
736 public double getMode() {
737 return mode;
738 }
739
740 /**
741 * Set mode.
742 *
743 * @param mode mode
744 */
745 public void setMode(double mode) {
746 this.mode = mode;
747 }
748
749 /**
750 * Get mean.
751 *
752 * @return double mean
753 */
754 public double getMean() {
755 return mean;
756 }
757
758 /**
759 * Set mean.
760 *
761 * @param mean mean
762 */
763 public void setMean(double mean) {
764 this.mean = mean;
765 }
766
767 @Override
768 public String toString() {
769 return "Cqi{" +
770 "hist=" + hist +
771 ", mode=" + mode +
772 ", mean=" + mean +
773 '}';
774 }
775 }
776 }
777
778 @JsonPropertyOrder({
779 "QCI",
780 "ResourceUsage",
781 "MCS",
782 "Num_Sched_TTIs",
783 "DL_rank_stats",
784 "timestamp"
785 })
786 @JsonIgnoreProperties(ignoreUnknown = true)
787 public static class SchedMeasReport {
788 @JsonProperty("QCI")
789 SchedMeasRepPerServCell.QciVals qci;
790 @JsonProperty("ResourceUsage")
791 ResourceUsage resourceUsage = new ResourceUsage();
792 @JsonProperty("MCS")
793 Mcs mcs = new Mcs();
794 @JsonProperty("Num_Sched_TTIs")
795 NumSchedTtis numSchedTtis = new NumSchedTtis();
796 @JsonProperty("DL_rank_stats")
797 DlRankStats dlRankStats = new DlRankStats();
798 @JsonProperty("timestamp")
799 WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
800
801 public SchedMeasReport() {
802 }
803
804 @JsonCreator
805 public SchedMeasReport(
806 @JsonProperty("QCI") SchedMeasRepPerServCell.QciVals qci,
807 @JsonProperty("ResourceUsage") ResourceUsage resourceUsage,
808 @JsonProperty("MCS") Mcs mcs,
809 @JsonProperty("Num_Sched_TTIs") NumSchedTtis numSchedTtis,
810 @JsonProperty("DL_rank_stats") DlRankStats dlRankStats
811 ) {
812 this.qci = qci;
813 this.resourceUsage = resourceUsage;
814 this.mcs = mcs;
815 this.numSchedTtis = numSchedTtis;
816 this.dlRankStats = dlRankStats;
817 }
818
819 public SchedMeasRepPerServCell.QciVals getQci() {
820 return qci;
821 }
822
823 public void setQci(SchedMeasRepPerServCell.QciVals qci) {
824 this.qci = qci;
825 }
826
827 public ResourceUsage getResourceUsage() {
828 return resourceUsage;
829 }
830
831 public void setResourceUsage(ResourceUsage resourceUsage) {
832 this.resourceUsage = resourceUsage;
833 }
834
835 public Mcs getMcs() {
836 return mcs;
837 }
838
839 public void setMcs(Mcs mcs) {
840 this.mcs = mcs;
841 }
842
843 public NumSchedTtis getNumSchedTtis() {
844 return numSchedTtis;
845 }
846
847 public void setNumSchedTtis(NumSchedTtis numSchedTtis) {
848 this.numSchedTtis = numSchedTtis;
849 }
850
851 public DlRankStats getDlRankStats() {
852 return dlRankStats;
853 }
854
855 public void setDlRankStats(DlRankStats dlRankStats) {
856 this.dlRankStats = dlRankStats;
857 }
858
859 public long getTimesincelastupdate() {
860 return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
861 }
862
863 public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
864 this.timesincelastupdate = timesincelastupdate;
865 }
866
867 @Override
868 public String toString() {
869 return "SchedMeasReport{" +
870 "qci=" + qci +
871 ", resourceUsage=" + resourceUsage +
872 ", mcs=" + mcs +
873 ", numSchedTtis=" + numSchedTtis +
874 ", dlRankStats=" + dlRankStats +
875 ", timesincelastupdate=" + getTimesincelastupdate() +
876 '}';
877 }
878
879 @JsonPropertyOrder({
880 "dl",
881 "ul"
882 })
883 @JsonIgnoreProperties(ignoreUnknown = true)
884 public static class ResourceUsage {
885 @JsonProperty("dl")
886 PRBUsage.PrbUsageDl dl;
887 @JsonProperty("ul")
888 PRBUsage.PrbUsageUl ul;
889
890 public ResourceUsage() {
891 }
892
893 @JsonCreator
894 public ResourceUsage(@JsonProperty("dl") PRBUsage.PrbUsageDl dl,
895 @JsonProperty("ul") PRBUsage.PrbUsageUl ul) {
896 this.dl = dl;
897 this.ul = ul;
898 }
899
900 /**
901 * Get DL.
902 *
903 * @return Dl
904 */
905 public PRBUsage.PrbUsageDl getDl() {
906 return dl;
907 }
908
909 /**
910 * Set DL.
911 *
912 * @param dl DL
913 */
914 public void setDl(PRBUsage.PrbUsageDl dl) {
915 this.dl = dl;
916 }
917
918 /**
919 * Get UL.
920 *
921 * @return Ul
922 */
923 public PRBUsage.PrbUsageUl getUl() {
924 return ul;
925 }
926
927 /**
928 * Set UL.
929 *
930 * @param ul Ul
931 */
932 public void setUl(PRBUsage.PrbUsageUl ul) {
933 this.ul = ul;
934 }
935
936 @Override
937 public String toString() {
938 return "ResourceUsage{" +
939 "dl=" + dl +
940 ", ul=" + ul +
941 '}';
942 }
943 }
944
945 @JsonPropertyOrder({
946 "dl",
947 "ul"
948 })
949 @JsonIgnoreProperties(ignoreUnknown = true)
950 public static class Mcs {
951 SchedMeasRepPerServCell.McsDl dl;
952 SchedMeasRepPerServCell.McsUl ul;
953
954 public Mcs() {
955 }
956
957 @JsonCreator
958 public Mcs(@JsonProperty("dl") SchedMeasRepPerServCell.McsDl dl,
959 @JsonProperty("ul") SchedMeasRepPerServCell.McsUl ul) {
960 this.dl = dl;
961 this.ul = ul;
962 }
963
964 /**
965 * Get DL.
966 *
967 * @return Dl
968 */
969 public SchedMeasRepPerServCell.McsDl getDl() {
970 return dl;
971 }
972
973 /**
974 * Set DL.
975 *
976 * @param dl DL
977 */
978 public void setDl(SchedMeasRepPerServCell.McsDl dl) {
979 this.dl = dl;
980 }
981
982 /**
983 * Get UL.
984 *
985 * @return Ul
986 */
987 public SchedMeasRepPerServCell.McsUl getUl() {
988 return ul;
989 }
990
991 /**
992 * Set UL.
993 *
994 * @param ul Ul
995 */
996 public void setUl(SchedMeasRepPerServCell.McsUl ul) {
997 this.ul = ul;
998 }
999
1000 @Override
1001 public String toString() {
1002 return "mcs{" +
1003 "dl=" + dl +
1004 ", ul=" + ul +
1005 '}';
1006 }
1007 }
1008
1009 @JsonPropertyOrder({
1010 "dl",
1011 "ul"
1012 })
1013 @JsonIgnoreProperties(ignoreUnknown = true)
1014 public static class NumSchedTtis {
1015 @JsonProperty("dl")
1016 SchedMeasRepPerServCell.NumSchedTtisDl dl;
1017 @JsonProperty("ul")
1018 SchedMeasRepPerServCell.NumSchedTtisUl ul;
1019
1020 public NumSchedTtis() {
1021 }
1022
1023 @JsonCreator
1024 public NumSchedTtis(@JsonProperty("dl") SchedMeasRepPerServCell.NumSchedTtisDl dl,
1025 @JsonProperty("ul") SchedMeasRepPerServCell.NumSchedTtisUl ul) {
1026 this.dl = dl;
1027 this.ul = ul;
1028 }
1029
1030 public SchedMeasRepPerServCell.NumSchedTtisDl getDl() {
1031 return dl;
1032 }
1033
1034 public void setDl(SchedMeasRepPerServCell.NumSchedTtisDl dl) {
1035 this.dl = dl;
1036 }
1037
1038 public SchedMeasRepPerServCell.NumSchedTtisUl getUl() {
1039 return ul;
1040 }
1041
1042 public void setUl(SchedMeasRepPerServCell.NumSchedTtisUl ul) {
1043 this.ul = ul;
1044 }
1045
1046 @Override
1047 public String toString() {
1048 return "NumSchedTtis{" +
1049 "dl=" + dl +
1050 ", ul=" + ul +
1051 '}';
1052 }
1053 }
1054
1055 @JsonPropertyOrder({
1056 "Rank-1",
1057 "Rank-2"
1058 })
1059 @JsonIgnoreProperties(ignoreUnknown = true)
1060 public static class DlRankStats {
1061 @JsonProperty("Rank-1")
1062 SchedMeasRepPerServCell.RankDl1 rankDl1;
1063 @JsonProperty("Rank-2")
1064 SchedMeasRepPerServCell.RankDl2 rankDl2;
1065
1066 public DlRankStats() {
1067 }
1068
1069 @JsonCreator
1070 public DlRankStats(@JsonProperty("Rank-1") SchedMeasRepPerServCell.RankDl1 rankDl1,
1071 @JsonProperty("Rank-2") SchedMeasRepPerServCell.RankDl2 rankDl2) {
1072 this.rankDl1 = rankDl1;
1073 this.rankDl2 = rankDl2;
1074 }
1075
1076 public SchedMeasRepPerServCell.RankDl1 getRankDl1() {
1077 return rankDl1;
1078 }
1079
1080 public void setRankDl1(SchedMeasRepPerServCell.RankDl1 rankDl1) {
1081 this.rankDl1 = rankDl1;
1082 }
1083
1084 public SchedMeasRepPerServCell.RankDl2 getRankDl2() {
1085 return rankDl2;
1086 }
1087
1088 public void setRankDl2(SchedMeasRepPerServCell.RankDl2 rankDl2) {
1089 this.rankDl2 = rankDl2;
1090 }
1091
1092 @Override
1093 public String toString() {
1094 return "DlRankStats{" +
1095 "rankDl1=" + rankDl1 +
1096 ", rankDl2=" + rankDl2 +
1097 '}';
1098 }
1099 }
1100 }
1101
1102 @JsonPropertyOrder({
1103 "QCI",
1104 "PDCPThroughput",
1105 "Data_vol",
1106 "Pkt_delay_dl",
1107 "Pkt_discard_rate_dl",
1108 "Pkt_loss_rate",
1109 "timestamp"
1110 })
1111 @JsonIgnoreProperties(ignoreUnknown = true)
1112 public static class PdcpMeasReport {
1113 @JsonProperty("QCI")
1114 PDCPMeasReportPerUe.QciVals qci = new PDCPMeasReportPerUe.QciVals();
1115 @JsonProperty("PDCPThroughput")
1116 PdcpThroughput pdcpThroughput = new PdcpThroughput();
1117 @JsonProperty("Data_vol")
1118 DataVol dataVol = new DataVol();
1119 @JsonProperty("Pkt_delay_dl")
1120 PDCPMeasReportPerUe.PktDelayDl pktDelayDl;
1121 @JsonProperty("Pkt_discard_rate_dl")
1122 PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl;
1123 @JsonProperty("Pkt_loss_rate")
1124 PktLossRate pktLossRate = new PktLossRate();
1125 @JsonProperty("timestamp")
1126 WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
1127
1128 public PdcpMeasReport() {
1129 }
1130
1131 @JsonCreator
1132 public PdcpMeasReport(
1133 @JsonProperty("QCI") PDCPMeasReportPerUe.QciVals qci,
1134 @JsonProperty("PDCPThroughput") PdcpThroughput pdcpThroughput,
1135 @JsonProperty("Data_vol") DataVol dataVol,
1136 @JsonProperty("Pkt_delay_dl") PDCPMeasReportPerUe.PktDelayDl pktDelayDl,
1137 @JsonProperty("Pkt_discard_rate_dl") PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl,
1138 @JsonProperty("Pkt_loss_rate") PktLossRate pktLossRate
1139 ) {
1140 this.qci = qci;
1141 this.pdcpThroughput = pdcpThroughput;
1142 this.dataVol = dataVol;
1143 this.pktDelayDl = pktDelayDl;
1144 this.pktDiscardRateDl = pktDiscardRateDl;
1145 this.pktLossRate = pktLossRate;
1146 }
1147
1148 public PDCPMeasReportPerUe.QciVals getQci() {
1149 return qci;
1150 }
1151
1152 public void setQci(PDCPMeasReportPerUe.QciVals qci) {
1153 this.qci = qci;
1154 }
1155
1156 public PdcpThroughput getPdcpThroughput() {
1157 return pdcpThroughput;
1158 }
1159
1160 public void setPdcpThroughput(PdcpThroughput pdcpThroughput) {
1161 this.pdcpThroughput = pdcpThroughput;
1162 }
1163
1164 public DataVol getDataVol() {
1165 return dataVol;
1166 }
1167
1168 public void setDataVol(DataVol dataVol) {
1169 this.dataVol = dataVol;
1170 }
1171
1172 public PDCPMeasReportPerUe.PktDelayDl getPktDelayDl() {
1173 return pktDelayDl;
1174 }
1175
1176 public void setPktDelayDl(PDCPMeasReportPerUe.PktDelayDl pktDelayDl) {
1177 this.pktDelayDl = pktDelayDl;
1178 }
1179
1180 public PDCPMeasReportPerUe.PktDiscardRateDl getPktDiscardRateDl() {
1181 return pktDiscardRateDl;
1182 }
1183
1184 public void setPktDiscardRateDl(PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl) {
1185 this.pktDiscardRateDl = pktDiscardRateDl;
1186 }
1187
1188 public PktLossRate getPktLossRate() {
1189 return pktLossRate;
1190 }
1191
1192 public void setPktLossRate(PktLossRate pktLossRate) {
1193 this.pktLossRate = pktLossRate;
1194 }
1195
1196 public long getTimesincelastupdate() {
1197 return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
1198 }
1199
1200 public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
1201 this.timesincelastupdate = timesincelastupdate;
1202 }
1203
1204 @Override
1205 public String toString() {
1206 return "PdcpMeasReport{" +
1207 "qci=" + qci +
1208 ", pdcpThroughput=" + pdcpThroughput +
1209 ", dataVol=" + dataVol +
1210 ", pktDelayDl=" + pktDelayDl +
1211 ", pktDiscardRateDl=" + pktDiscardRateDl +
1212 ", pktLossRate=" + pktLossRate +
1213 ", timesincelastupdate=" + getTimesincelastupdate() +
1214 '}';
1215 }
1216
1217 @JsonPropertyOrder({
1218 "dl",
1219 "ul"
1220 })
1221 @JsonIgnoreProperties(ignoreUnknown = true)
1222 public static class PdcpThroughput {
1223 @JsonProperty("dl")
1224 private PDCPMeasReportPerUe.ThroughputDl dl;
1225 @JsonProperty("ul")
1226 private PDCPMeasReportPerUe.ThroughputUl ul;
1227
1228 public PdcpThroughput() {
1229 }
1230
1231 @JsonCreator
1232 public PdcpThroughput(@JsonProperty("dl") PDCPMeasReportPerUe.ThroughputDl dl,
1233 @JsonProperty("ul") PDCPMeasReportPerUe.ThroughputUl ul) {
1234 this.dl = dl;
1235 this.ul = ul;
1236 }
1237
1238 /**
1239 * Get DL.
1240 *
1241 * @return Dl
1242 */
1243 public PDCPMeasReportPerUe.ThroughputDl getDl() {
1244 return dl;
1245 }
1246
1247 /**
1248 * Set DL.
1249 *
1250 * @param dl DL
1251 */
1252 public void setDl(PDCPMeasReportPerUe.ThroughputDl dl) {
1253 this.dl = dl;
1254 }
1255
1256 /**
1257 * Get UL.
1258 *
1259 * @return Ul
1260 */
1261 public PDCPMeasReportPerUe.ThroughputUl getUl() {
1262 return ul;
1263 }
1264
1265 /**
1266 * Set UL.
1267 *
1268 * @param ul Ul
1269 */
1270 public void setUl(PDCPMeasReportPerUe.ThroughputUl ul) {
1271 this.ul = ul;
1272 }
1273
1274 @Override
1275 public String
1276 toString() {
1277 return "PdcpThroughput{" +
1278 "dl=" + dl +
1279 ", ul=" + ul +
1280 '}';
1281 }
1282 }
1283
1284 @JsonPropertyOrder({
1285 "dl",
1286 "ul"
1287 })
1288 @JsonIgnoreProperties(ignoreUnknown = true)
1289 public static class DataVol {
1290 @JsonProperty("dl")
1291 private PDCPMeasReportPerUe.DataVolDl dl;
1292 @JsonProperty("ul")
1293 private PDCPMeasReportPerUe.DataVolUl ul;
1294
1295 public DataVol() {
1296 }
1297
1298 @JsonCreator
1299 public DataVol(@JsonProperty("dl") PDCPMeasReportPerUe.DataVolDl dl,
1300 @JsonProperty("ul") PDCPMeasReportPerUe.DataVolUl ul) {
1301 this.dl = dl;
1302 this.ul = ul;
1303 }
1304
1305 /**
1306 * Get DL.
1307 *
1308 * @return Dl
1309 */
1310 public PDCPMeasReportPerUe.DataVolDl getDl() {
1311 return dl;
1312 }
1313
1314 /**
1315 * Set DL.
1316 *
1317 * @param dl DL
1318 */
1319 public void setDl(PDCPMeasReportPerUe.DataVolDl dl) {
1320 this.dl = dl;
1321 }
1322
1323 /**
1324 * Get UL.
1325 *
1326 * @return Ul
1327 */
1328 public PDCPMeasReportPerUe.DataVolUl getUl() {
1329 return ul;
1330 }
1331
1332 /**
1333 * Set UL.
1334 *
1335 * @param ul Ul
1336 */
1337 public void setUl(PDCPMeasReportPerUe.DataVolUl ul) {
1338 this.ul = ul;
1339 }
1340
1341 @Override
1342 public String
1343 toString() {
1344 return "PdcpThroughput{" +
1345 "dl=" + dl +
1346 ", ul=" + ul +
1347 '}';
1348 }
1349 }
1350
1351 @JsonPropertyOrder({
1352 "dl",
1353 "ul"
1354 })
1355 @JsonIgnoreProperties(ignoreUnknown = true)
1356 public static class PktLossRate {
1357 @JsonProperty("dl")
1358 PDCPMeasReportPerUe.PktLossRateDl dl;
1359 @JsonProperty("ul")
1360 PDCPMeasReportPerUe.PktLossRateUl ul;
1361
1362 public PktLossRate() {
1363 }
1364
1365 @JsonCreator
1366 public PktLossRate(@JsonProperty("dl") PDCPMeasReportPerUe.PktLossRateDl dl,
1367 @JsonProperty("ul") PDCPMeasReportPerUe.PktLossRateUl ul) {
1368 this.dl = dl;
1369 this.ul = ul;
1370 }
1371
1372 /**
1373 * Get DL.
1374 *
1375 * @return Dl
1376 */
1377 public PDCPMeasReportPerUe.PktLossRateDl getDl() {
1378 return dl;
1379 }
1380
1381 /**
1382 * Set DL.
1383 *
1384 * @param dl DL
1385 */
1386 public void setDl(PDCPMeasReportPerUe.PktLossRateDl dl) {
1387 this.dl = dl;
1388 }
1389
1390 /**
1391 * Get UL.
1392 *
1393 * @return Ul
1394 */
1395 public PDCPMeasReportPerUe.PktLossRateUl getUl() {
1396 return ul;
1397 }
1398
1399 /**
1400 * Set UL.
1401 *
1402 * @param ul Ul
1403 */
1404 public void setUl(PDCPMeasReportPerUe.PktLossRateUl ul) {
1405 this.ul = ul;
1406 }
1407
1408 @Override
1409 public String toString() {
1410 return "PdcpPacketdelay{" +
1411 "dl=" + dl +
1412 ", ul=" + ul +
1413 '}';
1414 }
1415 }
1416 }
1417 }
1418}