blob: e56b6b1808cc13fe867b2741bfc1d04e1f927a29 [file] [log] [blame]
slowr13fa5b02017-08-08 16:32:31 -07001/*
2 * Copyright 2015-present Open Networking Laboratory
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.entities;
18
19import com.fasterxml.jackson.databind.JsonNode;
20import org.onosproject.net.DeviceId;
21import org.onosproject.xran.codecs.api.ECGI;
slowr13fa5b02017-08-08 16:32:31 -070022import org.onosproject.xran.codecs.api.PRBUsage;
23import org.onosproject.xran.codecs.pdu.CellConfigReport;
24import org.onosproject.xran.codecs.pdu.L2MeasConfig;
25import org.onosproject.xran.codecs.pdu.RRMConfig;
26import org.onosproject.xran.codecs.pdu.SchedMeasReportPerCell;
27import org.openmuc.jasn1.ber.BerByteArrayOutputStream;
slowr67d05e42017-08-11 20:37:22 -070028import org.openmuc.jasn1.ber.types.BerBitString;
29import org.openmuc.jasn1.ber.types.BerInteger;
slowr13fa5b02017-08-08 16:32:31 -070030
31import javax.xml.bind.DatatypeConverter;
32import java.io.ByteArrayInputStream;
33import java.io.IOException;
34import java.io.InputStream;
35import java.net.URI;
36import java.net.URISyntaxException;
slowr67d05e42017-08-11 20:37:22 -070037import java.util.List;
slowr8ddc2b12017-08-14 14:13:38 -070038import java.util.stream.Collectors;
39import java.util.stream.Stream;
slowr13fa5b02017-08-08 16:32:31 -070040
41/**
42 * Created by dimitris on 7/22/17.
43 */
44public class RnibCell {
45 private static final String SCHEME = "xran";
46
47 private ECGI ecgi;
48 private CellConfigReport conf;
49 private PrbUsageContainer prbUsage;
50 private SchedMeasReportPerCell.QciVals qci;
51 private RRMConfig rrmConfig;
52 private L2MeasConfig measConfig;
53
slowr8ddc2b12017-08-14 14:13:38 -070054 private String version;
55
slowr13fa5b02017-08-08 16:32:31 -070056 public RnibCell() {
57 prbUsage = new PrbUsageContainer();
slowr8ddc2b12017-08-14 14:13:38 -070058 version = "3";
slowr89c2ac12017-08-15 16:20:06 -070059
60 rrmConfig = new RRMConfig();
61 rrmConfig.setEcgi(ecgi);
slowr13fa5b02017-08-08 16:32:31 -070062 }
63
64 public static URI uri(ECGI ecgi) {
65 if (ecgi != null) {
66 try {
67 BerByteArrayOutputStream os = new BerByteArrayOutputStream(4096);
68 ecgi.encode(os);
69 String message = DatatypeConverter.printHexBinary(os.getArray());
70 return new URI(SCHEME, message, null);
71 } catch (URISyntaxException | IOException e) {
72 return null;
73 }
74 }
75 return null;
76 }
77
78 public static ECGI decodeDeviceId(DeviceId deviceId) throws IOException {
79 String uri = deviceId.toString();
80 String hexEcgi = uri.substring(uri.lastIndexOf("xran:") + 5);
81
82 ECGI ecgi = new ECGI();
83 byte[] bytearray = DatatypeConverter.parseHexBinary(hexEcgi);
84 InputStream inputStream = new ByteArrayInputStream(bytearray);
85
86 ecgi.decode(inputStream);
87 return ecgi;
88 }
89
slowr8ddc2b12017-08-14 14:13:38 -070090 public String getVersion() {
91 return version;
92 }
93
94 public void setVersion(String version) {
95 this.version = version;
96 }
97
slowr67d05e42017-08-11 20:37:22 -070098 public RRMConfig getRrmConfig() {
99 return rrmConfig;
100 }
101
102 public void setRrmConfig(RRMConfig rrmConfig) {
103 this.rrmConfig = rrmConfig;
104 }
105
106 public PrbUsageContainer getPrbUsage() {
107 return prbUsage;
108 }
109
110 public void setPrbUsage(PrbUsageContainer prbUsage) {
111 this.prbUsage = prbUsage;
112 }
113
slowr13fa5b02017-08-08 16:32:31 -0700114 public ECGI getEcgi() {
115 return ecgi;
116 }
117
118 public void setEcgi(ECGI ecgi) {
119 this.ecgi = ecgi;
120 }
121
122 public CellConfigReport getConf() {
123 return conf;
124 }
125
slowr67d05e42017-08-11 20:37:22 -0700126 /*public RRMConfig getRrmConfig() {
127 return rrmConfig;
128 }*/
129
slowr13fa5b02017-08-08 16:32:31 -0700130 public void setConf(CellConfigReport conf) {
131 this.conf = conf;
132 }
133
slowr67d05e42017-08-11 20:37:22 -0700134 public void modifyRrmConfig(JsonNode rrmConfigNode, List<RnibUe> ueList) {
135 RRMConfig.Crnti crnti = new RRMConfig.Crnti();
136 ueList.forEach(ue -> crnti.addCRNTI(ue.getRanId()));
slowr13fa5b02017-08-08 16:32:31 -0700137
slowr8ddc2b12017-08-14 14:13:38 -0700138 {
139 JsonNode start_prb_dl = rrmConfigNode.get("start_prb_dl");
140 if (start_prb_dl != null) {
141 RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
142 if (start_prb_dl.isArray()) {
slowr89c2ac12017-08-15 16:20:06 -0700143 if (ueList.size() == start_prb_dl.size()) {
slowr8ddc2b12017-08-14 14:13:38 -0700144 List<BerInteger> collect = Stream.of(start_prb_dl)
145 .map(val -> new BerInteger(val.asInt()))
146 .collect(Collectors.toList());
147 startPrbDl.setSeqOf(collect);
148 }
149 }
150 rrmConfig.setStartPrbDl(startPrbDl);
slowr67d05e42017-08-11 20:37:22 -0700151 }
152 }
slowr67d05e42017-08-11 20:37:22 -0700153
slowr8ddc2b12017-08-14 14:13:38 -0700154 {
155 JsonNode end_prb_dl = rrmConfigNode.get("end_prb_dl");
156 if (end_prb_dl != null) {
157 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
158 if (end_prb_dl.isArray()) {
slowr89c2ac12017-08-15 16:20:06 -0700159 if (ueList.size() == end_prb_dl.size()) {
slowr8ddc2b12017-08-14 14:13:38 -0700160 List<BerInteger> collect = Stream.of(end_prb_dl)
161 .map(val -> new BerInteger(val.asInt()))
162 .collect(Collectors.toList());
163 endPrbDl.setSeqOf(collect);
164 }
165 }
166 rrmConfig.setEndPrbDl(endPrbDl);
167 }
168 }
169
170 {
171 JsonNode start_prb_ul = rrmConfigNode.get("start_prb_ul");
172 if (start_prb_ul != null) {
173 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
174 if (start_prb_ul.isArray()) {
slowr89c2ac12017-08-15 16:20:06 -0700175 if (ueList.size() == start_prb_ul.size()) {
slowr8ddc2b12017-08-14 14:13:38 -0700176 List<BerInteger> collect = Stream.of(start_prb_ul)
177 .map(val -> new BerInteger(val.asInt()))
178 .collect(Collectors.toList());
179 startPrbUl.setSeqOf(collect);
180 }
181 }
182 rrmConfig.setStartPrbUl(startPrbUl);
183 }
184 }
185
186 {
187 JsonNode end_prb_ul = rrmConfigNode.get("end_prb_ul");
188 if (end_prb_ul != null) {
189 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
190 if (end_prb_ul.isArray()) {
slowr89c2ac12017-08-15 16:20:06 -0700191 if (ueList.size() == end_prb_ul.size()) {
slowr8ddc2b12017-08-14 14:13:38 -0700192 List<BerInteger> collect = Stream.of(end_prb_ul)
193 .map(val -> new BerInteger(val.asInt()))
194 .collect(Collectors.toList());
195 endPrbUl.setSeqOf(collect);
196 }
197 }
198 rrmConfig.setEndPrbUl(endPrbUl);
199 }
200 }
201
202 rrmConfig.setCrnti(crnti);
slowr13fa5b02017-08-08 16:32:31 -0700203 }
204
205 public SchedMeasReportPerCell.QciVals getQci() {
206 return qci;
207 }
208
209 public void setQci(SchedMeasReportPerCell.QciVals qci) {
210 this.qci = qci;
211 }
212
213 public void setPrimaryPrbUsage(PRBUsage primary) {
214 this.prbUsage.primary = primary;
215 }
216
217 public void setSecondaryPrbUsage(PRBUsage secondary) {
218 this.prbUsage.secondary = secondary;
219 }
220
221 public L2MeasConfig getMeasConfig() {
222 return measConfig;
223 }
224
225 public void setMeasConfig(L2MeasConfig measConfig) {
226 this.measConfig = measConfig;
227 }
228
229 @Override
230 public String toString() {
231 StringBuilder sb = new StringBuilder();
232 sb.append("{\n")
233 .append(ecgi != null ? "\"ecgi\":" + ecgi : "")
234 .append(conf != null ? ",\n\"config-report\":" + conf : "")
235 .append(prbUsage != null ? ",\n\"prb-usage\":" + prbUsage : "")
236 .append(qci != null ? ",\n\"qci-vals\":" + qci : "")
237 .append(rrmConfig != null ? ",\n\"rrm-config\":" + rrmConfig : "")
238 .append(measConfig != null ? ",\n\"l2-meas-config\":" + measConfig : "")
239 .append("\n}\n");
240 return sb.toString();
241 }
242
243 @Override
244 public boolean equals(Object o) {
245 if (this == o) return true;
246 if (o == null || getClass() != o.getClass()) return false;
247
248 RnibCell rnibCell = (RnibCell) o;
249
250 return ecgi.equals(rnibCell.ecgi);
251 }
252
253 @Override
254 public int hashCode() {
255 return ecgi.hashCode();
256 }
257
258 class PrbUsageContainer {
259 PRBUsage primary;
260 PRBUsage secondary;
261
262 @Override
263 public String toString() {
264 StringBuilder sb = new StringBuilder();
265 sb.append("{\n")
266 .append(primary != null ? "\"primary\":" + primary : "")
267 .append(secondary != null ? ",\n\"secondary\":" + secondary : "")
268 .append("\n}\n");
269 return sb.toString();
270 }
271 }
272}