initial commit
diff --git a/src/main/java/org.onosproject.xran/entities/RnibCell.java b/src/main/java/org.onosproject.xran/entities/RnibCell.java
new file mode 100644
index 0000000..3aa5c89
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/entities/RnibCell.java
@@ -0,0 +1,171 @@
+/*
+ * 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 com.fasterxml.jackson.databind.JsonNode;
+import org.onosproject.net.DeviceId;
+import org.onosproject.xran.codecs.api.ECGI;
+import org.onosproject.xran.codecs.api.MMEUES1APID;
+import org.onosproject.xran.codecs.api.PRBUsage;
+import org.onosproject.xran.codecs.pdu.CellConfigReport;
+import org.onosproject.xran.codecs.pdu.L2MeasConfig;
+import org.onosproject.xran.codecs.pdu.RRMConfig;
+import org.onosproject.xran.codecs.pdu.SchedMeasReportPerCell;
+import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
+
+import javax.xml.bind.DatatypeConverter;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+/**
+ * Created by dimitris on 7/22/17.
+ */
+public class RnibCell {
+ private static final String SCHEME = "xran";
+
+ private ECGI ecgi;
+ private CellConfigReport conf;
+ private PrbUsageContainer prbUsage;
+ private SchedMeasReportPerCell.QciVals qci;
+ private RRMConfig rrmConfig;
+ private L2MeasConfig measConfig;
+
+ public RnibCell() {
+ prbUsage = new PrbUsageContainer();
+ }
+
+ public static URI uri(ECGI ecgi) {
+ if (ecgi != null) {
+ try {
+ BerByteArrayOutputStream os = new BerByteArrayOutputStream(4096);
+ ecgi.encode(os);
+ String message = DatatypeConverter.printHexBinary(os.getArray());
+ return new URI(SCHEME, message, null);
+ } catch (URISyntaxException | IOException e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ public static ECGI decodeDeviceId(DeviceId deviceId) throws IOException {
+ String uri = deviceId.toString();
+ String hexEcgi = uri.substring(uri.lastIndexOf("xran:") + 5);
+
+ ECGI ecgi = new ECGI();
+ byte[] bytearray = DatatypeConverter.parseHexBinary(hexEcgi);
+ InputStream inputStream = new ByteArrayInputStream(bytearray);
+
+ ecgi.decode(inputStream);
+ return ecgi;
+ }
+
+ public ECGI getEcgi() {
+ return ecgi;
+ }
+
+ public void setEcgi(ECGI ecgi) {
+ this.ecgi = ecgi;
+ }
+
+ public CellConfigReport getConf() {
+ return conf;
+ }
+
+ public void setConf(CellConfigReport conf) {
+ this.conf = conf;
+ }
+
+ public RRMConfig getRrmConfig() {
+ return rrmConfig;
+ }
+
+ public void modifyRrmConfig(JsonNode rrmConfig) {
+ // TODO
+ }
+
+ public SchedMeasReportPerCell.QciVals getQci() {
+ return qci;
+ }
+
+ public void setQci(SchedMeasReportPerCell.QciVals qci) {
+ this.qci = qci;
+ }
+
+ public void setPrimaryPrbUsage(PRBUsage primary) {
+ this.prbUsage.primary = primary;
+ }
+
+ public void setSecondaryPrbUsage(PRBUsage secondary) {
+ this.prbUsage.secondary = secondary;
+ }
+
+ public L2MeasConfig getMeasConfig() {
+ return measConfig;
+ }
+
+ public void setMeasConfig(L2MeasConfig measConfig) {
+ this.measConfig = measConfig;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(ecgi != null ? "\"ecgi\":" + ecgi : "")
+ .append(conf != null ? ",\n\"config-report\":" + conf : "")
+ .append(prbUsage != null ? ",\n\"prb-usage\":" + prbUsage : "")
+ .append(qci != null ? ",\n\"qci-vals\":" + qci : "")
+ .append(rrmConfig != null ? ",\n\"rrm-config\":" + rrmConfig : "")
+ .append(measConfig != null ? ",\n\"l2-meas-config\":" + measConfig : "")
+ .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;
+
+ RnibCell rnibCell = (RnibCell) o;
+
+ return ecgi.equals(rnibCell.ecgi);
+ }
+
+ @Override
+ public int hashCode() {
+ return ecgi.hashCode();
+ }
+
+ class PrbUsageContainer {
+ PRBUsage primary;
+ PRBUsage secondary;
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(primary != null ? "\"primary\":" + primary : "")
+ .append(secondary != null ? ",\n\"secondary\":" + secondary : "")
+ .append("\n}\n");
+ return sb.toString();
+ }
+ }
+}
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();
+ }
+ }
+}
diff --git a/src/main/java/org.onosproject.xran/entities/RnibSlice.java b/src/main/java/org.onosproject.xran/entities/RnibSlice.java
new file mode 100644
index 0000000..349e8ee
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/entities/RnibSlice.java
@@ -0,0 +1,34 @@
+/*
+ * 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 java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by dimitris on 7/22/17.
+ */
+public class RnibSlice {
+ private long sliceId;
+ private Set<RnibLink> links;
+ private Map<String, String> ran2epc;
+ private long validityPeriod;
+ private Object desiredKpis;
+ private Object deliveredKpis;
+ private Object rrmSonConfiguration;
+
+}
diff --git a/src/main/java/org.onosproject.xran/entities/RnibUe.java b/src/main/java/org.onosproject.xran/entities/RnibUe.java
new file mode 100644
index 0000000..2be3e01
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/entities/RnibUe.java
@@ -0,0 +1,231 @@
+/*
+ * 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.onlab.packet.MacAddress;
+import org.onosproject.net.HostId;
+import org.onosproject.xran.codecs.api.CRNTI;
+import org.onosproject.xran.codecs.api.ENBUES1APID;
+import org.onosproject.xran.codecs.api.MMEUES1APID;
+import org.onosproject.xran.codecs.pdu.RXSigMeasConfig;
+import org.onosproject.xran.codecs.pdu.UECapabilityInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Timer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.onosproject.net.HostId.hostId;
+
+/**
+ * Created by dimitris on 7/22/17.
+ */
+public class RnibUe {
+
+ private static final String SCHEME = "xran";
+
+ private static final Logger log =
+ LoggerFactory.getLogger(RnibUe.class);
+
+ private String imsi;
+ private ENBUES1APID enbS1apId;
+ private MMEUES1APID mmeS1apId;
+ private CRNTI ranId;
+ private UeState ueState;
+ private UECapabilityInfo capability;
+ private RXSigMeasConfig measConfig;
+ private Timer timer;
+
+ public RnibUe() {
+ ueState = UeState.ACTIVE;
+ timer = new Timer();
+ }
+
+ public static URI uri(RnibUe ue) {
+ MMEUES1APID mmeS1apId = ue.getMmeS1apId();
+ if (mmeS1apId != null) {
+ try {
+ return new URI(SCHEME, mmeS1apId.toString(), null);
+ } catch (URISyntaxException e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ public static MMEUES1APID hostIdtoMME(HostId hostId) {
+ String mac = hostId.mac().toString();
+ mac = mac.replace(":", "");
+ long l = Long.parseLong(mac, 16);
+ return new MMEUES1APID(l);
+ }
+
+ public Timer getTimer() {
+ return timer;
+ }
+
+ public void setTimer(Timer timer) {
+ this.timer.cancel();
+ this.timer.purge();
+ this.timer = timer;
+ }
+
+ public MMEUES1APID getMmeS1apId() {
+ return mmeS1apId;
+ }
+
+ public void setMmeS1apId(MMEUES1APID mmeS1apId) {
+ this.mmeS1apId = mmeS1apId;
+ }
+
+ public ENBUES1APID getEnbS1apId() {
+ return enbS1apId;
+ }
+
+ public void setEnbS1apId(ENBUES1APID enbS1apId) {
+ this.enbS1apId = enbS1apId;
+ }
+
+ public CRNTI getRanId() {
+ return ranId;
+ }
+
+ public void setRanId(CRNTI ranId) {
+ this.ranId = ranId;
+ }
+
+ public String getImsi() {
+ return imsi;
+ }
+
+ public void setImsi(String imsi) {
+ this.imsi = imsi;
+ }
+
+ public HostId getHostId() {
+ try {
+ String text = this.mmeS1apId.value.toString(16),
+ res = "";
+ int charsLeft = 12 - text.length();
+ if (charsLeft > 0) {
+ res += Stream.generate(() -> "0").limit(charsLeft).collect(Collectors.joining(""));
+ } else if (charsLeft < 0) {
+ return null;
+ }
+ res += text;
+
+ String insert = ":";
+ int period = 2;
+
+ StringBuilder builder = new StringBuilder(
+ res.length() + insert.length() * (res.length() / period) + 1);
+
+ int index = 0;
+ String prefix = "";
+ while (index < res.length()) {
+ // Don't putPrimaryLink the insert in the very first iteration.
+ // This is easier than appending it *after* each substring
+ builder.append(prefix);
+ prefix = insert;
+ builder.append(res.substring(index,
+ Math.min(index + period, res.length())));
+ index += period;
+ }
+
+ return hostId(MacAddress.valueOf(builder.toString()));
+ } catch (Exception e) {
+ log.warn(e.getMessage());
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ public RXSigMeasConfig getMeasConfig() {
+ return measConfig;
+ }
+
+ public void setMeasConfig(RXSigMeasConfig measConfig) {
+ this.measConfig = measConfig;
+ }
+
+ public UECapabilityInfo getCapability() {
+ return capability;
+ }
+
+ public void setCapability(UECapabilityInfo capability) {
+ this.capability = capability;
+ }
+
+ public UeState getUeState() {
+ return ueState;
+ }
+
+ public void setUeState(UeState ueState) {
+ this.ueState = ueState;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{\n")
+ .append(mmeS1apId != null ? "\n\"mme-s1-ap-id\":" + mmeS1apId : "")
+ .append(enbS1apId != null ? ",\n\"enb-s1-ap-id\":" + enbS1apId : "")
+ .append(imsi != null ? ",\"imsi\":" + imsi : "")
+ .append(ranId != null ? ",\n\"ran-id\":" + ranId : "")
+ .append(ueState != null ? ",\n\"state\":" + ueState : "")
+ .append(capability != null ? ",\n\"capability\":" + capability : "")
+ .append(measConfig != null ? ",\n\"meas-config\":" + measConfig : "")
+ .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;
+
+ RnibUe rnibUe = (RnibUe) o;
+
+ return mmeS1apId.equals(rnibUe.mmeS1apId) && ranId.equals(rnibUe.ranId);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = mmeS1apId.hashCode();
+ result = 31 * result + ranId.hashCode();
+ return result;
+ }
+
+ public enum UeState {
+ ACTIVE {
+ @Override
+ public String toString() {
+ return "\"ACTIVE\"";
+ }
+ },
+ IDLE {
+ @Override
+ public String toString() {
+ return "\"IDLE\"";
+ }
+ }
+ }
+}
diff --git a/src/main/java/org.onosproject.xran/entities/package-info.java b/src/main/java/org.onosproject.xran/entities/package-info.java
new file mode 100644
index 0000000..6b2c4c4
--- /dev/null
+++ b/src/main/java/org.onosproject.xran/entities/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Created by dimitris on 7/22/17.
+ */
+package org.onosproject.xran.entities;
\ No newline at end of file