Committed by
Gerrit Code Review
cherry pick of [ONOS-4807] [ONOS-4808] [ONOS-4669]SR-TE resilency defect fix and…
… networkconfig exception Change-Id: I59d865cdd98ee80e1273ec1f9f8bd56a24e8c8b0
Showing
4 changed files
with
31 additions
and
11 deletions
| ... | @@ -641,7 +641,7 @@ public class PceManager implements PceService { | ... | @@ -641,7 +641,7 @@ public class PceManager implements PceService { |
| 641 | * | 641 | * |
| 642 | * @return value of local LSP identifier | 642 | * @return value of local LSP identifier |
| 643 | */ | 643 | */ |
| 644 | - private short getNextLocalLspId() { | 644 | + private synchronized short getNextLocalLspId() { |
| 645 | // If there is any free id use it. Otherwise generate new id. | 645 | // If there is any free id use it. Otherwise generate new id. |
| 646 | if (localLspIdFreeList.isEmpty()) { | 646 | if (localLspIdFreeList.isEmpty()) { |
| 647 | return (short) localLspIdIdGen.getNewId(); | 647 | return (short) localLspIdIdGen.getNewId(); | ... | ... |
| ... | @@ -44,6 +44,7 @@ import org.onosproject.pce.pceservice.constraint.CapabilityConstraint; | ... | @@ -44,6 +44,7 @@ import org.onosproject.pce.pceservice.constraint.CapabilityConstraint; |
| 44 | import org.onosproject.pce.pceservice.constraint.CostConstraint; | 44 | import org.onosproject.pce.pceservice.constraint.CostConstraint; |
| 45 | import org.onosproject.pce.pceservice.TunnelConsumerId; | 45 | import org.onosproject.pce.pceservice.TunnelConsumerId; |
| 46 | import org.onosproject.pce.pceservice.LspType; | 46 | import org.onosproject.pce.pceservice.LspType; |
| 47 | +import org.onosproject.pce.pceservice.constraint.SharedBandwidthConstraint; | ||
| 47 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; | 48 | import org.onosproject.pce.pcestore.api.LspLocalLabelInfo; |
| 48 | import org.onosproject.pce.pcestore.api.PceStore; | 49 | import org.onosproject.pce.pcestore.api.PceStore; |
| 49 | import org.onosproject.store.serializers.KryoNamespaces; | 50 | import org.onosproject.store.serializers.KryoNamespaces; |
| ... | @@ -142,6 +143,7 @@ public class DistributedPceStore implements PceStore { | ... | @@ -142,6 +143,7 @@ public class DistributedPceStore implements PceStore { |
| 142 | CostConstraint.class, | 143 | CostConstraint.class, |
| 143 | CostConstraint.Type.class, | 144 | CostConstraint.Type.class, |
| 144 | BandwidthConstraint.class, | 145 | BandwidthConstraint.class, |
| 146 | + SharedBandwidthConstraint.class, | ||
| 145 | CapabilityConstraint.class, | 147 | CapabilityConstraint.class, |
| 146 | CapabilityConstraint.CapabilityType.class, | 148 | CapabilityConstraint.CapabilityType.class, |
| 147 | LspType.class) | 149 | LspType.class) | ... | ... |
| ... | @@ -61,7 +61,7 @@ public class BgpMessageDecoder extends FrameDecoder { | ... | @@ -61,7 +61,7 @@ public class BgpMessageDecoder extends FrameDecoder { |
| 61 | BgpMessage message = reader.readFrom(buffer, bgpHeader); | 61 | BgpMessage message = reader.readFrom(buffer, bgpHeader); |
| 62 | msgList.add(message); | 62 | msgList.add(message); |
| 63 | } | 63 | } |
| 64 | - | 64 | + ctx.setAttachment(null); |
| 65 | return msgList; | 65 | return msgList; |
| 66 | } catch (Exception e) { | 66 | } catch (Exception e) { |
| 67 | log.debug("Bgp protocol message decode error"); | 67 | log.debug("Bgp protocol message decode error"); | ... | ... |
| ... | @@ -1504,7 +1504,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1504,7 +1504,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1504 | log.error("ERO object is null in report message."); | 1504 | log.error("ERO object is null in report message."); |
| 1505 | return; | 1505 | return; |
| 1506 | } | 1506 | } |
| 1507 | - | ||
| 1508 | PcepAttribute attributes = msgPath.getPcepAttribute(); | 1507 | PcepAttribute attributes = msgPath.getPcepAttribute(); |
| 1509 | float bandwidth = 0; | 1508 | float bandwidth = 0; |
| 1510 | int cost = 0; | 1509 | int cost = 0; |
| ... | @@ -1541,6 +1540,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1541,6 +1540,9 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1541 | labels.add(LabelResourceId.labelResourceId(((Integer) linkOrLabel).longValue())); | 1540 | labels.add(LabelResourceId.labelResourceId(((Integer) linkOrLabel).longValue())); |
| 1542 | } | 1541 | } |
| 1543 | } | 1542 | } |
| 1543 | + if (links.isEmpty()) { | ||
| 1544 | + return; | ||
| 1545 | + } | ||
| 1544 | Path path = new DefaultPath(providerId, links, cost, EMPTY); | 1546 | Path path = new DefaultPath(providerId, links, cost, EMPTY); |
| 1545 | NetworkResource labelStack = new DefaultLabelStack(labels); | 1547 | NetworkResource labelStack = new DefaultLabelStack(labels); |
| 1546 | // To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action | 1548 | // To carry PST TLV, SRP object can be present with value 0 even when PCRpt is not in response to any action |
| ... | @@ -1579,7 +1581,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1579,7 +1581,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1579 | IpTunnelEndPoint tunnelEndPointDst = IpTunnelEndPoint | 1581 | IpTunnelEndPoint tunnelEndPointDst = IpTunnelEndPoint |
| 1580 | .ipTunnelPoint(IpAddress.valueOf(ipv4LspIdenTlv.getIpv4EgressAddress())); | 1582 | .ipTunnelPoint(IpAddress.valueOf(ipv4LspIdenTlv.getIpv4EgressAddress())); |
| 1581 | Collection<Tunnel> tunnelQueryResult = tunnelService.queryTunnel(tunnelEndPointSrc, tunnelEndPointDst); | 1583 | Collection<Tunnel> tunnelQueryResult = tunnelService.queryTunnel(tunnelEndPointSrc, tunnelEndPointDst); |
| 1582 | - | ||
| 1583 | // Store delegation flag info and that LSP info because only delegated PCE sends update message | 1584 | // Store delegation flag info and that LSP info because only delegated PCE sends update message |
| 1584 | // Storing if D flag is set, if not dont store. while checking whether delegation if annotation for D flag | 1585 | // Storing if D flag is set, if not dont store. while checking whether delegation if annotation for D flag |
| 1585 | // not present then non-delegated , if present it is delegated. | 1586 | // not present then non-delegated , if present it is delegated. |
| ... | @@ -1623,7 +1624,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1623,7 +1624,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1623 | */ | 1624 | */ |
| 1624 | return; | 1625 | return; |
| 1625 | } | 1626 | } |
| 1626 | - | ||
| 1627 | DeviceId deviceId = getDevice(pccId); | 1627 | DeviceId deviceId = getDevice(pccId); |
| 1628 | if (deviceId == null) { | 1628 | if (deviceId == null) { |
| 1629 | log.error("Ingress deviceId not found"); | 1629 | log.error("Ingress deviceId not found"); |
| ... | @@ -1640,7 +1640,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1640,7 +1640,6 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1640 | log.error("Received PCC initiated LSP while not in sync."); | 1640 | log.error("Received PCC initiated LSP while not in sync."); |
| 1641 | return; | 1641 | return; |
| 1642 | } | 1642 | } |
| 1643 | - | ||
| 1644 | /* | 1643 | /* |
| 1645 | * If ONOS instance is master for PCC then set delegated flag as annotation and add the tunnel to store. | 1644 | * If ONOS instance is master for PCC then set delegated flag as annotation and add the tunnel to store. |
| 1646 | * Because all LSPs need not be delegated, hence mastership for the PCC is confirmed whereas not the | 1645 | * Because all LSPs need not be delegated, hence mastership for the PCC is confirmed whereas not the |
| ... | @@ -1735,7 +1734,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1735,7 +1734,7 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1735 | LinkedList<PcepValueType> llSubObj = eroObj.getSubObjects(); | 1734 | LinkedList<PcepValueType> llSubObj = eroObj.getSubObjects(); |
| 1736 | if (0 == llSubObj.size()) { | 1735 | if (0 == llSubObj.size()) { |
| 1737 | log.error("ERO in report message does not have hop information"); | 1736 | log.error("ERO in report message does not have hop information"); |
| 1738 | - return null; | 1737 | + return new ArrayList<>(); |
| 1739 | } | 1738 | } |
| 1740 | ListIterator<PcepValueType> tlvIterator = llSubObj.listIterator(); | 1739 | ListIterator<PcepValueType> tlvIterator = llSubObj.listIterator(); |
| 1741 | 1740 | ||
| ... | @@ -1789,10 +1788,29 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid | ... | @@ -1789,10 +1788,29 @@ public class PcepTunnelProvider extends AbstractProvider implements TunnelProvid |
| 1789 | 1788 | ||
| 1790 | if (srEroSubObj.getSt() == PcepNaiIpv4Adjacency.ST_TYPE) { | 1789 | if (srEroSubObj.getSt() == PcepNaiIpv4Adjacency.ST_TYPE) { |
| 1791 | PcepNaiIpv4Adjacency nai = (PcepNaiIpv4Adjacency) (srEroSubObj.getNai()); | 1790 | PcepNaiIpv4Adjacency nai = (PcepNaiIpv4Adjacency) (srEroSubObj.getNai()); |
| 1792 | - IpAddress srcIp = IpAddress.valueOf(nai.getLocalIpv4Addr()); | 1791 | + int srcIp = nai.getLocalIpv4Addr(); |
| 1793 | - src = new ConnectPoint(IpElementId.ipElement(srcIp), PortNumber.portNumber(0)); | 1792 | + int dstIp = nai.getRemoteIpv4Addr(); |
| 1794 | - IpAddress dstIp = IpAddress.valueOf(nai.getRemoteIpv4Addr()); | 1793 | + Iterable<Link> links = linkService.getActiveLinks(); |
| 1795 | - dst = new ConnectPoint(IpElementId.ipElement(dstIp), PortNumber.portNumber(0)); | 1794 | + for (Link l : links) { |
| 1795 | + long lSrc = l.src().port().toLong(); | ||
| 1796 | + long lDst = l.dst().port().toLong(); | ||
| 1797 | + if (lSrc == srcIp) { | ||
| 1798 | + src = l.src(); | ||
| 1799 | + } else if (lDst == srcIp) { | ||
| 1800 | + src = l.dst(); | ||
| 1801 | + } | ||
| 1802 | + if (lSrc == dstIp) { | ||
| 1803 | + dst = l.src(); | ||
| 1804 | + } else if (lDst == dstIp) { | ||
| 1805 | + dst = l.dst(); | ||
| 1806 | + } | ||
| 1807 | + if (src != null && dst != null) { | ||
| 1808 | + break; | ||
| 1809 | + } | ||
| 1810 | + } | ||
| 1811 | + if (src == null || dst == null) { | ||
| 1812 | + return new ArrayList<>(); | ||
| 1813 | + } | ||
| 1796 | Link link = DefaultLink.builder() | 1814 | Link link = DefaultLink.builder() |
| 1797 | .providerId(providerId) | 1815 | .providerId(providerId) |
| 1798 | .src(src) | 1816 | .src(src) | ... | ... |
-
Please register or login to post a comment