From 265b3bbdf9617f66e7f9ce5b09a80a647fb97c9a Mon Sep 17 00:00:00 2001 From: Yixiao Chen Date: Fri, 13 Jan 2017 10:17:03 -0500 Subject: [PATCH] TeTopology core and nbi bug fixes and improvements Change-Id: I5f3dbcaa79b04c1b1b00b9df7ccae804953c3bae --- .../teyang/utils/topology/EnumConverter.java | 2 +- .../teyang/utils/topology/LinkConverter.java | 568 +++++++++--------- .../utils/topology/NetworkConverter.java | 53 +- .../teyang/utils/topology/NodeConverter.java | 405 ++++++------- .../management/api/TeTopologyService.java | 7 + .../node/DefaultTunnelTerminationPoint.java | 31 +- .../api/node/TunnelTerminationPoint.java | 13 +- .../impl/DistributedTeTopologyStore.java | 29 +- .../management/impl/TeTopologyConfig.java | 86 +-- .../management/impl/TeTopologyManager.java | 86 ++- .../management/impl/TeTopologyStore.java | 6 +- .../tetopology/management/DefaultBuilder.java | 2 +- .../management/SimpleTeTopologyStore.java | 9 +- .../management/TeTopologyManagerTest.java | 1 + .../topology/TeTopologyRestconfProvider.java | 2 +- 15 files changed, 671 insertions(+), 629 deletions(-) diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java index 1e15726928..f733231e7a 100644 --- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java +++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/EnumConverter.java @@ -146,4 +146,4 @@ public final class EnumConverter { } } -} +} \ No newline at end of file diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java index c567667319..1234f7c5b1 100644 --- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java +++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java @@ -15,7 +15,14 @@ */ package org.onosproject.teyang.utils.topology; -import com.google.common.collect.Lists; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.tetopology.management.api.TeConstants.MAX_PRIORITY; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.BitSet; +import java.util.List; + import org.onlab.packet.Ip4Address; import org.onosproject.tetopology.management.api.KeyId; import org.onosproject.tetopology.management.api.TeStatus; @@ -24,6 +31,7 @@ import org.onosproject.tetopology.management.api.TeTopologyService; import org.onosproject.tetopology.management.api.link.CommonLinkData; import org.onosproject.tetopology.management.api.link.DefaultNetworkLink; import org.onosproject.tetopology.management.api.link.DefaultTeLink; +import org.onosproject.tetopology.management.api.link.ElementType; import org.onosproject.tetopology.management.api.link.ExternalLink; import org.onosproject.tetopology.management.api.link.LinkBandwidth; import org.onosproject.tetopology.management.api.link.NetworkLink; @@ -31,6 +39,7 @@ import org.onosproject.tetopology.management.api.link.NetworkLinkEventSubject; import org.onosproject.tetopology.management.api.link.NetworkLinkKey; import org.onosproject.tetopology.management.api.link.PathElement; import org.onosproject.tetopology.management.api.link.TeLink; +import org.onosproject.tetopology.management.api.link.TeLinkId; import org.onosproject.tetopology.management.api.link.TeLinkTpGlobalKey; import org.onosproject.tetopology.management.api.link.TeLinkTpKey; import org.onosproject.tetopology.management.api.link.TePathAttributes; @@ -41,137 +50,96 @@ import org.onosproject.tetopology.management.api.link.UnderlayPath; import org.onosproject.tetopology.management.api.node.NodeTpKey; import org.onosproject.tetopology.management.api.node.TeNode; import org.onosproject.tetopology.management.api.node.TerminationPointKey; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ietfinettypes.IpAddress; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network - .Node; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .LinkId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .TpId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.AugmentedNdNetwork; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.DefaultLink; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.DefaultLink.LinkBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.Link; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.DefaultDestination; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.DefaultSource; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.DefaultSupportingLink; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.Destination.DestinationBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.Source.SourceBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.SupportingLink; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.augmentedndnetwork.link.SupportingLink.SupportingLinkBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.node.AugmentedNdNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .DefaultTeLinkEvent; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network.Node; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.LinkId; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.TpId; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.AugmentedNdNetwork; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink.LinkBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.Link; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultDestination; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSource; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSupportingLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.Destination + .DestinationBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.Source.SourceBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink + .SupportingLinkBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.node.AugmentedNdNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeLinkEvent; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeLinkEvent; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.DefaultInformationSourceState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.InformationSourceState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.informationsourcestate.DefaultTopology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.informationsourcestate.Topology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.AugmentedNwNetwork; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.link.AugmentedNtLink; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.link.DefaultAugmentedNtLink; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.node.AugmentedNwNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.node.terminationpoint.AugmentedNtTerminationPoint; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.DefaultTe; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.DefaultTe.TeBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.Config; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.DefaultConfig; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.DefaultConfig.ConfigBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.DefaultState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.DefaultState.StateBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkaugment.te.State; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.DefaultTeLinkAttributes; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.TeLinkAttributes; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.telinkattributes.DefaultExternalDomain; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconfigattributes.telinkattributes.ExternalDomain; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.DefaultTeSrlgs; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.DefaultUnreservedBandwidth; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.TeSrlgs; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkconnectivityattributes.UnreservedBandwidth; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkinfoattributes.LinkProtectionTypeEnum; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.DefaultUnderlayBackupPath; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.DefaultUnderlayPrimaryPath; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.UnderlayPrimaryPath; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .telinkunderlayattributes.underlayprimarypath.DefaultPathElement; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.Te; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.AugmentedNwNetwork; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.networks.network.link.AugmentedNtLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.networks.network.link.DefaultAugmentedNtLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.networks.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.AugmentedNwNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe.TeBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.Config; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig.ConfigBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState.StateBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.State; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.TeLinkAttributes; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain.ExternalDomainBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay.UnderlayBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.TeSrlgs; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkinfoattributes.LinkProtectionTypeEnum; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath.UnderlayBackupPathBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath.UnderlayPrimaryPathBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.UnderlayPrimaryPath; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.underlayprimarypath.DefaultPathElement; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeOperStatus; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes - .TeTopologyEventType; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTpId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes - .tetopologyeventtype.TeTopologyEventTypeEnum; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.BitSet; -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink.UnnumberedLinkBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.UnnumberedLink; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum; +import com.google.common.collect.Lists; /** * The conversion functions. @@ -194,30 +162,29 @@ public final class LinkConverter { private static LinkProtectionTypeEnum teSubsystem2YangLinkProtectionType(TunnelProtectionType linkProtectionType) { switch (linkProtectionType) { - case ENHANCED: - return LinkProtectionTypeEnum.ENHANCED; - case EXTRA_TRAFFIC: - return LinkProtectionTypeEnum.EXTRA_TRAFFIC; - case SHARED: - return LinkProtectionTypeEnum.SHARED; - case UNPROTECTED: - return LinkProtectionTypeEnum.UNPROTECTED; - case ONE_FOR_ONE: - return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1; - case ONE_PLUS_ONE: - return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1; - default: - return null; + case ENHANCED: + return LinkProtectionTypeEnum.ENHANCED; + case EXTRA_TRAFFIC: + return LinkProtectionTypeEnum.EXTRA_TRAFFIC; + case SHARED: + return LinkProtectionTypeEnum.SHARED; + case UNPROTECTED: + return LinkProtectionTypeEnum.UNPROTECTED; + case ONE_FOR_ONE: + return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1; + case ONE_PLUS_ONE: + return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1; + default: + return null; } } - /** * TE Link Config object conversion from TE Topology subsystem to YANG. * * @param teLink TE link object * @return TE Link Config YANG object */ - private static Config teLink2YangConfig(TeLink teLink) { + private static Config teLink2YangConfig(TeLink teLink, TeTopologyService teTopologyService) { checkNotNull(teLink, E_NULL_TELINK_DATA); TeLinkAttributesBuilder attrBuilder = DefaultTeLinkAttributes.builder(); @@ -234,7 +201,7 @@ public final class LinkConverter { if (teLink.tunnelProtectionType() != null) { attrBuilder = attrBuilder .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink - .tunnelProtectionType())); + .tunnelProtectionType())); } attrBuilder = attrBuilder.teDefaultMetric(teLink.cost()); @@ -257,27 +224,25 @@ public final class LinkConverter { if (teLink.externalLink().externalLinkKey() != null) { edBuilder = edBuilder .remoteTeLinkTpId(TeTpId.fromString( - String.valueOf(teLink - .externalLink() - .externalLinkKey() - .teLinkTpId()))) + String.valueOf(teLink + .externalLink() + .externalLinkKey() + .teLinkTpId()))) .remoteTeNodeId(TeNodeId.fromString( - String.valueOf(teLink - .externalLink() - .externalLinkKey() - .teNodeId()))); + String.valueOf(teLink + .externalLink() + .externalLinkKey() + .teNodeId()))); } attrBuilder = attrBuilder.externalDomain(edBuilder.build()); } if (teLink.availBandwidth() != null) { - short i = 0; - for (float f : teLink.availBandwidth()) { + for (short i = 0; i < teLink.availBandwidth().length; i++) { UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth.builder() - .bandwidth(BigDecimal.valueOf(f)) - .priority(i); - i++; + .bandwidth(BigDecimal.valueOf(teLink.availBandwidth()[i])) + .priority(i); attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build()); } } @@ -291,23 +256,27 @@ public final class LinkConverter { // attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth()); // } -// UnderlayBuilder builder = DefaultUnderlay.builder(); -// if (teLink.primaryPath() != null) { -// -// // TODO: what is underlayProtectionType in tePath? -// // builder = builder.underlayProtectionType(tePath.protectionType()); -// -// builder = te2YangConfigUnderlayPrimaryPath(builder, teLink); -// } -// -// if (teLink.backupPaths() != null) { -// builder = te2YangConfigUnderlayBackupPaths(builder, teLink); -// } -// -// attrBuilder = attrBuilder.underlay(builder.build()); + if (teLink.primaryPath() != null || teLink.backupPaths() != null) { + UnderlayBuilder builder = DefaultUnderlay.builder(); + if (teLink.primaryPath() != null) { + // TODO: what is underlayProtectionType in tePath? + // builder = + // builder.underlayProtectionType(tePath.protectionType()); + builder = te2YangConfigUnderlayPrimaryPath(builder, teLink, + teTopologyService); + } + + if (teLink.backupPaths() != null) { + builder = te2YangConfigUnderlayBackupPaths(builder, teLink, + teTopologyService); + } + + attrBuilder = attrBuilder.underlay(builder.build()); + } + ConfigBuilder yangConfigBuilder = DefaultConfig.builder() - .teLinkAttributes(attrBuilder.build()); + .teLinkAttributes(attrBuilder.build()); return yangConfigBuilder.build(); } @@ -319,11 +288,11 @@ public final class LinkConverter { */ private static State teLink2YangState(TeLink teLink) { TeLinkAttributes - .TeLinkAttributesBuilder attrBuilder = - DefaultTeLinkAttributes - .builder() - .teDefaultMetric(teLink.cost()) - .isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT)); + .TeLinkAttributesBuilder attrBuilder = + DefaultTeLinkAttributes + .builder() + .teDefaultMetric(teLink.cost()) + .isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT)); if (teLink.teLinkKey() != null) { // what is link index? for now I used teLinkTpId attrBuilder = attrBuilder.linkIndex(BigInteger.valueOf(teLink.teLinkKey().teLinkTpId())); @@ -335,7 +304,7 @@ public final class LinkConverter { if (teLink.tunnelProtectionType() != null) { attrBuilder = attrBuilder .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink - .tunnelProtectionType())); + .tunnelProtectionType())); } if (teLink.maxBandwidth() != null) { // maxBandwidth is an array of float[], but in yang is just a big decimal @@ -361,13 +330,13 @@ public final class LinkConverter { if (teLink.externalLink().externalLinkKey() != null) { edBuilder = edBuilder .remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink - .externalLink() - .externalLinkKey() - .teLinkTpId()))) + .externalLink() + .externalLinkKey() + .teLinkTpId()))) .remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink - .externalLink() - .externalLinkKey() - .teNodeId()))); + .externalLink() + .externalLinkKey() + .teNodeId()))); } attrBuilder = attrBuilder.externalDomain(edBuilder.build()); @@ -377,19 +346,17 @@ public final class LinkConverter { short i = 0; for (float f : teLink.availBandwidth()) { UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth - .builder() - .bandwidth(BigDecimal.valueOf(f)) - .priority(i); + .builder().bandwidth(BigDecimal.valueOf(f)).priority(i); i++; attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build()); } } StateBuilder yangStateBuilder = DefaultState.builder() - .teLinkAttributes(attrBuilder.build()); + .teLinkAttributes(attrBuilder.build()); if (teLink.opStatus() != null) { yangStateBuilder = yangStateBuilder.operStatus(EnumConverter - .teSubsystem2YangOperStatus(teLink.opStatus())); + .teSubsystem2YangOperStatus(teLink.opStatus())); } if (teLink.sourceTeLinkId() != null) { @@ -397,8 +364,8 @@ public final class LinkConverter { Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder(); topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId()) - .providerIdRef(teLink.sourceTeLinkId().providerId()) - .teTopologyIdRef(teLink.sourceTeLinkId().topologyId()); + .providerIdRef(teLink.sourceTeLinkId().providerId()) + .teTopologyIdRef(teLink.sourceTeLinkId().topologyId()); issBuilder = issBuilder.topology(topologyBuilder.build()); yangStateBuilder.informationSourceState(issBuilder.build()); } @@ -407,7 +374,7 @@ public final class LinkConverter { // object model, set the value properly // stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology // .rev20160708.ietftetopology.telinkstatederived.Underlay - // yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay); + //yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay); return yangStateBuilder.build(); } @@ -416,10 +383,12 @@ public final class LinkConverter { * Link object conversion from TE Topology subsystem to YANG. * * @param teSubsNetworkLink TE subsystem link object + * @param teTopologyService teTopology core service * @return YANG link object */ public static Link teSubsystem2YangLink( - org.onosproject.tetopology.management.api.link.NetworkLink teSubsNetworkLink) { + org.onosproject.tetopology.management.api.link.NetworkLink teSubsNetworkLink, + TeTopologyService teTopologyService) { checkNotNull(teSubsNetworkLink, E_NULL_TELINK); LinkId linkId = LinkId.fromString(teSubsNetworkLink.linkId().toString()); @@ -429,43 +398,43 @@ public final class LinkConverter { SupportingLinkBuilder spLinkBuilder = DefaultSupportingLink.builder(); for (NetworkLinkKey linkKey : teSubsNetworkLink.supportingLinkIds()) { slinks.add(spLinkBuilder.networkRef(NetworkId.fromString( - linkKey.networkId().toString())) - .linkRef(LinkId.fromString( - linkKey.linkId().toString())) - .build()); + linkKey.networkId().toString())) + .linkRef(LinkId.fromString( + linkKey.linkId().toString())) + .build()); } builder = builder.supportingLink(slinks); } if (teSubsNetworkLink.source() != null) { SourceBuilder sourceBuilder = DefaultSource - .builder() - .sourceNode(NodeId.fromString( - teSubsNetworkLink.source().nodeId().toString())) - .sourceTp(TpId.fromString( - teSubsNetworkLink.source().tpId().toString())); + .builder() + .sourceNode(NodeId.fromString( + teSubsNetworkLink.source().nodeId().toString())) + .sourceTp(TpId.fromString( + teSubsNetworkLink.source().tpId().toString())); builder = builder.source(sourceBuilder.build()); } if (teSubsNetworkLink.destination() != null) { DestinationBuilder destBuilder = DefaultDestination - .builder() - .destNode(NodeId.fromString( - teSubsNetworkLink.destination().nodeId().toString())) - .destTp(TpId.fromString( - teSubsNetworkLink.destination().tpId().toString())); + .builder() + .destNode(NodeId.fromString( + teSubsNetworkLink.destination().nodeId().toString())) + .destTp(TpId.fromString( + teSubsNetworkLink.destination().tpId().toString())); builder = builder.destination(destBuilder.build()); } if (teSubsNetworkLink.teLink() != null) { TeLink teData = teSubsNetworkLink.teLink(); TeBuilder yangTeBuilder = DefaultTe.builder() - .config(teLink2YangConfig(teData)) - .state(teLink2YangState(teData)); + .config(teLink2YangConfig(teData, teTopologyService)) + .state(teLink2YangState(teData)); // ignoring supportingTeLinkId when converting from core to yang? // if (teData.supportingTeLinkId() != null) { // } AugmentedNtLinkBuilder linkAugmentBuilder = DefaultAugmentedNtLink.builder() - .te(yangTeBuilder.build()); + .te(yangTeBuilder.build()); builder.addYangAugmentedInfo(linkAugmentBuilder.build(), AugmentedNtLink.class); } @@ -479,24 +448,30 @@ public final class LinkConverter { org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath(); UnderlayPrimaryPathBuilder pathBuilder = - DefaultUnderlayPrimaryPath.builder(); + DefaultUnderlayPrimaryPath.builder(); if (tePath.pathElements() != null) { for (PathElement pathElementTe : tePath.pathElements()) { org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement - .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder(); + .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement + .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder(); pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId()); - //TODO: add some Type cross converter -// pathElementYangBuilder = pathElementYangBuilder.type(Type pathElementTe.type()) + //TODO: check more types here + if (pathElementTe.type() instanceof TeLinkId) { + UnnumberedLinkBuilder unmBuilder = DefaultUnnumberedLink.builder() + .routerId(IpAddress.fromString( + Ip4Address.valueOf((int) pathElementTe.teNodeId()).toString())) + .interfaceId(((TeLinkId) pathElementTe.type()).value()); + pathElementYangBuilder = pathElementYangBuilder.type(unmBuilder.build()); + } pathBuilder = pathBuilder.addToPathElement(pathElementYangBuilder.build()); } } pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId()) - .providerIdRef(teLink.underlayTeTopologyId().providerId()) - .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); + .providerIdRef(teLink.underlayTeTopologyId().providerId()) + .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId())); @@ -513,22 +488,28 @@ public final class LinkConverter { .builder(); pathBuilder = pathBuilder.index(tePath.index()); pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId()) - .providerIdRef(teLink.underlayTeTopologyId().providerId()) - .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); + .providerIdRef(teLink.underlayTeTopologyId().providerId()) + .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId())); for (PathElement backupPathElementTe : tePath.pathElements()) { org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement - .PathElementBuilder elementBuilder = - org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement - .builder(); + .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement + .PathElementBuilder elementBuilder = + org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement + .builder(); elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId()); - // TODO: add some Type cross conversion -// elementBuilder.type(type); + //TODO: check more types here + if (backupPathElementTe.type() instanceof TeLinkId) { + UnnumberedLinkBuilder unmBuilder = DefaultUnnumberedLink.builder() + .routerId(IpAddress.fromString( + Ip4Address.valueOf((int) backupPathElementTe.teNodeId()).toString())) + .interfaceId(((TeLinkId) backupPathElementTe.type()).value()); + elementBuilder = elementBuilder.type(unmBuilder.build()); + } pathBuilder = pathBuilder .addToPathElement(elementBuilder.build()); @@ -570,9 +551,9 @@ public final class LinkConverter { TeLinkTpKey peerTeLinkKey = null; if (yangLink.destination() != null) { peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong, - findTeTpId(yangNetwork, - yangLink.destination().destNode(), - yangLink.destination().destTp())); + findTeTpId(yangNetwork, + yangLink.destination().destNode(), + yangLink.destination().destTp())); } TeLinkTpGlobalKey supportTeLinkId = findSupportTeLinkId(yangNetworks, yangLink); @@ -634,20 +615,21 @@ public final class LinkConverter { List interLayerLocks = null; // FIXME: how to find interLayerLocks? List listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth(); - float[] availBandwidth = new float[listOfUnreservedBandwidth.size()]; - int i = 0; + float[] availBandwidth = new float[MAX_PRIORITY + 1]; for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) { - availBandwidth[i] = urbw.bandwidth().floatValue(); - i++; + availBandwidth[urbw.priority()] = urbw.bandwidth().floatValue(); } - float[] maxBandwidth = new float[1]; + float[] maxBandwidth = new float[MAX_PRIORITY + 1]; if (yangLinkAtrr.maxLinkBandwidth() != null) { - maxBandwidth[0] = yangLinkAtrr.maxLinkBandwidth().floatValue(); + // Core TE has an array, but YANG is an integer + for (short p = 0; p <= MAX_PRIORITY; p++) { + maxBandwidth[p] = yangLinkAtrr.maxLinkBandwidth().floatValue(); + } } - float[] maxAvailLspBandwidth = null; // FIXME: how to find this? - float[] minAvailLspBandwidth = null; // FIXME: how to find this? + float[] maxAvailLspBandwidth = availBandwidth; // FIXME: how to find this? + float[] minAvailLspBandwidth = availBandwidth; // FIXME: how to find this? LinkBandwidth bandwidth = new LinkBandwidth( maxBandwidth, availBandwidth, @@ -665,9 +647,8 @@ public final class LinkConverter { TePathAttributes teAttributes = new TePathAttributes(yangLinkAtrr.teDefaultMetric(), yangLinkAtrr.performanceMetric() == null ? null : - (yangLinkAtrr.performanceMetric().measurement() == null ? null : - yangLinkAtrr.performanceMetric().measurement() - .unidirectionalDelay()), + (yangLinkAtrr.performanceMetric().measurement() == null ? null : + yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()), srlgs); teData = new CommonLinkData(adminStatus, opStatus, @@ -688,7 +669,7 @@ public final class LinkConverter { } private static TeLinkTpGlobalKey findSupportTeLinkId(Networks yangNetworks, - Link yangLink) { + Link yangLink) { Network teNetworkFound = null; LinkId teLinkIdFound = null; TeLinkTpGlobalKey supportTeLinkId = null; @@ -741,7 +722,7 @@ public final class LinkConverter { supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(), teTopologyId.clientId(), Long.valueOf(teTopologyId - .topologyId()), + .topologyId()), tenIdLong, teSupportLinkTpId); } @@ -783,7 +764,7 @@ public final class LinkConverter { if (yangTpnode.tpId().equals(yangTpId)) { if (yangTpnode.yangAugmentedInfoMap() != null && !yangTpnode.yangAugmentedInfoMap() - .isEmpty()) { + .isEmpty()) { AugmentedNtTerminationPoint yangTpAugment = (AugmentedNtTerminationPoint) yangTpnode .yangAugmentedInfo(AugmentedNtTerminationPoint.class); @@ -799,18 +780,17 @@ public final class LinkConverter { } return teTpId; } - /** * Link object conversion from YANG to TE Topology subsystem. * - * @param yangLink YANG link - * @param yangNetwork YANG network + * @param yangLink YANG link + * @param yangNetwork YANG network * @param yangNetworks YANG networks * @return TE subsystem link */ public static org.onosproject.tetopology.management.api.link.NetworkLink - yang2TeSubsystemLink(Link yangLink, Network yangNetwork, - Networks yangNetworks) { + yang2TeSubsystemLink(Link yangLink, Network yangNetwork, + Networks yangNetworks) { NetworkId networkId = yangNetwork.networkId(); checkNotNull(yangLink, E_NULL_YANG_TELINK); @@ -831,17 +811,17 @@ public final class LinkConverter { if (yangLink.source() != null) { TerminationPointKey source = new TerminationPointKey( - KeyId.keyId(networkId.uri().toString()), - KeyId.keyId(yangLink.source().sourceNode().uri().toString()), - KeyId.keyId(yangLink.source().sourceTp().uri().toString())); + KeyId.keyId(networkId.uri().toString()), + KeyId.keyId(yangLink.source().sourceNode().uri().toString()), + KeyId.keyId(yangLink.source().sourceTp().uri().toString())); sourceNodeTpKey = new NodeTpKey(source.nodeId(), source.tpId()); } if (yangLink.destination() != null) { TerminationPointKey destination = new TerminationPointKey( - KeyId.keyId(networkId.uri().toString()), - KeyId.keyId(yangLink.destination().destNode().uri().toString()), - KeyId.keyId(yangLink.destination().destTp().uri().toString())); + KeyId.keyId(networkId.uri().toString()), + KeyId.keyId(yangLink.destination().destNode().uri().toString()), + KeyId.keyId(yangLink.destination().destTp().uri().toString())); destinationNodeTpKey = new NodeTpKey(destination.nodeId(), destination.tpId()); } @@ -873,19 +853,25 @@ public final class LinkConverter { } private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath - yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath, - long teNodeId) { + yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath, + long teNodeId) { org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null; List pathElementList = Lists.newArrayList(); for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology .telinkunderlayattributes.underlayprimarypath. - PathElement pathElementConfigYang : yangpath.pathElement()) { + PathElement pathElementYang : yangpath.pathElement()) { - // TODO: find the proper type (ElementType) from pathElementConfigYang.type() - PathElement tePathElement = new PathElement(pathElementConfigYang.pathElementId(), - teNodeId, - null, + long nodeId = 0; + ElementType type = null; + // TODO: check more types + if (pathElementYang.type() instanceof UnnumberedLink) { + nodeId = Long.valueOf(((UnnumberedLink) pathElementYang.type()).routerId().toString()); + type = new TeLinkId(((UnnumberedLink) pathElementYang.type()).interfaceId()); + } + PathElement tePathElement = new PathElement(pathElementYang.pathElementId(), + nodeId, + type, false); // FIXME: how to find the proper value for loose? pathElementList.add(tePathElement); } @@ -897,11 +883,11 @@ public final class LinkConverter { } private static List - yang2TeSubsystemUnderlayBackupPaths( - List yangpaths, - long teNodeId) { + long teNodeId) { List underlayBackupPathsList = Lists.newArrayList(); for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 @@ -909,15 +895,20 @@ public final class LinkConverter { UnderlayBackupPath yangConfig : yangpaths) { UnderlayBackupPath ubp = null; List backupPathElementList = Lists.newArrayList(); + long nodeId = 0; + ElementType type = null; for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology .telinkunderlayattributes.underlaybackuppath. - PathElement pathElementBackupYang : yangConfig.pathElement()) { - - PathElement tePathElementBackup = new PathElement(pathElementBackupYang.pathElementId(), - teNodeId, - null, // FIXME: find the proper ElementType - // from pathElementBackupYang.type() - false); // FIXME: find the proper value for loose + PathElement backupYang : yangConfig.pathElement()) { + // TODO: check more types + if (backupYang.type() instanceof UnnumberedLink) { + nodeId = Long.valueOf(((UnnumberedLink) backupYang.type()).routerId().toString()); + type = new TeLinkId(((UnnumberedLink) backupYang.type()).interfaceId()); + } + PathElement tePathElementBackup = new PathElement(backupYang.pathElementId(), + nodeId, + type, + false); backupPathElementList.add(tePathElementBackup); } ubp = new UnderlayBackupPath(yangConfig.index(), @@ -930,13 +921,13 @@ public final class LinkConverter { } /** - * TE Link underlay path Config object conversion from YANG to TE Topology subsystem. - * - * @param yangLinkAtrr YANG link Config YANG object - * @return teSubsystem TE underlay path object - */ + * TE Link underlay path Config object conversion from YANG to TE Topology subsystem. + * + * @param yangLinkAtrr YANG link Config YANG object + * @return teSubsystem TE underlay path object + */ private static org.onosproject.tetopology.management.api.link.UnderlayPath - yang2TeSubsystemUnderlayPath(TeLinkAttributes yangLinkAtrr, long srcTeNodeId, long dstTeNodeId) { + yang2TeSubsystemUnderlayPath(TeLinkAttributes yangLinkAtrr, long srcTeNodeId, long dstTeNodeId) { checkNotNull(yangLinkAtrr, E_NULL_YANG_TELINK_CONFIG); @@ -957,12 +948,12 @@ public final class LinkConverter { org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null; if (yangLinkAtrr.underlay() != null) { teUnderlay = new org.onosproject.tetopology.management.api.link. - UnderlayPath(underlayPrimaryPath, - underlayBackupPathsList, - TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()), - (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct? - (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct? - teTunnelId); + UnderlayPath(underlayPrimaryPath, + underlayBackupPathsList, + TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()), + (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct? + (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct? + teTunnelId); } return teUnderlay; @@ -1023,16 +1014,14 @@ public final class LinkConverter { } /** - * Converts a YANG network link notification event into a TE network - * link. + * Converts a YANG network link notification event into a TE network link. * - * @param yangLinkEvent YANG network link notification + * @param yangLinkEvent YANG network link notification * @param teTopologyService TE Topology service used to help the conversion * @return TE network link */ public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent, TeTopologyService teTopologyService) { - KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId(); org.onosproject.tetopology.management.api. @@ -1061,28 +1050,27 @@ public final class LinkConverter { TeOperStatus opState = yangLinkEvent.operStatus(); org.onosproject.tetopology.management.api. - TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState); + TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState); TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus); - NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, - sourceTp, - destTp, - supportingLinkIds, + NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, sourceTp, destTp, supportingLinkIds, updatedTeLink); return updatedNetworkLink; } - private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, - TeLink oldTeLink, - TeStatus opStatus) { + private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, TeLink oldTeLink, TeStatus + opStatus) { TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes(); TeLinkTpKey teLinkKey = oldTeLink.teLinkKey(); + + //long teNodeIdDest = oldTeLink.peerTeLinkKey().teNodeId(); + //long teNodeIdSrc = oldTeLink.teLinkKey().teNodeId(); long teNodeIdDest = 0; long teNodeIdSrc = 0; diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java index e1e2e01400..a5a057f829 100644 --- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java +++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NetworkConverter.java @@ -15,8 +15,12 @@ */ package org.onosproject.teyang.utils.topology; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; + +import java.util.List; +import java.util.Map; + import org.onosproject.net.DeviceId; import org.onosproject.tetopology.management.api.KeyId; import org.onosproject.tetopology.management.api.TeTopologyEvent; @@ -86,11 +90,8 @@ import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.Map; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; /** @@ -221,12 +222,13 @@ public final class NetworkConverter { /** * Networks object conversion from YANG to TE Topology subsystem. * - * @param yangNetworks Networks YANG object + * @param yangNetworks Networks YANG object * @param yangNetworkStates NetworkStates YANG object + * @param deviceId The identifier of RESTCONF server device * @return teSubsystem TE Topology subsystem networks object */ public static org.onosproject.tetopology.management.api.Networks yang2TeSubsystemNetworks( - Networks yangNetworks, NetworksState yangNetworkStates) { + Networks yangNetworks, NetworksState yangNetworkStates, DeviceId deviceId) { checkNotNull(yangNetworks, E_NULL_YANG_NETWORKS); checkNotNull(yangNetworks.network(), E_NULL_YANG_NETWORK_LIST); checkNotNull(yangNetworkStates, E_NULL_YANG_NETWORKSSTATE); @@ -240,9 +242,9 @@ public final class NetworkConverter { if (stateNetwork == null) { log.info("networkId {} can't be found in yangNetworkStates", network.networkId()); - teNetwork = yang2TeSubsystemNetwork(network, yangNetworks); + teNetwork = yang2TeSubsystemNetwork(network, yangNetworks, deviceId); } else { - teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks); + teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks, deviceId); } networks.add(teNetwork); } @@ -279,11 +281,12 @@ public final class NetworkConverter { } private static NetworkBuilder te2YangLinks(NetworkBuilder builder, - Map teLinks) { + Map teLinks, + TeTopologyService teTopologyService) { List linkList = Lists.newArrayList(); for (org.onosproject.tetopology.management.api.link.NetworkLink link : teLinks.values()) { - linkList.add(LinkConverter.teSubsystem2YangLink(link)); + linkList.add(LinkConverter.teSubsystem2YangLink(link, teTopologyService)); } AugmentedNdNetworkBuilder ndAugment = DefaultAugmentedNdNetwork.builder(); ndAugment.link(linkList); @@ -367,7 +370,7 @@ public final class NetworkConverter { // Add links - link is the augmentation if (teSubsystem.links() != null) { - builder = te2YangLinks(builder, teSubsystem.links()); + builder = te2YangLinks(builder, teSubsystem.links(), teTopologyService); } // TE Topology IDs @@ -421,7 +424,7 @@ public final class NetworkConverter { org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns. yang.ietf.network.rev20151208.ietfnetwork.networksstate. Network yangNetworkState, - Networks yangNetworks) { + Networks yangNetworks, DeviceId deviceId) { checkNotNull(yangNetwork, E_NULL_YANG_NETWORK); checkNotNull(yangNetwork.networkId(), E_NULL_YANG_NETWORKID); String networkId = yangNetwork.networkId().uri().string(); @@ -432,7 +435,6 @@ public final class NetworkConverter { Map teLinks = null; org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null; boolean serverProvided = false; - DeviceId ownerId = null; // Supporting networks if (yangNetwork.supportingNetwork() != null) { @@ -483,7 +485,7 @@ public final class NetworkConverter { org.onosproject.tetopology.management.api.DefaultNetwork network = new org.onosproject.tetopology.management.api.DefaultNetwork(networkKeyId, supportingNetworkIds, teNodes, teLinks, teTopologyId, - serverProvided, ownerId); + serverProvided, deviceId); return network; } @@ -492,11 +494,13 @@ public final class NetworkConverter { * * @param yangNetwork Network YANG object * @param yangNetworks Networks YANG object + * @param deviceId The identifier of RESTCONF server device * @return network TE Topology subsystem networks object */ public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork, - Networks yangNetworks) { - return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks); + Networks yangNetworks, + DeviceId deviceId) { + return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks, deviceId); } /** @@ -505,16 +509,17 @@ public final class NetworkConverter { * @param yangNetwork Network YANG object * @param yangNetworkState NetworkState YANG object * @param yangNetworks Networks YANG object + * @param deviceId The identifier of RESTCONF server device * @return teSubsystem TE Topology subsystem networks object */ public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork, org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork - .networksstate.Network yangNetworkState, Networks yangNetworks) { + .networksstate.Network yangNetworkState, Networks yangNetworks, DeviceId deviceId) { checkNotNull(yangNetworkState, E_NULL_YANG_NETWORKSSTATE_NETWORK); checkNotNull(yangNetworkState.networkRef(), E_NULL_YANG_NETWORKSSTATE_NETWORKREF); org.onosproject.tetopology.management.api.DefaultNetwork teNetwork = - yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks); + yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks, deviceId); String networkref = yangNetworkState.networkRef().toString(); checkState(teNetwork.networkId().toString().equals(networkref), @@ -567,7 +572,7 @@ public final class NetworkConverter { returnType = IetfTeTopologyEvent.Type.TE_NODE_EVENT; break; default: - log.error("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type); + log.warn("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type); } return returnType; @@ -590,9 +595,7 @@ public final class NetworkConverter { returnType = TeTopologyEventTypeEnum.UPDATE; break; default: - // log.warn("teTopoEventType2YangIetfTopoEventType: unsupported - // type: {}", - // type); + log.warn("teTopoEventType2YangteTopoEventType: unsupported type: {}", type); break; } diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java index cf8d6c1ae3..1557d7d613 100644 --- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java +++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java @@ -15,8 +15,12 @@ */ package org.onosproject.teyang.utils.topology; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.BitSet; +import java.util.List; +import java.util.Map; + import org.apache.commons.collections.MapUtils; import org.onlab.packet.Ip4Address; import org.onosproject.tetopology.management.api.EncodingType; @@ -47,92 +51,60 @@ import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.r import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.Network; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network - .DefaultNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network - .Node; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network - .node.DefaultSupportingNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.networks.network - .node.SupportingNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .TpId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.node.AugmentedNdNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology - .networks.network.node.DefaultAugmentedNdNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .DefaultTeNodeEvent; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208 + .ietfnetwork.networks.network.DefaultNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208 + .ietfnetwork.networks.network.Node; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208 + .ietfnetwork.networks.network.node.DefaultSupportingNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208 + .ietfnetwork.networks.network.node.SupportingNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.TpId; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.node.AugmentedNdNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208 + .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.DefaultTeNodeEvent; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.TeNodeEvent; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.DefaultInformationSourceState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.InformationSourceState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.informationsourcestate.DefaultTopology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .informationsourceattributes.informationsourcestate.Topology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.node.AugmentedNwNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.node.DefaultAugmentedNwNode; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks - .network.node.terminationpoint.AugmentedNtTerminationPoint; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.DefaultTe; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.DefaultTe.TeBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.Te; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.Config; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.DefaultConfig; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.DefaultState; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.DefaultTunnelTerminationPoint; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.State; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeaugment.te.TunnelTerminationPoint; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconfigattributes.DefaultTeNodeAttributes; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconfigattributes.TeNodeAttributes; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconnectivitymatrix.DefaultConnectivityMatrix; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconnectivitymatrix.connectivitymatrix.DefaultTo; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeinfoattributes.DefaultUnderlayTopology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeinfoattributes.UnderlayTopology; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodetunnelterminationcapability.DefaultTerminationCapability; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodetunnelterminationcapability.TerminationCapability; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.InformationSourceState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.Topology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.networks.network.node.AugmentedNwNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.networks.network.node.DefaultAugmentedNwNode; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe.TeBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.Config; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultConfig; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultState; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultTunnelTerminationPoint; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.State; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.TunnelTerminationPoint; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultFrom; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultTo; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.DefaultUnderlayTopology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.UnderlayTopology; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.DefaultTerminationCapability; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.TerminationCapability; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeAdminStatus; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes - .TeTopologyEventType; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId; -import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes - .tetopologyeventtype.TeTopologyEventTypeEnum; +import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad; -import java.util.BitSet; -import java.util.List; -import java.util.Map; - -import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; /** * Node conversion functions. @@ -166,7 +138,7 @@ public final class NodeConverter { .builder(); teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder .isAbstract(teSubsystemTeNode.flags() - .get(TeNode.BIT_ABSTRACT)); + .get(TeNode.BIT_ABSTRACT)); if (teSubsystemTeNode.adminStatus() != null) { teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder @@ -181,7 +153,7 @@ public final class NodeConverter { if (teSubsystemTeNode.underlayTeTopologyId() != null) { teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode - .underlayTeTopologyId(), teTopologyService)); + .underlayTeTopologyId(), teTopologyService)); } // TODO: should we ignore this from te to yang? as we've already set yang supportingNode @@ -201,26 +173,26 @@ public final class NodeConverter { } private static TeNodeAttributesBuilder - te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder, - Map connectivityMatrices) { + te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder, + Map connectivityMatrices) { ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder(); for (Map.Entry teCmEntry : - connectivityMatrices.entrySet()) { + connectivityMatrices.entrySet()) { connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder .id(teCmEntry.getKey()) .isAllowed(!teCmEntry.getValue().flags() - .get(ConnectivityMatrix.BIT_DISALLOWED)) + .get(ConnectivityMatrix.BIT_DISALLOWED)) .from(new DefaultFrom.FromBuilder() // TODO: for now, assuming that there is - // only one 'from', and mergingList is empty - .tpRef(((TeLinkId) teCmEntry.getValue().from()).value()) - .build()) + // only one 'from', and mergingList is empty + .tpRef(((TeLinkId) teCmEntry.getValue().from()).value()) + .build()) .to(new DefaultTo.ToBuilder() // TODO: for now, assuming that there is only - // one item in constrainingElements list - .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value()) - .build()); + // one item in constrainingElements list + .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value()) + .build()); teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder .addToConnectivityMatrix(connectivityMatrixConfigBuilder - .build()); + .build()); } return teNodeAttributesConfigBuilder; } @@ -230,7 +202,7 @@ public final class NodeConverter { UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology .builder() .teTopologyIdRef(TeTopologyId - .fromString(String.valueOf(underlayTopology.topologyId()))) + .fromString(String.valueOf(underlayTopology.topologyId()))) .clientIdRef(underlayTopology.clientId()) .providerIdRef(underlayTopology.providerId()); @@ -250,10 +222,10 @@ public final class NodeConverter { checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE); TeNodeAttributes - .TeNodeAttributesBuilder teNodeAttributesStateBuilder = - DefaultTeNodeAttributes.builder() - .isAbstract(teSubsystemTeNode.flags() - .get(TeNode.BIT_ABSTRACT)); + .TeNodeAttributesBuilder teNodeAttributesStateBuilder = + DefaultTeNodeAttributes.builder() + .isAbstract(teSubsystemTeNode.flags() + .get(TeNode.BIT_ABSTRACT)); if (teSubsystemTeNode.adminStatus() != null) { teNodeAttributesStateBuilder = teNodeAttributesStateBuilder @@ -268,12 +240,12 @@ public final class NodeConverter { if (teSubsystemTeNode.underlayTeTopologyId() != null) { teNodeAttributesStateBuilder = teNodeAttributesStateBuilder .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode - .underlayTeTopologyId(), teTopologyService)); + .underlayTeTopologyId(), teTopologyService)); } if (teSubsystemTeNode.connectivityMatrices() != null) { teNodeAttributesStateBuilder = te2YangConnectivityMatrix(teNodeAttributesStateBuilder, - teSubsystemTeNode.connectivityMatrices()); + teSubsystemTeNode.connectivityMatrices()); } // TODO: should we ignore this from te to yang? as we've already set yang supportingNode @@ -285,8 +257,7 @@ public final class NodeConverter { if (teSubsystemTeNode.opStatus() != null) { yangStateBuilder = yangStateBuilder.operStatus(EnumConverter - .teSubsystem2YangOperStatus(teSubsystemTeNode - .opStatus())); + .teSubsystem2YangOperStatus(teSubsystemTeNode.opStatus())); } if (teSubsystemTeNode.sourceTeNodeId() != null) { @@ -295,10 +266,10 @@ public final class NodeConverter { Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder(); topologyBuilder = topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId()) - .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId()) - // is this correct? Why not sourceTeNodeId().teTopologyKey()? - .teTopologyIdRef(teSubsystemTeNode - .sourceTeNodeId().topologyId()); + .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId()) + // is this correct? Why not sourceTeNodeId().teTopologyKey()? + .teTopologyIdRef(teSubsystemTeNode + .sourceTeNodeId().topologyId()); issBuilder = issBuilder.topology(topologyBuilder.build()); yangStateBuilder.informationSourceState(issBuilder.build()); } @@ -319,52 +290,52 @@ public final class NodeConverter { } public static long bytesToLong(byte[] bytes) { - return ((long) bytes[7] & 255L) << 56 - | ((long) bytes[6] & 255L) << 48 - | ((long) bytes[5] & 255L) << 40 - | ((long) bytes[4] & 255L) << 32 - | ((long) bytes[3] & 255L) << 24 - | ((long) bytes[2] & 255L) << 16 - | ((long) bytes[1] & 255L) << 8 | (long) bytes[0] & 255L; + return (bytes[7] & 255L) << 56 + | (bytes[6] & 255L) << 48 + | (bytes[5] & 255L) << 40 + | (bytes[4] & 255L) << 32 + | (bytes[3] & 255L) << 24 + | (bytes[2] & 255L) << 16 + | (bytes[1] & 255L) << 8 | bytes[0] & 255L; } } /** * TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG. * - * @param teTunnelTp TE TunnelTerminationPoint object + * @param teTunnelTp TE TunnelTerminationPoint object * @param teTpId * @param teTopologyService * @param teNodeKey * @return TunnelTerminationPoint YANG object */ private static TunnelTerminationPoint teSubsystem2YangTtp( - org.onosproject.tetopology.management.api.node - .TunnelTerminationPoint teTunnelTp, Long teTpId, - TeTopologyService teTopologyService, - TeNodeKey teNodeKey) { + org.onosproject.tetopology.management.api.node + .TunnelTerminationPoint teTunnelTp, Long teTpId, + TeTopologyService teTopologyService, + TeNodeKey teNodeKey) { checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP); TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder = DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue())); org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder = - org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder(); + .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder = - org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder(); + .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder(); + org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder = + org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 + .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultState.builder(); // Assuming teTunnelTp only has one interLayerLock if (teTunnelTp.interLayerLockList() != null && !teTunnelTp.interLayerLockList().isEmpty()) { ttpConfigBuilder = ttpConfigBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0)); - ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0)); + ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0)); } TerminationCapability.TerminationCapabilityBuilder - tcapConfigBuilder = DefaultTerminationCapability.builder(); + tcapConfigBuilder = DefaultTerminationCapability.builder(); // TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder. // For which ones we can do the conversion? // FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList() @@ -377,7 +348,7 @@ public final class NodeConverter { .network(netLinkKey.networkId()).links().get(netLinkKey.linkId()); tcapConfigBuilder = tcapConfigBuilder .linkTp(TpId.fromString(networkLink.source().tpId() - .toString())); + .toString())); // convert teLinkId to networkLinkKey ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build()); } @@ -396,13 +367,13 @@ public final class NodeConverter { .network(netLinkKey.networkId()).links().get(netLinkKey.linkId()); tcapStateBuilder = tcapStateBuilder .linkTp(TpId.fromString(networkLink.source().tpId() - .toString())); + .toString())); ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build()); } } tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build()) - .state(ttpStateBuilder.build()); + .state(ttpStateBuilder.build()); return tunnelTpBuilder.build(); } @@ -410,9 +381,9 @@ public final class NodeConverter { /** * Node object conversion from TE Topology subsystem to YANG. * - * @param teSubsystem TE subsystem node + * @param teSubsystem TE subsystem node * @param teTopologyService teTopology core service - * @param teTopologyKey teTopologyKey + * @param teTopologyKey teTopologyKey * @return YANG node */ public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem, @@ -430,10 +401,10 @@ public final class NodeConverter { .builder(); for (NetworkNodeKey nodeKey : teSubsystem.supportingNodeIds()) { sNodes.add(spNodeBuilder - .networkRef(NetworkId - .fromString(nodeKey.networkId().toString())) - .nodeRef(NodeId.fromString(nodeKey.nodeId().toString())) - .build()); + .networkRef(NetworkId + .fromString(nodeKey.networkId().toString())) + .nodeRef(NodeId.fromString(nodeKey.nodeId().toString())) + .build()); } builder = builder.supportingNode(sNodes); } @@ -446,7 +417,7 @@ public final class NodeConverter { for (TerminationPoint teTp : teSubsystemTeTp.values()) { tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter - .teSubsystem2YangTerminationPoint(teTp)); + .teSubsystem2YangTerminationPoint(teTp)); } builder.addYangAugmentedInfo(tpAugmentBuilder.build(), AugmentedNdNode.class); @@ -461,24 +432,21 @@ public final class NodeConverter { TeBuilder yangTeBuilder = DefaultTe.builder(); yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad - .of(Ip4Address.valueOf((int) teSubsystemTeNode - .teNodeId()) - .toString()))); + .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId()) + .toString()))); // Set configuration data // Set state data yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode, teTopologyService)) - .state(teNode2YangState(teSubsystemTeNode, teTopologyService)); + .state(teNode2YangState(teSubsystemTeNode, teTopologyService)); if (teSubsystemTeNode.tunnelTerminationPoints() != null) { for (Map.Entry entry : teSubsystemTeNode.tunnelTerminationPoints().entrySet()) { yangTeBuilder = yangTeBuilder - .addToTunnelTerminationPoint(teSubsystem2YangTtp( - entry.getValue(), entry.getKey(), - teTopologyService, - new TeNodeKey(teTopologyKey, - teSubsystemTeNode.teNodeId()))); + .addToTunnelTerminationPoint(teSubsystem2YangTtp(entry + .getValue(), entry.getKey(), teTopologyService, + new TeNodeKey(teTopologyKey, teSubsystemTeNode.teNodeId()))); } } @@ -492,12 +460,12 @@ public final class NodeConverter { /** * Node object conversion from YANG to TE Topology subsystem. * - * @param yangNode Node in YANG model + * @param yangNode Node in YANG model * @param yangNetwork YANG network * @return TE subsystem node */ public static org.onosproject.tetopology.management.api.node.NetworkNode - yang2TeSubsystemNode(Node yangNode, Network yangNetwork) { + yang2TeSubsystemNode(Node yangNode, Network yangNetwork) { checkNotNull(yangNode, E_NULL_YANG_NODE); org.onosproject.tetopology.management.api.node.DefaultNetworkNode node; @@ -541,12 +509,12 @@ public final class NodeConverter { // TODO: convert connectivity matrix from yang to te private static Map - yang2TeSubsystemNodeConnectivityMatrix(String networkId, - String nodeId, - List yangMatrix) { + yang2TeSubsystemNodeConnectivityMatrix(String networkId, + String nodeId, + List yangMatrix) { Map teCmList = Maps.newHashMap(); @@ -576,8 +544,8 @@ public final class NodeConverter { TePathAttributes teAttributes = new TePathAttributes(cmYang.teDefaultMetric(), cmYang.performanceMetric() == null ? null : - (cmYang.performanceMetric().measurement() == null ? null : - cmYang.performanceMetric().measurement().unidirectionalDelay()), + (cmYang.performanceMetric().measurement() == null ? null : + cmYang.performanceMetric().measurement().unidirectionalDelay()), srlgs); ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(), from, @@ -602,7 +570,7 @@ public final class NodeConverter { // TODO: retrieve the details of tunnel termiantion points from yang to te private static Map yang2TeSubsystemTtp(List ttps, Node yangNode) { + TunnelTerminationPoint> yang2TeSubsystemTtp(List ttps, Node yangNode) { Map ttpsMap = Maps .newHashMap(); for (TunnelTerminationPoint ttpYang : ttps) { @@ -641,7 +609,7 @@ public final class NodeConverter { && !tpItem.yangAugmentedInfoMap().isEmpty()) { AugmentedNtTerminationPoint yangTpAugment = (AugmentedNtTerminationPoint) tpItem - .yangAugmentedInfo(AugmentedNtTerminationPoint.class); + .yangAugmentedInfo(AugmentedNtTerminationPoint.class); if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) { elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString())); break; @@ -655,7 +623,7 @@ public final class NodeConverter { } } TePathAttributes teAttributes = null; // how to find these - // attributes from ttpYang? + // attributes from ttpYang? UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang? LocalLinkConnectivity llc = new LocalLinkConnectivity(eltList, flags, @@ -666,15 +634,16 @@ public final class NodeConverter { float[] availAdaptBandwidth = null; // how to find availableBandwidth? org.onosproject.tetopology.management.api.node. - TunnelTerminationPoint ttpTe = new - org.onosproject.tetopology.management.api.node. - DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), - switchingLayer, - encodingLayer, - flags, - interLayerLockList, - localLinkConnectivityList, - availAdaptBandwidth); + TunnelTerminationPoint ttpTe = new + org.onosproject.tetopology.management.api.node. + DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), + switchingLayer, + encodingLayer, + flags, + interLayerLockList, + localLinkConnectivityList, + availAdaptBandwidth, + null); ttpsMap.put(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), ttpTe); } @@ -711,28 +680,31 @@ public final class NodeConverter { List teTpIds = Lists.newArrayList(); // ********************************************** to find teLinkIds + // teLinkIds should be supposed to get from YANG Link and TP data. + // For now, assuming each teTp is sourcing a TE link . if (MapUtils.isNotEmpty(teTps)) { for (Map.Entry entry : teTps.entrySet()) { if (entry.getValue().teTpId() != null) { teTpIds.add(entry.getValue().teTpId()); + teLinkIds.add(entry.getValue().teTpId()); } } } // ********************************************** to find teTpIds - if (yangNode.yangAugmentedInfoMap() != null - && !yangNode.yangAugmentedInfoMap().isEmpty()) { - - AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode - .yangAugmentedInfo(AugmentedNdNode.class); - - if (yangTpNodeAugment.terminationPoint() != null) { - for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology - .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint - yangTpnode : yangTpNodeAugment.terminationPoint()) { - teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string())); - } - } - } +// if (yangNode.yangAugmentedInfoMap() != null +// && !yangNode.yangAugmentedInfoMap().isEmpty()) { +// +// AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode +// .yangAugmentedInfo(AugmentedNdNode.class); +// +// if (yangTpNodeAugment.terminationPoint() != null) { +// for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology +// .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint +// yangTpnode : yangTpNodeAugment.terminationPoint()) { +// teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string())); +// } +// } +// } // ********************************************** Config ynodeAugCfg = yangNodeAugTe.config(); @@ -744,22 +716,22 @@ public final class NodeConverter { if (teNodeAttr.underlayTopology() != null) { underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr - .underlayTopology()); + .underlayTopology()); } BitSet flags = new BitSet(); if (teNodeAttr.isAbstract()) { flags.set(TeNode.BIT_ABSTRACT); } teData = new CommonNodeData( - null, // teNodeAttr.name().string(), - EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()), - EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()), - flags); + null, // teNodeAttr.name().string(), + EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()), + EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()), + flags); if (teNodeAttr.connectivityMatrix() != null) { connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(), - yangNodeId.uri().toString(), - teNodeAttr.connectivityMatrix()); + yangNodeId.uri().toString(), + teNodeAttr.connectivityMatrix()); } } @@ -801,7 +773,7 @@ public final class NodeConverter { * to its corresponding YANG Object (YO) format. * * @param eventType Node event type - * @param eventData TE Topology node event data + * @param eventData TE Topology node event data * @return YANG Object converted from nodeData */ public static TeNodeEvent teNetworkNode2yangTeNodeEvent(TeTopologyEventTypeEnum eventType, @@ -820,7 +792,7 @@ public final class NodeConverter { org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology. rev20160708.ietftetopology.tenodeconfigattributesnotification. TeNodeAttributes teNodeAttributes = node == null ? null - : teNode2YangTeNodeAttributes(node.teNode()); + : teNode2YangTeNodeAttributes(node.teNode()); builder.teNodeAttributes(teNodeAttributes); return builder.build(); @@ -841,31 +813,31 @@ public final class NodeConverter { if (teNode.connectivityMatrices() != null) { org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology - .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix - .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf. - params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs. - DefaultConnectivityMatrix.builder(); + .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix + .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf. + params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs. + DefaultConnectivityMatrix.builder(); for (Map.Entry teCmEntry : - teNode.connectivityMatrices().entrySet()) { + teNode.connectivityMatrices().entrySet()) { connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder .id(teCmEntry.getKey()) .isAllowed(!teCmEntry.getValue().flags() - .get(ConnectivityMatrix.BIT_DISALLOWED)) + .get(ConnectivityMatrix.BIT_DISALLOWED)) .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom - .FromBuilder() // TODO: for now, assuming that there is - // only one 'from', and mergingList is empty - .tpRef(teCmEntry.getValue().from()) - .build()) + .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom + .FromBuilder() // TODO: for now, assuming that there is + // only one 'from', and mergingList is empty + .tpRef(teCmEntry.getValue().from()) + .build()) .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 - .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix - .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only - // one item in constrainingElements list - .tpRef(teCmEntry.getValue().constrainingElements().get(0)) - .build()); + .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix + .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only + // one item in constrainingElements list + .tpRef(teCmEntry.getValue().constrainingElements().get(0)) + .build()); attrBuilder = attrBuilder .addToConnectivityMatrix(connectivityMatrixConfigBuilder - .build()); + .build()); } } @@ -877,7 +849,8 @@ public final class NodeConverter { } /** - * Retrieves the TE network node key from a YANG network node notification event. + * Retrieves the TE network node key from a YANG network node notification + * event. * * @param yangNodeEvent YANG network node notification event * @return TE network node key @@ -896,7 +869,7 @@ public final class NodeConverter { /** * Converts YangNode event to NetworkNode. * - * @param yangNodeEvent yangNodeEvent + * @param yangNodeEvent yangNodeEvent * @param teTopologyService teTopologyService * @return NetworkNode */ @@ -992,12 +965,12 @@ public final class NodeConverter { } private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1. - urn.ietf.params.xml.ns.yang. - ietf.te.topology - .rev20160708.ietftetopology - .tenodeconnectivitymatrixabs - .ConnectivityMatrix yangConnMatrix, - ConnectivityMatrix oldTeConnMatrix) { + urn.ietf.params.xml.ns.yang. + ietf.te.topology + .rev20160708.ietftetopology + .tenodeconnectivitymatrixabs + .ConnectivityMatrix yangConnMatrix, + ConnectivityMatrix oldTeConnMatrix) { long id = yangConnMatrix.id(); ElementType from = new TeLinkId((long) (yangConnMatrix.from().tpRef())); diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java index 40c8025a3b..3a393d6eaa 100644 --- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java +++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/TeTopologyService.java @@ -158,4 +158,11 @@ public interface TeTopologyService * @return value of termination point key */ TerminationPointKey terminationPointKey(TeLinkTpGlobalKey teTpKey); + + /** + * Returns the TE controller global identification. + * + * @return value of controller id + */ + long teContollerId(); } diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java index fd419eefbb..9bfa179ad8 100644 --- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java +++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/DefaultTunnelTerminationPoint.java @@ -15,16 +15,17 @@ */ package org.onosproject.tetopology.management.api.node; +import java.util.Arrays; +import java.util.BitSet; +import java.util.List; + +import org.onosproject.tetopology.management.api.EncodingType; +import org.onosproject.tetopology.management.api.SwitchingType; + import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import org.onosproject.tetopology.management.api.EncodingType; -import org.onosproject.tetopology.management.api.SwitchingType; - -import java.util.Arrays; -import java.util.BitSet; -import java.util.List; /** * Default implementation of a tunnel termination point. @@ -37,6 +38,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { private final List interLayerLockList; private final List localLinkConnectivityList; private final float[] availAdaptBandwidth; + private final TtpKey supportTtpKey; /** * Create a tunnel termination point. @@ -50,6 +52,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { * @param localLinkConnectivityList the local link connectivity list * @param availAdaptBandwidth the remaining adaptation bandwidth * at each priority level + * @param supportTtpKey supporting TTP key from underlay topology */ public DefaultTunnelTerminationPoint(long ttpId, SwitchingType switchingLayer, @@ -57,7 +60,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { BitSet flags, List interLayerLockList, List localLinkConnectivityList, - float[] availAdaptBandwidth) { + float[] availAdaptBandwidth, + TtpKey supportTtpKey) { this.ttpId = ttpId; this.switchingLayer = switchingLayer; this.encodingLayer = encodingLayer; @@ -69,6 +73,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { this.availAdaptBandwidth = availAdaptBandwidth != null ? Arrays.copyOf(availAdaptBandwidth, availAdaptBandwidth.length) : null; + this.supportTtpKey = supportTtpKey; } @Override @@ -115,11 +120,16 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { return Arrays.copyOf(availAdaptBandwidth, availAdaptBandwidth.length); } + @Override + public TtpKey supportingTtpId() { + return supportTtpKey; + } + @Override public int hashCode() { return Objects.hashCode(ttpId, switchingLayer, encodingLayer, flags, interLayerLockList, localLinkConnectivityList, - Arrays.hashCode(availAdaptBandwidth)); + Arrays.hashCode(availAdaptBandwidth), supportTtpKey); } @Override @@ -135,7 +145,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { Objects.equal(flags, that.flags) && Objects.equal(interLayerLockList, that.interLayerLockList) && Objects.equal(localLinkConnectivityList, that.localLinkConnectivityList) && - Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth); + Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth) && + Objects.equal(supportTtpKey, that.supportTtpKey); } return false; } @@ -150,6 +161,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint { .add("interLayerLockList", interLayerLockList) .add("localLinkConnectivityList", localLinkConnectivityList) .add("availAdaptBandwidth", availAdaptBandwidth) + .add("supportTtpKey", supportTtpKey) .toString(); } + } diff --git a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java index 8da43d2002..5f7cccbfc5 100644 --- a/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java +++ b/apps/tetopology/api/src/main/java/org/onosproject/tetopology/management/api/node/TunnelTerminationPoint.java @@ -15,12 +15,12 @@ */ package org.onosproject.tetopology.management.api.node; -import org.onosproject.tetopology.management.api.EncodingType; -import org.onosproject.tetopology.management.api.SwitchingType; - import java.util.BitSet; import java.util.List; +import org.onosproject.tetopology.management.api.EncodingType; +import org.onosproject.tetopology.management.api.SwitchingType; + /** * Representation of a tunnel termination point. */ @@ -88,4 +88,11 @@ public interface TunnelTerminationPoint { * @return list of available adaptation bandwidth */ float[] availAdaptBandwidth(); + + /** + * Returns the supporting TTP identifier. + * + * @return the supporting TTP key + */ + TtpKey supportingTtpId(); } diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java index 4f75d76e00..3d6be15ff7 100644 --- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java +++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/DistributedTeTopologyStore.java @@ -39,6 +39,7 @@ import java.util.BitSet; import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -137,7 +138,7 @@ public class DistributedTeTopologyStore implements TeTopologyStore { private static final String STORE_NAME = "TE_NETWORK_TOPOLOGY_STORE"; private static final String TETOPOLOGYKEY_INTERNALTETOPOLOGY = "TeTopologyKey-InternalTeTopology"; - private static final String NETWORKID_NETWORK = "NetworkId-Network"; + private static final String NETWORKID_NETWORK = "NetworkId-InternalNetwork"; private static final String TENODEKEY_INTERNALTENODE = "TeNodeKey-InternalTeNode"; private static final String CONNMATRIXKEY_CONNECTIVITYMATRIX = "ConnMatrixKey-ConnectivityMatrix"; private static final String NETWORKNODEKEY_INTERNALNETWORKNODE = "NetworkNodeKey-InternalNetworkNode"; @@ -199,7 +200,8 @@ public class DistributedTeTopologyStore // Track termination point keys by TE termination point Key private ConsistentMap tpKeyConsistentMap; private Map tpKeyMap; - private BlockingQueue mapEventQueue; + private final BlockingQueue mapEventQueue = new LinkedBlockingQueue<>(); + private long providerId; private static final Serializer TETOPOLOGY_SERIALIZER = Serializer .using(new KryoNamespace.Builder().register(KryoNamespaces.API) @@ -373,6 +375,7 @@ public class DistributedTeTopologyStore tpKeyMap.clear(); ttpConsistentMap.destroy(); ttpMap.clear(); + mapEventQueue.clear(); log.info("Stopped"); } @@ -454,10 +457,6 @@ public class DistributedTeTopologyStore private class InternalTeNodeListener implements MapEventListener { @Override public void event(MapEvent event) { - // Event should be ignored when the topology is not there. - if (teTopologyMap.get(event.key().teTopologyKey()) == null) { - return; - } Type type = null; switch (event.type()) { case INSERT: @@ -499,10 +498,6 @@ public class DistributedTeTopologyStore private class InternalNetworkNodeListener implements MapEventListener { @Override public void event(MapEvent event) { - // Event should be ignored when the network is not there. - if (networkMap.get(event.key().networkId()) == null) { - return; - } Type type = null; switch (event.type()) { case INSERT: @@ -544,11 +539,6 @@ public class DistributedTeTopologyStore private class InternalTeLinkListener implements MapEventListener { @Override public void event(MapEvent event) { - // Event should be ignored when the topology or locol node is not there. - if (teTopologyMap.get(event.key().teTopologyKey()) == null || - teNodeMap.get(event.key().teNodeKey()) == null) { - return; - } Type type = null; switch (event.type()) { case INSERT: @@ -589,10 +579,6 @@ public class DistributedTeTopologyStore private class InternalNetworkLinkListener implements MapEventListener { @Override public void event(MapEvent event) { - // Event should be ignored when the network is not there. - if (networkMap.get(event.key().networkId()) == null) { - return; - } Type type = null; switch (event.type()) { case INSERT: @@ -819,6 +805,7 @@ public class DistributedTeTopologyStore @Override public void updateNetwork(Network network) { + log.debug("updateNetwork {}", network); InternalNetwork curNetwork = networkMap.get(network.networkId()); TeTopologyKey topoKey = null; if (network.teTopologyId() != null) { @@ -1415,8 +1402,8 @@ public class DistributedTeTopologyStore } @Override - public void setMapEventQueue(BlockingQueue queue) { - mapEventQueue = queue; + public BlockingQueue mapEventQueue() { + return mapEventQueue; } @Override diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java index b980159fba..a4e6032714 100644 --- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java +++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyConfig.java @@ -31,12 +31,12 @@ public class TeTopologyConfig extends Config { private static final String TENODE_ID_END = "tenode-id-end"; /** - * Retrieves TE topology provider identifier. - * - * @return provider Id - * @throws ConfigException if the parameters are not correctly configured - * or conversion of the parameters fails - */ + * Retrieves TE topology provider identifier. + * + * @return provider Id + * @throws ConfigException if the parameters are not correctly configured + * or conversion of the parameters fails + */ public long providerId() throws ConfigException { try { return object.path(PROVIDER_ID).asLong(); @@ -45,49 +45,49 @@ public class TeTopologyConfig extends Config { } } - /** - * Retrieves TE node starting IPv4 address. - * - * @return the IPv4 address - * @throws ConfigException if the parameters are not correctly configured - * or conversion of the parameters fails - */ - public Ip4Address teNodeIpStart() throws ConfigException { + /** + * Retrieves TE node starting IPv4 address. + * + * @return the IPv4 address + * @throws ConfigException if the parameters are not correctly configured + * or conversion of the parameters fails + */ + public Ip4Address teNodeIpStart() throws ConfigException { try { return Ip4Address.valueOf(object.path(TENODE_ID_START).asText()); } catch (IllegalArgumentException e) { throw new ConfigException(CONFIG_VALUE_ERROR, e); } - } + } - /** - * Retrieves TE node end IPv4 address. - * - * @return the IPv4 address - * @throws ConfigException if the parameters are not correctly configured or - * conversion of the parameters fails - */ - public Ip4Address teNodeIpEnd() throws ConfigException { - try { - return Ip4Address.valueOf(object.path(TENODE_ID_END).asText()); - } catch (IllegalArgumentException e) { - throw new ConfigException(CONFIG_VALUE_ERROR, e); - } - } + /** + * Retrieves TE node end IPv4 address. + * + * @return the IPv4 address + * @throws ConfigException if the parameters are not correctly configured + * or conversion of the parameters fails + */ + public Ip4Address teNodeIpEnd() throws ConfigException { + try { + return Ip4Address.valueOf(object.path(TENODE_ID_END).asText()); + } catch (IllegalArgumentException e) { + throw new ConfigException(CONFIG_VALUE_ERROR, e); + } + } - /** - * Retrieves if this is a MDSC(Multi-Domain Super Controller). - * - * @return MDSC value - * @throws ConfigException if the parameters are not correctly configured or - * conversion of the parameters fails - */ - public String mdsc() throws ConfigException { - try { - return object.path(MDSC).asText(); - } catch (IllegalArgumentException e) { - throw new ConfigException(CONFIG_VALUE_ERROR, e); - } - } + /** + * Retrieves if this is a MDSC(Multi-Domain Super Controller). + * + * @return MDSC value + * @throws ConfigException if the parameters are not correctly configured or + * conversion of the parameters fails + */ + public String mdsc() throws ConfigException { + try { + return object.path(MDSC).asText(); + } catch (IllegalArgumentException e) { + throw new ConfigException(CONFIG_VALUE_ERROR, e); + } + } } diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java index 1407e0c426..30ca4e254f 100644 --- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java +++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyManager.java @@ -40,6 +40,7 @@ import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_ import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_NODE_UPDATED; import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_ADDED; import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_REMOVED; +import static org.onosproject.tetopology.management.api.link.TeLink.BIT_ACCESS_INTERDOMAIN; import static org.onosproject.tetopology.management.impl.TeMgrUtil.linkBuilder; import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkBuilder; import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkLinkKey; @@ -51,9 +52,7 @@ import static org.onosproject.tetopology.management.impl.TeMgrUtil.toNetworkLink import java.util.BitSet; import java.util.List; import java.util.Map; -import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -113,6 +112,7 @@ import org.onosproject.tetopology.management.api.link.UnderlayPath; import org.onosproject.tetopology.management.api.node.CommonNodeData; import org.onosproject.tetopology.management.api.node.ConnectivityMatrix; import org.onosproject.tetopology.management.api.node.DefaultTeNode; +import org.onosproject.tetopology.management.api.node.DefaultTunnelTerminationPoint; import org.onosproject.tetopology.management.api.node.NetworkNode; import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject; import org.onosproject.tetopology.management.api.node.NetworkNodeKey; @@ -176,8 +176,6 @@ public class TeTopologyManager public TeTopologyStore store; private TeTopologyStoreDelegate delegate = this::post; - private final BlockingQueue eventQueue = new LinkedBlockingQueue<>(); - private final BlockingQueue mapEventQueue = new LinkedBlockingQueue<>(); private final ConfigFactory factory = new ConfigFactory(APP_SUBJECT_FACTORY, TeTopologyConfig.class, @@ -205,7 +203,6 @@ public class TeTopologyManager */ public void activateBasics() { store.setDelegate(delegate); - store.setMapEventQueue(mapEventQueue); store.setProviderId(providerId); eventDispatcher.addSink(TeTopologyEvent.class, listenerRegistry); } @@ -238,7 +235,6 @@ public class TeTopologyManager cfgService.unregisterConfigFactory(factory); executor.shutdownNow(); executor = null; - eventQueue.clear(); log.info("Stopped"); } @@ -315,7 +311,7 @@ public class TeTopologyManager public void run() { try { TeTopologyMapEvent event; - while ((event = mapEventQueue.take()) != null) { + while ((event = store.mapEventQueue().take()) != null) { switch (event.type()) { case TE_TOPOLOGY_ADDED: case TE_TOPOLOGY_UPDATED: @@ -335,6 +331,10 @@ public class TeTopologyManager break; case TE_NODE_ADDED: case TE_NODE_UPDATED: + if (store.teTopology(event.teNodeKey().teTopologyKey()) == null) { + // Event should be ignored when the topology is not there. + break; + } TeNode teNode = store.teNode(event.teNodeKey()); post(new TeTopologyEvent(event.type(), new TeNodeEventSubject(event.teNodeKey(), teNode))); @@ -344,6 +344,10 @@ public class TeTopologyManager } break; case TE_NODE_REMOVED: + if (store.teTopology(event.teNodeKey().teTopologyKey()) == null) { + // Event should be ignored when the topology is not there. + break; + } post(new TeTopologyEvent(TE_NODE_REMOVED, new TeNodeEventSubject(event.teNodeKey(), null))); if (mdsc && isCustomizedLearnedTopology(event.teNodeKey().teTopologyKey())) { @@ -352,6 +356,11 @@ public class TeTopologyManager break; case TE_LINK_ADDED: case TE_LINK_UPDATED: + if (store.teTopology(event.teLinkKey().teTopologyKey()) == null || + store.teNode(event.teLinkKey().teNodeKey()) == null) { + // Event should be ignored when the topology or node is not there. + break; + } TeLink teLink = store.teLink(event.teLinkKey()); post(new TeTopologyEvent(event.type(), new TeLinkEventSubject(event.teLinkKey(), teLink))); @@ -362,6 +371,11 @@ public class TeTopologyManager } break; case TE_LINK_REMOVED: + if (store.teTopology(event.teLinkKey().teTopologyKey()) == null || + store.teNode(event.teLinkKey().teNodeKey()) == null) { + // Event should be ignored when the topology or node is not there. + break; + } post(new TeTopologyEvent(TE_LINK_REMOVED, new TeLinkEventSubject(event.teLinkKey(), null))); if (mdsc && isCustomizedLearnedTopology(event.teLinkKey().teTopologyKey())) { @@ -382,21 +396,37 @@ public class TeTopologyManager break; case NODE_ADDED: case NODE_UPDATED: + if (store.network(event.networkNodeKey().networkId()) == null) { + // Event should be ignored when the network is not there. + break; + } NetworkNode node = store.networkNode(event.networkNodeKey()); post(new TeTopologyEvent(event.type(), new NetworkNodeEventSubject(event.networkNodeKey(), node))); break; case NODE_REMOVED: + if (store.network(event.networkNodeKey().networkId()) == null) { + // Event should be ignored when the network is not there. + break; + } post(new TeTopologyEvent(NODE_REMOVED, new NetworkNodeEventSubject(event.networkNodeKey(), null))); break; case LINK_ADDED: case LINK_UPDATED: + if (store.network(event.networkLinkKey().networkId()) == null) { + // Event should be ignored when the network is not there. + break; + } NetworkLink link = store.networkLink(event.networkLinkKey()); post(new TeTopologyEvent(event.type(), new NetworkLinkEventSubject(event.networkLinkKey(), link))); break; case LINK_REMOVED: + if (store.network(event.networkLinkKey().networkId()) == null) { + // Event should be ignored when the network is not there. + break; + } post(new TeTopologyEvent(LINK_REMOVED, new NetworkLinkEventSubject(event.networkLinkKey(), null))); break; @@ -452,7 +482,21 @@ public class TeTopologyManager srcNode.opStatus(), srcNode.flags()); // No change Map connMatrices = srcNode.connectivityMatrices(); List teLinkIds = srcNode.teLinkIds(); // No change - Map ttps = srcNode.tunnelTerminationPoints(); + Map ttps = null; + if (MapUtils.isNotEmpty(srcNode.tunnelTerminationPoints())) { + ttps = Maps.newHashMap(); + for (Map.Entry entry : srcNode.tunnelTerminationPoints().entrySet()) { + TunnelTerminationPoint ttp = entry.getValue(); + ttps.put(entry.getKey(), + new DefaultTunnelTerminationPoint(ttp.ttpId(), ttp.switchingLayer(), + ttp.encodingLayer(), ttp.flags(), + ttp.interLayerLockList(), + ttp.localLinkConnectivityList(), + ttp.availAdaptBandwidth(), + null)); //Remove supporting TTP Ids + } + } + List teTpIds = srcNode.teTerminationPointIds(); // No change DefaultTeNode newNode = new DefaultTeNode(mergedTeNodeId, underlayTopologyId, supportTeNodeId, sourceTeNodeId, common, connMatrices, teLinkIds, @@ -504,8 +548,21 @@ public class TeTopologyManager exLink.maxAvailLspBandwidth(), exLink.minAvailLspBandwidth(), exLink.oduResource()); + BitSet flags = exLink.flags(); + if (peerTeLinkKey != null && + externalLink != null && externalLink.plugId() != null) { + // Assuming this is an inter-domain link which is merged with its peer, + // needs to clear BIT_ACCESS_INTERDOMAIN + flags.clear(BIT_ACCESS_INTERDOMAIN); + } else if (peerTeLinkKey == null && + externalLink != null && externalLink.plugId() != null) { + // Assuming this is an inter-domain link which lost its peer, + // needs to clear BIT_ACCESS_INTERDOMAIN + flags.set(BIT_ACCESS_INTERDOMAIN); + } + CommonLinkData common = new CommonLinkData(exLink.adminStatus(), exLink.opStatus(), - exLink.flags(), exLink.switchingLayer(), exLink.encodingLayer(), + flags, exLink.switchingLayer(), exLink.encodingLayer(), externalLink, underlayPath, teAttributes, exLink.administrativeGroup(), exLink.interLayerLocks(), bandwidth); @@ -793,19 +850,18 @@ public class TeTopologyManager teNodeIpEnd = cfgService.getConfig(appId, TeTopologyConfig.class) .teNodeIpEnd(); mdsc = cfgService.getConfig(appId, TeTopologyConfig.class) - .mdsc().equalsIgnoreCase(MDSC_MODE); + .mdsc().equals(MDSC_MODE); nextTeNodeId = teNodeIpStart.toInt(); } catch (ConfigException e) { log.error("Configuration error {}", e); } } - @Override public boolean isRelevant(NetworkConfigEvent event) { return event.configClass().equals(TeTopologyConfig.class) && (event.type() == CONFIG_ADDED || - event.type() == CONFIG_UPDATED); + event.type() == CONFIG_UPDATED); } } @@ -826,6 +882,7 @@ public class TeTopologyManager @Override public TeTopology teTopology(TeTopologyKey topologyId) { if (mergedTopology != null && + topologyId != null && topologyId.equals(mergedTopologyKey)) { return mergedTopology; } @@ -955,4 +1012,9 @@ public class TeTopologyManager KeyId.keyId(Long.toString(teTpKey.teLinkTpId()))) : store.terminationPointKey(teTpKey); } + + @Override + public long teContollerId() { + return providerId; + } } diff --git a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java index bede7b381c..09b8db7f34 100644 --- a/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java +++ b/apps/tetopology/app/src/main/java/org/onosproject/tetopology/management/impl/TeTopologyStore.java @@ -274,11 +274,11 @@ public interface TeTopologyStore void setNextTeNodeId(TeTopologyKey topologyKey, long nextNodeId); /** - * Sets the queue to store the events originating from consistent maps. + * Returns the queue to store the events originating from consistent maps. * - * @param queue a blocking queue + * @return value of the blocking queue */ - void setMapEventQueue(BlockingQueue queue); + BlockingQueue mapEventQueue(); /** * Sets the provider ID. diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java index 8ce1241df2..9ed72baddd 100644 --- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java +++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/DefaultBuilder.java @@ -113,7 +113,7 @@ public final class DefaultBuilder { EncodingType.LSP_ENCODING_ODUK, new BitSet(TeConstants.FLAG_MAX_BITS), null, null, - ODU2BW); //10G for ODU2 + ODU2BW, null); //10G for ODU2 } private static TerminationPoint tpBuilder(long teTpId) { diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java index 7f4bb80371..f4ff72d839 100644 --- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java +++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/SimpleTeTopologyStore.java @@ -1025,13 +1025,14 @@ public class SimpleTeTopologyStore return tpKeyMap.get(teTpKey); } - @Override - public void setMapEventQueue(BlockingQueue queue) { - } - @Override public void setProviderId(long providerId) { this.providerId = providerId; } + + @Override + public BlockingQueue mapEventQueue() { + return null; + } } diff --git a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java index 03d21fb0d0..f6c0db02e2 100644 --- a/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java +++ b/apps/tetopology/app/src/test/java/org/onosproject/tetopology/management/TeTopologyManagerTest.java @@ -128,6 +128,7 @@ public class TeTopologyManagerTest { .teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(), DefaultBuilder.teNode().teNodeId())); assertNotNull("TeNode should be found", teNode); + assertTrue("TE node should be identical", teNode.equals(DefaultBuilder.teNode())); assertTrue("Number of TTPs should be 1", teNode.tunnelTerminationPoints().size() == 1); TeLink teLink = service diff --git a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java index a377e51168..f75027d6ac 100644 --- a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java +++ b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java @@ -275,7 +275,7 @@ public class TeTopologyRestconfProvider extends AbstractProvider //Convert the YO to TE Core data and update TE Core. for (Network nw : ietfNetwork.networks().network()) { topologyProviderService.networkUpdated( - NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks())); + NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks(), deviceId)); } }