[ONOS] cherry picked from 1.6, bandwidth, CR and resilency fix

Change-Id: Ifd7bf886d2725db1f5e2f7a1eac739d9a446f868
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
index 5fc6a95..8d45e08 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelProvider.java
@@ -66,6 +66,7 @@
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
 import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.link.LinkService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
 import org.onosproject.pcep.api.PcepController;
@@ -213,6 +214,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DeviceService deviceService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected LinkService linkService;
+
     TunnelProviderService service;
 
     HashMap<String, TunnelId> tunnelMap = new HashMap<String, TunnelId>();
@@ -609,6 +613,7 @@
         if (tunnel.type() == MPLS) {
             pcepTunnelApiMapper.removeFromCoreTunnelRequestQueue(tunnel.id());
             service.tunnelRemoved(tunnel);
+            return;
         }
 
         Tunnel tunnelOld = tunnelQueryById(tunnel.id());
@@ -1012,9 +1017,9 @@
         //build ERO object
         PcepEroObject eroobj = pc.factory().buildEroObject().setSubObjects(llSubObjects).build();
 
-        int  iBandwidth = DEFAULT_BANDWIDTH_VALUE;
+        float  iBandwidth = DEFAULT_BANDWIDTH_VALUE;
         if (tunnel.annotations().value(BANDWIDTH) != null) {
-            iBandwidth = Float.floatToIntBits(Float.parseFloat(tunnel.annotations().value(BANDWIDTH)));
+            iBandwidth = Float.valueOf(tunnel.annotations().value(BANDWIDTH));
         }
         // build bandwidth object
         PcepBandwidthObject bandwidthObject = pc.factory().buildBandwidthObject().setBandwidth(iBandwidth).build();
@@ -1680,8 +1685,8 @@
                         bandwidth, lspType,
                         tunnel.annotations().value(COST_TYPE));
                 td = new DefaultTunnelDescription(null, tunnelEndPointSrc, tunnelEndPointDst, MPLS, new DefaultGroupId(
-                        0), providerId, TunnelName.tunnelName(new String(pathNameTlv.getValue())), path, labelStack,
-                        annotations);
+                        0), providerId, TunnelName.tunnelName(new String(pathNameTlv.getValue())),
+                        tunnel.path(), labelStack, annotations);
                 tunnelUpdateInDelegatedCase(pccId, annotations, td, providerId);
             }
             removeOrUpdatetunnel(tunnel, pccId, lspObj, providerId, tunnelState);
@@ -1743,12 +1748,29 @@
 
                     IPv4SubObject ipv4SubObj = (IPv4SubObject) subObj;
                     if (!isSrcSet) {
-                        IpAddress srcIp = IpAddress.valueOf(ipv4SubObj.getIpAddress());
-                        src = new ConnectPoint(IpElementId.ipElement(srcIp), PortNumber.portNumber(0));
-                        isSrcSet = true;
-                    } else {
-                        IpAddress dstIp = IpAddress.valueOf(ipv4SubObj.getIpAddress());
-                        dst = new ConnectPoint(IpElementId.ipElement(dstIp), PortNumber.portNumber(0));
+                            Iterable<Link> links = linkService.getActiveLinks();
+                            for (Link l : links) {
+                                if (l.src().port().equals(PortNumber.portNumber(ipv4SubObj.getIpAddress()))) {
+                                    src = l.src();
+                                    isSrcSet = true;
+                                    break;
+                                } else if (l.dst().port().equals(PortNumber.portNumber(ipv4SubObj.getIpAddress()))) {
+                                    src = l.dst();
+                                    isSrcSet = true;
+                                    break;
+                                }
+                            }
+                        } else {
+                            Iterable<Link> links = linkService.getActiveLinks();
+                            for (Link l : links) {
+                                if (l.src().port().equals(PortNumber.portNumber(ipv4SubObj.getIpAddress()))) {
+                                    dst = l.src();
+                                    break;
+                                } else if (l.dst().port().equals(PortNumber.portNumber(ipv4SubObj.getIpAddress()))) {
+                                    dst = l.dst();
+                                    break;
+                                }
+                            }
                         Link link = DefaultLink.builder()
                                 .providerId(providerId)
                                 .src(src)