blob: 8af1644f7e31d61e5bac22534b92d2a78c4b1c51 [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
slowr8ddc2b12017-08-14 14:13:38 -070019import com.fasterxml.jackson.databind.JsonNode;
slowr13fa5b02017-08-08 16:32:31 -070020import org.onosproject.xran.codecs.api.*;
21import org.onosproject.xran.codecs.pdu.PDCPMeasReportPerUe;
22import org.onosproject.xran.codecs.pdu.RRMConfig;
23import org.onosproject.xran.identifiers.LinkId;
slowr8ddc2b12017-08-14 14:13:38 -070024import org.openmuc.jasn1.ber.types.BerBitString;
slowr13fa5b02017-08-08 16:32:31 -070025import org.openmuc.jasn1.ber.types.BerInteger;
26
slowr67d05e42017-08-11 20:37:22 -070027import java.util.Arrays;
slowr8ddc2b12017-08-14 14:13:38 -070028import java.util.List;
slowr67d05e42017-08-11 20:37:22 -070029import java.util.Optional;
slowr13fa5b02017-08-08 16:32:31 -070030import java.util.Timer;
slowr8ddc2b12017-08-14 14:13:38 -070031import java.util.stream.Collectors;
32import java.util.stream.Stream;
slowr13fa5b02017-08-08 16:32:31 -070033
34/**
35 * Created by dimitris on 7/22/17.
36 */
37public class RnibLink {
38 private LinkId linkId;
39 // private String type;
40 private RRMConfig rrmParameters;
41
42 private TrafficSplitPercentage trafficPercent;
43 private ERABParams bearerParameters;
44
45 private LinkQuality quality;
46 private PDCPThroughput pdcpThroughput;
47 private PDCPPacketDelay pdcpPackDelay;
48 private ResourceUsage resourceUsage;
49 private Type type;
50 private Timer timer;
51
slowr67d05e42017-08-11 20:37:22 -070052 public RnibLink(RnibCell cell, RnibUe ue) {
slowr13fa5b02017-08-08 16:32:31 -070053 trafficPercent = new TrafficSplitPercentage();
slowr67d05e42017-08-11 20:37:22 -070054 trafficPercent.setEcgi(cell.getEcgi());
slowr13fa5b02017-08-08 16:32:31 -070055 trafficPercent.setTrafficPercentDl(new BerInteger(100));
56 trafficPercent.setTrafficPercentUl(new BerInteger(100));
57
58 pdcpThroughput = new PDCPThroughput();
59 quality = new LinkQuality();
60 pdcpPackDelay = new PDCPPacketDelay();
61 resourceUsage = new ResourceUsage();
62 timer = new Timer();
slowr67d05e42017-08-11 20:37:22 -070063
64 type = Type.NON_SERVING;
65
66 linkId = LinkId.valueOf(cell, ue);
slowr8ddc2b12017-08-14 14:13:38 -070067
68 setDefaultRRMConf();
slowr13fa5b02017-08-08 16:32:31 -070069 }
70
71 public Timer getTimer() {
72 return timer;
73 }
74
75 public void setTimer(Timer timer) {
76 this.timer.cancel();
77 this.timer.purge();
78 this.timer = timer;
79 }
80
81 public LinkId getLinkId() {
82 return linkId;
83 }
84
85 public void setLinkId(LinkId linkId) {
86 this.linkId = linkId;
87 }
88
89 public void setLinkId(RnibCell cell, RnibUe ue) {
slowr67d05e42017-08-11 20:37:22 -070090 this.linkId = LinkId.valueOf(cell, ue);
slowr13fa5b02017-08-08 16:32:31 -070091 trafficPercent.setEcgi(cell.getEcgi());
92 }
93
94 public Type getType() {
95 return type;
96 }
97
98 public void setType(Type type) {
99 this.type = type;
100 }
101
102 public TrafficSplitPercentage getTrafficPercent() {
103 return trafficPercent;
104 }
105
106 public void setTrafficPercent(TrafficSplitPercentage trafficPercent) {
107 this.trafficPercent = trafficPercent;
108 }
109
110 public ERABParams getBearerParameters() {
111 return bearerParameters;
112 }
113
114 public void setBearerParameters(ERABParams bearerParameters) {
115 this.bearerParameters = bearerParameters;
116 }
117
118 public LinkQuality getQuality() {
119 return quality;
120 }
121
122 public void setQuality(LinkQuality quality) {
123 this.quality = quality;
124 }
125
126 public RRMConfig getRrmParameters() {
127 return rrmParameters;
128 }
129
130 public void setRrmParameters(RRMConfig rrmParameters) {
131 this.rrmParameters = rrmParameters;
132 }
133
slowr8ddc2b12017-08-14 14:13:38 -0700134 public void modifyRrmParameters(JsonNode rrmConfigNode) {
135 {
136 JsonNode start_prb_dl = rrmConfigNode.get("start_prb_dl");
137 if (start_prb_dl != null) {
138 RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
139 if (start_prb_dl.isArray()) {
140 if (rrmParameters.getStartPrbDl().getSeqOf().size() == start_prb_dl.size()) {
141 List<BerInteger> collect = Stream.of(start_prb_dl)
142 .map(val -> new BerInteger(val.asInt()))
143 .collect(Collectors.toList());
144 startPrbDl.setSeqOf(collect);
145 }
146 }
147 rrmParameters.setStartPrbDl(startPrbDl);
148 }
149 }
150
151 {
152 JsonNode end_prb_dl = rrmConfigNode.get("end_prb_dl");
153 if (end_prb_dl != null) {
154 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
155 if (end_prb_dl.isArray()) {
156 if (rrmParameters.getEndPrbDl().getSeqOf().size() == end_prb_dl.size()) {
157 List<BerInteger> collect = Stream.of(end_prb_dl)
158 .map(val -> new BerInteger(val.asInt()))
159 .collect(Collectors.toList());
160 endPrbDl.setSeqOf(collect);
161 }
162 }
163 rrmParameters.setEndPrbDl(endPrbDl);
164 }
165 }
166
167 {
168 JsonNode start_prb_ul = rrmConfigNode.get("start_prb_ul");
169 if (start_prb_ul != null) {
170 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
171 if (start_prb_ul.isArray()) {
172 if (rrmParameters.getStartPrbUl().getSeqOf().size() == start_prb_ul.size()) {
173 List<BerInteger> collect = Stream.of(start_prb_ul)
174 .map(val -> new BerInteger(val.asInt()))
175 .collect(Collectors.toList());
176 startPrbUl.setSeqOf(collect);
177 }
178 }
179 rrmParameters.setStartPrbUl(startPrbUl);
180 }
181 }
182
183 {
184 JsonNode end_prb_ul = rrmConfigNode.get("end_prb_ul");
185 if (end_prb_ul != null) {
186 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
187 if (end_prb_ul.isArray()) {
188 if (rrmParameters.getEndPrbUl().getSeqOf().size() == end_prb_ul.size()) {
189 List<BerInteger> collect = Stream.of(end_prb_ul)
190 .map(val -> new BerInteger(val.asInt()))
191 .collect(Collectors.toList());
192 endPrbUl.setSeqOf(collect);
193 }
194 }
195 rrmParameters.setEndPrbUl(endPrbUl);
196 }
197 }
198
199 // TODO
200 }
201
slowr13fa5b02017-08-08 16:32:31 -0700202 public PDCPThroughput getPdcpThroughput() {
203 return pdcpThroughput;
204 }
205
206 public void setPdcpThroughput(PDCPThroughput pdcpThroughput) {
207 this.pdcpThroughput = pdcpThroughput;
208 }
209
210 public PDCPPacketDelay getPdcpPackDelay() {
211 return pdcpPackDelay;
212 }
213
214 public void setPdcpPackDelay(PDCPPacketDelay pdcpPackDelay) {
215 this.pdcpPackDelay = pdcpPackDelay;
216 }
217
218 public ResourceUsage getResourceUsage() {
219 return resourceUsage;
220 }
221
222 public void setResourceUsage(ResourceUsage resourceUsage) {
223 this.resourceUsage = resourceUsage;
224 }
225
slowr8ddc2b12017-08-14 14:13:38 -0700226 private void setDefaultRRMConf() {
227 rrmParameters = new RRMConfig();
228
229 RRMConfig.Crnti crnti = new RRMConfig.Crnti();
230 crnti.addCRNTI(linkId.getUe().getRanId());
231
232 rrmParameters.setCrnti(crnti);
233
234 rrmParameters.setEcgi(linkId.getEcgi());
235
236 RRMConfig.StartPrbDl startPrbDl = new RRMConfig.StartPrbDl();
237 startPrbDl.addBerInteger(new BerInteger(0));
238 startPrbDl.addBerInteger(new BerInteger(50));
239
240 rrmParameters.setStartPrbDl(startPrbDl);
241
242 RRMConfig.StartPrbUl startPrbUl = new RRMConfig.StartPrbUl();
243 startPrbUl.addBerInteger(new BerInteger(50));
244 startPrbUl.addBerInteger(new BerInteger(100));
245
246 rrmParameters.setStartPrbUl(startPrbUl);
247
248 RRMConfig.EndPrbDl endPrbDl = new RRMConfig.EndPrbDl();
249 endPrbDl.addBerInteger(new BerInteger(50));
250 endPrbDl.addBerInteger(new BerInteger(100));
251
252 rrmParameters.setEndPrbDl(endPrbDl);
253
254 RRMConfig.EndPrbUl endPrbUl = new RRMConfig.EndPrbUl();
255 endPrbUl.addBerInteger(new BerInteger(50));
256 endPrbUl.addBerInteger(new BerInteger(100));
257
258 rrmParameters.setEndPrbUl(endPrbUl);
259
260 RRMConfig.SubframeBitmaskDl subframeBitmaskDl = new RRMConfig.SubframeBitmaskDl();
261 BerBitString berBitString = new BerBitString(new byte[]{(byte) 0xAA, (byte) 0x80}, 10);
262 BerBitString berBitString1 = new BerBitString(new byte[]{(byte) 0x55, (byte) 0x40}, 10);
263
264 subframeBitmaskDl.addBerBitString(berBitString);
265 subframeBitmaskDl.addBerBitString(berBitString1);
266
267 rrmParameters.setSubframeBitmaskDl(subframeBitmaskDl);
268 }
269
slowr13fa5b02017-08-08 16:32:31 -0700270 @Override
271 public String toString() {
272 StringBuilder sb = new StringBuilder();
273 sb.append("{\n")
274 .append(linkId != null ? "\"link-id\":" + linkId : "")
275 .append(type != null ? ",\n\"type\":" + type : "")
276 .append(rrmParameters != null ? ",\n\"rrm-params\":" + rrmParameters : "")
277 .append(trafficPercent != null ? ",\n\"traffic-percent\":" + trafficPercent : "")
278 .append(bearerParameters != null ? ",\n\"bearer-params\":" + bearerParameters : "")
279 .append(quality != null ? ",\n\"quality\":" + quality : "")
280 .append(pdcpThroughput != null ? ",\n\"pdcp-throughput\":" + pdcpThroughput : "")
281 .append(pdcpPackDelay != null ? ",\n\"pdcp-packet-delay\":" + pdcpPackDelay : "")
282 .append(resourceUsage != null ? ",\n\"resource-usage\":" + resourceUsage : "")
283 .append("\n}\n");
284 return sb.toString();
285 }
286
287 @Override
288 public boolean equals(Object o) {
289 if (this == o) return true;
290 if (o == null || getClass() != o.getClass()) return false;
291
292 RnibLink link = (RnibLink) o;
293
294 return linkId.equals(link.linkId);
295 }
296
297 @Override
298 public int hashCode() {
299 return linkId.hashCode();
300 }
301
302 public enum Type {
slowr67d05e42017-08-11 20:37:22 -0700303 SERVING_PRIMARY("serving/primary") {
slowr13fa5b02017-08-08 16:32:31 -0700304 @Override
305 public String toString() {
306 return "\"serving/primary\"";
307 }
308 },
309 // TODO: Add CA/DC
slowr67d05e42017-08-11 20:37:22 -0700310 SERVING_SECONDARY("serving/secondary") {
slowr13fa5b02017-08-08 16:32:31 -0700311 @Override
312 public String toString() {
313 return "\"serving/secondary\"";
314 }
315 },
slowr67d05e42017-08-11 20:37:22 -0700316 NON_SERVING("non-serving") {
slowr13fa5b02017-08-08 16:32:31 -0700317 @Override
318 public String toString() {
319 return "\"non-serving\"";
320 }
slowr67d05e42017-08-11 20:37:22 -0700321 };
322
323 private String name;
324
325 Type(String name) {
326 this.name = name;
327 }
328
329 public static Type getEnum(String name) {
330 Optional<Type> any = Arrays.stream(Type.values()).filter(typeStr -> typeStr.name.equals(name)).findAny();
331 if (any.isPresent()) {
332 return any.get();
333 }
334 throw new IllegalArgumentException("No enum defined for string: " + name);
slowr13fa5b02017-08-08 16:32:31 -0700335 }
336 }
337
338 public class PDCPThroughput {
339 private PDCPMeasReportPerUe.ThroughputDl dl;
340 private PDCPMeasReportPerUe.ThroughputUl ul;
341
342 public PDCPMeasReportPerUe.ThroughputDl getDl() {
343 return dl;
344 }
345
346 public void setDl(PDCPMeasReportPerUe.ThroughputDl dl) {
347 this.dl = dl;
348 }
349
350 public PDCPMeasReportPerUe.ThroughputUl getUl() {
351 return ul;
352 }
353
354 public void setUl(PDCPMeasReportPerUe.ThroughputUl ul) {
355 this.ul = ul;
356 }
357
358 @Override
359 public String toString() {
360 StringBuilder sb = new StringBuilder();
361 sb.append("{\n")
362 .append(dl != null ? "\"dl\":" + dl : "")
363 .append(ul != null ? ",\n\"ul\":" + ul : "")
364 .append("\n}\n");
365 return sb.toString();
366 }
367 }
368
369 public class PDCPPacketDelay {
370 PDCPMeasReportPerUe.PktDelayDl dl;
371 PDCPMeasReportPerUe.PktDelayUl ul;
372
373 public PDCPMeasReportPerUe.PktDelayDl getDl() {
374 return dl;
375 }
376
377 public void setDl(PDCPMeasReportPerUe.PktDelayDl dl) {
378 this.dl = dl;
379 }
380
381 public PDCPMeasReportPerUe.PktDelayUl getUl() {
382 return ul;
383 }
384
385 public void setUl(PDCPMeasReportPerUe.PktDelayUl ul) {
386 this.ul = ul;
387 }
388
389 @Override
390 public String toString() {
391 StringBuilder sb = new StringBuilder();
392 sb.append("{\n")
393 .append(dl != null ? "\"dl\":" + dl : "")
394 .append(ul != null ? ",\n\"ul\":" + ul : "")
395 .append("\n}\n");
396 return sb.toString();
397 }
398 }
399
400 public class ResourceUsage {
401 PRBUsage.PrbUsageDl dl;
402 PRBUsage.PrbUsageUl ul;
403
404 public PRBUsage.PrbUsageDl getDl() {
405 return dl;
406 }
407
408 public void setDl(PRBUsage.PrbUsageDl dl) {
409 this.dl = dl;
410 }
411
412 public PRBUsage.PrbUsageUl getUl() {
413 return ul;
414 }
415
416 public void setUl(PRBUsage.PrbUsageUl ul) {
417 this.ul = ul;
418 }
419
420 @Override
421 public String toString() {
422 StringBuilder sb = new StringBuilder();
423 sb.append("{\n")
424 .append(dl != null ? "\"dl\":" + dl : "")
425 .append(ul != null ? ",\n\"ul\":" + ul : "")
426 .append("\n}\n");
427 return sb.toString();
428 }
429 }
430
431 public class LinkQuality {
432 double rsrp;
433 double rsrq;
434 RadioRepPerServCell.CqiHist cqiHist;
435 double cqiMode;
436 double cqiMean;
437 SchedMeasRepPerServCell.McsDl mcs_dl;
438 SchedMeasRepPerServCell.McsUl mcs_ul;
439
440 public double getRsrp() {
441 return rsrp;
442 }
443
444 public void setRsrp(double rsrp) {
445 this.rsrp = rsrp;
446 }
447
448 public double getRsrq() {
449 return rsrq;
450 }
451
452 public void setRsrq(double rsrq) {
453 this.rsrq = rsrq;
454 }
455
456 public RadioRepPerServCell.CqiHist getCqiHist() {
457 return cqiHist;
458 }
459
460 public void setCqiHist(RadioRepPerServCell.CqiHist cqiHist) {
461 this.cqiHist = cqiHist;
462 }
463
464 public double getCqiMode() {
465 return cqiMode;
466 }
467
468 public void setCqiMode(double cqiMode) {
469 this.cqiMode = cqiMode;
470 }
471
472 public double getCqiMean() {
473 return cqiMean;
474 }
475
476 public void setCqiMean(double cqiMean) {
477 this.cqiMean = cqiMean;
478 }
479
480 public SchedMeasRepPerServCell.McsDl getMcs_dl() {
481 return mcs_dl;
482 }
483
484 public void setMcs_dl(SchedMeasRepPerServCell.McsDl mcs_dl) {
485 this.mcs_dl = mcs_dl;
486 }
487
488 public SchedMeasRepPerServCell.McsUl getMcs_ul() {
489 return mcs_ul;
490 }
491
492 public void setMcs_ul(SchedMeasRepPerServCell.McsUl mcs_ul) {
493 this.mcs_ul = mcs_ul;
494 }
495
496 @Override
497 public String toString() {
498 StringBuilder sb = new StringBuilder();
499 sb.append("{\n")
500 .append("\"rsrp\":" + rsrp)
501 .append(",\n\"rsrq\":" + rsrq)
502 .append(",\n\"cqiMode\":" + cqiMode)
503 .append(",\n\"cqiMean\":" + cqiMean)
504 .append(mcs_dl != null ? ",\n\"mcs-dl\":" + mcs_dl : "")
505 .append(mcs_ul != null ? ",\n\"mcs-ul\":" + mcs_ul : "")
506 .append("\n}\n");
507 return sb.toString();
508 }
509 }
510}