blob: f876b45a3ef223d02bb5c53da9b2f7f26dc3cbed [file] [log] [blame]
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +05303 *
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.pceweb;
18
19
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053020import java.util.HashMap;
21import java.util.Map;
22import java.util.Set;
23
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053024import org.onosproject.net.AnnotationKeys;
25import org.onosproject.net.Annotations;
26import org.onosproject.net.Device;
27import org.onosproject.net.DeviceId;
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053028import org.onosproject.net.Link;
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +053029import org.onosproject.net.resource.ContinuousResource;
30import org.onosproject.net.resource.ResourceService;
31import org.onosproject.net.resource.Resource;
32import org.onosproject.net.resource.DiscreteResource;
33import org.onosproject.net.resource.Resources;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053034import org.onosproject.ui.UiTopoOverlay;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053035import org.onosproject.ui.topo.PropertyPanel;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053036import org.onosproject.net.device.DeviceService;
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053037import org.onosproject.net.link.LinkEvent;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053038import org.onosproject.ui.topo.TopoConstants.CoreButtons;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053039import org.onosproject.cli.AbstractShellCommand;
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +053040import org.onlab.packet.Ip4Address;
41import org.onlab.packet.IpAddress;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053042/**
43 * PCE WEB topology overlay.
44 */
45public class PceWebTopovOverlay extends UiTopoOverlay {
46
47 // NOTE: this must match the ID defined in pcewebTopovOverlay.js
48 private static final String OVERLAY_ID = "PCE-web-overlay";
49 private static final String MY_TITLE = "Device details";
50
51 public static final String AS_NUMBER = "asNumber";
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +053052 public static final String LSR_ID = "lsrId";
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053053 public static final String ABR_BIT = "abrBit";
54 public static final String ASBR_BIT = "externalBit";
55 public static final String TE_METRIC = "teCost";
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +053056 public static final String ABR = "ABR";
57 public static final String ASBR = "ASBR";
58 public static final String ABR_ASBR = "ABR/ASBR";
59 public static final String INNER = "Inner";
60 public static final long IDENTIFIER_SET = 0x100000000L;
61 public static final long SET = 0xFFFFFFFFL;
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053062 /**
63 * Initialize the overlay ID.
64 */
65 public PceWebTopovOverlay() {
66 super(OVERLAY_ID);
67 }
68
69 @Override
70 public void deactivate() {
71 super.deactivate();
72 log.debug("Deactivated");
73 }
74
75 @Override
76 public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
77
78 pp.title(MY_TITLE);
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053079 DeviceService deviceService = AbstractShellCommand.get(DeviceService.class);
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053080 pp.removeAllProps();
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053081 pp.removeButtons(CoreButtons.SHOW_PORT_VIEW)
82 .removeButtons(CoreButtons.SHOW_GROUP_VIEW)
83 .removeButtons(CoreButtons.SHOW_METER_VIEW);
84
85 if (deviceService != null) {
86
87 Device device = deviceService.getDevice(deviceId);
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053088 Annotations annots = device.annotations();
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053089
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053090 String type = annots.value(AnnotationKeys.TYPE);
91 String asNumber = annots.value(AS_NUMBER);
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +053092 String lsrId = annots.value(LSR_ID);
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053093 String abrStatus = annots.value(ABR_BIT);
94 String asbrStatus = annots.value(ASBR_BIT);
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +053095
96 if (type != null) {
97 pp.addProp("Type", type);
98 }
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +053099
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +0530100 if (asNumber != null) {
101 pp.addProp("AS Number", asNumber);
102 }
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530103
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530104 if (lsrId != null) {
105 pp.addProp("LSR ID", lsrId);
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +0530106 }
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530107
kdarapu7abfe0e2017-04-16 05:30:44 +0530108 if (Boolean.valueOf(abrStatus).equals(true) && Boolean.valueOf(asbrStatus).equals(true)) {
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530109 pp.addProp("Position", ABR_ASBR);
kdarapu7abfe0e2017-04-16 05:30:44 +0530110 } else if (Boolean.valueOf(abrStatus).equals(true)) {
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530111 pp.addProp("Position", ABR);
kdarapu7abfe0e2017-04-16 05:30:44 +0530112 } else if (Boolean.valueOf(asbrStatus).equals(true)) {
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530113 pp.addProp("Position", ASBR);
114 } else {
115 pp.addProp("Position", INNER);
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530116 }
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +0530117 }
118 }
119
120 @Override
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530121 public Map<String, String> additionalLinkData(LinkEvent event) {
122 Map<String, String> map = new HashMap<>();
123 Link link = event.subject();
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530124 long srcPortNo;
125 long dstPortNo;
126 IpAddress ipDstAddress = null;
127 IpAddress ipSrcAddress = null;
128 String srcPort;
129 String dstPort;
130 String bandWidth;
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530131
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530132 srcPortNo = link.src().port().toLong();
133 if (((srcPortNo & IDENTIFIER_SET) == IDENTIFIER_SET)) {
134 srcPort = String.valueOf(srcPortNo);
135 } else {
136 ipSrcAddress = Ip4Address.valueOf((int) srcPortNo);
137 srcPort = ipSrcAddress.toString();
138 }
139
140 dstPortNo = link.dst().port().toLong();
141 if (((dstPortNo & IDENTIFIER_SET) == IDENTIFIER_SET)) {
142 dstPort = String.valueOf(dstPortNo);
143 } else {
144 ipDstAddress = Ip4Address.valueOf((int) dstPortNo);
145 dstPort = ipDstAddress.toString();
146 }
147
148 map.put("Src Address", srcPort);
149 map.put("Dst Address", dstPort);
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530150 map.put("Te metric", link.annotations().value(TE_METRIC));
151
152 ResourceService resService = AbstractShellCommand.get(ResourceService.class);
153 DiscreteResource devResource = Resources.discrete(link.src().deviceId(), link.src().port()).resource();
154 if (resService == null) {
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530155 log.warn("resource service does not exist");
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530156 return map;
157 }
158
159 if (devResource == null) {
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530160 log.warn("Device resources does not exist");
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530161 return map;
162 }
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530163 double regBandwidth = 0;
164 try {
165 Thread.sleep(100);
166 } catch (InterruptedException e) {
167 log.error("Exception occured while getting the bandwidth.");
168 }
169 Set<Resource> resources = resService.getRegisteredResources(devResource.id());
170 for (Resource res : resources) {
171 if (res instanceof ContinuousResource) {
172 regBandwidth = ((ContinuousResource) res).value();
173 break;
174 }
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530175 }
176
MaheshRaju-Huawei4bf9f2d2016-07-01 19:03:18 +0530177 if (regBandwidth != 0) {
178 bandWidth = String.valueOf(regBandwidth);
179 map.put("Bandwidth", bandWidth);
Mahesh Raju-Huawei31d31c02016-06-04 17:20:57 +0530180 }
181
182 return map;
183 }
Mahesh Raju-Huawei85930052016-04-26 21:09:57 +0530184}