blob: 8505aecf765bc6d329f2fa915ba7c3ec56eff36c [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
*
* 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.
*/
package org.onosproject.xran.impl.entities;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.Lists;
import org.onosproject.store.service.WallClockTimestamp;
import org.onosproject.xran.asn1lib.api.ERABParams;
import org.onosproject.xran.asn1lib.api.PRBUsage;
import org.onosproject.xran.asn1lib.api.RadioRepPerServCell;
import org.onosproject.xran.asn1lib.api.SchedMeasRepPerServCell;
import org.onosproject.xran.asn1lib.api.TrafficSplitPercentage;
import org.onosproject.xran.asn1lib.api.XICICPA;
import org.onosproject.xran.asn1lib.ber.types.BerBitString;
import org.onosproject.xran.asn1lib.ber.types.BerInteger;
import org.onosproject.xran.asn1lib.pdu.PDCPMeasReportPerUe;
import org.onosproject.xran.asn1lib.pdu.RRMConfig;
import org.onosproject.xran.asn1lib.pdu.RXSigMeasReport;
import org.onosproject.xran.impl.identifiers.LinkId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.bind.DatatypeConverter;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
/**
* R-NIB Link and its properties.
*/
@JsonPropertyOrder({
"Link-ID",
"Type",
"RRMConfiguration",
"TrafficPercent",
"BearerParameters",
"Measurements"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public class RnibLink {
@JsonIgnore
private static final Logger log =
LoggerFactory.getLogger(RnibLink.class);
@JsonProperty("Measurements")
private Measurements measurements = new Measurements();
@JsonProperty("Link-ID")
private LinkId linkId;
@JsonProperty("RRMConfiguration")
private RRMConfig rrmParameters;
@JsonProperty("TrafficPercent")
private TrafficSplitPercentage trafficPercent;
@JsonProperty("BearerParameters")
private ERABParams bearerParameters;
@JsonProperty("Type")
private Type type;
@JsonIgnore
private ScheduledExecutorService executor;
public RnibLink(RnibCell cell, RnibUe ue) {
trafficPercent = new TrafficSplitPercentage();
trafficPercent.setEcgi(cell.getEcgi());
trafficPercent.setTrafficPercentDl(new BerInteger(100));
trafficPercent.setTrafficPercentUl(new BerInteger(100));
executor = Executors.newSingleThreadScheduledExecutor();
type = Type.NON_SERVING;
linkId = LinkId.valueOf(cell, ue);
rrmParameters = new RRMConfig();
RRMConfig.Crnti crnti = new RRMConfig.Crnti();
crnti.getCRNTI().add(linkId.getUe().getCrnti());
rrmParameters.setCrnti(crnti);
rrmParameters.setEcgi(linkId.getEcgi());
}
/**
* Get executor.
*
* @return Timer
*/
public ScheduledExecutorService getExecutor() {
return executor;
}
public void setExecutor(ScheduledExecutorService executor) {
this.executor.shutdown();
this.executor = executor;
}
/**
* Get Link ID.
*
* @return LinkID
*/
@JsonProperty("Link-ID")
public LinkId getLinkId() {
return linkId;
}
/**
* Set the Link ID.
*
* @param linkId Link ID
*/
@JsonProperty("Link-ID")
public void setLinkId(LinkId linkId) {
this.linkId = linkId;
}
/**
* Set the LINK ID with cell and ue.
*
* @param cell Rnib CELL
* @param ue Rnib UE
*/
public void setLinkId(RnibCell cell, RnibUe ue) {
this.linkId = LinkId.valueOf(cell, ue);
trafficPercent.setEcgi(cell.getEcgi());
}
/**
* Get the link type.
*
* @return Link-type
*/
@JsonProperty("Type")
public Type getType() {
return type;
}
/**
* Set the link type.
*
* @param type Link-type
*/
@JsonProperty("Type")
public void setType(Type type) {
this.type = type;
}
/**
* Get traffic percent.
*
* @return TrafficSplitPercentage
*/
@JsonProperty("TrafficPercent")
public TrafficSplitPercentage getTrafficPercent() {
return trafficPercent;
}
/**
* Set traffic percent.
*
* @param trafficPercent TrafficSplitPercentage
*/
@JsonProperty("TrafficPercent")
public void setTrafficPercent(TrafficSplitPercentage trafficPercent) {
this.trafficPercent = trafficPercent;
}
/**
* Get the Bearer Parameters.
*
* @return ERABParams
*/
@JsonProperty("BearerParameters")
public ERABParams getBearerParameters() {
return bearerParameters;
}
/**
* Set the Bearer Parameters.
*
* @param bearerParameters ERABParams
*/
@JsonProperty("BearerParameters")
public void setBearerParameters(ERABParams bearerParameters) {
this.bearerParameters = bearerParameters;
}
/**
* Get RRM Configuration.
*
* @return RRMConfig
*/
@JsonProperty("RRMConfiguration")
public RRMConfig getRrmParameters() {
return rrmParameters;
}
/**
* Set RRM Configuration.
*
* @param rrmParameters RRMConfig
*/
@JsonProperty("RRMConfiguration")
public void setRrmParameters(RRMConfig rrmParameters) {
this.rrmParameters = rrmParameters;
}
public Measurements getMeasurements() {
return measurements;
}
public void setMeasurements(Measurements measurements) {
this.measurements = measurements;
}
/**
* Modify the RRM Config parameters of link.
*
* @param rrmConfigNode RRMConfig parameters to modify obtained from REST call
*/
public void modifyRrmParameters(JsonNode rrmConfigNode) {
JsonNode pA = rrmConfigNode.path("p_a");
if (!pA.isMissingNode()) {
RRMConfig.Pa pa = new RRMConfig.Pa();
List<XICICPA> collect = Lists.newArrayList();
collect.add(new XICICPA(pA.asInt()));
pa.getXICICPA().clear();
pa.getXICICPA().addAll(collect);
rrmParameters.setPa(pa);
}
JsonNode startPrbDl1 = rrmConfigNode.path("start_prb_dl");
if (!startPrbDl1.isMissingNode()) {
RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
List<BerInteger> collect = Lists.newArrayList();
collect.add(new BerInteger(startPrbDl1.asInt()));
startPrbDl.getBerInteger().clear();
startPrbDl.getBerInteger().addAll(collect);
rrmParameters.setStartPrbDl(startPrbDl);
}
JsonNode endPrbDl1 = rrmConfigNode.path("end_prb_dl");
if (!endPrbDl1.isMissingNode()) {
RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
List<BerInteger> collect = Lists.newArrayList();
collect.add(new BerInteger(endPrbDl1.asInt()));
endPrbDl.getBerInteger().clear();
endPrbDl.getBerInteger().addAll(collect);
rrmParameters.setEndPrbDl(endPrbDl);
}
JsonNode subFrameBitmaskDl = rrmConfigNode.path("sub_frame_bitmask_dl");
if (!subFrameBitmaskDl.isMissingNode()) {
RRMConfig.SubframeBitmaskDl subframeBitmaskDl = new RRMConfig.SubframeBitmaskDl();
List<BerBitString> collect = Lists.newArrayList();
byte[] hexString = DatatypeConverter.parseHexBinary(subFrameBitmaskDl.asText());
collect.add(new BerBitString(hexString, 10));
subframeBitmaskDl.getBerBitString().clear();
subframeBitmaskDl.getBerBitString().addAll(collect);
rrmParameters.setSubframeBitmaskDl(subframeBitmaskDl);
}
JsonNode startPrbUl1 = rrmConfigNode.path("start_prb_ul");
if (!startPrbUl1.isMissingNode()) {
RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
List<BerInteger> collect = Lists.newArrayList();
collect.add(new BerInteger(startPrbUl1.asInt()));
startPrbUl.getBerInteger().clear();
startPrbUl.getBerInteger().addAll(collect);
rrmParameters.setStartPrbUl(startPrbUl);
}
JsonNode endPrbUl1 = rrmConfigNode.path("end_prb_ul");
if (!endPrbUl1.isMissingNode()) {
RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
List<BerInteger> collect = Lists.newArrayList();
collect.add(new BerInteger(endPrbUl1.asInt()));
endPrbUl.getBerInteger().clear();
endPrbUl.getBerInteger().addAll(collect);
rrmParameters.setEndPrbUl(endPrbUl);
}
JsonNode p0UePusch1 = rrmConfigNode.path("p0_ue_pusch");
if (!p0UePusch1.isMissingNode()) {
RRMConfig.P0UePusch p0UePusch = new RRMConfig.P0UePusch();
List<BerInteger> collect = Lists.newArrayList();
collect.add(new BerInteger(p0UePusch1.asInt()));
p0UePusch.getBerInteger().clear();
p0UePusch.getBerInteger().addAll(collect);
rrmParameters.setP0UePusch(p0UePusch);
}
JsonNode subFrameBitmaskUl = rrmConfigNode.path("sub_frame_bitmask_ul");
if (!subFrameBitmaskUl.isMissingNode()) {
RRMConfig.SubframeBitmaskUl subframeBitmaskUl = new RRMConfig.SubframeBitmaskUl();
List<BerBitString> collect = Lists.newArrayList();
byte[] hexString = DatatypeConverter.parseHexBinary(subFrameBitmaskUl.asText());
collect.add(new BerBitString(hexString, 10));
subframeBitmaskUl.getBerBitString().clear();
subframeBitmaskUl.getBerBitString().addAll(collect);
rrmParameters.setSubframeBitmaskUl(subframeBitmaskUl);
}
}
@Override
public String toString() {
return "RnibLink{" +
"measurements=" + measurements +
", linkId=" + linkId +
", rrmParameters=" + rrmParameters +
", trafficPercent=" + trafficPercent +
", bearerParameters=" + bearerParameters +
", type=" + type +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
RnibLink link = (RnibLink) o;
return linkId.equals(link.linkId);
}
@Override
public int hashCode() {
return linkId.hashCode();
}
/**
* Enum of Link-Type.
*/
public enum Type {
SERVING_PRIMARY("serving/primary") {
@Override
public String toString() {
return "serving/primary";
}
},
SERVING_SECONDARY_CA("serving/secondary/ca") {
@Override
public String toString() {
return "serving/secondary/ca";
}
},
SERVING_SECONDARY_DC("serving/secondary/dc") {
@Override
public String toString() {
return "serving/secondary/dc";
}
},
NON_SERVING("non-serving") {
@Override
public String toString() {
return "non-serving";
}
};
private String name;
Type(String name) {
this.name = name;
}
/**
* Get enum value of link-type.
*
* @param name String representation of Enum Type
* @return Type
*/
public static Type getEnum(String name) {
Optional<Type> any = Arrays.stream(Type.values()).filter(typeStr -> typeStr.name.equals(name)).findAny();
if (any.isPresent()) {
return any.get();
}
throw new IllegalArgumentException("No enum defined for string: " + name);
}
}
@JsonPropertyOrder({
"RXSigReport",
"RadioReport",
"SchedMeasReport",
"PDCPMeasReport",
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Measurements {
@JsonProperty("RXSigReport")
RXSigReport rxSigReport = new RXSigReport();
@JsonProperty("RadioReport")
RadioReport radioReport = new RadioReport();
@JsonProperty("SchedMeasReport")
SchedMeasReport schedMeasReport = new SchedMeasReport();
@JsonProperty("PDCPMeasReport")
PdcpMeasReport pdcpMeasReport = new PdcpMeasReport();
public Measurements() {
}
@JsonCreator
public Measurements(@JsonProperty("RXSigReport") RXSigReport rxSigReport,
@JsonProperty("RadioReport") RadioReport radioReport,
@JsonProperty("SchedMeasReport") SchedMeasReport schedMeasReport,
@JsonProperty("PDCPMeasReport") PdcpMeasReport pdcpMeasReport) {
this.rxSigReport = rxSigReport;
this.radioReport = radioReport;
this.schedMeasReport = schedMeasReport;
this.pdcpMeasReport = pdcpMeasReport;
}
public RXSigReport getRxSigReport() {
return rxSigReport;
}
public void setRxSigReport(RXSigReport rxSigReport) {
this.rxSigReport = rxSigReport;
}
public RadioReport getRadioReport() {
return radioReport;
}
public void setRadioReport(RadioReport radioReport) {
this.radioReport = radioReport;
}
public SchedMeasReport getSchedMeasReport() {
return schedMeasReport;
}
public void setSchedMeasReport(SchedMeasReport schedMeasReport) {
this.schedMeasReport = schedMeasReport;
}
public PdcpMeasReport getPdcpMeasReport() {
return pdcpMeasReport;
}
public void setPdcpMeasReport(PdcpMeasReport pdcpMeasReport) {
this.pdcpMeasReport = pdcpMeasReport;
}
@Override
public String toString() {
return "Measurements{" +
"rxSigReport=" + rxSigReport +
", radioReport=" + radioReport +
", schedMeasReport=" + schedMeasReport +
", pdcpMeasReport=" + pdcpMeasReport +
'}';
}
@JsonPropertyOrder({
"RSRP",
"RSRQ",
"meas-id",
"timestamp"
})
public static class RXSigReport {
@JsonProperty("RSRP")
double rsrp;
@JsonProperty("RSRQ")
double rsrq;
@JsonProperty("meas-id")
RXSigMeasReport.CellMeasReports measReports;
@JsonProperty("timestamp")
WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
public RXSigReport() {
}
@JsonCreator
public RXSigReport(@JsonProperty("RSRP") double rsrp,
@JsonProperty("RSRQ") double rsrq,
@JsonProperty("meas-id") RXSigMeasReport.CellMeasReports measReports
) {
this.rsrp = rsrp;
this.rsrq = rsrq;
this.measReports = measReports;
}
/**
* Get rsrp.
*
* @return double rsrp
*/
public double getRsrp() {
return rsrp;
}
/**
* Set rsrp.
*
* @param rsrp rsrp
*/
public void setRsrp(double rsrp) {
this.rsrp = rsrp;
}
/**
* Get rsrq.
*
* @return double rsrq
*/
public double getRsrq() {
return rsrq;
}
/**
* Set rsrq.
*
* @param rsrq rsrq
*/
public void setRsrq(double rsrq) {
this.rsrq = rsrq;
}
/**
* Get time since last update.
*
* @return long Time
*/
public long getTimesincelastupdate() {
return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
}
/**
* Set time since last update.
*
* @param timesincelastupdate time since last update
*/
public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
this.timesincelastupdate = timesincelastupdate;
}
public RXSigMeasReport.CellMeasReports getMeasReports() {
return measReports;
}
public void setMeasReports(RXSigMeasReport.CellMeasReports measReports) {
this.measReports = measReports;
}
@Override
public String toString() {
return "RXSigReport{" +
"rsrp=" + rsrp +
", rsrq=" + rsrq +
", measReports=" + measReports +
", timestamp=" + getTimesincelastupdate() +
'}';
}
}
@JsonPropertyOrder({
"CQI",
"Rank_hist",
"Pusch_sinr_hist",
"Pucch_sinr_hist",
"timestamp"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class RadioReport {
@JsonProperty("CQI")
Cqi cqi = new Cqi();
@JsonProperty("Rank_hist")
RadioRepPerServCell.RiHist riHist;
@JsonProperty("Pucch_sinr_hist")
RadioRepPerServCell.PucchSinrHist pucchSinrHist;
@JsonProperty("Pusch_sinr_hist")
RadioRepPerServCell.PuschSinrHist puschSinrHist;
@JsonProperty("timestamp")
WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
public RadioReport() {
}
@JsonCreator
public RadioReport(@JsonProperty("CQI") Cqi cqi,
@JsonProperty("Rank_hist") RadioRepPerServCell.RiHist riHist,
@JsonProperty("Pucch_sinr_hist") RadioRepPerServCell.PucchSinrHist pucchSinrHist,
@JsonProperty("Pusch_sinr_hist") RadioRepPerServCell.PuschSinrHist puschSinrHist) {
this.cqi = cqi;
this.riHist = riHist;
this.pucchSinrHist = pucchSinrHist;
this.puschSinrHist = puschSinrHist;
}
public Cqi getCqi() {
return cqi;
}
public void setCqi(Cqi cqi) {
this.cqi = cqi;
}
public RadioRepPerServCell.RiHist getRiHist() {
return riHist;
}
public void setRiHist(RadioRepPerServCell.RiHist riHist) {
this.riHist = riHist;
}
public RadioRepPerServCell.PucchSinrHist getPucchSinrHist() {
return pucchSinrHist;
}
public void setPucchSinrHist(RadioRepPerServCell.PucchSinrHist pucchSinrHist) {
this.pucchSinrHist = pucchSinrHist;
}
public RadioRepPerServCell.PuschSinrHist getPuschSinrHist() {
return puschSinrHist;
}
public void setPuschSinrHist(RadioRepPerServCell.PuschSinrHist puschSinrHist) {
this.puschSinrHist = puschSinrHist;
}
/**
* Get time since last update.
*
* @return long Time
*/
public long getTimesincelastupdate() {
return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
}
public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
this.timesincelastupdate = timesincelastupdate;
}
@Override
public String toString() {
return "RadioReport{" +
"cqi=" + cqi +
", riHist=" + riHist +
", pucchSinrHist=" + pucchSinrHist +
", puschSinrHist=" + puschSinrHist +
", timestamp=" + getTimesincelastupdate() +
'}';
}
@JsonPropertyOrder({
"Hist",
"Mode",
"Mean",
"timestamp"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Cqi {
@JsonProperty("Hist")
RadioRepPerServCell.CqiHist hist;
@JsonProperty("Mode")
double mode;
@JsonProperty("Mean")
double mean;
public Cqi() {
}
@JsonCreator
public Cqi(@JsonProperty("Hist") RadioRepPerServCell.CqiHist hist,
@JsonProperty("Mode") double mode,
@JsonProperty("Mean") double mean) {
this.hist = hist;
this.mode = mode;
this.mean = mean;
}
/**
* Get CQIHist.
*
* @return CqiHist
*/
public RadioRepPerServCell.CqiHist getHist() {
return hist;
}
/**
* Get CQIHist.
*
* @param hist CqiHist
*/
public void setHist(RadioRepPerServCell.CqiHist hist) {
this.hist = hist;
}
/**
* Get mode.
*
* @return double mode
*/
public double getMode() {
return mode;
}
/**
* Set mode.
*
* @param mode mode
*/
public void setMode(double mode) {
this.mode = mode;
}
/**
* Get mean.
*
* @return double mean
*/
public double getMean() {
return mean;
}
/**
* Set mean.
*
* @param mean mean
*/
public void setMean(double mean) {
this.mean = mean;
}
@Override
public String toString() {
return "Cqi{" +
"hist=" + hist +
", mode=" + mode +
", mean=" + mean +
'}';
}
}
}
@JsonPropertyOrder({
"QCI",
"ResourceUsage",
"MCS",
"Num_Sched_TTIs",
"DL_rank_stats",
"timestamp"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class SchedMeasReport {
@JsonProperty("QCI")
SchedMeasRepPerServCell.QciVals qci;
@JsonProperty("ResourceUsage")
ResourceUsage resourceUsage = new ResourceUsage();
@JsonProperty("MCS")
Mcs mcs = new Mcs();
@JsonProperty("Num_Sched_TTIs")
NumSchedTtis numSchedTtis = new NumSchedTtis();
@JsonProperty("DL_rank_stats")
DlRankStats dlRankStats = new DlRankStats();
@JsonProperty("timestamp")
WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
public SchedMeasReport() {
}
@JsonCreator
public SchedMeasReport(
@JsonProperty("QCI") SchedMeasRepPerServCell.QciVals qci,
@JsonProperty("ResourceUsage") ResourceUsage resourceUsage,
@JsonProperty("MCS") Mcs mcs,
@JsonProperty("Num_Sched_TTIs") NumSchedTtis numSchedTtis,
@JsonProperty("DL_rank_stats") DlRankStats dlRankStats
) {
this.qci = qci;
this.resourceUsage = resourceUsage;
this.mcs = mcs;
this.numSchedTtis = numSchedTtis;
this.dlRankStats = dlRankStats;
}
public SchedMeasRepPerServCell.QciVals getQci() {
return qci;
}
public void setQci(SchedMeasRepPerServCell.QciVals qci) {
this.qci = qci;
}
public ResourceUsage getResourceUsage() {
return resourceUsage;
}
public void setResourceUsage(ResourceUsage resourceUsage) {
this.resourceUsage = resourceUsage;
}
public Mcs getMcs() {
return mcs;
}
public void setMcs(Mcs mcs) {
this.mcs = mcs;
}
public NumSchedTtis getNumSchedTtis() {
return numSchedTtis;
}
public void setNumSchedTtis(NumSchedTtis numSchedTtis) {
this.numSchedTtis = numSchedTtis;
}
public DlRankStats getDlRankStats() {
return dlRankStats;
}
public void setDlRankStats(DlRankStats dlRankStats) {
this.dlRankStats = dlRankStats;
}
public long getTimesincelastupdate() {
return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
}
public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
this.timesincelastupdate = timesincelastupdate;
}
@Override
public String toString() {
return "SchedMeasReport{" +
"qci=" + qci +
", resourceUsage=" + resourceUsage +
", mcs=" + mcs +
", numSchedTtis=" + numSchedTtis +
", dlRankStats=" + dlRankStats +
", timesincelastupdate=" + getTimesincelastupdate() +
'}';
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class ResourceUsage {
@JsonProperty("dl")
PRBUsage.PrbUsageDl dl;
@JsonProperty("ul")
PRBUsage.PrbUsageUl ul;
public ResourceUsage() {
}
@JsonCreator
public ResourceUsage(@JsonProperty("dl") PRBUsage.PrbUsageDl dl,
@JsonProperty("ul") PRBUsage.PrbUsageUl ul) {
this.dl = dl;
this.ul = ul;
}
/**
* Get DL.
*
* @return Dl
*/
public PRBUsage.PrbUsageDl getDl() {
return dl;
}
/**
* Set DL.
*
* @param dl DL
*/
public void setDl(PRBUsage.PrbUsageDl dl) {
this.dl = dl;
}
/**
* Get UL.
*
* @return Ul
*/
public PRBUsage.PrbUsageUl getUl() {
return ul;
}
/**
* Set UL.
*
* @param ul Ul
*/
public void setUl(PRBUsage.PrbUsageUl ul) {
this.ul = ul;
}
@Override
public String toString() {
return "ResourceUsage{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Mcs {
SchedMeasRepPerServCell.McsDl dl;
SchedMeasRepPerServCell.McsUl ul;
public Mcs() {
}
@JsonCreator
public Mcs(@JsonProperty("dl") SchedMeasRepPerServCell.McsDl dl,
@JsonProperty("ul") SchedMeasRepPerServCell.McsUl ul) {
this.dl = dl;
this.ul = ul;
}
/**
* Get DL.
*
* @return Dl
*/
public SchedMeasRepPerServCell.McsDl getDl() {
return dl;
}
/**
* Set DL.
*
* @param dl DL
*/
public void setDl(SchedMeasRepPerServCell.McsDl dl) {
this.dl = dl;
}
/**
* Get UL.
*
* @return Ul
*/
public SchedMeasRepPerServCell.McsUl getUl() {
return ul;
}
/**
* Set UL.
*
* @param ul Ul
*/
public void setUl(SchedMeasRepPerServCell.McsUl ul) {
this.ul = ul;
}
@Override
public String toString() {
return "mcs{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class NumSchedTtis {
@JsonProperty("dl")
SchedMeasRepPerServCell.NumSchedTtisDl dl;
@JsonProperty("ul")
SchedMeasRepPerServCell.NumSchedTtisUl ul;
public NumSchedTtis() {
}
@JsonCreator
public NumSchedTtis(@JsonProperty("dl") SchedMeasRepPerServCell.NumSchedTtisDl dl,
@JsonProperty("ul") SchedMeasRepPerServCell.NumSchedTtisUl ul) {
this.dl = dl;
this.ul = ul;
}
public SchedMeasRepPerServCell.NumSchedTtisDl getDl() {
return dl;
}
public void setDl(SchedMeasRepPerServCell.NumSchedTtisDl dl) {
this.dl = dl;
}
public SchedMeasRepPerServCell.NumSchedTtisUl getUl() {
return ul;
}
public void setUl(SchedMeasRepPerServCell.NumSchedTtisUl ul) {
this.ul = ul;
}
@Override
public String toString() {
return "NumSchedTtis{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
@JsonPropertyOrder({
"Rank-1",
"Rank-2"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class DlRankStats {
@JsonProperty("Rank-1")
SchedMeasRepPerServCell.RankDl1 rankDl1;
@JsonProperty("Rank-2")
SchedMeasRepPerServCell.RankDl2 rankDl2;
public DlRankStats() {
}
@JsonCreator
public DlRankStats(@JsonProperty("Rank-1") SchedMeasRepPerServCell.RankDl1 rankDl1,
@JsonProperty("Rank-2") SchedMeasRepPerServCell.RankDl2 rankDl2) {
this.rankDl1 = rankDl1;
this.rankDl2 = rankDl2;
}
public SchedMeasRepPerServCell.RankDl1 getRankDl1() {
return rankDl1;
}
public void setRankDl1(SchedMeasRepPerServCell.RankDl1 rankDl1) {
this.rankDl1 = rankDl1;
}
public SchedMeasRepPerServCell.RankDl2 getRankDl2() {
return rankDl2;
}
public void setRankDl2(SchedMeasRepPerServCell.RankDl2 rankDl2) {
this.rankDl2 = rankDl2;
}
@Override
public String toString() {
return "DlRankStats{" +
"rankDl1=" + rankDl1 +
", rankDl2=" + rankDl2 +
'}';
}
}
}
@JsonPropertyOrder({
"QCI",
"PDCPThroughput",
"Data_vol",
"Pkt_delay_dl",
"Pkt_discard_rate_dl",
"Pkt_loss_rate",
"timestamp"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PdcpMeasReport {
@JsonProperty("QCI")
PDCPMeasReportPerUe.QciVals qci = new PDCPMeasReportPerUe.QciVals();
@JsonProperty("PDCPThroughput")
PdcpThroughput pdcpThroughput = new PdcpThroughput();
@JsonProperty("Data_vol")
DataVol dataVol = new DataVol();
@JsonProperty("Pkt_delay_dl")
PDCPMeasReportPerUe.PktDelayDl pktDelayDl;
@JsonProperty("Pkt_discard_rate_dl")
PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl;
@JsonProperty("Pkt_loss_rate")
PktLossRate pktLossRate = new PktLossRate();
@JsonProperty("timestamp")
WallClockTimestamp timesincelastupdate = new WallClockTimestamp();
public PdcpMeasReport() {
}
@JsonCreator
public PdcpMeasReport(
@JsonProperty("QCI") PDCPMeasReportPerUe.QciVals qci,
@JsonProperty("PDCPThroughput") PdcpThroughput pdcpThroughput,
@JsonProperty("Data_vol") DataVol dataVol,
@JsonProperty("Pkt_delay_dl") PDCPMeasReportPerUe.PktDelayDl pktDelayDl,
@JsonProperty("Pkt_discard_rate_dl") PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl,
@JsonProperty("Pkt_loss_rate") PktLossRate pktLossRate
) {
this.qci = qci;
this.pdcpThroughput = pdcpThroughput;
this.dataVol = dataVol;
this.pktDelayDl = pktDelayDl;
this.pktDiscardRateDl = pktDiscardRateDl;
this.pktLossRate = pktLossRate;
}
public PDCPMeasReportPerUe.QciVals getQci() {
return qci;
}
public void setQci(PDCPMeasReportPerUe.QciVals qci) {
this.qci = qci;
}
public PdcpThroughput getPdcpThroughput() {
return pdcpThroughput;
}
public void setPdcpThroughput(PdcpThroughput pdcpThroughput) {
this.pdcpThroughput = pdcpThroughput;
}
public DataVol getDataVol() {
return dataVol;
}
public void setDataVol(DataVol dataVol) {
this.dataVol = dataVol;
}
public PDCPMeasReportPerUe.PktDelayDl getPktDelayDl() {
return pktDelayDl;
}
public void setPktDelayDl(PDCPMeasReportPerUe.PktDelayDl pktDelayDl) {
this.pktDelayDl = pktDelayDl;
}
public PDCPMeasReportPerUe.PktDiscardRateDl getPktDiscardRateDl() {
return pktDiscardRateDl;
}
public void setPktDiscardRateDl(PDCPMeasReportPerUe.PktDiscardRateDl pktDiscardRateDl) {
this.pktDiscardRateDl = pktDiscardRateDl;
}
public PktLossRate getPktLossRate() {
return pktLossRate;
}
public void setPktLossRate(PktLossRate pktLossRate) {
this.pktLossRate = pktLossRate;
}
public long getTimesincelastupdate() {
return new WallClockTimestamp().unixTimestamp() - timesincelastupdate.unixTimestamp();
}
public void setTimesincelastupdate(WallClockTimestamp timesincelastupdate) {
this.timesincelastupdate = timesincelastupdate;
}
@Override
public String toString() {
return "PdcpMeasReport{" +
"qci=" + qci +
", pdcpThroughput=" + pdcpThroughput +
", dataVol=" + dataVol +
", pktDelayDl=" + pktDelayDl +
", pktDiscardRateDl=" + pktDiscardRateDl +
", pktLossRate=" + pktLossRate +
", timesincelastupdate=" + getTimesincelastupdate() +
'}';
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PdcpThroughput {
@JsonProperty("dl")
private PDCPMeasReportPerUe.ThroughputDl dl;
@JsonProperty("ul")
private PDCPMeasReportPerUe.ThroughputUl ul;
public PdcpThroughput() {
}
@JsonCreator
public PdcpThroughput(@JsonProperty("dl") PDCPMeasReportPerUe.ThroughputDl dl,
@JsonProperty("ul") PDCPMeasReportPerUe.ThroughputUl ul) {
this.dl = dl;
this.ul = ul;
}
/**
* Get DL.
*
* @return Dl
*/
public PDCPMeasReportPerUe.ThroughputDl getDl() {
return dl;
}
/**
* Set DL.
*
* @param dl DL
*/
public void setDl(PDCPMeasReportPerUe.ThroughputDl dl) {
this.dl = dl;
}
/**
* Get UL.
*
* @return Ul
*/
public PDCPMeasReportPerUe.ThroughputUl getUl() {
return ul;
}
/**
* Set UL.
*
* @param ul Ul
*/
public void setUl(PDCPMeasReportPerUe.ThroughputUl ul) {
this.ul = ul;
}
@Override
public String
toString() {
return "PdcpThroughput{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class DataVol {
@JsonProperty("dl")
private PDCPMeasReportPerUe.DataVolDl dl;
@JsonProperty("ul")
private PDCPMeasReportPerUe.DataVolUl ul;
public DataVol() {
}
@JsonCreator
public DataVol(@JsonProperty("dl") PDCPMeasReportPerUe.DataVolDl dl,
@JsonProperty("ul") PDCPMeasReportPerUe.DataVolUl ul) {
this.dl = dl;
this.ul = ul;
}
/**
* Get DL.
*
* @return Dl
*/
public PDCPMeasReportPerUe.DataVolDl getDl() {
return dl;
}
/**
* Set DL.
*
* @param dl DL
*/
public void setDl(PDCPMeasReportPerUe.DataVolDl dl) {
this.dl = dl;
}
/**
* Get UL.
*
* @return Ul
*/
public PDCPMeasReportPerUe.DataVolUl getUl() {
return ul;
}
/**
* Set UL.
*
* @param ul Ul
*/
public void setUl(PDCPMeasReportPerUe.DataVolUl ul) {
this.ul = ul;
}
@Override
public String
toString() {
return "PdcpThroughput{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
@JsonPropertyOrder({
"dl",
"ul"
})
@JsonIgnoreProperties(ignoreUnknown = true)
public static class PktLossRate {
@JsonProperty("dl")
PDCPMeasReportPerUe.PktLossRateDl dl;
@JsonProperty("ul")
PDCPMeasReportPerUe.PktLossRateUl ul;
public PktLossRate() {
}
@JsonCreator
public PktLossRate(@JsonProperty("dl") PDCPMeasReportPerUe.PktLossRateDl dl,
@JsonProperty("ul") PDCPMeasReportPerUe.PktLossRateUl ul) {
this.dl = dl;
this.ul = ul;
}
/**
* Get DL.
*
* @return Dl
*/
public PDCPMeasReportPerUe.PktLossRateDl getDl() {
return dl;
}
/**
* Set DL.
*
* @param dl DL
*/
public void setDl(PDCPMeasReportPerUe.PktLossRateDl dl) {
this.dl = dl;
}
/**
* Get UL.
*
* @return Ul
*/
public PDCPMeasReportPerUe.PktLossRateUl getUl() {
return ul;
}
/**
* Set UL.
*
* @param ul Ul
*/
public void setUl(PDCPMeasReportPerUe.PktLossRateUl ul) {
this.ul = ul;
}
@Override
public String toString() {
return "PdcpPacketdelay{" +
"dl=" + dl +
", ul=" + ul +
'}';
}
}
}
}
}