initial commit
diff --git a/src/main/java/org.onosproject.xran/entities/RnibLink.java b/src/main/java/org.onosproject.xran/entities/RnibLink.java
new file mode 100644
index 0000000..eb61120
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/entities/RnibLink.java
@@ -0,0 +1,370 @@
+/*
+ * Copyright 2015-present Open Networking Laboratory
+ *
+ * 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.entities;
+
+import org.onosproject.xran.codecs.api.*;
+import org.onosproject.xran.codecs.pdu.PDCPMeasReportPerUe;
+import org.onosproject.xran.codecs.pdu.RRMConfig;
+import org.onosproject.xran.identifiers.LinkId;
+import org.openmuc.jasn1.ber.types.BerInteger;
+
+import java.util.Timer;
+
+/**
+ * Created by dimitris on 7/22/17.
+ */
+public class RnibLink {
+ private LinkId linkId;
+ // private String type;
+ private RRMConfig rrmParameters;
+
+ private TrafficSplitPercentage trafficPercent;
+ private ERABParams bearerParameters;
+
+ private LinkQuality quality;
+ private PDCPThroughput pdcpThroughput;
+ private PDCPPacketDelay pdcpPackDelay;
+ private ResourceUsage resourceUsage;
+ private Type type;
+ private Timer timer;
+
+ public RnibLink() {
+ trafficPercent = new TrafficSplitPercentage();
+ trafficPercent.setTrafficPercentDl(new BerInteger(100));
+ trafficPercent.setTrafficPercentUl(new BerInteger(100));
+
+ pdcpThroughput = new PDCPThroughput();
+ quality = new LinkQuality();
+ pdcpPackDelay = new PDCPPacketDelay();
+ resourceUsage = new ResourceUsage();
+ timer = new Timer();
+ }
+
+ public Timer getTimer() {
+ return timer;
+ }
+
+ public void setTimer(Timer timer) {
+ this.timer.cancel();
+ this.timer.purge();
+ this.timer = timer;
+ }
+
+ public LinkId getLinkId() {
+ return linkId;
+ }
+
+ public void setLinkId(LinkId linkId) {
+ this.linkId = linkId;
+ }
+
+ public void setLinkId(RnibCell cell, RnibUe ue) {
+ this.linkId = new LinkId(cell.getEcgi(), ue.getMmeS1apId());
+ trafficPercent.setEcgi(cell.getEcgi());
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+
+ public TrafficSplitPercentage getTrafficPercent() {
+ return trafficPercent;
+ }
+
+ public void setTrafficPercent(TrafficSplitPercentage trafficPercent) {
+ this.trafficPercent = trafficPercent;
+ }
+
+ public ERABParams getBearerParameters() {
+ return bearerParameters;
+ }
+
+ public void setBearerParameters(ERABParams bearerParameters) {
+ this.bearerParameters = bearerParameters;
+ }
+
+ public LinkQuality getQuality() {
+ return quality;
+ }
+
+ public void setQuality(LinkQuality quality) {
+ this.quality = quality;
+ }
+
+ public RRMConfig getRrmParameters() {
+ return rrmParameters;
+ }
+
+ public void setRrmParameters(RRMConfig rrmParameters) {
+ this.rrmParameters = rrmParameters;
+ }
+
+ public PDCPThroughput getPdcpThroughput() {
+ return pdcpThroughput;
+ }
+
+ public void setPdcpThroughput(PDCPThroughput pdcpThroughput) {
+ this.pdcpThroughput = pdcpThroughput;
+ }
+
+ public PDCPPacketDelay getPdcpPackDelay() {
+ return pdcpPackDelay;
+ }
+
+ public void setPdcpPackDelay(PDCPPacketDelay pdcpPackDelay) {
+ this.pdcpPackDelay = pdcpPackDelay;
+ }
+
+ public ResourceUsage getResourceUsage() {
+ return resourceUsage;
+ }
+
+ public void setResourceUsage(ResourceUsage resourceUsage) {
+ this.resourceUsage = resourceUsage;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(linkId != null ? "\"link-id\":" + linkId : "")
+ .append(type != null ? ",\n\"type\":" + type : "")
+ .append(rrmParameters != null ? ",\n\"rrm-params\":" + rrmParameters : "")
+ .append(trafficPercent != null ? ",\n\"traffic-percent\":" + trafficPercent : "")
+ .append(bearerParameters != null ? ",\n\"bearer-params\":" + bearerParameters : "")
+ .append(quality != null ? ",\n\"quality\":" + quality : "")
+ .append(pdcpThroughput != null ? ",\n\"pdcp-throughput\":" + pdcpThroughput : "")
+ .append(pdcpPackDelay != null ? ",\n\"pdcp-packet-delay\":" + pdcpPackDelay : "")
+ .append(resourceUsage != null ? ",\n\"resource-usage\":" + resourceUsage : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+
+ @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();
+ }
+
+ public enum Type {
+ SERVING_PRIMARY {
+ @Override
+ public String toString() {
+ return "\"serving/primary\"";
+ }
+ },
+ // TODO: Add CA/DC
+ SERVING_SECONDARY {
+ @Override
+ public String toString() {
+ return "\"serving/secondary\"";
+ }
+ },
+ NON_SERVING {
+ @Override
+ public String toString() {
+ return "\"non-serving\"";
+ }
+ }
+ }
+
+ public class PDCPThroughput {
+ private PDCPMeasReportPerUe.ThroughputDl dl;
+ private PDCPMeasReportPerUe.ThroughputUl ul;
+
+ public PDCPMeasReportPerUe.ThroughputDl getDl() {
+ return dl;
+ }
+
+ public void setDl(PDCPMeasReportPerUe.ThroughputDl dl) {
+ this.dl = dl;
+ }
+
+ public PDCPMeasReportPerUe.ThroughputUl getUl() {
+ return ul;
+ }
+
+ public void setUl(PDCPMeasReportPerUe.ThroughputUl ul) {
+ this.ul = ul;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(dl != null ? "\"dl\":" + dl : "")
+ .append(ul != null ? ",\n\"ul\":" + ul : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+ }
+
+ public class PDCPPacketDelay {
+ PDCPMeasReportPerUe.PktDelayDl dl;
+ PDCPMeasReportPerUe.PktDelayUl ul;
+
+ public PDCPMeasReportPerUe.PktDelayDl getDl() {
+ return dl;
+ }
+
+ public void setDl(PDCPMeasReportPerUe.PktDelayDl dl) {
+ this.dl = dl;
+ }
+
+ public PDCPMeasReportPerUe.PktDelayUl getUl() {
+ return ul;
+ }
+
+ public void setUl(PDCPMeasReportPerUe.PktDelayUl ul) {
+ this.ul = ul;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(dl != null ? "\"dl\":" + dl : "")
+ .append(ul != null ? ",\n\"ul\":" + ul : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+ }
+
+ public class ResourceUsage {
+ PRBUsage.PrbUsageDl dl;
+ PRBUsage.PrbUsageUl ul;
+
+ public PRBUsage.PrbUsageDl getDl() {
+ return dl;
+ }
+
+ public void setDl(PRBUsage.PrbUsageDl dl) {
+ this.dl = dl;
+ }
+
+ public PRBUsage.PrbUsageUl getUl() {
+ return ul;
+ }
+
+ public void setUl(PRBUsage.PrbUsageUl ul) {
+ this.ul = ul;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(dl != null ? "\"dl\":" + dl : "")
+ .append(ul != null ? ",\n\"ul\":" + ul : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+ }
+
+ public class LinkQuality {
+ double rsrp;
+ double rsrq;
+ RadioRepPerServCell.CqiHist cqiHist;
+ double cqiMode;
+ double cqiMean;
+ SchedMeasRepPerServCell.McsDl mcs_dl;
+ SchedMeasRepPerServCell.McsUl mcs_ul;
+
+ public double getRsrp() {
+ return rsrp;
+ }
+
+ public void setRsrp(double rsrp) {
+ this.rsrp = rsrp;
+ }
+
+ public double getRsrq() {
+ return rsrq;
+ }
+
+ public void setRsrq(double rsrq) {
+ this.rsrq = rsrq;
+ }
+
+ public RadioRepPerServCell.CqiHist getCqiHist() {
+ return cqiHist;
+ }
+
+ public void setCqiHist(RadioRepPerServCell.CqiHist cqiHist) {
+ this.cqiHist = cqiHist;
+ }
+
+ public double getCqiMode() {
+ return cqiMode;
+ }
+
+ public void setCqiMode(double cqiMode) {
+ this.cqiMode = cqiMode;
+ }
+
+ public double getCqiMean() {
+ return cqiMean;
+ }
+
+ public void setCqiMean(double cqiMean) {
+ this.cqiMean = cqiMean;
+ }
+
+ public SchedMeasRepPerServCell.McsDl getMcs_dl() {
+ return mcs_dl;
+ }
+
+ public void setMcs_dl(SchedMeasRepPerServCell.McsDl mcs_dl) {
+ this.mcs_dl = mcs_dl;
+ }
+
+ public SchedMeasRepPerServCell.McsUl getMcs_ul() {
+ return mcs_ul;
+ }
+
+ public void setMcs_ul(SchedMeasRepPerServCell.McsUl mcs_ul) {
+ this.mcs_ul = mcs_ul;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append("\"rsrp\":" + rsrp)
+ .append(",\n\"rsrq\":" + rsrq)
+ .append(",\n\"cqiMode\":" + cqiMode)
+ .append(",\n\"cqiMean\":" + cqiMean)
+ .append(mcs_dl != null ? ",\n\"mcs-dl\":" + mcs_dl : "")
+ .append(mcs_ul != null ? ",\n\"mcs-ul\":" + mcs_ul : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+ }
+}