Committed by
Gerrit Code Review
PCE WEB GUI defect fixes
Change-Id: I6da200db4c946708df97d1fa35ae198ea68f0451
Showing
4 changed files
with
281 additions
and
105 deletions
... | @@ -28,8 +28,6 @@ import org.onosproject.net.ElementId; | ... | @@ -28,8 +28,6 @@ import org.onosproject.net.ElementId; |
28 | import org.onosproject.net.HostId; | 28 | import org.onosproject.net.HostId; |
29 | import org.onosproject.net.Link; | 29 | import org.onosproject.net.Link; |
30 | import org.onosproject.net.Path; | 30 | import org.onosproject.net.Path; |
31 | -import org.onosproject.net.topology.TopologyEvent; | ||
32 | -import org.onosproject.net.topology.TopologyListener; | ||
33 | import org.onosproject.net.topology.TopologyService; | 31 | import org.onosproject.net.topology.TopologyService; |
34 | import org.onosproject.ui.RequestHandler; | 32 | import org.onosproject.ui.RequestHandler; |
35 | import org.onosproject.ui.UiConnection; | 33 | import org.onosproject.ui.UiConnection; |
... | @@ -51,6 +49,7 @@ import org.slf4j.Logger; | ... | @@ -51,6 +49,7 @@ import org.slf4j.Logger; |
51 | import org.slf4j.LoggerFactory; | 49 | import org.slf4j.LoggerFactory; |
52 | import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; | 50 | import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; |
53 | import org.onosproject.incubator.net.tunnel.Tunnel; | 51 | import org.onosproject.incubator.net.tunnel.Tunnel; |
52 | +import static org.onosproject.incubator.net.tunnel.Tunnel.State.ACTIVE; | ||
54 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; | 53 | import org.onosproject.incubator.net.tunnel.TunnelEndPoint; |
55 | import org.onosproject.incubator.net.tunnel.TunnelEvent; | 54 | import org.onosproject.incubator.net.tunnel.TunnelEvent; |
56 | import org.onosproject.incubator.net.tunnel.TunnelId; | 55 | import org.onosproject.incubator.net.tunnel.TunnelId; |
... | @@ -82,6 +81,8 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -82,6 +81,8 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
82 | private static final String PCEWEB_SHOW_TUNNEL_REMOVE = "pceTopovShowTunnelsRem"; | 81 | private static final String PCEWEB_SHOW_TUNNEL_REMOVE = "pceTopovShowTunnelsRem"; |
83 | private static final String PCEWEB_TUNNEL_UPDATE_INFO = "updatePathmsgInfo"; | 82 | private static final String PCEWEB_TUNNEL_UPDATE_INFO = "updatePathmsgInfo"; |
84 | private static final String PCEWEB_TUNNEL_UPDATE_INFO_REPLY = "pceTopovShowTunnelsUpdate"; | 83 | private static final String PCEWEB_TUNNEL_UPDATE_INFO_REPLY = "pceTopovShowTunnelsUpdate"; |
84 | + private static final String PCEWEB_TUNNEL_QUERY_INFO = "pceTopovShowTunnelsQuery"; | ||
85 | + private static final String PCEWEB_TUNNEL_QUERY_INFO_SHOW = "pceTopovshowTunnelHighlightMsg"; | ||
85 | private static final String DST = "DST"; | 86 | private static final String DST = "DST"; |
86 | private static final String SRC = "SRC"; | 87 | private static final String SRC = "SRC"; |
87 | private static final String BANDWIDTH = "bw"; | 88 | private static final String BANDWIDTH = "bw"; |
... | @@ -117,7 +118,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -117,7 +118,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
117 | private int pathIndex; | 118 | private int pathIndex; |
118 | 119 | ||
119 | private final Logger log = LoggerFactory.getLogger(getClass()); | 120 | private final Logger log = LoggerFactory.getLogger(getClass()); |
120 | - private final TopologyListener topologyListener = new InternalTopologyListener(); | ||
121 | private final TunnelListener tunnelListener = new InnerPceWebTunnelListener(); | 121 | private final TunnelListener tunnelListener = new InnerPceWebTunnelListener(); |
122 | 122 | ||
123 | protected TopologyService topologyService; | 123 | protected TopologyService topologyService; |
... | @@ -128,11 +128,9 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -128,11 +128,9 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
128 | public void init(UiConnection connection, ServiceDirectory directory) { | 128 | public void init(UiConnection connection, ServiceDirectory directory) { |
129 | 129 | ||
130 | super.init(connection, directory); | 130 | super.init(connection, directory); |
131 | - topologyService = directory.get(TopologyService.class); | ||
132 | tunnelService = directory.get(TunnelService.class); | 131 | tunnelService = directory.get(TunnelService.class); |
133 | pceService = directory.get(PceService.class); | 132 | pceService = directory.get(PceService.class); |
134 | deviceService = directory.get(DeviceService.class); | 133 | deviceService = directory.get(DeviceService.class); |
135 | - topologyService.addListener(topologyListener); | ||
136 | tunnelService.addListener(tunnelListener); | 134 | tunnelService.addListener(tunnelListener); |
137 | } | 135 | } |
138 | 136 | ||
... | @@ -146,12 +144,12 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -146,12 +144,12 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
146 | new RemovePathQueryHandler(), | 144 | new RemovePathQueryHandler(), |
147 | new RemovePathHandler(), | 145 | new RemovePathHandler(), |
148 | new UpdatePathInfoHandler(), | 146 | new UpdatePathInfoHandler(), |
149 | - new ShowTunnelHandler()); | 147 | + new ShowTunnelHandler(), |
148 | + new ShowTunnelHighlight()); | ||
150 | } | 149 | } |
151 | 150 | ||
152 | @Override | 151 | @Override |
153 | public void destroy() { | 152 | public void destroy() { |
154 | - topologyService.removeListener(topologyListener); | ||
155 | tunnelService.removeListener(tunnelListener); | 153 | tunnelService.removeListener(tunnelListener); |
156 | super.destroy(); | 154 | super.destroy(); |
157 | } | 155 | } |
... | @@ -247,7 +245,10 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -247,7 +245,10 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
247 | ArrayNode arrayNode = arrayNode(); | 245 | ArrayNode arrayNode = arrayNode(); |
248 | for (Tunnel tunnel : tunnelSet) { | 246 | for (Tunnel tunnel : tunnelSet) { |
249 | if (tunnel.type() == MPLS) { | 247 | if (tunnel.type() == MPLS) { |
250 | - arrayNode.add(tunnel.tunnelId().toString()); | 248 | + if (tunnel.state().equals(ACTIVE)) { |
249 | + arrayNode.add(tunnel.tunnelId().toString()); | ||
250 | + arrayNode.add(tunnel.tunnelName().toString()); | ||
251 | + } | ||
251 | } | 252 | } |
252 | } | 253 | } |
253 | 254 | ||
... | @@ -295,6 +296,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -295,6 +296,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
295 | 296 | ||
296 | if (tunnelIdStr == null) { | 297 | if (tunnelIdStr == null) { |
297 | log.error("PCE update path is failed."); | 298 | log.error("PCE update path is failed."); |
299 | + return; | ||
298 | } | 300 | } |
299 | 301 | ||
300 | if (tunnelIdStr.equals(STRING_NULL)) { | 302 | if (tunnelIdStr.equals(STRING_NULL)) { |
... | @@ -354,7 +356,10 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -354,7 +356,10 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
354 | 356 | ||
355 | for (Tunnel tunnel : tunnelSet) { | 357 | for (Tunnel tunnel : tunnelSet) { |
356 | if (tunnel.type() == MPLS) { | 358 | if (tunnel.type() == MPLS) { |
357 | - arrayNode.add(tunnel.tunnelId().toString()); | 359 | + if (tunnel.state().equals(ACTIVE)) { |
360 | + arrayNode.add(tunnel.tunnelId().toString()); | ||
361 | + arrayNode.add(tunnel.tunnelName().toString()); | ||
362 | + } | ||
358 | } | 363 | } |
359 | } | 364 | } |
360 | 365 | ||
... | @@ -395,7 +400,56 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -395,7 +400,56 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
395 | 400 | ||
396 | @Override | 401 | @Override |
397 | public void process(long sid, ObjectNode payload) { | 402 | public void process(long sid, ObjectNode payload) { |
398 | - findTunnelAndHighlights(); | 403 | + ObjectNode result = objectNode(); |
404 | + ArrayNode arrayNode = arrayNode(); | ||
405 | + Collection<Tunnel> tunnelSet = null; | ||
406 | + | ||
407 | + tunnelSet = tunnelService.queryTunnel(MPLS); | ||
408 | + for (Tunnel tunnel : tunnelSet) { | ||
409 | + if (tunnel.state().equals(ACTIVE)) { | ||
410 | + arrayNode.add(tunnel.tunnelId().toString()); | ||
411 | + arrayNode.add(tunnel.tunnelName().toString()); | ||
412 | + } | ||
413 | + } | ||
414 | + | ||
415 | + result.putArray(BUFFER_ARRAY).addAll(arrayNode); | ||
416 | + sendMessage(PCEWEB_TUNNEL_QUERY_INFO, sid, result); | ||
417 | + } | ||
418 | + } | ||
419 | + | ||
420 | + /** | ||
421 | + * Handles the 'show the existed tunnels' event received from the client. | ||
422 | + */ | ||
423 | + private final class ShowTunnelHighlight extends RequestHandler { | ||
424 | + | ||
425 | + public ShowTunnelHighlight() { | ||
426 | + super(PCEWEB_TUNNEL_QUERY_INFO_SHOW); | ||
427 | + } | ||
428 | + | ||
429 | + @Override | ||
430 | + public void process(long sid, ObjectNode payload) { | ||
431 | + String tunnelIdStr = string(payload, TUNNEL_ID); | ||
432 | + | ||
433 | + if (tunnelIdStr == null) { | ||
434 | + log.error("Tunnel Id is NULL."); | ||
435 | + return; | ||
436 | + } | ||
437 | + | ||
438 | + if (tunnelIdStr.equals(STRING_NULL)) { | ||
439 | + log.error("Tunnel Id is NULL."); | ||
440 | + return; | ||
441 | + } | ||
442 | + | ||
443 | + if (pceService == null) { | ||
444 | + log.error("PCE service is not active"); | ||
445 | + return; | ||
446 | + } | ||
447 | + | ||
448 | + TunnelId tunnelId = TunnelId.valueOf(tunnelIdStr); | ||
449 | + Tunnel tunnel = tunnelService.queryTunnel(tunnelId); | ||
450 | + if (tunnel != null) { | ||
451 | + highlightsForTunnel(tunnel); | ||
452 | + } | ||
399 | } | 453 | } |
400 | } | 454 | } |
401 | 455 | ||
... | @@ -458,7 +512,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -458,7 +512,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
458 | * @param bandWidth bandWidth | 512 | * @param bandWidth bandWidth |
459 | * @param bandWidthType is the kbps or mbps | 513 | * @param bandWidthType is the kbps or mbps |
460 | * @param costType is igp or te | 514 | * @param costType is igp or te |
461 | - * @param tunnelName tunnel id | 515 | + * @param tunnelIdStr tunnel id |
462 | */ | 516 | */ |
463 | private void findAndSendPathsUpdate(String bandWidth, String bandWidthType, String costType, String tunnelIdStr) { | 517 | private void findAndSendPathsUpdate(String bandWidth, String bandWidthType, String costType, String tunnelIdStr) { |
464 | if (tunnelIdStr != null) { | 518 | if (tunnelIdStr != null) { |
... | @@ -489,7 +543,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -489,7 +543,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
489 | /** | 543 | /** |
490 | * Handles the remove path and highlights the paths if existed. | 544 | * Handles the remove path and highlights the paths if existed. |
491 | * | 545 | * |
492 | - * @param tunnelIdName tunnelId | 546 | + * @param tunnelIdStr tunnelId |
493 | */ | 547 | */ |
494 | private void findAndSendPathsRemove(String tunnelIdStr) { | 548 | private void findAndSendPathsRemove(String tunnelIdStr) { |
495 | if (tunnelIdStr != null) { | 549 | if (tunnelIdStr != null) { |
... | @@ -519,7 +573,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -519,7 +573,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
519 | * @param bandWidth bandWidth | 573 | * @param bandWidth bandWidth |
520 | * @param bandWidthType is the kbps or mbps | 574 | * @param bandWidthType is the kbps or mbps |
521 | * @param costType is igp or te | 575 | * @param costType is igp or te |
522 | - * @param listConstrnt list of constraints | ||
523 | * @return | 576 | * @return |
524 | */ | 577 | */ |
525 | private List<Constraint> addBandwidthCostTypeConstraints(String bandWidth, | 578 | private List<Constraint> addBandwidthCostTypeConstraints(String bandWidth, |
... | @@ -622,16 +675,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -622,16 +675,6 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
622 | } | 675 | } |
623 | 676 | ||
624 | /** | 677 | /** |
625 | - * Handles the event of topology listeners. | ||
626 | - */ | ||
627 | - private class InternalTopologyListener implements TopologyListener { | ||
628 | - @Override | ||
629 | - public void event(TopologyEvent event) { | ||
630 | - findTunnelAndHighlights(); | ||
631 | - } | ||
632 | - } | ||
633 | - | ||
634 | - /** | ||
635 | * Handles the event of tunnel listeners. | 678 | * Handles the event of tunnel listeners. |
636 | */ | 679 | */ |
637 | private class InnerPceWebTunnelListener implements TunnelListener { | 680 | private class InnerPceWebTunnelListener implements TunnelListener { |
... | @@ -639,7 +682,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -639,7 +682,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
639 | public void event(TunnelEvent event) { | 682 | public void event(TunnelEvent event) { |
640 | Tunnel tunnel = event.subject(); | 683 | Tunnel tunnel = event.subject(); |
641 | if (tunnel.type() == MPLS) { | 684 | if (tunnel.type() == MPLS) { |
642 | - findTunnelAndHighlights(); | 685 | + highlightsForTunnel(tunnel); |
643 | } | 686 | } |
644 | } | 687 | } |
645 | } | 688 | } |
... | @@ -664,7 +707,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -664,7 +707,7 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
664 | sendMessage(TopoJson.highlightsMessage(highlights)); | 707 | sendMessage(TopoJson.highlightsMessage(highlights)); |
665 | return; | 708 | return; |
666 | } | 709 | } |
667 | - if (!tunnel.state().equals(Tunnel.State.ACTIVE)) { | 710 | + if (!tunnel.state().equals(ACTIVE)) { |
668 | log.debug("Tunnel state is not active"); | 711 | log.debug("Tunnel state is not active"); |
669 | sendMessage(TopoJson.highlightsMessage(highlights)); | 712 | sendMessage(TopoJson.highlightsMessage(highlights)); |
670 | return; | 713 | return; |
... | @@ -688,4 +731,40 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { | ... | @@ -688,4 +731,40 @@ public class PceWebTopovMessageHandler extends UiMessageHandler { |
688 | allPathLinks = buildPaths(builder).build(); | 731 | allPathLinks = buildPaths(builder).build(); |
689 | hilightAndSendPaths(highlights); | 732 | hilightAndSendPaths(highlights); |
690 | } | 733 | } |
734 | + | ||
735 | + /** | ||
736 | + * Handles the event of topology listeners. | ||
737 | + */ | ||
738 | + private void highlightsForTunnel(Tunnel tunnel) { | ||
739 | + Highlights highlights = new Highlights(); | ||
740 | + paths.removeAll(paths); | ||
741 | + if (tunnel.path() == null) { | ||
742 | + log.error("path does not exist"); | ||
743 | + sendMessage(TopoJson.highlightsMessage(highlights)); | ||
744 | + return; | ||
745 | + } | ||
746 | + if (!tunnel.state().equals(ACTIVE)) { | ||
747 | + log.debug("Tunnel state is not active"); | ||
748 | + sendMessage(TopoJson.highlightsMessage(highlights)); | ||
749 | + return; | ||
750 | + } | ||
751 | + | ||
752 | + Link firstLink = tunnel.path().links().get(0); | ||
753 | + if (firstLink != null) { | ||
754 | + if (firstLink.src() != null) { | ||
755 | + highlights = addBadge(highlights, firstLink.src().deviceId().toString(), SRC); | ||
756 | + } | ||
757 | + } | ||
758 | + Link lastLink = tunnel.path().links().get(tunnel.path().links().size() - 1); | ||
759 | + if (lastLink != null) { | ||
760 | + if (lastLink.dst() != null) { | ||
761 | + highlights = addBadge(highlights, lastLink.dst().deviceId().toString(), DST); | ||
762 | + } | ||
763 | + } | ||
764 | + paths.add(tunnel.path()); | ||
765 | + | ||
766 | + ImmutableSet.Builder<Link> builder = ImmutableSet.builder(); | ||
767 | + allPathLinks = buildPaths(builder).build(); | ||
768 | + hilightAndSendPaths(highlights); | ||
769 | + } | ||
691 | } | 770 | } | ... | ... |
... | @@ -21,24 +21,24 @@ import java.util.HashMap; | ... | @@ -21,24 +21,24 @@ import java.util.HashMap; |
21 | import java.util.Map; | 21 | import java.util.Map; |
22 | import java.util.Set; | 22 | import java.util.Set; |
23 | 23 | ||
24 | -import org.onlab.util.Bandwidth; | ||
25 | import org.onosproject.net.AnnotationKeys; | 24 | import org.onosproject.net.AnnotationKeys; |
26 | import org.onosproject.net.Annotations; | 25 | import org.onosproject.net.Annotations; |
27 | import org.onosproject.net.Device; | 26 | import org.onosproject.net.Device; |
28 | import org.onosproject.net.DeviceId; | 27 | import org.onosproject.net.DeviceId; |
29 | import org.onosproject.net.Link; | 28 | import org.onosproject.net.Link; |
29 | +import org.onosproject.net.resource.ContinuousResource; | ||
30 | +import org.onosproject.net.resource.ResourceService; | ||
31 | +import org.onosproject.net.resource.Resource; | ||
32 | +import org.onosproject.net.resource.DiscreteResource; | ||
33 | +import org.onosproject.net.resource.Resources; | ||
30 | import org.onosproject.ui.UiTopoOverlay; | 34 | import org.onosproject.ui.UiTopoOverlay; |
31 | import org.onosproject.ui.topo.PropertyPanel; | 35 | import org.onosproject.ui.topo.PropertyPanel; |
32 | import org.onosproject.net.device.DeviceService; | 36 | import org.onosproject.net.device.DeviceService; |
33 | import org.onosproject.net.link.LinkEvent; | 37 | import org.onosproject.net.link.LinkEvent; |
34 | -import org.onosproject.net.resource.ContinuousResource; | ||
35 | -import org.onosproject.net.resource.DiscreteResource; | ||
36 | -import org.onosproject.net.resource.Resource; | ||
37 | -import org.onosproject.net.resource.ResourceService; | ||
38 | -import org.onosproject.net.resource.Resources; | ||
39 | import org.onosproject.ui.topo.TopoConstants.CoreButtons; | 38 | import org.onosproject.ui.topo.TopoConstants.CoreButtons; |
40 | import org.onosproject.cli.AbstractShellCommand; | 39 | import org.onosproject.cli.AbstractShellCommand; |
41 | - | 40 | +import org.onlab.packet.Ip4Address; |
41 | +import org.onlab.packet.IpAddress; | ||
42 | /** | 42 | /** |
43 | * PCE WEB topology overlay. | 43 | * PCE WEB topology overlay. |
44 | */ | 44 | */ |
... | @@ -49,11 +49,16 @@ public class PceWebTopovOverlay extends UiTopoOverlay { | ... | @@ -49,11 +49,16 @@ public class PceWebTopovOverlay extends UiTopoOverlay { |
49 | private static final String MY_TITLE = "Device details"; | 49 | private static final String MY_TITLE = "Device details"; |
50 | 50 | ||
51 | public static final String AS_NUMBER = "asNumber"; | 51 | public static final String AS_NUMBER = "asNumber"; |
52 | - public static final String DOMAIN_IDENTIFIER = "domainIdentifier"; | 52 | + public static final String LSR_ID = "lsrId"; |
53 | public static final String ABR_BIT = "abrBit"; | 53 | public static final String ABR_BIT = "abrBit"; |
54 | public static final String ASBR_BIT = "externalBit"; | 54 | public static final String ASBR_BIT = "externalBit"; |
55 | public static final String TE_METRIC = "teCost"; | 55 | public static final String TE_METRIC = "teCost"; |
56 | - | 56 | + 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; | ||
57 | /** | 62 | /** |
58 | * Initialize the overlay ID. | 63 | * Initialize the overlay ID. |
59 | */ | 64 | */ |
... | @@ -71,11 +76,8 @@ public class PceWebTopovOverlay extends UiTopoOverlay { | ... | @@ -71,11 +76,8 @@ public class PceWebTopovOverlay extends UiTopoOverlay { |
71 | public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) { | 76 | public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) { |
72 | 77 | ||
73 | pp.title(MY_TITLE); | 78 | pp.title(MY_TITLE); |
74 | - | ||
75 | DeviceService deviceService = AbstractShellCommand.get(DeviceService.class); | 79 | DeviceService deviceService = AbstractShellCommand.get(DeviceService.class); |
76 | - | ||
77 | pp.removeAllProps(); | 80 | pp.removeAllProps(); |
78 | - | ||
79 | pp.removeButtons(CoreButtons.SHOW_PORT_VIEW) | 81 | pp.removeButtons(CoreButtons.SHOW_PORT_VIEW) |
80 | .removeButtons(CoreButtons.SHOW_GROUP_VIEW) | 82 | .removeButtons(CoreButtons.SHOW_GROUP_VIEW) |
81 | .removeButtons(CoreButtons.SHOW_METER_VIEW); | 83 | .removeButtons(CoreButtons.SHOW_METER_VIEW); |
... | @@ -85,10 +87,9 @@ public class PceWebTopovOverlay extends UiTopoOverlay { | ... | @@ -85,10 +87,9 @@ public class PceWebTopovOverlay extends UiTopoOverlay { |
85 | Device device = deviceService.getDevice(deviceId); | 87 | Device device = deviceService.getDevice(deviceId); |
86 | Annotations annots = device.annotations(); | 88 | Annotations annots = device.annotations(); |
87 | 89 | ||
88 | - String routerId = annots.value(AnnotationKeys.ROUTER_ID); | ||
89 | String type = annots.value(AnnotationKeys.TYPE); | 90 | String type = annots.value(AnnotationKeys.TYPE); |
90 | String asNumber = annots.value(AS_NUMBER); | 91 | String asNumber = annots.value(AS_NUMBER); |
91 | - String domain = annots.value(DOMAIN_IDENTIFIER); | 92 | + String lsrId = annots.value(LSR_ID); |
92 | String abrStatus = annots.value(ABR_BIT); | 93 | String abrStatus = annots.value(ABR_BIT); |
93 | String asbrStatus = annots.value(ASBR_BIT); | 94 | String asbrStatus = annots.value(ASBR_BIT); |
94 | 95 | ||
... | @@ -96,24 +97,22 @@ public class PceWebTopovOverlay extends UiTopoOverlay { | ... | @@ -96,24 +97,22 @@ public class PceWebTopovOverlay extends UiTopoOverlay { |
96 | pp.addProp("Type", type); | 97 | pp.addProp("Type", type); |
97 | } | 98 | } |
98 | 99 | ||
99 | - if (routerId != null) { | ||
100 | - pp.addProp("Router-ID", routerId); | ||
101 | - } | ||
102 | - | ||
103 | if (asNumber != null) { | 100 | if (asNumber != null) { |
104 | pp.addProp("AS Number", asNumber); | 101 | pp.addProp("AS Number", asNumber); |
105 | } | 102 | } |
106 | 103 | ||
107 | - if (domain != null) { | 104 | + if (lsrId != null) { |
108 | - pp.addProp("Domain ID", domain); | 105 | + pp.addProp("LSR ID", lsrId); |
109 | - } | ||
110 | - | ||
111 | - if (abrStatus != null) { | ||
112 | - pp.addProp("ABR Role", abrStatus); | ||
113 | } | 106 | } |
114 | 107 | ||
115 | - if (asbrStatus != null) { | 108 | + if (abrStatus.equals(true) && asbrStatus.equals(true)) { |
116 | - pp.addProp("ASBR Role", asbrStatus); | 109 | + pp.addProp("Position", ABR_ASBR); |
110 | + } else if (abrStatus.equals(true)) { | ||
111 | + pp.addProp("Position", ABR); | ||
112 | + } else if (asbrStatus.equals(true)) { | ||
113 | + pp.addProp("Position", ASBR); | ||
114 | + } else { | ||
115 | + pp.addProp("Position", INNER); | ||
117 | } | 116 | } |
118 | } | 117 | } |
119 | } | 118 | } |
... | @@ -122,30 +121,62 @@ public class PceWebTopovOverlay extends UiTopoOverlay { | ... | @@ -122,30 +121,62 @@ public class PceWebTopovOverlay extends UiTopoOverlay { |
122 | public Map<String, String> additionalLinkData(LinkEvent event) { | 121 | public Map<String, String> additionalLinkData(LinkEvent event) { |
123 | Map<String, String> map = new HashMap<>(); | 122 | Map<String, String> map = new HashMap<>(); |
124 | Link link = event.subject(); | 123 | Link link = event.subject(); |
124 | + long srcPortNo; | ||
125 | + long dstPortNo; | ||
126 | + IpAddress ipDstAddress = null; | ||
127 | + IpAddress ipSrcAddress = null; | ||
128 | + String srcPort; | ||
129 | + String dstPort; | ||
130 | + String bandWidth; | ||
131 | + | ||
132 | + 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 | + } | ||
125 | 147 | ||
126 | - map.put("Src port", link.src().port().toString()); | 148 | + map.put("Src Address", srcPort); |
127 | - map.put("Dst port", link.dst().port().toString()); | 149 | + map.put("Dst Address", dstPort); |
128 | map.put("Te metric", link.annotations().value(TE_METRIC)); | 150 | map.put("Te metric", link.annotations().value(TE_METRIC)); |
129 | 151 | ||
130 | ResourceService resService = AbstractShellCommand.get(ResourceService.class); | 152 | ResourceService resService = AbstractShellCommand.get(ResourceService.class); |
131 | DiscreteResource devResource = Resources.discrete(link.src().deviceId(), link.src().port()).resource(); | 153 | DiscreteResource devResource = Resources.discrete(link.src().deviceId(), link.src().port()).resource(); |
132 | if (resService == null) { | 154 | if (resService == null) { |
133 | - log.warn("resource service does not exist "); | 155 | + log.warn("resource service does not exist"); |
134 | return map; | 156 | return map; |
135 | } | 157 | } |
136 | 158 | ||
137 | if (devResource == null) { | 159 | if (devResource == null) { |
138 | - log.warn("Device resources does not exist "); | 160 | + log.warn("Device resources does not exist"); |
139 | return map; | 161 | return map; |
140 | } | 162 | } |
141 | - Set<Resource> resources = resService.getAvailableResources(devResource.id(), Bandwidth.class); | 163 | + double regBandwidth = 0; |
142 | - if (resources.isEmpty()) { | 164 | + try { |
143 | - log.warn("Bandwidth resources does not exist "); | 165 | + Thread.sleep(100); |
144 | - return map; | 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 | + } | ||
145 | } | 175 | } |
146 | 176 | ||
147 | - if (resources.iterator().next() instanceof ContinuousResource) { | 177 | + if (regBandwidth != 0) { |
148 | - map.put("Bandwidth", ((ContinuousResource) resources.iterator().next()).toString()); | 178 | + bandWidth = String.valueOf(regBandwidth); |
179 | + map.put("Bandwidth", bandWidth); | ||
149 | } | 180 | } |
150 | 181 | ||
151 | return map; | 182 | return map; | ... | ... |
... | @@ -21,7 +21,7 @@ | ... | @@ -21,7 +21,7 @@ |
21 | 21 | ||
22 | // injected refs | 22 | // injected refs |
23 | var $log, fs, flash, wss, tps, ns, tds, ds; | 23 | var $log, fs, flash, wss, tps, ns, tds, ds; |
24 | - var tunnelNameData, tunnelNameDataRemove, tunnelDataUpdateInfo, tunnelIdUpd; | 24 | + var tunnelNameData, tunnelNameDataRemove, tunnelDataUpdateInfo, tunnelIdUpd, tunnelNameDataQuery; |
25 | // constants | 25 | // constants |
26 | var srcMessage = 'pceTopovSetSrc', | 26 | var srcMessage = 'pceTopovSetSrc', |
27 | dstMessage = 'pceTopovSetDst', | 27 | dstMessage = 'pceTopovSetDst', |
... | @@ -35,11 +35,15 @@ | ... | @@ -35,11 +35,15 @@ |
35 | showTunnelInfoMsg = 'pceTopovShowTunnels', | 35 | showTunnelInfoMsg = 'pceTopovShowTunnels', |
36 | queryDisplayTunnelMsg = 'pceTopovTunnelDisplay', | 36 | queryDisplayTunnelMsg = 'pceTopovTunnelDisplay', |
37 | showTunnelInfoRemoveMsg = 'pceTopovShowTunnelsRem', | 37 | showTunnelInfoRemoveMsg = 'pceTopovShowTunnelsRem', |
38 | - showTunnelInfoUpdateMsg = 'pceTopovShowTunnelsUpdate'; | 38 | + showTunnelInfoUpdateMsg = 'pceTopovShowTunnelsUpdate', |
39 | + showTunnelInfoQuery = 'pceTopovShowTunnelsQuery', | ||
40 | + showTunnelHighlightMsg = 'pceTopovshowTunnelHighlightMsg'; | ||
41 | + | ||
39 | // internal state | 42 | // internal state |
40 | var currentMode = null; | 43 | var currentMode = null; |
41 | var handlerMap = {}, | 44 | var handlerMap = {}, |
42 | handlerMapRem = {}, | 45 | handlerMapRem = {}, |
46 | + handlerMapshowQuery = {}, | ||
43 | handlerMapShowUpdate = {}; | 47 | handlerMapShowUpdate = {}; |
44 | // === --------------------------- | 48 | // === --------------------------- |
45 | // === Helper functions | 49 | // === Helper functions |
... | @@ -92,6 +96,7 @@ | ... | @@ -92,6 +96,7 @@ |
92 | id: id | 96 | id: id |
93 | }); | 97 | }); |
94 | } | 98 | } |
99 | + | ||
95 | p.append('span').text(nameField); | 100 | p.append('span').text(nameField); |
96 | p.append('br'); | 101 | p.append('br'); |
97 | } | 102 | } |
... | @@ -107,13 +112,15 @@ | ... | @@ -107,13 +112,15 @@ |
107 | addAttribute('pce-cost-type-valname', 'pce-cost-type-igp', 'IGP', 'radio'); | 112 | addAttribute('pce-cost-type-valname', 'pce-cost-type-igp', 'IGP', 'radio'); |
108 | addAttribute('pce-cost-type-valname', 'pce-cost-type-te', 'TE', 'radio'); | 113 | addAttribute('pce-cost-type-valname', 'pce-cost-type-te', 'TE', 'radio'); |
109 | //Add the LSP type related inputs. | 114 | //Add the LSP type related inputs. |
110 | - addAttribute('pce-lsp-type-name', 'pce-lsp-type', 'Lsp Type', 'checkbox'); | 115 | + addAttribute('pce-lsp-type-name', 'pce-lsp-type', 'Lsp Type *', 'checkbox'); |
111 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-cr', 'With signalling', 'radio'); | 116 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-cr', 'With signalling', 'radio'); |
112 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-srbe', 'Without SR without signalling', 'radio'); | 117 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-srbe', 'Without SR without signalling', 'radio'); |
113 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-srte', 'With SR without signalling', 'radio'); | 118 | addAttribute('pce-lsp-type-valname', 'pce-lsp-type-srte', 'With SR without signalling', 'radio'); |
114 | //Add the tunnel name | 119 | //Add the tunnel name |
115 | - addAttribute('pce-tunnel-name', 'pce-tunnel-name-id', 'Tunnel Name', 'text'); | 120 | + p.append('span').text("Tunnel Name *"); |
116 | - | 121 | + p.append('br'); |
122 | + addAttribute('pce-tunnel-name', 'pce-tunnel-name-id', null, 'text'); | ||
123 | + p.append('span').text("* indicates mandatory fields"); | ||
117 | return content; | 124 | return content; |
118 | } | 125 | } |
119 | 126 | ||
... | @@ -125,19 +132,17 @@ | ... | @@ -125,19 +132,17 @@ |
125 | p.append('span').text('Tunnel IDs'); | 132 | p.append('span').text('Tunnel IDs'); |
126 | p.append('br'); | 133 | p.append('br'); |
127 | 134 | ||
128 | - data.a.forEach( function (val, idx) { | 135 | + for (var idx = 0; idx < data.a.length; idx++) { |
129 | p.append('input').attr({ | 136 | p.append('input').attr({ |
130 | id: 'tunnel-id-'+idx, | 137 | id: 'tunnel-id-'+idx, |
131 | type: 'radio', | 138 | type: 'radio', |
132 | name: 'tunnel-id-name', | 139 | name: 'tunnel-id-name', |
133 | - value: val | 140 | + value: data.a[idx] |
134 | }); | 141 | }); |
135 | - | 142 | + idx++; |
136 | - p.append('span').text(val); | 143 | + p.append('span').text(data.a[idx]); |
137 | p.append('br'); | 144 | p.append('br'); |
138 | - | 145 | + } |
139 | - } ); | ||
140 | - | ||
141 | return content; | 146 | return content; |
142 | } | 147 | } |
143 | 148 | ||
... | @@ -192,7 +197,9 @@ | ... | @@ -192,7 +197,9 @@ |
192 | } | 197 | } |
193 | 198 | ||
194 | if (constType == 'BW') { | 199 | if (constType == 'BW') { |
195 | - addAttribute('band-width-name', 'update-band-width-box', 'Band Width', 'checkbox'); | 200 | + //addAttribute('band-width-name', 'update-band-width-box', 'Band Width', 'checkbox'); |
201 | + p.append('span').text('Band Width'); | ||
202 | + p.append('br'); | ||
196 | p.append('input').attr({ | 203 | p.append('input').attr({ |
197 | id: 'update-band-width-value', | 204 | id: 'update-band-width-value', |
198 | type: 'number', | 205 | type: 'number', |
... | @@ -211,10 +218,13 @@ | ... | @@ -211,10 +218,13 @@ |
211 | p.append('br'); | 218 | p.append('br'); |
212 | addAttribute('pce-band-type', 'update-band-kbps-val', 'kbps', 'radio'); | 219 | addAttribute('pce-band-type', 'update-band-kbps-val', 'kbps', 'radio'); |
213 | addAttribute('pce-band-type', 'update-band-mbps-val', 'mbps', 'radio'); | 220 | addAttribute('pce-band-type', 'update-band-mbps-val', 'mbps', 'radio'); |
221 | + addAttribute('pce-band-type', 'update-band-none-val', 'none', 'radio'); | ||
214 | } | 222 | } |
215 | 223 | ||
216 | if (constType == 'CT') { | 224 | if (constType == 'CT') { |
217 | - addAttribute('pce-cost-type', 'update-pce-cost-type', 'Cost Type', 'checkbox'); | 225 | + //addAttribute('pce-cost-type', 'update-pce-cost-type', 'Cost Type', 'checkbox'); |
226 | + p.append('span').text('Cost Type'); | ||
227 | + p.append('br'); | ||
218 | if (val == 'COST') { | 228 | if (val == 'COST') { |
219 | p.append('input').attr({ | 229 | p.append('input').attr({ |
220 | id: 'update-pce-cost-type-igp', | 230 | id: 'update-pce-cost-type-igp', |
... | @@ -226,6 +236,7 @@ | ... | @@ -226,6 +236,7 @@ |
226 | p.append('span').text('IGP'); | 236 | p.append('span').text('IGP'); |
227 | p.append('br'); | 237 | p.append('br'); |
228 | addAttribute('pce-cost-type-value', 'update-pce-cost-type-te', 'TE', 'radio'); | 238 | addAttribute('pce-cost-type-value', 'update-pce-cost-type-te', 'TE', 'radio'); |
239 | + addAttribute('pce-cost-type-value', 'update-pce-cost-type-none', 'none', 'radio'); | ||
229 | 240 | ||
230 | } else { | 241 | } else { |
231 | addAttribute('pce-cost-type-value', 'update-pce-cost-type-igp', 'IGP', 'radio'); | 242 | addAttribute('pce-cost-type-value', 'update-pce-cost-type-igp', 'IGP', 'radio'); |
... | @@ -238,6 +249,7 @@ | ... | @@ -238,6 +249,7 @@ |
238 | }); | 249 | }); |
239 | p.append('span').text('TE'); | 250 | p.append('span').text('TE'); |
240 | p.append('br'); | 251 | p.append('br'); |
252 | + addAttribute('pce-cost-type-value', 'update-pce-cost-type-none', 'none', 'radio'); | ||
241 | } | 253 | } |
242 | } | 254 | } |
243 | } ); | 255 | } ); |
... | @@ -251,24 +263,47 @@ | ... | @@ -251,24 +263,47 @@ |
251 | form = content.append('form'), | 263 | form = content.append('form'), |
252 | p = form.append('p'); | 264 | p = form.append('p'); |
253 | 265 | ||
254 | - p.append('span').text('Tunnel IDs'); | 266 | + p.append('span').text('Tunnels'); |
255 | p.append('br'); | 267 | p.append('br'); |
256 | 268 | ||
257 | - data.a.forEach( function (val, idx) { | 269 | + for (var idx = 0; idx < data.a.length; idx++) { |
258 | p.append('input').attr({ | 270 | p.append('input').attr({ |
259 | id: 'tunnel-id-remove-'+idx, | 271 | id: 'tunnel-id-remove-'+idx, |
260 | type: 'checkbox', | 272 | type: 'checkbox', |
261 | name: 'tunnel-id-name-remove', | 273 | name: 'tunnel-id-name-remove', |
262 | - value: val | 274 | + value: data.a[idx] |
263 | }); | 275 | }); |
264 | - | 276 | + idx++; |
265 | - p.append('span').text(val); | 277 | + p.append('span').text(data.a[idx]); |
266 | p.append('br'); | 278 | p.append('br'); |
267 | - } ); | 279 | + } |
268 | 280 | ||
269 | return content; | 281 | return content; |
270 | } | 282 | } |
271 | 283 | ||
284 | + function createUserTextQuery(data) { | ||
285 | + | ||
286 | + var content = ds.createDiv(), | ||
287 | + form = content.append('form'), | ||
288 | + p = form.append('p'); | ||
289 | + | ||
290 | + p.append('span').text('Tunnels'); | ||
291 | + p.append('br'); | ||
292 | + | ||
293 | + for (var idx =0; idx < data.a.length; idx++) { | ||
294 | + p.append('input').attr({ | ||
295 | + id: 'tunnel-id-query-'+idx, | ||
296 | + type: 'radio', | ||
297 | + name: 'tunnel-id-name-query', | ||
298 | + value: data.a[idx] | ||
299 | + }); | ||
300 | + idx++; | ||
301 | + p.append('span').text(data.a[idx]); | ||
302 | + p.append('br'); | ||
303 | + } | ||
304 | + return content; | ||
305 | + } | ||
306 | + | ||
272 | function isChecked(cboxId) { | 307 | function isChecked(cboxId) { |
273 | return d3.select('#' + cboxId).property('checked'); | 308 | return d3.select('#' + cboxId).property('checked'); |
274 | } | 309 | } |
... | @@ -283,12 +318,13 @@ | ... | @@ -283,12 +318,13 @@ |
283 | 318 | ||
284 | function dOkUpdate() { | 319 | function dOkUpdate() { |
285 | var tdString = '' ; | 320 | var tdString = '' ; |
286 | - tunnelNameData.a.forEach( function (val, idx) { | 321 | + for (var idx = 0; idx < tunnelNameData.a.length; idx++) { |
287 | var tunnelName = isChecked('tunnel-id-'+idx); | 322 | var tunnelName = isChecked('tunnel-id-'+idx); |
288 | if (tunnelName) { | 323 | if (tunnelName) { |
289 | - tdString = val; | 324 | + tdString = tunnelNameData.a[idx]; |
290 | } | 325 | } |
291 | - } ); | 326 | + idx++; |
327 | + } | ||
292 | //send event to server for getting the tunnel information. | 328 | //send event to server for getting the tunnel information. |
293 | if (tdString != null) { | 329 | if (tdString != null) { |
294 | handlerMapShowUpdate[showTunnelInfoUpdateMsg] = showTunnelInfoUpdateMsgHandle; | 330 | handlerMapShowUpdate[showTunnelInfoUpdateMsg] = showTunnelInfoUpdateMsgHandle; |
... | @@ -313,31 +349,30 @@ | ... | @@ -313,31 +349,30 @@ |
313 | function dOkUpdateEvent() { | 349 | function dOkUpdateEvent() { |
314 | $log.debug('Select constraints for update path Dialog OK button pressed'); | 350 | $log.debug('Select constraints for update path Dialog OK button pressed'); |
315 | 351 | ||
316 | - var bandWidth = isChecked('update-band-width-box'), | 352 | + var bandValue = null, |
317 | - bandValue = null, | ||
318 | bandType = null; | 353 | bandType = null; |
319 | 354 | ||
320 | - if (bandWidth) { | 355 | + bandValue = getCheckedValue('update-band-width-value'); |
321 | - bandValue = getCheckedValue('update-band-width-value'); | ||
322 | 356 | ||
323 | - if (isChecked('update-band-kbps-val')) { | 357 | + if (isChecked('update-band-kbps-val')) { |
324 | bandType = 'kbps'; | 358 | bandType = 'kbps'; |
325 | - } else if (isChecked('update-band-mbps-val')) { | 359 | + } else if (isChecked('update-band-mbps-val')) { |
326 | bandType = 'mbps'; | 360 | bandType = 'mbps'; |
327 | - } else if (isChecked('update-band-bps-val')) { | 361 | + } else if (isChecked('update-band-bps-val')) { |
328 | bandType = 'bps'; | 362 | bandType = 'bps'; |
329 | - } | 363 | + } else if (isChecked('update-band-none-val')) { |
364 | + bandType = null; | ||
365 | + bandValue = null; | ||
330 | } | 366 | } |
331 | 367 | ||
332 | - var costType = isChecked('update-pce-cost-type'), | 368 | + var costTypeVal = null; |
333 | - costTypeVal = null; | ||
334 | 369 | ||
335 | - if (costType) { | 370 | + if (isChecked('update-pce-cost-type-igp')) { |
336 | - if (isChecked('update-pce-cost-type-igp')) { | 371 | + costTypeVal = 'igp'; |
337 | - costTypeVal = 'igp'; | 372 | + } else if (isChecked('update-pce-cost-type-te')) { |
338 | - } else if (isChecked('update-pce-cost-type-te')) { | 373 | + costTypeVal = 'te'; |
339 | - costTypeVal = 'te'; | 374 | + } else if (isChecked('update-pce-cost-type-none')) { |
340 | - } | 375 | + costTypeVal = null; |
341 | } | 376 | } |
342 | 377 | ||
343 | wss.sendEvent(updatePathmsg, { | 378 | wss.sendEvent(updatePathmsg, { |
... | @@ -363,6 +398,18 @@ | ... | @@ -363,6 +398,18 @@ |
363 | .bindKeys(); | 398 | .bindKeys(); |
364 | } | 399 | } |
365 | 400 | ||
401 | + function showTunnelInformationQuery(data) { | ||
402 | + | ||
403 | + wss.unbindHandlers(handlerMapshowQuery); | ||
404 | + tunnelNameDataQuery = data; | ||
405 | + tds.openDialog() | ||
406 | + .setTitle('Available Tunnels for highlight') | ||
407 | + .addContent(createUserTextQuery(data)) | ||
408 | + .addOk(dOkQuery, 'OK') | ||
409 | + .addCancel(dClose, 'Close') | ||
410 | + .bindKeys(); | ||
411 | + } | ||
412 | + | ||
366 | function showTunnelInfoUpdateMsgHandle(data) { | 413 | function showTunnelInfoUpdateMsgHandle(data) { |
367 | 414 | ||
368 | wss.unbindHandlers(handlerMapShowUpdate); | 415 | wss.unbindHandlers(handlerMapShowUpdate); |
... | @@ -456,14 +503,30 @@ | ... | @@ -456,14 +503,30 @@ |
456 | 503 | ||
457 | function dOkRemove() { | 504 | function dOkRemove() { |
458 | 505 | ||
459 | - tunnelNameDataRemove.a.forEach( function (val, idx) { | 506 | + for (var idx = 0; idx < tunnelNameDataRemove.a.length; idx++) { |
460 | var tunnelNameVal = isChecked('tunnel-id-remove-'+idx); | 507 | var tunnelNameVal = isChecked('tunnel-id-remove-'+idx); |
461 | if (tunnelNameVal) { | 508 | if (tunnelNameVal) { |
462 | wss.sendEvent(remPathmsg, { | 509 | wss.sendEvent(remPathmsg, { |
463 | - tunnelid: val | 510 | + tunnelid: tunnelNameDataRemove.a[idx] |
464 | }); | 511 | }); |
465 | } | 512 | } |
466 | - } ); | 513 | + idx++; |
514 | + } | ||
515 | + | ||
516 | + flash.flash('remove path message'); | ||
517 | + } | ||
518 | + | ||
519 | + function dOkQuery() { | ||
520 | + | ||
521 | + for (var idx = 0; idx < tunnelNameDataQuery.a.length; idx++) { | ||
522 | + var tunnelNameVal = isChecked('tunnel-id-query-'+idx); | ||
523 | + if (tunnelNameVal) { | ||
524 | + wss.sendEvent(showTunnelHighlightMsg, { | ||
525 | + tunnelid: tunnelNameDataQuery.a[idx] | ||
526 | + }); | ||
527 | + } | ||
528 | + idx++; | ||
529 | + } | ||
467 | 530 | ||
468 | flash.flash('remove path message'); | 531 | flash.flash('remove path message'); |
469 | } | 532 | } |
... | @@ -479,6 +542,9 @@ | ... | @@ -479,6 +542,9 @@ |
479 | } | 542 | } |
480 | 543 | ||
481 | function queryTunnelDisplay() { | 544 | function queryTunnelDisplay() { |
545 | + handlerMapshowQuery[showTunnelInfoQuery] = showTunnelInformationQuery; | ||
546 | + wss.bindHandlers(handlerMapshowQuery); | ||
547 | + | ||
482 | wss.sendEvent(queryDisplayTunnelMsg); | 548 | wss.sendEvent(queryDisplayTunnelMsg); |
483 | } | 549 | } |
484 | // === --------------------------- | 550 | // === --------------------------- | ... | ... |
-
Please register or login to post a comment